/* ══════════════════════════════════════════════════════════════════════
   HAWA stylesheet
   ─────────────────────────────────────────────────────────────────────
   1. Fonts + design tokens (:root) + base reset + scrollbars
   2. Components: topbar, buttons, chips, cards, forms, badges, tables
   3. Pages (base rules): watch, admin, story, subscribe, landing, home,
      account, playlist, reels viewer
   4. Light theme + a11y
   5. REFINEMENT LAYER (near the end) — craft pass that cascades over the
      above: motion, hover/focus polish, glass topbar, per-page tuning.
   6. Feature blocks appended after the refinement layer: AUTH screen,
      SUBSCRIBE, ACCOUNT, LIBRARY, PLAYLIST/404, iconography, toast, etc.
   Order matters: later rules win. Keep new work in section 5/6.
   ══════════════════════════════════════════════════════════════════════ */

/* ===== self-hosted fonts ===== */
@font-face{
  font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/fonts/inter-400.woff2') format('woff2');
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;
  src:url('/static/fonts/inter-700.woff2') format('woff2');
}
@font-face{
  font-family:'Archivo Black';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/fonts/archivo-black.woff2') format('woff2');
}

:root{
  /* ---- brand accent (used sparingly: primary CTA, brand, active, liked) ---- */
  --pink:#ff2e88; --pink-dark:#e0196f; --pink-bright:#ff5c9c;
  --pink-glow:rgba(255,46,136,.28);
  --pink-soft:#ffe4ef;
  --pink-a08:rgba(255,46,136,.07);
  --pink-a14:rgba(255,46,136,.12);
  --pink-a25:rgba(255,46,136,.22);

  /* ---- neutral dark surfaces (YouTube-calm; no warm tint) ---- */
  --black:#0f0f0f;               /* page ground */
  --bg:#0f0f0f;                  /* chrome bg (topbar, drawers) — same as ground */
  --warm-2:#181818;
  --panel:#1c1c1c;              /* card / elevated surface */
  --panel2:#272727;             /* nested / input / secondary-button surface */
  --panel3:#333333;             /* hover on nested */
  --line:#2e2e2e;              /* hairline border — barely there */
  --line-strong:#454545;
  --input-bg:#1c1c1c;
  --txt:#f1f1f1; --txt-dim:#d6d6d6; --mut:#a3a3a3;
  --white:#ffffff;

  /* semantic state colors (muted, not neon) */
  --ok:#3fb950; --ok-bg:#122417;
  --warn:#d9a94a; --warn-bg:#241f12;
  --err:#f0616d; --err-bg:#2a1416;

  /* ---- radii ---- */
  --radius:12px; --radius-sm:9px; --radius-lg:18px; --radius-pill:999px;

  /* ---- elevation (soft; the UI leans on spacing, not shadows) ---- */
  --e1:0 1px 2px rgba(0,0,0,.25);
  --e2:0 3px 10px rgba(0,0,0,.3);
  --e3:0 10px 26px rgba(0,0,0,.4);
  --e4:0 20px 48px rgba(0,0,0,.5);
  --glow:0 4px 16px var(--pink-a25);
  --card-shadow:none;
  --card-shadow-hover:var(--e2);

  /* ---- motion ---- */
  --dur-1:.12s; --dur-2:.2s; --dur-3:.32s; --dur-4:.5s;
  --ease:cubic-bezier(.4,0,.2,1);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --ease-spring:cubic-bezier(.34,1.56,.64,1);

  /* ---- z-index scale ---- */
  --z-drawer:200; --z-scrim:199; --z-topbar:100; --z-fab:150;
  --z-menu:240; --z-notif:300; --z-toast:2000; --z-reel:1000;

  /* ---- type ---- */
  --font:'Inter','Segoe UI',system-ui,-apple-system,sans-serif;
  --display:'Archivo Black','Arial Black',sans-serif;
  --fs-hero:clamp(3rem,9vw,5.2rem);
  --fs-h1:clamp(1.9rem,4.5vw,2.7rem);
  --fs-h2:clamp(1.4rem,3vw,1.9rem);
  --fs-h3:1.15rem;

  /* ---- spacing ---- */
  --sp-xs:8px; --sp-sm:16px; --sp-md:28px; --sp-lg:48px; --sp-xl:80px;

  --focus:2.5px solid var(--pink);
  color-scheme:dark;
}
.display{font-family:var(--display);font-weight:400}
html{background:var(--black);scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{font-family:var(--font);color:var(--txt);background:var(--black);margin:0;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  font-feature-settings:"kern" 1,"liga" 1}
a{color:inherit;text-decoration:none}
*{box-sizing:border-box}
::selection{background:var(--pink);color:#fff}
:where(img,video,svg){max-width:100%}
hr{border:none;border-top:1px solid var(--line)}

/* quiet, on-brand scrollbars */
*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:99px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:var(--mut)}

/* ===== top bar ===== */
.topbar{position:sticky;top:0;z-index:100;display:flex;align-items:center;gap:18px;
  min-width:0;padding:10px 16px;background:var(--bg);border-bottom:1px solid var(--line)}
.topbar.slim{padding:8px 16px}
.top-left{display:flex;align-items:center;gap:12px;flex-shrink:0;
  padding-right:14px;margin-right:2px;border-right:1px solid var(--line)}
/* Everything in the header used to refuse to shrink, so on a 360px phone the
   right-hand group ran 54px off the side of the screen and the whole page
   scrolled sideways. The name is the one part that can give ground. */
.brand{display:flex;align-items:center;gap:11px;flex:0 1 auto;min-width:0;overflow:hidden}
.brand .name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.brand img{height:44px;width:44px;object-fit:cover;border-radius:50%;border:2.5px solid var(--pink)}
.brand .name{font-family:var(--display);font-weight:400;font-size:1.35rem;letter-spacing:.18em;line-height:1.1}
.brand .name b{color:var(--pink)}
.brand .tag{font-size:.62rem;color:var(--mut);letter-spacing:.06em;font-style:italic}
.navlinks{display:flex;gap:9px;align-items:center;flex-shrink:0;margin-left:auto}

/* buttons */
.btn{display:inline-block;padding:10px 22px;border-radius:999px;font-weight:700;font-size:.88rem;
  cursor:pointer;border:none;transition:.18s;text-align:center;font-family:var(--font)}
/* White on the brand pink (#ff2e88) measures 3.5:1 — enough for large or
   bold display type, not for a 15px button label, and these buttons carry
   the words that decide things: Pay, Comment, Join. The darker pink keeps
   the brand and clears 4.5:1. The bright pink stays where it belongs, on
   headings and accents that are large enough to carry it. */
.btn-pink{background:var(--pink-dark);color:#fff}
.btn-pink:hover{background:#c8155f}
.btn-line{border:1.5px solid var(--line);color:var(--txt);background:transparent}
.btn-line:hover{border-color:var(--pink);color:var(--pink)}
.btn-sm{padding:7px 15px;font-size:.78rem}

/* chips */
.chips{display:flex;gap:10px;margin-bottom:var(--sp-md);overflow-x:auto;padding-bottom:4px}
.chip{background:var(--panel2);color:var(--txt);border:1px solid var(--line);border-radius:999px;
  padding:7px 16px;font-size:.82rem;font-weight:600;cursor:pointer;white-space:nowrap;font-family:var(--font)}
.chip:hover{background:#2a2a32;border-color:#3a3a44}
.chip.active{background:#fff;color:#000;border-color:#fff}
.chip.small{padding:4px 12px;font-size:.72rem;cursor:default}
.pink{color:var(--pink)}

/* ===== layout ===== */
.shell{display:flex;min-height:calc(100vh - 65px)}
.content{flex:1;padding:var(--sp-md) var(--sp-lg);min-width:0;max-width:1480px;margin:0 auto;transition:margin-left .28s ease}
/* Drawer PUSHES the main content from the LEFT (drawer opens on left, content shifts right) */
body.drawer-push .content{margin-left:300px}
/* Mobile: drawer becomes a clean left-side panel that overlays */
@media (max-width:680px){
  body.drawer-push .content{margin-left:0}
  .site-drawer{width:84vw;box-shadow:16px 0 60px rgba(0,0,0,.6)}
  .drawer-scrim{background:rgba(0,0,0,.55)}
  .drawer-scrim.show{opacity:1;pointer-events:auto}
}

/* ===== video grid + cards ===== */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--sp-lg) var(--sp-md)}
.vcard{cursor:pointer;display:flex;flex-direction:column;border-radius:var(--radius);
  background:var(--panel);border:1px solid var(--line);overflow:hidden;
  box-shadow:var(--card-shadow);transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease}
.vcard:hover{transform:translateY(-4px);box-shadow:var(--card-shadow-hover);border-color:var(--pink)}
.vthumb{aspect-ratio:16/9;background:linear-gradient(135deg,#241021,var(--panel2));
  border:none;border-bottom:1px solid var(--line);border-radius:0;position:relative;
  display:flex;align-items:center;justify-content:center;overflow:hidden;transition:.15s}
.vthumb .pl{width:52px;height:52px;border-radius:50%;background:rgba(255,46,136,.92);
  display:flex;align-items:center;justify-content:center;font-size:1.25rem;box-shadow:0 6px 18px rgba(255,46,136,.45)}
.vthumb .dur{position:absolute;bottom:8px;right:8px;background:rgba(0,0,0,.85);
  font-size:.68rem;font-weight:700;padding:3px 8px;border-radius:6px}
.vinfo{display:flex;gap:12px;padding:14px 14px 16px}
.vava{width:38px;height:38px;border-radius:50%;object-fit:cover;border:2px solid var(--pink);flex-shrink:0}
.vt h3{font-size:.94rem;font-weight:600;line-height:1.35;margin:0;color:var(--txt);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.vt p{margin:5px 0 0;font-size:.76rem;color:var(--mut)}
.vbadges{display:flex;gap:6px;margin-top:7px;flex-wrap:wrap}
.badge{font-size:.64rem;font-weight:800;letter-spacing:.08em;padding:3px 10px;border-radius:999px;text-transform:uppercase}
.badge-free{background:#12351c;color:#4ade80}
.badge-paid{background:var(--pink-soft);color:#c2185b}
/* secondary "watch free trailer" action under a members-only card (not a badge) */
.vsub{margin-top:6px}
.vc-trailer{display:inline-block;font-size:.72rem;font-weight:700;color:var(--pink);
  text-decoration:none;border:1px solid var(--pink-soft);border-radius:999px;padding:2px 10px}
.vc-trailer:hover{background:var(--pink);color:#fff}

/* skeletons & empty */
.skel{aspect-ratio:16/9;border-radius:var(--radius);
  background:linear-gradient(100deg,var(--panel) 30%,#2b1a24 50%,var(--panel) 70%);
  background-size:200% 100%;animation:sk 1.4s ease-in-out infinite}
@keyframes sk{to{background-position:-200% 0}}
.empty{text-align:center;padding:70px 20px;color:var(--mut)}
.empty h3{color:var(--txt);margin:10px 0 4px}

/* ===== watch page ===== */
.watch-shell{display:flex;gap:26px;padding:24px;max-width:1500px;margin:0 auto}
.watch-main{flex:1;min-width:0;max-width:900px}
.player{width:100%;aspect-ratio:16/9;background:#000;border-radius:var(--radius);display:block}
.lockface{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  font-size:3rem;color:var(--mut);background:var(--panel)}
.lockface small{font-size:.85rem}
.trailer-note{margin-top:10px;font-size:.78rem;font-weight:800;letter-spacing:.1em;color:var(--pink);text-transform:uppercase}
.wtitle{font-family:var(--display);font-weight:400;font-size:var(--fs-h2);margin:20px 0 8px;line-height:1.15;letter-spacing:.005em}
.wmeta-row{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.wmeta{color:var(--mut);font-size:.85rem}
.descbox{background:var(--panel);border-radius:var(--radius);padding:14px 16px;margin-top:14px;font-size:.88rem;line-height:1.55}
.lockpanel{display:flex;gap:18px;align-items:flex-start;background:linear-gradient(120deg,#2a0a1c,#17171c);
  border:1.5px solid var(--pink);border-radius:var(--radius);padding:22px;margin-top:18px}
.lockpanel .biglock{font-size:2.4rem}
.lockpanel h3{margin:0 0 6px}
.lockpanel p{margin:0 0 14px;color:var(--mut);font-size:.88rem;line-height:1.5}
.upnext{width:360px;flex-shrink:0}
.upnext h3{font-size:.95rem;margin:0 0 14px}
.unrow{display:flex;gap:10px;padding:6px;border-radius:10px;margin-bottom:4px}
.unrow:hover{background:var(--panel)}
.unthumb{width:150px;aspect-ratio:16/9;border-radius:8px;object-fit:cover;background:var(--panel2);flex-shrink:0}
.unrow img.unthumb{border:1px solid var(--line)}
.unrow h4{margin:0;font-size:.83rem;font-weight:600;line-height:1.3;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.unrow p{margin:4px 0 0;font-size:.72rem;color:var(--mut)}

/* playlist hero */
.pl-wrap{max-width:1200px;margin:0 auto;padding:28px 24px}
.pl-hero{display:flex;gap:22px;align-items:center;background:linear-gradient(120deg,#310b21,var(--panel));
  border:1px solid var(--line);border-radius:var(--radius);padding:28px;margin-bottom:26px}
.pl-folder{font-size:3rem}
.pl-hero h1{font-family:var(--display);font-weight:400;margin:0 0 4px;font-size:1.6rem}
.pl-hero p{margin:0 0 10px;color:var(--mut);font-size:.9rem}

/* ===== forms / panels ===== */
.panel{max-width:420px;margin:56px auto;background:#fff;border-radius:var(--radius);
  padding:36px}
.panel.dark{background:var(--panel);border:1px solid var(--line);box-shadow:none;
  padding:44px 40px}
.panel.dark h2{font-family:var(--display);font-weight:400;font-size:1.3rem}
.panel h2{text-align:center;margin-bottom:4px;font-family:var(--display);font-weight:400;letter-spacing:.02em}
.panel.dark h2{color:var(--txt)}
.panel .sub{text-align:center;color:var(--grey,#6b6b74);font-size:.86rem;margin-bottom:22px}
.panel.dark .sub{color:var(--mut)}
label{display:block;font-size:.8rem;font-weight:700;margin:13px 0 6px}
.panel input,.panel textarea,.panel select,.admlight input,.admlight textarea,.admlight select{
  width:100%;padding:11px 13px;border:1.5px solid #eee0e8;border-radius:10px;font-size:.93rem;
  font-family:var(--font);outline:none;background:#fff;color:#111}
.panel.dark input,.panel.dark textarea,.panel.dark select{background:var(--panel2);border-color:var(--line);color:var(--txt)}
input:focus,textarea:focus{border-color:var(--pink)}
.msg{text-align:center;font-size:.85rem;margin-top:13px;min-height:1.2em}
.msg.err{color:#ff5c97}.msg.ok{color:#4ade80}
.center{text-align:center}.mt{margin-top:16px}

/* ===== admin (dark console) — YouTube Studio style ===== */
.adm-wrap{max-width:1180px;margin:0 auto;padding:26px}
/* channel snapshot (Studio dashboard top row) */
.adm-snapshot{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px}
.snap{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px}
.snap .n{font-size:1.7rem;font-weight:800;color:#fff;letter-spacing:.01em}
.snap .l{font-size:.7rem;color:var(--mut);text-transform:uppercase;letter-spacing:.1em;margin-top:4px}
.snap .d{font-size:.72rem;margin-top:8px;color:var(--pink)}
/* studio two-column dashboard */
.adm-cols{display:grid;grid-template-columns:1.5fr 1fr;gap:20px}
.adm-panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px}
.adm-panel h3{margin:0 0 12px;font-size:.92rem;font-family:var(--display);font-weight:400;letter-spacing:.04em}
/* latest-video performance block */
.perf{display:flex;gap:14px;align-items:center}
.perf img{width:160px;height:90px;object-fit:cover;border-radius:10px;background:var(--panel2)}
.perf .pt{font-weight:700;font-size:.95rem}
.perf .pm{font-size:.78rem;color:var(--mut);margin-top:6px}
/* content table (Studio Content tab) */
.ctable{width:100%;border-collapse:collapse}
.ctable th{text-align:left;padding:10px 10px;border-bottom:1px solid var(--line);font-size:.66rem;
  text-transform:uppercase;letter-spacing:.1em;color:var(--mut)}
.ctable td{padding:10px;border-bottom:1px solid var(--line);vertical-align:middle;font-size:.84rem}
.cthumb{width:120px;height:68px;object-fit:cover;border-radius:8px;background:var(--panel2)}
.ctitle{font-weight:600;color:#fff}
.ctitle small{display:block;color:var(--mut);font-weight:400;font-size:.74rem;margin-top:3px}
.vis{font-size:.7rem;font-weight:800;letter-spacing:.04em}
.vis.pub{color:#4ade80}.vis.members{color:#ff5c97}.vis.priv{color:var(--mut)}
.ctable tr:hover{background:rgba(255,255,255,.03)}
@media(max-width:820px){.adm-snapshot{grid-template-columns:repeat(2,1fr)}.adm-cols{grid-template-columns:1fr}.perf img{width:120px;height:68px}}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:22px;margin-bottom:20px}
.card h2{margin:0 0 6px;font-size:1.1rem;font-family:var(--display);font-weight:400;letter-spacing:.03em}
.card .sub{color:var(--mut);font-size:.8rem;margin:0 0 14px}
.upload-zone{border:2px dashed var(--pink);border-radius:var(--radius);padding:30px 16px;
  text-align:center;background:rgba(255,46,136,.07);cursor:pointer;transition:.2s;margin-bottom:14px}
.upload-zone:hover,.upload-zone.drag{background:rgba(255,46,136,.16)}
.upload-zone .uz-icon{font-size:2rem}
.upload-zone p{margin:6px 0 0;font-size:.84rem;color:var(--mut)}
table{width:100%;border-collapse:collapse;font-size:.84rem}
th{text-align:left;padding:9px 8px;border-bottom:1px solid var(--line);font-size:.68rem;
  text-transform:uppercase;letter-spacing:.09em;color:var(--mut)}
td{padding:9px 8px;border-bottom:1px solid var(--line);vertical-align:middle}
.pill{padding:3px 10px;border-radius:999px;font-size:.68rem;font-weight:800}
.pill.ok{background:#12351c;color:#4ade80}
.pill.no{background:#3d1226;color:#ff5c97}
.row-actions{display:flex;gap:6px;flex-wrap:wrap}
.progress{height:7px;border-radius:99px;background:var(--panel2);margin-top:12px;overflow:hidden;display:none}
.progress>div{height:100%;width:0;background:var(--pink);transition:width .3s}

footer{border-top:1px solid var(--line);color:var(--mut);text-align:center;padding:26px;font-size:.78rem;margin-top:40px}
footer .brandline{color:var(--txt);font-weight:800;letter-spacing:.2em;margin-bottom:4px}
footer .brandline b{color:var(--pink)}

@media(max-width:900px){
  .upnext{display:none}
  .brand .tag{display:none}
}

/* ===== shared editorial bits ===== */
.eyebrow{font-size:.7rem;font-weight:700;letter-spacing:.34em;text-transform:uppercase;
  color:var(--mut);margin-bottom:26px}
.lede{color:var(--txt-dim);font-size:1.04rem;line-height:1.65;max-width:520px;margin:0 auto 36px}
.hero-btns{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;align-items:center}
.btn.big{padding:14px 32px;font-size:.98rem}
.hero-btns .peek{font-size:.86rem;color:var(--txt-dim);text-decoration:underline;margin-left:8px}
.hero-btns .peek:hover{color:var(--pink)}

/* ===== upload studio ===== */
.upload-zone input[type=file]{margin-top:10px;color:var(--txt)}
.opt-row .check{margin-right:18px}
label.check{display:flex;align-items:center;gap:8px;font-size:.86rem;font-weight:500;margin:8px 0}
label.check input{width:auto}
input[type=datetime-local]{color-scheme:dark}

/* pills for schedule/premiere */
.pill.sched{background:#2a2410;color:#fbbf24}
.pill.prem{background:#3d1226;color:#ff5c97}

/* ===== notification bell ===== */
.bell{position:relative;background:none;border:none;font-size:1.15rem;cursor:pointer;padding:6px}
.notif-dot{position:absolute;top:2px;right:0;width:9px;height:9px;background:var(--pink);
  border-radius:50%;border:1.5px solid var(--black)}
.notif-panel{position:absolute;top:52px;right:12px;width:320px;max-width:88vw;background:var(--panel);
  border:1px solid var(--line);border-radius:12px;padding:14px;z-index:300;
  box-shadow:0 14px 44px rgba(0,0,0,.55)}
.notif-panel b{font-size:.88rem;display:block;margin-bottom:10px}
.nrow{padding:10px;border-radius:9px;font-size:.82rem;line-height:1.45;margin-bottom:4px;background:var(--panel2)}
.nrow.link{cursor:pointer}
.nrow.link:hover{outline:1.5px solid var(--pink)}
.nrow small{display:block;color:var(--mut);margin-top:4px;font-size:.68rem}

/* ===== thumbnails on cards ===== */
.vthumb-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
.vthumb .pl,.vthumb .dur{z-index:2}
.vthumb-img ~ .dur{z-index:3}
.vcard.sched .vthumb{opacity:.85}
.prem-veil{position:absolute;inset:0;z-index:2;background:rgba(13,13,15,.72);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  font-size:1.7rem;color:var(--pink)}
.prem-veil small{font-size:.74rem;font-weight:700;color:#fff;letter-spacing:.05em}
.badge.prem{background:#3d1226;color:#ff5c97}
.dl-note{margin-left:10px;font-size:.75rem;color:var(--mut)}

/* ===== UI polish (editorial touches) ===== */
.topbar{box-shadow:0 1px 0 rgba(255,46,136,.12)}
.brand .name{background:linear-gradient(90deg,#fff 60%,var(--pink));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.brand .name b{-webkit-text-fill-color:var(--pink)}
.vcard:hover h3{color:#fff}
.grid .vcard:nth-child(4n+1) .vthumb{background:linear-gradient(135deg,#310b21,#17171c)}
.grid .vcard:nth-child(4n+2) .vthumb{background:linear-gradient(135deg,#141419,#2a0a1c)}
.grid .vcard:nth-child(4n+3) .vthumb{background:linear-gradient(135deg,#1c0a2a,#17171c)}
.hero h1{text-shadow:0 4px 30px var(--pink-glow)}
.card{transition:border-color .2s}
.card:hover{border-color:#3a3a45}

/* ===== comments ===== */
.cmt-section{margin-top:34px}
.cmt-compose{display:flex;gap:12px;margin-bottom:22px}
.cmt-compose textarea{width:100%;background:var(--panel);border:1.5px solid var(--line);
  border-radius:12px;color:var(--txt);padding:11px 14px;font-size:.9rem;font-family:var(--font);
  outline:none;resize:vertical}
.cmt-compose textarea:focus{border-color:var(--pink)}
.crow{display:flex;gap:12px;padding:14px 0;border-bottom:1px solid #202028}
.crow .vava{width:36px;height:36px}
.cauthor{font-weight:700;font-size:.86rem}
.cauthor small{color:var(--mut);font-weight:400;font-size:.72rem}
.crow p{margin-top:5px;font-size:.88rem;line-height:1.55;color:#e6dfe3;white-space:pre-wrap}
.likebtn{user-select:none}
.likebtn.liked{background:var(--pink);border-color:var(--pink);color:#fff}

/* ===== account page ===== */
.acct-wrap{max-width:1000px;margin:0 auto;padding:28px 20px}
.acct-hero{display:flex;gap:22px;align-items:center;background:linear-gradient(120deg,#310b21,var(--panel));
  border:1px solid var(--line);border-radius:var(--radius);padding:28px;margin-bottom:24px}
.acct-ava{width:88px;height:88px;border-radius:50%;object-fit:cover;border:3px solid var(--pink)}
.acct-hero h1{font-family:var(--display);font-weight:400;font-size:1.7rem;margin-bottom:4px}
.acct-hero .mut{color:var(--mut);font-size:.88rem;margin:0 0 10px}
.acct-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px}
.acct-card.wide{grid-column:1/-1}

/* ===== overview dashboard ===== */
.ovgrid{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:20px}
.ovgrid .stat{flex:1;min-width:130px}
.ovcols{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.ovrow{display:flex;justify-content:space-between;gap:10px;padding:9px 12px;border-radius:9px;
  background:var(--panel2);margin-bottom:6px;font-size:.83rem;line-height:1.4}
.ovrow small{color:var(--mut);font-size:.7rem}
.dim{color:var(--mut);font-size:.84rem}
@media(max-width:700px){.ovcols{grid-template-columns:1fr}}

/* ===== premiere countdown banner ===== */
.prem-banner{display:none;align-items:center;gap:14px;background:linear-gradient(90deg,#3d1226,#17171c);
  border:1.5px solid var(--pink);border-radius:var(--radius);padding:16px 22px;margin-bottom:24px}
.prem-banner.show{display:flex}
.prem-banner .pb-icon{font-size:2rem;animation:pulse 1.6s infinite}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.15)}}
.prem-banner b{font-size:1rem}
.prem-banner small{display:block;color:#e8c7d9;font-size:.78rem;margin-top:3px}
.prem-timer{margin-left:auto;font-weight:800;font-size:1.25rem;color:var(--pink);
  font-variant-numeric:tabular-nums;text-align:right}
.prem-timer small{display:block;font-weight:600;font-size:.62rem;color:#e8c7d9;letter-spacing:.1em}

/* ===== playlist sidebar items ===== */
.sitem.pl-item{display:flex;align-items:center;gap:9px;padding:7px 12px}
.pl-cover{width:34px;height:34px;border-radius:8px;object-fit:cover;flex-shrink:0;border:1px solid var(--line)}
.pl-emoji{display:flex;align-items:center;justify-content:center;background:var(--panel2);font-size:.95rem}
.pl-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem}
.pl-count{font-size:.72rem;color:var(--mut)}
.pl-next-note{font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--pink);margin:2px 0 8px 6px}

/* ===== misc shared ===== */
.pink{color:var(--pink)!important}
.refcode{background:var(--panel2);padding:4px 8px;border-radius:6px;font-weight:800;letter-spacing:.06em}

/* ===== analytics charts ===== */
.hbar-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.hbar-label{width:170px;flex-shrink:0;font-size:.8rem;color:#e6dfe3;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.hbar{flex:1;height:16px;background:var(--panel2);border-radius:99px;overflow:hidden}
.hbar>div{height:100%;background:linear-gradient(90deg,var(--pink),#ff7ab5);border-radius:99px}
.hbar-n{width:44px;text-align:right;font-size:.78rem;color:var(--mut)}
.dbars{display:flex;align-items:flex-end;gap:6px;padding:6px 2px 0}
.dbar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px}
.dbar{width:100%;background:var(--pink);border-radius:5px 5px 0 0;opacity:.85}
.dbar:hover{opacity:1}
.dbar-col small{font-size:.58rem;color:var(--mut)}

/* ===== comment actions ===== */
.cmt-actions{display:flex;gap:10px;margin-top:8px}
.clike,.cdel{background:none;border:none;color:var(--mut);font-size:.76rem;cursor:pointer;
  padding:3px 8px;border-radius:99px;font-family:var(--font)}
.clike:hover{background:var(--panel2);color:var(--pink)}
.clike.on{color:var(--pink);font-weight:700}
.cdel:hover{color:#ff5c97;text-decoration:underline}

/* ===== light theme ===== */
html[data-theme="light"]{
  --black:#ffffff; --panel:#ffffff; --panel2:#f2f2f2; --line:#e5e5e5;
  --txt:#0f0f0f; --mut:#606060;
}
html[data-theme="light"] body{background:var(--black)}
html[data-theme="light"] .topbar{background:rgba(250,248,250,.96);box-shadow:0 1px 0 rgba(255,46,136,.15)}
html[data-theme="light"] .brand .name{-webkit-text-fill-color:#0d0d0f}
html[data-theme="light"] .brand .name b{-webkit-text-fill-color:var(--pink)}
html[data-theme="light"] .hero h1{text-shadow:none;color:#fff}
html[data-theme="light"] .topbar-search input{background:#fff;border-color:var(--line);color:#111}
html[data-theme="light"] .chip{background:#fff;color:#111;border-color:var(--line)}
html[data-theme="light"] .chip.active{background:var(--pink);color:#fff;border-color:var(--pink)}
html[data-theme="light"] .vthumb{background:linear-gradient(135deg,#ffe4ef,#f5d3e2);border-color:#f0dbe6}
html[data-theme="light"] .vcard.sched .vthumb{opacity:.9}
html[data-theme="light"] .prem-veil{background:rgba(255,255,255,.75)}
/* The prefix binds to the first selector only: written as one list, this said
   `.notif-panel{background:#fff}` in EVERY theme, so the bell panel was a white
   card in dark mode with #f1f1f1 text on it — the heading at 1.07:1 against its
   own background. Each selector carries the theme now. */
html[data-theme="light"] .descbox,
html[data-theme="light"] .notif-panel,
html[data-theme="light"] .unrow:hover{background:#fff}
html[data-theme="light"] .lockpanel{background:linear-gradient(120deg,#fff0f6,#fff);color:#111}
html[data-theme="light"] .lockpanel p{color:#7d7480}
html[data-theme="light"] td{border-bottom-color:#f3ecf0}
html[data-theme="light"] .crow{border-bottom-color:#f3ecf0}
html[data-theme="light"] .crow p{color:#2a2026}
html[data-theme="light"] footer{border-top-color:var(--line);color:#7d7480}
html[data-theme="light"] footer .brandline{color:#0d0d0f}

/* theme toggle button */
.theme-btn{background:none;border:none;font-size:1.05rem;cursor:pointer;padding:5px;line-height:1}

/* watched-progress bar on continue-watching cards */
.watched-bar{position:absolute;left:0;right:0;bottom:0;height:5px;background:rgba(255,46,136,.85);z-index:4}

/* ===== a11y ===== */
:focus-visible{outline:2.5px solid var(--pink);outline-offset:2px;border-radius:6px}
.skip-link{position:absolute;left:-9999px;top:0;background:var(--pink);color:#fff;
  padding:10px 18px;border-radius:0 0 10px 0;z-index:999;font-weight:700}
.skip-link:focus{left:0}
@media (prefers-reduced-motion: reduce){
  *{animation:none!important;transition:none!important}
}

/* ===== episode nav =====
   The watch page's pager lives in the shared .navlinks, next to the theme
   toggle and the bell. Each button is a real 44px target and its wording is
   wrapped in .lbl, so a narrow screen can drop to the arrow alone (see the
   max-width:600px rule further down) rather than losing the pager. */
.ep-nav{display:flex;gap:8px;align-items:center}
.ep-nav .ep-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:44px;white-space:nowrap}
.ep-nav .arw{font-size:1.05rem;line-height:1}

/* ===== card ribbons + editorial titles ===== */
.ribbon{position:absolute;top:10px;left:10px;z-index:4;font-size:.6rem;font-weight:800;
  letter-spacing:.14em;text-transform:uppercase;padding:4px 10px}
.ribbon.mem-r{background:var(--pink);color:#fff}
.ribbon.free-r{background:#000;color:#fff;border:1px solid rgba(255,255,255,.35)}
.ribbon.prem-r{background:#000;color:var(--pink);border:1px solid var(--pink)}
.ribbon.new-r{background:#fff;color:#000;font-weight:900}
.vc-title{font-family:var(--display);font-weight:400;font-size:.98rem;letter-spacing:.01em;line-height:1.3}
.vc-meta{margin:6px 0 0;font-size:.74rem;color:var(--mut)}
.vcard{box-shadow:0 1px 2px rgba(0,0,0,.3)}
.vcard:hover{transform:translateY(-3px)}
.vcard{transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease}
.vcard:hover .vthumb{box-shadow:0 12px 32px rgba(0,0,0,.45)}

/* feed hero on home */
.feed-hero{padding:var(--sp-xs) 0 var(--sp-md);max-width:640px}
.feed-title{font-family:var(--display);font-weight:400;font-size:clamp(1.9rem,4.5vw,2.8rem);
  line-height:1.08;margin:0 0 10px;color:#fff}
.feed-title em{font-style:normal;color:var(--pink)}
.feed-sub{color:var(--mut);font-size:.95rem;margin:0 0 var(--sp-md);line-height:1.6}
.feed-cta{text-decoration:none}

/* compact topbar search */
.topbar-search input{width:min(220px,38vw);background:var(--panel);border:1px solid var(--line);
  color:var(--txt);padding:8px 14px;border-radius:999px;font-size:.86rem;outline:none;margin-left:auto}
.topbar-search input:focus{border-color:var(--pink)}
.sortsel{appearance:none;-webkit-appearance:none}

/* sidebar CTA */
.sitem-cta{display:block;margin:16px 12px;text-align:center}

/* ===== watch: locked-state panel ===== */
.lockpanel{position:relative;overflow:hidden;
  background:linear-gradient(135deg,#1a0510 0%,#0d0d0f 60%);
  flex-direction:column;align-items:center;text-align:center;padding:var(--sp-lg) var(--sp-md)}
.lp-badge{font-size:.62rem;font-weight:800;letter-spacing:.3em;text-transform:uppercase;
  color:#000;background:var(--pink);padding:5px 14px;margin-bottom:var(--sp-sm)}
.lp-head{font-family:var(--display);font-weight:400;font-size:clamp(1.4rem,3.5vw,2rem);
  line-height:1.15;margin:0 0 var(--sp-sm)}
.lockpanel p{max-width:420px}
.lp-fine{margin-top:var(--sp-sm);font-size:.74rem;color:var(--mut)}
.biglock{display:none}

/* ===== subscribe: tiers + verify (base) ===== */
.sub-wrap{max-width:760px;margin:0 auto;padding:var(--sp-md) 20px var(--sp-lg)}
.sub-hero{text-align:center;padding:var(--sp-md) 0 var(--sp-lg)}
.sub-title{font-family:var(--display);font-weight:400;font-size:var(--fs-h1);
  line-height:1.12;margin:0 0 var(--sp-sm)}
.sub-title em{font-style:normal;color:var(--pink)}
.sub-hero .lede{color:var(--mut);font-size:.98rem;line-height:1.65;max-width:480px;margin:0 auto}
.tier-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--sp-sm);margin-bottom:var(--sp-lg)}
.tier{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:26px 16px 20px;text-align:center;cursor:pointer;color:var(--txt);
  font-family:var(--font);transition:border-color .18s, transform .18s, box-shadow .18s}
.tier:hover{transform:translateY(-3px);box-shadow:0 10px 30px rgba(0,0,0,.4)}
.tier.sel{border-color:var(--pink);box-shadow:0 0 0 1px var(--pink), 0 10px 30px rgba(255,46,136,.15)}
.tier-flag{position:absolute;top:-9px;left:50%;transform:translateX(-50%);background:var(--pink);
  color:#fff;font-size:.58rem;font-weight:800;letter-spacing:.14em;padding:3px 10px;border-radius:99px;white-space:nowrap}
.tier-months{display:block;font-size:.66rem;font-weight:700;letter-spacing:.22em;color:var(--mut);margin-bottom:8px}
.tier-price{display:block;font-family:var(--display);font-size:1.7rem;color:#fff;line-height:1}
.tier-cur{display:block;font-size:.68rem;color:var(--mut);margin-top:2px}
.tier-vp{display:block;font-size:.76rem;color:#cbb9c5;margin:10px 0 14px;line-height:1.45}
.tier-cta{display:block;font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:var(--pink);border-top:1px solid var(--line);padding-top:10px;margin:0 -16px -6px}
.how-mbox,.verify-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:var(--sp-md);margin-bottom:var(--sp-sm);max-width:560px;margin-left:auto;margin-right:auto}
.how-h{font-family:var(--display);font-weight:400;font-size:.95rem;margin:0 0 12px;letter-spacing:.03em}
.verify-card input{background:var(--panel2);border-color:var(--line);color:var(--txt)}

/* ===== story page ===== */
.story-wrap{max-width:760px;margin:0 auto;padding:var(--sp-md) 20px var(--sp-xl)}
.story-hero{text-align:center;padding:var(--sp-lg) 0 var(--sp-lg)}
.story-photo{width:180px;height:180px;border-radius:50%;object-fit:cover;
  border:4px solid var(--pink);margin-bottom:var(--sp-md);
  filter:grayscale(20%)}
.story-title{font-family:var(--display);font-weight:400;font-size:clamp(1.9rem,5.5vw,3rem);
  line-height:1.12;margin:0 0 var(--sp-sm)}
.story-title em{font-style:normal;color:var(--pink)}
.story-lede{color:#d9cdd5;font-size:1.05rem;line-height:1.7;max-width:520px;margin:0 auto}
html[data-theme="light"] .story-lede{color:#5a4a54}
.story-note{margin-top:var(--sp-md);font-style:italic;color:var(--mut);font-size:.9rem}
.timeline{max-width:600px;margin:0 auto;padding:var(--sp-md) 0 var(--sp-lg)}
.sec-head-l{font-family:var(--display);font-weight:400;font-size:1.25rem;margin:0 0 var(--sp-sm)}
.tl-block p{font-size:.98rem;line-height:1.8;color:#e6dfe3;margin:0 0 var(--sp-sm)}
.tl-honest{border-left:3px solid var(--pink);padding-left:14px;color:#cbb9c5!important;
  font-style:italic}
.tl-dot{display:block;width:11px;height:11px;background:var(--pink);border-radius:50%;
  margin:var(--sp-md) auto}
.story-invite{text-align:center;background:linear-gradient(135deg,#1a0510,#0d0d0f);
  border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-lg) var(--sp-md);
  max-width:640px;margin:0 auto var(--sp-lg)}
.story-invite h2{font-family:var(--display);font-weight:400;font-size:clamp(1.4rem,4vw,2rem);
  line-height:1.2;margin:0 0 var(--sp-sm)}
.story-invite h2 em{font-style:normal;color:var(--pink)}
.invite-sub{color:var(--mut);font-size:.92rem;line-height:1.65;max-width:420px;margin:0 auto var(--sp-md)}
html[data-theme="light"] .tl-block p{color:#2a2026}
html[data-theme="light"] .tl-honest{color:#7d7480!important}
html[data-theme="light"] .story-lede{color:#5a4a54}

/* ===== home: flagship hero (layout) ===== */
.flag-ep{position:relative;background:linear-gradient(120deg,#1a0510,#0d0d0f 65%);
  border:1px solid var(--line);border-radius:var(--radius);
  padding:var(--sp-lg) var(--sp-md);margin-bottom:var(--sp-lg);overflow:hidden}
.flag-label{font-size:.64rem;font-weight:800;letter-spacing:.3em;text-transform:uppercase;
  color:var(--pink);margin-bottom:12px;display:inline-block;
  background:rgba(255,46,136,.1);padding:5px 12px;border-radius:99px}
.flag-title{font-family:var(--display);font-weight:400;font-size:clamp(1.6rem,5vw,2.8rem);
  line-height:1.1;margin:0 0 10px;color:#fff}
.flag-desc{color:#cbb9c5;font-size:.95rem;line-height:1.6;margin:0 0 var(--sp-md);max-width:520px}

/* ===== home: flagship hero (media) ===== */
.flag-ep{display:flex;gap:var(--sp-md);align-items:center}
.flag-media{width:300px;flex-shrink:0;aspect-ratio:16/9;border-radius:12px;overflow:hidden;
  position:relative;background:linear-gradient(135deg,#241021,#1e1d1b)}
.flag-media img{width:100%;height:100%;object-fit:cover}
.flag-media .pl{position:absolute;inset:auto auto 10px 10px;width:44px;height:44px;border-radius:50%;
  background:var(--pink);display:flex;align-items:center;justify-content:center;color:#fff;z-index:2}
@media(max-width:700px){.flag-ep{flex-direction:column}.flag-media{width:100%}}
/* hero media: branded fallback when no real thumbnail */
.flag-media{background:radial-gradient(120% 120% at 80% 10%,#3d1226,#160a12 60%,#0d0d0f)}
.flag-media .flag-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.flag-wm{position:absolute;left:14px;bottom:12px;z-index:2;font-family:var(--display);
  font-size:.95rem;letter-spacing:.22em;color:rgba(255,255,255,.82);
  background:rgba(13,13,14,.45);padding:5px 12px;border-radius:8px;backdrop-filter:blur(4px);pointer-events:none}
.flag-media .pl{z-index:3}

.vthumb .dur svg{vertical-align:-2px;margin-right:2px}
.ribbon svg{vertical-align:-2px;margin-right:4px}

/* ===== subscribe: 3-step / trust / social proof ===== */
.step-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.step-card{background:var(--panel2);border-radius:10px;padding:14px}
.sc-n{display:inline-flex;width:26px;height:26px;border-radius:50%;background:var(--pink);
  color:#fff;align-items:center;justify-content:center;font-weight:800;font-size:.8rem;margin-bottom:8px}
.step-card b{font-size:.84rem;display:block;margin-bottom:4px}
.step-card p{font-size:.76rem;color:var(--mut);line-height:1.45;margin:0}
.trust-line{border-left:3px solid var(--pink);padding-left:12px;font-size:.82rem;
  color:#cbb9c5;line-height:1.5;margin-top:14px}
.social-proof{font-size:.8rem;color:#4ade80;font-weight:600;text-align:center;margin-top:10px}

/* ===== landing page (cinematic hero + sections) ===== */
.lp-hero{position:relative;min-height:100vh;display:flex;flex-direction:column;
  align-items:center;justify-content:center;text-align:center;overflow:hidden;padding:0 20px}
.reel-stage{position:absolute;inset:0;z-index:0;background:#000}
.reel-stage::after{content:"";position:absolute;inset:0;z-index:0;opacity:.5;
  background-image:radial-gradient(rgba(255,46,136,.10) 1px,transparent 1px);background-size:26px 26px}
.reel-video{width:100%;height:100%;object-fit:cover}
.reel-stage.no-reel .reel-video{display:none}
/* the hero with no video clips: the poster photo, full bleed */
.reel-stage.poster-only{background-size:cover;background-position:center;
  background-repeat:no-repeat}   /* same framing object-fit:cover gave the poster */
.reel-stage.poster-only .reel-video{display:none}
.reel-stage.poster-only .sound-toggle,
.reel-stage.poster-only ~ .sound-toggle,
.reel-stage.poster-only .reel-dots{display:none}
.reel-veil{position:absolute;inset:0;background:radial-gradient(ellipse at center,
  rgba(13,13,14,.35) 0%,rgba(13,13,14,.85) 100%);z-index:1}
.sound-toggle{position:absolute;bottom:18px;right:18px;z-index:3;width:42px;height:42px;
  border-radius:50%;border:1px solid var(--line);background:rgba(13,13,14,.7);color:#fff;cursor:pointer;font-size:1rem}
.reel-dots{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);z-index:3;display:flex;gap:8px}
.rd{width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.35);cursor:pointer}
.rd.on{background:var(--pink)}
.hero-inner{position:relative;z-index:2}
.hero-name{font-family:var(--display);font-weight:400;font-size:clamp(3.2rem,14vw,8rem);
  line-height:.92;letter-spacing:-.02em;margin:0;text-shadow:0 6px 40px rgba(0,0,0,.6)}
.hero-name .pink{color:var(--pink)}
.hero-tag{color:#f0e6ec;font-size:clamp(.95rem,2.6vw,1.3rem);margin:14px 0 30px;font-style:italic}
.hero-cta{font-size:1.1rem;padding:16px 40px}
.scroll-cue{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);z-index:3;
  color:#fff;opacity:.6;animation:bob 1.8s ease-in-out infinite;font-size:1.1rem}
@keyframes bob{0%,100%{transform:translate(-50%,0)}50%{transform:translate(-50%,8px)}}

.lp-authority{display:grid;grid-template-columns:200px 1fr;gap:var(--sp-md);align-items:center;
  max-width:900px;margin:0 auto;padding:var(--sp-xl) 20px}
.auth-photo img{width:200px;height:200px;border-radius:50%;object-fit:cover;border:4px solid var(--pink)}
.auth-name{font-family:var(--display);font-weight:400;font-size:clamp(1.8rem,5vw,2.6rem);margin:0 0 6px}
.auth-title{color:var(--pink);font-weight:700;font-size:.92rem;margin:0 0 14px}
.auth-line{color:#e6dfe3;font-size:1.05rem;line-height:1.6;max-width:560px}
@media(max-width:640px){.lp-authority{grid-template-columns:1fr;text-align:center}}

.lp-proof{display:flex;gap:var(--sp-md);flex-wrap:wrap;justify-content:center;
  background:var(--black);border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  padding:var(--sp-lg) 20px}
.proof-stat{text-align:center;min-width:180px}
.proof-stat b{display:block;font-family:var(--display);font-weight:400;font-size:clamp(2rem,6vw,3rem);
  color:var(--pink);line-height:1}
.proof-stat span{display:block;color:var(--mut);font-size:.82rem;margin-top:6px;max-width:200px}

.lp-value,.lp-testi,.lp-final{padding:var(--sp-xl) 20px;max-width:1000px;margin:0 auto}
.value-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--sp-md);margin-top:var(--sp-md)}
.value-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-md)}
.vc-num{font-family:var(--display);color:var(--pink);font-size:1.4rem}
.value-card b{display:block;font-size:1.05rem;margin:8px 0 6px}
.value-card p{color:var(--mut);font-size:.86rem;line-height:1.55;margin:0}

.lp-testi{background:var(--panel)}
.testi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--sp-md);margin-top:var(--sp-md)}
.testi{background:var(--panel2);border-left:3px solid var(--pink);border-radius:8px;padding:18px;
  font-size:.92rem;line-height:1.6;color:#e6dfe3;margin:0}
.testi::before{content:"“";font-family:var(--display);font-size:2rem;color:var(--pink);display:block;line-height:0;margin-bottom:8px}

.lp-final{text-align:center;background:linear-gradient(135deg,#1a0510,#0d0d0f);
  border-top:1px solid var(--line)}
.final-h{font-family:var(--display);font-weight:400;font-size:clamp(2rem,7vw,3.4rem);margin:0 0 12px}
.final-sub{color:#e6dfe3;font-size:1.05rem;margin:0 0 24px}
.final-sub b{color:var(--pink)}
.final-cta{font-size:1.1rem;padding:16px 44px}
.final-fine{color:var(--mut);font-size:.78rem;margin-top:12px}

/* ===== Admin: right-side drawer + FAB ===== */
.hamb{background:none;border:1px solid var(--line);color:var(--txt);width:38px;height:38px;
  border-radius:9px;font-size:1.2rem;cursor:pointer;display:flex;align-items:center;justify-content:center}
.adm-drawer{position:fixed;top:0;left:0;height:100vh;width:280px;max-width:84vw;background:var(--panel);
  border-right:1px solid var(--line);z-index:200;transform:translateX(-100%);transition:transform .25s ease;
  padding:18px 0;overflow-y:auto;box-shadow:12px 0 50px rgba(0,0,0,.5)}
.adm-drawer.open{transform:translateX(0)}
.drawer-head{display:flex;justify-content:space-between;align-items:center;padding:0 18px 14px;
  border-bottom:1px solid var(--line);margin-bottom:10px;font-size:1.05rem}
.drawer-x{background:none;border:none;color:var(--mut);font-size:1.1rem;cursor:pointer}
.drawer-nav{display:flex;flex-direction:column}
.ditem{padding:13px 18px;color:var(--txt);text-decoration:none;font-size:.95rem;cursor:pointer;
  border-left:3px solid transparent}
.ditem:hover{background:var(--panel2)}
.ditem.active{background:var(--panel2);border-left-color:var(--pink);color:#fff;font-weight:600}
.drawer-scrim{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:199;opacity:0;pointer-events:none;
  transition:opacity .25s}
.drawer-scrim.show{opacity:1;pointer-events:auto}
.fab{position:fixed;right:22px;bottom:22px;width:60px;height:60px;border-radius:50%;border:none;
  background:var(--pink);color:#fff;font-size:1.9rem;line-height:1;cursor:pointer;z-index:150;
  box-shadow:0 8px 28px rgba(255,46,136,.5);transition:transform .15s}
.fab:hover{transform:scale(1.08)}
.fab:active{transform:scale(.94)}

/* ===== Site-wide LEFT drawer (reuses drawer pattern) ===== */
.site-drawer{position:fixed;top:0;left:0;height:100vh;width:300px;max-width:86vw;background:var(--panel);
  border-right:1px solid var(--line);z-index:200;transform:translateX(-100%);transition:transform .25s ease;
  padding:18px 0;overflow-y:auto;box-shadow:12px 0 50px rgba(0,0,0,.5)}
.site-drawer.open{transform:translateX(0)}
.site-drawer .drawer-head{display:flex;justify-content:space-between;align-items:center;padding:0 18px 14px;
  border-bottom:1px solid var(--line);margin-bottom:10px}
.site-drawer .drawer-head b{font-size:1.05rem;color:#fff}
.dnav{display:flex;flex-direction:column}
.dnav a{display:flex;align-items:center;gap:12px;padding:13px 18px;color:var(--txt);text-decoration:none;
  font-size:.95rem;border-left:3px solid transparent}
.dnav a:hover{background:var(--panel2)}
.dnav a.active{background:var(--panel2);border-left-color:var(--pink);color:#fff;font-weight:600}
.dnav .sub{display:flex;flex-direction:column;padding-left:18px;background:var(--panel2)}
.dnav .sub a{padding:10px 14px;font-size:.88rem;border-left:none;color:var(--mut)}
.dnav .sub a:hover{color:#fff}
/* avatar + dropdown */
.avatar-btn{width:30px;height:30px;border-radius:50%;border:1px solid var(--line);background:var(--pink);
  color:#fff;font-weight:700;font-size:.72rem;cursor:pointer;display:flex;align-items:center;justify-content:center;
  background-size:cover;background-position:center;flex-shrink:0;
  box-shadow:0 0 0 2px var(--bg);margin:0 1px}
.avatar-wrap{position:relative}
.avatar-menu{position:absolute;right:0;top:42px;min-width:184px;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,.5);z-index:240;padding:6px;display:none}
.avatar-menu.open{display:block}
.avatar-menu a,.avatar-menu button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:none;color:var(--txt);
  padding:10px 12px;border-radius:8px;font-size:.9rem;cursor:pointer;text-decoration:none}
.avatar-menu a svg,.avatar-menu button svg{width:18px;height:18px;color:var(--mut);flex-shrink:0}
.avatar-menu a:hover,.avatar-menu button:hover{background:var(--panel2);color:#fff}
.avatar-menu a:hover svg,.avatar-menu button:hover svg{color:var(--pink)}
.avatar-menu .sep{border-top:1px solid var(--line);margin:5px 4px}

/* ===== home: content rows ===== */
.hrow{margin:26px 0}
.hrow-head{display:flex;align-items:center;justify-content:space-between;margin:0 0 12px}
.hrow-head h3{margin:0;font-size:1.05rem;color:#fff;font-weight:800}
.hrow-more{font-size:.8rem;color:var(--pink);text-decoration:none}
.hrow-more:hover{text-decoration:underline}
.hrow-ic{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;
  background:var(--panel2);color:var(--pink);margin-right:9px;vertical-align:middle}
.hrow-ic svg{width:16px;height:16px}
.flag-cred{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 var(--sp-md)}
.flag-cred .fc{display:inline-flex;align-items:center;gap:6px;font-size:.74rem;color:var(--mut);
  background:var(--panel2);border:1px solid var(--line);border-radius:999px;padding:5px 12px}
.flag-cred .fc svg{color:var(--pink);flex-shrink:0}
.pb-icon{display:inline-flex;align-items:center;justify-content:center;font-size:2rem;animation:pulse 1.6s infinite}
.pb-icon svg{width:30px;height:30px;color:var(--pink)}
.pl-row{display:flex;gap:14px;overflow-x:auto;padding-bottom:8px}
.pl-card{flex:0 0 200px}
.vcard.featured{grid-column:1/-1;flex-direction:row;max-height:240px;background:var(--panel)}
.vcard.featured .vthumb{width:320px;height:200px;flex-shrink:0}
.vcard.featured .vc-title{font-size:1.15rem}

/* ===== global inputs ===== */
input[type=text], input[type=password], input[type=search], input[type=email], input[type=number],
input[type=date], input[type=datetime-local], input[type=file], textarea, select, .field {
  width: 100%;
  padding: 11px 14px;
  border-radius: var(--radius, 12px);
  border: 1px solid var(--line, #2a2a30);
  background: var(--input-bg, #16161a);
  color: var(--txt, #fff);
  font-size: .92rem;
  font-family: inherit;
  outline: none;
  transition: border-color .15s, box-shadow .15s;
  box-sizing: border-box;
}
input:focus, textarea:focus, select:focus, .field:focus {
  border-color: var(--pink, #ff2e88);
  box-shadow: 0 0 0 3px rgba(255,46,136,.25);
}
input[type=file] { padding: 8px 10px; }
label { display:block; font-size:.8rem; color:var(--mut,#908994); margin:14px 0 6px; font-weight:600; }

.site-footer{text-align:center;color:var(--mut);font-size:.8rem;padding:34px 20px 60px;line-height:1.7}
/* Quiet to look at, but still a real target for a thumb: it was 75x30, under
   the 44px the rest of the site holds to. Padding gives it the size without
   making it louder. */
.staff-link{display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;padding:0 14px;margin-top:4px;
  font-size:.7rem;color:var(--mut);opacity:.45;text-decoration:none}
.staff-link:hover{opacity:1}

@media(max-width:1000px){.watch-rail{width:100%}}
.rail-tabs{display:flex;gap:6px;flex-wrap:wrap}
.rail-tab{padding:7px 13px;border-radius:99px;border:1px solid var(--line);background:var(--panel);
  color:var(--mut);font-size:.82rem;cursor:pointer;white-space:nowrap}
.rail-tab.active{background:var(--pink);color:#fff;border-color:var(--pink)}
.rail-scroll{display:flex;flex-direction:column;gap:10px;max-height:calc(100vh - 180px);overflow-y:auto;padding-right:4px}
.rail-card{display:flex;gap:10px;padding:8px;border-radius:10px;background:var(--panel);cursor:pointer;transition:.15s}
.rail-card:hover{background:var(--panel2)}
.rail-thumb{width:140px;height:80px;border-radius:8px;object-fit:cover;background:#222;flex-shrink:0;position:relative}
.rail-thumb .rt-dur{position:absolute;right:4px;bottom:4px;background:rgba(0,0,0,.8);color:#fff;
  font-size:.65rem;padding:1px 5px;border-radius:4px}
.rail-meta{flex:1;min-width:0}
.rail-meta h4{margin:0 0 4px;font-size:.86rem;line-height:1.25;color:#fff;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rail-meta p{margin:0;font-size:.72rem;color:var(--mut)}
.rail-section-title{font-size:.78rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--pink);margin:6px 2px 2px}
.watch-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}

/* ===== admin: upload wizard ===== */
.wiz-steps{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 20px}
.wiz-step{padding:7px 14px;border-radius:99px;border:1px solid var(--line);font-size:.82rem;color:var(--mut);background:var(--panel2)}
.wiz-step.active{background:var(--pink);color:#fff;border-color:var(--pink);font-weight:700}
.wiz-panel{margin-top:6px}
.wiz-review{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.wiz-review .ovrow{background:var(--panel2);padding:10px 14px;border-radius:10px}
.ovgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}
.stat{background:var(--panel2);border:1px solid var(--line);border-radius:14px;padding:18px;text-align:center}
.stat b{display:block;font-size:1.7rem;color:#fff;margin-bottom:4px}
.stat span{font-size:.8rem;color:var(--mut)}

/* ===== Upload LAN fast-lane tip ===== */
.lan-tip{background:rgba(46,255,136,.08);border:1px solid rgba(46,255,136,.35);border-radius:12px;padding:12px 16px;margin-bottom:16px;font-size:.88rem;line-height:1.5}
.lan-link{color:#2eff88;font-weight:700;text-decoration:none;word-break:break-all}
.lan-link:hover{text-decoration:underline}

/* ===== card: missing-thumbnail placeholder ===== */
.vthumb.no-thumb{background:linear-gradient(135deg,var(--pink-soft),#f3d3e2)}
html[data-theme="light"] .vthumb.no-thumb{background:linear-gradient(135deg,var(--pink-soft),#f7d9e8)}
.thumb-ph{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:2.2rem;color:var(--pink);opacity:.85}
.vcard .vthumb{position:relative;overflow:hidden}

/* ===== reels full-screen viewer ===== */
#reel-viewer{position:fixed;inset:0;z-index:1000;background:#000;overflow-y:scroll;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch}
#reel-viewer .reel-slide{position:relative;height:100vh;width:100vw;scroll-snap-align:start;display:flex;align-items:center;justify-content:center;background:#000}
#reel-viewer video{height:100%;width:100%;object-fit:contain;background:#000}
#reel-viewer .reel-close{position:fixed;top:14px;right:14px;z-index:1002;background:rgba(0,0,0,.5);color:#fff;border:none;border-radius:50%;width:42px;height:42px;font-size:1.2rem;cursor:pointer}
#reel-viewer .reel-side{position:fixed;right:14px;bottom:90px;z-index:1002;display:flex;flex-direction:column;gap:18px}
#reel-viewer .reel-side button{background:rgba(0,0,0,.5);color:#fff;border:none;border-radius:50%;width:52px;height:52px;font-size:1.4rem;cursor:pointer}
#reel-viewer .reel-meta{position:fixed;left:16px;right:90px;bottom:26px;z-index:1002;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.8)}
#reel-viewer .reel-meta b{font-size:1.05rem;display:block;margin-bottom:4px}
#reel-viewer .reel-meta small{opacity:.85}


/* ══════════════════════════════════════════════════════════════════════
   REFINEMENT LAYER — craft pass. Additive; cascades over the base above.
   Organised: base rhythm · chrome · buttons · forms · cards · feed ·
   watch · subscribe · account · admin · motion · light theme · responsive
   ══════════════════════════════════════════════════════════════════════ */

/* ---- base rhythm ------------------------------------------------------ */
h1,h2,h3,h4{text-wrap:balance}
p{text-wrap:pretty}
:where(h1,h2,h3){letter-spacing:.005em}
small{font-size:.78em}
main{display:block}
.mut{color:var(--mut)}
.content{padding-block:var(--sp-md)}
@media(min-width:1600px){.content{max-width:1560px}}

/* subtle in-view rise for feed content (skipped under reduced-motion) */
@keyframes rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.hrow,.flag-ep,.prem-banner,.acct-hero,.pl-hero,.card,.tier{animation:rise .5s var(--ease-out) both}
.hrow:nth-child(2){animation-delay:.04s}
.hrow:nth-child(3){animation-delay:.08s}
.hrow:nth-child(4){animation-delay:.12s}

/* ---- chrome: topbar ------------------------------------------------- */
.topbar{
  background:color-mix(in srgb, var(--bg) 82%, transparent);
  -webkit-backdrop-filter:saturate(1.4) blur(14px);
  backdrop-filter:saturate(1.4) blur(14px);
  border-bottom:1px solid var(--line);
  box-shadow:0 1px 0 var(--pink-a14), 0 10px 30px -18px rgba(0,0,0,.6);
}
.brand img{transition:transform var(--dur-2) var(--ease),box-shadow var(--dur-2)}
.brand:hover img{transform:rotate(-4deg) scale(1.04);box-shadow:0 0 0 4px var(--pink-a14)}
.brand .name{letter-spacing:.16em}
.topbar-search input{transition:width var(--dur-3) var(--ease),border-color var(--dur-2),box-shadow var(--dur-2)}
.topbar-search input:focus{width:min(320px,52vw);box-shadow:0 0 0 3px var(--pink-a25)}
.badge-paid{background:var(--pink-a14);color:var(--pink-bright);border:1px solid var(--pink-a25)}

/* ---- chrome: hamburger / drawers / scrim --------------------------- */
.hamb,.site-hamb{transition:background var(--dur-1),border-color var(--dur-1),transform var(--dur-1)}
.hamb:hover,.site-hamb:hover{border-color:var(--pink);color:var(--pink)}
.hamb:active,.site-hamb:active{transform:scale(.92)}
.site-drawer,.adm-drawer{box-shadow:var(--e4);background:linear-gradient(180deg,var(--panel),var(--bg))}
.drawer-scrim{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.dnav a,.ditem{transition:background var(--dur-1),border-color var(--dur-1),color var(--dur-1),padding-left var(--dur-2)}
.dnav a:hover,.ditem:hover{padding-left:22px}
.dnav a.active,.ditem.active{background:linear-gradient(90deg,var(--pink-a14),transparent)}
.dnav a svg,.ditem svg{width:19px;height:19px;flex-shrink:0;color:var(--mut);transition:color var(--dur-1)}
.dnav a:hover svg,.dnav a.active svg,.ditem:hover svg,.ditem.active svg{color:var(--pink)}

/* ---- chrome: avatar menu / bell ---------------------------------- */
.avatar-btn{transition:transform var(--dur-1) var(--ease-spring),box-shadow var(--dur-1)}
.avatar-btn:hover{transform:scale(1.08);box-shadow:0 0 0 3px var(--pink-a25)}
.avatar-menu{animation:pop .16s var(--ease-out)}
@keyframes pop{from{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:none}}
.bell{transition:transform var(--dur-1)}
.bell:hover{transform:rotate(-12deg) scale(1.1);color:var(--pink)}
.notif-panel{animation:pop .18s var(--ease-out);box-shadow:var(--e4)}
.nrow{transition:transform var(--dur-1),outline-color var(--dur-1)}
.nrow.link:hover{transform:translateX(3px)}

/* ---- buttons ------------------------------------------------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  letter-spacing:.01em;line-height:1;transition:background var(--dur-2) var(--ease),
  color var(--dur-2),border-color var(--dur-2),transform var(--dur-1),box-shadow var(--dur-2);
  will-change:transform}
.btn:active{transform:translateY(1px) scale(.985)}
.btn-pink{box-shadow:0 6px 20px -8px var(--pink-glow)}
.btn-pink:hover{background:var(--pink-dark);box-shadow:0 10px 30px -8px var(--pink-glow);transform:translateY(-1px)}
.btn-pink:active{transform:translateY(0) scale(.985)}
.btn-line:hover{background:var(--pink-a08)}
.btn[disabled],.btn:disabled{opacity:.5;pointer-events:none;box-shadow:none}
.btn-ghost{background:transparent;border:none;color:var(--mut)}
.btn-ghost:hover{color:var(--pink);background:var(--pink-a08)}
.btn.big{border-radius:var(--radius-pill);box-shadow:0 10px 34px -10px var(--pink-glow)}
.staff-link{transition:opacity var(--dur-2),color var(--dur-2)}
.staff-link:hover{color:var(--pink)}

/* ---- chips ------------------------------------------------------- */
.chip{transition:background var(--dur-1),border-color var(--dur-1),color var(--dur-1),transform var(--dur-1)}
.chip:hover{transform:translateY(-1px);border-color:var(--line-strong)}
.chip.active{background:var(--pink);color:#fff;border-color:var(--pink);box-shadow:0 6px 18px -8px var(--pink-glow)}
.chip.small{background:var(--panel2);color:var(--txt);border-color:var(--line)}

/* ---- forms ----------------------------------------------------- */
input,textarea,select,.field{transition:border-color var(--dur-2),box-shadow var(--dur-2),background var(--dur-2)}
input::placeholder,textarea::placeholder{color:var(--mut);opacity:.7}
input:hover:not(:focus),textarea:hover:not(:focus),select:hover:not(:focus){border-color:var(--line-strong)}
select{appearance:none;-webkit-appearance:none;background-image:
  linear-gradient(45deg,transparent 50%,var(--mut) 50%),
  linear-gradient(135deg,var(--mut) 50%,transparent 50%);
  background-position:calc(100% - 18px) center,calc(100% - 13px) center;
  background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:36px}
label.check{cursor:pointer;user-select:none}
label.check input{accent-color:var(--pink);width:16px;height:16px}
.msg{transition:color var(--dur-2)}
.msg.err::before{content:"⚠ "}
.msg.ok::before{content:"✓ "}
/* an empty message is no message: without this every cleared box drew a lone ✓ or ⚠ */
.msg:empty{display:none}

/* ---- cards: feed --------------------------------------------------- */
.vcard{border-radius:var(--radius);isolation:isolate}
.vcard:focus-visible{outline:var(--focus);outline-offset:3px}
.vcard .vthumb{border-radius:0}
.vthumb-img{transition:transform var(--dur-4) var(--ease-out)}
.vcard:hover .vthumb-img{transform:scale(1.06)}
.vthumb::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,transparent 55%,rgba(0,0,0,.35));opacity:0;transition:opacity var(--dur-2)}
.vcard:hover .vthumb::after{opacity:1}
.vthumb .pl{z-index:3;transition:transform var(--dur-2) var(--ease-spring),background var(--dur-2)}
.vcard:hover .vthumb .pl{transform:scale(1.12)}
.vc-title{transition:color var(--dur-1)}
.vcard:hover .vc-title{color:var(--pink-bright)}
.ribbon{border-radius:6px;backdrop-filter:blur(3px);box-shadow:0 2px 8px rgba(0,0,0,.3)}
.ribbon.free-r{background:rgba(0,0,0,.6)}
.badge,.pill{border-radius:var(--radius-pill)}

/* skeleton — brand-neutral shimmer */
.skel{background:linear-gradient(100deg,var(--panel) 30%,var(--panel3) 50%,var(--panel) 70%);
  background-size:200% 100%;border:1px solid var(--line)}

/* empty state */
.empty{padding:80px 20px}
.empty>div:first-child{width:72px;height:72px;margin:0 auto 6px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:2rem;
  background:var(--pink-a08);color:var(--pink)}
.empty h3{font-family:var(--display);font-weight:400}

/* ---- home: rows & hero ------------------------------------------- */
.hrow-head h3{font-family:var(--display);font-weight:400;letter-spacing:.02em;font-size:1.1rem;
  display:flex;align-items:center}
.hrow-more{font-weight:700;transition:gap var(--dur-1),color var(--dur-1);display:inline-flex;align-items:center;gap:2px}
.hrow-more::after{content:"→";transition:transform var(--dur-1)}
.hrow-more:hover{text-decoration:none}
.hrow-more:hover::after{transform:translateX(3px)}
.hrow-ic{box-shadow:inset 0 0 0 1px var(--line)}
.flag-ep{box-shadow:var(--e2);position:relative}
.flag-ep::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(120% 80% at 15% 0%,var(--pink-a14),transparent 60%)}
.flag-title{text-shadow:0 4px 30px rgba(0,0,0,.5)}
.flag-watch{align-self:flex-start}
.flag-media{box-shadow:var(--e3)}
.flag-media .pl{box-shadow:var(--glow)}
.prem-banner{box-shadow:var(--e2),0 0 0 1px var(--pink-a25) inset}
.prem-timer{text-shadow:0 2px 20px var(--pink-glow)}
.pl-row{scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.pl-row>*{scroll-snap-align:start}
.pl-card{transition:transform var(--dur-2) var(--ease)}
.pl-card:hover{transform:translateY(-4px)}
.watched-bar{box-shadow:0 0 10px var(--pink-glow)}

/* ---- watch page ------------------------------------------------- */
.watch-shell{padding-top:20px}
#player-area{position:relative;border-radius:var(--radius);overflow:hidden;box-shadow:var(--e3)}
.player{border-radius:0}
.wtitle{margin-top:22px}
.wmeta-row{margin-top:10px;padding-bottom:14px;border-bottom:1px solid var(--line)}
#v-actions .btn{border-radius:var(--radius-pill)}
.likebtn.liked{box-shadow:0 6px 18px -8px var(--pink-glow)}
.descbox{border:1px solid var(--line);box-shadow:var(--e1)}
.lockpanel{box-shadow:var(--e3),0 0 0 1px var(--pink-a25) inset}
.lockpanel::after{content:"";position:absolute;inset:-40% -10% auto;height:60%;pointer-events:none;
  background:radial-gradient(closest-side,var(--pink-a14),transparent)}
.lp-badge{border-radius:var(--radius-pill);box-shadow:0 6px 18px -8px var(--pink-glow)}
.cmt-section{border-top:1px solid var(--line);padding-top:24px}
.cmt-compose textarea{transition:border-color var(--dur-2),box-shadow var(--dur-2)}
.crow{transition:background var(--dur-1)}
.crow:hover{background:var(--panel);border-radius:10px}
.clike,.cdel{transition:background var(--dur-1),color var(--dur-1)}
.rail-tab{transition:background var(--dur-1),color var(--dur-1),border-color var(--dur-1)}
.rail-card{transition:background var(--dur-1),transform var(--dur-1)}
.rail-card:hover{transform:translateX(3px)}
.unrow{transition:background var(--dur-1),transform var(--dur-1)}
.unrow:hover{transform:translateX(3px)}
.trailer-note{display:inline-block;background:var(--pink-a08);padding:5px 12px;border-radius:var(--radius-pill)}

/* ---- subscribe ------------------------------------------------- */
.sub-title{text-wrap:balance}
.tier{overflow:hidden}
.tier::before{content:"";position:absolute;inset:0;border-radius:inherit;opacity:0;transition:opacity var(--dur-2);
  background:radial-gradient(120% 60% at 50% 0%,var(--pink-a14),transparent 70%)}
.tier:hover::before,.tier.sel::before{opacity:1}
.tier.sel{transform:translateY(-3px)}
.tier.sel .tier-cta{color:#fff;background:var(--pink);margin:10px -16px -20px;padding:12px}
.tier-price{letter-spacing:.01em}
.tier-flag{box-shadow:0 6px 18px -8px var(--pink-glow)}
.step-card{transition:transform var(--dur-1),background var(--dur-1)}
.step-card:hover{transform:translateY(-3px);background:var(--panel3)}
.sc-n{box-shadow:0 4px 12px -4px var(--pink-glow)}
.verify-card input{letter-spacing:.08em}
#sub-ref{font-family:var(--display);font-size:1.05rem}

/* ---- account ------------------------------------------------- */
.acct-hero{box-shadow:var(--e2)}
.acct-ava{box-shadow:0 0 0 4px var(--pink-a14)}
.acct-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:22px;transition:border-color var(--dur-2)}
.acct-card:hover{border-color:var(--line-strong)}
.acct-card h2{font-family:var(--display);font-weight:400;font-size:1rem;margin:0 0 4px}
.acct-card .sub{color:var(--mut);font-size:.8rem;margin:0 0 14px}
.acct-card .ovrow,.acct-card .unrow{transition:transform var(--dur-1)}
.acct-card .unrow:hover{transform:translateX(3px)}

/* ---- admin ------------------------------------------------- */
.adm-wrap{max-width:1220px}
.snap{position:relative;overflow:hidden;transition:border-color var(--dur-2),transform var(--dur-2)}
.snap:hover{border-color:var(--line-strong);transform:translateY(-2px)}
.snap::before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,var(--pink),transparent)}
.snap .n{font-family:var(--display);font-weight:400;letter-spacing:.01em}
.adm-panel{box-shadow:var(--e1)}
.adm-panel h3{letter-spacing:.03em}
.ctable tr,table tr{transition:background var(--dur-1)}
.ctable tbody tr:hover,#t-videos tbody tr:hover,#t-users tr:hover,#t-playlists tr:hover,#t-payments tr:hover{background:var(--pink-a08)}
.card{box-shadow:var(--e1)}
.card h2{letter-spacing:.02em}
.upload-zone{transition:background var(--dur-2),border-color var(--dur-2),transform var(--dur-1)}
.upload-zone:active{transform:scale(.99)}
.wiz-step{transition:background var(--dur-2),color var(--dur-2),border-color var(--dur-2)}
.wiz-step.done{border-color:var(--pink);color:var(--pink)}
.wiz-step.active{box-shadow:0 6px 18px -8px var(--pink-glow)}
.fab{transition:transform var(--dur-1) var(--ease-spring),box-shadow var(--dur-2)}
.fab:hover{transform:scale(1.08) rotate(90deg);box-shadow:0 12px 40px -6px var(--pink-glow)}
.hbar>div{transition:width var(--dur-4) var(--ease-out)}
.dbar{transition:opacity var(--dur-1),transform var(--dur-1)}
.dbar:hover{transform:scaleY(1.04)}
.pill.ok{background:var(--ok-bg);color:var(--ok)}
.pill.no{background:var(--err-bg);color:var(--err)}
.pill.sched{background:var(--warn-bg);color:var(--warn)}


/* ---- reels viewer ------------------------------------------------ */
#reel-viewer .reel-side button{transition:transform var(--dur-1) var(--ease-spring),background var(--dur-1)}
#reel-viewer .reel-side button:active{transform:scale(.85)}
#reel-viewer .reel-close:hover,#reel-viewer .reel-side button:hover{background:var(--pink)}

/* ---- motion guard --------------------------------------------- */
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .hrow,.flag-ep,.prem-banner,.acct-hero,.pl-hero,.card,.tier,.avatar-menu,.notif-panel{animation:none}
  *,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important}
}

/* ---- light theme: fill the gaps -------------------------------- */
html[data-theme="light"]{
  --bg:#ffffff; --panel3:#e5e5e5; --line-strong:#cfcfcf; --input-bg:#fff;
  --txt-dim:#3f3f3f; --pink-a08:rgba(255,46,136,.06); --pink-a14:rgba(255,46,136,.1);
  --e1:0 1px 2px rgba(0,0,0,.08); --e2:0 3px 10px rgba(0,0,0,.1);
  --e3:0 10px 26px rgba(0,0,0,.14); --e4:0 20px 48px rgba(0,0,0,.18);
  color-scheme:light;
}
html[data-theme="light"] .topbar{background:color-mix(in srgb,#fff 80%,transparent)}
html[data-theme="light"] .flag-ep,html[data-theme="light"] .lockpanel,
html[data-theme="light"] .acct-hero,html[data-theme="light"] .pl-hero,
html[data-theme="light"] .story-invite,html[data-theme="light"] .lp-final,
html[data-theme="light"] .story-hero{background:linear-gradient(135deg,#fff0f6,#fff)}
html[data-theme="light"] .flag-title,html[data-theme="light"] .hrow-head h3,
html[data-theme="light"] .snap .n,html[data-theme="light"] .stat b,
html[data-theme="light"] .tier-price,html[data-theme="light"] .rail-meta h4,
html[data-theme="light"] .ctitle,html[data-theme="light"] .cauthor{color:#1c1512}
html[data-theme="light"] .flag-desc,html[data-theme="light"] .tier-vp,
html[data-theme="light"] .crow p,html[data-theme="light"] .tl-block p,
html[data-theme="light"] .hero-tag,html[data-theme="light"] .auth-line,
html[data-theme="light"] .final-sub{color:#4a423d}
html[data-theme="light"] .ribbon.free-r{background:rgba(0,0,0,.7)}
html[data-theme="light"] .ribbon.new-r{border:1px solid var(--line)}
html[data-theme="light"] ::-webkit-scrollbar-thumb{background:#d8cdc4}

/* ---- responsive polish -------------------------------------- */
@media(max-width:900px){
  .watch-rail{display:none}
  .watch-shell{flex-direction:column;padding:14px}
  .watch-main{max-width:100%}
  .upnext{width:100%}
}
@media(max-width:560px){
  .content{padding-left:16px;padding-right:16px}
  .grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--sp-md) 12px}
  .vinfo{padding:12px}
  .vc-title{font-size:.9rem}
  .flag-ep{padding:var(--sp-md) 18px}
  .hrow-head h3{font-size:1rem}
  .btn.big{padding:13px 26px;font-size:.94rem}
  .adm-wrap{padding:16px}
  .tier-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:380px){
  .grid{grid-template-columns:1fr}
  .tier-grid{grid-template-columns:1fr}
}

/* ══════════════════════════════════════════════════════════════════════
   AUTH SCREEN (login / signup) — split brand + form
   ══════════════════════════════════════════════════════════════════════ */
.auth-body{min-height:100vh}
.auth-split{display:grid;grid-template-columns:1.05fr .95fr;min-height:100vh}
.auth-aside{position:relative;display:flex;flex-direction:column;justify-content:space-between;
  gap:var(--sp-lg);padding:clamp(28px,5vw,64px);overflow:hidden;color:var(--txt);
  background:
    radial-gradient(120% 90% at 12% 0%, var(--pink-a14), transparent 55%),
    radial-gradient(90% 70% at 100% 100%, rgba(255,46,136,.10), transparent 60%),
    linear-gradient(160deg,#1b0512 0%, var(--black) 70%);
  border-right:1px solid var(--line)}
.auth-aside::after{content:"";position:absolute;inset:0;opacity:.5;pointer-events:none;
  background-image:radial-gradient(var(--pink-a08) 1px,transparent 1px);background-size:28px 28px}
.auth-aside>*{position:relative;z-index:1}
.auth-brand{display:flex;align-items:center;gap:12px}
.auth-brand img{width:46px;height:46px;border-radius:50%;object-fit:cover;border:2.5px solid var(--pink)}
.auth-brand .name{font-family:var(--display);font-weight:400;font-size:1.4rem;letter-spacing:.18em}
.auth-brand .name b{color:var(--pink)}
.auth-hl{font-family:var(--display);font-weight:400;line-height:1.05;
  font-size:clamp(2.2rem,4.6vw,3.4rem);margin:14px 0 16px}
.auth-hl em{font-style:normal;color:var(--pink)}
.auth-sub{color:var(--txt-dim);font-size:1.02rem;line-height:1.65;max-width:38ch}
.auth-points{list-style:none;padding:0;margin:22px 0 0;display:flex;flex-direction:column;gap:12px}
.auth-points li{position:relative;padding-left:30px;font-size:.95rem;color:var(--txt-dim);line-height:1.5}
.auth-points li::before{content:"";position:absolute;left:0;top:2px;width:19px;height:19px;border-radius:50%;
  background:var(--pink-a14);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ff2e88' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
  background-size:12px;background-repeat:no-repeat;background-position:center}
.auth-quote{margin:0;border-left:3px solid var(--pink);padding:6px 0 6px 16px;
  font-size:.92rem;line-height:1.6;color:var(--mut);font-style:italic;max-width:44ch}

.auth-main{display:flex;align-items:center;justify-content:center;padding:clamp(24px,5vw,56px);
  background:var(--black)}
.auth-card{width:100%;max-width:400px;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--radius-lg);padding:clamp(24px,4vw,40px);box-shadow:var(--e3)}
.auth-brand--sm{display:none;margin-bottom:18px}
.auth-brand--sm img{width:36px;height:36px}
.auth-brand--sm .name{font-size:1.15rem}
.auth-card h2{font-family:var(--display);font-weight:400;font-size:1.5rem;margin:0 0 6px}
.auth-lede{color:var(--mut);font-size:.9rem;margin:0 0 22px;line-height:1.5}
.auth-card label{margin-top:16px}
.auth-card label .hint,.auth-card label .hint{font-weight:400;color:var(--mut);font-size:.74rem;margin-left:4px}
.auth-submit{width:100%;margin-top:20px;padding:13px;font-size:.95rem}
.auth-switch{text-align:center;margin:16px 0 0;font-size:.86rem;color:var(--mut)}
.auth-switch a{color:var(--pink);font-weight:700}
.auth-switch a:hover{text-decoration:underline}
.auth-fine{text-align:center;font-size:.74rem;color:var(--mut);margin:22px 0 0;
  padding-top:16px;border-top:1px solid var(--line)}
.auth-back{display:block;text-align:center;margin-top:14px;font-size:.8rem;color:var(--mut)}
.auth-back:hover{color:var(--pink)}

@media(max-width:860px){
  .auth-split{grid-template-columns:1fr}
  .auth-aside{display:none}
  .auth-brand--sm{display:flex}
}
html[data-theme="light"] .auth-aside{
  background:
    radial-gradient(120% 90% at 12% 0%, var(--pink-a14), transparent 55%),
    linear-gradient(160deg,#fff0f6 0%, #fff 75%)}
html[data-theme="light"] .auth-main,html[data-theme="light"] .auth-body{background:var(--bg)}
html[data-theme="light"] .auth-hl{color:#1c1512}

/* ══════════════════════════════════════════════════════════════════════
   ICONOGRAPHY — SVGs injected into [data-ic] placeholders sit inside
   buttons / tabs / meta; keep them sized and aligned to the text.
   ══════════════════════════════════════════════════════════════════════ */
[data-ic]{display:inline-flex}
.ibtn,i[data-ic],.rail-tab i,.vc-meta i,.wmeta i{display:inline-flex;align-items:center;justify-content:center}
.ibtn svg,i[data-ic] svg{width:15px;height:15px}
.btn .ibtn{margin-right:-2px}
.rail-tab{display:inline-flex;align-items:center;gap:7px}
.rail-tab svg{width:14px;height:14px}
.rail-tab.active svg{color:#fff}
.rail-title{font-family:var(--display);font-weight:400;font-size:.82rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--mut);margin:0 0 10px}
.v-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.v-actions .btn{gap:6px}
.vc-meta i svg,.wmeta i svg{width:13px;height:13px;vertical-align:-2px}

/* ---- inline meta icons (from icon() helper) --------------------- */
.mi{display:inline-flex;align-items:center;vertical-align:-2px}
.mi svg{width:12px;height:12px}
.vc-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.vc-meta .mi svg{width:13px;height:13px}
.vc-pl{display:inline-flex;align-items:center;gap:4px;color:var(--mut);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rail-meta p .mi svg{width:12px;height:12px}

/* ---- watch: comments restyle ---------------------------------- */
.cava{width:38px;height:38px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;
  justify-content:center;font-weight:800;font-size:.9rem;color:#fff;
  background:linear-gradient(135deg,var(--pink),var(--pink-dark))}
.cbody{flex:1;min-width:0}
.crow{align-items:flex-start}
.clike svg{width:15px;height:15px}
.clike{display:inline-flex;align-items:center;gap:5px}
.cmt-none{color:var(--mut);font-size:.88rem;display:flex;align-items:center;gap:8px;padding:10px 0}
.cmt-none svg{width:16px;height:16px;opacity:.6}

/* ---- watch: rail links / icon thumbs ------------------------- */
.rail-link{width:100%;text-align:left;border:none;background:var(--panel);font-family:var(--font);
  align-items:center}
.rail-thumb--ic{display:flex;align-items:center;justify-content:center;background:var(--panel2);
  color:var(--pink)}
.rail-thumb--ic svg{width:24px;height:24px}
.rail-empty{color:var(--mut);font-size:.85rem;padding:10px 2px;line-height:1.5}

/* ---- home: flagship meta + playlist badge --------------------- */
.flag-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  font-size:.82rem;color:var(--mut);margin:0 0 12px}
.flag-meta .mi svg{width:13px;height:13px}
.flag-body{position:relative;z-index:1}
.flag-desc{max-width:52ch}
.pl-badge{position:absolute;right:8px;bottom:8px;z-index:3;display:inline-flex;align-items:center;gap:4px;
  background:rgba(0,0,0,.72);backdrop-filter:blur(3px);color:#fff;font-size:.68rem;font-weight:700;
  padding:3px 8px;border-radius:var(--radius-pill)}
.pl-badge svg{width:11px;height:11px}
.pl-card .vthumb{aspect-ratio:16/10}

/* ══════════════════════════════════════════════════════════════════════
   SUBSCRIBE — conversion page
   ══════════════════════════════════════════════════════════════════════ */
.sub-wrap{max-width:640px}
.sub-hero .social-proof{margin-top:14px}
.sub-step{display:flex;align-items:center;gap:12px;margin:var(--sp-lg) 0 var(--sp-sm)}
.sub-step:first-of-type{margin-top:var(--sp-md)}
.sub-step-n{width:30px;height:30px;flex-shrink:0;border-radius:50%;background:var(--pink);color:#fff;
  font-family:var(--display);font-weight:400;font-size:.95rem;display:flex;align-items:center;justify-content:center;
  box-shadow:0 6px 16px -6px var(--pink-glow)}
.sub-step h3{margin:0;font-family:var(--display);font-weight:400;font-size:1.15rem;letter-spacing:.02em}

.tier.best .tier-flag{display:block}
.tier-price{font-family:var(--display)}

.pay-card,.verify-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);
  padding:var(--sp-md);box-shadow:var(--e2)}
.pay-how{list-style:none;margin:0 0 20px;padding:0;display:flex;flex-direction:column;gap:10px}
.pay-how li{display:flex;align-items:flex-start;gap:10px;font-size:.9rem;line-height:1.5;color:var(--txt-dim)}
.pay-how li i{flex-shrink:0;margin-top:1px}
.pay-how li i svg{width:16px;height:16px;color:var(--pink)}
.pay-how b{color:var(--txt)}
.pay-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:6px}
.pay-field{background:var(--panel2);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.pay-field-l{display:block;font-size:.66rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--mut);margin-bottom:8px}
.pay-copy{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
  background:none;border:none;color:var(--txt);cursor:pointer;font-family:var(--font);padding:0;text-align:left}
.pay-copy b{font-family:var(--display);font-weight:400;font-size:1.4rem;letter-spacing:.04em;word-break:break-all}
.pay-copy i{flex-shrink:0;width:26px;height:26px;border-radius:8px;background:var(--pink-a14);color:var(--pink);
  display:flex;align-items:center;justify-content:center;transition:background var(--dur-1),transform var(--dur-1)}
.pay-copy i svg{width:14px;height:14px}
.pay-copy:hover i{background:var(--pink);color:#fff}
.pay-copy.copied i{background:var(--ok);color:#04250f}
.pay-amount b{font-family:var(--display);font-weight:400;font-size:1.4rem;color:#fff}
.pay-amount span{font-size:.72rem;color:var(--mut)}
.pay-note{display:block;margin-top:6px;font-size:.72rem;color:var(--mut)}
html[data-theme="light"] .pay-amount b{color:#1c1512}

.verify-card{margin-top:var(--sp-sm)}
.verify-card label{margin-top:16px}
.verify-card label:first-of-type{margin-top:0}
.hint{font-weight:400;color:var(--mut);font-size:.74rem;margin-left:4px}
#sub-ref{font-family:var(--display);font-size:1.05rem;letter-spacing:.14em}
.mine-h{display:block;font-size:.8rem;font-weight:700;color:var(--mut);margin:18px 0 8px;
  text-transform:uppercase;letter-spacing:.1em}
#my-payments .ovrow{align-items:center}
#my-payments .ovrow small{display:block;color:var(--mut);font-size:.68rem;margin-top:2px}

/* button loading spinner */
.btn.loading{color:transparent!important;pointer-events:none;position:relative}
.btn.loading::after{content:"";position:absolute;width:16px;height:16px;border-radius:50%;
  border:2px solid rgba(255,255,255,.4);border-top-color:#fff;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

@media(max-width:480px){.pay-grid{grid-template-columns:1fr}}

.sub-active{display:flex;align-items:center;gap:8px;justify-content:center;flex-wrap:wrap;
  background:var(--ok-bg);border:1px solid color-mix(in srgb,var(--ok) 40%,transparent);
  color:var(--ok);border-radius:var(--radius);padding:12px 18px;margin:0 0 var(--sp-md);font-size:.88rem}
.sub-active i svg{width:16px;height:16px}
.sub-active a{color:var(--ok);font-weight:800;text-decoration:underline}
.pay-copy--disabled{cursor:default}
.pay-copy--disabled b{font-size:.95rem;color:var(--mut);font-family:var(--font)}
.pay-copy--disabled i{display:none}

/* ══════════════════════════════════════════════════════════════════════
   LANDING PAGE additions — topbar, free-content strip, richer hero
   ══════════════════════════════════════════════════════════════════════ */
.lp-topbar{position:absolute;top:0;left:0;right:0;z-index:20;display:flex;align-items:center;
  justify-content:space-between;padding:18px clamp(16px,4vw,42px)}
.lp-topbar .brand{gap:10px}
.lp-topbar .brand img{width:40px;height:40px;border-radius:50%;object-fit:cover;border:2px solid var(--pink)}
.lp-topbar .brand .name{font-family:var(--display);font-weight:400;font-size:1.2rem;letter-spacing:.18em;color:#fff}
.lp-topbar .brand .name b{color:var(--pink)}
.lp-nav{display:flex;align-items:center;gap:16px}
.lp-nav>a:first-child{font-size:.85rem;font-weight:700;color:#fff;opacity:.85;letter-spacing:.02em}
.lp-nav>a:first-child:hover{opacity:1;color:var(--pink)}
.lp-nav .btn-line{border-color:rgba(255,255,255,.4);color:#fff}
.lp-nav .btn-line:hover{border-color:var(--pink);background:var(--pink);color:#fff}

/* richer hero when there's no reel clip */
.reel-stage.no-reel{background:
  radial-gradient(90% 70% at 15% 0%, rgba(255,46,136,.22), transparent 55%),
  radial-gradient(80% 60% at 100% 100%, rgba(255,46,136,.14), transparent 60%),
  linear-gradient(165deg,#22061a 0%, #0d0d0e 65%)}
.reel-stage.no-reel + .reel-veil{background:radial-gradient(ellipse at center,
  rgba(13,13,14,.25) 0%, rgba(13,13,14,.75) 100%)}
.reel-stage.no-reel ~ .sound-toggle{display:none}

/* free-to-watch strip */
.lp-free{max-width:1100px;margin:0 auto;padding:var(--sp-xl) clamp(16px,4vw,20px) var(--sp-lg)}
.lp-free[hidden]{display:none}
.lp-free-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:var(--sp-md)}
.lp-free-head .sec-head-l{margin:0}
.lp-free-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:var(--sp-md) var(--sp-sm)}
@media(max-width:560px){.lp-free-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}}

/* ══════════════════════════════════════════════════════════════════════
   ACCOUNT
   ══════════════════════════════════════════════════════════════════════ */
.acct-wrap{max-width:920px}
.acct-hero-txt{flex:1;min-width:0}
.acct-hero h1{font-family:var(--display);font-weight:400;font-size:1.6rem;margin:0 0 4px}
.acct-hero #p-email{margin:0 0 10px;font-size:.86rem;word-break:break-all}
.acct-hero .btn{gap:6px;flex-shrink:0}
.acct-hero .btn svg{width:15px;height:15px}
#mem-card{margin-bottom:var(--sp-sm)}
.acct-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.acct-card h2{display:flex;align-items:center;gap:8px}
.acct-card h2 svg{width:17px;height:17px;color:var(--pink)}
.acct-list{display:flex;flex-direction:column;gap:2px;max-height:340px;overflow-y:auto}
.acct-list .unrow{padding:8px 10px}
.acct-list .unrow h4{margin:0;font-size:.86rem;line-height:1.3;
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.acct-list .unrow p{margin:3px 0 0;font-size:.72rem;color:var(--mut)}
.acct-empty{color:var(--mut);font-size:.84rem;padding:8px 2px;margin:0}
.mem-note{font-size:.9rem;line-height:1.65;color:var(--txt-dim);margin:0}
.acct-hero .badge-free{background:var(--panel3);color:var(--mut)}
@media(max-width:560px){.acct-hero{flex-wrap:wrap}.acct-hero .btn{width:100%;justify-content:center}}

/* ══════════════════════════════════════════════════════════════════════
   PLAYLIST hero · ERROR page · settings heading
   ══════════════════════════════════════════════════════════════════════ */
.pl-hero{gap:var(--sp-md);align-items:center}
.pl-cover{width:132px;height:132px;flex-shrink:0;border-radius:var(--radius);overflow:hidden;
  background:radial-gradient(120% 120% at 80% 10%,#3d1226,#160a12 60%,#0d0d0f);
  display:flex;align-items:center;justify-content:center;box-shadow:var(--e2)}
.pl-cover img{width:100%;height:100%;object-fit:cover}
.pl-cover i svg{width:38px;height:38px;color:var(--pink);opacity:.85}
.pl-hero-txt{min-width:0}
.pl-hero-txt h1{font-family:var(--display);font-weight:400;font-size:clamp(1.5rem,4vw,2.2rem);
  margin:6px 0 8px;line-height:1.1}
.pl-desc{color:var(--txt-dim);font-size:.92rem;line-height:1.6;margin:0 0 12px;max-width:56ch}
@media(max-width:560px){.pl-hero{flex-direction:column;text-align:center}.pl-cover{width:100%;height:180px}}

.err-page{max-width:520px;margin:0 auto;padding:clamp(60px,14vh,140px) 24px;text-align:center}
.err-code{font-family:var(--display);font-weight:400;font-size:clamp(4rem,18vw,8rem);line-height:1;
  color:var(--pink);text-shadow:0 12px 60px var(--pink-glow)}
.err-page h1{font-family:var(--display);font-weight:400;font-size:1.5rem;margin:8px 0 10px}
.err-page p{color:var(--mut);line-height:1.6;margin:0 0 24px}
.err-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}

.settings-h{font-family:var(--display);font-weight:400;font-size:1.6rem;margin:8px 0 4px;
  display:flex;align-items:center;gap:10px}
.settings-h svg{width:22px;height:22px;color:var(--pink)}

/* ══════════════════════════════════════════════════════════════════════
   LIBRARY (reels / playlists / others / downloads / liked / history / search)
   ══════════════════════════════════════════════════════════════════════ */
.lib-wrap{max-width:1480px;margin:0 auto;padding:var(--sp-md) var(--sp-lg)}
@media(max-width:560px){.lib-wrap{padding:var(--sp-md) 16px}}
.lib-title{display:flex;align-items:center;gap:12px;font-family:var(--display);font-weight:400;
  font-size:clamp(1.5rem,3.5vw,2rem);margin:8px 0 6px}
.lib-ic{width:34px;height:34px;flex-shrink:0;border-radius:10px;background:var(--pink-a08);color:var(--pink);
  display:flex;align-items:center;justify-content:center}
.lib-ic svg{width:19px;height:19px}
.lib-sub{margin:0 0 var(--sp-md);font-size:.92rem}
.lib-sec{display:flex;align-items:center;gap:8px;margin:var(--sp-md) 0 12px;font-size:1.02rem;
  font-family:var(--display);font-weight:400}
.lib-sec svg{width:17px;height:17px;color:var(--pink)}
.lib-sec-empty{margin:0 0 var(--sp-md);font-size:.85rem}
#empty-ic svg{width:26px;height:26px}

/* admin card headings with icons */
.card h2{display:flex;align-items:center;gap:9px}
.card h2 i,.card h2 svg{flex-shrink:0}
.card h2 svg{width:17px;height:17px;color:var(--pink)}

/* button variants that were referenced but never styled */
.btn-dark{background:var(--panel2);color:var(--txt);border:1px solid var(--line)}
.btn-dark:hover{background:var(--panel3);border-color:var(--line-strong)}
html[data-theme="light"] .btn-dark{background:#fff;border-color:var(--line)}

/* ---- toast (JS-injected #toast) --------------------------------- */
#toast{position:fixed;left:50%;bottom:24px;z-index:var(--z-toast);
  transform:translate(-50%,16px);opacity:0;pointer-events:none;
  background:var(--pink);color:#fff;font-weight:700;font-size:.86rem;letter-spacing:.01em;
  padding:10px 20px;border-radius:var(--radius-pill);
  box-shadow:var(--e3),0 8px 30px -8px var(--pink-glow);
  transition:opacity var(--dur-2) var(--ease),transform var(--dur-2) var(--ease-spring)}
#toast.show{opacity:1;transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){#toast{transition:opacity var(--dur-2)}}

/* ---- admin overview extras ---------------------------------- */
.snap{position:relative}
.snap-ic{position:absolute;top:14px;right:14px;color:var(--pink);opacity:.5}
.snap-ic svg{width:18px;height:18px}
.snap .d{color:var(--mut);font-weight:600}
.an-h{font-family:var(--display);font-weight:400;font-size:.95rem;letter-spacing:.03em;margin:20px 0 12px}
.stat--ok b{color:var(--ok)}
.stat--bad b{color:var(--err)}
.stat--bad{border-color:color-mix(in srgb,var(--err) 40%,var(--line))}

.lockface .mi svg,.lockface svg{width:52px;height:52px;color:var(--mut)}
.uz-icon svg{width:34px;height:34px;color:var(--pink)}

/* premiere banner: kicker */
.pb-txt{display:flex;flex-direction:column;gap:1px;min-width:0}
.pb-kicker{font-size:.6rem;font-weight:800;letter-spacing:.22em;text-transform:uppercase;color:var(--pink)}
.prem-banner b{line-height:1.25}

/* light-theme: keep decorative gradient boxes readable */
html[data-theme="light"] .pl-cover{
  background:linear-gradient(135deg,#ffe0ee,#fff0f6)}
html[data-theme="light"] .pl-cover i svg{opacity:1}
html[data-theme="light"] .flag-media{
  background:radial-gradient(120% 120% at 80% 10%,#ffdcea,#fff 60%)}
html[data-theme="light"] .flag-title{color:#1c1512}
html[data-theme="light"] .flag-ep::before{
  background:radial-gradient(120% 80% at 15% 0%,var(--pink-a14),transparent 60%)}

/* ---- .vsl : lightweight loading shimmer (watch page) ------------ */
.vsl{border-radius:var(--radius);
  background:linear-gradient(100deg,var(--panel) 30%,var(--panel3) 50%,var(--panel) 70%);
  background-size:200% 100%;animation:sk 1.4s ease-in-out infinite;border:1px solid var(--line)}
#player-area>.vsl{aspect-ratio:16/9;width:100%}
#next-list>.vsl,#rail-scroll>.vsl{height:76px;margin-bottom:10px}
@media(prefers-reduced-motion:reduce){.vsl,.skel{animation:none}}

/* topbar nav: tighten on small screens */
.navlinks{gap:8px}
.navlinks .btn-sm{padding:7px 13px}
@media(max-width:520px){
  .nav-signin{display:none}          /* the membership button stays; Sign in is in the drawer/footer */
  .topbar-search input{width:min(150px,34vw)}
}

/* topbar search: inline magnifier + focus ring */
.topbar-search{position:relative;display:flex;margin-left:auto}
.topbar-search input{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23948c85' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4-4'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:11px center;background-size:15px;padding-left:34px}
.perf-ph{width:160px;height:90px;border-radius:10px;background:var(--panel2);flex-shrink:0}

/* reel viewer: size icon buttons, dim controls, tap hint */
#reel-viewer .reel-close svg,#reel-viewer .reel-side button svg{width:24px;height:24px}
#reel-viewer .reel-side button{display:flex;align-items:center;justify-content:center;
  backdrop-filter:blur(6px);transition:transform var(--dur-1) var(--ease-spring),background var(--dur-1)}
#reel-viewer .reel-side button.on{background:var(--pink)}
#reel-viewer .reel-close{display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px)}
#reel-viewer video{cursor:pointer}

/* belt-and-braces: link-styled cards never inherit UA blue */
.vcard,.rail-card,.unrow,.pl-card,.hrow-more,.dnav a,.ditem,.avatar-menu a{color:var(--txt)}
.hrow-more{color:var(--pink)}

/* ══════════════════════════════════════════════════════════════════════
   PALETTE V2 / DECLUTTER  —  calmer neutral surfaces, accent used
   sparingly, flat cards, grey pill buttons. Reference: YouTube / TikTok.
   Appended last so it wins the cascade.
   ══════════════════════════════════════════════════════════════════════ */

/* ---- typography: reserve the display face for hero / page titles ---- */
.vc-title,.hrow-head h3,.rail-meta h4,.unrow h4,.rail-title,.acct-card h2,
.card h2,.lib-sec,.adm-panel h3,.an-h,.cauthor{
  font-family:var(--font);font-weight:600;letter-spacing:0}
.vc-title{font-size:.92rem;line-height:1.35}
.hrow-head h3{font-size:1rem}

/* ---- feed cards: flat, borderless, spacing does the work ---- */
.vcard,.pl-card{background:transparent;border:none;box-shadow:none;border-radius:0;overflow:visible}
.vcard:hover{transform:none;box-shadow:none;border:none}
.vcard .vthumb,.pl-card .vthumb{border-radius:12px;border:none}
.vcard:hover .vthumb{box-shadow:none}
.vcard:hover .vthumb-img{transform:none}
.vthumb::after{display:none}
.vcard:hover .vc-title{color:var(--txt)}
.vcard:hover .vthumb .pl{transform:none}
.vinfo{padding:10px 2px 0;gap:0}
.vc-meta{margin-top:3px;font-size:.78rem;color:var(--mut)}
.grid{gap:26px 16px}
.pl-row{gap:12px}

/* play chip: smaller, only on hover (YouTube shows none, TikTok a subtle one) */
.vthumb .pl{width:44px;height:44px;background:rgba(0,0,0,.6);box-shadow:none;opacity:0;transition:opacity .15s}
.vcard:hover .vthumb .pl,.reel-card .vthumb .pl{opacity:1}
.vthumb .pl svg{width:18px;height:18px}

/* ribbons -> compact chips bottom-left, not shouty corner banners */
.ribbon{top:auto;bottom:8px;left:8px;font-size:.6rem;letter-spacing:.06em;padding:3px 7px;
  border-radius:4px;font-weight:700;box-shadow:none;backdrop-filter:none}
.ribbon.free-r{background:rgba(0,0,0,.75);border:none}
.ribbon.mem-r{background:var(--pink);color:#fff}
.ribbon.prem-r{background:rgba(0,0,0,.8);color:#fff;border:none}
.ribbon.new-r{display:none}            /* "NEW" on the first card was noise */

/* ---- buttons: primary = accent, everything else = grey pill ---- */
.btn{border-radius:var(--radius-pill);font-weight:600;transition:background .15s,color .15s,opacity .15s}
.btn:active{transform:none}
.btn-pink{background:var(--pink-dark);color:#fff;box-shadow:none}
.btn-pink:hover{background:var(--pink-dark);box-shadow:none;transform:none}
.btn-line{background:var(--panel2);border:none;color:var(--txt)}
.btn-line:hover{background:var(--panel3);border:none;color:var(--txt)}
.btn-dark{background:var(--panel2);border:none;color:var(--txt)}
.btn-dark:hover{background:var(--panel3)}
.btn.big{box-shadow:none}
.btn.big.btn-pink:hover{box-shadow:var(--glow)}

/* ---- chips: grey, active = light solid pill ---- */
.chip{background:var(--panel2);border:none;color:var(--txt);font-weight:600}
.chip:hover{background:var(--panel3);transform:none;border:none}
.chip.active{background:var(--txt);color:var(--black);border:none;box-shadow:none}
.chip.small{background:var(--panel2);border:none}

/* ---- topbar: flat ---- */
.topbar{background:var(--bg);backdrop-filter:none;-webkit-backdrop-filter:none;
  box-shadow:none;border-bottom:1px solid var(--line)}
.brand .name{background:none;-webkit-text-fill-color:currentColor;color:var(--txt);letter-spacing:.14em}
.brand .name b{color:var(--pink);-webkit-text-fill-color:var(--pink)}
.brand:hover img{transform:none;box-shadow:none}

/* ---- surfaces: keep radius + bg, drop borders/shadows ---- */
.card,.acct-card,.adm-panel,.pay-card,.verify-card,.tier,.snap,.stat,.step-card,.hl-card{
  box-shadow:none}
.card,.acct-card,.adm-panel{border-color:var(--line)}
.card:hover,.acct-card:hover,.snap:hover{border-color:var(--line);transform:none}
.tier:hover{transform:none;box-shadow:none}
.tier.sel{box-shadow:0 0 0 2px var(--pink)}
.tier.sel .tier-price,.tier.sel .tier-months{color:#fff}
.pl-card:hover{transform:none}
.rail-card:hover{transform:none;background:var(--panel2)}
.unrow:hover{transform:none;background:var(--panel2);border-radius:10px}
.step-card:hover{transform:none}
.acct-list .unrow:hover{transform:none}

/* ---- calmer motion ---- */
.hrow,.flag-ep,.prem-banner,.acct-hero,.pl-hero,.card,.tier{animation:none}
.hrow-more::after{content:none}
.snap::before{display:none}
.flag-ep::before{display:none}

/* ---- misc accent-reduction ---- */
.badge-paid{background:var(--panel2);color:var(--txt-dim);border:none}
.trailer-note{background:var(--panel2);color:var(--txt-dim)}
.watched-bar{background:var(--pink);box-shadow:none}
.hrow-ic{background:var(--panel2);color:var(--txt);box-shadow:none}
.hrow-ic svg{color:var(--mut)}
.lib-ic{background:var(--panel2)}
.lib-ic svg,.lib-sec svg,.acct-card h2 svg,.card h2 svg{color:var(--mut)}

/* skeletons: neutral */
.skel,.vsl{background:linear-gradient(100deg,var(--panel2) 30%,var(--panel3) 50%,var(--panel2) 70%);
  background-size:200% 100%;border:none}

@media(prefers-reduced-motion:reduce){*{animation:none!important}}

/* avatar menu: fixed + JS-positioned (edge-aware), never clips */
.avatar-menu{position:fixed;right:auto;top:auto;min-width:200px;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--e3);z-index:var(--z-menu);padding:6px;display:none}
.avatar-menu.open{display:block;animation:pop .14s var(--ease-out)}
.avatar-menu a,.avatar-menu button{font-size:.92rem;padding:11px 12px}
.avatar-menu a:hover,.avatar-menu button:hover{background:var(--panel2);color:var(--txt)}
.avatar-menu a:hover svg,.avatar-menu button:hover svg{color:var(--txt)}
.avatar-btn{background:var(--panel2);color:var(--txt);border:1px solid var(--line);
  box-shadow:none;width:32px;height:32px}
.avatar-btn:hover{background:var(--panel3);transform:none;box-shadow:none}

/* ══════════════════════════════════════════════════════════════════════
   WATCH PAGE V2  —  YouTube-style two-column, single clean "Up next" list
   ══════════════════════════════════════════════════════════════════════ */
.watch-shell{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:24px;
  max-width:1680px;margin:0 auto;padding:24px 24px 60px;align-items:start}
.watch-main{max-width:none;min-width:0}

#player-area{border-radius:12px;overflow:hidden;background:#000;aspect-ratio:16/9;
  box-shadow:none;display:block}
#player-area>.vsl{width:100%;height:100%;border-radius:0}
.player{width:100%;height:100%;aspect-ratio:auto;border-radius:0;display:block;background:#000}
.lockface{gap:8px;color:var(--mut);background:#000}
.lockface svg,.lockface .mi svg{width:46px;height:46px;color:var(--mut)}
.lockface small{font-size:.8rem}
.trailer-note{margin-top:8px;display:inline-block;background:var(--panel2);color:var(--txt-dim);
  font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:4px 10px;border-radius:var(--radius-pill)}

.wtitle{font-family:var(--font);font-weight:600;font-size:1.28rem;line-height:1.3;
  letter-spacing:0;margin:16px 0 10px}

.wmeta-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:10px 16px;margin:0;padding:0 0 14px;border-bottom:1px solid var(--line)}
.wmeta{color:var(--mut);font-size:.86rem;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.wmeta .pink{color:var(--pink)}
.wmeta .dl-note{display:inline-flex;align-items:center;gap:4px}
.wmeta .dl-note svg{width:13px;height:13px}
.v-actions{display:flex;gap:8px;flex-wrap:wrap}
.v-actions .btn{gap:6px;padding:8px 14px;font-size:.82rem}
.v-actions .btn svg{width:16px;height:16px}
.likebtn.liked{background:var(--pink-a14);color:var(--pink)}
.likebtn.liked svg{color:var(--pink)}
#savebtn.liked,#dlbtn.liked{background:var(--pink-a14);color:var(--pink)}
#savebtn.liked svg,#dlbtn.liked svg{color:var(--pink)}

/* description block = channel head + text (YouTube-ish) */
.descbox{background:var(--panel2);border:none;box-shadow:none;border-radius:12px;
  padding:14px 16px;margin-top:16px;font-size:.9rem;line-height:1.55}
.desc-head{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.desc-ava{width:36px;height:36px;border-radius:50%;object-fit:cover;flex-shrink:0}
.desc-head b{font-size:.9rem;font-weight:600;display:block}
.desc-pl{font-size:.8rem;color:var(--mut)}
.desc-pl a{color:var(--txt-dim);display:inline-flex;align-items:center;gap:3px}
.desc-pl a svg{width:12px;height:12px}
.desc-text{margin:0;white-space:pre-wrap;color:var(--txt-dim);font-size:.88rem;line-height:1.6}

/* locked panel: calm, centred */
.lockpanel{position:relative;overflow:hidden;flex-direction:column;align-items:center;text-align:center;
  background:var(--panel);border:1px solid var(--pink);box-shadow:none;
  border-radius:14px;padding:34px 24px;margin-top:18px;gap:6px}
.lockpanel::after{display:none}
.lockpanel p{color:var(--mut);max-width:400px;font-size:.9rem;line-height:1.55;margin:0 0 10px}
.lp-badge{background:var(--pink);color:#fff;font-size:.6rem;font-weight:800;letter-spacing:.24em;
  text-transform:uppercase;padding:5px 12px;border-radius:var(--radius-pill);box-shadow:none}
.lp-head{font-family:var(--font);font-weight:700;font-size:1.15rem;line-height:1.25;margin:6px 0 4px}
.lp-fine{font-size:.74rem;color:var(--mut);margin-top:6px}

/* ---- Up next list (one list, YouTube related-card style) ---- */
.upnext{width:auto}
.upnext h3{font-family:var(--font);font-weight:600;font-size:1rem;margin:0 0 12px}
#upnext-d{position:sticky;top:76px}
.upnext--inline{display:none;margin:22px 0 8px}
.pl-next-note{font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--mut);margin:0 0 10px}
#next-list,#next-list-m{display:flex;flex-direction:column;gap:8px}
#next-list>.vsl{height:94px;border-radius:8px}
.unrow{display:grid;grid-template-columns:168px 1fr;gap:10px;padding:6px;border-radius:10px;
  align-items:start;transition:background .12s}
.unrow:hover{background:var(--panel2)}
.unthumb{width:168px;aspect-ratio:16/9;border-radius:8px;object-fit:cover;background:var(--panel2);
  border:none;display:block}
.unthumb--ph{display:flex;align-items:center;justify-content:center;color:var(--mut)}
.unthumb--ph svg{width:22px;height:22px}
.uninfo{min-width:0}
.uninfo h4{margin:0;font-family:var(--font);font-weight:500;font-size:.9rem;line-height:1.3;color:var(--txt);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.unmeta{margin:4px 0 0;font-size:.78rem;color:var(--mut)}
.unbadge{display:inline-block;margin-top:5px;font-size:.6rem;font-weight:700;letter-spacing:.04em;
  color:var(--pink);background:var(--pink-a14);padding:2px 7px;border-radius:4px}
.rail-empty{color:var(--mut);font-size:.85rem;padding:8px 2px}

/* ---- comments ---- */
.cmt-section{margin-top:28px;border-top:1px solid var(--line);padding-top:22px}
.cmt-head{display:flex;align-items:center;gap:16px;margin-bottom:18px}
.cmt-head h3{font-family:var(--font);font-weight:600;font-size:1rem;margin:0}
.cmt-compose{display:flex;gap:12px;margin-bottom:24px}
.cmt-compose .cava{width:36px;height:36px;flex-shrink:0}
.cmt-compose textarea{width:100%;background:transparent;border:none;border-bottom:1px solid var(--line);
  border-radius:0;color:var(--txt);padding:6px 2px;font-size:.9rem;font-family:var(--font);
  outline:none;resize:none;transition:border-color .15s;min-height:22px}
.cmt-compose textarea:focus{border-bottom-color:var(--txt)}
.cmt-compose-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.cmt-signin{text-align:left;color:var(--mut);font-size:.86rem}
.cmt-signin a{color:var(--pink);font-weight:600}
.crow{display:flex;gap:12px;padding:14px 0;border-bottom:none;align-items:flex-start}
.cava{width:36px;height:36px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;
  justify-content:center;font-weight:700;font-size:.85rem;color:#fff;
  background:linear-gradient(135deg,var(--pink),var(--pink-dark))}
.cbody{flex:1;min-width:0}
.cauthor{font-weight:600;font-size:.82rem}
.cauthor small{color:var(--mut);font-weight:400;font-size:.74rem;margin-left:4px}
.crow p{margin:4px 0 0;font-size:.9rem;line-height:1.5;color:var(--txt-dim);white-space:pre-wrap}
.crow:hover{background:transparent}
.cmt-actions{display:flex;gap:12px;margin-top:8px}
.clike,.cdel{background:none;border:none;color:var(--mut);font-size:.76rem;cursor:pointer;
  padding:4px 8px;border-radius:var(--radius-pill);display:inline-flex;align-items:center;gap:5px}
.clike svg{width:15px;height:15px}
.clike:hover,.cdel:hover{background:var(--panel2);color:var(--txt)}
.clike.on{color:var(--pink)}
.clike.on svg{color:var(--pink)}
.cmt-none{color:var(--mut);font-size:.88rem;display:flex;align-items:center;gap:8px;padding:10px 0}

/* ---- responsive ---- */
@media(max-width:1000px){
  .watch-shell{grid-template-columns:1fr;gap:0;padding:0 0 60px}
  #player-area{border-radius:0}
  .watch-main{padding:0 16px}
  #upnext-d{display:none}
  .upnext--inline{display:block}
  .wtitle{font-size:1.15rem;margin-top:14px}
}
@media(max-width:640px){
  .unrow{grid-template-columns:160px 1fr;gap:8px}
  .unthumb{width:160px}
  .v-actions{width:100%}
  .v-actions .btn{flex:1;justify-content:center;min-width:0}
  .v-actions .btn .lbl{display:none}
  .v-actions #likebtn .lbl,.v-actions .likebtn span{display:inline}
}
@media(max-width:420px){
  .unrow{grid-template-columns:1fr;gap:6px}
  .unthumb{width:100%}
}

/* ══════════════════════════════════════════════════════════════════════
   REELS V2  —  tall shelf cards + TikTok/Shorts full-screen viewer
   ══════════════════════════════════════════════════════════════════════ */
.reels-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px}
@media(max-width:560px){.reels-grid{grid-template-columns:repeat(auto-fill,minmax(45%,1fr));gap:10px}}
.reel-card{display:flex;flex-direction:column;gap:6px;background:none;border:none;padding:0;
  cursor:pointer;text-align:left;font-family:var(--font);color:var(--txt)}
.rc-media{position:relative;aspect-ratio:9/16;border-radius:12px;overflow:hidden;background:var(--panel2);display:block}
.rc-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.rc-img--ph{display:flex;align-items:center;justify-content:center;color:var(--mut)}
.rc-img--ph svg{width:34px;height:34px}
.rc-play{position:absolute;left:8px;bottom:8px;width:30px;height:30px;border-radius:50%;
  background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s}
.rc-play svg{width:14px;height:14px;color:#fff}
.reel-card:hover .rc-play{opacity:1}
.rc-title{font-size:.86rem;font-weight:500;line-height:1.3;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rc-meta{font-size:.76rem;color:var(--mut)}

/* full-screen viewer */
#reel-viewer{position:fixed;inset:0;z-index:var(--z-reel);background:#000;display:flex;
  align-items:center;justify-content:center}
.reel-x{display:none}

.reel-track{position:absolute;inset:0;overflow-y:scroll;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.reel-track::-webkit-scrollbar{display:none}
.reel-slide{position:relative;height:100%;width:100%;scroll-snap-align:start;display:flex;
  align-items:center;justify-content:center;background:#000}
.reel-slide video{max-height:100%;max-width:min(100%,480px);width:auto;height:100%;object-fit:contain;background:#000}
.reel-tap{position:absolute;inset:0}
/* desktop: phone-shaped column, rounded */
@media(min-width:820px){
  .reel-slide video{height:min(92vh,860px);border-radius:14px}
}
.reel-rail{position:fixed;right:12px;bottom:96px;z-index:6;display:flex;flex-direction:column;gap:20px}
@media(min-width:820px){.reel-rail{right:calc(50% - 300px)}}
.reel-act{background:none;border:none;color:#fff;cursor:pointer;display:flex;flex-direction:column;
  align-items:center;gap:4px;font-family:var(--font);font-size:.72rem;font-weight:600;padding:0}
.reel-act>svg,.reel-act>i svg{width:30px;height:30px;filter:drop-shadow(0 2px 6px rgba(0,0,0,.6))}
.reel-act.on{color:var(--pink)}
.reel-act.on>svg,.reel-act.on>i svg{color:var(--pink)}
.reel-info{position:fixed;left:16px;right:80px;bottom:26px;z-index:6;color:#fff;
  text-shadow:0 1px 6px rgba(0,0,0,.7)}
@media(min-width:820px){.reel-info{left:calc(50% - 300px);right:auto;max-width:340px}}
.reel-info b{display:block;font-size:.95rem;font-weight:600;line-height:1.35;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.reel-info span{font-size:.8rem;opacity:.85}

/* comments sheet */
.reel-comments{position:fixed;left:0;right:0;bottom:0;z-index:7;height:70vh;max-height:640px;
  background:var(--panel);border-radius:18px 18px 0 0;display:flex;flex-direction:column;
  transform:translateY(101%);transition:transform .28s var(--ease-out)}
@media(min-width:820px){.reel-comments{left:auto;right:0;top:0;bottom:0;width:400px;height:auto;max-height:none;
  border-radius:0;transform:translateX(101%)}}
.reel-comments.open{transform:none}
.rcm-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line)}
.rcm-head b{font-size:.95rem;font-weight:600}
.rcm-x{background:none;border:none;color:var(--mut);cursor:pointer;display:flex}
.rcm-x svg{width:20px;height:20px}
.rcm-list{flex:1;overflow-y:auto;padding:12px 18px}
.rcm-row{display:flex;gap:10px;padding:10px 0;align-items:flex-start}
.rcm-row p{margin:3px 0 0;font-size:.88rem;line-height:1.45;color:var(--txt-dim);white-space:pre-wrap}
.rcm-compose{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--line)}
.rcm-compose textarea{flex:1;background:var(--panel2);border:none;border-radius:var(--radius-pill);
  color:var(--txt);padding:9px 16px;font-family:var(--font);font-size:.88rem;outline:none;resize:none;min-height:20px}

/* ══════════════════════════════════════════════════════════════════════
   ACCOUNT V2  —  clean library rows, calm hero
   ══════════════════════════════════════════════════════════════════════ */
.acct-wrap{max-width:900px;padding:24px 20px 60px}
.acct-hero{background:var(--panel);border:1px solid var(--line);border-radius:14px;
  padding:20px;gap:16px;box-shadow:none;align-items:center}
.acct-hero::before{display:none}
.acct-ava{width:72px;height:72px;box-shadow:none;border:2px solid var(--line)}
.acct-hero h1{font-family:var(--font);font-weight:600;font-size:1.3rem;margin:0 0 3px}
.acct-hero #p-email{font-size:.84rem;margin:0 0 8px}
.acct-hero .badge{background:var(--panel2);color:var(--txt-dim);border:none;font-weight:600}
.acct-hero .btn svg{width:15px;height:15px}
#mem-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;margin-bottom:14px}
.mem-note{color:var(--txt-dim);font-size:.9rem;line-height:1.6;margin:0}
.acct-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.acct-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:none}
.acct-card h2{font-family:var(--font);font-weight:600;font-size:.95rem;margin:0 0 3px;display:flex;align-items:center;gap:8px}
.acct-card h2 svg{width:16px;height:16px;color:var(--mut)}
.acct-card .sub{font-size:.78rem;color:var(--mut);margin:0 0 12px}
.acct-list{display:flex;flex-direction:column;gap:2px;max-height:320px;overflow-y:auto;margin:0 -6px}
.acct-row{display:grid;grid-template-columns:64px 1fr;gap:10px;align-items:center;
  padding:6px;border-radius:8px;color:var(--txt);transition:background .12s}
.acct-row:hover{background:var(--panel2)}
.ar-thumb{width:64px;aspect-ratio:16/9;border-radius:6px;overflow:hidden;background:var(--panel2);
  display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ar-thumb img{width:100%;height:100%;object-fit:cover}
.ar-thumb svg{width:16px;height:16px;color:var(--mut)}
.ar-thumb.ar-ph img{display:none}
.ar-txt{min-width:0}
.ar-txt b{display:block;font-weight:500;font-size:.83rem;line-height:1.3;
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.ar-txt small{font-size:.72rem;color:var(--mut)}
.acct-empty{color:var(--mut);font-size:.84rem;padding:6px;margin:0}
@media(max-width:560px){.acct-hero{flex-wrap:wrap}.acct-hero .btn{width:100%;justify-content:center}}

/* ══════════════════════════════════════════════════════════════════════
   ADMIN V2  —  Studio content list + upload wizard
   ══════════════════════════════════════════════════════════════════════ */
.adm-wrap{max-width:1180px;padding:24px 20px 80px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px;box-shadow:none}
.card h2{font-family:var(--font);font-weight:600;font-size:1.02rem;margin:0 0 4px}
.card .sub{font-size:.82rem;color:var(--mut);margin:0 0 16px}
.snap{background:var(--panel);border:1px solid var(--line);border-radius:12px}
.snap .n{font-family:var(--font);font-weight:700;font-size:1.6rem}
.snap .l{color:var(--mut)}
.adm-panel{background:var(--panel);border:1px solid var(--line);border-radius:12px}
.stat{background:var(--panel);border:1px solid var(--line)}
.stat b{font-family:var(--font);font-weight:700}

/* Studio content list (replaces the cramped table) */
.v-list{display:flex;flex-direction:column;gap:2px}
.v-empty{padding:28px;text-align:center;color:var(--mut);font-size:.9rem}
.vl-row{border-radius:10px;transition:background .12s}
.vl-row:hover,.vl-row--open{background:var(--panel2)}
.vl-main{display:grid;grid-template-columns:120px 1fr auto;gap:14px;align-items:center;padding:10px}
.vl-thumb{width:120px;aspect-ratio:16/9;border-radius:8px;object-fit:cover;background:var(--panel3);display:block}
.vl-thumb--ph{display:inline-block}
.vl-info{min-width:0}
.vl-title{font-weight:500;font-size:.92rem;line-height:1.3;
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.vl-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:6px;font-size:.76rem;color:var(--mut)}
.v-pill{font-size:.64rem;font-weight:700;letter-spacing:.04em;padding:2px 8px;border-radius:var(--radius-pill)}
.v-pill--pub{background:var(--panel3);color:var(--txt-dim)}
.v-pill--mem{background:var(--pink-a14);color:var(--pink)}
.v-pill--sched{background:var(--warn-bg);color:var(--warn)}
.vl-edit{flex-shrink:0}
.vl-edit-panel{padding:0 10px 14px}
.vl-edit-panel[hidden]{display:none}
.vl-edit-panel label{margin-top:12px;font-size:.72rem}
.vl-edit-panel label:first-child{margin-top:4px}
.vl-edit-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:4px}
.vl-checks{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:14px}
.vl-edit-actions{display:flex;gap:10px;margin-top:16px}
@media(max-width:640px){
  .vl-main{grid-template-columns:100px 1fr;grid-template-areas:'thumb info' 'edit edit'}
  .vl-thumb{width:100px}
  .vl-edit{grid-area:edit;width:100%;justify-content:center}
}

/* upload wizard */
.wiz-steps{display:flex;gap:8px;flex-wrap:wrap;margin:16px 0 22px}
.wiz-step{display:inline-flex;align-items:center;gap:7px;padding:7px 14px;border-radius:var(--radius-pill);
  background:var(--panel2);color:var(--mut);font-size:.82rem;font-weight:600;border:none}
.wiz-step b{width:20px;height:20px;border-radius:50%;background:var(--panel3);color:var(--mut);
  display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:700}
.wiz-step.active{background:var(--pink);color:#fff}
.wiz-step.active b{background:rgba(255,255,255,.25);color:#fff}
.wiz-step.done b{background:var(--pink);color:#fff}
.wiz-h{font-family:var(--font);font-weight:600;font-size:.95rem;margin:0 0 12px}
.wiz-panel label{margin-top:14px}
.wiz-panel label:first-of-type{margin-top:0}
.upload-zone{border:2px dashed var(--line-strong);background:var(--panel2);border-radius:14px;
  padding:34px 18px;text-align:center;cursor:pointer;transition:background .15s,border-color .15s;margin-bottom:6px}
.upload-zone:hover,.upload-zone.drag{background:var(--panel3);border-color:var(--pink)}
.upload-zone .uz-icon svg{width:32px;height:32px;color:var(--mut)}
.upload-zone b{display:block;margin-top:8px;font-size:.9rem}
.upload-zone p{margin:4px 0 0;font-size:.8rem;color:var(--mut)}
.sched-box{margin-top:12px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:14px}
.sched-box label{margin-top:10px}
.sched-box label:first-child{margin-top:0}
.wiz-nav{display:flex;gap:10px;align-items:center;margin-top:20px;flex-wrap:wrap}
.wiz-review .ovrow{background:var(--panel2);border-radius:8px;padding:10px 14px}
.progress{background:var(--panel2)}
.progress>div{background:var(--pink)}
.lan-tip{background:var(--panel2);border:1px solid var(--line);color:var(--txt-dim)}
.lan-link{color:var(--pink)}

/* other admin tables: lighten */
table th{color:var(--mut);font-size:.68rem;letter-spacing:.06em}
table td,table th{border-bottom-color:var(--line)}
.pill{font-weight:700}
.refcode{background:var(--panel2)}
.hbar{background:var(--panel2)}
.hbar>div{background:var(--pink)}
.dbar{background:var(--pink)}

/* ══════════════════════════════════════════════════════════════════════
   MOBILE POLISH  —  small-screen flow for the V2 components
   ══════════════════════════════════════════════════════════════════════ */
@media(max-width:600px){
  .topbar{padding:8px 12px;gap:10px}
  .topbar .brand .name{font-size:1.1rem}
  .topbar-search input{width:min(150px,40vw);font-size:.85rem}
  .navlinks{gap:6px}
  .content{padding:16px 14px 40px}
  .grid{grid-template-columns:repeat(auto-fill,minmax(46%,1fr));gap:18px 12px}
  .pl-row{gap:10px}
  .pl-card{flex:0 0 150px}
  .hrow{margin:20px 0}
  .hrow-head h3{font-size:.95rem}
  .flag-ep{flex-direction:column;padding:16px;border-radius:0;margin-left:-14px;margin-right:-14px}
  .flag-media{width:100%}
  .flag-title{font-size:1.25rem}
  .prem-banner{flex-wrap:wrap;border-radius:12px}
  .prem-timer{margin-left:0;width:100%;text-align:left;font-size:1.05rem}
  .lib-wrap,.acct-wrap,.sub-wrap,.adm-wrap,.pl-wrap{padding-left:14px;padding-right:14px}
  .acct-hero{padding:16px}
  .acct-ava{width:60px;height:60px}
  .card{padding:16px;border-radius:12px}
  .value-grid,.testi-row,.step-cards{grid-template-columns:1fr}
  .lp-proof{gap:20px}
  .auth-card{padding:22px}
}
@media(max-width:380px){
  .topbar .brand div{display:none}      /* logo only on very small screens */
  .grid{grid-template-columns:1fr}
  .reels-grid{grid-template-columns:repeat(2,1fr)}
  .v-actions .btn{padding:8px 10px}
}
/* tap targets: everything interactive at least ~40px on touch */
@media(pointer:coarse){
  .btn-sm{padding:9px 15px}
  .chip{padding:9px 15px}
  .clike,.cdel,.theme-btn,.bell{min-height:36px}
}

/* ---- drawer / notif / fab: calm neutral treatment ---- */
.site-drawer,.adm-drawer{background:var(--panel);box-shadow:var(--e4)}
.site-drawer .drawer-head b,.drawer-head b{color:var(--txt)}
.dnav a,.ditem{border-left:none;border-radius:8px;margin:1px 8px}
.dnav a:hover,.ditem:hover{background:var(--panel2);padding-left:18px}
.dnav a.active,.ditem.active{background:var(--panel3);border-left:none;color:var(--txt);font-weight:600}
.dnav a.active svg,.ditem.active svg{color:var(--pink)}
.drawer-scrim{background:rgba(0,0,0,.5)}
.hamb,.site-hamb{border:1px solid var(--line);border-radius:9px;color:var(--txt)}
.hamb:hover,.site-hamb:hover{background:var(--panel2);border-color:var(--line-strong);color:var(--txt)}
.notif-panel{border:1px solid var(--line);box-shadow:var(--e3)}
.nrow{background:var(--panel2)}
.nrow.link:hover{outline:none;background:var(--panel3);transform:none}
.fab{box-shadow:var(--e3)}
.fab:hover{transform:scale(1.05);box-shadow:var(--e3),var(--glow)}
.fab:active{transform:scale(.95)}
.theme-btn{color:var(--txt-dim)}
.theme-btn:hover{color:var(--txt)}
.theme-btn svg{width:20px;height:20px}
.bell{color:var(--txt-dim)}
.bell:hover{color:var(--txt);transform:none}
.bell svg{width:20px;height:20px}

/* ══════════════════════════════════════════════════════════════════════
   PALETTE V2 — hardcoded-colour sweep.  Kills the leftover purple/pink
   gradient placeholders and mismatched semantic colours from the base
   layer that read as "complicated colours". Neutral surfaces + tokens.
   ══════════════════════════════════════════════════════════════════════ */

/* video-thumbnail placeholders: flat neutral, no decorative gradient */
.vthumb,
.grid .vcard:nth-child(4n+1) .vthumb,
.grid .vcard:nth-child(4n+2) .vthumb,
.grid .vcard:nth-child(4n+3) .vthumb,
.grid .vcard:nth-child(4n) .vthumb{background:var(--panel2)}
.flag-media,.pl-hero-cover{background:var(--panel2)}

/* card / studio text that hardcoded #fff */
.vcard:hover h3,.vcard h3,.snap .n,.ctitle,.ov-h,.an-h{color:var(--txt)}
.card:hover,.acct-card:hover{border-color:var(--line-strong)}

/* semantic colours -> tokens (base layer used ad-hoc greens/ambers) */
.badge-free{background:var(--ok-bg);color:var(--ok)}
.vis.pub,.pill.ok{color:var(--ok)}
.pill.ok{background:var(--ok-bg)}
.vis.members,.pill.no,.pill.prem,.badge.prem,.cdel:hover{color:var(--err)}
.pill.no,.pill.prem,.badge.prem{background:var(--err-bg)}
.pill.sched{background:var(--warn-bg);color:var(--warn)}
.msg.err{color:var(--err)}.msg.ok{color:var(--ok)}

/* comments: neutral rule lines + body text */
.crow{border-bottom-color:var(--line)}
.crow p{color:var(--txt-dim)}

/* history bars: flat accent, no gradient */
.hbar>div{background:var(--pink)}
.hbar-label{color:var(--txt-dim)}

/* lock / hero panels: drop the maroon gradient for a calm panel */
.lockpanel{background:var(--panel);border:1px solid var(--line);color:var(--txt-dim)}
.lockpanel .lp-head{color:var(--txt)}
.pl-hero{background:var(--panel);border:1px solid var(--line)}

/* selection + skip-link keep #fff on pink (correct on the accent) */

/* ══════════════════════════════════════════════════════════════════════
   AVATAR IMAGE FIX + ACCOUNT V3 ("You" page, YouTube-style shelves)
   ══════════════════════════════════════════════════════════════════════ */

/* the declutter pass reset background-image via the `background` shorthand,
   so a set avatar rendered as garbage. Use a real <img> child instead. */
.avatar-btn{overflow:hidden;padding:0}
.avatar-btn.has-img{background:var(--panel2)}
.avatar-img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}

/* --- identity header --- */
.you-wrap{max-width:1100px;margin:0 auto;padding:24px 24px 72px}
.you-head{display:flex;align-items:center;gap:20px;padding-bottom:22px;
  border-bottom:1px solid var(--line);margin-bottom:20px}
.you-ava{width:88px;height:88px;border-radius:50%;object-fit:cover;flex-shrink:0;background:var(--panel2)}
.you-id{min-width:0;flex:1}
.you-id h1{font-family:var(--font);font-weight:700;font-size:1.55rem;margin:0 0 4px;line-height:1.2}
.you-sub{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0;font-size:.85rem}
.you-sub .badge{font-weight:600;font-size:.68rem;letter-spacing:.03em}
.you-settings{flex-shrink:0}
.you-settings svg{width:15px;height:15px}

/* --- membership strip --- */
.you-mem{margin-bottom:8px}
.you-mem .mem-note{color:var(--txt-dim);font-size:.88rem;line-height:1.6;margin:0;
  display:flex;align-items:center;gap:8px}
.you-mem .mem-note svg{width:16px;height:16px;color:var(--ok);flex-shrink:0}
.mem-cta{display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px 20px}
.mem-cta>div{flex:1;min-width:200px}
.mem-cta b{display:block;font-size:.95rem;margin-bottom:3px}
.mem-cta .mem-note{margin:0}
.mem-cta .btn{flex-shrink:0}

/* --- shelves --- */
.you-shelf{padding:20px 0;border-bottom:1px solid var(--line)}
.you-shelf:last-child{border-bottom:none}
.shelf-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}
.shelf-head h2{font-family:var(--font);font-weight:600;font-size:1.05rem;margin:0;
  display:flex;align-items:center;gap:8px}
.shelf-head h2 svg{width:17px;height:17px;color:var(--mut)}
.shelf-head a{font-size:.8rem;font-weight:600;color:var(--mut);white-space:nowrap;flex-shrink:0}
.shelf-head a:hover{color:var(--txt)}
.shelf-strip{display:flex;gap:14px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;
  padding-bottom:6px;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}
.shelf-strip::-webkit-scrollbar{height:6px}
.shelf-strip::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:99px}
.sh-card{flex:0 0 200px;scroll-snap-align:start;display:flex;flex-direction:column;gap:7px;color:var(--txt)}
.sh-thumb{aspect-ratio:16/9;border-radius:10px;overflow:hidden;background:var(--panel2);
  display:flex;align-items:center;justify-content:center}
.sh-thumb img{width:100%;height:100%;object-fit:cover}
.sh-thumb svg{width:22px;height:22px;color:var(--mut)}
.sh-title{font-size:.85rem;font-weight:500;line-height:1.32;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.sh-note{font-size:.75rem;color:var(--mut)}
.shelf-empty{color:var(--mut);font-size:.85rem;margin:2px 0 6px}
.vsl--card{flex:0 0 200px;height:112px;border-radius:10px}

@media(max-width:600px){
  .you-wrap{padding:18px 14px 56px}
  .you-head{flex-wrap:wrap;gap:14px}
  .you-ava{width:64px;height:64px}
  .you-id h1{font-size:1.25rem}
  .you-settings{margin-left:auto}
  .sh-card,.vsl--card{flex-basis:160px}
  .vsl--card{height:90px}
}

/* ══════════════════════════════════════════════════════════════════════
   REELS V3 — viewer polish: legibility scrims, circular action buttons,
   channel line, immersive fill on phones. (YouTube Shorts reference.)
   ══════════════════════════════════════════════════════════════════════ */

/* gradient scrims so controls stay legible over any frame */
#reel-viewer::before,#reel-viewer::after{content:"";position:fixed;left:0;right:0;
  pointer-events:none;z-index:5}
#reel-viewer::before{top:0;height:120px;background:linear-gradient(180deg,rgba(0,0,0,.55),transparent)}
#reel-viewer::after{bottom:0;height:220px;background:linear-gradient(0deg,rgba(0,0,0,.6),transparent)}
@media(min-width:820px){
  /* desktop shows a phone-shaped column; keep scrims off the void */
  #reel-viewer::before,#reel-viewer::after{left:50%;width:min(100vw,520px);transform:translateX(-50%)}
}

/* immersive fill on phones, letterboxed column on desktop */
@media(max-width:819px){
  .reel-slide video{width:100%;height:100%;max-width:none;object-fit:cover}
}

/* action rail: circular translucent buttons like Shorts */
.reel-rail{gap:16px;bottom:120px}
.reel-act .mi{display:flex;align-items:center;justify-content:center;
  width:46px;height:46px;border-radius:50%;background:rgba(255,255,255,.15);
  backdrop-filter:blur(2px);transition:background .15s}
.reel-act:hover .mi{background:rgba(255,255,255,.26)}
.reel-act .mi svg{width:24px;height:24px;filter:none}
.reel-act>svg{width:24px;height:24px}
.reel-act.on .mi{background:var(--pink)}
.reel-act.on .mi svg{color:#fff}
.reel-act.on{color:#fff}
.reel-act b{font-size:.72rem;font-weight:600;text-shadow:0 1px 3px rgba(0,0,0,.7)}

/* info block: channel line + title + views */
.reel-info{bottom:30px}
.reel-chan{display:flex!important;align-items:center;gap:8px;font-size:.85rem;font-weight:600;margin-bottom:6px}
.reel-chan img{width:26px;height:26px;border-radius:50%;background:#fff;object-fit:cover}
.reel-info b{font-size:.98rem;font-weight:500;margin-bottom:2px}
.reel-views{font-size:.78rem;opacity:.8}

/* back button: clean, top-left, professional (TikTok / Shorts style) */
.reel-back{position:fixed;top:16px;left:14px;z-index:8;width:40px;height:40px;
  border:none;border-radius:50%;background:rgba(0,0,0,.32);color:#fff;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:background .15s}
.reel-back:hover{background:rgba(0,0,0,.5)}
.reel-back:active{transform:scale(.92)}
.reel-back svg{width:22px;height:22px}
@media(min-width:820px){.reel-back{left:calc(50% - 300px)}}

/* ══════════════════════════════════════════════════════════════════════
   PRIMARY NAV (YouTube-style): Home / Reels / Playlists / You.
   A fixed bottom bar on EVERY screen size — it replaces the old left
   drawer entirely (the hamburger is hidden site-wide).
   ══════════════════════════════════════════════════════════════════════ */

/* ── how tall the bar is, said once ──────────────────────────────────
   Everything that has to keep clear of the bar reads --tabbar-h, and the
   bar itself is built from the same numbers, so the two cannot drift.
   --sab is a variable rather than a bare env() (the same trick .lv uses)
   so a test can put a gesture bar on the screen and prove the layout
   still clears it — headless Chrome reports env(safe-area-inset-bottom)
   as 0, which is exactly the case that used to hide the bug.
   --tabbar-bar is the bar's own box; --tabbar-gap is the air under it
   (nil on a phone, where it sits flush; 16px for the desktop dock).   */
:root{
  --sab:env(safe-area-inset-bottom,0px);
  --tabbar-bar:64px;
  --tabbar-gap:0px;
  --tabbar-h:calc(var(--tabbar-bar) + var(--tabbar-gap) + var(--sab));
  /* how far the page's own content stays clear of the bar: the bar
     itself plus a little air, so the last card is not welded to it. */
  --tabbar-clear:calc(var(--tabbar-h) + var(--sp-sm));
}

.tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:95;
  display:flex;align-items:center;gap:4px;
  box-sizing:border-box;min-height:calc(var(--tabbar-bar) + var(--sab));
  background:var(--bg);border-top:1px solid var(--line);
  padding:6px 4px calc(6px + var(--sab));
}
.tabbar .tab{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:3px;padding:6px 2px;min-height:48px;border-radius:10px;
  color:var(--mut);font-size:.66rem;font-weight:500;
}
.tabbar .tab-ic{display:flex;align-items:center;justify-content:center}
.tabbar .tab-ic svg{width:23px;height:23px}
.tabbar .tab.active{color:var(--txt);font-weight:600}
.tabbar .tab.active .tab-ic svg{stroke-width:2.3}
.tabbar .tab:active{background:var(--panel2)}
.tabbar .tab:hover{background:var(--panel2);color:var(--txt)}

/* ── the bar must not sit on top of the page ────────────────────
   The DOCUMENT does the scrolling. An earlier pass tried to stop the bar
   from ever overlaying anything by making the body the scroll container
   instead: html:has(body.has-tabbar){height:100%;overflow:hidden} plus
   body{height:calc(100dvh - var(--tabbar-h));overflow-y:auto}. That broke
   the page outright — documentElement.scrollHeight collapsed to
   clientHeight, so window.scrollTo, in-page anchors, scroll restoration
   and scrollIntoView all became no-ops, and everything past the first
   screen (the last vcard on /home, /library, /subscribe, the buttons at
   the foot of /account/settings) was clipped by the body box with no way
   to scroll to it.
   A fixed bar passing over mid-page content as you scroll by is what a
   fixed bar does and is fine; what must never happen is content you
   cannot scroll out from under it. So: keep document scrolling, and buy
   the clearance with padding at the foot of the page.
   --tabbar-clear carries --sab, so a real phone's gesture bar is cleared
   too — headless Chrome reports env(safe-area-inset-bottom) as 0, which
   is why --sab is a variable a test can set to prove the layout holds.
   .locked bodies get no bar — see body.locked.has-tabbar further down. */
body.has-tabbar{
  padding-bottom:var(--tabbar-clear);
  scroll-padding-bottom:var(--tabbar-clear);
}

/* Anything sized "one whole screen" has to mean one screen *minus the bar*,
   or its bottom edge — and the button usually sitting on it — lands under
   the bar and the page grows a stray 64px of scroll. */
body.has-tabbar .getpage,
body.has-tabbar .lp-hero{
  min-height:calc(100vh - var(--tabbar-clear));
  min-height:calc(100dvh - var(--tabbar-clear));
}
body.has-tabbar .shell{
  min-height:calc(100vh - 65px - var(--tabbar-clear));
  min-height:calc(100dvh - 65px - var(--tabbar-clear));
}

/* the bottom bar makes the left drawer redundant — retire the hamburger */
.site-hamb{display:none !important}
.top-left{border-right:none;padding-right:4px;margin-right:0}

/* desktop: a centred floating dock reads nicer than a full-width bar */
@media(min-width:761px){
  :root{--tabbar-bar:52px;--tabbar-gap:16px}
  .tabbar{
    left:50%;right:auto;transform:translateX(-50%);
    bottom:calc(var(--tabbar-gap) + var(--sab));
    gap:4px;border:1px solid var(--line);border-radius:var(--radius-pill);
    padding:6px;box-shadow:var(--e3);background:var(--bg);
    min-height:var(--tabbar-bar);
  }
  .tabbar .tab{
    flex:0 0 auto;flex-direction:row;gap:8px;min-height:0;
    padding:9px 18px;border-radius:var(--radius-pill);
    font-size:.85rem;font-weight:600;
  }
  .tabbar .tab-ic svg{width:19px;height:19px}
  .tabbar .tab.active{background:var(--panel2)}
}

/* keep any floating furniture clear of the bar (only where the bar exists) */
body.has-tabbar .fab{bottom:calc(var(--tabbar-h) + var(--sp-sm))}
body.has-tabbar #toast{bottom:calc(var(--tabbar-h) + var(--sp-sm))}

/* --- landing page: small-screen polish --- */
@media(max-width:560px){
  .lp-topbar{padding:14px 16px}
  .lp-topbar .brand img{width:34px;height:34px}
  .lp-topbar .brand .name{font-size:1.05rem;letter-spacing:.12em}
  .lp-nav{gap:10px}
  .lp-nav>a:first-child{font-size:.8rem}
  .lp-hero{padding:0 16px;min-height:100svh}
  .hero-name{font-size:clamp(2.8rem,17vw,4.5rem)}
  .hero-tag{margin:12px 0 22px}
  .hero-cta{font-size:1rem;padding:14px 30px;width:100%;max-width:320px}
  .lp-authority{padding:36px 18px;gap:18px;text-align:center}
  .auth-photo img{width:132px;height:132px}
  .lp-proof{flex-direction:column;gap:22px;padding:32px 18px;text-align:center}
  .lp-value,.lp-testi,.lp-final{padding-left:18px;padding-right:18px}
  .sec-head-l{font-size:1.3rem}
  .lp-final .final-cta{width:100%;max-width:320px}
  .final-h{font-size:1.6rem}
}
@media(max-width:380px){
  .hero-name{font-size:2.5rem}
  .lp-topbar .brand .name{display:none}
}

/* --- colour restraint: "see all" links neutral like YouTube --- */
.hrow-more,.hrow-more:visited{color:var(--mut)}
.hrow-more:hover{color:var(--txt)}
/* one video type — drop the FREE / MEMBERS-ONLY badges (premiere still shows) */
.ribbon.free-r,.ribbon.mem-r{display:none}
.vc-trailer{display:none}

/* ══════════════════════════════════════════════════════════════════════
   ACCENT DISCIPLINE — keep the pink for: primary button, brand mark,
   liked/active engagement, progress. Everything else goes neutral.
   (YouTube keeps red to the logo + subscribe + progress only.)
   ══════════════════════════════════════════════════════════════════════ */
.feed-title em,.sub-title em,.story-title em,.story-invite h2 em{color:inherit;font-weight:700}
.pl-next-note,.flag-label,.tier-cta,.auth-title,.eyebrow,.lib-sec-k{color:var(--mut)}
.snap .d{color:var(--mut)}
.dnav a.active svg,.ditem.active svg{color:var(--txt)}
.clike:hover{color:var(--txt)}
.tier.sel{box-shadow:0 0 0 2px var(--pink)}          /* keep the single selected-plan ring */
.notif-panel .nrow.unread{border-left-color:var(--txt)}
/* card hover: neutral surface shift, never a coloured outline */
.vcard:hover .vthumb,.pl-card:hover .vthumb,.sh-card:hover .sh-thumb,.reel-card:hover .rc-media{
  outline:none;box-shadow:none}
.vcard:hover .vc-title,.sh-card:hover .sh-title{color:var(--txt)}

/* ══════════════════════════════════════════════════════════════════════
   BRIGHT MODE = clean white / black / a little pink.  Default theme.
   Neutralises the leftover pink washes so light mode reads crisp.
   ══════════════════════════════════════════════════════════════════════ */

html[data-theme="light"] body{background:#fff}
html[data-theme="light"] .topbar{background:#fff;box-shadow:none;border-bottom:1px solid var(--line)}
html[data-theme="light"] .tabbar{background:#fff}

/* thumbnail placeholders: flat neutral grey, no pink gradient */
html[data-theme="light"] .vthumb,
html[data-theme="light"] .vthumb.no-thumb,
html[data-theme="light"] .grid .vcard:nth-child(4n+1) .vthumb,
html[data-theme="light"] .grid .vcard:nth-child(4n+2) .vthumb,
html[data-theme="light"] .grid .vcard:nth-child(4n+3) .vthumb,
html[data-theme="light"] .grid .vcard:nth-child(4n) .vthumb,
html[data-theme="light"] .sh-thumb,
html[data-theme="light"] .ar-thumb,
html[data-theme="light"] .rc-media{background:#f2f2f2;border-color:var(--line)}

/* hero / panel washes -> flat white with a hairline */
html[data-theme="light"] .flag-ep,
html[data-theme="light"] .lockpanel,
html[data-theme="light"] .acct-hero,
html[data-theme="light"] .you-head,
html[data-theme="light"] .pl-hero,
html[data-theme="light"] .story-invite,
html[data-theme="light"] .lp-final,
html[data-theme="light"] .story-hero,
html[data-theme="light"] .flag-media{background:#fff;border:1px solid var(--line)}

/* chips + selected states: black pill, not pink (YouTube light) */
html[data-theme="light"] .chip.active{background:#0f0f0f;color:#fff;border-color:#0f0f0f}
html[data-theme="light"] .tier.sel{box-shadow:0 0 0 2px var(--pink)}

/* keep pink ONLY where it carries meaning */
html[data-theme="light"] .btn-pink{background:var(--pink);color:#fff}
html[data-theme="light"] .brand .name b{-webkit-text-fill-color:var(--pink);color:var(--pink)}
html[data-theme="light"] .likebtn.liked,
html[data-theme="light"] .reel-act.on .mi,
html[data-theme="light"] .watched-bar,
html[data-theme="light"] .progress>div{background:var(--pink)}

/* card hovers: soft grey, never a coloured ring */
html[data-theme="light"] .vcard:hover .vthumb,
html[data-theme="light"] .sh-card:hover .sh-thumb{box-shadow:var(--e1)}
html[data-theme="light"] .unrow:hover,
html[data-theme="light"] .acct-row:hover,
html[data-theme="light"] .vl-row:hover{background:#f2f2f2}

/* admin security banner */
.sec-banner{display:none;margin:0 0 18px;border:1px solid var(--warn);
  background:var(--warn-bg);border-radius:12px;padding:12px 16px}
/* a warning nobody can read is not a warning: --txt-dim on the amber wash was
   barely above the background */
.sec-line{font-size:.85rem;line-height:1.55;color:var(--txt)}
.sec-line+.sec-line{margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.sec-line b{color:var(--txt)}
.sec-line code{background:var(--panel3);padding:1px 5px;border-radius:4px;font-size:.9em}
.sec-line a{color:var(--pink);font-weight:600}

/* ══════════════════════════════════════════════════════════════════════
   STUDIO V3 — YouTube-Studio-style admin: side nav, Create menu, modals
   ══════════════════════════════════════════════════════════════════════ */
body.studio{background:var(--bg)}
.studio .stu-top{position:sticky;top:0;z-index:60;display:flex;align-items:center;gap:12px;
  height:56px;padding:0 16px;background:var(--panel);border-bottom:1px solid var(--line)}
.studio .stu-top .brand{gap:9px}
.studio .stu-top .brand img{width:30px;height:30px;border-radius:50%;object-fit:cover}
.studio .stu-top .brand .name{font-size:1rem;letter-spacing:.02em}
.stu-tag{font-size:.62rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--mut);border:1px solid var(--line);border-radius:5px;padding:2px 6px;margin-left:2px}
.stu-burger{display:none;background:none;border:1px solid var(--line);border-radius:10px;
  color:var(--txt);cursor:pointer;padding:6px;line-height:0;flex:none}
.stu-burger svg{width:24px;height:24px}
.stu-top-actions{margin-left:auto;display:flex;align-items:center;gap:8px}

.create-wrap{position:relative}
.btn-create{display:inline-flex;align-items:center;gap:7px;padding:8px 16px 8px 13px;border-radius:var(--radius-pill)}
.btn-create svg{width:18px;height:18px}
.create-menu{position:absolute;right:0;top:calc(100% + 8px);min-width:210px;background:var(--panel);
  border:1px solid var(--line);border-radius:12px;box-shadow:var(--e3);padding:6px;display:none;z-index:70}
.create-menu.open{display:block;animation:pop .13s ease-out}
.create-menu button{display:flex;align-items:center;gap:11px;width:100%;background:none;border:none;
  padding:10px 12px;border-radius:8px;color:var(--txt);font-size:.9rem;font-weight:500;cursor:pointer;font-family:var(--font)}
.create-menu button:hover{background:var(--panel2)}
.create-menu svg{width:19px;height:19px;color:var(--mut)}

.stu-shell{display:flex;min-height:calc(100vh - 56px)}
.stu-nav{flex:0 0 232px;background:var(--panel);border-right:1px solid var(--line);
  padding:14px 10px;display:flex;flex-direction:column;gap:2px;position:sticky;top:56px;height:calc(100vh - 56px);overflow-y:auto}
.stu-navitem{display:flex;align-items:center;gap:14px;padding:10px 14px;border:none;background:none;
  border-radius:9px;color:var(--txt-dim);font-size:.92rem;font-weight:500;cursor:pointer;text-align:left;
  font-family:var(--font);width:100%}
.stu-navitem svg{width:21px;height:21px;flex-shrink:0}
.stu-navitem:hover{background:var(--panel2);color:var(--txt)}
.stu-navitem.active{background:var(--panel2);color:var(--txt);font-weight:600}
.stu-navitem.active svg{color:var(--pink)}
.stu-scrim{display:none;position:fixed;inset:56px 0 0;background:rgba(0,0,0,.4);z-index:55}
.stu-scrim.show{display:block}

.stu-main{flex:1;min-width:0;padding:28px clamp(16px,4vw,40px) 80px;max-width:1120px}
.stu-h1{font-family:var(--font);font-weight:700;font-size:1.5rem;margin:0 0 4px}
.stu-head-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px}
.stu-head-row .stu-h1{margin:0}
.stu-sub{color:var(--mut);font-size:.88rem;line-height:1.6;margin:6px 0 20px;max-width:640px}
.stu-toolbar{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0 16px}
.stu-search{flex:1;min-width:220px}

.stu-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px;margin-bottom:16px}
.stu-card h2{font-family:var(--font);font-weight:600;font-size:1rem;margin:0 0 4px;display:flex;align-items:center;gap:8px}
.stu-card h2 svg{width:17px;height:17px;color:var(--mut)}
.stu-cards{display:flex;flex-direction:column;gap:14px}
.stu-grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.stu-form-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}
.stu-form-row>div{display:flex;flex-direction:column}
.stu-form-row .grow{flex:1;min-width:160px}
.mt{margin-top:12px}
.dim{color:var(--mut);font-size:.85rem}
.hint{color:var(--mut);font-weight:400;font-size:.8em}
.hide-sm{}
.warn-txt{color:var(--warn)}
.danger{color:var(--err)!important}

/* dashboard */
.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.stat-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px 18px}
.stat-ic{display:inline-flex;color:var(--mut)}
.stat-ic svg{width:18px;height:18px}
.stat-n{font-family:var(--font);font-weight:700;font-size:1.7rem;line-height:1.1;margin-top:6px}
.stat-l{color:var(--mut);font-size:.82rem}
.stat-sub{color:var(--mut);font-size:.72rem;margin-top:3px}
.mini-vid{display:flex;gap:12px;align-items:center}
.mini-vid img,.mini-ph{width:120px;aspect-ratio:16/9;border-radius:8px;object-fit:cover;background:var(--panel2);flex-shrink:0}
.mini-vid b{display:block;font-weight:600;font-size:.9rem}
.mini-vid span{color:var(--mut);font-size:.8rem}
.ovrow{padding:9px 0;border-bottom:1px solid var(--line);font-size:.86rem}
.ovrow:last-child{border-bottom:none}
.ovrow small{color:var(--mut)}

/* live + announcement cards */
/* stc-, not lv-: the viewer's live page owns .lv-top/.lv-badge (an overlay
   pinned to the top of the video) and, sharing this stylesheet, it turned these
   card headers into invisible absolute strips with the title gone */
.stc-top{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin-bottom:6px}
.stc-top b{font-weight:600;font-size:.98rem;min-width:0;overflow-wrap:anywhere}
.stc-badge{font-size:.64rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
  padding:3px 8px;border-radius:var(--radius-pill);background:var(--panel3);color:var(--txt-dim)}
.stc-badge.live{background:var(--err);color:#fff}
.stc-badge.sched{background:var(--warn-bg);color:var(--warn)}
.lv-meta{display:flex;flex-wrap:wrap;gap:6px 14px;margin:8px 0 12px;font-size:.78rem;color:var(--mut)}
.lv-actions{display:flex;flex-wrap:wrap;gap:8px}

/* modals */
.stu-modal{position:fixed;inset:0;z-index:120;background:rgba(0,0,0,.55);
  display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}
.stu-modal[hidden]{display:none}
.stu-dialog{background:var(--panel);border:1px solid var(--line);border-radius:16px;
  width:min(680px,100%);max-height:calc(100vh - 80px);display:flex;flex-direction:column;box-shadow:var(--e4)}
.stu-dialog-head{display:flex;align-items:center;justify-content:space-between;
  padding:18px 20px;border-bottom:1px solid var(--line)}
.stu-dialog-head h2{font-family:var(--font);font-weight:600;font-size:1.1rem;margin:0}
.stu-x{background:none;border:none;color:var(--mut);cursor:pointer;display:flex;padding:6px;border-radius:8px}
.stu-x:hover{background:var(--panel2);color:var(--txt)}
.stu-x svg{width:20px;height:20px}
.stu-dialog-body{padding:20px;overflow-y:auto;flex:1}
.stu-dialog-body label{display:block;margin:14px 0 5px;font-size:.8rem;font-weight:600;color:var(--txt-dim)}
.stu-dialog-body label:first-child{margin-top:0}
.stu-dialog-body input,.stu-dialog-body textarea,.stu-dialog-body select{width:100%}
.stu-dialog-foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:16px 20px;border-top:1px solid var(--line)}
.stu-dialog-foot .btn{margin-left:auto}
.stu-dialog-foot .msg{margin-left:0;flex-basis:100%;order:3}

/* upload modal */
.drop-zone{border:2px dashed var(--line-strong);border-radius:14px;padding:40px 20px;text-align:center;
  cursor:pointer;transition:background .15s,border-color .15s;background:var(--panel2)}
.drop-zone:hover,.drop-zone.drag{background:var(--panel3);border-color:var(--pink)}
.drop-zone svg{width:34px;height:34px;color:var(--mut)}
.drop-zone b{display:block;margin-top:10px;font-size:.92rem}
.drop-zone span{display:block;margin-top:4px;font-size:.8rem;color:var(--mut)}
#up-details{margin-top:18px}
.up-two{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.thumb-pick{aspect-ratio:16/9;border:1px dashed var(--line-strong);border-radius:10px;background:var(--panel2);
  display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;margin-top:5px}
.thumb-pick img{width:100%;height:100%;object-fit:cover}
.thumb-pick span{color:var(--mut);font-size:.82rem;display:flex;align-items:center;gap:6px}
.thumb-pick svg{width:16px;height:16px}
.seg{display:inline-flex;background:var(--panel2);border-radius:var(--radius-pill);padding:3px;gap:2px;margin-top:5px}
.seg-b{border:none;background:none;padding:8px 16px;border-radius:var(--radius-pill);
  font-size:.84rem;font-weight:600;color:var(--mut);cursor:pointer;font-family:var(--font)}
.seg-b.active{background:var(--panel);color:var(--txt);box-shadow:var(--e1)}
.up-opts{display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:16px}
.up-prog{flex-basis:100%;height:6px;border-radius:99px;background:var(--panel2);overflow:hidden;order:1}
.up-prog>div{height:100%;width:0;background:var(--pink);transition:width .3s}

@media(max-width:900px){
  .stu-burger{display:block}
  .stu-tag{display:none}
  .stu-nav{position:fixed;left:0;top:56px;bottom:0;transform:translateX(-100%);
    transition:transform .22s var(--ease-out);z-index:56;flex-basis:250px;box-shadow:var(--e4)}
  .stu-nav.open{transform:none}
  .hide-sm{display:none}
  .up-two{grid-template-columns:1fr}
  .stu-main{padding:20px 16px 90px}
}

/* ══════════════════════════════════════════════════════════════════════
   LIVE — viewer page, chat, and the home "live now" strip / announcements
   ══════════════════════════════════════════════════════════════════════ */
.live-shell{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:22px;
  max-width:1200px;margin:0 auto;padding:20px clamp(14px,3vw,28px) 80px}
.live-main{min-width:0}
.live-back{display:inline-flex;align-items:center;gap:6px;font-size:.85rem;font-weight:600;
  color:var(--txt-dim);background:var(--panel2);padding:7px 14px;border-radius:var(--radius-pill);margin-bottom:14px}
.live-back:hover{background:var(--panel3);color:var(--txt)}
.live-back svg{width:16px;height:16px}
.live-stage{position:relative;aspect-ratio:16/9;background:#000;border-radius:var(--radius);overflow:hidden}
.live-stage iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.live-lock{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:12px;color:#fff;text-align:center;padding:20px;background:linear-gradient(180deg,#1a1a1a,#000)}
.live-lock svg{width:40px;height:40px;opacity:.8}
.live-lock h3{margin:0;font-size:1.05rem;font-weight:600}
.live-head{display:flex;align-items:center;gap:12px;margin:16px 0 6px;flex-wrap:wrap}
.live-state{font-size:.72rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
  color:var(--mut);display:inline-flex;align-items:center;gap:6px}
.live-state.on{color:var(--err)}
.lp-dot{width:8px;height:8px;border-radius:50%;background:currentColor;display:inline-block;
  animation:lpps 1.4s ease-in-out infinite}
@keyframes lpps{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.7)}}

.live-chat{display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--radius);height:calc(100vh - 140px);position:sticky;top:88px;overflow:hidden}
.lc-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line)}
.lc-head b{font-size:.9rem}
.lc-list{flex:1;overflow-y:auto;padding:12px 14px;display:flex;flex-direction:column;gap:9px}
.lc-row{font-size:.86rem;line-height:1.45;color:var(--txt-dim)}
.lc-row b{color:var(--txt);font-weight:600;margin-right:4px}
.lc-row.host b{color:var(--pink)}
.lc-hosttag{font-size:.6rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;
  background:var(--pink);color:#fff;padding:1px 5px;border-radius:4px;margin-left:2px}
.lc-compose{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--line)}
.lc-compose input{flex:1;border-radius:var(--radius-pill);background:var(--panel2);border:none;padding:9px 15px}
.lc-compose .btn{flex-shrink:0;padding:9px 12px}
.lc-compose .btn svg{width:16px;height:16px}
.lc-signin{padding:14px 16px;border-top:1px solid var(--line);font-size:.84rem;color:var(--mut)}
.lc-signin a{color:var(--pink);font-weight:600}

@media(max-width:960px){
  .live-shell{grid-template-columns:1fr}
  .live-chat{height:520px;position:static}
}

/* home: pinned announcement card */
.ann-card{display:flex;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:14px 16px;margin-bottom:14px}
.ann-card>i,.ann-card>.mi{flex-shrink:0;color:var(--mut)}
.ann-card svg{width:20px;height:20px}
.ann-card b{display:block;font-size:.92rem;font-weight:600;margin-bottom:3px}
.ann-card p{margin:0;font-size:.85rem;color:var(--txt-dim);line-height:1.55;white-space:pre-wrap}
.ann-card a{display:inline-block;margin-top:6px;font-size:.82rem;font-weight:600;color:var(--pink)}

/* ══════════════════════════════════════════════════════════════════════
   REELS V4 — sound toggle, scrub progress, tap-pause + double-tap heart
   ══════════════════════════════════════════════════════════════════════ */
.reel-mute{position:fixed;top:16px;right:14px;z-index:8;width:40px;height:40px;border:none;border-radius:50%;
  background:rgba(0,0,0,.32);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.reel-mute:hover{background:rgba(0,0,0,.5)}
.reel-mute svg{width:20px;height:20px}
@media(min-width:820px){.reel-mute{right:calc(50% - 300px)}}

.reel-prog{position:absolute;left:0;right:0;bottom:0;height:3px;background:rgba(255,255,255,.2);z-index:4}
.reel-prog>div{height:100%;width:0;background:#fff;transition:width .2s linear}
@media(min-width:820px){.reel-slide .reel-prog{border-radius:0 0 14px 14px;overflow:hidden}}

.reel-pausei{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.8);
  width:76px;height:76px;border-radius:50%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;transition:opacity .15s,transform .15s;z-index:5}
.reel-pausei.show{opacity:1;transform:translate(-50%,-50%) scale(1)}
.reel-pausei svg{width:34px;height:34px;color:#fff}

.reel-heart{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);
  color:#fff;opacity:0;pointer-events:none;z-index:6;filter:drop-shadow(0 4px 12px rgba(0,0,0,.5))}
.reel-heart svg{width:96px;height:96px;color:var(--pink)}
.reel-heart.pop{animation:rheart .8s ease-out}
@keyframes rheart{0%{opacity:0;transform:translate(-50%,-50%) scale(.3)}
  15%{opacity:1;transform:translate(-50%,-50%) scale(1.15)}
  30%{transform:translate(-50%,-50%) scale(1)}
  70%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(1)}}

/* untyped <input> (no type attr = text) missed the attribute-scoped rule above */
input:not([type]){
  width:100%;padding:11px 14px;border-radius:var(--radius);border:1px solid var(--line);
  background:var(--input-bg);color:var(--txt);font-size:.92rem;font-family:inherit;outline:none;
  box-sizing:border-box;transition:border-color .15s,box-shadow .15s}
input:not([type]):focus{border-color:var(--pink);box-shadow:0 0 0 3px var(--pink-a25)}
/* studio: tighten field rhythm inside dialogs + cards */
.stu-dialog-body input,.stu-dialog-body textarea,.stu-dialog-body select,
.stu-card input,.stu-card textarea,.stu-card select{background:var(--input-bg)}
.studio .chip{background:var(--panel2);border:none;color:var(--txt);font-weight:600;padding:9px 14px}
.studio table{width:100%;border-collapse:collapse;font-size:.86rem}
.studio table th{text-align:left;color:var(--mut);font-size:.72rem;letter-spacing:.04em;
  text-transform:uppercase;padding:8px 10px;border-bottom:1px solid var(--line)}
.studio table td{padding:11px 10px;border-bottom:1px solid var(--line);vertical-align:middle;
  overflow-wrap:anywhere}
/* On a phone a members table is wider than the screen. Let it scroll inside its
   own card rather than pushing the whole page sideways. */
@media(max-width:720px){
  .studio table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;
    max-width:100%}
  .studio table td,.studio table th{padding:10px 8px}
}
.studio .refcode{background:var(--panel2);padding:2px 7px;border-radius:5px;font-size:.82rem}
.row-actions{display:flex;gap:8px;flex-wrap:wrap}
.v-empty{padding:36px 20px;text-align:center;color:var(--mut);font-size:.9rem;
  border:1px dashed var(--line);border-radius:12px}

/* studio: faint page tint so white cards lift (YouTube Studio feel) */
html[data-theme="light"] body.studio{background:#f7f7f8}
html[data-theme="light"] body.studio .stu-top,
html[data-theme="light"] body.studio .stu-nav{background:#fff}
body.studio .stu-card,body.studio .stat-card{box-shadow:var(--e1)}
html[data-theme="light"] body.studio .stu-card,
html[data-theme="light"] body.studio .stat-card{border-color:#ececed}
/* create menu + modal dialog always sit on solid panel */
body.studio .create-menu,body.studio .stu-dialog{background:var(--panel)}

/* ══════════════════════════════════════════════════════════════════════
   NATIVE LIVE — broadcaster page + viewer <video> + scheduled countdown
   ══════════════════════════════════════════════════════════════════════ */
.live-stage video{position:absolute;inset:0;width:100%;height:100%;background:#000;object-fit:contain}
.live-cd{margin-top:10px;font-family:var(--font);font-weight:700;font-size:1.3rem;
  font-variant-numeric:tabular-nums;letter-spacing:.04em;color:#fff}

body.bcast-body{background:#000;margin:0}
.bcast{max-width:520px;margin:0 auto;min-height:100vh;min-height:100svh;display:flex;flex-direction:column}
.bcast-stage{position:relative;flex:1;background:#000;overflow:hidden}
.bcast-stage video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}
.bcast-top{position:absolute;top:0;left:0;right:0;z-index:3;display:flex;align-items:center;gap:10px;
  padding:14px 14px;background:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}
.bcast-state{font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#fff;
  background:rgba(255,255,255,.16);padding:4px 10px;border-radius:var(--radius-pill)}
.bcast-state.on{background:var(--err)}
.bcast-timer{margin-left:auto;color:#fff;font-weight:700;font-variant-numeric:tabular-nums}
.bcast-controls{position:absolute;left:0;right:0;bottom:0;z-index:3;display:flex;align-items:center;
  justify-content:center;gap:26px;padding:24px 16px calc(24px + env(safe-area-inset-bottom,0px));
  background:linear-gradient(0deg,rgba(0,0,0,.55),transparent)}
.bc-ic{width:50px;height:50px;border-radius:50%;border:none;background:rgba(255,255,255,.16);color:#fff;
  display:flex;align-items:center;justify-content:center;cursor:pointer}
.bc-ic.off{background:var(--err)}
.bc-ic svg{width:22px;height:22px}
.bc-go{min-width:150px;padding:15px 28px;border:none;border-radius:var(--radius-pill);
  background:#fff;color:#000;font-family:var(--font);font-weight:800;font-size:1rem;cursor:pointer}
.bc-go.on{background:var(--err);color:#fff}
.bcast-note{color:#bbb;font-size:.82rem;line-height:1.6;padding:16px 20px;margin:0}
.bcast-note #bc-link{color:#fff;font-weight:600}
.bcast .msg{padding:0 20px 20px}

/* studio: mode toggle inside the live modal */
#lv-mode{display:flex;width:100%;margin-bottom:2px}
#lv-mode .seg-b{flex:1}

/* ══════════════════════════════════════════════════════════════════════
   LIVE — TikTok / Instagram-style immersive UI (viewer + broadcaster)
   Full-bleed video on phones; a phone-shaped column on desktop.
   ══════════════════════════════════════════════════════════════════════ */
body.iglive-body{margin:0;background:#000;overflow:hidden}
.iglive{position:fixed;inset:0;background:#000;overflow:hidden;
  font-family:var(--font);color:#fff}
@media(min-width:820px){
  .iglive{width:min(440px,100vw);left:50%;transform:translateX(-50%);
    box-shadow:0 0 0 100vmax rgba(0,0,0,.7)}
}
.ig-stage{position:absolute;inset:0;background:#000}
.ig-stage video,.ig-stage iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000}
.ig-stage video{object-fit:cover}
.iglive #preview{transform:scaleX(-1)}
body.rearcam .iglive #preview{transform:none}
.ig-scrim{position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 35%,rgba(0,0,0,.25),rgba(0,0,0,.82))}
.ig-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:14px;text-align:center;padding:24px}
.ig-center svg{width:44px;height:44px;opacity:.9}
.ig-center h2{margin:0;font-weight:600;font-size:1.15rem;max-width:280px;line-height:1.35}
.ig-center p{margin:0;opacity:.8;font-size:.9rem}
.ig-cd{font-weight:800;font-size:2rem;font-variant-numeric:tabular-nums;letter-spacing:.03em}
.ig-cd-lbl{font-size:.75rem;opacity:.7;text-transform:uppercase;letter-spacing:.1em;margin-top:-6px}
.ig-badge-tl{position:absolute;top:74px;left:14px;background:rgba(0,0,0,.5);
  font-size:.66rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:4px 9px;border-radius:var(--radius-pill)}

/* top overlay: back · streamer chip · viewer count */
.ig-top{position:absolute;top:0;left:0;right:0;z-index:5;display:flex;align-items:center;gap:10px;
  padding:calc(12px + env(safe-area-inset-top,0px)) 12px 26px;
  background:linear-gradient(180deg,rgba(0,0,0,.55),transparent);pointer-events:none}
.ig-top>*{pointer-events:auto}
.ig-back{width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:rgba(0,0,0,.34);
  color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.ig-back svg{width:19px;height:19px}
.ig-streamer{display:flex;align-items:center;gap:8px;background:rgba(0,0,0,.34);
  padding:5px 12px 5px 5px;border-radius:var(--radius-pill);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);min-width:0}
.ig-streamer img{width:26px;height:26px;border-radius:50%;object-fit:cover;background:#fff;flex-shrink:0}
.ig-streamer b{font-size:.82rem;font-weight:600;white-space:nowrap}
.ig-streamer span{display:block;font-size:.6rem;font-weight:800;letter-spacing:.08em;color:#bbb;text-transform:uppercase}
.ig-streamer.is-live span{color:#fff}
.ig-streamer.is-live span::before{content:"● ";color:var(--err)}
.ig-count{margin-left:auto;flex-shrink:0;display:flex;align-items:center;gap:5px;background:rgba(0,0,0,.34);
  padding:5px 11px;border-radius:var(--radius-pill);font-size:.78rem;font-weight:700;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.ig-count svg{width:14px;height:14px;opacity:.9}
.ig-timer{margin-left:auto;background:rgba(0,0,0,.34);padding:5px 11px;border-radius:var(--radius-pill);
  font-weight:700;font-variant-numeric:tabular-nums;font-size:.8rem}

/* comment stream — rises from bottom-left, no card, fades at the top */
.ig-comments{position:absolute;left:10px;right:64px;bottom:70px;z-index:4;
  max-height:44vh;overflow:hidden;display:flex;flex-direction:column;gap:7px;
  -webkit-mask-image:linear-gradient(180deg,transparent,#000 22%);mask-image:linear-gradient(180deg,transparent,#000 22%)}
.ig-c{font-size:.84rem;line-height:1.35;text-shadow:0 1px 4px rgba(0,0,0,.75);
  animation:ig-cin .25s ease-out}
.ig-c b{font-weight:700;color:#fff;margin-right:5px;opacity:.92}
.ig-c.host b{color:var(--pink)}
.ig-c.host b::after{content:" ·";color:#fff;opacity:.5}
@keyframes ig-cin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* floating hearts */
.ig-hearts{position:absolute;right:14px;bottom:120px;width:60px;height:50vh;z-index:4;pointer-events:none;overflow:visible}
.fh{position:absolute;bottom:0;color:var(--pink);animation:fh 2.5s ease-out forwards}
.fh svg{width:30px;height:30px}
@keyframes fh{
  0%{opacity:0;transform:translate(0,0) scale(.4)}
  12%{opacity:1;transform:translate(0,-20px) scale(var(--s,1))}
  100%{opacity:0;transform:translate(var(--x,0),-46vh) scale(var(--s,1))}}

/* bottom bar: comment input + heart + send */
.ig-bar{position:absolute;left:0;right:0;bottom:0;z-index:5;display:flex;align-items:center;gap:8px;
  padding:10px 12px calc(12px + env(safe-area-inset-bottom,0px));
  background:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}
.ig-bar[hidden]{display:none}
.ig-bar input{flex:1;min-width:0;border:1px solid rgba(255,255,255,.35);border-radius:var(--radius-pill);
  background:rgba(0,0,0,.3);color:#fff;padding:11px 16px;font-size:.9rem;outline:none;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.ig-bar input::placeholder{color:rgba(255,255,255,.7)}
.ig-like,.ig-send{width:42px;height:42px;flex-shrink:0;border:none;border-radius:50%;
  background:rgba(0,0,0,.3);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.ig-like svg{width:22px;height:22px;color:#fff}
.ig-like.pop{animation:ig-pop .4s ease-out}
@keyframes ig-pop{0%{transform:scale(1)}40%{transform:scale(1.35)}100%{transform:scale(1)}}
.ig-send{background:var(--pink)}
.ig-send svg{width:18px;height:18px}
.ig-signin{position:absolute;left:0;right:0;bottom:0;z-index:5;text-align:center;font-size:.84rem;
  padding:16px calc(16px + env(safe-area-inset-bottom,0px));background:linear-gradient(0deg,rgba(0,0,0,.6),transparent);color:#ddd}
.ig-signin[hidden]{display:none}
.ig-signin a{color:#fff;font-weight:700}
.ig-msgcard{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;text-align:center;padding:24px}
.ig-msgcard h2{margin:0;font-weight:600}

/* broadcaster-only bits */
.bc-side{position:absolute;right:12px;bottom:130px;z-index:5;display:flex;flex-direction:column;gap:14px}
.bc-round{width:46px;height:46px;border:none;border-radius:50%;background:rgba(0,0,0,.34);color:#fff;
  display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.bc-round.off{background:var(--err)}
.bc-round svg{width:22px;height:22px}
.bc-dock{position:absolute;left:0;right:0;bottom:0;z-index:5;display:flex;justify-content:center;
  padding:22px 16px calc(26px + env(safe-area-inset-bottom,0px));background:linear-gradient(0deg,rgba(0,0,0,.55),transparent)}
.bc-golive{min-width:170px;padding:16px 30px;border:none;border-radius:var(--radius-pill);
  background:#fff;color:#000;font-family:var(--font);font-weight:800;font-size:1.02rem;cursor:pointer;
  box-shadow:0 8px 30px -6px rgba(0,0,0,.5)}
.bc-golive.on{background:var(--err);color:#fff;min-width:120px}
.ig-msg-fixed{position:absolute;left:16px;right:16px;bottom:96px;z-index:6;text-align:center;display:none}
.ig-msg-fixed.show{display:block}

/* broadcaster: hide the viewer bottom bar area for comments spacing */
.iglive .bc-dock ~ .ig-comments,.iglive .ig-comments{bottom:96px}

/* ══════════════════════════════════════════════════════════════════════
   LIVE V2 — broadcaster (TikTok/YT creator screen) + viewer refinements
   ══════════════════════════════════════════════════════════════════════ */
/* broadcaster is always full-bleed (it's a capture tool) */
body.bcast .iglive{width:100%;left:0;transform:none;box-shadow:none}
/* viewer desktop: soft dim instead of a hard 100vmax ring */
@media(min-width:820px){
  body.iglive-body:not(.bcast){background:#0a0a0a}
  .iglive:not(.bcast .iglive){border-radius:20px}
}

/* pre-live gate */
.bc-gate{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(180deg,#141414,#000);padding:28px;text-align:center;
  transition:opacity .25s;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.bc-gate.gone{opacity:0;pointer-events:none}
.bc-gate-in{max-width:340px;display:flex;flex-direction:column;align-items:center;gap:12px}
.bc-gate-logo{width:66px;height:66px;border-radius:50%;object-fit:cover;box-shadow:0 8px 30px -8px rgba(0,0,0,.6)}
.bc-gate h1{margin:6px 0 0;font-size:1.35rem;font-weight:700;color:#fff}
.bc-gate p{margin:0;font-size:.9rem;line-height:1.6;color:#b9b9b9}
.bc-gate p code{background:rgba(255,255,255,.12);padding:1px 6px;border-radius:5px;font-size:.85em;color:#fff;word-break:break-all}
.bc-gate .msg{margin-top:4px;font-size:.85rem}
.bc-gate .bc-golive{margin-top:8px}

/* top-left live pill */
.bc-livepill{display:inline-flex;align-items:center;gap:7px;background:rgba(0,0,0,.4);
  padding:6px 13px;border-radius:var(--radius-pill);font-size:.72rem;font-weight:800;letter-spacing:.08em;
  color:#fff;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.bc-livepill .bc-dot{width:8px;height:8px;border-radius:50%;background:#9a9a9a}
.bc-livepill.on{background:var(--err)}
.bc-livepill.on .bc-dot{background:#fff;animation:lpps 1.3s ease-in-out infinite}
.iglive-body.bcast .ig-top{justify-content:flex-start;gap:10px}
.iglive-body.bcast .ig-top .ig-back{margin-left:auto}
.iglive-body.bcast .ig-count{margin-left:0}

/* bottom dock: timer + big Go LIVE / End */
.bc-dock{display:flex;align-items:center;gap:14px;justify-content:center}
.bc-dock[hidden]{display:none}
.bc-timer{position:absolute;left:16px;bottom:34px;font-weight:700;font-variant-numeric:tabular-nums;
  font-size:.85rem;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.7)}
.iglive-body.bcast .ig-comments{bottom:104px}
.iglive-body.bcast .ig-hearts{bottom:130px}

/* side tool buttons */
.bc-side[hidden]{display:none}

/* ══════════════════════════════════════════════════════════════════════
   LIVE V3 — TikTok-grade immersive live (viewer + creator). Everything
   floats over the video as translucent glass; gradient scrims for legibility.
   ══════════════════════════════════════════════════════════════════════ */
body.live-body{margin:0;background:#000;overscroll-behavior:none;
  font-family:var(--font);-webkit-tap-highlight-color:transparent}
.lv{position:fixed;inset:0;overflow:hidden;color:#fff;background:#000;
  /* One set of numbers the whole live screen is built from. The picture, the
     chat band and the thumb controls each take their place from these, so they
     cannot drift into one another on a size nobody tested. The safe-area insets
     are variables rather than bare env() so a test can put a gesture bar and a
     notch on the screen and prove nothing hides underneath. */
  --sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px);
  --sal:env(safe-area-inset-left,0px);--sar:env(safe-area-inset-right,0px);
  --lv-gap:10px;             /* the margin every floating control keeps */
  --lv-tap:44px;             /* the smallest thing a thumb is asked to hit */
  --lv-barh:62px;            /* the typing bar: a 44px input, 9px above and below */
  --lv-dock:calc(var(--sab) + var(--lv-barh));  /* the floor everything sits on */
  --lv-band:max(min(26vh,180px),88px);          /* the chat: a strip, never the screen */
  --lv-rail:56px;            /* the action rail down the right */
  --lv-tile:138px}           /* a guest's picture-in-picture */
@media(min-width:780px){
  body.live-body{background:#0b0b0c;display:flex;align-items:center;justify-content:center}
  .lv{position:relative;inset:auto;width:min(430px,100vw);height:min(92vh,860px);border-radius:22px}
  body.bcast-body .lv{width:min(500px,100vw)}
}

.lv-video{position:absolute;inset:0;background:#000;z-index:1}
.lv-video video,.lv-video iframe,.lv-video canvas{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000}
.lv-video canvas{object-fit:cover;z-index:2}
/* the raw camera feed still has to be rendered for the canvas to copy it,
   so it stays in the layout at 1px instead of display:none */
.lv-video video.bc-src{width:2px;height:2px;opacity:.01;pointer-events:none;z-index:1}
.lv-video video{object-fit:cover}
/* The host is mirrored on screen (that is what a selfie view should look
   like) but the canvas itself is NOT mirrored — viewers must not read her
   words backwards — so the flip lives here, on the display only. */
.bcast-body #stage{transform:scaleX(-1)}
.bcast-body.rearcam #stage{transform:none}
.lv-stuck{position:absolute;inset:0;z-index:6;display:flex;flex-direction:column;gap:8px;
  align-items:center;justify-content:center;text-align:center;padding:24px;
  background:rgba(0,0,0,.78);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.lv-stuck b{font-size:17px;color:#fff}
.lv-stuck span{font-size:13.5px;color:rgba(255,255,255,.68);max-width:24em;line-height:1.5}
.lv-stuck button{margin-top:6px;border:0;background:#ff2e88;color:#fff;border-radius:99px;
  padding:11px 24px;font:600 14px/1 var(--font,system-ui);cursor:pointer}
.lv-paused{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;gap:6px;
  align-items:center;justify-content:center;text-align:center;background:rgba(0,0,0,.72);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.lv-paused b{font-size:26px;letter-spacing:.02em;color:var(--pink,#ff2e88)}
.lv-paused span{font-size:14px;color:rgba(255,255,255,.72)}
.lv-blur{position:absolute;inset:0;z-index:1;background:radial-gradient(130% 90% at 50% 28%,#26262b,#000)}
.lv-scrim-top{position:absolute;top:0;left:0;right:0;height:160px;z-index:2;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,.55),transparent)}
.lv-scrim-bot{position:absolute;bottom:0;left:0;right:0;height:250px;z-index:2;pointer-events:none;
  background:linear-gradient(0deg,rgba(0,0,0,.6),transparent)}

/* ---- glass helpers ---- */
.lv-pill,.lv-host,.lv-viewers,.lv-x{-webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4)}

/* ---- top row ---- */
.lv-top{position:absolute;top:0;left:0;right:0;z-index:6;display:flex;align-items:center;
  justify-content:space-between;gap:10px;
  padding:calc(var(--sat) + 10px) calc(var(--sar) + var(--lv-gap)) 0 calc(var(--sal) + var(--lv-gap))}
.lv-top[hidden]{display:none}
/* The badge is a fixed piece of furniture: the sound prompt and the description
   card are positioned under it, so it must not grow into them when someone has
   large system text. */
.lv-host{display:flex;align-items:center;gap:8px;overflow:hidden;
  max-width:calc(100% - 128px);min-height:var(--lv-tap);max-height:var(--lv-tap);
  background:rgba(0,0,0,.38);padding:4px 12px 4px 4px;border-radius:var(--radius-pill)}
.lv-host img{width:36px;height:36px;border-radius:50%;object-fit:cover;background:#fff;flex-shrink:0}
.lv-host-txt{min-width:0}
/* the name is branding, not reading matter — at 175% system text it grew tall
   enough to swallow the sound prompt sitting below it */
.lv-host-txt b{display:block;font-size:clamp(13px,.84rem,15px);font-weight:700;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.15}
/* 12px is the floor for anything anyone is expected to read on a phone */
.lv-badge{display:inline-flex;align-items:center;gap:5px;font-size:clamp(12px,.6rem,13px);font-weight:800;
  letter-spacing:.07em;color:#cfcfcf;text-transform:uppercase;line-height:1.2}
.lv-badge.on{color:#fff}
.lv-badge i{width:6px;height:6px;border-radius:50%;background:#8a8a8a}
.lv-badge.on i{background:var(--pink);animation:lvpulse 1.5s ease-out infinite}
@keyframes lvpulse{0%{box-shadow:0 0 0 0 rgba(255,46,136,.55)}70%{box-shadow:0 0 0 7px rgba(255,46,136,0)}100%{box-shadow:0 0 0 0 rgba(255,46,136,0)}}
.lv-pill{background:rgba(0,0,0,.38);padding:9px 14px;border-radius:var(--radius-pill);
  font-size:clamp(12px,.72rem,13px);font-weight:800;letter-spacing:.05em;
  display:inline-flex;align-items:center;gap:6px;line-height:1.2}
.lv-pill #bc-timer{font-variant-numeric:tabular-nums;opacity:.9;font-weight:700}
.lv-top-right{display:flex;align-items:center;gap:8px;flex-shrink:0}
.lv-viewers{display:flex;align-items:center;gap:5px;background:rgba(0,0,0,.38);
  padding:8px 12px;border-radius:var(--radius-pill);font-size:clamp(12px,.8rem,14px);
  font-weight:800;font-variant-numeric:tabular-nums;line-height:1.2}
.lv-viewers svg{opacity:.85}
/* a thumb, not a cursor: the close button is a full 44px target */
.lv-x{width:var(--lv-tap);height:var(--lv-tap);flex-shrink:0;border:none;border-radius:50%;
  background:rgba(0,0,0,.38);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}

/* ---- comment river ---- */
/* The comment river. It used to be a thin bottom-anchored strip with the top
   quarter faded out, which on a small phone left almost nothing to read or to
   take hold of. Now it is a defined panel with a real height, a gentler fade
   and room to scroll. */
.lv-river{position:absolute;left:calc(var(--sal) + var(--lv-gap));
  right:calc(var(--sar) + var(--lv-rail) + 8px);bottom:calc(var(--lv-dock) + 4px);
  z-index:4;display:flex;flex-direction:column;align-items:flex-start;gap:6px;
  /* A band at the bottom, four or five messages deep — the rest of the picture
     stays the picture. Older messages are still there, you scroll to them. */
  height:var(--lv-band);padding:2px 2px 4px;
  overflow-y:auto;overflow-x:hidden;pointer-events:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;justify-content:flex-start;
  -webkit-mask-image:linear-gradient(180deg,transparent,#000 12%);
  mask-image:linear-gradient(180deg,transparent,#000 12%)}
.lv-river::-webkit-scrollbar{width:0;height:0}
/* a spacer that eats the slack: few messages sit at the bottom of the band,
   many overflow upward and scroll. justify-content:flex-end cannot do both. */
.lv-river::before{content:"";flex:0 0 auto;margin-top:auto}
/* Over a brightly-lit face these were barely legible: a 30% black wash and a
   grey name that vanished into the picture. */
.lv-c{flex:0 0 auto;max-width:100%;background:rgba(0,0,0,.55);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  border-radius:16px;padding:7px 13px;font-size:clamp(12.5px,.85rem,15px);line-height:1.4;color:#fff;
  overflow-wrap:anywhere;text-shadow:0 1px 3px rgba(0,0,0,.55);
  box-shadow:0 2px 10px rgba(0,0,0,.4);animation:lvcin .3s cubic-bezier(.2,.9,.3,1)}
.lv-c b{color:#ffb3d2;font-weight:700;margin-right:6px;font-size:clamp(12px,.78rem,14px);
  letter-spacing:.01em;text-shadow:0 1px 3px rgba(0,0,0,.6)}
.lv-c.host{background:rgba(255,46,136,.22);border:1px solid rgba(255,46,136,.4)}
.lv-c.host b{color:#ffd66b}
.lv-c.host b::after{content:" · Host";color:#fff;opacity:.7;font-weight:500}
@keyframes lvcin{from{opacity:0;transform:translateY(12px) scale(.95)}to{opacity:1;transform:none}}

/* ---- floating hearts ---- */
.lv-fx{position:absolute;right:calc(var(--sar) + 6px);bottom:calc(var(--lv-dock) + 40px);
  width:84px;height:min(60vh,460px);z-index:5;pointer-events:none;overflow:visible}
.fh{position:absolute;bottom:0;right:20px;display:block;will-change:transform,opacity;
  animation:lvrise var(--dur,2.2s) cubic-bezier(.33,.55,.4,1) forwards}
.fh svg{width:30px;height:30px;display:block;filter:drop-shadow(0 3px 8px rgba(0,0,0,.4))}
@keyframes lvrise{
  0%{opacity:0;transform:translateY(0) scale(.3) rotate(0)}
  12%{opacity:.96;transform:translateY(-22px) scale(var(--sc,1)) rotate(0)}
  100%{opacity:0;transform:translate(var(--dx,0),-60vh) scale(var(--sc,1)) rotate(var(--rot,0))}}

/* ---- bottom bar ---- */
.lv-bar{position:absolute;left:0;right:0;bottom:0;z-index:7;display:flex;align-items:center;gap:8px;
  padding:9px calc(var(--sar) + var(--lv-gap)) calc(var(--sab) + 9px) calc(var(--sal) + var(--lv-gap))}
.lv-bar[hidden]{display:none}
.lv-bar input{flex:1;min-width:0;height:var(--lv-tap);border-radius:var(--radius-pill);
  border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.13);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  color:#fff;padding:0 18px;font-size:.9rem;font-family:var(--font);outline:none}
.lv-bar input::placeholder{color:rgba(255,255,255,.68)}
.lv-bar input:focus{border-color:rgba(255,255,255,.55);background:rgba(255,255,255,.2)}
.lv-ib{width:var(--lv-tap);height:var(--lv-tap);flex-shrink:0;border:none;border-radius:50%;
  background:rgba(255,255,255,.13);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.lv-ib:active{transform:scale(.9)}
.lv-send{background:var(--pink)}
.lv-heart.bump{animation:lvbump .45s ease-out}
.lv-heart.bump svg{color:#ff2e88}
@keyframes lvbump{0%{transform:scale(1)}40%{transform:scale(1.4)}100%{transform:scale(1)}}
/* the inset belongs at the foot of this, not at its sides — the line used to
   be padded left and right by the height of the gesture bar */
.lv-signin{position:absolute;left:0;right:0;bottom:0;z-index:7;text-align:center;
  padding:16px calc(var(--sar) + 16px) calc(var(--sab) + 16px) calc(var(--sal) + 16px);
  font-size:clamp(13px,.85rem,15px);color:#dcdcdc;
  background:linear-gradient(0deg,rgba(0,0,0,.55),transparent)}
.lv-signin[hidden]{display:none}
.lv-signin a{color:#fff;font-weight:700}

/* ---- viewer rail: like / share / join, the TikTok arrangement ---- */
.lv-vrail{position:absolute;right:calc(var(--sar) + 6px);bottom:calc(var(--lv-dock) + 4px);
  z-index:6;width:var(--lv-rail);display:flex;flex-direction:column;align-items:center;gap:12px}
.lv-vb{width:var(--lv-rail);min-height:var(--lv-tap);border:0;background:none;color:#fff;
  cursor:pointer;font-family:var(--font);
  display:flex;flex-direction:column;align-items:center;gap:2px;padding:0}
.lv-vb[hidden]{display:none}
.lv-vb>svg{width:var(--lv-tap);height:var(--lv-tap);padding:11px;box-sizing:border-box;border-radius:50%;
  background:rgba(0,0,0,.55);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  box-shadow:0 2px 10px rgba(0,0,0,.35);transition:transform .14s,background .18s}
.lv-vb>span{font-size:clamp(12px,.64rem,13px);font-weight:700;letter-spacing:0;line-height:1.25;
  text-shadow:0 1px 4px rgba(0,0,0,.6);max-width:var(--lv-rail);overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.lv-vb:active>svg{transform:scale(.9)}
.lv-vb.bump>svg{animation:lvbump .45s ease-out;color:#ff2e88}
.lv-vb-join>svg{background:rgba(255,46,136,.9)}
.lv-vb-join.waiting>svg{background:rgba(255,176,32,.92);animation:lvpulse 1.5s infinite}
.lv-vb-join.on>svg{background:#3ddc84;color:#04220f}

/* Jump back to the newest comment. It is pinned to the TOP of the chat band,
   which is the one place on the screen no rail and no typing bar can reach —
   it used to sit at a fixed height of its own and landed on the host's Mic and
   Camera buttons the moment the screen went landscape. */
.lv-new{position:absolute;left:50%;transform:translateX(-50%);
  bottom:calc(var(--lv-dock) + var(--lv-band) + 12px);z-index:8;
  min-height:var(--lv-tap);display:inline-flex;align-items:center;
  border:0;border-radius:99px;background:rgba(255,46,136,.95);color:#fff;
  padding:0 16px;font:600 13px/1 var(--font,system-ui);cursor:pointer;white-space:nowrap;
  box-shadow:0 6px 18px rgba(0,0,0,.4)}
.lv-new[hidden]{display:none}

/* ---- creator right rail ---- */
.lv-rail{position:absolute;right:calc(var(--sar) + 6px);bottom:calc(var(--lv-dock) + 4px);
  z-index:6;width:var(--lv-rail);display:flex;flex-direction:column;align-items:center;gap:12px}
/* Before going live the setup dock fills the lower half, and the tool rail was
   left half-hidden behind it. While setting up, the tools sit at the top. */
.lv.bc-preview .lv-rail{bottom:auto;top:calc(var(--sat) + 58px);width:auto;
  flex-direction:row;gap:8px}
.lv.bc-preview .lv-tool{gap:2px}
/* there is no chat before she is live — the empty band used to sit under the
   go-live dock, which is the whole lower half of the screen */
.lv.bc-preview .lv-river,.lv.bc-preview .lv-fx,.lv.bc-preview .lv-new{display:none}
.lv-rail[hidden]{display:none}
/* A fixed width, so a label can never widen the rail into the comment column,
   and a capped label size so large system text cannot either. */
.lv-tool{border:none;background:none;color:#fff;cursor:pointer;font-family:var(--font);
  display:flex;flex-direction:column;align-items:center;gap:2px;width:var(--lv-rail);
  min-height:var(--lv-tap);
  font-size:clamp(12px,.62rem,13px);font-weight:700;letter-spacing:0;line-height:1.25}
.lv-tool span{max-width:var(--lv-rail);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lv-tool>svg{width:var(--lv-tap);height:var(--lv-tap);padding:11px;box-sizing:border-box;border-radius:50%;
  background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.lv-tool.off>svg{background:var(--err)}
.lv-tool:active>svg{transform:scale(.92)}

/* ---- centred status card (locked / connecting / ended / scheduled) ---- */
.lv-mid{position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:14px;text-align:center;padding:30px}
.lv-mid .mi svg{width:46px;height:46px;opacity:.85}
.lv-mid h2{margin:0;font-size:1.15rem;font-weight:700;max-width:280px;line-height:1.35}
.lv-mid h3{margin:0;font-size:1.05rem;font-weight:600;max-width:280px}
.lv-mid p{margin:0;opacity:.72;font-size:.9rem}
.lv-cd{font-size:2.1rem;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:.03em}
.lv-cd-l{font-size:12px;text-transform:uppercase;letter-spacing:.14em;opacity:.6;margin-top:-8px}
.lv-replay{position:absolute;top:calc(var(--sat) + 14px);left:calc(var(--sal) + 14px);z-index:6;
  background:rgba(0,0,0,.5);padding:6px 11px;border-radius:var(--radius-pill);
  font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
.lv-note{position:absolute;inset:0;z-index:8;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:16px;text-align:center;padding:24px;background:#000}
.lv-note h2{margin:0;font-weight:700}

/* ---- creator setup sheet ---- */
.lv-setup{position:absolute;inset:0;z-index:20;display:flex;align-items:flex-end;justify-content:center;
  background:linear-gradient(180deg,rgba(0,0,0,.1) 0%,rgba(0,0,0,.5) 55%);transition:opacity .3s}
.lv-setup.gone{opacity:0;pointer-events:none}
.lv-setup-card{width:min(460px,100%);background:rgba(18,18,20,.9);
  -webkit-backdrop-filter:blur(22px) saturate(1.4);backdrop-filter:blur(22px) saturate(1.4);
  border-radius:26px 26px 0 0;padding:14px 24px calc(var(--sab) + 24px);
  display:flex;flex-direction:column;align-items:center;gap:9px;text-align:center}
@media(min-width:780px){.lv-setup-card{border-radius:26px}.lv-setup{align-items:center}}
.lv-setup-grip{width:38px;height:4px;border-radius:2px;background:rgba(255,255,255,.28);margin-bottom:6px}
.lv-setup-logo{width:58px;height:58px;border-radius:50%;object-fit:cover;box-shadow:0 8px 26px -8px rgba(0,0,0,.6)}
.lv-setup-card h1{margin:4px 0 0;font-size:1.4rem;font-weight:800}
.lv-setup-card p{margin:0;font-size:.87rem;color:#b4b4b8;line-height:1.55;max-width:330px}
.lv-setup-card p code{background:rgba(255,255,255,.12);padding:1px 6px;border-radius:5px;color:#fff;word-break:break-all}
.lv-setup-card .msg{font-size:.84rem;min-height:0;margin:2px 0}
.lv-golive{margin-top:8px;width:100%;max-width:300px;height:54px;border:none;border-radius:var(--radius-pill);
  background:linear-gradient(135deg,var(--pink),var(--pink-dark,#e0196f));color:#fff;font-family:var(--font);font-weight:800;
  font-size:1.05rem;cursor:pointer;box-shadow:0 12px 32px -8px rgba(255,46,136,.55)}
.lv-golive:active{transform:scale(.97)}
.lv-cancel{background:none;border:none;color:#98989c;font-size:.9rem;padding:6px;cursor:pointer;font-family:var(--font)}

/* a card for a session that is on air right now */
.ribbon.live-now{background:var(--pink);color:#fff;display:inline-flex;align-items:center;gap:6px;
  font-weight:800;letter-spacing:.04em}
.vcard.live-card .vthumb{outline:2px solid var(--pink);outline-offset:-2px}
.ribbon.live-now .lp-dot{background:#fff}

/* what this live is about — the host's title + description, under the top bar */
/* right:116px leaves the top-right corner free for a guest's picture */
/* it sits below the sound prompt, and only gives up its right-hand half when
   a guest's picture is actually on screen */
.lv-about{position:absolute;left:calc(var(--sal) + var(--lv-gap));
  right:calc(var(--sar) + var(--lv-gap));top:calc(var(--sat) + 112px);z-index:11;
  min-height:var(--lv-tap);box-sizing:border-box;
  background:rgba(0,0,0,.34);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:9px 12px;color:#fff;
  font-size:clamp(12px,.8rem,14px);line-height:1.4;cursor:pointer;max-width:520px}
.lv:has(#lv-onair:not([hidden])) .lv-about{right:calc(var(--sar) + var(--lv-tile) + 16px)}
.lv:has(#lv-onair:not([hidden])) .lv-unmute{left:calc((100% - var(--lv-tile)) / 2)}
.lv-about[hidden]{display:none}
.lv-about b{display:block;font-size:clamp(13px,.86rem,15px);margin-bottom:2px}
/* two lines until it is tapped — it was covering a third of a small screen */
.lv-about span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.lv-about.open span{-webkit-line-clamp:unset;overflow:visible}
.lv-about b:empty{display:none}
.lv-about span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;color:rgba(255,255,255,.86)}
.lv-about.open span{-webkit-line-clamp:12}

/* the bell panel's live-alert switch */
.prow{display:flex;align-items:center;gap:8px;justify-content:space-between;
  background:var(--panel2);border-radius:9px;padding:9px 10px;margin-bottom:8px;font-size:.78rem;line-height:1.35}
.prow button{border:none;border-radius:999px;background:var(--pink);color:#fff;font-family:var(--font);
  font-size:.74rem;font-weight:700;padding:6px 12px;cursor:pointer;flex:none}
.prow.on{outline:1.5px solid var(--pink)}
.prow.on button{background:var(--panel);color:var(--mut);outline:1px solid var(--line)}
.prow.off{color:var(--mut)}

/* ---- creator: TikTok-style go-live dock (camera fully visible, controls float) ---- */
/* The go-live dock is a sheet over the lower part of the camera, capped so she
   can always see herself before she goes on, and scrolling inside itself when
   the screen is too short for all of it. Nothing in it may be squeezed: a
   flex column shrinks its children by default, which turned Go LIVE into a
   22px sliver in landscape. */
.bc-pre{position:absolute;left:0;right:0;bottom:0;z-index:12;display:flex;flex-direction:column;
  align-items:stretch;gap:10px;overflow-y:auto;overscroll-behavior:contain;
  max-height:min(58vh,calc(100% - var(--sat) - 120px));
  padding:14px calc(var(--sar) + 16px) calc(var(--sab) + 16px) calc(var(--sal) + 16px)}
.bc-pre>*{flex:0 0 auto}
/* Two of these rows are small enough to share a line, which is the difference
   between Go LIVE being on screen at 320x568 and being below the fold. */
.bc-pre{flex-flow:row wrap;align-items:center;gap:8px;row-gap:8px}
.bc-pre>.bc-title,.bc-pre>.bc-desc,.bc-pre>.bc-q,.bc-pre>.lv-golive,
.bc-pre>.msg,.bc-pre>.bc-test-out{width:100%}
.bc-pre>.bc-chip{flex:0 1 auto}
.bc-pre>.bc-test{flex:1 1 130px;width:auto;margin-top:0}
.bc-pre>.msg:empty{display:none}
.bc-pre .msg{min-height:0}
.bc-pre .bc-title{height:46px}
.bc-pre .bc-desc{min-height:46px}
.bc-pre .lv-golive{height:50px;margin-top:0}
.bc-pre[hidden]{display:none}
.bc-title{width:100%;height:48px;flex:none;border-radius:var(--radius-pill);border:1px solid rgba(255,255,255,.28);
  background:rgba(0,0,0,.36);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  color:#fff;padding:0 18px;font-size:.95rem;font-family:var(--font);outline:none}
.bc-title::placeholder{color:rgba(255,255,255,.66)}
.bc-title:focus{border-color:rgba(255,255,255,.55)}
.bc-desc{width:100%;min-height:48px;flex:none;max-height:96px;resize:none;border-radius:20px;
  border:1px solid rgba(255,255,255,.28);background:rgba(0,0,0,.36);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);color:#fff;
  padding:12px 18px;font-size:.9rem;line-height:1.35;font-family:var(--font);outline:none}
.bc-desc::placeholder{color:rgba(255,255,255,.6)}
.bc-desc:focus{border-color:rgba(255,255,255,.55)}
.bc-chip{align-self:flex-start;display:inline-flex;align-items:center;gap:7px;flex:none;
  background:rgba(0,0,0,.36);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  border:1px solid rgba(255,255,255,.22);color:#fff;border-radius:var(--radius-pill);
  min-height:var(--lv-tap);padding:0 16px;font-size:clamp(13px,.8rem,15px);font-weight:700;
  font-family:var(--font);cursor:pointer}
.bc-chip.on{background:var(--pink);border-color:var(--pink)}
.bc-chip svg{opacity:.9}
.bc-pre .lv-golive{max-width:none;width:100%;margin-top:2px}
.bc-pre .msg{text-align:center;font-size:.82rem}
/* ── guests: the host's request panel ── */
.bc-guests{position:absolute;left:calc(var(--sal) + 12px);right:calc(var(--sar) + 12px);
  bottom:calc(var(--lv-dock) + 8px);
  z-index:9;background:rgba(14,14,16,.92);border:1px solid rgba(255,255,255,.14);border-radius:18px;
  padding:12px 12px 8px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 18px 46px rgba(0,0,0,.6);max-height:44vh;overflow:auto}
.bc-guests[hidden]{display:none}
.bc-guests-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.bc-guests-h b{color:#fff;font-size:13px;letter-spacing:.06em;text-transform:uppercase;opacity:.75}
.bc-gx{background:none;border:0;color:rgba(255,255,255,.6);font-size:22px;line-height:1;cursor:pointer;
  width:var(--lv-tap);height:var(--lv-tap);flex:none;display:grid;place-items:center;margin:-8px -8px -8px 0}
.bc-g{display:flex;align-items:center;gap:8px;padding:8px 2px;border-top:1px solid rgba(255,255,255,.08)}
.bc-g:first-child{border-top:0}
.bc-g b{flex:1;color:#fff;font-size:15px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bc-g-s{font-size:12px;color:#ff2e88;margin-right:4px}
.bc-g.on b::before{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;
  background:#ff2e88;margin-right:7px;vertical-align:middle;animation:lvpulse 1.6s infinite}
.bc-g-b{border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.06);color:#fff;
  border-radius:99px;min-height:var(--lv-tap);padding:0 15px;font-size:13px;font-weight:600;
  cursor:pointer;font-family:inherit;flex:none}
.bc-g-b.in{background:#ff2e88;border-color:#ff2e88}
.bc-g-b.out{background:rgba(255,90,90,.16);border-color:rgba(255,90,90,.5);color:#ffb4b4}
/* It sat in the middle of the comment river on every phone size. It is a
   status alert, so it belongs under the health line at the top. */
.bc-raise{position:absolute;left:calc(var(--sal) + 12px);top:calc(var(--sat) + 106px);z-index:8;
  display:inline-flex;align-items:center;gap:6px;background:#ff2e88;color:#fff;border:0;border-radius:99px;
  min-height:var(--lv-tap);padding:0 16px;font:600 13px/1.2 var(--font,system-ui);cursor:pointer;
  box-shadow:0 8px 24px rgba(255,46,136,.45);animation:bcraise 2.2s ease-in-out infinite}
.bc-raise[hidden]{display:none}
@keyframes bcraise{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}

/* ── guests: the member's side ── */
.lv-join{position:relative}
.lv-join.waiting{color:#ff2e88;animation:bcraise 1.6s ease-in-out infinite}
.lv-join.on{background:#ff2e88;color:#fff}
/* On air with the host: your own picture, and the same three controls she has
   — mute yourself, drop the camera, leave. */
/* Top-right, clear of the comments. Down beside the river it covered most of
   them on a small screen. */
/* Wide enough that its three controls are each a real 44px target, and high
   enough on the screen to stay clear of the action rail underneath. */
.lv-onair{position:absolute;right:calc(var(--sar) + var(--lv-gap));top:calc(var(--sat) + 58px);z-index:9;
  width:var(--lv-tile);box-sizing:border-box;border-radius:14px;overflow:hidden;background:#0a0a0d;
  border:2px solid #ff2e88;box-shadow:0 10px 30px rgba(0,0,0,.55)}
.lv-onair[hidden]{display:none}
.lv-onair video{display:block;width:100%;height:92px;object-fit:cover;transform:scaleX(-1);
  background:#0a0a0d}
.lv-onair.camoff video{opacity:.12}
.lv-onair.camoff::after{content:'Camera off';position:absolute;left:0;right:0;top:36px;
  text-align:center;font:600 12px/1.3 var(--font,system-ui);color:rgba(255,255,255,.75)}
.lv-onair-tag{position:absolute;top:5px;left:5px;background:#ff2e88;color:#fff;border-radius:99px;
  padding:2px 8px;font:600 12px/1.5 var(--font,system-ui);letter-spacing:.03em}
.lv-onair-tools{display:flex;background:rgba(0,0,0,.72)}
.lv-onair-tools button{flex:1;min-width:var(--lv-tap);min-height:var(--lv-tap);border:0;background:none;
  color:#fff;padding:0;cursor:pointer;display:grid;place-items:center}
.lv-onair-tools button svg{width:18px;height:18px}
.lv-onair-tools button.off{background:var(--err,#ff4d4d)}
/* muted by the host, not by you — the button is held, not just off */
.lv-onair-tools button.locked{background:var(--err,#ff4d4d);opacity:.75}
.lv-onair.hostmuted{border-color:var(--err,#ff4d4d)}
.lv-onair.hostmuted .lv-onair-tag{background:var(--err,#ff4d4d)}
.lv-onair.hostmuted .lv-onair-tag::after{content:' · muted'}
.lv-onair-tools .lv-onair-out{color:#ff9d9d}
.lv-onair-tools button:active{transform:scale(.92)}
/* it used to sit over the comment river, hiding exactly what people were
   saying — a message belongs at the top, out of the conversation */
/* below the description card, so it never covers what the live is about */
.lv-toast{position:absolute;left:50%;top:calc(var(--sat) + 112px);z-index:12;
  transform:translate(-50%,-10px);background:rgba(12,12,14,.94);color:#fff;border-radius:99px;
  padding:10px 18px;font:500 clamp(12px,13px,14px)/1.3 var(--font,system-ui);
  max-width:82vw;text-align:center;
  opacity:0;pointer-events:none;transition:opacity .22s,transform .22s;
  border:1px solid rgba(255,255,255,.14)}
.lv-toast.show{opacity:1;transform:translate(-50%,0)}
/* while a toast is up the description card gets out of its way */
.lv.toasting .lv-about{opacity:0;pointer-events:none}
.lv-about{transition:opacity .2s}
.lv-toast{box-shadow:0 8px 26px rgba(0,0,0,.5)}
/* quality choice, before going live */
.bc-q{display:flex;gap:5px;padding:4px;border-radius:12px;background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.14);margin-bottom:9px}
.bc-q-b{flex:1;border:0;background:transparent;color:rgba(255,255,255,.72);cursor:pointer;
  border-radius:9px;min-height:var(--lv-tap);padding:8px 6px;
  font:600 13px/1.2 var(--font,system-ui);transition:.15s}
.bc-q-b.on{background:#fff;color:#111}
/* the broadcaster's own health line: is this reaching anybody? */
/* host-only: remove a message from the live chat */
.lv-c{position:relative}
/* Room for the take-down button so it never sits on the words — and the
   button itself is a 44px target with a small dot drawn inside it, rather than
   a 20px dot nobody can hit. */
.lv-c.has-x{padding:12px 46px 12px 13px;min-height:var(--lv-tap)}
.lv-c-x{position:absolute;right:0;top:50%;transform:translateY(-50%);
  width:var(--lv-tap);height:var(--lv-tap);border-radius:50%;
  border:0;background:radial-gradient(circle at 50% 50%,rgba(0,0,0,.5) 0 11px,transparent 11.5px);
  color:rgba(255,255,255,.8);font:400 15px/1 var(--font,system-ui);
  cursor:pointer;opacity:0;transition:opacity .15s;display:grid;place-items:center}
.lv-c:hover .lv-c-x,.lv-c:focus-within .lv-c-x{opacity:1}
.lv-c-x:hover{background:radial-gradient(circle at 50% 50%,#ff4d4d 0 13px,transparent 13.5px);color:#fff}
@media (hover:none){.lv-c-x{opacity:.55}}
.bc-health{position:absolute;left:calc(var(--sal) + 12px);top:calc(var(--sat) + 58px);z-index:7;
  display:inline-flex;align-items:center;gap:7px;
  max-width:calc(100% - var(--sal) - var(--sar) - var(--lv-rail) - 26px);
  background:rgba(10,10,12,.74);border:1px solid rgba(255,255,255,.14);border-radius:99px;
  padding:6px 13px 6px 10px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.bc-health[hidden]{display:none}
.bc-health i{width:8px;height:8px;border-radius:50%;background:#7d7d86;flex:none}
.bc-health b{color:#fff;font:600 12.5px/1.3 var(--font,system-ui);white-space:nowrap}
.bc-health span{color:rgba(255,255,255,.6);font:400 12px/1.3 var(--font,system-ui);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bc-health.ok i{background:#3ddc84;box-shadow:0 0 0 3px rgba(61,220,132,.18)}
.bc-health.warn i{background:#ffb020;box-shadow:0 0 0 3px rgba(255,176,32,.18)}
.bc-health.bad i{background:#ff4d4d;box-shadow:0 0 0 3px rgba(255,77,77,.2);
  animation:lvpulse 1.1s infinite}
/* pre-live self-test */
.bc-test{width:100%;flex:none;margin-top:8px;border:1px solid rgba(255,255,255,.22);
  background:rgba(255,255,255,.06);color:#fff;border-radius:14px;min-height:var(--lv-tap);
  padding:12px;font:600 14px/1.2 var(--font,system-ui);cursor:pointer}
.bc-test:disabled{opacity:.6}
.bc-test-out{margin-top:9px;border-radius:12px;padding:11px 13px;font:400 12.5px/1.55 var(--font,system-ui);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);color:rgba(255,255,255,.82)}
.bc-test-out[hidden]{display:none}
.bc-test-out b{display:block;color:#fff;font-size:13.5px;margin-bottom:3px}
.bc-test-out.ok{border-color:rgba(61,220,132,.5);background:rgba(61,220,132,.1)}
.bc-test-out.warn{border-color:rgba(255,176,32,.55);background:rgba(255,176,32,.1)}
.bc-test-out.bad{border-color:rgba(255,77,77,.55);background:rgba(255,77,77,.1)}
.bc-note{position:absolute;left:calc(var(--sal) + 12px);right:calc(var(--sar) + 12px);
  bottom:calc(var(--lv-dock) + 8px);
  z-index:14;background:rgba(0,0,0,.62);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  border:1px solid rgba(255,255,255,.18);border-radius:12px;padding:9px 12px;color:#fff;
  font-size:.8rem;line-height:1.35;text-align:center}
.bc-note[hidden]{display:none}
.bc-note.bad{border-color:rgba(255,90,90,.6);background:rgba(120,10,10,.62)}

.bc-gate{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(180deg,#141416,#000);padding:28px;text-align:center}
.bc-gate[hidden]{display:none}
.bc-gate-in{max-width:340px;display:flex;flex-direction:column;align-items:center;gap:11px}
.bc-gate-in img{width:62px;height:62px;border-radius:50%;object-fit:cover}
.bc-gate-in h1{margin:4px 0 0;font-size:1.35rem;font-weight:800;color:#fff}
.bc-gate-in p{margin:0;font-size:.88rem;line-height:1.55;color:#b4b4b8}
.bc-gate-in p code{background:rgba(255,255,255,.12);padding:1px 6px;border-radius:5px;color:#fff;word-break:break-all}
.bc-gate-in .lv-golive{margin-top:6px}

/* when live, the badge pill turns pink */
.bcast-body .lv-pill.lv-badge.on{background:var(--pink)}

/* studio: prominent "Go Live now" */
.golive-cta{width:100%;justify-content:center;gap:9px;font-size:.95rem;padding:14px 20px;margin:4px 0 12px}
.golive-cta svg{width:19px;height:19px}

/* ══════════════════════════════════════════════════════════════════════
   SIGN-IN CHOICES (v52) — Google / email / phone, the shared code step,
   the two-step card in Account settings, and the landing Staff button.
   ══════════════════════════════════════════════════════════════════════ */

/* ---- Google button + "or" rule ---- */
.oauth-wrap{margin:6px 0 2px}
.g-btn-slot{display:flex;justify-content:center;min-height:44px}
.or-rule{display:flex;align-items:center;gap:12px;margin:18px 0 4px;
  color:var(--mut);font-size:.75rem;letter-spacing:.08em;text-transform:uppercase}
.or-rule::before,.or-rule::after{content:"";flex:1;height:1px;background:var(--line)}

/* ---- email / phone switch ---- */
.auth-tabs{display:flex;gap:6px;margin:16px 0 4px;padding:4px;
  background:var(--panel2);border-radius:var(--radius-pill)}
.auth-tab{flex:1;padding:9px 12px;border:0;border-radius:var(--radius-pill);
  background:transparent;color:var(--mut);font-size:.85rem;font-weight:600;
  cursor:pointer;transition:background var(--dur-2,.18s),color var(--dur-2,.18s)}
.auth-tab:hover{color:var(--txt)}
.auth-tab.active{background:var(--panel);color:var(--txt);
  box-shadow:0 1px 3px rgba(0,0,0,.28)}
.auth-tab[hidden]{display:none}

/* ---- the 6-digit code step ---- */
.code-field{width:100%;text-align:center;font-size:1.9rem;font-weight:700;
  letter-spacing:.42em;text-indent:.42em;padding:14px 10px;
  font-variant-numeric:tabular-nums}
.code-field::placeholder{letter-spacing:.42em;opacity:.28;font-weight:600}
.code-badge{width:52px;height:52px;margin:0 auto 14px;display:grid;place-items:center;
  border-radius:50%;background:var(--pink-a14);color:var(--pink);font-size:1.4rem}
.auth-fine.mini{margin:10px 0 0;font-size:.75rem;line-height:1.5;text-align:left}
#step-code{animation:codeIn .22s ease both}
@keyframes codeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---- two-step sign-in card ---- */
.tf-state{display:flex;align-items:center;gap:10px;margin:14px 0 4px;
  font-weight:600;font-size:.92rem}
.tf-dot{width:9px;height:9px;border-radius:50%;background:var(--mut);flex:none;
  box-shadow:0 0 0 3px rgba(163,163,163,.16)}
.tf-dot.on{background:var(--ok);box-shadow:0 0 0 3px rgba(63,185,80,.18)}
#tf-card .code-field,#ph-card .code-field{max-width:260px}

/* ---- Staff button (landing page only) ---- */
.btn-staff{display:inline-flex;align-items:center;gap:7px;
  background:transparent;color:var(--mut);border:1px solid var(--line-strong)}
.btn-staff:hover{color:var(--pink);border-color:var(--pink);background:var(--pink-a08)}
.btn-staff svg{opacity:.85}
@media(max-width:560px){
  .btn-staff span,.lp-nav a[href="/story"]{font-size:.82rem}
  .btn-staff{padding-left:10px;padding-right:10px}
}

/* ---- Studio: sign-in configuration status ---- */
.stu-status{margin-top:14px;display:flex;flex-direction:column;gap:8px}
.cfg-row{display:flex;align-items:center;gap:9px;font-size:.85rem;color:var(--mut);line-height:1.5}
.cfg-row b{color:var(--txt);font-weight:600}
.cfg-dot{width:8px;height:8px;border-radius:50%;background:var(--warn);flex:none;
  box-shadow:0 0 0 3px rgba(217,169,74,.16)}
.cfg-dot.on{background:var(--ok);box-shadow:0 0 0 3px rgba(63,185,80,.18)}




/* ══════════════════════════════════════════════════════════════════════
   [hidden] beats layout (v55). Components that set their own `display`
   (.auth-tabs is flex, cards are grid/flex) outrank the browser's built-in
   [hidden]{display:none}, so `el.hidden = true` quietly did nothing and dead
   controls stayed on screen. One rule closes the whole class of bug.
   ══════════════════════════════════════════════════════════════════════ */
[hidden]{display:none !important}

/* Staff door — footer of the welcome page, nowhere else. */
.staff-foot{display:inline-flex;align-items:center;gap:6px;margin-top:16px;
  padding:7px 14px;border-radius:var(--radius-pill);
  border:1px solid var(--line);background:transparent;
  color:var(--mut);font-size:.74rem;font-weight:600;text-decoration:none;
  opacity:.6;transition:opacity var(--dur-2),color var(--dur-2),border-color var(--dur-2)}
.staff-foot:hover{opacity:1;color:var(--pink);border-color:var(--pink)}
.staff-foot svg{opacity:.9}

/* ══════════════════════════════════════════════════════════════════════
   CHECKOUT (v55) — two panels: what you're joining · how you pay.
   Left panel carries the brand and the promise; right panel carries the
   money and, once they commit, the embedded PesaPal checkout.
   ══════════════════════════════════════════════════════════════════════ */
.co-flash{max-width:1040px;margin:18px auto 0;padding:13px 16px;border-radius:var(--radius);
  border:1px solid var(--line);font-size:.88rem;line-height:1.5}
.co-flash.ok{background:var(--ok-bg);border-color:rgba(63,185,80,.35);color:var(--ok)}
.co-flash.err{background:var(--err-bg);border-color:rgba(240,97,109,.35);color:var(--err)}

.co-split{max-width:1040px;margin:0 auto;padding:26px 18px 80px;
  display:grid;grid-template-columns:1fr 1fr;gap:34px;align-items:start}

/* ---- panel 1 : the story ---- */
.co-story{padding-top:6px}
.co-logo{width:52px;height:52px;border-radius:14px;margin-bottom:16px;object-fit:cover}
.co-h1{font-family:'Archivo Black',Inter,system-ui,sans-serif;
  font-size:clamp(1.5rem,3.6vw,2.1rem);line-height:1.14;margin:6px 0 14px;letter-spacing:-.01em}
.co-h1 em{font-style:normal;color:var(--pink)}
.co-lede{color:var(--mut);font-size:.94rem;line-height:1.68;margin:0 0 22px}

.co-list{list-style:none;margin:0 0 24px;padding:0;display:flex;flex-direction:column;gap:11px}
.co-list li{position:relative;padding-left:28px;font-size:.9rem;line-height:1.5;color:var(--txt-dim)}
.co-list li::before{content:"";position:absolute;left:0;top:.16em;width:18px;height:18px;
  border-radius:50%;background:var(--pink-a14)}
.co-list li::after{content:"";position:absolute;left:6px;top:.42em;width:5px;height:9px;
  border:solid var(--pink);border-width:0 2px 2px 0;transform:rotate(45deg)}

.co-quote{margin:0;padding:14px 0 0 16px;border-left:2px solid var(--pink-a25);
  color:var(--mut);font-size:.86rem;line-height:1.6;font-style:italic}

/* ---- panel 2 : the money ---- */
.co-pay{position:sticky;top:80px}
.co-card{position:relative;overflow:hidden;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--radius-lg);padding:28px 24px 24px}
.co-card::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;
  background:linear-gradient(90deg,var(--pink),var(--pink-bright))}

.co-kicker{font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;
  color:var(--mut);font-weight:700;margin:0 0 10px}
.co-price{display:flex;align-items:baseline;gap:8px}
.co-amt{font-family:'Archivo Black',Inter,system-ui,sans-serif;
  font-size:clamp(2.2rem,7vw,2.9rem);line-height:1;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums}
.co-cur{font-size:.95rem;font-weight:700;color:var(--mut);letter-spacing:.04em}
.co-per{color:var(--mut);font-size:.86rem;margin:6px 0 22px}

.co-cta{width:100%;font-size:1rem;padding:15px 20px;border-radius:var(--radius-pill);
  box-shadow:0 12px 32px -12px var(--pink-glow)}
.co-cta:disabled{opacity:.5;box-shadow:none}
.co-secure{display:flex;align-items:center;gap:7px;color:var(--mut);
  font-size:.77rem;margin:14px 0 0}
.co-secure b{color:var(--txt-dim)}
.co-fine{color:var(--mut);font-size:.75rem;line-height:1.55;margin:9px 0 0;opacity:.85}
.co-fine a{color:var(--pink)}
.co-card .msg{margin-top:12px}

/* ---- the embedded PesaPal checkout ---- */
.co-frame-head{display:flex;align-items:center;justify-content:space-between;
  gap:10px;margin-bottom:12px}
.co-frame-amt{font-weight:700;font-size:.95rem;font-variant-numeric:tabular-nums}
.co-frame-box{position:relative;border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;background:var(--panel2);min-height:520px}
.co-frame-box iframe{display:block;width:100%;height:560px;border:0;background:#fff}
.co-frame-load{position:absolute;inset:0;display:grid;place-items:center;
  color:var(--mut);font-size:.85rem;background:var(--panel2);z-index:1}
.co-waiting{margin-top:12px;padding:10px 13px;border-radius:var(--radius-sm);
  background:var(--warn-bg);color:var(--warn);font-size:.8rem;text-align:center}
.co-waiting.done{background:var(--ok-bg);color:var(--ok)}

/* one column on phones — payment first, story underneath */
@media(max-width:860px){
  .co-split{grid-template-columns:1fr;gap:26px;padding:20px 14px 70px}
  .co-pay{position:static;order:-1}
  .co-story{order:1;border-top:1px solid var(--line);padding-top:24px}
  .co-logo{display:none}
  .co-frame-box{min-height:460px}
  .co-frame-box iframe{height:500px}
}

/* ---- Subscription & billing (account settings) ---- */
.bill-state{display:flex;align-items:flex-start;gap:11px;margin:14px 0 10px}
.bill-state b{display:block;font-size:.95rem}
.bill-state small{display:block;color:var(--mut);font-size:.79rem;margin-top:3px;line-height:1.5}
.bill-dot{width:9px;height:9px;border-radius:50%;background:var(--mut);flex:none;margin-top:6px;
  box-shadow:0 0 0 3px rgba(163,163,163,.16)}
.bill-dot.on{background:var(--ok);box-shadow:0 0 0 3px rgba(63,185,80,.18)}
.bill-card .btn{display:inline-block;text-decoration:none;text-align:center}
.bill-h{font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);
  font-weight:700;margin:22px 0 9px}
.bill-row{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--panel2);margin-bottom:7px}
.bill-row b{font-size:.88rem;font-variant-numeric:tabular-nums}
.bill-row small{display:block;color:var(--mut);font-size:.72rem;margin-top:2px}
.bill-empty{margin-top:16px}
.pill.wait{background:var(--warn-bg);color:var(--warn)}

/* ══════════════════════════════════════════════════════════════════════
   LOCKED (v55) — signed in, not yet a member. No library chrome at all:
   no tab bar, no drawer, no hamburger. Account, settings, log out, pay.
   The JS already skips building these; this is the belt to its braces, and
   it also covers anything injected by a page's own script.
   ══════════════════════════════════════════════════════════════════════ */
body.locked .tabbar,
body.locked .site-hamb,
body.locked .site-drawer,
body.locked .drawer-scrim,
body.locked .bell,
body.locked .notif-panel,
body.locked [data-shelf]{display:none !important}
body.locked.has-tabbar{padding-bottom:0}

/* live: tap-to-unmute hint over a muted-autoplay stream */
/* Arriving muted is normal — every browser blocks sound until you tap. This
   was hidden behind the comments in a dim grey pill, so nobody tapped it. */
.lv-unmute{position:absolute;left:50%;top:calc(var(--sat) + 62px);
  transform:translateX(-50%);z-index:13;min-height:var(--lv-tap);display:inline-flex;align-items:center;
  background:var(--pink,#ff2e88);color:#fff;font-size:clamp(12px,.82rem,15px);font-weight:700;
  padding:0 18px;border-radius:999px;cursor:pointer;border:0;white-space:nowrap;
  box-shadow:0 6px 22px rgba(255,46,136,.45);animation:unmutepulse 2.4s ease-in-out infinite}
@keyframes unmutepulse{0%,100%{transform:translateX(-50%) scale(1)}
  50%{transform:translateX(-50%) scale(1.05)}}

/* ── choose the app or the browser ─────────────────────────────────────── */
.entry-gate{position:fixed;inset:0;z-index:9000;display:flex;align-items:flex-end;justify-content:center;
  background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);
  animation:egfade .18s ease-out}
@keyframes egfade{from{opacity:0}to{opacity:1}}
.entry-sheet{width:100%;max-width:460px;background:var(--bg);border-radius:22px 22px 0 0;
  padding:22px 20px calc(env(safe-area-inset-bottom,0px) + 20px);text-align:center;
  box-shadow:0 -18px 50px -12px rgba(0,0,0,.45);animation:egup .22s cubic-bezier(.2,.8,.3,1)}
@keyframes egup{from{transform:translateY(18px)}to{transform:translateY(0)}}
.entry-sheet img{width:56px;height:56px;border-radius:16px;margin-bottom:10px}
.entry-sheet h2{margin:0 0 6px;font-size:1.12rem}
.entry-sheet p{margin:0 0 16px;font-size:.84rem;color:var(--mut);line-height:1.5}
.entry-sheet .btn{width:100%;margin-bottom:9px}
@media(min-width:640px){.entry-gate{align-items:center}.entry-sheet{border-radius:22px}}

/* ── /get ──────────────────────────────────────────────────────────────── */
.getpage{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:26px 18px}
.getcard{width:100%;max-width:460px;text-align:center}
.get-logo{width:74px;height:74px;border-radius:20px;margin-bottom:12px}
.getcard h1{margin:0 0 8px;font-size:1.5rem;font-weight:500}
.getcard h1 b{font-weight:800}
.get-lede{color:var(--mut);font-size:.88rem;line-height:1.6;margin:0 0 22px}
.get-choice{display:flex;flex-direction:column;gap:10px}
.get-btn{width:100%;padding:14px 18px;font-size:.95rem}
.get-note{min-height:1.2em;margin:12px 0 0;font-size:.8rem;color:var(--mut)}
.get-steps{text-align:left;margin:14px auto 0;padding-left:20px;max-width:330px;
  font-size:.83rem;line-height:1.7;color:var(--mut)}
.get-steps[hidden]{display:none}
.get-facts{display:grid;gap:10px;margin:24px 0 18px;text-align:left}
.get-facts div{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:11px 13px}
.get-facts b{display:block;font-size:.85rem;margin-bottom:2px}
.get-facts span{font-size:.78rem;color:var(--mut);line-height:1.45}

/* the Studio menu button — last word, so no later rule can hide it on a phone */
@media(max-width:900px){
  .studio .stu-burger{display:inline-flex;align-items:center;justify-content:center}
  .studio .stu-top{padding:0 12px;gap:10px}
  .studio .stu-top .brand .name{font-size:.92rem}
}

/* ── "Joyce is live" banner, on every member page ────────────────────────
   The height is a token because three other rules depend on it: the padding
   that keeps the page out from under it, the offset the sticky topbar sits at,
   and how far the bell panel drops. Changing the banner used to mean finding
   all four 44s. The banner itself is drawn in the LIVE ANNOUNCEMENT block near
   the foot of this file. */
:root{--livebar-h:64px}
html.livebar-on body{padding-top:var(--livebar-h)}
html.livebar-on .topbar{top:var(--livebar-h)}

/* the Live tab wears a turning black-and-pink ring while a live is running */
.tab-ic.live-on{position:relative;display:inline-flex;align-items:center;justify-content:center}
.tab-ic.live-on::before{content:'';position:absolute;inset:-6px;border-radius:50%;
  background:conic-gradient(#000,var(--pink),#111,var(--pink),#000);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2.5px));
          mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2.5px));
  animation:tabring 2.4s linear infinite}
@keyframes tabring{to{transform:rotate(1turn)}}
.tabbar a[href="/live"] .tab-ic.live-on{color:var(--pink)}

.ask-dot{font-size:1.7rem;margin-bottom:6px}

/* ══════════ save your live ══════════ */
.save-body{background:var(--bg);color:var(--txt);min-height:100vh}
.save-wrap{max-width:1040px;margin:0 auto;padding:22px 16px 90px}
.save-head{display:flex;align-items:flex-start;gap:14px;margin-bottom:22px}
.save-back{flex:none;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;
  border:1.5px solid var(--line);color:var(--txt);text-decoration:none;font-size:19px}
.save-back:hover{border-color:var(--pink);color:var(--pink)}
.save-head h1{font-size:1.55rem;margin:0 0 3px;letter-spacing:-.02em}
.save-head p{margin:0;color:var(--mut);font-size:.9rem}
.save-grid{display:grid;gap:18px;grid-template-columns:1fr}
@media(min-width:900px){.save-grid{grid-template-columns:1.05fr .95fr;align-items:start}}
.save-card{background:var(--card);border:1px solid var(--line);border-radius:20px;padding:18px}
.save-card h2{font-size:.78rem;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);
  margin:0 0 14px;font-weight:700}
.sv-stage{position:relative;border-radius:14px;overflow:hidden;background:#0b0b0d;
  aspect-ratio:16/9;display:grid;place-items:center}
.sv-stage video,.sv-stage img{width:100%;height:100%;object-fit:contain;background:#0b0b0d;display:block}
.sv-prep{color:rgba(255,255,255,.62);font-size:.88rem;padding:20px;text-align:center}
.sv-scrub{margin-top:14px}
.sv-scrub input[type=range]{width:100%;accent-color:var(--pink);height:26px}
.sv-time{display:flex;justify-content:space-between;font-size:.76rem;color:var(--mut);
  margin:-4px 2px 10px;font-variant-numeric:tabular-nums}
.sv-grab{width:100%}
.sv-hint{font-size:.78rem;color:var(--mut);margin:9px 2px 0;line-height:1.5}
.sv-alt{display:flex;gap:9px;margin-top:12px;flex-wrap:wrap}
.sv-alt>*{flex:1 1 150px;text-align:center;cursor:pointer}
.sv-up{display:inline-flex;align-items:center;justify-content:center}
.sv-prev{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;margin-top:12px}
.sv-prev img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:9px;cursor:pointer;
  border:2px solid transparent;transition:border-color .15s,transform .15s}
.sv-prev img:hover{border-color:var(--pink);transform:translateY(-2px)}
.fld{display:block;margin-bottom:14px}
.fld>span{display:block;font-size:.78rem;color:var(--mut);margin-bottom:6px;font-weight:600}
.fld input,.fld textarea,.fld select{width:100%;padding:11px 13px;border-radius:12px;
  border:1.5px solid var(--line);background:var(--bg);color:var(--txt);font:inherit;font-size:.94rem}
.fld textarea{resize:vertical;line-height:1.55}
.fld input:focus,.fld textarea:focus,.fld select:focus{outline:none;border-color:var(--pink)}
.sv-toggle{display:flex;align-items:center;gap:12px;justify-content:space-between;cursor:pointer;
  border:1.5px solid var(--line);border-radius:14px;padding:12px 14px;margin:4px 0 18px}
.sv-toggle b{display:block;font-size:.94rem}
.sv-toggle span{display:block;font-size:.78rem;color:var(--mut);margin-top:2px}
.sv-toggle i{flex:none;width:44px;height:26px;border-radius:99px;background:var(--line);position:relative;
  transition:background .18s}
.sv-toggle i::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;
  background:#fff;transition:transform .18s;box-shadow:0 1px 3px rgba(0,0,0,.3)}
.sv-toggle.on i{background:var(--pink)}
.sv-toggle.on i::after{transform:translateX(18px)}
.sv-actions{display:grid;gap:9px}

/* ── Studio settings: three short pages instead of one endless scroll ── */
.set-tabs{display:flex;gap:6px;margin:0 0 18px;padding:5px;border-radius:14px;
  background:var(--card);border:1px solid var(--line);overflow-x:auto;-webkit-overflow-scrolling:touch}
.set-tabs button{flex:1 1 auto;display:inline-flex;align-items:center;justify-content:center;gap:7px;
  white-space:nowrap;border:0;background:transparent;color:var(--mut);cursor:pointer;
  border-radius:10px;padding:10px 14px;font:600 .87rem/1 var(--font,system-ui);transition:.16s}
.set-tabs button svg,.set-tabs button i{width:16px;height:16px;flex:none}
.set-tabs button:hover{color:var(--txt)}
.set-tabs button.on{background:var(--pink);color:#fff;box-shadow:0 4px 14px rgba(255,46,136,.32)}
.set-grp[hidden]{display:none}
.set-grp>.stu-card{margin-bottom:16px}
.set-grp>.stu-card:last-child{margin-bottom:0}
.v-pill--draft{background:rgba(148,163,184,.18);color:#94a3b8}
.v-pill--lost{background:rgba(239,68,68,.16);color:var(--err,#ef4444)}
.adm-toast{position:fixed;left:50%;bottom:26px;z-index:120;transform:translate(-50%,12px);
  background:#111114;color:#fff;border:1px solid rgba(255,255,255,.14);border-radius:99px;
  padding:11px 20px;font:600 .87rem/1.3 var(--font,system-ui);max-width:88vw;text-align:center;
  opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;box-shadow:0 14px 40px rgba(0,0,0,.4)}
.adm-toast.show{opacity:1;transform:translate(-50%,0)}
.adm-toast.bad{background:#3a1114;border-color:rgba(255,90,90,.5)}
.stu-card--quiet{background:transparent;border-style:dashed;opacity:.92}
.stu-card--quiet:hover{opacity:1}
/* Studio storage panel */
.st-total{font:700 1.7rem/1.1 var(--font,system-ui);letter-spacing:-.02em}
.st-total small{font:400 .82rem var(--font,system-ui);color:var(--mut);margin-left:8px;letter-spacing:0}
.st-bar{display:flex;height:10px;border-radius:99px;overflow:hidden;background:var(--line);margin:12px 0 10px}
.st-bar i{display:block;height:100%}
.st-legend{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:.79rem;color:var(--mut)}
.st-legend span{display:inline-flex;align-items:center;gap:6px}
.st-legend i{width:9px;height:9px;border-radius:2px;display:inline-block}
.st-orphan{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:14px;padding:11px 13px;
  border:1px dashed var(--line);border-radius:12px;font-size:.85rem;color:var(--mut)}
.st-orphan b{color:var(--txt)}
.st-big{margin-top:12px;font-size:.82rem}
.st-big summary{cursor:pointer;color:var(--mut);padding:6px 0}
.st-big>div{display:flex;justify-content:space-between;gap:12px;padding:5px 0;
  border-top:1px solid var(--line)}
.st-big span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--mut)}
.st-big b{font-variant-numeric:tabular-nums;flex:none}
/* Studio health card */
.hc-card{border-left:3px solid var(--ok,#3ddc84)}
.hc-card.hc-warn{border-left-color:#ffb020}
.hc-card.hc-bad{border-left-color:#ff4d4d}
.hc-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.hc-head h2{margin:0}
.hc-score{font:600 .76rem/1 var(--font,system-ui);color:var(--mut);
  border:1px solid var(--line);border-radius:99px;padding:5px 10px;white-space:nowrap}
.hc-row{display:flex;align-items:flex-start;gap:11px;padding:11px 0;border-top:1px solid var(--line)}
.hc-row:first-child{border-top:0;padding-top:14px}
.hc-row>i{flex:none;width:9px;height:9px;border-radius:50%;margin-top:6px;background:#3ddc84}
.hc-warn>i{background:#ffb020}
.hc-bad>i{background:#ff4d4d}
.hc-row>div{flex:1;min-width:0}
.hc-row b{display:block;font-size:.92rem}
.hc-row span{display:block;font-size:.79rem;color:var(--mut);line-height:1.5;margin-top:2px}
.hc-row em{flex:none;font-style:normal;font-size:.72rem;color:var(--mut);
  border:1px solid var(--line);border-radius:99px;padding:4px 9px;white-space:nowrap}
.hc-row .btn{flex:none}
/* "free preview" badge over a locked episode's trailer */
.lp-tag{position:absolute;left:12px;top:12px;z-index:3;display:inline-flex;align-items:center;gap:6px;
  background:rgba(10,10,12,.76);color:#fff;border:1px solid rgba(255,255,255,.16);border-radius:99px;
  padding:6px 12px;font:600 12px/1 var(--font,system-ui);backdrop-filter:blur(8px)}
.lp-tag svg{width:13px;height:13px}
/* moderation: one tap to take a comment down */
.cmrow{display:flex;align-items:flex-start;gap:10px}
.cmrow>span{flex:1;min-width:0}
.cmrow small a{color:var(--mut);text-decoration:none}
.cmrow small a:hover{color:var(--pink)}
.cm-del{flex:none;border:1px solid var(--line);background:transparent;color:var(--mut);
  width:28px;height:28px;border-radius:50%;cursor:pointer;font-size:17px;line-height:1;
  display:grid;place-items:center;transition:.15s}
.cm-del:hover{border-color:#ff4d4d;color:#ff4d4d;background:rgba(255,77,77,.08)}

/* ══════ live, on a small phone ══════
   Tested at 320x568, 360x640, 360x780, 390x844, 412x915 and 640x360, with a
   notch and a gesture bar switched on: nothing overlaps, nothing hides under
   the insets, every control keeps its 44px target and no text drops below
   12px. Only the numbers in the token block move — the layout follows. */
@media(max-width:400px){
  .lv{--lv-gap:8px}
  .lv-c{padding:6px 11px;border-radius:14px}
  .lv-bar input{padding:0 15px}
}
@media(max-height:600px){
  /* short screens: the chat gives ground before the picture does, and the
     description shows one line until she taps it open */
  .lv{--lv-band:max(min(24vh,140px),84px)}
  .lv-vrail,.lv-rail{gap:10px}
  .lv-about{top:calc(var(--sat) + 110px)}
  .lv-about span{-webkit-line-clamp:1}
  .lv-about.open span{-webkit-line-clamp:10}
}
@media(max-height:440px){
  /* Landscape, or the keyboard taking half the screen. 360px of height has to
     hold the picture, the chat and the thumb controls, so the band and the bar
     both give a little and the icons carry the rail on their own. */
  .lv{--lv-gap:8px;--lv-barh:54px;--lv-band:max(min(24vh,92px),76px)}
  /* --lv-barh is a promise the bar has to keep, or the band lands on top of it */
  .lv-bar{padding-top:5px;padding-bottom:calc(var(--sab) + 5px)}
  .lv-vrail,.lv-rail{gap:8px}
  .lv-vb>span,.lv-tool span{display:none}
  /* the description card would take a quarter of a 360px-tall picture, and it
     is the one thing here that is not needed to watch or to take part */
  .lv-about{display:none}
  .lv-onair{top:calc(var(--sat) + 54px);width:var(--lv-tile);
    left:calc(var(--sal) + var(--lv-gap));right:auto}
  .lv-onair video{height:64px}
  /* with a guest's picture on the left, the chat starts to the right of it */
  .lv:has(#lv-onair:not([hidden])) .lv-river{left:calc(var(--sal) + var(--lv-tile) + 18px)}
  /* the guest's picture is on the left here, so the sound prompt stays where
     it is instead of stepping aside into it */
  .lv:has(#lv-onair:not([hidden])) .lv-unmute{left:50%}
}
/* Studio content filters */
.vfilters{display:flex;gap:7px;overflow-x:auto;padding:0 0 4px;margin:0 0 12px;
  -webkit-overflow-scrolling:touch;scrollbar-width:none}
.vfilters::-webkit-scrollbar{display:none}
.vchip{flex:none;border:1.5px solid var(--line);background:transparent;color:var(--mut);
  border-radius:99px;padding:7px 14px;font:600 .8rem/1 var(--font,system-ui);cursor:pointer;
  transition:.15s;white-space:nowrap}
.vchip:hover{color:var(--txt);border-color:var(--pink)}
.vchip.on{background:var(--pink);border-color:var(--pink);color:#fff}
.vchip b{font-weight:700;opacity:.85}

/* ══════ the broadcaster on a small or short screen ══════
   Her rail has four tools and the viewer's has three, but both hang off the
   same dock, so the chat band clears them by the same margin on every screen.
   Nothing here moves a rail without moving the band and the pill with it —
   that is how the "New comments" pill ended up sitting on top of Mic and
   Camera in landscape. */
@media(max-height:440px){
  /* she still needs to see who is asking to come on, without it swallowing
     the picture */
  .bc-guests{max-height:44vh}
  .lv.bc-preview .lv-rail{flex-direction:row;top:auto;left:calc(var(--sal) + var(--lv-gap));
    right:auto;bottom:calc(var(--sab) + var(--lv-gap))}
  /* the go-live dock becomes a column beside the camera instead of a sheet
     that covers the whole of a 360px-tall screen */
  .bc-pre{left:auto;width:min(340px,52%);top:calc(var(--sat) + 58px);bottom:0;
    max-height:none;gap:8px;padding-top:8px}
  .bc-pre .bc-q{margin-bottom:0}
}
/* on a small phone the membership chip is the first thing to go — the header
   has to fit before it has to flatter */
@media(max-width:430px){
  .topbar .badge-paid{display:none}
  .topbar{gap:8px}
}

/* ══════════════════════════════════════════════════════════════════════
   TAP TARGETS — 44×44 minimum, everywhere a thumb has to land.

   Measured on a 360px phone before this block: the avatar 32×32, the theme
   toggle 30×33, the bell 32×36, the drawer's close button 34×28 — every
   control in the bar under the size a thumb can reliably hit, on every page
   of the site.

   The rule here is: grow the BOX, never the glyph. The bar is already 44px
   tall because the logo is 44px, so a 44px control costs the header no
   height at all — the icon stays exactly where it was and only its hit area
   grows out around it. Where a control has a visible disc of its own (the
   avatar, the hero's reel dots) the fill is clipped back to the content box
   with `background-clip:content-box`, so the padding is pure hit area and
   the disc keeps its old diameter to the pixel.
   ══════════════════════════════════════════════════════════════════════ */

/* ---- topbar: the theme toggle and the bell ---- */
/* Both were transparent icon buttons sized by their padding. A fixed 44×44
   box with the icon centred changes nothing you can see. */
.theme-btn,
.bell{
  width:44px;height:44px;min-height:44px;padding:0;flex-shrink:0;
  display:inline-flex;align-items:center;justify-content:center;
  border-radius:50%;line-height:1;
}

/* ---- topbar: the account avatar ---- */
/* 44×44 of button, a 32×32 disc inside it: the padding carries the fill and
   the ring, so the face is the same size it always was. */
.avatar-btn{
  width:44px;height:44px;padding:6px;box-sizing:border-box;
  background-clip:content-box;border:none;box-shadow:none;
  position:relative;overflow:visible;flex-shrink:0;
}
.avatar-btn::after{                     /* the 1px ring the border used to draw */
  content:"";position:absolute;inset:6px;border-radius:50%;
  border:1px solid var(--line);pointer-events:none;
}
.avatar-btn.has-img::after{border-color:transparent}
/* the compound selectors below re-set the `background` shorthand, and the
   shorthand carries background-clip with it — so each one has to be told
   again to keep its paint inside the disc */
.avatar-btn.has-img,
.avatar-btn:hover,
.avatar-btn:focus-visible{background-clip:content-box}

/* ---- topbar: the logo ---- */
/* It is a link, and on a narrow phone it was being squeezed to 38px wide —
   the round photo cropped with it — because nothing in the header refused to
   shrink. The photo holds its 44px now; the search field is the part that
   gives ground instead (see .topbar .brand + .topbar-search below). */
.topbar .brand img{flex-shrink:0}

/* ---- topbar: the search field ---- */
/* 40px tall before. The extra 4px fit inside the bar's existing height. */
.topbar-search input{height:44px;min-height:44px;min-width:0}
/* …and with three 44px controls beside it, the field is the part that gives
   ground on a 320px screen rather than the header running off the side. */
.topbar-search{min-width:0}

/* ---- the drawer's close button ---- */
.drawer-x{
  width:44px;height:44px;padding:0;flex-shrink:0;margin:-8px -8px -8px 0;
  display:inline-flex;align-items:center;justify-content:center;border-radius:50%;
}

/* ---- "see all" / "view all" row links ---- */
/* 40×15 of link at the end of every shelf heading. The box grows to 44 in
   both directions; the negative block margin keeps the heading the height it
   was, so the hit area reaches into the gap above and below the words
   instead of pushing the row of cards down the page. */
.hrow-more,
.shelf-head a{
  min-height:44px;min-width:44px;
  display:inline-flex;align-items:center;justify-content:flex-end;
  align-self:center;margin-block:-11px;
}

/* ---- skip link (only visible on keyboard focus, still a target) ---- */
.skip-link{min-height:44px;display:inline-flex;align-items:center}

/* ---- account menu rows ---- */
.avatar-menu a,.avatar-menu button{min-height:44px}

/* ---- landing hero: the reel dots and the sound toggle ---- */
/* The dots are 9px and have to stay 9px. Same trick as the avatar: 44px of
   button, the paint clipped back to a 9px content box. */
.rd{
  width:44px;height:44px;padding:17.5px;box-sizing:border-box;
  background-clip:content-box;flex-shrink:0;
}
.rd.on{background-clip:content-box}     /* `background:` on .rd.on would undo it */
.reel-dots{gap:0}                       /* the 44px boxes carry the spacing now */
/* the bobbing chevron sat on top of the dots and swallowed every tap */
.scroll-cue{pointer-events:none}
.sound-toggle{width:44px;height:44px}

/* ══════════════════════════════════════════════════════════════════════
   …and the same floor for the rest of the controls, on a phone.
   Buttons (34px), small buttons (26px), form fields (41px) and the sign-in
   tabs (34px) are all under the minimum on a small screen. On a desktop
   pointer they stay the size they were designed at.
   ══════════════════════════════════════════════════════════════════════ */
@media (max-width:760px),(pointer:coarse){
  .btn,.auth-tab,.chip:not(.small),.get-btn,.co-cta{min-height:44px}
  input[type=text],input[type=password],input[type=search],input[type=email],
  input[type=number],input[type=date],input[type=datetime-local],input[type=tel],
  textarea,select,.field{min-height:44px}
  /* standalone links that act as buttons */
  .auth-back,.peek{
    min-height:44px;display:inline-flex;align-items:center;justify-content:center;
  }
  .auth-back{display:flex}
  .lp-nav>a:first-child{min-height:44px;min-width:44px;
    display:inline-flex;align-items:center;justify-content:center}
  .clike,.cdel{min-height:44px}
  /* the landing header's logo, and the small logo on the sign-in card */
  .lp-topbar .brand,.auth-brand--sm{min-height:44px;min-width:44px}
  /* the staff door in the welcome footer */
  .staff-foot{min-height:44px}
}

/* ---- the header has to stay inside the screen while it does all that ---- */
/* The logo link was the only thing in the bar that would give ground: on the
   watch page it was squeezed to 0px wide — the photo clipped away to nothing
   — because the bar was over budget. It keeps its 44px now, and the parts
   that can shrink (the search field, the navlinks) do.
   Scoped to the site header on purpose: the Studio's own bar packs a
   wordmark into a 320px screen and needs its logo to keep shrinking. */
.topbar .brand{min-width:44px}
.navlinks{flex-shrink:1}
/* With the logo holding its 44px and the icons holding theirs, the wordmark
   beside the logo is the part with no room left: at 390px it rendered as a
   hard-clipped "Joyc". It only fits whole from about 560px up, so below that
   the header is the logo, the search and the controls — which is what it
   already did below 380px. */
@media(max-width:560px){.topbar .brand div{display:none}}

/* The watch page injects an episode pager — "← Previous" and
   "Next episode →" — into the shared .navlinks. On a 320px screen the bar
   cannot hold the logo, two *text* buttons, the theme toggle and the bell and
   still give each of them 44px: it ran 40px off the side of the screen, with
   the logo already crushed to zero. The pager used to be hidden outright below
   600px; now the labels are in <span class="lbl"> (the .v-actions trick), so
   the buttons shrink to the arrow alone — still 44px square, still reachable,
   and aria-label keeps the full wording for a screen reader. At 320px the
   whole header then measures 280px against a 320px screen. */
@media(max-width:600px){
  .ep-nav .lbl{display:none}
  .ep-nav .ep-btn{min-width:44px;padding-left:0;padding-right:0}
  .ep-nav .arw{font-size:1.2rem}
}

/* At 320px the watch header still carries five 44px tap targets — the account
   avatar, the logo, both pager arrows, the theme toggle and the bell — and
   adds up 18px wider than the screen. None of the targets may shrink, so the
   budget has to come from the header's own padding and gaps. The slim bar
   gives back 8px a side and a couple of pixels per gap, which is more than
   enough to bring the row inside a 320px screen.
   This spill was invisible until now only because the tab-bar pass had
   clamped the viewport with html{overflow:hidden}; removing that clamp (so
   the page can scroll at all) is what uncovered it. */
@media(max-width:360px){
  .topbar,.topbar.slim{padding-left:8px;padding-right:8px;gap:6px}
  .navlinks{gap:5px}
  .ep-nav{gap:5px}
}

/* ══════════════════════════════════════════════════════════════════════
   THE BELL PANEL — a phone-first notification list.

   Before this pass, measured on a 320px screen: the panel was a white card
   in BOTH themes (a selector-list bug three hundred lines up put
   `background:#fff` on it unconditionally), so in dark mode the heading was
   #f1f1f1 on #ffffff — 1.07:1, invisible. It was 615px tall with six rows
   and had no scroll of its own, so it ran off the bottom of the phone and
   the oldest notifications could not be reached at all. Every row was the
   same grey block whatever it was about, every timestamp read "9/14/2026",
   a row that opened a video was a <div> with an onclick (no keyboard, no
   link semantics), there was no way to tell a new one from one she read
   last week, and the empty state was one grey sentence.

   What it is now: a card that keeps 12px of air each side down to 320px,
   scrolls inside itself instead of off the screen, and gives each row an
   icon, a label, the words, and a time in plain language. Unread rows carry
   a pink rail and a dot. Everything a thumb has to hit is 44×44.
   ══════════════════════════════════════════════════════════════════════ */

/* ---- the card ---- */
.notif-panel{
  /* 88vw left 39px of margin on one side and 12 on the other at 320px.
     min() keeps a true 12px gutter each side all the way down. */
  width:min(340px,calc(100vw - 24px));max-width:none;
  background:var(--panel);            /* the theme's surface, in both themes */
  color:var(--txt);
  border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--e4);
  /* The top padding lives on the sticky head instead, so the head's background
     covers the full width of the card as rows slide under it. */
  padding:0 10px 10px;
  /* The CARD is the scroller, not a box inside it. toggleNotifs() opens the
     panel by writing `display:block` to the inline style, and an inline
     declaration beats anything a stylesheet says without !important — so a
     flex column here was silently ignored, the inner list was never shrunk
     to fit, and twenty notifications spilled 1684px down the page instead of
     scrolling. One scroller and a sticky head needs no display at all. */
  overflow-y:auto;-webkit-overflow-scrolling:touch;
  /* Never taller than the screen it hangs in — the list scrolls, the card does
     not grow past the bottom of the phone. Two numbers say what the screen has
     already spent: what is above the card (the header it hangs off, plus the
     52px it hangs down, plus air) and what is below it. Each is set by the
     thing that owns it, so nothing here has to know about live strips or tab
     bars — see the two rules underneath. */
  --np-above:68px;
  --np-below:8px;
  max-height:calc(100vh - var(--np-above) - var(--np-below));
  max-height:calc(100dvh - var(--np-above) - var(--np-below));
  overscroll-behavior:contain;
}
/* the LIVE strip sits above the header and takes the whole bar — and the card
   hanging off it — 44px down the screen */
html.livebar-on .notif-panel{--np-above:calc(var(--livebar-h) + 68px)}
/* and on a page with the bottom tab bar, "the bottom of the phone" is the top
   of that bar. The same --tabbar-clear every other full-height thing reads, so
   the two cannot drift. Without this the last notification sits under
   Home / Reels / Live and cannot be tapped. */
body.has-tabbar .notif-panel{--np-below:var(--tabbar-clear)}

/* ---- head: the title, and a way out that a thumb can hit ---- */
/* Sticky, so "Notifications" and the way out stay put while a long list runs
   under them. The negative margins take its background out to the card's
   edges, over the padding. */
.np-head{
  position:sticky;top:0;z-index:2;
  display:flex;align-items:center;gap:8px;
  margin:0 -10px 6px;padding:10px 10px 8px 14px;
  background:var(--panel);
  border-bottom:1px solid var(--line);
}
html[data-theme="light"] .np-head{background:#fff}
.notif-panel .np-head b{
  display:flex;align-items:center;gap:8px;margin:0;flex:1;min-width:0;
  font-size:.92rem;font-weight:700;letter-spacing:-.01em;color:var(--txt);
}
.np-head b svg{width:18px;height:18px;flex:none;color:var(--mut)}
/* 44×44 of hit area, a 16px glyph inside it — the same trick the rest of the
   header uses: grow the box, never the icon. The negative margin keeps the
   head the height the title alone made it. */
.np-x{
  width:44px;height:44px;min-height:44px;flex:none;margin:-10px -6px -10px 0;
  display:inline-flex;align-items:center;justify-content:center;
  background:none;border:none;border-radius:50%;cursor:pointer;
  color:var(--mut);line-height:1;
}
.np-x svg{width:17px;height:17px}
.np-x:hover{background:var(--panel2);color:var(--txt)}

/* ---- the list ---- */
.np-list{display:flex;flex-direction:column;gap:6px;margin:0 -2px;padding:2px}

/* ---- a row ---- */
.nrow{
  display:grid;grid-template-columns:28px 1fr;column-gap:10px;align-items:start;
  position:relative;
  padding:10px 12px 10px 10px;margin:0;
  min-height:44px;                     /* the floor, even for one short line */
  border-radius:var(--radius-sm);
  background:var(--panel2);
  font-size:.82rem;line-height:1.45;
  color:var(--txt);text-decoration:none;
  border-left:3px solid transparent;   /* the unread rail, held in reserve */
}
/* the icon disc */
.nr-ic{
  grid-row:1 / span 3;
  width:28px;height:28px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--panel3);color:var(--mut);flex:none;margin-top:1px;
}
.nr-ic svg{width:15px;height:15px}
.nr-main{display:block;min-width:0}
/* the label it already carried — "LIVE NOW", "PREMIERE", "New" */
.nr-kind{
  display:block;font-size:.62rem;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--mut);margin-bottom:2px;
}
.nr-text{
  display:block;color:var(--txt);
  /* long words and pasted links must wrap, not push the card wider */
  overflow-wrap:anywhere;word-break:break-word;
}
.nr-when{display:block;color:var(--mut);font-size:.7rem;margin-top:4px}

/* what kind of thing it is, in one colour each */
.nrow.nr-live  .nr-ic{background:var(--pink-a14);color:var(--pink)}
.nrow.nr-live  .nr-kind{color:var(--pink)}
.nrow.nr-prem  .nr-ic{color:var(--pink-bright)}
.nrow.nr-video .nr-ic{color:var(--txt-dim)}
.nrow.nr-acct  .nr-ic{color:var(--ok)}

/* ---- unread ---- */
/* A rail, a dot and a fractionally warmer surface: three signals, so it still
   reads for someone who cannot separate the pink from the grey. */
.nrow.unread{
  background:var(--panel3);
  border-left-color:var(--pink);
  padding-right:24px;                  /* room for the dot, so text never runs under it */
}
.nrow.unread .nr-text{font-weight:600}
.nr-new{
  position:absolute;top:12px;right:10px;
  width:8px;height:8px;border-radius:50%;background:var(--pink);
}

/* ---- a row that opens something ---- */
.nrow.link{cursor:pointer}
.nrow.link:hover{background:var(--panel3);outline:none;transform:none}
.nrow.unread.link:hover{background:var(--panel3);filter:brightness(1.08)}
.nrow.link:active{transform:scale(.99)}
.nrow.link:focus-visible{outline:2.5px solid var(--pink);outline-offset:2px}

/* ---- nothing here yet ---- */
.np-empty{
  display:flex;flex-direction:column;align-items:center;text-align:center;
  gap:6px;padding:26px 18px 30px;margin:0;color:var(--mut);font-size:.78rem;
  line-height:1.5;
}
.np-empty-ic{
  width:44px;height:44px;border-radius:50%;background:var(--panel2);
  display:inline-flex;align-items:center;justify-content:center;
  color:var(--mut);margin-bottom:2px;
}
.np-empty-ic svg{width:20px;height:20px}
.np-empty b{display:block;font-size:.88rem;color:var(--txt);margin:0}

/* ---- the live-alert switch above the list ---- */
.notif-panel .prow{margin-bottom:8px}
/* Its button is a real target on a phone: 26px of pill before, 44 now, with
   the extra height taken out of the row's own padding so the switch does not
   grow taller than the rows under it. */
@media (max-width:760px),(pointer:coarse){
  .prow{padding:6px 6px 6px 10px}
  .prow button{min-height:44px;padding:0 14px;display:inline-flex;align-items:center}
}

/* A live row is the one she opened the panel for — give it the accent border
   the rest of the site uses for "this is happening now". */
.nrow.nr-live{outline:1px solid var(--pink-a25);outline-offset:-1px}

/* At 320 the icon column is the first thing that can go without costing a tap
   target: the words get 10px back and still wrap on the same number of lines. */
@media (max-width:340px){
  .notif-panel{padding:8px}
  .nrow{grid-template-columns:24px 1fr;column-gap:8px;padding-left:8px}
  .nr-ic{width:24px;height:24px}
  .nr-ic svg{width:13px;height:13px}
}

/* The panel animates in from the bell; the refinement layer already gives it
   `pop`, but it scaled from the middle of the card. From the top-right it
   reads as coming out of the bell it belongs to. */
.notif-panel{transform-origin:top right}
@media (prefers-reduced-motion: reduce){
  .notif-panel{animation:none}
}

/* ══════════════════════════════════════════════════════════════════════
   LIVE ANNOUNCEMENT — "she is on air right now"
   ─────────────────────────────────────────────────────────────────────
   A live is the only thing on this site that is over if you miss it, and the
   treatment it had left was a 44px strip of 13px grey-on-gradient text at the
   top of the page — the shape of a cookie notice, which is exactly what the
   eye does with it. Two surfaces carry it now, and they are the same event
   said once each rather than the same sentence said three times:

     .livebar   a banner across the top of every member page. Her title, how
                many people are already in there, and a white Join pill that is
                a real 44px target rather than a run of underlined words.
     #live-hero the card at the head of the home feed — the old LIVE strip,
                rebuilt. It REPLACES the generic pinned announcement for the
                same live (main.js removes that one) instead of sitting above
                a second, quieter copy of itself.

   Both are painted on tokens, so both are right in either theme; the banner's
   own ground is a fixed gradient with white on it, which is why it does not
   depend on --panel and cannot repeat the white-on-white the notification
   panel once had. Every animation here is switched off wholesale by the
   prefers-reduced-motion rule in the refinement layer.
   ══════════════════════════════════════════════════════════════════════ */

.livebar{
  position:fixed;top:0;left:0;right:0;z-index:200;
  display:flex;align-items:center;gap:12px;
  box-sizing:border-box;height:var(--livebar-h);padding:0 12px;
  text-decoration:none;color:#fff;font-family:var(--font);
  background:linear-gradient(100deg,#0b0b0d 0%,#2b0014 40%,var(--pink) 100%);
  box-shadow:0 8px 24px -10px rgba(0,0,0,.7);
  animation:lb-drop .45s var(--ease-out) both;
}

/* the dot that says "now": a live core with a ring going out of it */
.livebar .lb-pulse{
  position:relative;flex:none;width:11px;height:11px;border-radius:50%;
  background:#fff;box-shadow:0 0 10px rgba(255,255,255,.75);
}
.livebar .lb-pulse::after{
  content:'';position:absolute;inset:-4px;border-radius:50%;
  border:2px solid rgba(255,255,255,.9);
  animation:lb-ping 1.9s cubic-bezier(.2,.6,.3,1) infinite;
}

.livebar .lb-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.livebar .lb-kicker{
  display:flex;align-items:baseline;gap:7px;
  font-size:.6rem;font-weight:900;letter-spacing:.15em;text-transform:uppercase;
}
.livebar .lb-count{
  font-size:.66rem;font-weight:700;letter-spacing:.01em;text-transform:none;
  color:rgba(255,255,255,.85);white-space:nowrap;
}
.livebar .lb-count::before{content:'·';margin-right:6px;opacity:.7}
.livebar .lb-txt{
  font-size:.92rem;font-weight:700;line-height:1.2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.livebar .lb-go{
  flex:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:44px;min-width:44px;padding:0 16px;box-sizing:border-box;
  border-radius:var(--radius-pill);background:#fff;color:#0b0b0d;
  font-size:.82rem;font-weight:800;letter-spacing:.01em;
  box-shadow:0 2px 10px rgba(0,0,0,.28);
  transition:transform var(--dur-2) var(--ease),box-shadow var(--dur-2) var(--ease);
}
.livebar:hover .lb-go{transform:translateY(-1px);box-shadow:0 5px 16px rgba(0,0,0,.36)}
.livebar:active{filter:brightness(.94)}
.livebar .go-arrow{flex:none}

@keyframes lb-drop{from{transform:translateY(-100%);opacity:0}to{transform:none;opacity:1}}
@keyframes lb-ping{
  0%{transform:scale(.7);opacity:.95}
  70%{transform:scale(2.1);opacity:0}
  100%{transform:scale(2.1);opacity:0}
}

/* 320px: the pill keeps its 44px target, the words around it give way */
@media(max-width:359px){
  .livebar{gap:9px;padding:0 10px}
  .livebar .lb-go{padding:0 12px;font-size:.78rem}
  .livebar .lb-count{display:none}
}

/* ── the home feed's LIVE card ──────────────────────────────────────────
   Two rows on a phone (identity + words, then a full-width button) so the
   button is never squeezed into something you have to aim at; three columns
   from the point there is room for it. */
#live-hero.live-strip{
  display:grid;grid-template-columns:46px minmax(0,1fr);gap:10px 12px;align-items:center;
  box-sizing:border-box;width:100%;margin:0 0 16px;padding:14px;
  text-decoration:none;color:var(--txt);
  background:linear-gradient(100deg,var(--pink-a14),transparent 60%),var(--panel);
  border:1px solid var(--pink-a25);border-radius:var(--radius);
  box-shadow:var(--e1);
  animation:lsx-in .45s var(--ease-out) both;
}
#live-hero.live-strip:hover{border-color:var(--pink);box-shadow:var(--e2)}

.lsx-ring{
  position:relative;flex:none;width:46px;height:46px;border-radius:50%;
  display:grid;place-items:center;background:var(--pink);color:#fff;
}
.lsx-ring::after{
  content:'';position:absolute;inset:-5px;border-radius:50%;
  border:2px solid var(--pink);
  animation:lb-ping 2.1s cubic-bezier(.2,.6,.3,1) infinite;
}
.lsx-cam{display:grid;place-items:center}
.lsx-cam svg{width:22px;height:22px}

.lsx-body{min-width:0;display:flex;flex-direction:column;gap:3px}
.lsx-kicker{
  display:flex;align-items:center;gap:7px;
  font-size:.62rem;font-weight:900;letter-spacing:.14em;text-transform:uppercase;
  color:var(--pink);
}
.lsx-dot{
  flex:none;width:7px;height:7px;border-radius:50%;background:var(--pink);
  animation:lsx-blink 1.5s ease-in-out infinite;
}
.lsx-count{
  font-size:.68rem;font-weight:700;letter-spacing:.01em;text-transform:none;color:var(--mut);
}
.lsx-count::before{content:'·';margin-right:6px;opacity:.7}
.lsx-title{
  font-size:1.02rem;font-weight:700;line-height:1.25;color:var(--txt);
  overflow:hidden;text-overflow:ellipsis;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.lsx-blurb{
  font-size:.82rem;line-height:1.45;color:var(--mut);
  overflow:hidden;text-overflow:ellipsis;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.lsx-go{
  grid-column:1/-1;
  display:flex;align-items:center;justify-content:center;gap:8px;
  min-height:44px;box-sizing:border-box;padding:0 18px;
  border-radius:var(--radius-pill);background:var(--pink);color:#fff;
  font-size:.86rem;font-weight:800;
  transition:background var(--dur-2) var(--ease),transform var(--dur-2) var(--ease);
}
#live-hero.live-strip:hover .lsx-go{background:var(--pink-dark)}
#live-hero.live-strip:active{transform:scale(.995)}

@media(min-width:520px){
  #live-hero.live-strip{grid-template-columns:46px minmax(0,1fr) auto;padding:16px}
  .lsx-go{grid-column:auto;justify-self:end;white-space:nowrap}
}

@keyframes lsx-in{from{transform:translateY(-8px);opacity:0}to{transform:none;opacity:1}}
@keyframes lsx-blink{0%,100%{opacity:1}50%{opacity:.25}}

/* The bell's live row goes somewhere now, so it should look like it does. */
.nrow.nr-live.link .nr-kind{color:var(--pink)}

/* Live switched off in the Studio (<html data-live="0">): every way into a live
   disappears — links, the Studio's Live and Recordings tabs, Create's live
   options — rather than leading to a page that no longer exists. */
html[data-live="0"] a[href="/live"],
html[data-live="0"] a[href^="/live/"],
html[data-live="0"] .live-only,
html[data-live="0"] [data-tab="live"],
html[data-live="0"] [data-tab="recordings"],
html[data-live="0"] #tab-live,
html[data-live="0"] #tab-recordings{display:none!important}

/* Studio app: enrolled devices */
.sa-devs{display:flex;flex-direction:column;gap:8px;margin:12px 0}
.sa-dev{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--line,#2c2c33);border-radius:12px}
.sa-dev b{display:block;font-weight:600}
.sa-dev small{display:block;color:var(--mut);font-size:.78rem;margin-top:2px}

/* Live hidden from viewers (<html data-live="host"> is her view of it): the
   Studio keeps every live tool, and says plainly that members cannot see it. */
.live-host-note{display:none}
html[data-live="host"] .live-host-note{display:block;margin:12px 0 16px;padding:12px 14px;border-radius:12px;
  background:var(--warn-bg,#fff4e0);color:var(--warn,#8a5a00);font-size:.9rem;line-height:1.45}
html[data-live="host"] .live-host-note a{color:inherit;text-decoration:underline}
html[data-live="host"] #create-menu .live-only span::after{content:" · not visible to viewers";opacity:.6;font-size:.8em}

/* ── Upload cover picker (segmented Auto / Pick a moment / Upload image) ── */
.up-cover-auto{color:var(--mut);font-size:.82rem;padding:10px 0 4px}
.up-cover-scrub{display:flex;align-items:center;gap:8px;margin-top:10px}
.up-cover-scrub input[type=range]{flex:1;min-width:0}
.up-cover-cands{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin-top:10px}
.up-cover-cands img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:6px;
  border:1px solid var(--line-strong);background:var(--panel2);cursor:pointer}
.up-cover-cands img:hover{outline:2px solid var(--pink);outline-offset:1px}
.up-cover-scrub .btn{flex:0 0 auto}
@media(max-width:560px){
  .up-cover-cands{grid-template-columns:repeat(3,1fr)}
}
#up-cover-upload{height:auto;min-height:64px;display:flex;align-items:center;justify-content:center}
#up-cover-mode .seg-b{min-height:36px;padding:6px 14px;font-size:.78rem;white-space:nowrap}
#up-cover-vid{display:none}

/* ===== landing hero with her photo (no reel clips) =====
   The photo used to be the 512px logo stretched over the whole screen with
   "cover": blurry and blocky on a tablet, her face cut at forehead and chin,
   and JOYCE printed across her mouth. Now the 1024px original is shown no
   larger than it can stay sharp, and the words sit beside it (wide) or below
   her face (phone) — never on it. */
.lp-hero.hero-photo .reel-stage.poster-only{background-color:#0d0d0e;background-repeat:no-repeat}
.lp-hero.hero-photo .reel-stage::after{opacity:.25}
/* side by side only on wide, landscape screens; any portrait screen stacks */
@media (min-width:820px) and (min-aspect-ratio:5/4){
  .lp-hero.hero-photo{align-items:flex-start;text-align:left;padding-left:max(6vw,32px)}
  .lp-hero.hero-photo .reel-stage.poster-only{background-size:auto 100%;background-position:right center}
  .lp-hero.hero-photo .reel-veil{background:linear-gradient(90deg,#0d0d0e 0%,#0d0d0e 34%,
      rgba(13,13,14,.78) 48%,rgba(13,13,14,.18) 68%,rgba(13,13,14,.08) 85%,rgba(13,13,14,.35) 100%),
    linear-gradient(0deg,rgba(13,13,14,.7) 0%,rgba(13,13,14,0) 22%)}
  .lp-hero.hero-photo .hero-inner{max-width:560px}
  .lp-hero.hero-photo .hero-cta{margin-left:0}
}
@media (max-width:819px), (max-aspect-ratio:5/4){
  .lp-hero.hero-photo{justify-content:flex-end;padding-bottom:calc(env(safe-area-inset-bottom) + 64px)}
  .lp-hero.hero-photo .reel-stage.poster-only{background-size:118% auto;background-position:center 56px}
  .lp-hero.hero-photo .reel-veil{background:linear-gradient(180deg,rgba(13,13,14,.55) 0%,
      rgba(13,13,14,0) 16%,rgba(13,13,14,0) 38%,rgba(13,13,14,.85) 58%,#0d0d0e 68%)}
}
