:root{--bg:#0f0f0f;--sf:#1a1a2e;--ac:#fb923c;--tx:#eee;--t2:#999;--t1:#ccc;--gr:#4ade80;--bl:#14b8a6;--pu:#14b8a6;--or:#fb923c;--tv:#14b8a6;--mv:#fb923c;--mu:#15803d;--bk:#fbbf24;--cn:#3b82f6;--th:#a78bfa;--sp:#0ea5e9;--iris:#7c3aed;--iris-rgb:124,58,237;--grad-b:#e94560;--iris-light:#c4b5fd;--iris-mid:#a78bfa;--w4:rgba(255,255,255,.04);--w6:rgba(255,255,255,.06);--w8:rgba(255,255,255,.08);--w10:rgba(255,255,255,.10);--w15:rgba(255,255,255,.15);--ph:#222;--sc:#333;--card-hv:#1e1e3a;--fbar-bg:rgba(15,15,15,.97);--ov-bg:rgba(0,0,0,.85);--ph-grad:linear-gradient(135deg,#1a1a2e,#0f3460);--stat-muted:#b0b0b0;--icon-color:currentColor}
/* Radius scale (B9) — tokens hold exact current values; rare oddballs (2/3/5/7/18px) left as literals */
:root{--radius-xs:4px;--radius-sm:6px;--radius-md:8px;--radius-lg:10px;--radius-xl:12px;--radius-2xl:16px;--radius-3xl:20px;--radius-full:999px}
/* Type scale (B5) — tokens hold exact current values; component-specific outliers (16px+ display sizes) left as literals */
:root{--fs-2xs:9px;--fs-xs:10px;--fs-sm:11px;--fs-base:12px;--fs-md:13px;--fs-lg:14px;--fs-xl:15px}
/* Liquid-glass redesign tokens (redesign/liquid-glass §3.5). New tokens — do NOT reuse --fbar-bg,
   which the existing top bar sets near-opaque (.97). These drive the new bottom nav / giant tabs / top
   bar so the translucent glass look is isolated and tunable from one place. */
:root{--glass-bg:rgba(15,15,15,.72);--glass-bg-nav:rgba(15,15,15,.38);--glass-blur:22px;--glass-sat:180%;--glass-blur-strong:26px;--glass-sat-strong:200%;--glass-border:rgba(255,255,255,.10);--glass-hairline:inset 0 1px 0 rgba(255,255,255,.10);--glass-hairline-strong:inset 0 1px 0 rgba(255,255,255,.14);--glass-shadow:0 8px 30px rgba(0,0,0,.45)}
/* Glass utility classes. .iris-glass = top bar / giant tabs; .iris-glass-strong = floating bottom nav. */
.iris-glass{background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-sat));-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-sat));box-shadow:var(--glass-hairline)}
.iris-glass-strong{background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));box-shadow:var(--glass-shadow),var(--glass-hairline-strong)}
/* Fallback where backdrop-filter is unsupported: lean on a more opaque surface so chrome stays legible. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.iris-glass,.iris-glass-strong{background:var(--sf)}}
*{margin:0;padding:0;box-sizing:border-box}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* html carries the bg too: when an overlay opens, _lockBody sets body{position:fixed},
   and a fixed body stops propagating its background to the canvas — leaving the strip
   Safari's address bar reveals showing the bare (light) canvas. Painting html keeps the
   canvas dark so that gap is seamless (Safari-tab only; PWA was already fine). */
html{background:var(--bg)}
/* Safari-tab only: Up Next becomes a document scroller (position:relative, body scrolls it)
   so Safari collapses its bottom address bar — it only does that for the root scroll, never
   for an inner overflow scroller. The PWA (no address bar) keeps the fixed-overlay path. */
.un-docscroll{position:relative!important;top:0;left:0;height:auto!important;min-height:100lvh;overflow:visible!important;contain:none!important;will-change:auto}
/* Episode panel in doc-scroll: size to content (the fixed-overlay min-height:100vh would
   leave a dark void below the cast, and the doc-scroll bottom would sit in that void). */
.un-docscroll .un-detail{min-height:0!important}
/* The episode cast block needs enough bottom padding to clear the fixed bottom nav in
   doc-scroll mode (62px bar + safe-area). */
.un-docscroll [id^="un-ep-cast-"]{padding-bottom:calc(80px + env(safe-area-inset-bottom))!important;margin-bottom:0!important}
body{background:var(--bg);color:var(--tx);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;padding:0;-webkit-text-size-adjust:100%;text-size-adjust:100%;touch-action:pan-x pan-y}
:focus-visible{outline:2px solid var(--iris-light);outline-offset:2px}
.dash{max-width:1400px;margin:0 auto;padding:0 16px 16px;position:relative;z-index:0}
/* INV-2026-05-15-FBAR-Z150 — z-index 150 (was 100) so .fbar's stacking context sits ABOVE the floating jump pill (z-index 140), letting the user menu dropdown render in front of it */
.fbar{position:sticky;top:0;z-index:150;background:var(--fbar-bg);backdrop-filter:blur(8px);padding:0 max(16px,calc(50% - 684px));display:flex;align-items:stretch;justify-content:space-between;flex-wrap:nowrap;gap:0;margin-bottom:20px;border-bottom:1px solid var(--w6);transition:transform .3s ease;min-height:56px}
.fbar h1{font-size:20px;font-weight:700;display:flex;align-items:center;padding:10px 0;min-width:0;overflow:hidden}.fbar h1 span{color:var(--ac)}
.fctrls{display:flex;align-items:stretch;gap:0;flex-wrap:nowrap;flex:1;min-width:0;justify-content:flex-end}
.fbtn{background:var(--sf);border:1px solid var(--w10);color:var(--tx);border-radius:var(--radius-md);padding:0;font-size:var(--fs-xl);cursor:pointer;-webkit-tap-highlight-color:transparent;min-height:44px;position:relative;overflow:hidden;transition:background .15s,transform .1s}
.fbtn:active{background:var(--sc);transform:scale(.95)}
.fbtn select{background:var(--sf);color:var(--tx);border:none;font-size:var(--fs-xl);cursor:pointer;-webkit-appearance:none;appearance:none;padding:10px 12px;width:100%;height:100%}
.fbtn select option{background:var(--sf);color:var(--tx)}
.hbtn{background:var(--sf);border:1px solid var(--w10);color:var(--tx);border-radius:var(--radius-md);padding:10px 16px;font-size:18px;cursor:pointer;min-height:44px;min-width:48px;display:flex;align-items:center;justify-content:center;line-height:1;-webkit-tap-highlight-color:transparent;transition:background .15s,transform .1s;flex-shrink:0}
.hbtn:active{background:var(--sc);transform:scale(.92)}
/* INV-2026-05-14-D15: persistent pressed/loading state — applied on click, cleared when overlay slide-in starts. Covers the perceived gap between tap and visible animation. */
@keyframes hbtn-pulse{0%,100%{background:rgba(34,197,94,.18)}50%{background:rgba(34,197,94,.35)}}
.hbtn.hbtn-loading{animation:hbtn-pulse 1.1s ease-in-out infinite;color:#fff;transform:scale(.94)}
/* INV-2026-05-15-LIB-MENULOAD — pulsing background on the profile-menu row while a cold-tap library open is waiting for the boot fetch to resolve */
@keyframes um-row-pulse{0%,100%{background:rgba(34,197,94,.10)}50%{background:rgba(34,197,94,.22)}}
#iris-user-menu .um-row-loading{animation:um-row-pulse 1.1s ease-in-out infinite;cursor:wait}
/* INV-2026-05-15-LIB-GRID-MOBILE — Library poster grid: desktop keeps 130px min-track (~9-10 cols at 1400px max). Phones ≤600px shrink to 100px min so iPhone SE/12 mini (375px viewport, ~327px inner after 48px outer padding) reliably renders 3 columns instead of 2. */
.lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:12px}
@media (max-width:600px){.lib-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:10px}}
/* INV-2026-05-13-H2: header modernization — edge-to-edge, borderless icon buttons in iris purple. .hbtn legacy rules above kept for the floating jump-menu button (outside .fctrls). */
.fctrls .hbtn{background:transparent;border:0;border-radius:0;padding:0;min-width:56px;min-height:0;color:var(--iris-mid);position:relative;transition:background .15s ease,color .15s ease}
.fctrls .hbtn:hover{background:rgba(var(--iris-rgb),.10);color:var(--iris-light)}
.fctrls .hbtn:active{background:rgba(var(--iris-rgb),.18);color:#fff;transform:none}
/* Watchlist trigger: green tap highlight (matches the hbtn-loading pulse) instead of the
   shared purple :active above — consistent green feedback for the wait-to-open UX. */
.fctrls .hbtn[aria-label="Watchlist"]:active{background:rgba(34,197,94,.18);color:#fff;transform:none}
.fctrls .hbtn.hbtn-loading{animation:hbtn-pulse 1.1s ease-in-out infinite;color:#fff;transform:none}
.fctrls .hbtn svg{display:block;width:24px;height:24px}
.iris-auth-dot{position:absolute;top:14px;right:14px;width:8px;height:8px;background:#4ade80;border-radius:50%;border:2px solid var(--bg);pointer-events:none}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes pulse{0%{opacity:1}50%{opacity:.5}100%{opacity:1}}
@keyframes wlSaveIn{from{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}
/* Watchlist reorder Save bar: floating liquid-glass pill that sits above the bottom nav, and slides
   DOWN to the nav's spot when the nav hides on scroll (body.iris-hdr-off) so it's never stranded in
   an odd mid-air position. Slides via `bottom` (not transform) to avoid clashing with wlSaveIn. */
.wl-save-bar{position:fixed;left:12px;right:12px;bottom:calc(80px + env(safe-area-inset-bottom));z-index:9991;padding:12px 16px;display:flex;align-items:center;gap:12px;justify-content:center;border-radius:22px;background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));border:1px solid var(--glass-border);box-shadow:var(--glass-shadow),var(--glass-hairline-strong);animation:wlSaveIn .25s ease;transition:bottom .3s cubic-bezier(.22,.61,.36,1)}
body.iris-hdr-off .wl-save-bar{bottom:calc(16px + env(safe-area-inset-bottom))}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.wl-save-bar{background:var(--fbar-bg)}}
/* B7: skeleton shimmer on images still loading. Added by the lazy-load observer when an
   img near the viewport hasn't loaded yet, removed on load/error. The highlight band sweeps
   over the existing --ph base; the loaded bitmap occludes it anyway. */
@keyframes iris-shimmer{0%{background-position:-100% 0}100%{background-position:200% 0}}
@keyframes iris-imgin{from{opacity:.3}to{opacity:1}}
.iris-sk{background-image:linear-gradient(90deg,transparent,var(--w15),transparent)!important;background-size:200% 100%!important;background-repeat:no-repeat!important;animation:iris-shimmer 1.3s linear infinite}
.iris-imgin{animation:iris-imgin .3s ease}
@media(prefers-reduced-motion:reduce){.iris-sk{animation:none;background-image:none!important}.iris-imgin{animation:none}}
.hbtn-spin{animation:spin .8s ease;display:inline-block}
.fbar-pulse{animation:pulse .4s ease}
.sg{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:22px}
.sc{background:var(--sf);border-radius:var(--radius-lg);padding:14px 12px;text-align:center;border:1px solid var(--w6)}
.sc-link{cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s}.sc-link:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.3);border-color:var(--w15)}.sc-link:active{transform:translateY(0)}
.sc .v{font-size:26px;font-weight:800;line-height:1.1}.sc .l{font-size:var(--fs-xs);color:var(--t2);margin-top:3px;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}
.ist{display:flex;gap:10px;margin-bottom:22px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.ist::-webkit-scrollbar{display:none}
.ist:empty{display:none;margin:0}
.ist-card{flex:1 1 0;min-width:210px;background:var(--sf);border-radius:var(--radius-lg);padding:12px 14px;border:1px solid var(--w6);display:flex;align-items:center;gap:10px;animation:iris-istin .35s ease}
.ist-ic{font-size:20px;flex:0 0 auto;line-height:1}
.ist-tx{font-size:var(--fs-base);line-height:1.35;color:var(--tx)}
.ist-tx b{color:var(--ac);font-weight:700}
.ist-tap{cursor:pointer;-webkit-tap-highlight-color:transparent}.ist-tap:active{transform:scale(.97)}
@keyframes iris-istin{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.ist-card{animation:none}}
/* Optimistic-shell skeletons (instant poster+title is real; these stand in for the deferred
   body until the Trakt fetch resolves). Reuse the iris-shimmer sweep. The detail-open slide is
   owned by the overlay (_irisDashOpen slides #iris-search-ov over the dashboard) — no inner
   animation here, which previously made the open flash black before sliding. */
.un-sk-line,.un-sk-block{background:var(--w8);background-image:linear-gradient(90deg,transparent,var(--w15),transparent);background-size:200% 100%;background-repeat:no-repeat;animation:iris-shimmer 1.3s linear infinite}
/* Async detail sections fade in as they fill (cast/streaming/history/box office), so they
   settle gently instead of snapping. :not(:empty) fires the moment content is inserted, and
   self-clears when a section has no content — no stuck shimmer. */
@keyframes un-secin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
#un-mv-cast:not(:empty),#un-mv-jw:not(:empty),#un-mv-history:not(:empty),#un-mv-bo:not(:empty),#un-sh-cast:not(:empty),#un-sh-jw:not(:empty){animation:un-secin .32s ease both}
@media (prefers-reduced-motion:reduce){.un-sk-line,.un-sk-block,#un-mv-cast:not(:empty),#un-mv-jw:not(:empty),#un-mv-history:not(:empty),#un-mv-bo:not(:empty),#un-sh-cast:not(:empty),#un-sh-jw:not(:empty){animation:none}}
/* Detail open: slide the overlay in from the right OVER the on-screen content. Uses a keyframe
   (not the transform/transition dance) so it doesn't depend on reflow timing — the app otherwise
   has off-screen slides disabled (_irisEnterX returns ''). Class is added/removed per open in JS. */
@keyframes iris-detail-slidein{from{transform:translateX(100%)}to{transform:translateX(0)}}
/* Leading-edge shadow makes it read as a panel sliding OVER the content beneath (otherwise it's a
   dark panel over a dark panel — no visible layering). will-change promotes the layer so iOS paints
   its content before the slide instead of a blank leading edge. */
#iris-search-ov.iris-detail-slidein{animation:iris-detail-slidein .26s cubic-bezier(.22,.61,.36,1);box-shadow:-14px 0 28px rgba(0,0,0,.5);will-change:transform}
/* Reverse: slide the detail back out to the right (Back button), revealing the content beneath. */
@keyframes iris-detail-slideout{from{transform:translateX(0)}to{transform:translateX(100%)}}
#iris-search-ov.iris-detail-slideout{animation:iris-detail-slideout .24s cubic-bezier(.4,0,.7,.4) forwards;box-shadow:-14px 0 28px rgba(0,0,0,.5);will-change:transform}
@media (prefers-reduced-motion:reduce){#iris-search-ov.iris-detail-slidein,#iris-search-ov.iris-detail-slideout{animation:none;box-shadow:none}}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:14px}
.fw{grid-column:1/-1}
.cd{background:var(--sf);border-radius:var(--radius-lg);padding:16px;border:1px solid var(--w6);min-height:0;border-left:3px solid transparent;overflow:hidden}
/* flow-root: contain floated header controls (.vtog/.ll-act are taller than the h3 text line).
   An escaped float narrows any following flex/grid container (independent formatting contexts
   must not overlap floats) — this halved the poster grid + lifeline month selector. */
.cd h3{display:flow-root;font-size:var(--fs-lg);font-weight:600;margin-bottom:0;padding-bottom:10px;color:var(--t2);position:relative;z-index:5;background:var(--sf)}
.cd h3 .i{margin-right:6px}
.s-a{border-left-color:#777}.s-s{border-left-color:var(--tv)}.s-m{border-left-color:var(--mv)}
.s-g{border-left-color:#777}.s-n{border-left-color:var(--tv)}.s-u{border-left-color:#777}
.s-t{border-left-color:#777}.s-e{border-left-color:#777}.s-c{border-left-color:#777}.s-con{border-left-color:var(--cn)}.s-th{border-left-color:var(--th)}.s-sp{border-left-color:var(--sp)}
.s-r{border-left-color:#777}.s-gr{border-left-color:var(--bk)}.s-lfm{border-left-color:var(--mu)}.s-hw{border-left-color:#1db954}
.s-bg{border-left-color:#ec4899}.s-gt{border-left-color:#6366f1}
.stb{max-height:300px;overflow-y:auto;overflow-x:hidden;position:relative;margin-top:-1px;z-index:1}.stb table{width:100%;border-collapse:separate;border-spacing:0}.stb th{position:sticky;top:0;background:var(--sf);z-index:10;box-shadow:0 -1px 0 0 var(--sf),inset 0 -1px 0 0 var(--w10);-webkit-transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.stb th:nth-child(n+3),.stb td:nth-child(n+3){text-align:right;width:38px;padding-left:4px}
.ptbl-search{padding:4px 0 2px;position:relative;display:none;background:var(--sf);z-index:5;margin-bottom:0;margin-top:-5px}.ptbl-search.open{display:block}.ptbl-search input{width:100%;box-sizing:border-box;padding:7px 28px 7px 10px;background:var(--bg);border:1px solid var(--w10);border-radius:var(--radius-sm);color:var(--tx);font-size:var(--fs-base);outline:none}.ptbl-search input:focus{border-color:var(--ac)}.ptbl-search input::placeholder{color:var(--t2)}.ptbl-search-x{position:absolute;right:8px;top:50%;transform:translateY(-50%);cursor:pointer;color:var(--t2);font-size:16px;line-height:1;padding:2px}
.ptbl-search-btn{float:right;font-size:var(--fs-md);padding:4px 8px;background:none;border:1px solid var(--w15);color:var(--t2);border-radius:var(--radius-sm);cursor:pointer;margin-right:6px;line-height:1;display:inline-flex;align-items:center;justify-content:center;height:24px;box-sizing:border-box}.ptbl-search-btn:hover,.ptbl-search-btn.active{background:rgba(251,146,60,.12);border-color:rgba(251,146,60,.4);color:var(--ac)}
.ptbl-more td{text-align:center;padding:12px 0;font-size:var(--fs-base);color:var(--t2)}.ptbl-show-all{color:var(--ac);cursor:pointer;font-weight:600}.ptbl-show-all:hover{text-decoration:underline}
#jmp-float{transition:top .3s ease}
.cd ::-webkit-scrollbar{width:5px}.cd ::-webkit-scrollbar-thumb{background:var(--sc);border-radius:3px}.cd ::-webkit-scrollbar-track{background:transparent}
.cd *{scrollbar-width:thin;scrollbar-color:var(--sc) transparent}
table{width:100%;border-collapse:collapse;font-size:var(--fs-base)}
th{text-align:left;padding:7px 8px;color:var(--t2);font-weight:500;border-bottom:1px solid var(--w10);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;background:var(--sf);z-index:10}
td{padding:6px 8px;border-bottom:1px solid var(--w4)}
tr:hover td{background:var(--w4)}
.nm{font-weight:700;font-variant-numeric:tabular-nums}
.nm-a{color:var(--ac)}.nm-b{color:var(--bl)}.nm-p{color:var(--pu)}.nm-o{color:var(--or)}
.badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:var(--fs-xs);font-weight:600}
.b-m{background:rgba(251,146,60,.15);color:var(--mv)}.b-e{background:rgba(20,184,166,.15);color:var(--tv)}.b-c{background:rgba(59,130,246,.15);color:var(--cn)}.b-th{background:rgba(167,139,250,.15);color:var(--th)}.b-bk{background:rgba(251,191,36,.15);color:var(--bk)}.b-pc{background:rgba(239,68,68,.15);color:#ef4444}.b-wk{background:rgba(29,185,84,.15);color:#1db954}.b-sp{background:rgba(14,165,233,.15);color:#0ea5e9}.b-bg{background:rgba(236,72,153,.15);color:#ec4899}.b-gt{background:rgba(99,102,241,.15);color:#6366f1}
.pr{cursor:pointer}.pr:hover td{background:var(--w4)}
.iris-rt-row{cursor:pointer}.iris-rt-row:hover td{background:var(--w4)}
.fd-chip{display:block;width:100%;padding:10px 12px;margin:3px 0;border:1px solid var(--w8);border-radius:var(--radius-lg);background:var(--w4);color:var(--t2);font-size:var(--fs-md);cursor:pointer;text-align:left;transition:background-color .15s,color .15s,border-color .15s;-webkit-tap-highlight-color:transparent}
.fd-chip.fd-on{background:rgba(var(--iris-rgb),.2);border-color:rgba(var(--iris-rgb),.5);color:#fff;font-weight:600}
.fd-chip:active{transform:scale(.97)}
.fd-yr{text-align:center;padding:10px 8px;font-variant-numeric:tabular-nums}
@media(min-width:768px){#filter-dialog.fd-open{display:flex;align-items:center;justify-content:center}#filter-inner{height:auto !important;max-height:80vh;border-radius:var(--radius-2xl);background:var(--bg);border:1px solid var(--w10);box-shadow:0 20px 60px rgba(0,0,0,.5)}}
.pn{display:flex;align-items:center;gap:10px}
.hs{width:44px;height:44px;border-radius:50%;object-fit:cover;background:var(--ph);flex-shrink:0}
.hp{width:44px;height:44px;border-radius:50%;background:var(--ph-grad);display:flex;align-items:center;justify-content:center;font-size:var(--fs-lg);color:var(--t2);font-weight:700;flex-shrink:0}
.poster-item{text-align:center;flex-shrink:0;width:100px;transition:transform .83s ease,opacity .5s ease}
.poster-item img{width:100px;height:150px;object-fit:cover;border-radius:var(--radius-sm);background:var(--ph)}
.poster-item span{display:block;font-size:var(--fs-xs);color:var(--t2);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.poster-ph{width:100px;height:150px}
.bk-cover,.al-cover{cursor:zoom-in}
.cover-grid{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}.cover-grid .gi{text-align:center;width:100px;flex-shrink:0;transition:transform .6s ease,opacity .4s ease}.cover-grid .gi img{width:100px;height:150px;object-fit:cover;border-radius:var(--radius-sm);background:var(--ph)}.cover-grid .gi .bk-img{height:150px}.cover-grid .gi span{display:block;font-size:var(--fs-xs);color:var(--t2);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cover-grid .gi .val{color:#fbbf24;font-weight:600;font-size:var(--fs-xs)}.cover-grid .gi .al-cover{height:100px}
.dr td{padding:4px 8px;background:rgba(15,52,96,.15)!important}
.dr table{font-size:var(--fs-sm)}.dr table td{padding:3px 6px;border:none}
.vtog{display:inline-flex;background:var(--w6);border-radius:var(--radius-md);padding:3px;gap:4px;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.vtog::-webkit-scrollbar{display:none}
.vb{background:none;border:none;color:var(--t2);border-radius:var(--radius-sm);padding:3px 9px;font-size:var(--fs-xs);font-weight:600;cursor:pointer;white-space:nowrap;min-height:24px;transition:background .15s,color .15s;-webkit-tap-highlight-color:transparent}
.vb:active{background:var(--w10)}
.vb-on{background:var(--iris);color:#fff;font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.ll-act{font-size:var(--fs-base);font-weight:600;background:linear-gradient(rgba(var(--iris-rgb),.22),rgba(var(--iris-rgb),.22)),var(--glass-bg);backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-sat));-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-sat));border:1px solid rgba(var(--iris-rgb),.42);box-shadow:var(--glass-shadow),var(--glass-hairline-strong);color:var(--tx);border-radius:var(--radius-xl);padding:7px 13px;cursor:pointer;min-height:34px;display:inline-flex;align-items:center;gap:6px;-webkit-tap-highlight-color:transparent;transition:transform .15s,box-shadow .15s}
.ll-act:active{transform:scale(.95)}
.grid-expand{display:block;margin:12px auto 0;padding:5px 20px;border:1px solid var(--w10);border-radius:var(--radius-2xl);background:var(--w4);color:var(--t2);font-size:var(--fs-sm);cursor:pointer;transition:all .2s ease;font-family:inherit}
.grid-expand:hover{background:var(--w8);color:var(--tx)}
.chart-detail{background:rgba(15,52,96,.2);border-radius:var(--radius-md);padding:10px;margin-top:8px;max-height:200px;overflow-y:auto;font-size:var(--fs-base)}
.chart-detail .cd-item{padding:3px 0;border-bottom:1px solid var(--w4);display:flex;justify-content:space-between}
.chart-detail .cd-item:last-child{border:none}
.chart-detail .cd-close{float:right;cursor:pointer;color:var(--t2);font-size:var(--fs-lg)}
.chart-detail.ll-detail .cd-item{justify-content:flex-start;gap:6px}
#crw-grid{column-count:2;column-gap:20px}.crw-role{break-inside:avoid;margin-bottom:10px}.crw-role h4{font-size:var(--fs-sm);color:var(--t2);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px;font-weight:500}.crw-list{display:flex;flex-direction:column}.crw-item{font-size:var(--fs-base);border-bottom:1px solid var(--w4)}.crw-item .crw-row{display:flex;justify-content:space-between;align-items:center;padding:4px 0;-webkit-tap-highlight-color:transparent}.crw-item .crw-row.crw-has-titles{cursor:pointer}.crw-item .crw-row.crw-has-titles:active{background:var(--w4)}.crw-item .crw-n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.crw-item .crw-c{color:var(--t2);font-weight:600;font-variant-numeric:tabular-nums;margin-left:6px;flex-shrink:0}.crw-titles{padding:2px 0 6px 8px;display:none}.crw-titles.open{display:block}.crw-titles div{font-size:var(--fs-sm);color:var(--t2);padding:2px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.status{text-align:center;padding:20px;color:var(--t2);font-size:var(--fs-sm);border-top:1px solid var(--w4);margin-top:20px}
.status span{margin:0 10px}
.ds-summary{cursor:pointer;user-select:none}
.ds-summary:hover{color:var(--t1)}
.ds-panel{margin:14px auto 0;max-width:900px;padding:14px 18px;background:var(--w4);border:1px solid var(--w6);border-radius:var(--radius-md);font-size:var(--fs-base);color:var(--t2);text-align:left}
.ds-panel h4{margin:0 0 10px;font-size:var(--fs-md);color:var(--t1);font-weight:500;display:flex;justify-content:space-between;align-items:center}
.ds-panel h4 .ds-close{cursor:pointer;color:var(--t2);font-size:var(--fs-lg);padding:0 6px}
.ds-row{display:grid;grid-template-columns:14px 1fr auto auto;gap:10px;padding:4px 0;align-items:center;border-bottom:1px solid var(--w4)}
.ds-row:last-child{border-bottom:0}
.ds-dot{width:8px;height:8px;border-radius:50%}
.ds-dot.ok{background:#22c55e}
.ds-dot.stale{background:#fbbf24}
.ds-dot.fail{background:#ef4444}
.ds-dot.unknown{background:#64748b}
.ds-name{color:var(--t1);font-weight:500}
.ds-age{color:var(--t2);font-size:var(--fs-sm);white-space:nowrap}
.ds-error{grid-column:1/-1;color:#ef4444;font-size:var(--fs-xs);margin-top:4px;padding-left:24px;font-family:monospace;opacity:.8;white-space:pre-wrap;word-break:break-word;max-height:80px;overflow:auto}
.ll-day{margin-bottom:24px}.ll-day-hdr{font-size:var(--fs-md);font-weight:700;color:var(--t2);padding:8px 0 8px 54px;border-bottom:1px solid var(--w6);margin-bottom:0;position:sticky;top:56px;background:var(--bg);z-index:2}
.ll-day-evts{position:relative;padding:0}
.ll-evt{display:flex;gap:14px;position:relative}
.ll-evt::after{content:'';position:absolute;left:14px;top:0;bottom:-1px;width:10px;background:var(--mc,transparent);z-index:0}
.ll-day-evts>.ll-evt:first-child::after{top:19px}
.ll-day-evts>.ll-evt:last-child::after{bottom:calc(100% - 19px)}
.ll-metro-dot{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;position:relative;z-index:2}
.ll-evt-body{flex:1;min-width:0;padding:8px 0 12px}
.ll-evt-body .ll-name{font-size:var(--fs-md);line-height:1.4;color:var(--tx)}
.ll-evt-body .ll-time{font-size:var(--fs-sm);color:var(--t2);margin-top:1px;font-variant-numeric:tabular-nums}
.ll-sc-act{cursor:pointer}
.ll-sc-act:hover .ll-name{color:var(--sp)}
.ll-summary{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0 4px 54px}
.ll-pill{font-size:var(--fs-sm);padding:4px 10px;border-radius:var(--radius-xl);font-weight:600}
.un-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;padding:16px;max-width:1200px;margin:0 auto}
.un-card{background:var(--sf);border-radius:var(--radius-lg);border:1px solid var(--w6);overflow:hidden;display:flex;gap:10px;padding:0;padding-right:56px;position:relative;transition:background .2s;cursor:pointer}
.un-card:hover{background:var(--card-hv)}
.un-poster{width:60px;align-self:stretch;min-height:90px;border-radius:0;object-fit:cover;background:var(--ph);flex-shrink:0}
.un-poster-ph{width:60px;align-self:stretch;min-height:90px;border-radius:0;background:var(--ph-grad);display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--t2);flex-shrink:0}
.un-info{flex:1;min-width:0;display:flex;flex-direction:column;padding:8px 0}
.un-show{font-weight:700;font-size:var(--fs-xl);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-ep{font-size:var(--fs-md);color:var(--t1);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-meta{display:flex;gap:6px;align-items:center;margin-top:4px;font-size:var(--fs-sm);color:var(--t2)}
.un-stream{display:flex;gap:4px;align-items:center;flex-shrink:0}
.un-stream img{width:18px;height:18px;border-radius:var(--radius-xs)}

.un-prog-wrap{margin-top:auto}
.un-prog{height:22px;background:var(--w6);border-radius:5px;overflow:hidden;border:1px solid var(--w8);position:relative}
.un-prog-bar{height:100%;background:var(--tv);opacity:.6;border-radius:var(--radius-xs);transition:width .3s}
.un-prog-text{position:absolute;top:0;left:0;right:0;height:100%;display:flex;align-items:center;justify-content:space-between;padding:0 8px;font-size:var(--fs-md);color:var(--tx);font-weight:600;pointer-events:none}
/* INV-2026-05-15-SHOW-PROG-LG — taller, more-padded progress bar variant used on the show detail page so it visually balances the wider Watchlist/Library buttons below */
.un-prog-lg{height:32px;border-radius:var(--radius-md)}
.un-prog-lg .un-prog-bar{border-radius:7px}
.un-prog-lg .un-prog-text{padding:0 14px;font-size:var(--fs-base)}
.un-new{position:absolute;top:0;left:0;background:#ef4444;color:#fff;font-size:var(--fs-2xs);font-weight:700;padding:3px 7px;border-radius:0 0 6px 0;text-transform:uppercase;letter-spacing:.5px;z-index:1}
.un-rewatch{position:absolute;top:0;left:0;background:var(--iris,#7c3aed);color:#fff;font-size:var(--fs-2xs);font-weight:700;padding:3px 7px;border-radius:0 0 6px 0;text-transform:uppercase;letter-spacing:.5px;z-index:1}
.un-section{padding:8px 16px;max-width:1200px;margin:0 auto;font-size:var(--fs-base);font-weight:600;color:var(--t2);text-transform:uppercase;letter-spacing:.5px}
/* Detail views (movie/show/season) render in a 600px column. Constrain the section labels and
   the Where-to-Watch row to match, so on desktop they don't stick out left of the centered header. */
#un-search-results.un-detail-mode .un-section{max-width:600px}
#un-search-results.un-detail-mode #un-mv-jw,
#un-search-results.un-detail-mode #un-sh-jw{max-width:600px;margin-left:auto;margin-right:auto}
.un-sec-wrap>.un-section{position:sticky;top:var(--un-hdr-h,69px);z-index:50;padding:8px 16px 4px;text-align:center;background:transparent;font-size:0;line-height:0;pointer-events:none}
/* When the overlay header scrolls away, the section pills pin to the very top (no header to sit
   below) instead of floating var(--un-hdr-h) down and overlapping cards. */
body.iris-hdr-off .un-sec-wrap>.un-section{top:0}
.un-pill{display:inline-block;padding:5px 14px;border-radius:var(--radius-3xl);font-size:var(--fs-sm);font-weight:600;text-transform:uppercase;letter-spacing:.5px;line-height:1.3;pointer-events:auto;cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent}
.un-pill-recent{background:#fb923c;color:#111;border:none}
.un-pill-active{background:#14b8a6;color:#111;border:none}
.un-pill-hold{background:#aaa;color:#111;border:none}
.un-pill-sort{background:#818cf8;color:#111;border:none}
.un-watch-btn{position:absolute;top:0;right:0;width:48px;height:100%;border-radius:0 10px 10px 0;background:var(--sf);border:none;border-left:1px solid var(--w4);color:var(--tv);font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .15s,color .15s,border-color .15s;-webkit-tap-highlight-color:transparent}
.un-watch-btn:active{background:var(--tv);color:#fff}
.un-del-btn{position:absolute;top:0;right:0;width:48px;height:100%;border-radius:0 10px 10px 0;background:rgba(239,68,68,.04);border:none;border-left:1px solid var(--w4);color:#ef4444;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .15s,color .15s,border-color .15s;-webkit-tap-highlight-color:transparent}
.un-del-btn:active{background:#ef4444;color:#fff}
.un-del-btn:hover{background:#ef4444;color:#fff}
.un-detail{background:var(--sf);border-radius:var(--radius-xl);border:1px solid var(--w8);padding:20px;max-width:500px;margin:0 auto}
.un-carousel-wrap{overflow:hidden;max-width:500px;margin:20px auto;will-change:transform,opacity}
.un-carousel{display:flex;width:300%;transform:translateX(-33.333%);transition:none;will-change:transform}
.un-carousel.animating{transition:transform .3s ease}
.un-carousel-panel{width:33.333%;flex-shrink:0;padding:0 12px;box-sizing:border-box}
.un-detail img{width:100%;border-radius:var(--radius-md);margin-bottom:12px;max-height:280px;object-fit:cover}
/* Search feature styles */
.un-search-input{width:100%;padding:10px 14px;background:var(--w6);border:1px solid var(--w10);border-radius:var(--radius-lg);color:var(--tx);font-size:var(--fs-xl);outline:none;box-sizing:border-box;-webkit-appearance:none}
.un-search-input:focus{border-color:var(--tv);background:var(--w8)}
.un-search-input::placeholder{color:var(--t2)}
.iris-s-field{display:flex;align-items:center}
.iris-s-field .un-search-input{flex:1;min-width:0;width:auto}
.iris-s-mag,.iris-s-home{display:none}
.un-sr{padding:8px 16px;max-width:600px;margin:0 auto}
.un-sr-item{display:flex;gap:12px;padding:12px;background:var(--sf);border-radius:var(--radius-lg);border:1px solid var(--w6);margin-bottom:8px;cursor:pointer;transition:background .15s;align-items:center}
.un-sr-item:active{background:var(--card-hv)}
.un-sr-poster{width:50px;height:75px;border-radius:var(--radius-sm);object-fit:cover;background:var(--ph);flex-shrink:0}
.un-sr-poster-ph{width:50px;height:75px;border-radius:var(--radius-sm);background:var(--ph-grad);display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--t2);flex-shrink:0}
.un-sr-info{flex:1;min-width:0}
.un-sr-title{font-weight:700;font-size:var(--fs-xl);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-sr-meta{font-size:var(--fs-base);color:var(--t2);margin-top:4px}
.un-sr-badge{display:inline-block;padding:2px 8px;border-radius:var(--radius-xs);font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.un-sr-badge-movie{background:rgba(251,146,60,.15);color:#fb923c}
.un-sr-badge-show{background:rgba(20,184,166,.15);color:#14b8a6}
.un-sr-badge-person{background:rgba(167,139,250,.15);color:#a78bfa}
.un-sr-arrow{color:var(--t2);font-size:18px;flex-shrink:0}
/* Show page styles */
.un-show-header{padding:16px;max-width:600px;margin:0 auto;text-align:center}
.un-show-poster{width:160px;height:240px;border-radius:var(--radius-lg);object-fit:cover;margin:0 auto 16px;display:block;box-shadow:0 4px 20px rgba(0,0,0,.4)}
.un-show-title{font-size:22px;font-weight:700;margin-bottom:4px}
.un-show-meta{font-size:var(--fs-md);color:var(--t2);margin-bottom:12px}
.un-show-overview{font-size:var(--fs-md);color:var(--t2);line-height:1.6;text-align:left;max-height:80px;overflow:hidden;position:relative;transition:max-height .3s}
.un-show-overview.expanded{max-height:none}
.un-show-more{font-size:var(--fs-base);color:var(--tv);cursor:pointer;margin-top:4px;text-align:left}
.un-season-item{display:flex;gap:12px;padding:14px 16px;background:var(--sf);border-radius:var(--radius-lg);border:1px solid var(--w6);margin-bottom:8px;cursor:pointer;transition:background .15s;align-items:center}
.un-season-item:active{background:var(--card-hv)}
.un-season-num{width:44px;height:44px;border-radius:var(--radius-md);background:rgba(20,184,166,.1);color:var(--tv);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;flex-shrink:0}
.un-season-info{flex:1;min-width:0}
.un-season-title{font-weight:600;font-size:var(--fs-lg)}
.un-season-count{font-size:var(--fs-base);color:var(--t2);margin-top:2px}
.un-season-poster{width:44px;height:66px;border-radius:var(--radius-sm);overflow:hidden;flex-shrink:0}
.un-season-poster img{width:100%;height:100%;object-fit:cover}
.un-season-prog{width:40px;height:40px;position:relative;flex-shrink:0}
/* Episode list styles */
.un-ep-item{display:flex;gap:10px;padding:12px;background:var(--sf);border-radius:var(--radius-lg);border:1px solid var(--w6);margin-bottom:6px;align-items:center;position:relative;transition:background .15s;cursor:pointer;-webkit-tap-highlight-color:transparent}
.un-ep-item:active{background:var(--card-hv)}
.un-ep-num{width:32px;text-align:center;font-size:var(--fs-md);color:var(--t2);flex-shrink:0;font-weight:600}
.un-ep-still{width:80px;height:45px;border-radius:var(--radius-sm);object-fit:cover;background:var(--ph);flex-shrink:0}
.un-ep-still-ph{width:80px;height:45px;border-radius:var(--radius-sm);background:var(--ph-grad);flex-shrink:0}
.un-ep-info{flex:1;min-width:0}
.un-ep-title{font-weight:600;font-size:var(--fs-md);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-ep-meta{font-size:var(--fs-sm);color:var(--t2);margin-top:2px}
.un-ep-watch{width:40px;height:40px;border-radius:10px;border:2px solid #7c3aed;background:var(--bg);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .35s ease,box-shadow .35s ease}
.un-ep-watch.watched{background:#7c3aed;box-shadow:0 3px 12px rgba(124,58,237,.35)}
.un-ep-watch:active:not(.watched){background:rgba(124,58,237,.15)}
/* Movie detail styles */
.un-movie-detail{padding:16px;max-width:600px;margin:0 auto}
.un-movie-poster{width:200px;height:300px;border-radius:var(--radius-lg);object-fit:cover;margin:0 auto 16px;display:block;box-shadow:0 4px 20px rgba(0,0,0,.4)}
.un-movie-title{font-size:22px;font-weight:700;text-align:center;margin-bottom:4px}
.un-movie-meta{font-size:var(--fs-md);color:var(--t2);text-align:center;margin-bottom:6px}
.un-movie-overview{font-size:var(--fs-md);color:var(--t2);line-height:1.6;margin-bottom:20px}
.un-movie-watch-btn{width:100%;padding:16px;background:var(--tv);color:#fff;border:none;border-radius:var(--radius-xl);font-size:16px;font-weight:700;cursor:pointer;transition:opacity .15s}
.un-movie-watch-btn:active{opacity:.7}
.un-movie-watch-btn:disabled{opacity:.5;cursor:default}
/* Streaming services */
.un-stream-section{padding:0 16px;max-width:600px;margin:0 auto 16px}
.un-stream-row{display:flex;gap:10px;align-items:center;padding:10px 12px;background:var(--sf);border-radius:var(--radius-lg);border:1px solid var(--w6);margin-bottom:6px}
.un-stream-icon{width:36px;height:36px;border-radius:var(--radius-md);flex-shrink:0}
.un-stream-name{font-size:var(--fs-lg);font-weight:600;flex:1;min-width:0}
.un-stream-type{font-size:var(--fs-sm);color:var(--t2);padding:3px 8px;border-radius:var(--radius-xs);background:var(--w6)}
/* Star rating component — community + user */
.iris-stars{display:inline-flex;align-items:center;gap:1px;vertical-align:middle;line-height:1}
.iris-stars .iris-star{position:relative;display:inline-block;width:16px;height:16px;font-size:16px;color:#374151;line-height:1}
.iris-stars .iris-star-fill{position:absolute;top:0;left:0;overflow:hidden;color:#fbbf24;white-space:nowrap}
.iris-stars .iris-star-empty{color:#374151}
.iris-stars-lg .iris-star{width:20px;height:20px;font-size:20px}
.iris-stars-val{font-size:var(--fs-base);color:var(--t2);margin-left:4px;font-weight:600}
/* User rating widget */
.iris-rate{display:flex;align-items:center;gap:2px;margin:10px auto;justify-content:center;user-select:none;-webkit-user-select:none;touch-action:none;position:relative;width:fit-content}
.iris-rate-star{position:relative;width:44px;height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer}
.iris-rate-star .iris-rs-glyph{font-size:32px;color:#374151;pointer-events:none;position:relative;z-index:1;line-height:1;transition:color .1s}
.iris-rate-star .iris-rs-zone{position:absolute;top:0;height:100%;z-index:2}
.iris-rate-star .iris-rs-zone-l{left:0;width:50%}
.iris-rate-star .iris-rs-zone-r{right:0;width:50%}
.iris-rate-clear{position:absolute;left:100%;top:50%;transform:translateY(-50%);margin-left:4px;width:24px;height:40px;display:flex;align-items:center;justify-content:center;color:var(--t2);font-size:var(--fs-lg);cursor:pointer;border-radius:var(--radius-xs);transition:opacity .15s}
.iris-rate-clear:hover{opacity:1;background:var(--w6)}
/* Multi-source rating badges */
.iris-rb{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:4px}
.iris-rb-pill{display:inline-flex;align-items:center;gap:3px;font-size:var(--fs-base);font-weight:600;line-height:20px;height:20px;white-space:nowrap}
.iris-rb-trakt{color:#fbbf24}
.iris-rb-imdb{color:#f5c518}
.iris-rb-rt{color:#fa320a}
.iris-rb-rotten{color:var(--t2)}
.iris-rb-aud{color:#a78bfa}
.iris-rb-aud-low{color:var(--t2)}
/* Cast section */
.un-cast-section{padding:0 16px;max-width:600px;margin:0 auto 16px}
.un-cast-scroll{display:flex;gap:10px;overflow-x:auto;padding:4px 0 8px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.un-cast-scroll::-webkit-scrollbar{display:none}
.un-cast-card{flex-shrink:0;width:80px;text-align:center;cursor:pointer;-webkit-tap-highlight-color:transparent}
.un-cast-card:active{opacity:.7}
.un-cast-photo{width:64px;height:64px;border-radius:50%;object-fit:cover;background:var(--ph);margin:0 auto 6px;display:block}
.un-cast-photo-ph{width:64px;height:64px;border-radius:50%;background:var(--ph-grad);margin:0 auto 6px;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--t2)}
.un-cast-name{font-size:var(--fs-sm);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-cast-role{font-size:var(--fs-xs);color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Person overlay (slides up in-context, above episode detail) */
#un-person-fg{position:fixed;top:0;left:0;right:0;bottom:0;z-index:9200;background:var(--bg);overflow-y:auto;-webkit-overflow-scrolling:touch;will-change:transform;padding-bottom:calc(96px + env(safe-area-inset-bottom))}
/* Person record header: floating glass back button + centered glass title pill — matches the
   show/movie detail header (see #iris-search-ov.iris-s-detail .iris-s-pillrow). Transparent bar so
   content scrolls under the floating glass chrome. */
.un-person-fg-hdr{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:calc(10px + env(safe-area-inset-top)) 14px 10px}
.un-person-fg-back{position:absolute;left:14px;top:calc(10px + env(safe-area-inset-top));width:44px;height:44px;min-width:44px;min-height:44px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:50%;border:1px solid var(--glass-border);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));box-shadow:var(--glass-shadow),var(--glass-hairline-strong);color:var(--tx);cursor:pointer;-webkit-tap-highlight-color:transparent}
.un-person-fg-back:active{transform:scale(.94)}
.un-person-fg-title{flex:0 1 auto;max-width:64%;margin:0;padding:11px 18px;border-radius:22px;border:1px solid var(--glass-border);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));box-shadow:var(--glass-shadow),var(--glass-hairline-strong);font-size:15px;font-weight:700;color:var(--tx);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
/* Person detail page */
.un-person-hero{text-align:center;padding:24px 16px 8px;max-width:600px;margin:0 auto}
.un-person-photo{width:160px;height:160px;border-radius:50%;object-fit:cover;background:var(--ph);margin:0 auto 16px;display:block;box-shadow:0 4px 20px rgba(0,0,0,.4)}
.un-person-photo-ph{width:160px;height:160px;border-radius:50%;background:var(--ph-grad);margin:0 auto 16px;display:flex;align-items:center;justify-content:center;font-size:48px;color:var(--t2)}
.un-person-name{font-size:22px;font-weight:700;margin-bottom:4px}
.un-person-meta{font-size:var(--fs-md);color:var(--t2);margin-bottom:4px}
.un-person-bio{font-size:var(--fs-md);color:var(--t2);line-height:1.5;margin:12px auto 0;max-width:540px;text-align:left;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.un-person-bio.expanded{-webkit-line-clamp:unset}
.un-person-bio-toggle{font-size:var(--fs-base);color:var(--ac);cursor:pointer;margin-top:6px;text-align:center}
.un-person-section{padding:0 16px;max-width:600px;margin:16px auto 0}
.un-person-filmog-head{display:flex;align-items:center;gap:8px;padding:0 16px;max-width:600px;margin:20px auto 0}
.un-person-filmog-label{font-size:var(--fs-lg);font-weight:700;flex:1}
.un-person-section-title{font-size:var(--fs-lg);font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:8px}
.un-person-section-count{font-size:var(--fs-base);color:var(--t2);font-weight:400}
.un-person-poster-scroll{display:flex;gap:10px;overflow-x:auto;padding:4px 0 12px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.un-person-poster-scroll::-webkit-scrollbar{display:none}
.un-person-poster-card{flex-shrink:0;width:100px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.un-person-poster-card:active{opacity:.7}
.un-person-poster-img{width:100px;height:150px;border-radius:var(--radius-md);object-fit:cover;background:var(--ph);display:block}
.un-person-poster-ph{width:100px;height:150px;border-radius:var(--radius-md);background:var(--ph-grad);display:flex;align-items:center;justify-content:center;font-size:28px;color:var(--t2)}
.un-person-poster-title{font-size:var(--fs-sm);font-weight:600;margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-person-poster-sub{font-size:var(--fs-xs);color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-person-poster-badge{position:absolute;top:4px;right:4px;background:rgba(20,184,166,.85);color:#fff;font-size:var(--fs-2xs);font-weight:700;padding:2px 5px;border-radius:var(--radius-xs)}
.un-person-filmog-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--w6);cursor:pointer;-webkit-tap-highlight-color:transparent}
.un-person-filmog-row:active{opacity:.7}
.un-person-filmog-poster{width:44px;height:66px;border-radius:var(--radius-sm);object-fit:cover;background:var(--ph);flex-shrink:0}
.un-person-filmog-poster-ph{width:44px;height:66px;border-radius:var(--radius-sm);background:var(--ph-grad);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--t2)}
.un-person-filmog-info{flex:1;min-width:0}
.un-person-filmog-title{font-size:var(--fs-md);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-person-filmog-detail{font-size:var(--fs-sm);color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-person-filmog-watched{color:#14b8a6;font-size:var(--fs-sm);font-weight:600;flex-shrink:0;margin-left:auto}
.un-person-filmog-toggle{text-align:center;padding:12px;font-size:var(--fs-md);color:var(--ac);cursor:pointer}
/* Loading spinner */
.un-loading{text-align:center;padding:40px;color:var(--t2);font-size:var(--fs-lg)}
.un-empty{text-align:center;padding:40px;color:var(--t2);font-size:var(--fs-lg)}
/* Back nav button */
.un-back{background:none;border:1px solid var(--w10);color:var(--t2);border-radius:var(--radius-md);padding:8px 14px;font-size:var(--fs-lg);cursor:pointer;min-height:44px;min-width:44px;display:flex;align-items:center;justify-content:center}
/* Watchlist styles */
.un-wl-toggle{display:flex;gap:8px;padding:10px 16px;max-width:600px;margin:0 auto;align-items:stretch}
/* Movies/Shows segmented toggle (matches the filter sheet's segmented controls) */
.wl-seg{flex:1;display:flex;background:var(--w6);border-radius:var(--radius-lg);padding:3px;gap:3px}
.wl-seg button{flex:1;border:none;background:none;color:var(--t2);font-size:var(--fs-md);font-weight:600;padding:8px 6px;border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;display:flex;align-items:center;justify-content:center;gap:5px;transition:background .15s,color .15s;-webkit-tap-highlight-color:transparent}
.wl-seg button.on{font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.wl-seg-c{opacity:.6;font-weight:600}
/* INV-2026-06-04-FLT — shared combined Filter+Sort popover (Library + Watchlist) */
.flt-wrap{position:relative}
.flt-btn{padding:5px 9px;border-radius:var(--radius-md);cursor:pointer;border:1px solid var(--w15);background:var(--w6);color:var(--t1);white-space:nowrap;display:flex;align-items:center;gap:5px}
.flt-btn svg{width:19px;height:19px}
.flt-btn:active{background:var(--w10)}
.flt-btn.has-active{border-color:var(--tv);color:var(--tv);background:rgba(20,184,166,.12)}
.flt-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--tv);color:#fff;font-size:var(--fs-sm);font-weight:700}
/* Bottom-sheet filter panel (floating rounded card) */
.flt-scrim{position:fixed;inset:0;background:var(--ov-bg);backdrop-filter:blur(2px);z-index:9995;opacity:0;pointer-events:none;transition:opacity .22s ease;touch-action:none}
.flt-scrim.open{opacity:1;pointer-events:auto}
.flt-sheet{position:fixed;left:10px;right:10px;bottom:max(10px,env(safe-area-inset-bottom));margin:0 auto;width:auto;max-width:460px;background:var(--sf);border-radius:var(--radius-3xl);box-shadow:0 12px 44px rgba(0,0,0,.55);z-index:9996;display:none;flex-direction:column;max-height:82vh;overflow:hidden;transition:transform .28s cubic-bezier(.32,.72,0,1);overscroll-behavior:contain}
.flt-sheet.open{display:flex;transform:translateY(0)}
.flt-sheet-top{flex-shrink:0;padding-top:2px;touch-action:none;cursor:grab}
.flt-sheet-top *{touch-action:none}
.flt-grab{display:flex;align-items:center;justify-content:center;height:28px;flex-shrink:0;cursor:grab}
.flt-grab span{display:block;width:40px;height:5px;border-radius:3px;background:var(--w15);pointer-events:none}
.flt-sheet-h{display:flex;align-items:center;justify-content:space-between;padding:2px 20px 14px;flex-shrink:0}
.flt-sheet-t{font-size:19px;font-weight:800;color:var(--tx);letter-spacing:-.01em}
.flt-sheet-x{background:var(--w8);border:none;color:var(--tx);width:30px;height:30px;border-radius:50%;font-size:15px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.flt-sheet-body{flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding:0 20px 16px}
.flt-sec{margin-bottom:22px}
.flt-sec-h{font-size:12px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--t2);margin:0 0 10px}
/* Segmented control (single-select, 2-3 short options) */
.flt-seg{display:flex;background:var(--w6);border-radius:var(--radius-xl);padding:4px;gap:4px}
.flt-seg-b{flex:1 1 0;min-width:0;border:none;background:none;color:var(--t2);font-size:14px;font-weight:600;padding:11px 6px;border-radius:var(--radius-lg);cursor:pointer;white-space:nowrap;transition:background .15s,color .15s;-webkit-tap-highlight-color:transparent}
.flt-seg-b.on{background:var(--w15);color:var(--tx);font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.22)}
.flt-seg.compact .flt-seg-b{font-size:13px;padding:10px 3px;letter-spacing:-.02em}
/* Chips (multi-select) */
.flt-chips{display:flex;flex-wrap:wrap;gap:8px}
.fc-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.fc-emoji{font-size:14px;line-height:1;flex-shrink:0}
.flt-chip{display:inline-flex;align-items:center;gap:6px;padding:9px 15px;border-radius:var(--radius-full);font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap;border:1px solid var(--w10);background:transparent;color:var(--t1);-webkit-tap-highlight-color:transparent}
.flt-chip.on{border-color:var(--tv);background:rgba(20,184,166,.15);color:var(--tv)}
.flt-chip .c{opacity:.55;margin-left:2px;font-size:12px}
.flt-clear{font-size:14px;font-weight:600;color:var(--t2);cursor:pointer;text-align:center;padding:14px;margin-top:4px;border-top:1px solid var(--w6)}
.flt-clear:active{color:var(--tx)}
.un-wl-list{padding:8px 16px;max-width:600px;margin:0 auto}
.un-wl-card{display:flex;gap:0;padding:0;background:var(--sf);border-radius:var(--radius-xl);border:1px solid var(--w6);margin-bottom:10px;cursor:pointer;transition:background .15s;position:relative;overflow:hidden}
.un-wl-card:active{background:var(--card-hv)}
.un-wl-poster{width:85px;aspect-ratio:185/278;border-radius:0;object-fit:cover;background:var(--ph-grad);flex-shrink:0;align-self:stretch}
.un-wl-poster-ph{width:85px;aspect-ratio:185/278;border-radius:0;background:var(--ph-grad);display:flex;align-items:center;justify-content:center;font-size:22px;color:var(--t2);flex-shrink:0;align-self:stretch}
.un-wl-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;padding:10px 12px}
.un-wl-title{font-weight:700;font-size:var(--fs-xl);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-wl-meta{font-size:var(--fs-base);color:var(--t2);display:flex;align-items:center;justify-content:space-between}
.un-wl-runtime{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:var(--radius-xs);background:var(--w6);font-size:var(--fs-sm);font-weight:600;color:var(--tx);white-space:nowrap}
.un-wl-genres{display:flex;flex-wrap:nowrap;gap:4px;margin-top:1px;overflow:hidden}
.un-wl-jw{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-top:auto}
.un-wl-jw-icons{display:flex;gap:4px;align-items:center}
.un-wl-jw-icon{width:28px;height:28px;border-radius:var(--radius-sm)}
.un-wl-jw-price{font-size:var(--fs-sm);font-weight:600;padding:2px 6px;border-radius:var(--radius-xs);white-space:nowrap}
.un-wl-jw-rent{background:rgba(251,191,36,.12);color:#fbbf24}
.un-wl-jw-buy{background:rgba(34,197,94,.12);color:#22c55e}
.un-wl-jw-free{background:rgba(20,184,166,.12);color:#14b8a6;font-size:var(--fs-sm);font-weight:600;padding:2px 6px;border-radius:var(--radius-xs)}
.un-wl-arrow{color:var(--t2);font-size:18px;flex-shrink:0;align-self:center;padding-right:12px}
.un-wl-source{position:absolute;top:8px;right:8px;font-size:var(--fs-2xs);padding:1px 5px;border-radius:3px;background:var(--w6);color:var(--t2);text-transform:uppercase;letter-spacing:.5px}
.un-wl-count{font-size:var(--fs-base);color:var(--t2);text-align:center;padding:4px 16px}
.un-wl-drag{width:32px;display:flex;align-items:center;justify-content:center;color:var(--t2);font-size:16px;flex-shrink:0;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;letter-spacing:-2px}
.un-wl-drag:active{color:var(--tv)}
.un-wl-ghost{position:fixed!important;left:16px!important;right:16px!important;z-index:10000!important;opacity:.92!important;transform:scale(1.02)!important;box-shadow:0 8px 32px rgba(0,0,0,.5)!important;pointer-events:none!important;transition:none!important;max-width:568px;margin:0 auto;will-change:transform}
.un-wl-card.wl-dropping{opacity:.3;transition:opacity .15s}
.un-wl-drop-bar{height:3px;background:var(--tv);border-radius:2px;margin:-2px 16px 8px;transition:opacity .15s}
.un-wl-sync{font-size:var(--fs-sm);color:var(--t2);text-align:center;padding:2px 0;transition:opacity .3s}
.un-wl-sync.saving{color:#fbbf24}
.un-wl-sync.saved{color:var(--tv)}
.un-cal-wrap{padding:0 16px 80px;max-width:600px;margin:0 auto}
.un-cal-date{position:sticky;top:0;z-index:2;padding:10px 0 6px;margin-top:0;font-size:var(--fs-md);font-weight:700;color:var(--tx);display:flex;align-items:center;gap:8px;background:var(--bg)}
.un-cal-date-today{color:#14b8a6}
.un-cal-date .un-cal-dow{font-weight:400;color:var(--t2);font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.5px}
.un-cal-date .un-cal-count{margin-left:auto;font-size:var(--fs-sm);font-weight:500;color:var(--t2)}
.un-cal-show{display:flex;gap:12px;padding:10px 12px;background:var(--sf);border-radius:var(--radius-xl);border:1px solid var(--w6);margin-bottom:8px;cursor:pointer;transition:background .15s;position:relative}
.un-cal-show:active{background:var(--card-hv)}
.un-cal-poster{width:56px;height:84px;border-radius:var(--radius-md);object-fit:cover;background:var(--ph);flex-shrink:0}
.un-cal-poster-ph{width:56px;height:84px;border-radius:var(--radius-md);background:var(--ph-grad);display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--t2);flex-shrink:0}
.un-cal-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;justify-content:center}
.un-cal-title{font-weight:700;font-size:var(--fs-lg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-cal-ep{font-size:var(--fs-base);color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-cal-ep b{color:var(--tx);font-weight:600}
.un-cal-time{font-size:var(--fs-sm);color:var(--t2);margin-top:1px}
.un-cal-bundle-hdr{display:flex;gap:12px;padding:10px 12px;background:var(--sf);border-radius:var(--radius-xl) var(--radius-xl) 0 0;border:1px solid var(--w6);border-bottom:none;margin-bottom:0;cursor:pointer;transition:background .15s;position:relative}
.un-cal-bundle-hdr:active{background:var(--card-hv)}
.un-cal-bundle-hdr.collapsed{border-radius:var(--radius-xl);border-bottom:1px solid var(--w6);margin-bottom:8px}
.un-cal-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;border-radius:var(--radius-lg);background:rgba(20,184,166,.2);color:#14b8a6;font-size:var(--fs-sm);font-weight:700;padding:0 6px;margin-left:6px}
.un-cal-expand{color:var(--t2);font-size:var(--fs-lg);flex-shrink:0;align-self:center;transition:transform .2s}
.un-cal-expand.open{transform:rotate(180deg)}
.un-cal-bundle-eps{background:var(--sf);border:1px solid var(--w6);border-top:1px solid var(--w4);border-radius:0 0 12px 12px;margin-bottom:8px;overflow:hidden}
.un-cal-ep-row{display:flex;align-items:center;gap:10px;padding:8px 12px 8px 80px;border-top:1px solid var(--w4);cursor:pointer;transition:background .15s}
.un-cal-ep-row:first-child{border-top:none}
.un-cal-ep-row:active{background:var(--card-hv)}
.un-cal-ep-num{font-size:var(--fs-base);font-weight:600;color:var(--tv);white-space:nowrap;min-width:50px}
.un-cal-ep-title{font-size:var(--fs-base);color:var(--tx);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.un-cal-ep-time{font-size:var(--fs-sm);color:var(--t2);flex-shrink:0}
.un-cal-empty{text-align:center;padding:60px 20px;color:var(--t2);font-size:var(--fs-lg)}
.un-cal-loading{text-align:center;padding:20px;color:var(--t2);font-size:var(--fs-md)}
@media(max-width:768px){.un-grid{grid-template-columns:1fr;padding:10px}}
@media(max-width:768px){
.g2,.g3{grid-template-columns:1fr}
.sg{grid-template-columns:repeat(3,1fr)}
body{overflow-x:hidden}
.dash{overflow-x:clip;padding:0 10px 10px}
.cd{padding:12px}
.cd [id$="c"]:not(#mdc):not(#mrc):not(#gr-long):not(#gr-short):not(#gr-pages):not(#gr-rating):not(#gr-high):not(#gr-low){height:260px!important}
.cover-grid .gi{width:60px}.cover-grid .gi img{width:60px;height:90px}.cover-grid .gi .bk-img{height:90px}.cover-grid .gi .al-cover{width:60px;height:60px}.cover-grid .gi span{font-size:8px}
#lfm-albums .cover-grid{gap:0;margin:0 -4px}#lfm-albums .gi{width:calc(100% / 5);min-width:0;max-width:none;padding:0 2px;box-sizing:border-box}#lfm-albums .gi img{border-radius:0;width:100%;height:auto;aspect-ratio:1}#lfm-albums .gi .al-info{display:block;font-size:8px;color:var(--t2);padding:2px 2px 6px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#lfm-albums .gi .al-info .al-val{color:#fb923c;font-weight:600}
.poster-item{width:60px}.poster-item img{width:60px;height:90px}.poster-ph{width:60px;height:90px}.poster-item span{font-size:8px}
.fbar{padding:0 12px}
.fbar h1{display:none}
.fbar .iris-logo-mob{display:flex!important;align-items:center;justify-content:center;padding:0 10px;flex-shrink:0;line-height:0;width:auto;height:auto}
.fbar{gap:0}
.fctrls{gap:0;flex-wrap:nowrap;align-items:stretch;justify-content:stretch}
#filter-btn{flex:1}
.fbtn select{font-size:var(--fs-md);padding:0 8px;line-height:44px;height:44px}
.hbtn{min-height:44px;padding:8px 12px;font-size:20px}
.fctrls .hbtn{min-width:52px;padding:0;min-height:0}
#crw-grid{column-count:2;column-gap:14px}
}
@media(max-width:932px) and (orientation:landscape){
body,html{overflow-x:hidden!important;max-width:100vw}
.dash{overflow-x:clip;max-width:100vw}
.cd{overflow:hidden;max-width:100%}
.g2{grid-template-columns:1fr}
}
.iris-loader{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--bg);z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .5s ease;pointer-events:auto}
.iris-loader.fade-out{opacity:0;pointer-events:none}
.iris-enrich-bar{position:fixed;bottom:0;left:0;width:100%;z-index:9040;padding:8px 16px;background:rgba(15,15,30,.92);backdrop-filter:blur(12px);border-top:1px solid rgba(var(--iris-rgb),.3);display:flex;align-items:center;justify-content:center;gap:8px;font-size:var(--fs-base);color:var(--t2);transition:transform .3s ease,opacity .3s ease}
.iris-enrich-bar.done{border-top-color:rgba(20,184,166,.3)}
.iris-enrich-bar.hidden{transform:translateY(100%);opacity:0;pointer-events:none}
.iris-enrich-dot{width:6px;height:6px;border-radius:50%;background:var(--iris);animation:iris-pulse 2s ease-in-out infinite}
.iris-enrich-bar.done .iris-enrich-dot{background:var(--tv);animation:none}
.iris-loader svg{margin-bottom:16px;animation:iris-pulse 2s ease-in-out infinite}
@keyframes iris-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.85}}
/* ─── LANDING PAGE ─────────────────────────────────── */
#iris-lp-ov{position:fixed;inset:0;width:100vw;height:100dvh;height:100vh;background:var(--bg);z-index:9500;overflow-y:auto;-webkit-overflow-scrolling:touch;transition:opacity .4s ease,transform .4s ease}
#iris-lp-ov.lp-fade-out{opacity:0;pointer-events:none;transform:translateY(-16px)}
.iris-lp-nav{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--w6);position:sticky;top:0;background:var(--fbar-bg);backdrop-filter:blur(8px);z-index:9501}
.iris-lp-hero{text-align:center;padding:60px 20px 48px;background:radial-gradient(ellipse at 50% -20%,rgba(var(--iris-rgb),.2) 0%,transparent 65%)}
.iris-lp-headline{font-size:clamp(30px,6vw,52px);font-weight:800;line-height:1.1;color:var(--tx);margin:16px 0}
.iris-lp-headline span{color:var(--iris-mid)}
.iris-lp-sub{font-size:clamp(14px,2.5vw,17px);color:var(--t2);max-width:500px;margin:0 auto 32px;line-height:1.65}
.iris-lp-ctas{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.iris-lp-btn-p{padding:13px 30px;background:var(--iris);color:#fff;border:none;border-radius:var(--radius-xl);font-size:var(--fs-xl);font-weight:700;cursor:pointer;transition:background .15s,transform .1s}
.iris-lp-btn-p:hover{background:var(--iris-mid)}
.iris-lp-btn-p:active{transform:scale(.97)}
.iris-lp-btn-g{padding:13px 26px;background:transparent;color:var(--t2);border:1px solid var(--w15);border-radius:var(--radius-xl);font-size:var(--fs-lg);font-weight:600;cursor:pointer;transition:border-color .15s,color .15s}
.iris-lp-btn-g:hover{border-color:var(--w15);color:var(--tx)}
.iris-lp-section{max-width:860px;margin:0 auto;padding:0 20px 48px}
.iris-lp-sh{font-size:var(--fs-base);font-weight:700;color:var(--t2);text-transform:uppercase;letter-spacing:1px;margin-bottom:16px;text-align:center}
.iris-lp-adv-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.iris-lp-adv-card{background:var(--sf);border:1px solid var(--w6);border-left:3px solid var(--iris-mid);border-radius:var(--radius-xl);padding:16px 18px}
.iris-lp-adv-icon{font-size:22px;margin-bottom:8px}
.iris-lp-adv-title{font-size:var(--fs-xl);font-weight:700;color:var(--tx);margin-bottom:5px}
.iris-lp-adv-body{font-size:var(--fs-md);color:var(--t2);line-height:1.55}
.iris-lp-feat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px}
.iris-lp-feat-card{background:var(--sf);border:1px solid var(--w6);border-radius:var(--radius-xl);padding:15px}
.iris-lp-feat-icon{font-size:22px;margin-bottom:8px}
.iris-lp-feat-name{font-size:var(--fs-lg);font-weight:600;color:var(--tx);margin-bottom:4px}
.iris-lp-feat-desc{font-size:var(--fs-base);color:var(--t2);line-height:1.4;margin-bottom:10px}
.iris-lp-feat-svcs{display:flex;flex-wrap:wrap;gap:6px}
.iris-lp-logo{display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 4px;background:var(--w4);border:1px solid var(--w10);border-radius:var(--radius-full);text-decoration:none;transition:background .15s,border-color .15s}
.iris-lp-logo:hover{background:var(--w10);border-color:var(--w15)}
.iris-lp-logo-mark{width:20px;height:20px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:800;line-height:1}
.iris-lp-logo-name{font-size:var(--fs-sm);font-weight:600;color:var(--t2);white-space:nowrap}
.iris-lp-logo:hover .iris-lp-logo-name{color:var(--tx)}
/* Advantage-card mini mockups */
.iris-lp-adv-card{display:flex;flex-direction:column}
.iris-mk{background:rgba(0,0,0,.25);border:1px solid var(--w6);border-radius:var(--radius-lg);padding:12px;margin-bottom:14px;height:84px;box-sizing:border-box;overflow:hidden}
.iris-mk-tl-row{display:flex;align-items:center;gap:8px}
.iris-mk-bar{height:8px;border-radius:var(--radius-xs);opacity:.55}
/* Diverging "DNA strand" lifeline mock: bars above + below a center axis */
.iris-mk-hx{display:flex;align-items:stretch;gap:3px;height:100%;position:relative}
.iris-mk-hx::before{content:'';position:absolute;left:0;right:0;top:50%;height:1px;background:var(--w15)}
.iris-mk-col{flex:1;display:flex;flex-direction:column;min-width:0}
.iris-mk-col .up{flex:1;display:flex;align-items:flex-end}
.iris-mk-col .dn{flex:1;display:flex;align-items:flex-start}
.iris-mk-col .up i,.iris-mk-col .dn i{display:block;width:100%;border-radius:2px}
/* Leaderboard (actor-table) mock */
.iris-mk-tbl{display:flex;flex-direction:column;gap:8px;justify-content:center;height:100%}
.iris-mk-trow{display:flex;align-items:center;gap:8px}
.iris-mk-rk{font-size:var(--fs-2xs);color:var(--t2);width:8px;text-align:center;flex-shrink:0}
.iris-mk-av{width:18px;height:18px;border-radius:50%;background:linear-gradient(135deg,var(--iris),var(--iris-mid));display:flex;align-items:center;justify-content:center;font-size:var(--fs-2xs);font-weight:700;color:#fff;flex-shrink:0}
.iris-mk-nmwrap{flex:1;min-width:0}
.iris-mk-nm{height:7px;border-radius:var(--radius-xs);background:var(--w15);display:block}
.iris-mk-num{font-size:var(--fs-xs);font-weight:700;flex-shrink:0;width:18px;text-align:right}
.iris-mk-upnext{display:flex;align-items:center;gap:10px;height:100%}
.iris-mk-poster{width:42px;height:60px;border-radius:var(--radius-sm);background:linear-gradient(135deg,var(--tv),#0e7d72);flex-shrink:0}
.iris-mk-lines{flex:1;display:flex;flex-direction:column;gap:6px}
.iris-mk-line{height:9px;border-radius:var(--radius-xs);background:var(--w15)}
.iris-mk-line.sm{height:7px;background:var(--w10)}
.iris-mk-new{font-size:var(--fs-2xs);font-weight:800;color:#fff;background:var(--mv);padding:3px 7px;border-radius:5px;letter-spacing:.5px;flex-shrink:0;align-self:flex-start}
.iris-mk-filter{display:flex;flex-direction:column;gap:9px;justify-content:center;height:100%}
.iris-mk-chips{display:flex;gap:6px}
.iris-mk-chip{font-size:var(--fs-xs);font-weight:600;padding:4px 10px;border-radius:var(--radius-full);background:var(--w6);color:var(--t2);border:1px solid var(--w10)}
.iris-mk-chip.on{background:var(--iris);color:#fff;border-color:transparent}
.iris-mk-where{display:flex;flex-direction:column;gap:10px;justify-content:center;height:100%}
.iris-mk-svcs{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.iris-mk-svc{width:22px;height:22px;border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-xs);font-weight:800;color:#fff}
.iris-mk-inlib{font-size:var(--fs-2xs);font-weight:700;color:#4ade80;background:rgba(74,222,128,.12);border:1px solid rgba(74,222,128,.3);padding:3px 8px;border-radius:5px;letter-spacing:.3px}
.iris-lp-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px}
.iris-lp-step{text-align:center;padding:20px 14px;background:var(--sf);border-radius:var(--radius-xl);border:1px solid var(--w6)}
.iris-lp-step-num{width:34px;height:34px;background:var(--iris);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--fs-xl);font-weight:800;margin:0 auto 12px}
.iris-lp-step-title{font-size:var(--fs-lg);font-weight:700;margin-bottom:6px}
.iris-lp-step-body{font-size:var(--fs-base);color:var(--t2);line-height:1.5}
.iris-lp-footer{text-align:center;padding:40px 20px 60px;border-top:1px solid var(--w6)}
@media(max-width:600px){.iris-lp-adv-grid{grid-template-columns:1fr}.iris-lp-hero{padding:40px 16px 32px}}
/* ─── ONBOARDING WIZARD ────────────────────────────── */
#iris-onboarding-ov{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);backdrop-filter:blur(12px);z-index:9900;display:none;align-items:center;justify-content:center;padding:20px;box-sizing:border-box}
#iris-onboarding-ov.ob-open{display:flex}
.iris-ob-card{background:var(--sf);border:1px solid var(--w10);border-radius:var(--radius-3xl);width:100%;max-width:500px;max-height:88vh;overflow-y:auto;padding:24px 24px 20px}
.iris-ob-dots{display:flex;gap:6px;margin-bottom:24px;justify-content:center}
.iris-ob-dot{width:8px;height:8px;border-radius:50%;background:var(--w15);transition:background .25s,width .25s,border-radius .25s;flex-shrink:0}
.iris-ob-dot.ob-active{background:var(--iris-mid);width:24px;border-radius:var(--radius-xs)}
.iris-ob-dot.ob-done{background:var(--iris)}
.iris-ob-title{font-size:21px;font-weight:800;color:var(--tx);margin-bottom:8px}
.iris-ob-body{font-size:var(--fs-lg);color:var(--t2);line-height:1.6;margin-bottom:18px}
.iris-ob-svc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px;margin-bottom:18px}
.iris-ob-svc-chip{display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 6px;background:var(--w4);border:1px solid var(--w8);border-radius:var(--radius-lg);text-align:center;line-height:1.3}
.iris-ob-svc-chip .ob-chip-icon{font-size:20px;line-height:1}
.iris-ob-svc-chip .ob-chip-name{font-size:var(--fs-sm);font-weight:600;color:var(--tx)}
.iris-ob-svc-chip a{color:var(--iris-light);text-decoration:none;font-size:var(--fs-xs)}
.iris-ob-svc-chip a:hover{text-decoration:underline}
.iris-ob-svc-chip .ob-chip-desc{font-size:var(--fs-xs);color:var(--t2);margin-top:1px}
.iris-ob-acts{display:flex;gap:10px;justify-content:flex-end;padding-top:16px;border-top:1px solid var(--w6);margin-top:4px}
.iris-ob-skip{padding:10px 18px;background:none;border:1px solid var(--w10);color:var(--t2);border-radius:var(--radius-lg);font-size:var(--fs-md);font-weight:600;cursor:pointer;transition:border-color .15s,color .15s}
.iris-ob-skip:hover{border-color:var(--w15);color:var(--tx)}
.iris-ob-next{padding:10px 22px;background:var(--iris);color:#fff;border:none;border-radius:var(--radius-lg);font-size:var(--fs-lg);font-weight:700;cursor:pointer;transition:background .15s}
.iris-ob-next:hover{background:var(--iris-mid)}
.iris-ob-grp-lbl{font-size:var(--fs-sm);font-weight:700;color:var(--t2);text-transform:uppercase;letter-spacing:.8px;margin:14px 0 6px}
.iris-ob-row{background:var(--w4);border:1px solid var(--w6);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:6px}
.iris-ob-row-hdr{display:flex;align-items:center;gap:10px;padding:11px 13px;cursor:pointer;transition:background .15s;-webkit-tap-highlight-color:transparent}
.iris-ob-row-hdr:hover{background:var(--w4)}
.iris-ob-row-detail{display:none;padding:2px 13px 12px}
.iris-ob-row.ob-row-open .iris-ob-row-detail{display:block}
.iris-ob-svc-link{font-size:var(--fs-sm);color:var(--iris-light);text-decoration:none;margin-left:auto;flex-shrink:0}
.iris-ob-svc-link:hover{text-decoration:underline}
/* ─── CONNECT SERVICES OVERLAY ────────────────────────── */
#iris-connect-ov{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--ov-bg);backdrop-filter:blur(12px);z-index:9900;display:none;align-items:center;justify-content:center;padding:20px;box-sizing:border-box}
#iris-connect-ov.cn-open{display:flex}
.iris-cn-card{background:var(--sf);border:1px solid var(--w10);border-radius:var(--radius-3xl);width:100%;max-width:520px;max-height:90vh;overflow-y:auto;padding:0 0 8px}
.iris-cn-hdr{padding:20px 22px 16px;border-bottom:1px solid var(--w8);position:sticky;top:0;background:var(--sf);border-radius:var(--radius-3xl) var(--radius-3xl) 0 0;z-index:1;display:flex;align-items:flex-start;justify-content:space-between}
.iris-cn-title{font-size:20px;font-weight:800;color:var(--tx);margin-bottom:4px}
.iris-cn-sub{font-size:var(--fs-md);color:var(--t2);line-height:1.4}
.iris-cn-close{background:none;border:none;color:var(--t2);font-size:20px;cursor:pointer;padding:2px;line-height:1;flex-shrink:0;margin-left:10px;margin-top:2px}
.iris-cn-close:hover{color:var(--tx)}
.iris-cn-body{padding:8px 0}
.iris-cn-cat-lbl{font-size:var(--fs-xs);font-weight:700;color:var(--t2);text-transform:uppercase;letter-spacing:.8px;padding:12px 22px 6px}
.iris-cn-row{border-bottom:1px solid var(--w4);overflow:hidden}
.iris-cn-row-hdr{display:flex;align-items:center;gap:10px;padding:10px 22px;cursor:pointer;transition:background .15s;-webkit-tap-highlight-color:transparent;min-height:48px}
.iris-cn-row-hdr:hover{background:var(--w4)}
.iris-cn-row-logo{width:24px;height:24px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-size:var(--fs-base);font-weight:800;line-height:1}
.iris-cn-row-name{font-size:var(--fs-lg);font-weight:600;color:var(--tx);flex:1}
.iris-cn-row-status{flex-shrink:0;display:flex;align-items:center;gap:6px;margin-right:4px}
.iris-cn-chevron{color:var(--t2);font-size:var(--fs-lg);transition:transform .25s;flex-shrink:0}
.iris-cn-row.cn-row-open .iris-cn-chevron{transform:rotate(90deg)}
.iris-cn-connected-badge{font-size:var(--fs-sm);font-weight:600;color:#4ade80}
.iris-cn-detail{max-height:0;overflow:hidden;transition:max-height .35s ease}
.iris-cn-row.cn-row-open .iris-cn-detail{max-height:900px}
.iris-cn-detail-inner{padding:4px 22px 16px}
.iris-cn-desc{font-size:var(--fs-md);color:var(--t2);line-height:1.6;margin-bottom:14px}
.iris-cn-acts{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center}
.iris-cn-reg-btn{padding:8px 16px;background:none;border:1px solid var(--w15);color:var(--t2);border-radius:var(--radius-md);font-size:var(--fs-base);font-weight:600;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:5px;transition:border-color .15s,color .15s}
.iris-cn-reg-btn:hover{border-color:var(--w15);color:var(--tx)}
.iris-cn-connect-btn{padding:8px 20px;background:var(--iris);color:#fff;border:none;border-radius:var(--radius-md);font-size:var(--fs-base);font-weight:700;cursor:pointer;transition:background .15s}
.iris-cn-connect-btn:hover{background:var(--iris-mid)}
.iris-cn-connect-btn.cn-connected{background:#16a34a}
.iris-cn-connect-btn.cn-connected:hover{background:#15803d}
.iris-cn-form{max-height:0;overflow:hidden;transition:max-height .3s ease}
.iris-cn-form.cn-form-open{max-height:600px}
.iris-cn-form-inner{padding-top:12px}
/* ─── LIGHT THEME ──────────────────────────────────── */
/* Glass tokens, light variant (redesign §3.5): lighter tint + white hairline so the glass doesn't wash out on white. */
[data-theme="light"]{--glass-bg:rgba(245,245,247,.72);--glass-bg-nav:rgba(245,245,247,.5);--glass-border:rgba(0,0,0,.10);--glass-hairline:inset 0 1px 0 rgba(255,255,255,.6);--glass-hairline-strong:inset 0 1px 0 rgba(255,255,255,.7);--glass-shadow:0 8px 30px rgba(0,0,0,.14)}
@media(prefers-color-scheme:light){[data-theme="system"]{--glass-bg:rgba(245,245,247,.72);--glass-bg-nav:rgba(245,245,247,.5);--glass-border:rgba(0,0,0,.10);--glass-hairline:inset 0 1px 0 rgba(255,255,255,.6);--glass-hairline-strong:inset 0 1px 0 rgba(255,255,255,.7);--glass-shadow:0 8px 30px rgba(0,0,0,.14)}}
[data-theme="light"]{--bg:#f5f5f7;--sf:#ffffff;--tx:#1d1d1f;--t1:#3a3a3c;--t2:#58585d;--ac:#b45309;--gr:#1a8d3e;--bl:#0d7d72;--pu:#0d7d72;--or:#b45309;--tv:#0d7d72;--mv:#d4430b;--mu:#047857;--bk:#b45309;--cn:#1d4ed8;--th:#6d28d9;--sp:#0369a1;--iris:#6d28d9;--iris-rgb:109,40,217;--grad-b:#be185d;--iris-light:#5b21b6;--iris-mid:#7c3aed;--w4:rgba(0,0,0,.03);--w6:rgba(0,0,0,.05);--w8:rgba(0,0,0,.06);--w10:rgba(0,0,0,.09);--w15:rgba(0,0,0,.12);--ph:#e5e5ea;--sc:#c7c7cc;--card-hv:#f2f2f7;--fbar-bg:rgba(245,245,247,.88);--ov-bg:rgba(0,0,0,.3);--ph-grad:linear-gradient(135deg,#e5e5ea,#d1d1d6);--stat-muted:#58585d;--icon-color:#48484a}
@media(prefers-color-scheme:light){[data-theme="system"]{--bg:#f5f5f7;--sf:#ffffff;--tx:#1d1d1f;--t1:#3a3a3c;--t2:#58585d;--ac:#b45309;--gr:#1a8d3e;--bl:#0d7d72;--pu:#0d7d72;--or:#b45309;--tv:#0d7d72;--mv:#d4430b;--mu:#047857;--bk:#b45309;--cn:#1d4ed8;--th:#6d28d9;--sp:#0369a1;--iris:#6d28d9;--iris-rgb:109,40,217;--grad-b:#be185d;--iris-light:#5b21b6;--iris-mid:#7c3aed;--w4:rgba(0,0,0,.03);--w6:rgba(0,0,0,.05);--w8:rgba(0,0,0,.06);--w10:rgba(0,0,0,.09);--w15:rgba(0,0,0,.12);--ph:#e5e5ea;--sc:#c7c7cc;--card-hv:#f2f2f7;--fbar-bg:rgba(245,245,247,.88);--ov-bg:rgba(0,0,0,.3);--ph-grad:linear-gradient(135deg,#e5e5ea,#d1d1d6);--stat-muted:#58585d;--icon-color:#48484a}}
/* Light-mode overrides */
[data-theme="light"] .iris-auth-dot{border-color:var(--bg)}
[data-theme="light"] .sc,[data-theme="light"] .un-card,[data-theme="light"] .un-sr-item,[data-theme="light"] .un-detail,[data-theme="light"] .ds-panel{box-shadow:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);border-color:rgba(0,0,0,.04)}
[data-theme="light"] .cd{box-shadow:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);border-top-color:rgba(0,0,0,.04);border-right-color:rgba(0,0,0,.04);border-bottom-color:rgba(0,0,0,.04)}
[data-theme="light"] .fd-chip.fd-on{background:rgba(var(--iris-rgb),.15);color:#6d28d9;border-color:rgba(var(--iris-rgb),.3)}
[data-theme="light"] .un-prog{background:var(--w6)}
[data-theme="light"] .un-pill-recent,[data-theme="light"] .un-pill-active,[data-theme="light"] .un-pill-hold,[data-theme="light"] .un-pill-sort{color:#fff}
[data-theme="light"] .chart-detail{background:#f5f5f7}
[data-theme="light"] .dr td{background:rgba(var(--iris-rgb),.04)!important}
[data-theme="light"] .iris-stars .iris-star,[data-theme="light"] .iris-stars .iris-star-empty,[data-theme="light"] .iris-rate-star .iris-rs-glyph{color:#8e8e93}
[data-theme="light"] .sc-link:hover{box-shadow:0 4px 12px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.06)}
[data-theme="light"] .vb-on{background:var(--iris);color:#fff}
[data-theme="light"] .iris-loader{background:var(--bg)}
[data-theme="light"] #filter-dialog{background:rgba(0,0,0,.35)}
[data-theme="light"] #iris-onboarding-ov,[data-theme="light"] #iris-connect-ov{background:rgba(0,0,0,.4)}
[data-theme="light"] .flt-menu{box-shadow:0 8px 24px rgba(0,0,0,.12)}
[data-theme="light"] .un-show-poster,[data-theme="light"] .un-movie-poster,[data-theme="light"] .un-person-photo{box-shadow:0 4px 20px rgba(0,0,0,.12)}
[data-theme="light"] .un-wl-ghost{box-shadow:0 8px 32px rgba(0,0,0,.15)!important}
[data-theme="light"] .iris-eye-w{fill:#a78bfa;stroke:#8b5cf6;stroke-width:6}
[data-theme="light"] .cover-grid .gi span,[data-theme="light"] .poster-item span{color:var(--t1)}
[data-theme="light"] .cover-grid .gi .val{color:#b45309}
[data-theme="light"] #lfm-albums .gi .al-info{color:var(--t1)}
[data-theme="light"] #lfm-albums .gi .al-info .al-val{color:#b45309}
[data-theme="light"] .un-prog-bar{opacity:.75}
[data-theme="light"] .iris-rb-trakt{color:#a16207}
[data-theme="light"] .iris-rb-imdb{color:#a16207}
[data-theme="light"] .s-a,[data-theme="light"] .s-g,[data-theme="light"] .s-u,[data-theme="light"] .s-t,[data-theme="light"] .s-e,[data-theme="light"] .s-c,[data-theme="light"] .s-r{border-left-color:#8e8e93}
[data-theme="light"] .s-hw{border-left-color:#16a34a}
[data-theme="light"] .un-sr-badge-movie{color:#c2410c}
[data-theme="light"] .un-sr-badge-show{color:#0f766e}
[data-theme="light"] .b-bg{color:#be185d}
[data-theme="light"] .b-sp{color:#0369a1}
[data-theme="light"] .b-wk{color:#15803d}
[data-theme="light"] .b-pc{color:#b91c1c}
/* System-mode light overrides */
@media(prefers-color-scheme:light){
[data-theme="system"] .iris-auth-dot{border-color:var(--bg)}
[data-theme="system"] .sc,[data-theme="system"] .un-card,[data-theme="system"] .un-sr-item,[data-theme="system"] .un-detail,[data-theme="system"] .ds-panel{box-shadow:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);border-color:rgba(0,0,0,.04)}
[data-theme="system"] .cd{box-shadow:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);border-top-color:rgba(0,0,0,.04);border-right-color:rgba(0,0,0,.04);border-bottom-color:rgba(0,0,0,.04)}
[data-theme="system"] .fd-chip.fd-on{background:rgba(var(--iris-rgb),.15);color:#6d28d9;border-color:rgba(var(--iris-rgb),.3)}
[data-theme="system"] .un-prog{background:var(--w6)}
[data-theme="system"] .un-pill-recent,[data-theme="system"] .un-pill-active,[data-theme="system"] .un-pill-hold,[data-theme="system"] .un-pill-sort{color:#fff}
[data-theme="system"] .chart-detail{background:#f5f5f7}
[data-theme="system"] .dr td{background:rgba(var(--iris-rgb),.04)!important}
[data-theme="system"] .iris-stars .iris-star,[data-theme="system"] .iris-stars .iris-star-empty,[data-theme="system"] .iris-rate-star .iris-rs-glyph{color:#8e8e93}
[data-theme="system"] .sc-link:hover{box-shadow:0 4px 12px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.06)}
[data-theme="system"] .vb-on{background:var(--iris);color:#fff}
[data-theme="system"] .iris-loader{background:var(--bg)}
[data-theme="system"] #filter-dialog{background:rgba(0,0,0,.35)}
[data-theme="system"] #iris-onboarding-ov,[data-theme="system"] #iris-connect-ov{background:rgba(0,0,0,.4)}
[data-theme="system"] .flt-menu{box-shadow:0 8px 24px rgba(0,0,0,.12)}
[data-theme="system"] .un-show-poster,[data-theme="system"] .un-movie-poster,[data-theme="system"] .un-person-photo{box-shadow:0 4px 20px rgba(0,0,0,.12)}
[data-theme="system"] .un-wl-ghost{box-shadow:0 8px 32px rgba(0,0,0,.15)!important}
[data-theme="system"] .iris-eye-w{fill:#a78bfa;stroke:#8b5cf6;stroke-width:6}
[data-theme="system"] .cover-grid .gi span,[data-theme="system"] .poster-item span{color:var(--t1)}
[data-theme="system"] .cover-grid .gi .val{color:#b45309}
[data-theme="system"] #lfm-albums .gi .al-info{color:var(--t1)}
[data-theme="system"] #lfm-albums .gi .al-info .al-val{color:#b45309}
[data-theme="system"] .un-prog-bar{opacity:.75}
[data-theme="system"] .iris-rb-trakt{color:#a16207}
[data-theme="system"] .iris-rb-imdb{color:#a16207}
[data-theme="system"] .s-a,[data-theme="system"] .s-g,[data-theme="system"] .s-u,[data-theme="system"] .s-t,[data-theme="system"] .s-e,[data-theme="system"] .s-c,[data-theme="system"] .s-r{border-left-color:#8e8e93}
[data-theme="system"] .s-hw{border-left-color:#16a34a}
[data-theme="system"] .un-sr-badge-movie{color:#c2410c}
[data-theme="system"] .un-sr-badge-show{color:#0f766e}
[data-theme="system"] .b-bg{color:#be185d}
[data-theme="system"] .b-sp{color:#0369a1}
[data-theme="system"] .b-wk{color:#15803d}
[data-theme="system"] .b-pc{color:#b91c1c}
}
/* ─── THEME TOGGLE ─────────────────────────────────── */
.iris-theme-seg{display:flex;gap:2px;padding:2px;background:var(--w4);border-radius:var(--radius-lg);margin:8px 18px 4px}
.iris-theme-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 0;border:none;border-radius:var(--radius-md);background:transparent;color:var(--t2);font-size:var(--fs-base);font-weight:600;cursor:pointer;transition:background .15s,color .15s,box-shadow .15s}
.iris-theme-btn.active{background:var(--sf);color:var(--tx);box-shadow:0 1px 3px rgba(0,0,0,.12)}
.iris-theme-btn:hover:not(.active){background:var(--w4)}
.iris-theme-btn svg{width:16px;height:16px}
[data-theme="light"] .iris-pupil{fill:#1d1d1f}
@media(prefers-color-scheme:light){[data-theme="system"] .iris-pupil{fill:#1d1d1f}}
/* ─── TOASTS (unified — J2) ─────────────────────────── */
#iris-toast-host{position:fixed;left:0;right:0;bottom:max(20px,env(safe-area-inset-bottom));z-index:100002;display:flex;flex-direction:column-reverse;align-items:center;gap:8px;padding:0 16px;pointer-events:none}
.iris-toast{display:flex;align-items:center;gap:10px;max-width:440px;padding:11px 14px;border-radius:var(--radius-xl);background:var(--sf);color:var(--tx);border:1px solid var(--w10);box-shadow:0 6px 24px rgba(0,0,0,.3);font-size:var(--fs-md);font-weight:500;line-height:1.35;pointer-events:auto;opacity:0;transform:translateY(12px);transition:opacity .22s ease,transform .22s ease;cursor:pointer;-webkit-tap-highlight-color:transparent}
.iris-toast.iris-toast-in{opacity:1;transform:translateY(0)}
.iris-toast.iris-toast-out{opacity:0;transform:translateY(12px)}
.iris-toast-ico{flex-shrink:0;width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:var(--fs-base);font-weight:800;border-radius:50%;line-height:1}
.iris-toast-success .iris-toast-ico{background:rgba(74,222,128,.18);color:#16a34a}
.iris-toast-error .iris-toast-ico{background:rgba(239,68,68,.18);color:#ef4444}
.iris-toast-info .iris-toast-ico{background:rgba(var(--iris-rgb),.18);color:var(--iris-mid)}
.iris-toast-msg{flex:1;min-width:0}
.iris-toast-act{flex-shrink:0;background:none;border:none;color:var(--iris-mid);font-weight:700;font-size:var(--fs-base);letter-spacing:.04em;text-transform:uppercase;cursor:pointer;padding:3px 6px;margin-left:2px;-webkit-tap-highlight-color:transparent}
.iris-toast-act:active{opacity:.6}
@media(prefers-reduced-motion:reduce){.iris-toast{transition:opacity .15s ease;transform:none}.iris-toast.iris-toast-in,.iris-toast.iris-toast-out{transform:none}}
/* ─── DIALOGS (confirm / prompt — J4) ───────────────── */
.iris-dlg-ov{position:fixed;inset:0;z-index:100003;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--ov-bg);backdrop-filter:blur(6px);opacity:0;transition:opacity .18s ease}
.iris-dlg-ov.iris-dlg-in{opacity:1}
.iris-dlg{background:var(--sf);border:1px solid var(--w10);border-radius:18px;width:100%;max-width:380px;padding:22px 22px 16px;box-shadow:0 20px 60px rgba(0,0,0,.45);transform:translateY(8px) scale(.98);transition:transform .18s ease}
.iris-dlg-ov.iris-dlg-in .iris-dlg{transform:none}
.iris-dlg-title{font-size:18px;font-weight:800;color:var(--tx);margin-bottom:8px}
.iris-dlg-msg{font-size:var(--fs-lg);color:var(--t2);line-height:1.5;margin-bottom:18px}
.iris-dlg-input{width:100%;padding:12px 14px;background:var(--bg);border:1px solid var(--w15);border-radius:var(--radius-lg);color:var(--tx);font-size:var(--fs-xl);box-sizing:border-box;margin-bottom:18px;outline:none}
.iris-dlg-input:focus{border-color:var(--iris-mid)}
.iris-dlg-acts{display:flex;gap:10px;justify-content:flex-end}
.iris-dlg-btn{padding:10px 18px;border-radius:var(--radius-lg);font-size:var(--fs-lg);font-weight:700;cursor:pointer;border:1px solid var(--w15);background:none;color:var(--t2);transition:background .15s,color .15s,border-color .15s;-webkit-tap-highlight-color:transparent}
.iris-dlg-btn:hover{color:var(--tx)}
.iris-dlg-btn-primary{background:var(--iris);border-color:var(--iris);color:#fff}
.iris-dlg-btn-primary:hover{background:var(--iris-mid);color:#fff}
.iris-dlg-btn-danger{background:#dc2626;border-color:#dc2626;color:#fff}
.iris-dlg-btn-danger:hover{background:#b91c1c;color:#fff}
@media(prefers-reduced-motion:reduce){.iris-dlg-ov,.iris-dlg{transition:opacity .12s ease}.iris-dlg{transform:none}}
/* ─── FULLSCREEN IMAGE / POSTER VIEWER + clickable posters ─── */
#poster-grid .poster-item,#mdc .gi[data-key]{cursor:pointer}
/* B3: press/hover feedback on clickable dashboard tiles & rows. Scale the IMG, not the
   wrapper — the wrapper's transform is owned by the FLIP reorder transition (.6s/.83s). */
#poster-grid .poster-item img,#mdc .gi[data-key] img{transition:transform .12s ease,filter .12s ease}
#poster-grid .poster-item:active img,#mdc .gi[data-key]:active img{transform:scale(.94)}
.iris-rt-row:active td{background:var(--w8)}
@media(hover:hover){#poster-grid .poster-item:hover img,#mdc .gi[data-key]:hover img{filter:brightness(1.08)}}
@media(prefers-reduced-motion:reduce){#poster-grid .poster-item img,#mdc .gi[data-key] img{transition:none}#poster-grid .poster-item:active img,#mdc .gi[data-key]:active img{transform:none}}
.un-show-poster,.un-movie-poster,#un-sn-page-poster img{cursor:zoom-in}
.iris-imgview{position:fixed;inset:0;z-index:100004;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(0,0,0,.9);opacity:0;transition:opacity .2s ease;cursor:zoom-out}
.iris-imgview.iris-imgview-in{opacity:1}
.iris-imgview-img{max-width:100%;max-height:100%;object-fit:contain;border-radius:var(--radius-md);box-shadow:0 12px 48px rgba(0,0,0,.6);transform:scale(.96);transition:transform .2s ease}
.iris-imgview.iris-imgview-in .iris-imgview-img{transform:scale(1)}

/* ─── LIQUID-GLASS BOTTOM NAV (redesign §3.5 · P4) ─────────────────────
   Mobile only. Floats above the overlays (z 9990: above overlays 9000 /
   search 9700 / settings 9800, below user-menu/auth 9998-9999 and
   toasts/dialogs/imgview 100002+). Side gutters let content show beside it. */
.iris-btmnav{display:none}
/* Visibility control (JS toggles this): hide over landing/splash/modals/filter. */
.iris-btmnav.iris-nav-hidden{display:none!important}
/* Page model (redesign): when a primary view/overlay is active, Home is hidden behind the
   opaque page so it can never flash through during a page swap. visibility:hidden (not
   display:none) preserves Home's scroll position + chart state. No page-to-page slide
   animation — pages just swap (per design call). */
body.iris-page-active .dash,body.iris-page-active .fbar,body.iris-page-active #jmp-float{visibility:hidden}
/* Window-scroll pages (Up Next / Watchlist / Library): the active overlay flows in the document
   so the WINDOW scrolls it — enabling iOS status-bar-tap → scroll-to-top and native pull-to-
   refresh. Home is fully removed from flow (display:none; its scroll is saved/restored in JS) so
   the document height is the page's. JS shims the overlay's scrollTop/clientHeight/scrollHeight +
   forwards scroll events, so existing internal-scroll code (incl. the Up Next virtual scroll)
   keeps working unchanged. */
body.iris-page-scroll .dash,body.iris-page-scroll .fbar,body.iris-page-scroll #jmp-float{display:none!important}
/* Guarantee the window can scroll the page even if _lockBody() pins the body (its inline
   position:fixed/overflow:hidden is overridden here) — this is what makes status-bar-tap and
   pull-to-refresh work. */
body.iris-page-scroll{position:static!important;top:auto!important;width:auto!important;height:auto!important;overflow:visible!important;overscroll-behavior-y:auto}
.iris-pgscroll{position:static!important;height:auto!important;min-height:100vh;max-height:none!important;overflow:visible!important;overscroll-behavior:auto!important;contain:none!important;transform:none!important;will-change:auto!important}
/* Abbreviated stats (P6): collapsed Home shows only the number tiles (#st) + insights strip +
   the "Load full stats" button; every chart section / import card / status is hidden until the
   user expands. Keeps first paint fast. */
body.iris-stats-collapsed .dash>.med-s,body.iris-stats-collapsed .dash>.cd,body.iris-stats-collapsed .dash>.status,body.iris-stats-collapsed #ds-panel{display:none!important}
/* Data-bearing carve-out: sections tagged iris-collapsed-show (Lifeline when D.ll has entries)
   stay visible in collapsed mode — see _doRenderAbbreviated. */
body.iris-stats-collapsed .dash>.cd.iris-collapsed-show{display:block!important}
.iris-load-stats-btn{display:block;width:100%;max-width:480px;margin:2px auto 22px;padding:15px;border:none;border-radius:var(--radius-2xl);background:linear-gradient(135deg,var(--iris),var(--grad-b));color:#fff;font-size:16px;font-weight:700;letter-spacing:.3px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.iris-load-stats-btn:active{filter:brightness(.95)}
body:not(.iris-stats-collapsed) .iris-load-stats-btn{display:none}
/* Search tab segmented control (matches watchlist Movies/Shows toggle) */
/* The overlay is a non-scrolling flex column: header + tabs pinned, #iris-s-scroll owns the
   scroll. Keeping the input OUT of the scroll container is what stops iOS from dragging the view
   on focus (it has no scrollable ancestor to chase the input into). display:flex applies once JS
   clears the inline display:none on open. */
#iris-search-ov{display:flex}
#iris-s-scroll{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
/* Search header (Spotlight-style): glass search field at the TOP + a big round X to close,
   with the Movies/TV/Sports filter pills on the row below. The field stays at the top because
   iOS pans the visual viewport to lift a bottom-anchored input above the keyboard, and no JS can
   prevent or undo that pan (it isn't a scrollable offset). At the top the keyboard never overlaps
   the input. The bottom nav stays visible (covered by the keyboard while typing). Detail views
   drop the .iris-search-pill class (_unUpdateHeader) and fall back to the plain back+title header. */
/* Header floats over the results (App-Store style): transparent bar, content scrolls behind the
   individually-frosted field / close / pill capsules. JS (_irisSyncSearchPad) pads the scroll
   top by the header height so results begin just below the pills before any scroll. */
/* Both the search list view (.iris-search-pill) and the show/season/movie/person detail views
   (.iris-s-detail) use the same floating header: a transparent bar with content scrolling behind
   individually-frosted glass capsules. */
#iris-search-ov:is(.iris-search-pill,.iris-s-detail) #iris-s-header{position:absolute!important;top:0;left:0;right:0;z-index:9702;background:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;border-bottom:none!important;pointer-events:none}
#iris-search-ov:is(.iris-search-pill,.iris-s-detail) #iris-s-header::before{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(to bottom,var(--bg),transparent);opacity:.6}
#iris-search-ov:is(.iris-search-pill,.iris-s-detail) #iris-s-header>*{pointer-events:auto}
/* Default top padding so results render BELOW the floating header on the very first paint —
   _irisSyncSearchPad then refines it to the exact measured height. Without this the scroll starts
   at 0 and content visibly bumps down when JS applies the padding a frame later. The detail header
   is a single row (back + title), so it needs less than the search header (which adds the filter row). */
#iris-search-ov.iris-search-pill #iris-s-scroll{padding-top:calc(env(safe-area-inset-top) + 132px)}
#iris-search-ov.iris-s-detail #iris-s-scroll{padding-top:calc(env(safe-area-inset-top) + 76px)}
#iris-search-ov:is(.iris-search-pill,.iris-s-detail) .iris-s-pillrow{gap:10px;padding:calc(10px + env(safe-area-inset-top)) 14px 10px}
#iris-search-ov.iris-search-pill .un-back{display:none}
/* Detail header: rounded glass back button (pinned left) + centered glass title pill, both stay
   put while the page's own poster/title scrolls behind them. No solid bar. */
#iris-search-ov.iris-s-detail .iris-s-pillrow{position:relative;justify-content:center}
#iris-search-ov.iris-s-detail .iris-s-pillrow .un-back{position:absolute;left:14px;top:calc(10px + env(safe-area-inset-top));width:44px;height:44px;min-width:44px;min-height:44px;padding:0;border-radius:50%;border:1px solid var(--glass-border);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));box-shadow:var(--glass-shadow),var(--glass-hairline-strong);color:var(--tx)}
#iris-search-ov.iris-s-detail #iris-s-detail-title{flex:0 1 auto;max-width:64%;margin:0;padding:11px 18px;border-radius:22px;border:1px solid var(--glass-border);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));box-shadow:var(--glass-shadow),var(--glass-hairline-strong);font-size:15px;font-weight:700;color:var(--tx);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Episode detail nav row — glass "↑ Back" pill + glass ◀/▶ circles, matching the detail header glass. */
#un-ep-navrow .un-ep-navbtn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;border:1px solid var(--glass-border);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));box-shadow:var(--glass-shadow),var(--glass-hairline-strong);color:var(--tx);font-size:var(--fs-lg);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .12s}
#un-ep-navrow .un-ep-navbtn:active{transform:scale(.93)}
#un-ep-navrow .un-ep-back{border-radius:22px;padding:10px 18px;font-weight:600}
#un-ep-navrow .un-ep-nav{width:44px;height:44px;min-width:44px;padding:0;border-radius:50%;font-size:16px}
/* glass search field fills the row */
#iris-search-ov.iris-search-pill .iris-s-field{display:flex;align-items:center;height:48px;border-radius:24px;padding:0 6px 0 16px;background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));border:1px solid var(--glass-border);box-shadow:var(--glass-shadow),var(--glass-hairline-strong)}
#iris-search-ov.iris-search-pill .iris-s-field .iris-s-mag{display:flex;align-items:center;flex-shrink:0;margin-right:10px;color:var(--t2)}
#iris-search-ov.iris-search-pill .iris-s-field .un-search-input{background:transparent;border:none;padding:0;font-size:var(--fs-xl)}
#iris-search-ov.iris-search-pill .iris-s-field .un-search-input:focus{background:transparent;border:none;box-shadow:none}
#iris-search-ov.iris-search-pill #iris-s-clear{padding:6px;color:var(--t2);background:none;border:none}
/* big round X close (App-Store style), right of the field */
.iris-s-close{display:none}
#iris-search-ov.iris-search-pill .iris-s-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:44px;height:44px;border-radius:50%;color:var(--t2);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));border:1px solid var(--glass-border);box-shadow:var(--glass-shadow),var(--glass-hairline-strong);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .15s}
#iris-search-ov.iris-search-pill .iris-s-close:active{transform:scale(.9)}
#iris-search-ov.iris-search-pill #iris-s-media,#iris-search-ov.iris-search-pill #iris-s-sports,#iris-search-ov.iris-s-detail #iris-s-media{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
/* Filter pills row: multi-select Movies + TV in one capsule, exclusive Sports alongside.
   The two media segments are split by an animated hairline; selecting Sports collapses that
   hairline so they merge into a single dimmed pill, and returning to media splits them apart
   and re-highlights both (see _irisFilterTap). */
.iris-sfilters{display:none}
/* Left-aligned, horizontally scrollable filter bar: Movies/TV stay fully visible at the left,
   Sports/People run off the right edge and are reachable by swiping the bar sideways. */
#iris-search-ov.iris-search-pill .iris-sfilters{display:flex;align-items:center;justify-content:flex-start;gap:10px;padding:2px 16px 12px;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
#iris-search-ov.iris-search-pill .iris-sfilters::-webkit-scrollbar{display:none}
#iris-search-ov.iris-search-pill .iris-sfilters>*{flex-shrink:0}
.iris-fmedia{display:inline-flex;align-items:center;background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));border-radius:22px;padding:4px;position:relative;border:1px solid var(--glass-border);box-shadow:var(--glass-shadow),var(--glass-hairline-strong)}
.iris-fseg{display:inline-flex;align-items:center;gap:6px;padding:8px 15px;border-radius:18px;border:none;background:none;color:var(--t2);font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;transition:background .2s,color .2s,transform .12s}
.iris-fseg:active{transform:scale(.94)}
.iris-fseg .iris-fseg-ic{display:flex;align-items:center}
.iris-fseg-on#iris-fseg-movie{background:rgba(251,146,60,.18);color:#fb923c}
.iris-fseg-on#iris-fseg-tv{background:rgba(20,184,166,.18);color:var(--tv,#14b8a6)}
.iris-fdiv{width:1px;height:16px;margin:0 5px;background:var(--w15);transition:width .28s cubic-bezier(.4,0,.2,1),margin .28s cubic-bezier(.4,0,.2,1),opacity .2s,height .28s}
.iris-fmedia-merged{background:var(--glass-bg)}
.iris-fmedia-merged .iris-fdiv{width:0;margin:0;height:0;opacity:0}
.iris-fmedia-merged .iris-fseg{color:var(--t2);background:none;padding:8px 12px}
.iris-fpill{display:inline-flex;align-items:center;gap:6px;padding:12px 18px;border-radius:24px;border:1px solid var(--glass-border);background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));-webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong));box-shadow:var(--glass-shadow),var(--glass-hairline-strong);color:var(--t2);font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;transition:background .2s,color .2s,box-shadow .2s,transform .12s}
.iris-fpill .iris-fseg-ic{display:flex;align-items:center}
.iris-fpill:active{transform:scale(.94)}
.iris-fsports-on{background:linear-gradient(rgba(14,165,233,.32),rgba(14,165,233,.32)),var(--sf);color:#38bdf8;border-color:rgba(56,189,248,.55);box-shadow:0 0 0 1px rgba(56,189,248,.25),0 2px 10px rgba(14,165,233,.25)}
.iris-fpeople-on{background:linear-gradient(rgba(167,139,250,.32),rgba(167,139,250,.32)),var(--sf);color:#a78bfa;border-color:rgba(167,139,250,.55);box-shadow:0 0 0 1px rgba(167,139,250,.25),0 2px 10px rgba(167,139,250,.25)}
/* Remove the page slide-in/out animation: keep the overlays' open/close JS intact (close
   logic depends on transitionend firing) but collapse the duration so there's no visible
   travel. The bottom-nav indicator keeps its own animation. */
#un-overlay,#wl-overlay,#lib-overlay,#iris-search-ov{transition-duration:.01s!important}
/* Giant tabs (redesign §3.5) — Up Next/Upcoming, Watchlist/Library page-pair headers.
   Tabs split the width 50/50; the active underline is a centered fixed-width bar. */
.iris-gtabs-row{display:flex;gap:0;align-items:baseline;padding:4px 2px 0}
.iris-gtab{flex:1;text-align:center;white-space:nowrap;font:800 20px/1 -apple-system,BlinkMacSystemFont,system-ui,sans-serif;letter-spacing:-.4px;color:var(--t2);background:none;border:none;padding:0 0 8px;cursor:pointer;position:relative;-webkit-tap-highlight-color:transparent}
/* No focus-ring rectangle after tapping (the underline already marks the active tab); keep a
   clean ring for keyboard users only. */
/* No focus ring at all on the tabs / bottom nav — active state is shown by the underline
   (tabs) and the sliding pill (nav). iOS fires :focus-visible on tap, so cover both. */
.iris-gtab:focus,.iris-gtab:focus-visible{outline:none}
.iris-nav:focus,.iris-nav:focus-visible,.iris-nav-search:focus,.iris-nav-search:focus-visible{outline:none}
.iris-gtab.iris-gtab-on{color:var(--tx)}
/* Underline spans the full width of its (50%) tab. */
.iris-gtab.iris-gtab-on:after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--iris),var(--grad-b))}
/* Overlay headers slide away on scroll (driven by iris-router.js), like the top bar/nav. */
#un-hdr,#wl-hdr,#lib-hdr,#iris-s-header,#iris-s-tabs,#more-hdr{transition:transform .3s ease}
#un-hdr,#wl-hdr,#lib-hdr,#more-hdr{will-change:transform}
@media(prefers-reduced-motion:reduce){#un-hdr,#wl-hdr,#lib-hdr,#iris-s-header,#iris-s-tabs,#more-hdr{transition:none}}
/* Static giant tabs (Watchlist/Library): CSS-gated to mobile (vs Up Next's JS-toggled set). */
.iris-gtabs-static{display:none}
@media(max-width:767px){.iris-gtabs-static{display:flex}.iris-ovhdr-row{display:none!important}
  /* Match the Up Next header padding (0 16px) so Watchlist/Library tabs align with Up Next/Upcoming
     (the overlay headers default to 12px for their desktop back/title row). */
  #wl-hdr,#lib-hdr,#more-hdr{padding:0 16px!important}}
@media(max-width:767px){
  .iris-btmnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:9990;align-items:flex-end;gap:10px;
    padding:0 14px max(18px,env(safe-area-inset-bottom));pointer-events:none;transition:transform .3s ease}
  .iris-btmnav>*{pointer-events:auto}
  /* Content fade: page content fades to the bg toward the screen's bottom edge (runs all the way down,
     behind the floating pill). z-index:-1 keeps it within the nav's stacking context (above page
     content, behind the pill). Paired with the translucent nav tint so the pill's glass shows this
     fading content through it instead of a flat chip. Rides with the nav when it hides on scroll. */
  .iris-btmnav::before{content:'';position:fixed;left:0;right:0;bottom:0;z-index:-1;pointer-events:none;
    height:calc(105px + env(safe-area-inset-bottom));
    background:linear-gradient(to top,var(--bg),transparent)}
  /* touch-action:none — the drag-across gesture needs pointermove; without it Safari claims
     the touch for scrolling and fires pointercancel. The bar is fixed nav, never a scroll start. */
  .iris-btmnav-bar{flex:1;display:flex;justify-content:space-around;align-items:center;height:62px;border-radius:30px;padding:0 6px;border:1px solid var(--glass-border);position:relative;touch-action:none;isolation:isolate}
  /* Glass blur lives on a ::before, NOT the bar element, so the bar is not a backdrop-filter
     root. A backdrop-filter forces its descendants to re-rasterize whenever the sampled
     backdrop changes — which froze/snapped the pill's slide whenever arriving at a view
     scrolled the page behind the glass (or a heavy render blocked the main thread). With the
     blur on the pseudo, the pill (will-change:transform) keeps its own compositor layer and
     glides independently. */
  .iris-btmnav-bar::before{content:'';position:absolute;inset:0;border-radius:inherit;z-index:-1;
    background:var(--glass-bg-nav);
    backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong)) brightness(1.08);
    -webkit-backdrop-filter:blur(var(--glass-blur-strong)) saturate(var(--glass-sat-strong)) brightness(1.08);
    box-shadow:var(--glass-shadow),var(--glass-hairline-strong)}
  @supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.iris-btmnav-bar::before{background:var(--sf)}}
  /* While actively scrolling, drop the glass blur on the LARGE full-width page headers + top bar.
     Recomputing those big backdrop-filters every scroll frame starves iOS's tile rasterizer, so a
     long list checkerboards. The blur returns ~160ms after scrolling stops (these headers also
     slide away on scroll, so the flat look mid-fling is barely visible).
     NOT included: the bottom nav and the search field/close/pills. They're small (cheap to
     recompute) and stay PINNED while you scroll, so killing their blur mid-scroll made them visibly
     snap between translucent (flat) and frosted (blurred). Keeping their blur on is consistent. */
  body.iris-scrolling #un-hdr,
  body.iris-scrolling #wl-hdr,
  body.iris-scrolling #lib-hdr,
  body.iris-scrolling #more-hdr,
  body.iris-scrolling .fbar{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
  /* Sliding active indicator — JS (_irisSyncNav) moves it under the active item.
     Two states, like iOS 26: RESTING = the simple flat translucent pill (in-bounds, no rim).
     On touch it lifts into a liquid-glass lens via .iris-nav-pill-press — a true CAPSULE
     (radius:999px = height/2), its own backdrop-filter refraction, an all-around bright rim
     (inset ring, not border — keeps geometry identical between states), bulging past the bar
     top/bottom (no overflow:hidden). While the finger slides, .iris-nav-pill-drag shortens the
     transform transition so the lens tracks the finger 1:1; on release it settles fast (.16s). */
  .iris-nav-pill{position:absolute;top:7px;bottom:7px;left:0;width:0;border-radius:22px;
    background:var(--w15);transform-origin:center;
    transform:translateX(0);opacity:0;pointer-events:none;z-index:0;will-change:transform,width;
    transition:transform .42s cubic-bezier(.34,1.06,.36,1),width .42s cubic-bezier(.34,1.06,.36,1),opacity .2s ease,top .16s ease,bottom .16s ease,border-radius .16s ease,background .16s ease,box-shadow .16s ease}
  /* Capsule, NOT a circle: the nav cells are ~69px wide, so the base lens stays clearly wider
     than tall (top/bottom:4px → ~54px tall). JS appends scale(1.3) to the inline transform on
     press, so the whole capsule grows uniformly — wider (overlapping neighbours) and taller
     (bulging past the bar), like the iOS Photos pill — WITHOUT changing the wider-than-tall
     ratio (no re-squaring). NO backdrop-filter — nesting one in the bar's glass blur stalls iOS. */
  .iris-nav-pill.iris-nav-pill-press{top:4px;bottom:4px;border-radius:999px;
    background:linear-gradient(180deg,rgba(255,255,255,.24),rgba(255,255,255,.08));
    box-shadow:0 12px 26px rgba(0,0,0,.45),inset 0 0 0 1px rgba(255,255,255,.32),inset 0 1.5px 0 rgba(255,255,255,.58),inset 0 -1px 0 rgba(255,255,255,.2);
    transition:transform .2s cubic-bezier(.34,1.5,.5,1),width .42s cubic-bezier(.34,1.06,.36,1),opacity .2s ease,top .16s ease,bottom .16s ease,border-radius .16s ease,background .16s ease,box-shadow .16s ease}
  .iris-nav-pill.iris-nav-pill-drag{transition:transform .07s linear,width .12s ease-out,opacity .2s ease,top .16s ease,bottom .16s ease,border-radius .16s ease,background .16s ease,box-shadow .16s ease}
  [data-theme="light"] .iris-nav-pill{background:rgba(0,0,0,.07)}
  [data-theme="light"] .iris-nav-pill.iris-nav-pill-press{background:linear-gradient(180deg,rgba(255,255,255,.75),rgba(255,255,255,.45));box-shadow:0 9px 22px rgba(0,0,0,.18),inset 0 0 0 1px rgba(255,255,255,.9),inset 0 1.5px 0 rgba(255,255,255,.95),inset 0 -1px 0 rgba(255,255,255,.55)}
  .iris-nav{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;background:none;border:none;color:var(--t2);
    font:600 10px/1 -apple-system,BlinkMacSystemFont,system-ui,sans-serif;cursor:pointer;padding:6px 0 4px;min-height:44px;position:relative;z-index:1;
    -webkit-tap-highlight-color:transparent;transition:color .15s ease,transform .15s ease}
  .iris-nav svg{display:block;transition:transform .15s ease}
  .iris-nav span{letter-spacing:.1px}
  /* Extend each tab's touch target ~28px ABOVE the bar. The bar floats above the safe-area, and
     taps reaching for it (esp. right after scrolling the list) often land just over the top edge,
     hitting the content behind instead of a tab — so the first nav tap silently failed. The
     transparent strip maps those near-miss taps to the tab below it (pseudo reports the button as
     the event target, so closest('.iris-nav') still resolves). */
  .iris-nav::before{content:'';position:absolute;left:0;right:0;top:-28px;height:28px}
  .iris-nav:active{transform:scale(.92)}
  .iris-nav.iris-nav-on{color:var(--ac)}
  .iris-nav.iris-nav-on svg{transform:translateY(-1px) scale(1.04)}
  .iris-nav-search{width:62px;height:62px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;
    border:1px solid var(--glass-border);color:var(--ac);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .15s ease}
  .iris-nav-search:active{transform:scale(.92)}
  /* Companion filter sits centered in its band below the giant tabs + underline stripe. */
  #un-comp-filter{padding-top:10px!important;padding-bottom:10px!important;justify-content:center}
  /* Content must clear the floating nav (it scrolls under, last items would hide). */
  .dash{padding-bottom:120px}
  #un-content,#wl-content,#lib-content{padding-bottom:120px}
  /* No padding on the overlay itself — that left a solid bg strip at the bottom (the "black gap"
     behind the translucent nav). The scroll fills to the bottom edge so results scroll behind the
     glass nav; the inner containers carry the bottom padding so the last item still clears it. */
  /* Enrich bar above the nav. */
  .iris-enrich-bar{bottom:88px;border-radius:16px;margin:0 10px;width:auto}
  /* Top bar (Home): the moved actions live in the bottom nav now — hide them on mobile,
     INCLUDING the hamburger (the top-right is the jump-to-section control instead; the
     hamburger/"More" menu is reached from the bottom nav). The filter becomes a pill. */
  .fbar .hbtn[aria-label="Watchlist"],.fbar .hbtn[aria-label="Up Next"],.fbar .hbtn[aria-label="Search"],.fbar #iris-user-btn{display:none!important}
  #filter-btn{border:1px solid var(--w10)!important;border-radius:var(--radius-full)!important;margin:auto 8px auto 0!important;padding:8px 14px!important;background:var(--w8)!important;min-height:0!important;align-self:center!important}
  /* Jump-to-section is a real button in the top row now (#fbar-jmp); hide the floating pill. */
  #jmp-float{display:none!important}
  #fbar-jmp{display:flex!important}
  /* "More" menu becomes a bottom sheet near the nav (was dropping from the top-anchored,
     fbar-hidden hamburger — so it appeared at the top and did nothing while a page/overlay
     was open). Fixed + high z so it works on every view; visibility re-asserted because the
     parent .fbar is visibility:hidden under .iris-page-active. */
  #iris-user-menu{position:fixed!important;left:auto!important;right:12px!important;bottom:96px!important;top:auto!important;margin:0!important;min-width:230px!important;width:auto!important;max-width:300px!important;z-index:10000!important;border-radius:18px!important;box-shadow:0 12px 40px rgba(0,0,0,.5)!important}
  body.iris-page-active #iris-user-menu{visibility:visible!important}
  #iris-toast-host{bottom:calc(62px + max(18px,env(safe-area-inset-bottom)) + 12px)}
}
@media(prefers-reduced-motion:reduce){
  .iris-btmnav{transition:none}
  .iris-nav,.iris-nav svg,.iris-nav-search,.iris-nav-pill,.iris-nav-pill.iris-nav-pill-drag{transition:none}
}
.iris-imgview-x{position:absolute;top:max(16px,env(safe-area-inset-top));right:16px;width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.15);border:none;color:#fff;font-size:24px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
@media(prefers-reduced-motion:reduce){.iris-imgview,.iris-imgview-img{transition:opacity .15s ease}.iris-imgview-img{transform:none}.iris-imgview.iris-imgview-in .iris-imgview-img{transform:none}}

/* ── More · Integrations grid ──────────────────────────── */
.mi-section{margin-bottom:6px}
.mi-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:0 10px}
.mi-label-cell{padding:12px 0 4px}
.mi-label-pill{display:block;text-align:center;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:3px 8px;border-radius:10px;white-space:nowrap}
.mi-tile-wrap{display:flex;flex-direction:column;align-items:center;min-width:0}
.mi-tile{position:relative;width:100%;aspect-ratio:1;border-radius:16px;background:transparent;border:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;transition:background .2s,transform .15s;-webkit-tap-highlight-color:transparent;padding:0}
.mi-tile:active{transform:scale(.93)}
.mi-tile.mi-active{background:var(--w4);border-radius:16px}
.mi-tile .iris-cn-row-logo{width:48px;height:48px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:26px;overflow:hidden}
.mi-logo-svg{width:70%;height:70%}
.mi-tile-name{font-size:11px;font-weight:600;color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:90%;text-align:center}
.mi-badge{position:absolute;top:-2px;right:4px;width:20px;height:20px;border-radius:50%;background:transparent;border:none;transition:background .2s}
.mi-badge-ok{background:#22c55e;border:2.5px solid var(--bg);box-shadow:0 1px 4px rgba(0,0,0,.25)}
.mi-badge-err{background:#ef4444;border:2.5px solid var(--bg);box-shadow:0 1px 4px rgba(0,0,0,.25)}
.mi-badge-ok::after{content:'';display:block;width:7px;height:4px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg);position:relative;top:5px;left:4px}
.mi-expand{position:relative;margin:0 -16px;transition:height .3s cubic-bezier(.4,0,.2,1);overflow:hidden}
.mi-caret{position:absolute;top:0;width:0;height:0;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid var(--w6);z-index:1;transition:left .25s ease}
.mi-caret::after{content:'';position:absolute;top:1.5px;left:-8px;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid var(--w4)}
.mi-detail{margin-top:9px;background:var(--w4);border-top:1px solid var(--w6);border-bottom:1px solid var(--w6);padding:18px 16px}
.mi-detail-name{font-size:16px;font-weight:700;color:var(--tx);margin-bottom:4px}
.mi-detail-desc{font-size:12px;color:var(--t2);line-height:1.5}
@media(prefers-reduced-motion:reduce){.mi-expand,.mi-tile,.mi-caret{transition:none}}
