/* Henneth Desk — Gemini theme (single, locked).
   Data polarity colors are CVD-validated; accent is chrome only.
   UI RULE (do not break): every corner is HARD — border-radius is always 0.
   Never add a rounded corner to any new element. Boxes are 1.5px solid var(--line). */
:root, *, *::before, *::after { border-radius: 0 !important; }

*{box-sizing:border-box;margin:0;padding:0}
/* Themed scrollbars — square, hard-edged, monochrome, matching the terminal. Applies everywhere
   (page, sidebar, modal bodies, wide tables, the zodiac strip). */
*{scrollbar-width:thin;scrollbar-color:var(--ink3) transparent}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:var(--panel2,var(--panel));border-inline-start:1px solid var(--hair)}
::-webkit-scrollbar-thumb{background:var(--ink3);border:2px solid var(--panel2,var(--panel))}
::-webkit-scrollbar-thumb:hover{background:var(--ink2)}
::-webkit-scrollbar-corner{background:var(--panel2,var(--panel))}
body{font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
.num{font-variant-numeric:tabular-nums}
table{width:100%;border-collapse:collapse}
th{text-align:start;font-weight:600}
.r{text-align:end}
button{cursor:pointer;font:inherit}
.clickable{cursor:pointer}
/* Base icon sizing — applies BEFORE the theme loads so an inline SVG can never flash
   at intrinsic size (the "giant black triangle" FOUC). Theme adds stroke/color. */
.side-nav a svg,.side-open svg,.side-toggle svg,.bottomnav a svg,.searchbtn svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8}
.side-toggle svg,.side-open svg{width:15px;height:15px;stroke-width:2}
.empty{text-align:center;padding:16px 0;opacity:.55;font-size:13px}
header.app{display:flex;align-items:center;gap:10px;flex-wrap:wrap;position:sticky;top:0;z-index:10}
nav.tabs{display:flex;gap:4px}
.meta{margin-inline-start:auto;font-size:11.5px;opacity:.6}
main{display:block}
.grid-board{display:grid;gap:var(--gap)}
.cards>*{margin-bottom:var(--gap)}
h2{margin-bottom:2px}
.sub{font-size:11.5px;opacity:.55;margin-bottom:12px}
.statgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:var(--gap)}
.stat b{display:block;font-size:15px}
.stat span{font-size:9.5px;opacity:.6;text-transform:uppercase;letter-spacing:.05em}
.heat{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:5px}
.cell b{display:block}
.cell .px{display:none}
.wire p{padding:7px 0;font-size:11.5px}
.wire .t{font-size:10.5px;opacity:.5;margin-inline-end:6px}
.chartwrap{position:relative}
.chartwrap canvas{width:100%;display:block}
.ranges{display:flex;gap:4px;margin-bottom:8px}
.tooltip{position:absolute;pointer-events:none;font-size:11.5px;padding:6px 9px;border-radius:0;display:none;z-index:5;white-space:nowrap}
.crumb{font-size:11.5px;opacity:.6;margin-bottom:10px;display:inline-block}
.pill{display:inline-block;padding:2px 10px;border-radius:0;font-size:9.5px;font-weight:600}
.tag{display:inline-block;padding:1px 8px;border-radius:0;font-size:9.5px}
.badge-ok{font-weight:700}
.tk-head{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:4px}
.tk-head .sym{font-weight:800}
.tk-head .px{font-weight:700}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap)}
@media(max-width:900px){.two-col{grid-template-columns:1fr}}

/* ---------- GEMINI · refined editorial, stockanalysis/TradingView-grade ---------- */
body[data-theme=gemini]{
  --gap:10px;
  --bg:#f4f4f0;--panel:#ffffff;--panel2:#faf9f4;
  --ink1:#0a0a0a;--ink2:#4a4a44;--ink3:#6b6b63;--line:#111111;--line2:#e7e6df;--surf:#f6f5f0;--hair:#d9d9d2;
  --up:#0b7a5f;--dn:#be4126;--accent:#0a0a0a;
  /* amber: the "partly / needs attention" state between --up and --dn (traffic-light checklist,
     X-ray rule flags). A third semantic colour the palette previously lacked. */
  --warn:#c9922b;
  --font-body:"JetBrains Mono",ui-monospace,"Cascadia Mono",monospace;
  --font-head:"JetBrains Mono",monospace;
  --font-pixel:"Pixelify Sans","JetBrains Mono",monospace;
  background:var(--bg);color:var(--ink1);letter-spacing:0;
  font-family:var(--font-body);font-size:12px;
}
body[data-theme=gemini] .num{font-variant-numeric:tabular-nums}
body[data-theme=gemini] main{max-width:1440px;margin:0 auto;padding:10px 10px 60px}

/* ============ LEFT SIDEBAR SHELL ============ */
body[data-theme=gemini] .shell{display:flex;min-height:100vh;align-items:stretch}
body[data-theme=gemini] .sidebar{width:var(--side-w,212px);flex:0 0 var(--side-w,212px);border-inline-end:1.5px solid var(--line);background:var(--panel);position:sticky;top:0;height:100vh;display:flex;flex-direction:column;overflow-y:auto;transition:width .15s ease,flex-basis .15s ease;min-width:0}
body[data-theme=gemini] .shell.collapsed .sidebar{width:56px;flex:0 0 56px}
body[data-theme=gemini] .shell.resizing .sidebar{transition:none;user-select:none}
body[data-theme=gemini] .side-legal{margin-top:auto;padding:12px 14px;border-top:1px solid var(--hair);display:flex;gap:10px;flex-wrap:wrap}
body[data-theme=gemini] .side-legal a{font-size:10px;color:var(--ink3);text-decoration:none}
body[data-theme=gemini] .side-legal a:hover{color:var(--ink2);text-decoration:underline}
body[data-theme=gemini] .shell.collapsed .side-legal{display:none}
body[data-theme=gemini] .side-resize{position:absolute;top:0;inset-inline-end:0;width:6px;height:100%;cursor:col-resize;z-index:60}
body[data-theme=gemini] .side-resize:hover{background:var(--hair)}
body[data-theme=gemini] .shell.collapsed .side-resize{display:none}
body[data-theme=gemini] .side-top{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:12px 12px;border-bottom:1.5px solid var(--line);min-height:49px}
body[data-theme=gemini] .side-top .brand{font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;line-height:1.2;white-space:nowrap;overflow:hidden}
body[data-theme=gemini] .side-toggle{background:transparent;border:1px solid var(--line);width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex:none;color:var(--ink1)}
body[data-theme=gemini] .side-toggle svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;transition:transform .15s}
body[data-theme=gemini] .shell.collapsed .side-toggle svg{transform:rotate(180deg)}
body[data-theme=gemini] .side-nav{display:flex;flex-direction:column;padding:8px 0;gap:1px}
body[data-theme=gemini] .side-nav a{display:flex;align-items:center;gap:11px;padding:8px 14px;color:var(--ink2);font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;border-inline-start:3px solid transparent;transition:.1s}
body[data-theme=gemini] .side-nav a svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
body[data-theme=gemini] .side-nav a:hover{background:var(--panel2);color:var(--ink1)}
body[data-theme=gemini] .side-nav a.on{color:var(--ink1);border-left-color:var(--ink1);background:var(--panel2)}
body[data-theme=gemini] .side-group{margin-top:6px;padding-top:5px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .side-head{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);padding:5px 14px 3px}
body[data-theme=gemini] .shell.collapsed .side-nav a span,body[data-theme=gemini] .shell.collapsed .side-head,body[data-theme=gemini] .shell.collapsed .side-top .brand{display:none}
body[data-theme=gemini] .shell.collapsed .side-nav a{justify-content:center;padding:10px 0;gap:0}
body[data-theme=gemini] .shell.collapsed .side-group{margin-top:5px}
body[data-theme=gemini] .main-col{flex:1;min-width:0;display:flex;flex-direction:column}
/* The topbar is a SINGLE ROW that must never grow taller. Children may shrink or hide, never wrap:
   #updated ("quant … · live …") used to wrap onto 4+ lines at 375px and stretch the header. */
/* z-index 90, not 20. `position:sticky` + z-index makes the topbar a STACKING CONTEXT, so the
   account menu's own z-index:80 is resolved INSIDE it and was capped by the topbar's 20 — the
   menu opened but painted underneath the page content, which read as "the button does nothing".
   90 clears the sidebar (50), the resize handle (60) and all page content, while staying below
   every modal layer: authbox 100, wizbox 110, pl-overlay 120, replay 200, combo 1200, bw 1400. */
body[data-theme=gemini] .topbar{position:sticky;top:0;z-index:90;display:flex;align-items:center;gap:8px;padding:7px 12px;background:var(--panel);border-bottom:1.5px solid var(--line);flex-wrap:nowrap;min-height:48px}

/* SIGNED-OUT SHELL — the gate should not tease a terminal the visitor cannot open.
   Sidebar and the in-app header controls are removed entirely (not blurred: a blurred nav still
   invites clicks and still announces itself to screen readers). Brand and Sign in remain, because
   the visitor needs to know where they are and how to get in. */
body[data-gated="1"] .sidebar{display:none}
body[data-gated="1"] .side-resize{display:none}
body[data-gated="1"] .topbar #mkt,
body[data-gated="1"] .topbar #health,
body[data-gated="1"] .topbar #regime,
body[data-gated="1"] .topbar #georisk,
body[data-gated="1"] .topbar #searchbtn,
body[data-gated="1"] .topbar .plan-badge,
body[data-gated="1"] .topbar .meta,
body[data-gated="1"] .topbar .side-open{display:none}
body[data-gated="1"] .brand-mobile{display:inline-flex}

/* AUTH-PENDING — the window between first paint and Supabase restoring the session from
   localStorage. Auth is genuinely unknown here, and BOTH guesses flash: assume signed-out and a
   returning member watches the gate paint and vanish; assume signed-in (which the static shell
   above effectively does) and a stranger sees the whole terminal before it is stripped. So paint
   neither. `visibility` rather than `display` on purpose — it reserves the layout, so when the
   answer comes back "signed in" the shell simply becomes visible with zero reflow. The gated
   branch still collapses the sidebar via the display:none rules above. */
body[data-auth="pending"] .sidebar,
body[data-auth="pending"] .side-resize,
body[data-auth="pending"] .topbar #mkt,
body[data-auth="pending"] .topbar #health,
body[data-auth="pending"] .topbar #regime,
body[data-auth="pending"] .topbar #georisk,
body[data-auth="pending"] .topbar #searchbtn,
body[data-auth="pending"] .topbar .plan-badge,
body[data-auth="pending"] .topbar .meta,
body[data-auth="pending"] .topbar .side-open,
body[data-auth="pending"] #view{visibility:hidden}

/* ...and the residual flash that `visibility` alone could not fix.
   Hiding the sidebar without collapsing it still reserves its full width, so a signed-OUT visitor
   got the shell's layout for a beat and then watched the whole page jump left when the gate's
   display:none finally applied. Reserving the space is right for a member (zero reflow when the
   shell appears) and wrong for a stranger — which means the correct behaviour depends on an answer
   we do not have yet.
   So index.html reads Supabase's localStorage session SYNCHRONOUSLY in <head> and stamps
   html[data-boot-auth]. That is a guess, not authority — the token may be expired, and only
   getSession() can say — but it is right often enough to pick the layout, and being wrong costs a
   beat of extra chrome rather than a jump. Auth itself is still decided by initAuth(), never here;
   nothing below grants access, it only chooses which empty frame to hold. */
html[data-boot-auth="out"] body[data-auth="pending"] .sidebar,
html[data-boot-auth="out"] body[data-auth="pending"] .side-resize{display:none}

/* THE DESK MARK — the terminal logo is desk.henneth.app's identity (the website logo stays the
   favicon on both properties, so tabs and home screens read as one brand).
   `height` only, never width: the file is 535x472, and setting both would skew it. The <img>
   carries width/height attributes purely so the browser can reserve the box before the SVG
   arrives — without them the wordmark shifts sideways as it loads, which is the same class of
   flash as the auth one above, just smaller. */
body[data-theme=gemini] .side-top .brand{display:inline-flex;align-items:center;gap:8px;min-width:0}
body[data-theme=gemini] .brand-mark{height:20px;width:auto;flex:none;display:block}
body[data-theme=gemini] .brand-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Collapsed rail: the mark moves INTO the toggle button (see .toggle-mark below), so the brand
   link itself stays hidden by the generic collapse rule — two marks in a 56px rail is one too many. */

/* ==========================================================================================
   COMET TRANSIT — boot screen (design handoff "Loading Screen 8a")

   Fills the data-auth="pending" window, which was previously a blank screen. Sizes are driven
   off --orb so one composition serves every breakpoint: the ring, orbit radius, candle and core
   are all expressed in that unit, and only --orb changes per screen.

   TIMING IS THE WHOLE TRICK. The reveal is delayed 260ms in CSS, so a warm session (auth resolves
   in ~80ms) never sees it at all — the loader would otherwise be a new flash replacing the old
   one. And it fades out rather than cutting, so a slow session does not snap.
   ========================================================================================== */
.boot{
  --orb:220px;              /* orbit box; everything below scales from it */
  --rad:92px;               /* orbit radius, per the handoff */
  --period:6.5s;
  position:fixed;inset:0;z-index:1500;background:var(--ink1);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;
  opacity:0;pointer-events:none;
  animation:bootIn .28s ease .26s forwards;
}
/* Only the pending state shows it. The moment initAuth clears data-auth the element is gone from
   the layout entirely — no stray overlay can survive and swallow clicks. */
body:not([data-auth="pending"]) .boot{display:none}
@keyframes bootIn{to{opacity:1}}
@keyframes orbitCW{to{transform:rotate(360deg)}}
@keyframes orbitCCW{to{transform:rotate(-360deg)}}

.boot-cap{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#7a7a72}
/* scale(1,.62) is the only "elliptical" trick — the orbit maths underneath stays circular. */
.boot-orbit{position:relative;width:var(--orb);height:var(--orb);transform:scale(1,.62)}
.boot-ring,.boot-ring-in{position:absolute;inset-inline-start:50%;top:50%;transform:translate(-50%,-50%);clip-path:circle(50%)}
.boot-ring{width:184px;height:184px;background:#2e2e2b}
.boot-ring-in{width:181px;height:181px;background:var(--ink1)}
.boot-core{position:absolute;inset-inline-start:50%;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;background:var(--bg)}

/* Orbit mechanism: the outer box rotates, the inner box counter-rotates at the same period, so
   the candle travels the ring without tumbling. Both must carry the same negative delay or the
   glyph visibly spins. */
.boot-rot{position:absolute;inset-inline-start:50%;top:50%;width:0;height:0;animation:orbitCW var(--period) linear infinite}
.boot-ctr{position:absolute;inset-inline-start:0;top:calc(var(--rad) * -1);width:0;height:0;animation:orbitCCW var(--period) linear infinite}
.boot-rot i{position:absolute;inset-inline-start:50%;top:50%;transform:translate(-50%,-50%);display:block}
.boot-c0 .wick{width:1px;height:22px;background:var(--up)}
.boot-c0 .body{width:6px;height:16px;background:var(--up)}
.boot-c1 .wick,.boot-c2 .wick,.boot-c3 .wick{width:1px;height:15px}
.boot-c1 .body,.boot-c2 .body,.boot-c3 .body{width:4px;height:9px}
.boot-c1 .wick,.boot-c1 .body{background:rgba(11,122,95,.31)}
.boot-c2 .wick,.boot-c2 .body{background:rgba(11,122,95,.20)}
.boot-c3 .wick,.boot-c3 .body{background:rgba(11,122,95,.09)}
.boot-c1 .boot-ctr,.boot-c1{animation-delay:-1.3s}
.boot-c2 .boot-ctr,.boot-c2{animation-delay:-2.6s}
.boot-c3 .boot-ctr,.boot-c3{animation-delay:-3.9s}

/* Starfield: one element, 14 dots painted as radial-gradient background-images. Cheaper than 14
   divs and it cannot drift out of the box on a different --orb. */
.boot-stars{position:absolute;inset:0;opacity:.55;
  background-image:
    radial-gradient(circle,#5a5a55 1px,transparent 1.5px),
    radial-gradient(circle,#5a5a55 1px,transparent 1.5px),
    radial-gradient(circle,#5a5a55 1px,transparent 1.5px),
    radial-gradient(circle,#5a5a55 1px,transparent 1.5px),
    radial-gradient(circle,#5a5a55 1px,transparent 1.5px),
    radial-gradient(circle,#5a5a55 1px,transparent 1.5px),
    radial-gradient(circle,#5a5a55 1px,transparent 1.5px);
  background-repeat:no-repeat;
  background-position:14% 22%,78% 16%,34% 72%,88% 61%,9% 58%,58% 88%,66% 38%}

.boot-pct{font-family:var(--font-pixel);font-size:24px;font-weight:700;color:#f4f4f0;font-variant-numeric:tabular-nums}
.boot-fine{font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:#7a7a72;white-space:nowrap}

/* Phones: the handoff's stacked 390x700 variant — bigger orbit, more breathing room. */
@media(max-width:560px){
  .boot{--orb:250px;gap:26px;padding:56px 16px 40px}
  .boot-pct{font-size:30px}
}
/* Short/landscape phones: the orbit is the first thing to sacrifice, never the text. */
@media(max-height:520px){
  .boot{--orb:150px;--rad:62px;gap:12px}
  .boot-ring{width:124px;height:124px}
  .boot-ring-in{width:121px;height:121px}
  .boot-pct{font-size:20px}
}
@media(prefers-reduced-motion:reduce){
  .boot{animation:none;opacity:1}
  .boot-rot,.boot-ctr{animation:none}
}

/* THE COLLAPSED TOGGLE = THE DESK MARK, chevron on hover.
   Expanded, this is an ordinary bordered chevron sitting beside the wordmark. Collapsed, the
   wordmark is gone and a lone chevron above a column of icons reads as a stray control, so the
   mark takes its place and the chevron returns on hover or keyboard focus.
   `:focus-visible` is in the swap deliberately — without it a keyboard user tabbing to this button
   sees the logo and no hint that it does anything. */
body[data-theme=gemini] .toggle-mark{display:none;height:18px;width:auto}
/* The 3px transparent border mirrors the nav links' active-indicator border below. Without it the
   mark centres on the rail while every nav icon centres 1.2px to its right, because those links
   reserve 3px on their left for the .on indicator and the header does not. Measured, not guessed. */
body[data-theme=gemini] .shell.collapsed .side-top{justify-content:center;border-inline-start:3px solid transparent}
/* Borderless and icon-sized when collapsed, so it optically matches the 18px nav icons directly
   below it rather than looking like a button parked above a list. */
body[data-theme=gemini] .shell.collapsed .side-toggle{border-color:transparent;width:100%;height:28px}
body[data-theme=gemini] .shell.collapsed .side-toggle .toggle-mark{display:block}
body[data-theme=gemini] .shell.collapsed .side-toggle svg{display:none}
body[data-theme=gemini] .shell.collapsed .side-toggle:hover .toggle-mark,
body[data-theme=gemini] .shell.collapsed .side-toggle:focus-visible .toggle-mark{display:none}
body[data-theme=gemini] .shell.collapsed .side-toggle:hover svg,
body[data-theme=gemini] .shell.collapsed .side-toggle:focus-visible svg{display:block}
body[data-theme=gemini] .shell.collapsed .side-toggle:hover{border-color:var(--line)}
body[data-theme=gemini] .topbar>*{flex:none}
/* the timestamp is the one topbar item that may lose characters rather than push the page wide:
   `.topbar>*{flex:none}` froze it at its full 190px, so at ~1280 the row overflowed the viewport by
   the tail of "live HH:MM" and the whole page gained a horizontal scrollbar. It ellipsises instead. */
body[data-theme=gemini] .topbar .meta{font-size:10.5px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:190px;flex:0 1 auto;min-width:0}
body[data-theme=gemini] .research-badge{margin-inline-start:auto;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);border:1px solid var(--hair);padding:2px 7px;white-space:nowrap}
body[data-theme=gemini] .topbar .meta{margin-inline-start:10px}
@media(max-width:900px){body[data-theme=gemini] .research-badge{display:none}}
body[data-theme=gemini] .side-open,body[data-theme=gemini] .brand-mobile{display:none}
body[data-theme=gemini] .main-col>main{max-width:1300px;width:100%;margin:0 auto;padding:12px 14px 24px}
body[data-theme=gemini] .deskfoot{border-top:1.5px solid var(--line);background:var(--panel2);padding:12px 16px;font-size:10.5px;line-height:1.6;color:var(--ink2);max-width:1300px;width:100%;margin:0 auto}
body[data-theme=gemini] .deskfoot b{color:var(--ink1)}
body[data-theme=gemini] .side-backdrop{display:none}
@media(max-width:900px){
  body[data-theme=gemini] .sidebar{position:fixed;inset-inline-start:0;top:0;z-index:50;width:236px !important;transform:translateX(-100%);transition:transform .18s ease}
  body[data-theme=gemini] .shell.drawer .sidebar{transform:translateX(0)}
  body[data-theme=gemini] .shell.drawer .side-nav a span,body[data-theme=gemini] .shell.drawer .side-head{display:inline}
  /* The brand is inline-FLEX, not inline: it now holds the desk mark next to the wordmark, and
     `display:inline` would collapse the gap and drop the vertical centring between them. */
  body[data-theme=gemini] .shell.drawer .side-top .brand{display:inline-flex}
  body[data-theme=gemini] .shell.drawer .side-top .brand-txt{display:inline}
  body[data-theme=gemini] .shell.drawer .side-nav a{justify-content:flex-start;padding:9px 14px;gap:11px}
  body[data-theme=gemini] .side-toggle{display:none}
  body[data-theme=gemini] .side-open{display:flex;background:transparent;border:1px solid var(--line);width:30px;height:30px;align-items:center;justify-content:center;flex:none;color:var(--ink1)}
  body[data-theme=gemini] .side-open svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2}
  body[data-theme=gemini] .brand-mobile{display:inline-block;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
  body[data-theme=gemini] .topbar #health,body[data-theme=gemini] .topbar #regime,body[data-theme=gemini] .topbar #georisk{display:none}
  /* the data timestamps are the first thing to go on a phone — they wrapped and doubled the
     header height. The same information is on every page footer. */
  body[data-theme=gemini] .topbar .meta{display:none}
  body[data-theme=gemini] .topbar{gap:6px;padding:6px 10px;min-height:44px}
  body[data-theme=gemini] .topbar .brand-mobile{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1 1 auto}
  body[data-theme=gemini] .topbar #mkt{max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body[data-theme=gemini] .acct-slot{margin-inline-start:auto}
  body[data-theme=gemini] .shell.drawer .side-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:45}
}
body[data-theme=gemini] .grid-board{grid-template-columns:1.05fr 1.5fr 1.15fr;gap:var(--gap)}
@media(max-width:1000px){body[data-theme=gemini] .grid-board{grid-template-columns:1fr}}
body[data-theme=gemini] header.app{background:var(--panel);padding:8px 12px;border:1.5px solid var(--line);gap:12px}
body[data-theme=gemini] .brand{font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
body[data-theme=gemini] .brand em{font-style:normal;color:var(--ink3);font-weight:500}
body[data-theme=gemini] nav.tabs{gap:0;border-inline-start:1px solid var(--hair);padding-inline-start:10px}
body[data-theme=gemini] nav.tabs a{padding:5px 10px;font-size:11.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);transition:.1s}
body[data-theme=gemini] nav.tabs a:hover{color:var(--ink1)}
body[data-theme=gemini] nav.tabs a.on{color:var(--ink1);background:var(--ink1);color:#f4f4f0}
body[data-theme=gemini] .card{background:var(--panel);border:1.5px solid var(--line);border-radius:0;padding:0;transition:.12s;overflow:hidden}
body[data-theme=gemini] .card>h2,body[data-theme=gemini] .card>.sub{padding-inline-start:12px;padding-inline-end:12px}
body[data-theme=gemini] .card>h2{padding-top:7px;padding-bottom:7px;border-bottom:1px solid var(--line);margin:0}
body[data-theme=gemini] .card>.sub{padding-top:8px}
body[data-theme=gemini] .card>*:not(h2):not(.sub){margin-inline-start:12px;margin-inline-end:12px}
/* first child gets a top inset too, UNLESS it's an h2/.sub (those bring their own top padding).
   Without this, any card whose first child is a bare div/p/table hugs the top border (the
   Desk Room house-view + persona cards were cramped for exactly this reason). Completes the
   12px child-inset rhythm (L/R + bottom already existed; top was the missing side). */
body[data-theme=gemini] .card>*:first-child:not(h2):not(.sub){margin-top:12px}
/* Only matches before enhanceTables() wraps tables in `.tscroll` (after which the table is a
   grandchild, and `.tscroll`'s own inherited 12px margins give the same result). Kept because that
   pre-hydration frame is real and would otherwise paint a full-bleed table for an instant. */
body[data-theme=gemini] .card>table{width:calc(100% - 24px)}
body[data-theme=gemini] .card>*:last-child{margin-bottom:12px}
body[data-theme=gemini] main>.card,body[data-theme=gemini] main>.two-col{margin-bottom:var(--gap)}
body[data-theme=gemini] .two-col{gap:var(--gap)}
body[data-theme=gemini] .cards>*{margin-bottom:var(--gap)}
body[data-theme=gemini] .card.clickable:hover{background:var(--panel2)}
body[data-theme=gemini] h2{font-size:13px;font-weight:700;letter-spacing:.13em;text-transform:uppercase}
body[data-theme=gemini] .sub{font-size:11.5px;color:var(--ink2);opacity:1;line-height:1.45}
body[data-theme=gemini] .cell{border:1px solid var(--hair);border-radius:0;padding:8px 9px;background:var(--panel2);transition:.1s}
body[data-theme=gemini] .cell:hover{border-color:var(--line);background:var(--panel)}
body[data-theme=gemini] .cell b{font-size:12px;font-weight:700}
body[data-theme=gemini] th{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);font-weight:600;padding:5px 7px;border-bottom:1.5px solid var(--line)}
body[data-theme=gemini] td{padding:6px 7px;border-bottom:1px dotted var(--hair);font-size:12px}
body[data-theme=gemini] tr:hover td{background:var(--panel2)}
body[data-theme=gemini] .pill{background:transparent;color:var(--ink1);border:1px solid var(--line);border-radius:0;font-weight:700;padding:2px 8px;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase}
body[data-theme=gemini] .pill.ok{background:var(--up);color:#fff;border-color:var(--up)}
body[data-theme=gemini] .pill.bad{background:var(--dn);color:#fff;border-color:var(--dn)}
body[data-theme=gemini] .pill.wait{background:var(--ink1);color:#f4f4f0;border-color:var(--ink1)}
body[data-theme=gemini] .tag{background:transparent;color:var(--ink2);border:1px solid var(--hair);border-radius:0;padding:1px 7px;font-weight:600;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase}
body[data-theme=gemini] .ranges button{background:var(--panel);border:1px solid var(--line);border-radius:0;padding:4px 11px;color:var(--ink1);font-weight:600;font-size:11.5px;transition:.1s;font-family:var(--font-body)}
body[data-theme=gemini] .ranges button:hover{background:var(--panel2)}
body[data-theme=gemini] .ranges button.on{background:var(--ink1);color:#f4f4f0}
body[data-theme=gemini] .tooltip{background:var(--ink1);color:#f4f4f0;border-radius:0;box-shadow:none;font-family:var(--font-body)}
body[data-theme=gemini] .tk-head{padding:12px 12px 0}
body[data-theme=gemini] .tk-head .sym{font-family:var(--font-pixel);font-size:36px;font-weight:700;letter-spacing:.02em}
body[data-theme=gemini] .tk-head .px{font-family:var(--font-body);font-size:30px;font-weight:700}
body[data-theme=gemini] .wire p{border-bottom:1px dotted var(--hair);padding:5px 0;font-size:11.5px}
body[data-theme=gemini] .crumb{color:var(--ink2);font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:11.5px}
body[data-theme=gemini] .crumb:hover{color:var(--ink1)}
body[data-theme=gemini] .statgrid{gap:1px;background:var(--hair);border:1px solid var(--line)}
body[data-theme=gemini] .stat{background:var(--panel);padding:9px 11px}
body[data-theme=gemini] .stat span{font-size:9.5px;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .stat b{font-size:15px}
/* key-facts grid */
body[data-theme=gemini] .facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1px;border:1px solid var(--line);background:var(--hair);border-radius:0;overflow:hidden}
body[data-theme=gemini] .fact{padding:9px 11px;border:none;background:var(--panel)}
body[data-theme=gemini] .fact span{display:block;font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink3);margin-bottom:2px}
body[data-theme=gemini] .fact b{font-size:14px;font-weight:700}
/* value screen — expandable four-model working */
body[data-theme=gemini] .fvrow .fvcaret{display:inline-block;color:var(--ink3);font-size:10.5px;transition:transform .15s ease;margin-inline-start:2px}
body[data-theme=gemini] .fvrow.exp .fvcaret{transform:rotate(90deg);color:var(--ink1)}
body[data-theme=gemini] .fvdetail{display:none}
body[data-theme=gemini] .fvdetail.open{display:table-row}
body[data-theme=gemini] .fvdetail>td{padding:0;border-bottom:1.5px solid var(--line)}
body[data-theme=gemini] .fvwork{padding:12px 14px;background:var(--panel2);animation:fadeIn .2s both}
body[data-theme=gemini] .fvhdr{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin-bottom:10px}
body[data-theme=gemini] .fvmethods{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--hair);border:1px solid var(--hair);margin-bottom:10px}
body[data-theme=gemini] .fvm{background:var(--panel);padding:9px 11px;display:flex;flex-direction:column;gap:2px}
body[data-theme=gemini] .fvm span{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .fvm b{font-size:15px;font-weight:700}
body[data-theme=gemini] .fvm i{font-size:11.5px;font-style:normal;font-weight:600}
body[data-theme=gemini] .fvline{font-size:11.5px;color:var(--ink2);padding:3px 0;border-top:1px dotted var(--hair)}
body[data-theme=gemini] .fvline span{display:inline-block;min-width:110px;text-transform:uppercase;font-size:9.5px;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .fvnote{font-size:11.5px;line-height:1.55;color:var(--ink2);margin-top:10px}
body[data-theme=gemini] .fvnote a{color:var(--ink1);text-decoration:underline}
/* watchlist star */
body[data-theme=gemini] .starbtn{background:transparent;border:1.5px solid var(--line);width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;flex:none;color:var(--ink3);padding:0}
body[data-theme=gemini] .starbtn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round}
body[data-theme=gemini] .starbtn:hover{color:var(--ink1)}
body[data-theme=gemini] .starbtn.on{color:var(--ink1)}
body[data-theme=gemini] .starbtn.on svg{fill:var(--ink1);stroke:var(--ink1)}
/* ============ ACCOUNTS + ONBOARDING ============ */
body[data-theme=gemini] .acct-slot{display:flex;align-items:center}
body[data-theme=gemini] .acct-signin{background:var(--ink1);color:#f4f4f0;border:1.5px solid var(--ink1);padding:4px 12px;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;font-family:var(--font-body)}
body[data-theme=gemini] .acct-btn{width:28px;height:28px;background:var(--ink1);color:#f4f4f0;border:1.5px solid var(--ink1);font-weight:800;font-size:12px;font-family:var(--font-body)}
body[data-theme=gemini] .acct-slot{position:relative}
body[data-theme=gemini] .acct-menu{position:absolute;top:34px;inset-inline-end:0;background:var(--panel);border:1.5px solid var(--line);min-width:200px;z-index:80;display:flex;flex-direction:column}
body[data-theme=gemini] .acct-menu[hidden]{display:none!important}
body[data-theme=gemini] .acct-menu{min-width:250px}
body[data-theme=gemini] .acct-id{display:flex;gap:10px;align-items:center;padding:12px}
body[data-theme=gemini] .acct-av{width:30px;height:30px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--ink1);color:#f4f4f0;font-weight:800;font-size:12px}
body[data-theme=gemini] .acct-email{padding:0;font-size:11px;color:var(--ink1);word-break:break-all;border:none;font-weight:600}
body[data-theme=gemini] .acct-plan{font-size:10.5px;color:var(--ink3);margin-top:2px}
body[data-theme=gemini] .acct-sep{height:1px;background:var(--hair)}
body[data-theme=gemini] .acct-menu button{display:flex;align-items:center;justify-content:space-between;gap:10px}
body[data-theme=gemini] .acct-chip{font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;border:1px solid var(--hair);padding:2px 6px;color:var(--ink3)}
body[data-theme=gemini] .acct-chip.on{background:var(--ink1);color:var(--panel);border-color:var(--ink1)}
body[data-theme=gemini] .plan-badge{font-size:10px;text-transform:uppercase;letter-spacing:.09em;border:1px solid var(--line);padding:4px 9px;color:var(--ink2)}
@media(max-width:900px){body[data-theme=gemini] .plan-badge{display:none}}
body[data-theme=gemini] .acct-menu button{background:transparent;border:none;text-align:start;padding:9px 12px;font-size:11.5px;font-weight:600;color:var(--ink1);font-family:var(--font-body)}
body[data-theme=gemini] .acct-menu button:hover{background:var(--panel2)}
/* auth modal */
body[data-theme=gemini] .authbox{position:fixed;inset:0;background:rgba(10,10,10,.45);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:9vh 16px 16px}
body[data-theme=gemini] .authpanel{background:var(--panel);border:1.5px solid var(--line);width:100%;max-width:400px;padding:18px}
body[data-theme=gemini] .auth-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
body[data-theme=gemini] .auth-head b{font-size:13px;letter-spacing:.1em;text-transform:uppercase}
body[data-theme=gemini] .auth-head em{font-style:normal;color:var(--ink3)}
body[data-theme=gemini] .auth-x{background:transparent;border:1px solid var(--line);width:24px;height:24px;font-size:11px}
body[data-theme=gemini] .auth-tabs{display:flex;margin-bottom:14px;border:1px solid var(--line)}
body[data-theme=gemini] .auth-tabs button{flex:1;background:transparent;border:none;padding:8px;font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink3);font-family:var(--font-body)}
body[data-theme=gemini] .auth-tabs button.on{background:var(--ink1);color:#f4f4f0}
body[data-theme=gemini] .authpanel label{display:block;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin-bottom:10px}
body[data-theme=gemini] .authpanel input{display:block;width:100%;margin-top:4px;padding:9px 10px;border:1.5px solid var(--line);background:var(--panel);font:inherit;font-size:13px;color:var(--ink1)}
body[data-theme=gemini] .authpanel input:focus{outline:2px solid var(--ink1);outline-offset:-1px}
body[data-theme=gemini] .auth-go{width:100%;background:var(--ink1);color:#f4f4f0;border:1.5px solid var(--ink1);padding:10px;font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin-top:2px;font-family:var(--font-body)}
body[data-theme=gemini] .auth-go:disabled{opacity:.55}
body[data-theme=gemini] .authmsg{font-size:11.5px;color:var(--up);margin-top:10px;line-height:1.5;min-height:1em}
body[data-theme=gemini] .authmsg.bad{color:var(--dn)}
body[data-theme=gemini] .auth-foot{margin-top:10px;font-size:11px}
body[data-theme=gemini] .auth-foot a{text-decoration:underline;cursor:pointer;color:var(--ink2)}
body[data-theme=gemini] .auth-legal{margin-top:12px;padding-top:10px;border-top:1px solid var(--hair);font-size:9.5px;color:var(--ink3);line-height:1.5}
body[data-theme=gemini] .auth-legal a{color:var(--ink2);text-decoration:underline}
/* onboarding wizard */
body[data-theme=gemini] .wizbox{position:fixed;z-index:110}
body[data-theme=gemini] .wizbox.center{inset:0;background:rgba(10,10,10,.45);display:flex;align-items:center;justify-content:center;padding:16px}
body[data-theme=gemini] .wizbox.corner{inset-inline-end:18px;bottom:18px;max-width:400px}
body[data-theme=gemini] .wizcard{background:var(--panel);border:1.5px solid var(--line);padding:18px;width:100%;max-width:440px;box-shadow:6px 6px 0 rgba(10,10,10,.15)}
body[data-theme=gemini] .wiz-prog{height:4px;background:var(--line2);margin-bottom:14px}
body[data-theme=gemini] .wiz-prog span{display:block;height:100%;background:var(--ink1);transition:width .25s ease}
body[data-theme=gemini] .wiz-title{display:block;font-size:15px;font-weight:800;margin-bottom:8px;line-height:1.35}
body[data-theme=gemini] .wiz-body{font-size:12px;line-height:1.6;color:var(--ink2);margin-bottom:6px}
body[data-theme=gemini] .wiz-opts{display:flex;flex-direction:column;gap:6px;margin:10px 0 4px}
body[data-theme=gemini] .wiz-opt{text-align:start;background:var(--panel);border:1.5px solid var(--hair);padding:10px 12px;font-size:12.5px;font-weight:600;color:var(--ink1);font-family:var(--font-body);transition:.1s}
body[data-theme=gemini] .wiz-opt:hover{border-color:var(--line)}
body[data-theme=gemini] .wiz-opt.on{border-color:var(--ink1);background:var(--ink1);color:#f4f4f0}
body[data-theme=gemini] .wiz-nav{display:flex;align-items:center;gap:8px;margin-top:14px}
body[data-theme=gemini] .wiz-next{margin-inline-start:auto;background:var(--ink1);color:#f4f4f0;border:1.5px solid var(--ink1);padding:8px 18px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;font-family:var(--font-body)}
body[data-theme=gemini] .wiz-back,body[data-theme=gemini] .wiz-skip{background:transparent;border:1px solid var(--hair);padding:8px 12px;font-size:10.5px;color:var(--ink3);font-family:var(--font-body)}
@media(max-width:720px){body[data-theme=gemini] .wizbox.corner{inset-inline-start:12px;inset-inline-end:12px;bottom:12px;max-width:none}}

/* "At a glance" explainability tiles */
body[data-theme=gemini] .glance-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1px;background:var(--hair);border:1px solid var(--hair)}
body[data-theme=gemini] .glance-tile{background:var(--panel);padding:11px 13px}
body[data-theme=gemini] .glance-q{display:block;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin-bottom:4px}
body[data-theme=gemini] .glance-tile>b{font-size:14px;font-weight:700;display:block;margin-bottom:3px;line-height:1.3}
body[data-theme=gemini] .yearbars{display:flex;gap:7px;align-items:flex-end;height:76px;margin-top:4px}
body[data-theme=gemini] .yb{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
body[data-theme=gemini] .ybbar{width:60%;min-height:3px}
body[data-theme=gemini] .ybbar.up{background:var(--up)}
body[data-theme=gemini] .ybbar.dn{background:var(--dn)}
body[data-theme=gemini] .yb i{font-size:8.5px;font-style:normal;font-weight:700;margin-top:3px}
body[data-theme=gemini] .yb em{font-size:8.5px;font-style:normal;color:var(--ink3)}
/* Research library rows */
body[data-theme=gemini] .rdoc{padding:10px 0;border-bottom:1px dotted var(--hair)}
body[data-theme=gemini] .rdoc:last-child{border-bottom:none}
body[data-theme=gemini] .rdoc-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
body[data-theme=gemini] .rdoc-src{font-size:11.5px;font-weight:600;color:var(--ink2)}
body[data-theme=gemini] .rdoc-digest{font-size:12px;line-height:1.5;color:var(--ink1)}
body[data-theme=gemini] .qabadge{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:1px 6px;border:1.5px solid var(--line)}
body[data-theme=gemini] .qabadge.ok{background:var(--up);color:#fff;border-color:var(--up)}
body[data-theme=gemini] .qabadge.warn{background:var(--dn);color:#fff;border-color:var(--dn)}
/* The Desk Room — AI analyst personas */
body[data-theme=gemini] .room-house{border:1.5px solid var(--line);border-inline-start:4px solid var(--ink1);background:var(--panel2)}
body[data-theme=gemini] .memo-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px;flex-wrap:wrap}
body[data-theme=gemini] .room-house>.memo-top{margin-bottom:10px}
body[data-theme=gemini] .room-house .hv-summary{font-size:13.5px;line-height:1.65;margin:0 0 14px}
body[data-theme=gemini] .conv{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);display:flex;align-items:center;gap:6px}
body[data-theme=gemini] .cvmeter{display:inline-flex;gap:2px}
body[data-theme=gemini] .cvseg{width:14px;height:8px;border:1px solid var(--line);background:transparent}
body[data-theme=gemini] .cvseg.on{background:var(--ink1)}
body[data-theme=gemini] .room-facts{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--hair);border:1px solid var(--hair);margin-top:2px}
body[data-theme=gemini] .room-facts>div{background:var(--panel);padding:11px 13px}
body[data-theme=gemini] .room-facts span{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);margin-bottom:5px}
body[data-theme=gemini] .room-facts b{font-weight:600;font-size:12.5px;line-height:1.5}
body[data-theme=gemini] .phead{display:flex;align-items:center;gap:9px}
body[data-theme=gemini] .pav{width:30px;height:30px;flex:none;border:1.5px solid var(--line);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:11.5px;background:var(--panel)}
body[data-theme=gemini] .phead b{display:block;font-size:13px}
body[data-theme=gemini] .prole{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .room-memo.bull{border-inline-start:4px solid var(--up)}
body[data-theme=gemini] .room-memo.bear{border-inline-start:4px solid var(--dn)}
body[data-theme=gemini] .room-ul{margin:8px 0 0 16px;padding:0}
body[data-theme=gemini] .room-ul li{font-size:11.5px;line-height:1.5;margin-bottom:4px;color:var(--ink2)}
body[data-theme=gemini] .stance{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;font-weight:700;padding:2px 8px;border:1.5px solid var(--line)}
body[data-theme=gemini] .stance.up{background:var(--up);color:#fff;border-color:var(--up)}
body[data-theme=gemini] .stance.dn{background:var(--dn);color:#fff;border-color:var(--dn)}
@media(max-width:720px){body[data-theme=gemini] .room-facts{grid-template-columns:1fr}}
/* 5-item summary strip — top of every ticker page */
body[data-theme=gemini] .sumstrip{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--hair);border:1.5px solid var(--line);margin:8px 0 12px}
/* 4-tile variant. MUST be a class, never an inline style: an inline grid-template-columns beats
   the stylesheet, so the mobile rule below can't override it and the strip stays 4-across at 375px. */
body[data-theme=gemini] .sumstrip.s4{grid-template-columns:repeat(4,1fr)}
body[data-theme=gemini] .sumtile{background:var(--panel);padding:10px 12px;display:flex;flex-direction:column;gap:2px;min-width:0}
body[data-theme=gemini] .sumtile .sk{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3)}
body[data-theme=gemini] .sumtile>b{font-size:14px;font-weight:700;line-height:1.25;overflow-wrap:anywhere}
body[data-theme=gemini] .sumtile>b.up{color:var(--up)}
body[data-theme=gemini] .sumtile>b.dn{color:var(--dn)}
body[data-theme=gemini] .sumtile>i{font-size:10px;font-style:normal;color:var(--ink3);line-height:1.35}
@media(max-width:720px){body[data-theme=gemini] .sumstrip,body[data-theme=gemini] .sumstrip.s4{grid-template-columns:1fr 1fr}body[data-theme=gemini] .sumstrip .sumtile:nth-child(5){grid-column:1/-1}}
/* Today — your watchlist mini table + "yours" badge on radar names */
body[data-theme=gemini] .wl-mini td{padding:9px 13px}
body[data-theme=gemini] .wbadge{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--accent,#b8860b);border:1px solid var(--accent,#b8860b);padding:1px 5px;margin-inline-start:4px;white-space:nowrap}
/* private per-ticker note */
body[data-theme=gemini] .tknote{width:100%;min-height:96px;resize:vertical;background:var(--panel2,var(--panel));border:1.5px solid var(--line);color:var(--ink1);font:inherit;font-size:13px;line-height:1.55;padding:11px 13px}
body[data-theme=gemini] .tknote:focus{outline:none;border-color:var(--ink2)}
body[data-theme=gemini] .tknote-bar{display:flex;align-items:center;gap:12px;margin-top:10px}
body[data-theme=gemini] .note-save{background:var(--ink1);color:var(--panel);border:1.5px solid var(--ink1);font:inherit;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:8px 16px;cursor:pointer}
body[data-theme=gemini] .note-save:hover{opacity:.85}
/* track-record clock (Scores page) */
body[data-theme=gemini] .trackclock{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--hair);border:1.5px solid var(--line);margin:8px 0 12px}
body[data-theme=gemini] .clk-tile{background:var(--panel);padding:11px 13px;display:flex;flex-direction:column;gap:2px}
body[data-theme=gemini] .clk-tile>span{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3)}
body[data-theme=gemini] .clk-tile>b{font-size:19px;font-weight:700;line-height:1.1;font-family:"Pixelify Sans",var(--mono,monospace)}
body[data-theme=gemini] .clk-tile>i{font-size:10px;font-style:normal;color:var(--ink3);line-height:1.35}
@media(max-width:720px){body[data-theme=gemini] .trackclock{grid-template-columns:1fr 1fr}}
/* legal pages */
body[data-theme=gemini] .legal-tabs{display:flex;gap:1px;background:var(--hair);border:1.5px solid var(--line);margin-bottom:12px;flex-wrap:wrap}
body[data-theme=gemini] .legal-tabs a{flex:1;text-align:center;padding:10px 12px;background:var(--panel);color:var(--ink2);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
body[data-theme=gemini] .legal-tabs a.on{background:var(--ink1);color:var(--panel)}
body[data-theme=gemini] .legal-doc{max-width:820px}
body[data-theme=gemini] .legal-intro{font-size:13.5px;line-height:1.65;color:var(--ink2);margin-bottom:18px;border-inline-start:4px solid var(--line);padding-inline-start:12px}
body[data-theme=gemini] .legal-doc h3{font-size:13.5px;font-weight:700;margin:18px 0 5px;color:var(--ink1)}
body[data-theme=gemini] .legal-doc p{font-size:12.5px;line-height:1.65;color:var(--ink2)}
/* footer legal links */
body[data-theme=gemini] .foot-links{display:block;margin-top:8px}
body[data-theme=gemini] .foot-links a{color:var(--ink2);text-decoration:underline;margin-inline-end:4px}
/* portfolio tracker */
body[data-theme=gemini] .ph-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
body[data-theme=gemini] .ph-in{flex:1;min-width:110px;background:var(--panel2,var(--panel));border:1.5px solid var(--line);color:var(--ink1);font:inherit;font-size:13px;padding:9px 11px}
body[data-theme=gemini] .ph-in:focus{outline:none;border-color:var(--ink2)}
body[data-theme=gemini] .ph-del{background:transparent;border:1.5px solid var(--line);color:var(--ink3);font-size:12px;line-height:1;padding:4px 8px;cursor:pointer}
body[data-theme=gemini] .ph-del:hover{border-color:var(--dn);color:var(--dn)}
body[data-theme=gemini] .ph-form tfoot td,body[data-theme=gemini] table tfoot td{border-top:1.5px solid var(--line);padding-top:9px}
body[data-theme=gemini] .ph-bars{display:flex;flex-direction:column;gap:6px}
body[data-theme=gemini] .ph-bar-row{display:flex;align-items:center;gap:10px}
body[data-theme=gemini] .ph-bar-lbl{width:64px;font-weight:700;font-size:12px;flex:none}
body[data-theme=gemini] .ph-bar-track{flex:1;height:14px;background:var(--hair);border:1px solid var(--line)}
body[data-theme=gemini] .ph-bar-fill{display:block;height:100%;background:var(--ink1)}
body[data-theme=gemini] .ph-bar-val{width:42px;text-align:end;flex:none;font-size:12px}
/* settings: digest + followed brokers */
body[data-theme=gemini] .seg-opts{display:flex;gap:1px;background:var(--hair);border:1.5px solid var(--line);width:fit-content}
body[data-theme=gemini] .seg-opt{background:var(--panel);color:var(--ink2);border:none;font:inherit;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:8px 18px;cursor:pointer}
body[data-theme=gemini] .seg-opt.on{background:var(--ink1);color:var(--panel)}
body[data-theme=gemini] .chk-row{display:flex;align-items:center;gap:9px;padding:6px 0;font-size:13px;color:var(--ink2);cursor:pointer}
body[data-theme=gemini] .chk-row input{width:16px;height:16px;accent-color:var(--ink1)}
body[data-theme=gemini] .follow-grid{display:flex;flex-wrap:wrap;gap:8px}
body[data-theme=gemini] .follow-chip{display:inline-block;text-decoration:none;background:var(--panel2,var(--panel));border:1.5px solid var(--line);color:var(--ink2);font:inherit;font-size:12px;font-weight:600;padding:7px 13px;cursor:pointer}
body[data-theme=gemini] .follow-chip.on{background:var(--ink1);color:var(--panel);border-color:var(--ink1)}
body[data-theme=gemini] .follow-chip:hover{border-color:var(--ink2)}
/* "Watch the desk analyse" tile + cinematic replay overlay */
/* prominent BLACK "run the desk" bar — the hero CTA that gates the analysis */
body[data-theme=gemini] .run-desk{display:flex;align-items:center;gap:15px;width:100%;text-align:start;background:var(--ink1);border:1.5px solid var(--ink1);padding:15px 17px;margin:10px 0 14px;cursor:pointer;font:inherit;color:#f4f4f0}
body[data-theme=gemini] .run-desk:hover{background:#000}
body[data-theme=gemini] .run-desk:active{transform:scale(.995)}
body[data-theme=gemini] .run-ico{flex:none;width:38px;height:38px;border:1.5px solid rgba(244,244,240,.6);display:flex;align-items:center;justify-content:center;font-size:14px;color:#f4f4f0}
body[data-theme=gemini] .run-desk:hover .run-ico{border-color:#f4f4f0}
body[data-theme=gemini] .run-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
body[data-theme=gemini] .run-txt b{font-size:15px;font-weight:700;letter-spacing:.01em}
body[data-theme=gemini] .run-txt i{font-style:normal;font-size:11.5px;color:rgba(244,244,240,.7);line-height:1.45}
body[data-theme=gemini] .run-meta{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:5px;text-align:end}
body[data-theme=gemini] .run-last{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:rgba(244,244,240,.55)}
body[data-theme=gemini] .run-go{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#f4f4f0;border:1.5px solid rgba(244,244,240,.6);padding:5px 12px}
body[data-theme=gemini] .run-desk:hover .run-go{border-color:#f4f4f0;background:rgba(244,244,240,.1)}
@media(max-width:560px){body[data-theme=gemini] .run-txt i{display:none}body[data-theme=gemini] .run-meta{align-items:flex-end}}
body[data-theme=gemini] .replay-overlay{position:fixed;inset:0;z-index:200;background:rgba(0,0,0,.62);display:flex;align-items:center;justify-content:center;padding:20px;animation:rpFade .18s ease}
body[data-theme=gemini] .replay-box{width:100%;max-width:720px;max-height:90vh;background:var(--panel);border:1.5px solid var(--line);display:flex;flex-direction:column;box-shadow:0 18px 60px rgba(0,0,0,.4)}
body[data-theme=gemini] .replay-head{display:flex;align-items:center;gap:12px;padding:11px 14px;border-bottom:1.5px solid var(--line)}
body[data-theme=gemini] .replay-kicker{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink3);white-space:nowrap}
body[data-theme=gemini] .replay-dots{flex:1;display:flex;gap:5px;align-items:center;flex-wrap:wrap}
body[data-theme=gemini] .rp-dot{width:16px;height:4px;background:var(--hair);cursor:pointer}
body[data-theme=gemini] .rp-dot.on{background:var(--ink1)}
body[data-theme=gemini] .replay-x{flex:none;background:transparent;border:none;color:var(--ink3);font-size:15px;cursor:pointer;line-height:1}
body[data-theme=gemini] .replay-x:hover{color:var(--ink1)}
body[data-theme=gemini] .replay-body{padding:20px;overflow-y:auto;min-height:280px}
body[data-theme=gemini] .replay-stage{border-inline-start:4px solid var(--line);padding-inline-start:16px}
body[data-theme=gemini] .replay-stage.accent-up{border-left-color:var(--up)}
body[data-theme=gemini] .replay-stage.accent-dn{border-left-color:var(--dn)}
body[data-theme=gemini] .rp-persona{display:flex;align-items:center;gap:11px;margin-bottom:14px}
body[data-theme=gemini] .rp-av{flex:none;width:38px;height:38px;border:1.5px solid var(--line);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;background:var(--panel2,var(--panel))}
body[data-theme=gemini] .rp-persona b{display:block;font-size:16px;line-height:1.1}
body[data-theme=gemini] .rp-role{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .rp-step{margin-inline-start:auto;font-size:10px;color:var(--ink3);white-space:nowrap}
body[data-theme=gemini] .rp-blocks{display:flex;flex-direction:column;gap:10px}
body[data-theme=gemini] .rp-block{opacity:0;animation:rpUp .5s ease forwards}
body[data-theme=gemini] .rp-block p{font-size:13.5px;line-height:1.6;color:var(--ink1)}
body[data-theme=gemini] .rp-lead{font-size:14.5px!important;line-height:1.6}
body[data-theme=gemini] .rp-facts{font-size:12px;color:var(--ink2);background:var(--panel2,var(--panel));border:1px solid var(--hair);padding:8px 11px}
body[data-theme=gemini] .rp-facts .cvmeter{display:inline-flex;gap:2px;vertical-align:middle;margin:0 4px}
body[data-theme=gemini] .rp-tag{font-size:11px;color:var(--ink3);text-transform:uppercase;letter-spacing:.04em}
body[data-theme=gemini] .rp-break{font-size:12.5px;line-height:1.5;color:var(--ink2);border-inline-start:2px solid var(--hair);padding-inline-start:10px}
body[data-theme=gemini] .rp-ul{margin:2px 0 0 16px;padding:0}
body[data-theme=gemini] .rp-ul li{font-size:12.5px;line-height:1.55;margin-bottom:5px;color:var(--ink2)}
body[data-theme=gemini] .replay-ctrl{display:flex;gap:1px;border-top:1.5px solid var(--line);background:var(--hair)}
body[data-theme=gemini] .rp-btn{flex:1;background:var(--panel);border:none;padding:11px;font:inherit;font-size:12px;font-weight:600;color:var(--ink1);cursor:pointer}
body[data-theme=gemini] .rp-btn:hover{background:var(--panel2,var(--panel))}
body[data-theme=gemini] .rp-play{font-weight:700}
@keyframes rpUp{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
@keyframes rpFade{from{opacity:0}to{opacity:1}}
body[data-theme=gemini] .replay-head-r{margin-inline-start:auto;display:flex;align-items:center;gap:10px}
body[data-theme=gemini] .rp-skip{background:transparent;border:1.5px solid var(--line);color:var(--ink2);font:inherit;font-size:11px;font-weight:700;padding:4px 10px;cursor:pointer}
body[data-theme=gemini] .rp-skip:hover{border-color:var(--ink2);color:var(--ink1)}
/* phase 1 — the "running the desk" loader */
body[data-theme=gemini] .rp-load{padding:14px 4px}
body[data-theme=gemini] .rp-load-title{font-size:17px;font-weight:700}
body[data-theme=gemini] .rp-load-sub{font-size:12px;color:var(--ink3);margin:4px 0 20px;line-height:1.5}
body[data-theme=gemini] .rp-prog{height:10px;background:var(--hair);border:1.5px solid var(--line);overflow:hidden}
body[data-theme=gemini] .rp-prog-fill{height:100%;width:0;background:var(--ink1);transition:width .12s linear}
body[data-theme=gemini] .rp-pct{font-family:"Pixelify Sans",var(--mono,monospace);font-size:34px;font-weight:700;line-height:1;margin:12px 0 20px}
body[data-theme=gemini] .rp-pct span{font-size:18px;color:var(--ink3);margin-inline-start:2px}
body[data-theme=gemini] .rp-steps{display:flex;flex-direction:column;gap:8px;min-height:170px}
body[data-theme=gemini] .rp-step-line{display:flex;align-items:baseline;gap:9px;font-size:12.5px;color:var(--ink1);animation:rpUp .32s ease}
body[data-theme=gemini] .rp-step-mk{color:var(--accent,#b8860b);font-weight:700;flex:none}
body[data-theme=gemini] .rp-step-tx{line-height:1.45}
body[data-theme=gemini] .rp-step-line.did .rp-step-mk{color:var(--up)}
body[data-theme=gemini] .rp-step-line.did .rp-step-mk::before{content:"✓ ";}
body[data-theme=gemini] .rp-step-line.did .rp-step-tx{color:var(--ink3)}
/* phase 2 — the split-desk reveal */
body[data-theme=gemini] .rp-reveal{animation:rpFade .25s ease}
body[data-theme=gemini] .rp-reveal-head{margin-bottom:12px}
body[data-theme=gemini] .rp-reveal-head b{font-size:16px;display:block}
body[data-theme=gemini] .rp-reveal-head span{font-size:11px;color:var(--ink3)}
body[data-theme=gemini] .rp-desk{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--hair);border:1px solid var(--hair)}
body[data-theme=gemini] .rp-panel{background:var(--panel);padding:11px 13px;border-top:3px solid var(--line)}
body[data-theme=gemini] .rp-panel.accent-up{border-top-color:var(--up)}
body[data-theme=gemini] .rp-panel.accent-dn{border-top-color:var(--dn)}
body[data-theme=gemini] .rp-panel-head{display:flex;align-items:center;gap:9px;margin-bottom:7px}
body[data-theme=gemini] .rp-av.sm{width:28px;height:28px;font-size:11px}
body[data-theme=gemini] .rp-panel-head b{display:block;font-size:13px;line-height:1.1}
body[data-theme=gemini] .rp-panel-read{font-size:11.5px;line-height:1.5;color:var(--ink2);margin:0}
body[data-theme=gemini] .rp-panel .rp-facts{margin-top:7px;font-size:11px;padding:6px 8px}
body[data-theme=gemini] .rp-panel .rp-ul{margin:6px 0 0 15px;padding:0}
body[data-theme=gemini] .rp-panel .rp-ul li{font-size:11px;line-height:1.45;margin-bottom:3px;color:var(--ink2)}
/* the highlighted Chair verdict */
body[data-theme=gemini] .rp-chair{border:1.5px solid var(--ink1);border-inline-start:5px solid var(--ink1);background:var(--panel2,var(--panel));padding:14px 16px;margin-top:12px}
body[data-theme=gemini] .rp-chair-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
body[data-theme=gemini] .rp-chair-tag{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}
body[data-theme=gemini] .rp-chair-summary{font-size:14px;line-height:1.6;margin:0 0 14px}
/* the clearer conviction meter */
body[data-theme=gemini] .cvmeter2{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1px;background:var(--hair);border:1.5px solid var(--line)}
body[data-theme=gemini] .cvm{background:var(--panel);text-align:center;padding:8px 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .cvm.act{color:#fff}
body[data-theme=gemini] .cvm.act.lvl-low{background:var(--dn)}
body[data-theme=gemini] .cvm.act.lvl-med{background:var(--ink1)}
body[data-theme=gemini] .cvm.act.lvl-high{background:var(--up)}
body[data-theme=gemini] .cvcap{font-size:10.5px;color:var(--ink3);margin-top:5px;text-transform:uppercase;letter-spacing:.04em}
body[data-theme=gemini] .rp-chair-facts{display:flex;flex-direction:column;gap:9px;margin-top:14px}
body[data-theme=gemini] .rp-chair-facts>div>span{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);margin-bottom:3px}
body[data-theme=gemini] .rp-chair-facts>div>b{font-weight:600;font-size:12.5px;line-height:1.5}
body[data-theme=gemini] .rp-reveal-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .rp-reveal-foot>span:first-child{font-size:11px;color:var(--ink3);line-height:1.5;flex:1;min-width:200px}
body[data-theme=gemini] .rp-foot-btns{display:flex;gap:8px}
body[data-theme=gemini] .rp-btn2{background:var(--panel);border:1.5px solid var(--line);color:var(--ink1);font:inherit;font-size:11.5px;font-weight:700;padding:7px 13px;cursor:pointer}
body[data-theme=gemini] .rp-btn2:hover{background:var(--panel2,var(--panel));border-color:var(--ink2)}
/* strategy-run reveal — the #1 strategy highlighted */
body[data-theme=gemini] .rp-strat-top{display:flex;align-items:flex-start;gap:13px;border:1.5px solid var(--ink1);border-inline-start:5px solid var(--up);background:var(--panel2,var(--panel));padding:13px 15px}
body[data-theme=gemini] .rp-strat-rank{flex:none;font-family:"Pixelify Sans",var(--mono,monospace);font-size:26px;font-weight:700;line-height:1;color:var(--up)}
body[data-theme=gemini] .rp-strat-top b{font-size:15px}
@media(max-width:720px){body[data-theme=gemini] .replay-body{padding:15px;min-height:320px}body[data-theme=gemini] .replay-kicker{display:none}body[data-theme=gemini] .rp-desk{grid-template-columns:1fr}}
/* The Signal Stack — every lens in one grammar: lean · conviction · why */
body[data-theme=gemini] .sigstack{padding:0}
body[data-theme=gemini] .sig-row{display:grid;grid-template-columns:132px 116px 118px 1fr;gap:12px;align-items:baseline;padding:11px 15px;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .sig-lens{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink2)}
body[data-theme=gemini] .sig-chip{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;border:1.5px solid var(--line);padding:3px 8px;justify-self:start;white-space:nowrap}
body[data-theme=gemini] .sig-chip.up{color:var(--up);border-color:var(--up)}
body[data-theme=gemini] .sig-chip.dn{color:var(--dn);border-color:var(--dn)}
body[data-theme=gemini] .sig-chip.lock{background:var(--ink1);color:#f4f4f0;border-color:var(--ink1)}
body[data-theme=gemini] .sig-conv{font-size:11px;color:var(--ink3);white-space:nowrap}
body[data-theme=gemini] .sig-note{font-size:12.5px;color:var(--ink2);line-height:1.5;min-width:0}
body[data-theme=gemini] .sig-row.locked{cursor:pointer}
body[data-theme=gemini] .sig-row.locked .sig-note{color:var(--ink3)}
body[data-theme=gemini] .sig-conf{display:grid;grid-template-columns:132px 1fr;gap:12px;align-items:baseline;padding:12px 15px;background:var(--panel2,var(--panel))}
body[data-theme=gemini] .sig-conf .sig-note{font-size:13px;color:var(--ink1)}
body[data-theme=gemini] .sig-locknote{color:var(--ink3);font-size:12px}
@media(hover:hover){body[data-theme=gemini] .sig-row.locked:hover{background:var(--hair)}}
body[data-theme=gemini] .sig-row.locked:active{transform:scale(.995)}
@media(max-width:720px){
  body[data-theme=gemini] .sig-row{grid-template-columns:1fr auto;gap:5px 10px;padding:11px 13px}
  body[data-theme=gemini] .sig-chip{grid-row:1;grid-column:2;justify-self:end}
  body[data-theme=gemini] .sig-conv{grid-row:2;grid-column:2;text-align:end}
  body[data-theme=gemini] .sig-note{grid-row:2;grid-column:1}
  body[data-theme=gemini] .sig-conf{grid-template-columns:1fr;gap:4px;padding:12px 13px}
}
/* Astro page — the verdict card leads, because the null IS the finding */
body[data-theme=gemini] .astro-verdict{border:1.5px solid var(--ink1);border-inline-start:5px solid var(--dn)}
body[data-theme=gemini] .av-top{display:flex;align-items:center;gap:10px;margin-bottom:10px}
body[data-theme=gemini] .av-tag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3)}
body[data-theme=gemini] .av-top .pill{margin-inline-start:auto}
body[data-theme=gemini] .av-lede{font-size:14.5px;line-height:1.6;color:var(--ink1);margin:0 0 14px}
body[data-theme=gemini] .av-nums{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--hair);border:1.5px solid var(--line);margin-bottom:14px}
body[data-theme=gemini] .av-nums>div{background:var(--panel);padding:12px 14px;display:flex;flex-direction:column;gap:3px}
body[data-theme=gemini] .av-nums span{font-family:"Pixelify Sans",var(--mono,monospace);font-size:30px;font-weight:700;line-height:1}
body[data-theme=gemini] .av-nums span.dn{color:var(--dn)}
body[data-theme=gemini] .av-nums i{font-style:normal;font-size:11px;color:var(--ink3);line-height:1.4}
body[data-theme=gemini] .av-read{font-size:13px;line-height:1.65;color:var(--ink2);margin:0 0 12px}
body[data-theme=gemini] .av-foot{font-size:12px;line-height:1.55;color:var(--ink3);border-top:1px solid var(--hair);padding-top:10px}
body[data-theme=gemini] .av-foot a{color:var(--accent)}
@media(max-width:720px){body[data-theme=gemini] .av-nums{grid-template-columns:1fr}body[data-theme=gemini] .av-nums span{font-size:24px}}
/* Themed ticker combobox (replaces the unstyleable native <datalist>) */
body[data-theme=gemini] .combo-pop{position:absolute;z-index:1200;max-height:280px;overflow-y:auto;background:var(--panel);border:1.5px solid var(--ink1);box-shadow:4px 4px 0 rgba(0,0,0,.12)}
body[data-theme=gemini] .combo-opt{display:flex;align-items:baseline;gap:9px;padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .combo-opt:last-child{border-bottom:none}
body[data-theme=gemini] .combo-opt>b{font-size:13px;min-width:52px}
body[data-theme=gemini] .combo-opt>span{font-size:11.5px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body[data-theme=gemini] .combo-opt.on,body[data-theme=gemini] .combo-opt:hover{background:var(--ink1);color:#f4f4f0}
body[data-theme=gemini] .combo-opt.on>span,body[data-theme=gemini] .combo-opt:hover>span{color:#c9c9c2}
body[data-theme=gemini] .combo-empty{padding:9px 12px;font-size:12px;color:var(--ink3)}
/* Macro — the measured sector drivers */
body[data-theme=gemini] .mf-chip{display:inline-block;font-size:10.5px;font-weight:700;border:1.5px solid var(--line);padding:2px 7px;margin:2px 4px 2px 0;white-space:nowrap}
body[data-theme=gemini] .mf-chip.up{color:var(--up);border-color:var(--up)}
body[data-theme=gemini] .mf-chip.dn{color:var(--dn);border-color:var(--dn)}
body[data-theme=gemini] .tk-driver{margin-top:6px;padding-top:6px;border-top:1px solid var(--hair);line-height:1.5}
/* Cast success screen */
body[data-theme=gemini] .cast-done{text-align:center;padding:8px 4px}
body[data-theme=gemini] .cast-tick{width:52px;height:52px;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;background:var(--up);color:#fff;font-size:26px;font-weight:700}
body[data-theme=gemini] .cast-h{font-size:22px;line-height:1.3;margin:0 auto 10px;max-width:460px}
body[data-theme=gemini] .cast-p{font-size:13.5px;line-height:1.6;color:var(--ink2);max-width:480px;margin:0 auto 18px}
body[data-theme=gemini] .cast-stats{display:flex;justify-content:center;gap:1px;background:var(--hair);border:1.5px solid var(--line);max-width:420px;margin:0 auto 20px}
body[data-theme=gemini] .cast-stats>div{background:var(--panel);padding:12px 16px;flex:1}
body[data-theme=gemini] .cast-stats span{display:block;font-family:"Pixelify Sans",var(--mono,monospace);font-size:19px;font-weight:700}
body[data-theme=gemini] .cast-stats i{font-style:normal;font-size:10px;color:var(--ink3)}
body[data-theme=gemini] .cast-go{font-size:14px;padding:13px 30px}
body[data-theme=gemini] .cast-note{font-size:11px;color:var(--ink3);margin:14px 0 0}
/* Settings — birth details */
body[data-theme=gemini] .bd-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--hair);border:1.5px solid var(--line);margin-bottom:12px}
body[data-theme=gemini] .bd-row{background:var(--panel);padding:9px 12px;display:flex;flex-direction:column;gap:2px}
body[data-theme=gemini] .bd-row span{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .bd-row b{font-size:13.5px}
body[data-theme=gemini] .bd-bar{display:flex;gap:10px;align-items:center}
body[data-theme=gemini] .bd-clear{background:none;border:1.5px solid var(--line);color:var(--ink3);font:inherit;font-size:11px;padding:8px 14px;cursor:pointer}
body[data-theme=gemini] .bd-clear:hover{border-color:var(--dn);color:var(--dn)}
/* The natal orrery — 2D SVG that reads 3D (tilted orbits, layered depth, floating glyphs) */
body[data-theme=gemini] .orrery{margin:10px 0 2px}
body[data-theme=gemini] .orrery svg{max-height:320px;display:block;margin:0 auto}
body[data-theme=gemini] .orr-orbit{fill:none;stroke:var(--ink3);stroke-width:1}
body[data-theme=gemini] .orr-spoke{stroke:var(--hair);stroke-width:1}
body[data-theme=gemini] .orr-sign{fill:var(--ink3);font-size:9px;font-weight:700;letter-spacing:.04em;text-anchor:middle;dominant-baseline:middle}
body[data-theme=gemini] .orr-asc{stroke:var(--accent);stroke-width:1.5;stroke-dasharray:3 2}
body[data-theme=gemini] .orr-asc-lbl{fill:var(--accent);font-size:8.5px;font-weight:700;text-anchor:middle}
body[data-theme=gemini] .orr-earth circle{fill:var(--ink1)}
body[data-theme=gemini] .orr-earth-lbl{fill:var(--ink3);font-size:8px;text-anchor:middle}
body[data-theme=gemini] .orr-shadow{fill:rgba(0,0,0,.18)}
body[data-theme=gemini] .orr-g{display:block;color:var(--ink1);filter:drop-shadow(1px 2px 0 rgba(0,0,0,.22))}
body[data-theme=gemini] .orr-planet{animation:orrFloat 4s ease-in-out infinite}
body[data-theme=gemini] .orr-planet:nth-child(2n){animation-delay:-1.3s}
body[data-theme=gemini] .orr-planet:nth-child(3n){animation-delay:-2.6s}
@keyframes orrFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@media(prefers-reduced-motion:reduce){body[data-theme=gemini] .orr-planet{animation:none}}
/* The dasha timeline ribbon */
body[data-theme=gemini] .dt-ribbon{position:relative;display:flex;height:52px;border:1.5px solid var(--line);overflow:hidden}
body[data-theme=gemini] .dt-seg{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;border-inline-end:1px solid var(--hair);min-width:0;overflow:hidden;background:var(--panel)}
body[data-theme=gemini] .dt-seg.on{background:var(--ink1);color:#f4f4f0}
body[data-theme=gemini] .dt-seg.on .orr-g,body[data-theme=gemini] .dt-seg.on .dt-glyph{color:#f4f4f0}
body[data-theme=gemini] .dt-glyph{color:var(--ink1);line-height:0}
body[data-theme=gemini] .dt-lord{font-size:10px;font-weight:700;white-space:nowrap}
body[data-theme=gemini] .dt-yr{font-size:8.5px;opacity:.6}
body[data-theme=gemini] .dt-now{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--accent)}
body[data-theme=gemini] .dt-now span{position:absolute;top:-14px;inset-inline-start:50%;transform:translateX(-50%);font-size:8px;font-weight:700;color:var(--accent);text-transform:uppercase}
body[data-theme=gemini] .dt-legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin-top:18px}
body[data-theme=gemini] .dt-leg{border-inline-start:2px solid var(--hair);padding-inline-start:10px}
body[data-theme=gemini] .dt-leg.cur{border-left-color:var(--accent)}
body[data-theme=gemini] .dt-leg b{font-size:13px;display:flex;align-items:center;gap:5px}
body[data-theme=gemini] .syn-time{font-size:12px;line-height:1.55;color:var(--ink2);border-top:1px solid var(--hair);padding-top:8px;margin-top:2px;display:flex;gap:6px;align-items:baseline}
body[data-theme=gemini] .syn-time .dt-glyph{flex:none;color:var(--ink1)}
/* antardasha sub-ribbon */
body[data-theme=gemini] .dt-sub{margin-top:16px;border-top:1px solid var(--hair);padding-top:14px}
body[data-theme=gemini] .dt-sub-lbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);margin-bottom:8px}
body[data-theme=gemini] .dt-ribbon.sub{height:38px}
body[data-theme=gemini] .dt-seg.sm .dt-lord{font-size:9px}
/* commodities & metals */
body[data-theme=gemini] .comm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
body[data-theme=gemini] .comm-card{border:1.5px solid var(--line);border-inline-start:4px solid var(--line);background:var(--panel2,var(--panel));padding:12px 14px}
body[data-theme=gemini] .comm-card.up{border-left-color:var(--up)}
body[data-theme=gemini] .comm-card.dn{border-left-color:var(--dn)}
body[data-theme=gemini] .comm-top{display:flex;align-items:center;gap:9px;margin-bottom:6px}
body[data-theme=gemini] .comm-glyph{color:var(--ink1);line-height:0}
body[data-theme=gemini] .comm-top>b{font-size:15px}
body[data-theme=gemini] .comm-score{margin-inline-start:auto;font-family:"Pixelify Sans",var(--mono,monospace);font-size:18px;font-weight:700}
body[data-theme=gemini] .comm-note{line-height:1.5}
body[data-theme=gemini] .goal-line{color:var(--ink2)}
@media(max-width:720px){body[data-theme=gemini] .comm-grid{grid-template-columns:1fr}}
/* Your Chart — the birth-chart wizard + personal reading */
body[data-theme=gemini] .bw-overlay{position:fixed;inset:0;z-index:1400;background:rgba(20,20,18,.55);display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px)}
body[data-theme=gemini] .bw-box{position:relative;width:min(560px,100%);max-height:90vh;overflow-y:auto;background:var(--panel);border:1.5px solid var(--ink1);padding:28px 30px;box-shadow:6px 6px 0 rgba(0,0,0,.15)}
body[data-theme=gemini] .bw-x{position:absolute;top:12px;inset-inline-end:14px;background:none;border:none;font-size:15px;color:var(--ink3);cursor:pointer}
body[data-theme=gemini] .bw-kick{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink3);display:flex;align-items:center;gap:8px;margin-bottom:12px}
body[data-theme=gemini] .bw-dot{width:22px;height:3px;background:var(--line)}
body[data-theme=gemini] .bw-dot.on{background:var(--ink1)}body[data-theme=gemini] .bw-dot.did{background:var(--ink3)}
body[data-theme=gemini] .bw-h{font-size:21px;line-height:1.3;margin:0 0 10px}
body[data-theme=gemini] .bw-p{font-size:13.5px;line-height:1.6;color:var(--ink2);margin:0 0 16px}
body[data-theme=gemini] .bw-note{font-size:11.5px;line-height:1.55;color:var(--ink3);margin:12px 0 0;border-inline-start:2px solid var(--hair);padding-inline-start:10px}
body[data-theme=gemini] .bw-note a{color:var(--accent)}
body[data-theme=gemini] .bw-in{width:100%;background:var(--panel2,var(--panel));border:1.5px solid var(--line);color:var(--ink1);font:inherit;font-size:15px;padding:12px 14px;margin-bottom:6px}
body[data-theme=gemini] .bw-in:focus{outline:none;border-color:var(--ink2)}
body[data-theme=gemini] .bw-check{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink2);margin-top:10px;cursor:pointer}
body[data-theme=gemini] .bw-check input{width:16px;height:16px;accent-color:var(--ink1)}
body[data-theme=gemini] .bw-tzrow{display:flex;align-items:center;gap:12px;margin-top:12px;flex-wrap:wrap}
body[data-theme=gemini] .bw-tzrow label{font-size:12px;color:var(--ink2);display:flex;align-items:center;gap:8px}
body[data-theme=gemini] .bw-tz{width:66px;background:var(--panel2,var(--panel));border:1.5px solid var(--line);color:var(--ink1);font:inherit;padding:6px 8px}
body[data-theme=gemini] .bw-city-pop{position:relative;max-height:200px;overflow-y:auto;border:1.5px solid var(--line);border-top:none;display:none;margin-bottom:6px}
body[data-theme=gemini] .bw-city{display:flex;justify-content:space-between;padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--hair);font-size:13px}
body[data-theme=gemini] .bw-city:hover{background:var(--ink1);color:#f4f4f0}
body[data-theme=gemini] .bw-city span{color:var(--ink3)}body[data-theme=gemini] .bw-city:hover span{color:#c9c9c2}
body[data-theme=gemini] .bw-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
body[data-theme=gemini] .bw-opt{background:var(--panel2,var(--panel));border:1.5px solid var(--line);color:var(--ink1);font:inherit;font-size:13px;padding:13px;cursor:pointer;text-align:start}
body[data-theme=gemini] .bw-opt.on{background:var(--ink1);color:#f4f4f0;border-color:var(--ink1)}
body[data-theme=gemini] .bw-go{background:var(--ink1);color:#f4f4f0;border:1.5px solid var(--ink1);font:inherit;font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:12px 22px;cursor:pointer;margin-top:6px}
body[data-theme=gemini] .bw-go:hover{background:#000}
body[data-theme=gemini] .bw-back{background:none;border:none;color:var(--ink3);font:inherit;font-size:12.5px;cursor:pointer}
body[data-theme=gemini] .bw-nav{display:flex;align-items:center;justify-content:space-between;margin-top:18px}
body[data-theme=gemini] .mychart-cta{text-align:center;padding:34px 26px}
body[data-theme=gemini] .mc-hero{display:flex;justify-content:center;gap:14px;color:var(--ink1);margin-bottom:16px}
body[data-theme=gemini] .mychart-cta h2{font-size:22px;margin:0 0 10px}
body[data-theme=gemini] .mychart-cta .sub{max-width:460px;margin:0 auto 16px;line-height:1.6}
body[data-theme=gemini] .mc-chart-top{display:flex;gap:24px;flex-wrap:wrap;justify-content:space-between}
/* PSX index board — one compact row. Label / number / change on a single line per index;
   the descriptions live in the title attribute so the strip stays short. */
/* 140px min lets all seven indices sit on one row at desktop instead of wrapping 6+1 */
body[data-theme=gemini] .idx-board{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
  border:1.5px solid var(--line);background:var(--hair);gap:1px}
body[data-theme=gemini] .idx-cell{background:var(--panel);padding:9px 12px;display:flex;align-items:baseline;gap:7px;min-width:0}
body[data-theme=gemini] .idx-k{font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink3);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;min-width:0}
body[data-theme=gemini] .idx-cell b{font-family:"Pixelify Sans",var(--mono,monospace);font-size:15px;line-height:1;flex:none;color:var(--ink1)}
/* NOT Pixelify: it is a numerals face and renders prose with broken ligatures */
body[data-theme=gemini] .idx-cell i{font-size:10px;font-style:normal;flex:none;font-family:"Pixelify Sans",var(--mono,monospace)}
body[data-theme=gemini] .idx-cell i.idx-new{font-family:var(--font-body);font-size:9px;text-transform:uppercase;
  letter-spacing:.07em;color:var(--ink3);border:1px solid var(--hair);padding:1px 5px}
body[data-theme=gemini] .idx-foot{margin-top:8px}
@media(max-width:720px){body[data-theme=gemini] .idx-board{grid-template-columns:1fr 1fr}
  body[data-theme=gemini] .idx-cell{padding:8px 10px;gap:5px}
  body[data-theme=gemini] .idx-cell b{font-size:13.5px}}
@media(max-width:400px){body[data-theme=gemini] .idx-board{grid-template-columns:1fr}}
/* sector debates + marketplace */
body[data-theme=gemini] .debate-cols{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
body[data-theme=gemini] .debate-cols p{font-size:14px;line-height:1.65;color:var(--ink2);margin:6px 0 10px}
body[data-theme=gemini] .deb-p{padding:6px 0;border-top:1px solid var(--hair);line-height:1.5}
body[data-theme=gemini] .dissent{border-inline-start:3px solid var(--dn);background:var(--panel2);padding:10px 13px;margin-top:12px;font-size:13.5px;line-height:1.62}
body[data-theme=gemini] .dissent .ark{display:block;margin-bottom:4px}
body[data-theme=gemini] .mkt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:10px}
body[data-theme=gemini] .mkt-card{border:1px solid var(--line)}
body[data-theme=gemini] .mkt-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:5px}
body[data-theme=gemini] .mkt-top b{font-size:14.5px}
body[data-theme=gemini] .mkt-spec{display:flex;flex-wrap:wrap;gap:5px;margin:9px 0}
body[data-theme=gemini] .mkt-meta{padding-top:8px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .mkt-bt{display:flex;gap:14px;margin-top:8px;font-family:"Pixelify Sans",var(--mono,monospace);font-size:14px}
body[data-theme=gemini] .mkt-bt-pending{margin-top:8px;line-height:1.5}
body[data-theme=gemini] .mkt-rules{display:flex;flex-direction:column;gap:6px;margin-top:8px}
body[data-theme=gemini] .mkt-rule{display:grid;grid-template-columns:1.2fr 1fr 1fr 32px;gap:6px}
body[data-theme=gemini] .mkt-rule select,body[data-theme=gemini] .mkt-rule input{font:inherit;font-size:12.5px;padding:8px 9px;border:1px solid var(--line);background:var(--panel);color:var(--ink1);border-radius:0}
body[data-theme=gemini] .mkt-x{background:transparent;border:1px solid var(--line);color:var(--ink3);cursor:pointer;font:inherit}
@media(max-width:720px){body[data-theme=gemini] .debate-cols,body[data-theme=gemini] .mkt-grid{grid-template-columns:1fr}
  body[data-theme=gemini] .mkt-rule{grid-template-columns:1fr 1fr;grid-auto-rows:auto}}
/* sectors page — left rail of sectors, tile group on top, members below */
body[data-theme=gemini] .sec-wrap{display:grid;grid-template-columns:236px minmax(0,1fr);gap:12px;align-items:start}
body[data-theme=gemini] .sec-list{border:1px solid var(--line);background:var(--panel);max-height:calc(100vh - 120px);overflow:auto;position:sticky;top:12px}
body[data-theme=gemini] .sec-list-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:9px 11px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);z-index:1}
body[data-theme=gemini] .sec-list-head .sub{font-size:10.5px}
body[data-theme=gemini] .sec-item{display:flex;align-items:center;gap:8px;width:100%;text-align:start;padding:8px 11px;background:transparent;border:0;border-bottom:1px solid var(--hair);color:var(--ink2);font:inherit;font-size:12.5px;cursor:pointer}
body[data-theme=gemini] .sec-item:hover{background:var(--panel2);color:var(--ink1)}
body[data-theme=gemini] .sec-item.on{background:var(--panel2);color:var(--ink1);font-weight:700;box-shadow:inset 3px 0 0 var(--acc,var(--ink1))}
body[data-theme=gemini] .sec-nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body[data-theme=gemini] .sec-n{flex:none;font-family:"Pixelify Sans",var(--mono,monospace);font-size:12px;color:var(--ink3)}
body[data-theme=gemini] .sec-dot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--hair);display:inline-block}
body[data-theme=gemini] .sec-dot.live{background:var(--up);box-shadow:0 0 0 3px color-mix(in srgb,var(--up) 22%,transparent);animation:secPulse 2.2s linear infinite}
body[data-theme=gemini] .sec-dot.done{background:transparent;border:1.5px solid var(--up)}
body[data-theme=gemini] .sec-dot.soon{background:var(--hair)}
@keyframes secPulse{0%,100%{box-shadow:0 0 0 2px color-mix(in srgb,var(--up) 26%,transparent)}50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--up) 8%,transparent)}}
body[data-theme=gemini] .sec-legend{display:flex;flex-direction:column;gap:5px;padding:9px 11px;font-size:10.5px;color:var(--ink3)}
body[data-theme=gemini] .sec-legend span{display:flex;align-items:center;gap:6px}
body[data-theme=gemini] .sec-picker{display:none}
body[data-theme=gemini] .sec-main{min-width:0}
body[data-theme=gemini] .sec-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:10px}
body[data-theme=gemini] .sec-tile{display:flex;flex-direction:column;gap:8px;border-top:2px solid var(--hair)}
body[data-theme=gemini] .sec-tile.t-for{border-top-color:var(--up)}
body[data-theme=gemini] .sec-tile.t-against{border-top-color:var(--dn)}
body[data-theme=gemini] .sec-tile-top{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
body[data-theme=gemini] .sec-say{font-size:13.5px;line-height:1.62;color:var(--ink2);margin:0}
body[data-theme=gemini] .sec-pt{padding-top:7px;border-top:1px solid var(--hair);font-size:12px;line-height:1.5;color:var(--ink3)}
body[data-theme=gemini] .sec-pt b{display:block;color:var(--ink1);font-size:12.5px;margin-bottom:2px}
body[data-theme=gemini] .sec-more{margin-top:auto;align-self:flex-start;background:transparent;border:1px solid var(--line);color:var(--ink2);font:inherit;font-size:11.5px;padding:6px 10px;cursor:pointer}
body[data-theme=gemini] .sec-more:hover{border-color:var(--ink2);color:var(--ink1)}
body[data-theme=gemini] .sec-empty{text-align:center;padding:26px 18px}
body[data-theme=gemini] .sec-empty-dot{margin-bottom:10px}
body[data-theme=gemini] .sec-empty-dot .sec-dot{width:12px;height:12px}
body[data-theme=gemini] .sec-empty b{font-size:14.5px}
body[data-theme=gemini] .sec-empty p{max-width:56ch;margin:7px auto 0;line-height:1.6}
body[data-theme=gemini] .sec-empty-go{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:14px}
body[data-theme=gemini] .sec-empty-go .sec-more{align-self:auto;margin-top:0}
/* full-transcript overlay body */
body[data-theme=gemini] .sec-script h3{font-size:16px;margin:0 0 6px}
body[data-theme=gemini] .sec-script h4{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink3);margin:16px 0 6px}
body[data-theme=gemini] .sec-script p{font-size:13.5px;line-height:1.68;color:var(--ink2);margin:0 0 8px}
body[data-theme=gemini] .sec-script ul{margin:0;padding-inline-start:18px}
body[data-theme=gemini] .sec-script li{font-size:13px;line-height:1.6;color:var(--ink2);margin-bottom:5px}
body[data-theme=gemini] .sc-lead{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink3);margin-bottom:10px}
body[data-theme=gemini] .sc-pt{padding:8px 0;border-top:1px solid var(--hair);font-size:12.5px;line-height:1.55;color:var(--ink3)}
body[data-theme=gemini] .sc-pt b{display:block;color:var(--ink1);margin-bottom:2px}
body[data-theme=gemini] .sc-foot{margin-top:18px;padding-top:10px;border-top:1px solid var(--hair);font-size:11px}
@media(max-width:1100px){body[data-theme=gemini] .sec-tiles{grid-template-columns:1fr}}
@media(max-width:900px){
  /* mobile: the debate is the page. The sector index collapses behind one tap so the reader
     lands on the three reads, not on a 30-row list they have to scroll past. */
  body[data-theme=gemini] .sec-wrap{grid-template-columns:1fr}
  body[data-theme=gemini] .sec-picker{display:flex;align-items:center;gap:8px;width:100%;padding:11px 12px;background:var(--panel);border:1px solid var(--line);color:var(--ink1);font:inherit;font-size:13.5px;cursor:pointer}
  body[data-theme=gemini] .sec-picker b{flex:1;min-width:0;text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body[data-theme=gemini] .sec-pick-go{flex:none;font-size:11px;color:var(--ink3)}
  body[data-theme=gemini] .sec-list{display:none;position:static;max-height:58vh;margin-top:-1px}
  body[data-theme=gemini] .sec-wrap.open .sec-list{display:block}
  body[data-theme=gemini] .sec-item{padding:11px 12px;font-size:13px}
}
/* ---- the global tape, as tiles. A price is read at a glance; a table row is read line by line,
   and there were five tables of them below the fold. Each tile carries the level, both changes and
   the reason a Karachi reader should care, so the whole world tape fits in one screen. */
body[data-theme=gemini] .gwrap{display:flex;flex-direction:column;gap:16px;margin-bottom:20px}
body[data-theme=gemini] .gband-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:7px}
body[data-theme=gemini] .gband-h b{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--ink)}
body[data-theme=gemini] .gband-h i{font-size:10px;font-style:normal;color:var(--ink3)}
/* auto-FILL, not auto-fit: a two-instrument band must not stretch its tiles to half the page.
   Tracks stay a fixed width, so every tile on the page is the same size whatever its group holds. */
body[data-theme=gemini] .gtiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(214px,1fr));gap:10px}
body[data-theme=gemini] .gtile{background:var(--panel);border:1.5px solid var(--line);padding:11px 13px 12px;display:flex;flex-direction:column;gap:3px;min-width:0}
body[data-theme=gemini] .gt-k{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--ink3)}
body[data-theme=gemini] .gt-p{font-size:20px;font-weight:700;line-height:1.1;letter-spacing:-.01em}
body[data-theme=gemini] .gt-ch{display:flex;gap:12px;align-items:baseline;margin-top:1px}
body[data-theme=gemini] .gt-ch em{font-style:normal;font-size:12px;font-weight:600;color:var(--ink2);display:inline-flex;align-items:baseline;gap:4px}
body[data-theme=gemini] .gt-ch em.up{color:var(--up)}
body[data-theme=gemini] .gt-ch em.dn{color:var(--dn)}
body[data-theme=gemini] .gt-ch em i{font-style:normal;font-size:8.5px;font-weight:500;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3)}
body[data-theme=gemini] .gt-why{margin-top:5px;font-size:10.5px;line-height:1.45;color:var(--ink3);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
@media(max-width:640px){
  body[data-theme=gemini] .gtiles{grid-template-columns:1fr 1fr}
  body[data-theme=gemini] .gt-p{font-size:17px}
  body[data-theme=gemini] .gt-why{-webkit-line-clamp:2;font-size:10px}
}
/* evidence alignment */
body[data-theme=gemini] .al-bar{display:flex;height:10px;margin-bottom:8px}
body[data-theme=gemini] .al-up{background:var(--up)}
body[data-theme=gemini] .al-nu{background:var(--hair)}
body[data-theme=gemini] .al-dn{background:var(--dn)}
body[data-theme=gemini] .al-legend{display:flex;gap:16px;font-size:11.5px;color:var(--ink3);margin-bottom:12px}
body[data-theme=gemini] .al-legend b{font-family:"Pixelify Sans",var(--mono,monospace);font-size:14px;margin-inline-end:3px}
body[data-theme=gemini] .al-row{display:flex;align-items:baseline;gap:10px;padding:8px 0;border-top:1px solid var(--hair)}
body[data-theme=gemini] .al-row b{min-width:104px;font-size:13px}
body[data-theme=gemini] .al-row .sub{flex:1;line-height:1.5}
body[data-theme=gemini] .al-dot{flex:none;width:20px;height:20px;display:flex;align-items:center;justify-content:center;border:1px solid var(--hair);font-weight:800;font-size:12px;color:var(--ink3)}
body[data-theme=gemini] .al-dot.up{background:var(--up);border-color:var(--up);color:#fff}
body[data-theme=gemini] .al-dot.dn{background:var(--dn);border-color:var(--dn);color:#fff}
/* ask the desk */
body[data-theme=gemini] .ans-q{font-size:17px;font-weight:700;margin:16px 0 10px;padding-inline-start:12px;border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .ans-block{border:1px solid var(--line);background:var(--panel);padding:13px 15px;margin-bottom:8px}
body[data-theme=gemini] .ans-block>b{display:block;font-size:13.5px;margin-bottom:6px}
body[data-theme=gemini] .ans-block p{font-size:14px;line-height:1.68;color:var(--ink2);margin:0 0 8px}
body[data-theme=gemini] .ans-block p:last-child{margin-bottom:0}
body[data-theme=gemini] .ans-news{font-size:13px!important;padding:5px 0;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .ans-table{width:100%;margin:4px 0 8px}
body[data-theme=gemini] .ans-foot{font-size:11.5px;line-height:1.55;color:var(--ink3);border-top:1px solid var(--hair);padding-top:10px;margin-top:4px}
body[data-theme=gemini] .ask-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
/* portfolio x-ray */
body[data-theme=gemini] .xray{padding:0}
body[data-theme=gemini] .xr-row{display:flex;align-items:flex-start;gap:12px;padding:12px 15px;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .xr-row>div{flex:1;min-width:0}
body[data-theme=gemini] .xr-row b{display:block;font-size:13.5px;margin-bottom:2px}
body[data-theme=gemini] .xr-dot{flex:none;width:24px;height:24px;display:flex;align-items:center;justify-content:center;font-weight:800;border:1.5px solid var(--up);color:#fff;background:var(--up)}
body[data-theme=gemini] .xr-row.flag .xr-dot{background:var(--warn);border-color:var(--warn)}
body[data-theme=gemini] .xr-v{flex:none;font-size:11px;color:var(--ink3);font-family:"Pixelify Sans",var(--mono,monospace)}
body[data-theme=gemini] .xr-foot{padding:11px 15px}
/* daily market weather */
body[data-theme=gemini] .weather-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:10px}
body[data-theme=gemini] .wx-card{border:1px solid var(--line);border-top:3px solid var(--accent);background:var(--panel);padding:12px 14px}
body[data-theme=gemini] .wx-card b{display:block;font-size:18px;margin:2px 0 5px;text-transform:lowercase}
body[data-theme=gemini] .wx-card .sub{line-height:1.55}
@media(max-width:720px){body[data-theme=gemini] .weather-grid{grid-template-columns:1fr}
  body[data-theme=gemini] .al-row b{min-width:0}}
/* pro workflows: scanner, scenarios, screener, watchlist intel */
body[data-theme=gemini] .scan-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}
body[data-theme=gemini] .scan-card h2{font-size:12.5px;margin-bottom:6px}
body[data-theme=gemini] .scan-row{display:grid;grid-template-columns:64px 1fr;gap:2px 10px;padding:8px 0;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .scan-row:last-child{border-bottom:none}
body[data-theme=gemini] .scan-row:hover b{color:var(--accent)}
body[data-theme=gemini] .scan-row .scan-m{grid-column:1;font-family:"Pixelify Sans",var(--mono,monospace);font-size:13px}
body[data-theme=gemini] .scan-row b{grid-column:1;grid-row:1}
body[data-theme=gemini] .scan-row .scan-m{grid-row:2}
body[data-theme=gemini] .scan-row .sub{grid-column:2;grid-row:1/3;line-height:1.5}
body[data-theme=gemini] .sc-presets{display:flex;flex-wrap:wrap;gap:1px;background:var(--hair);border:1.5px solid var(--line);width:fit-content;margin-bottom:12px}
body[data-theme=gemini] .sc-custom{display:flex;gap:12px;align-items:end;margin-bottom:6px}
body[data-theme=gemini] .sc-custom label{display:flex;flex-direction:column;gap:5px;font-size:10.5px;color:var(--ink3);text-transform:uppercase;letter-spacing:.05em}
body[data-theme=gemini] .sc-verdict{margin:12px 0 10px}
body[data-theme=gemini] .sc-verdict b{font-size:17px;margin-inline-end:10px}
body[data-theme=gemini] .sc-cols{display:grid;grid-template-columns:1fr 1fr;gap:14px}
body[data-theme=gemini] .sc-tile{display:flex;align-items:baseline;gap:10px;border:1px solid var(--line);padding:9px 12px;margin-top:6px}
body[data-theme=gemini] .sc-tile.up{border-inline-start:3px solid var(--up)}
body[data-theme=gemini] .sc-tile.dn{border-inline-start:3px solid var(--dn)}
body[data-theme=gemini] .sc-tile b{flex:1;font-size:13px}
body[data-theme=gemini] .sc-tile .num{font-family:"Pixelify Sans",var(--mono,monospace);font-size:15px}
body[data-theme=gemini] .sc-tile.up .num{color:var(--up)}
body[data-theme=gemini] .sc-tile.dn .num{color:var(--dn)}
body[data-theme=gemini] .sc-tile i{font-size:10px;color:var(--ink3);font-style:normal;white-space:nowrap}
body[data-theme=gemini] .scr-row{display:flex;gap:8px;align-items:center}
body[data-theme=gemini] .scr-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
body[data-theme=gemini] .scr-chip{border:1.5px solid var(--ink1);background:var(--ink1);color:var(--panel);font-size:11px;font-weight:700;padding:4px 10px}
body[data-theme=gemini] .scr-samples{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;padding-top:10px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .scr-sample{border:1px dashed var(--line);background:transparent;color:var(--ink2);font:inherit;font-size:11.5px;padding:5px 10px;cursor:pointer}
body[data-theme=gemini] .scr-sample:hover{border-color:var(--ink1);color:var(--ink1)}
body[data-theme=gemini] .scr-sample.saved{border-style:solid;border-color:var(--accent);color:var(--accent)}
body[data-theme=gemini] .wl-intel{padding:0}
body[data-theme=gemini] .wi-row{display:flex;align-items:baseline;gap:10px;padding:10px 15px;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .wi-row:last-child{border-bottom:none}
body[data-theme=gemini] .wi-row:hover{background:var(--panel2)}
body[data-theme=gemini] .wi-row .tag.hot{background:var(--dn);color:#fff;border-color:var(--dn)}
body[data-theme=gemini] .wi-row .sub{flex:1;line-height:1.5}
@media(max-width:720px){body[data-theme=gemini] .sc-cols{grid-template-columns:1fr}
  body[data-theme=gemini] .scan-grid{grid-template-columns:1fr}
  body[data-theme=gemini] .scr-row{flex-wrap:wrap}}
/* the beginner's traffic-light checklist */
body[data-theme=gemini] .lights{padding:0}
body[data-theme=gemini] .lrow{display:flex;align-items:flex-start;gap:12px;padding:12px 15px;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .ldot{flex:none;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--line);font-weight:800;font-size:14px;margin-top:1px}
body[data-theme=gemini] .lrow.s-yes .ldot{background:var(--up);border-color:var(--up);color:#fff}
body[data-theme=gemini] .lrow.s-no .ldot{background:var(--dn);border-color:var(--dn);color:#fff}
body[data-theme=gemini] .lrow.s-part .ldot{background:var(--warn);border-color:var(--warn);color:#fff}
body[data-theme=gemini] .lrow.s-unk .ldot,body[data-theme=gemini] .lrow.s-ask .ldot{background:var(--panel2);color:var(--ink3)}
body[data-theme=gemini] .lbody{flex:1;min-width:0}
body[data-theme=gemini] .lbody b{display:block;font-size:14px;margin-bottom:2px}
body[data-theme=gemini] .lstate{flex:none;font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink3);border:1px solid var(--hair);padding:3px 7px;margin-top:2px}
body[data-theme=gemini] .lrow.s-yes .lstate{color:var(--up);border-color:var(--up)}
body[data-theme=gemini] .lrow.s-no .lstate{color:var(--dn);border-color:var(--dn)}
body[data-theme=gemini] .lights-foot{padding:11px 15px}
/* daily lesson on Today */
body[data-theme=gemini] .daily-lesson{display:flex;align-items:center;gap:14px;cursor:pointer;border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .daily-lesson:hover{background:color-mix(in srgb,var(--accent) 6%,var(--panel))}
body[data-theme=gemini] .dl-left{flex:1;min-width:0}
body[data-theme=gemini] .dl-left b{display:block;font-size:15px;margin:3px 0 2px}
body[data-theme=gemini] .dl-go{flex:none;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;border:1.5px solid var(--ink1);padding:9px 14px;white-space:nowrap}
/* language button + Urdu direction */
body[data-theme=gemini] .lang-btn{border:1px solid var(--line);background:transparent;color:var(--ink2);font:inherit;font-size:11.5px;font-weight:700;padding:6px 11px;cursor:pointer;height:34px}
body[data-theme=gemini] .lang-btn:hover{border-color:var(--ink1);color:var(--ink1)}
body[data-theme=gemini][data-lang=ur] .side-nav span,body[data-theme=gemini][data-lang=ur] .lvl-t,body[data-theme=gemini][data-lang=ur] .jy-head,
body[data-theme=gemini][data-lang=ur] .pl-h,body[data-theme=gemini][data-lang=ur] .daily-lesson,body[data-theme=gemini][data-lang=ur] .lbody{font-family:"Noto Nastaliq Urdu","Jameel Noori Nastaleeq",var(--font-body)}
body[data-theme=gemini][data-lang=ur] .side-nav a{text-align:end}
/* force LTR for numeric/chart/ticker content even when page mirrors RTL */
body[data-theme=gemini][data-lang=ur] .num,body[data-theme=gemini][data-lang=ur] canvas,
body[data-theme=gemini][data-lang=ur] .chartwrap,body[data-theme=gemini][data-lang=ur] .pill{direction:ltr;unicode-bidi:isolate}
body[data-theme=gemini][data-lang=ur] .ttab{font-family:"Noto Nastaliq Urdu",var(--font-body)}
@media(max-width:900px){body[data-theme=gemini] .lang-btn{padding:6px 8px;font-size:11px}}
/* the hook on Today — one row, disappears the moment a chart exists */
body[data-theme=gemini] .mc-tease{display:flex;align-items:center;gap:16px;cursor:pointer;border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .mc-tease:hover{background:color-mix(in srgb,var(--accent) 6%,var(--panel))}
body[data-theme=gemini] .mc-tease-glyphs{display:flex;gap:7px;color:var(--ink1);flex:none}
body[data-theme=gemini] .mc-tease-txt{flex:1;min-width:0}
body[data-theme=gemini] .mc-tease-txt b{display:block;font-size:14.5px;margin-bottom:3px}
body[data-theme=gemini] .mc-tease-txt .sub{line-height:1.55}
body[data-theme=gemini] .mc-tease-go{flex:none;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;border:1.5px solid var(--ink1);padding:9px 14px;white-space:nowrap}
@media(max-width:720px){body[data-theme=gemini] .mc-tease{flex-wrap:wrap;gap:10px}
  body[data-theme=gemini] .mc-tease-go{width:100%;text-align:center}}
/* the wall: real ranked rows behind it, blurred — you can see the map exists, not read it */
body[data-theme=gemini] .mc-lock{position:relative;padding:0;overflow:hidden}
body[data-theme=gemini] .mc-lock-blur{filter:blur(5px);opacity:.5;pointer-events:none;user-select:none;padding:10px 15px}
body[data-theme=gemini] .mc-lock-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .mc-lock-row b{min-width:64px}
body[data-theme=gemini] .mc-lock-row .sub{flex:1}
body[data-theme=gemini] .mc-lock-row .num{font-family:"Pixelify Sans",var(--mono,monospace);font-size:16px}
body[data-theme=gemini] .mc-lock-face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px 20px;background:color-mix(in srgb,var(--panel) 88%,transparent)}
body[data-theme=gemini] .mc-lock-kick{font-size:10.5px;text-transform:uppercase;letter-spacing:.14em;color:var(--ink3);margin-bottom:6px}
body[data-theme=gemini] .mc-lock-face h3{margin:0 0 8px;font-size:17px}
body[data-theme=gemini] .mc-lock-face .sub{max-width:440px;line-height:1.6;margin-bottom:14px}
@media(max-width:720px){body[data-theme=gemini] .mc-lock-face{padding:18px 14px}
  body[data-theme=gemini] .mc-lock-face h3{font-size:15px}}
/* ---- desk modes: one nav in the HTML, the shell decides which parts apply ----
   Pro desk hides the Learn entry; Learner desk leads with it and drops the pro-only analysis. */
/* these must outrank `body[data-theme=gemini] .side-nav a{display:flex}` (0,2,1), so they carry
   both the theme attribute and the nav class */
body[data-theme=gemini]:not([data-desk=learn]) .side-nav a.nav-learn{display:none}
body[data-theme=gemini][data-desk=learn] .side-nav a[data-nav=strategies],
body[data-theme=gemini][data-desk=learn] .side-nav a[data-nav=value],
body[data-theme=gemini][data-desk=learn] .side-nav a[data-nav=leaderboard],
body[data-theme=gemini][data-desk=learn] .side-nav a[data-nav=macro],
body[data-theme=gemini][data-desk=learn] .side-nav a[data-nav=board]{display:none}
/* the learner path */
body[data-theme=gemini] .learn-hero{border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .lh-top{display:flex;align-items:flex-end;justify-content:space-between;gap:16px}
body[data-theme=gemini] .lh-pct b{font-family:"Pixelify Sans",var(--mono,monospace);font-size:30px}
body[data-theme=gemini] .lh-bar{height:8px;background:var(--hair);margin-top:10px;overflow:hidden}
body[data-theme=gemini] .lh-bar span{display:block;width:100%;height:100%;background:var(--ink1);transform-origin:left;transform:scaleX(0);transition:transform .2s ease-out}
/* the journey — a vertical path with rail + nodes, Duolingo-shaped in the desk's own aesthetic */
body[data-theme=gemini] .jy{margin-bottom:18px}
body[data-theme=gemini] .jy-step{display:flex;gap:14px}
body[data-theme=gemini] .jy-rail{display:flex;flex-direction:column;align-items:center;width:34px;flex:none}
body[data-theme=gemini] .jy-node{width:34px;height:34px;flex:none;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--ink1);background:var(--panel);font-family:"Pixelify Sans",var(--mono,monospace);font-size:15px;z-index:1}
body[data-theme=gemini] .jy-step.done .jy-node{background:var(--up);border-color:var(--up);color:#fff}
body[data-theme=gemini] .jy-step.cur .jy-node{background:var(--ink1);color:var(--panel)}
body[data-theme=gemini] .jy-step.locked .jy-node{border-color:var(--line);color:var(--ink3)}
body[data-theme=gemini] .jy-line{flex:1;width:2px;background:var(--hair);min-height:14px}
body[data-theme=gemini] .jy-step.done .jy-line{background:var(--up)}
body[data-theme=gemini] .jy-body{flex:1;min-width:0;border:1px solid var(--line);background:var(--panel);margin-bottom:10px;padding:12px 14px}
body[data-theme=gemini] .jy-step.cur .jy-body{border-color:var(--ink1);border-left-width:3px}
body[data-theme=gemini] .jy-step.locked .jy-body{opacity:.55}
body[data-theme=gemini] .jy-head b{font-size:14.5px;margin-inline-end:8px}
body[data-theme=gemini] .jy-lessons{margin-top:9px;display:flex;flex-direction:column;gap:5px}
body[data-theme=gemini] .jy-lsn{display:flex;align-items:center;gap:9px;text-align:start;background:transparent;border:1px solid var(--hair);padding:8px 11px;font:inherit;font-size:13px;color:var(--ink1);cursor:pointer}
body[data-theme=gemini] .jy-lsn:hover{border-color:var(--ink1)}
body[data-theme=gemini] .jy-lsn.done{color:var(--ink3)}
body[data-theme=gemini] .jy-lsn.done .jy-tick{color:var(--up)}
body[data-theme=gemini] .jy-tick{flex:none;font-weight:800}
body[data-theme=gemini] .jy-min{margin-inline-start:auto;font-size:10.5px;color:var(--ink3)}
body[data-theme=gemini] .jy-act{display:flex;align-items:center;gap:9px;margin-top:7px;border:1px dashed var(--accent);padding:8px 11px;font-size:12.5px}
body[data-theme=gemini] .jy-act.done{border-style:solid;border-color:var(--up)}
body[data-theme=gemini] .jy-act.done .jy-tick{color:var(--up)}
body[data-theme=gemini] .jy-go{margin-inline-start:auto;font-weight:700;color:var(--accent);white-space:nowrap}
body[data-theme=gemini] .jy-lock{padding:6px 0 2px}
body[data-theme=gemini] .lh-side{display:flex;align-items:center;gap:14px}
body[data-theme=gemini] .streak-chip{border:1.5px solid var(--accent);color:var(--accent);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;padding:5px 10px;white-space:nowrap}
body[data-theme=gemini] .today-card{border:1px solid var(--line);border-inline-start:3px solid var(--accent);padding:12px 14px;margin-top:14px}
body[data-theme=gemini] .today-card b{display:block;font-size:15px;margin:3px 0 2px}
/* practice + tools */
body[data-theme=gemini] .pp-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
body[data-theme=gemini] .sumstrip.s2,body[data-theme=gemini] .sumstrip.s3{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:1px}
/* ---- tools: tabbed calculators ---- */
body[data-theme=gemini] .tchips{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px}
body[data-theme=gemini] .tchip{border:1px solid var(--line);padding:4px 9px;font-size:11px;color:var(--ink2);white-space:nowrap}
body[data-theme=gemini] .tchip b{color:var(--ink1);font-family:"Pixelify Sans",var(--mono,monospace)}
body[data-theme=gemini] .ttabs{display:flex;flex-wrap:wrap;gap:1px;background:var(--hair);border:1.5px solid var(--line);margin-bottom:-1.5px}
body[data-theme=gemini] .ttab{background:var(--panel);color:var(--ink2);border:none;font:inherit;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:10px 14px;cursor:pointer;flex:1 1 auto;white-space:nowrap}
body[data-theme=gemini] .ttab:hover{background:var(--panel2);color:var(--ink1)}
body[data-theme=gemini] .ttab.on{background:var(--ink1);color:var(--panel)}
body[data-theme=gemini] .tpanel{border:1.5px solid var(--line)}
body[data-theme=gemini] .tgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:10px;margin:12px 0 4px;align-items:end}
body[data-theme=gemini] .tgrid label{display:flex;flex-direction:column;gap:5px;font-size:10.5px;color:var(--ink3);text-transform:uppercase;letter-spacing:.05em;line-height:1.3}
body[data-theme=gemini] .tgrid .ph-in{width:100%}
body[data-theme=gemini] .tgrid button{height:38px}
body[data-theme=gemini] #t-out{margin-top:14px}
body[data-theme=gemini] .tnote{border-inline-start:3px solid var(--ink1);background:var(--panel2);padding:10px 13px;font-size:13px;line-height:1.62;margin-top:12px}
body[data-theme=gemini] .tnote.warn{border-left-color:var(--dn)}
/* auth: google button, divider, peek toggle, inline errors, strength meter */
/* .auth-google / .auth-or are UNUSED since the Google button was removed (2026-07-21). Kept, not
   deleted: they are four lines and restoring the button should not also mean re-deriving its
   styling. Delete them if OAuth is ruled out for good. */
body[data-theme=gemini] .auth-google{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;padding:11px 14px;margin-bottom:14px;background:var(--panel);border:1.5px solid var(--line);color:var(--ink1);font:inherit;font-size:13px;font-weight:600;cursor:pointer}
body[data-theme=gemini] .auth-google:hover{border-color:var(--ink1);background:var(--panel2)}
body[data-theme=gemini] .auth-or{display:flex;align-items:center;gap:10px;margin:0 0 14px;color:var(--ink3);font-size:11px;text-transform:uppercase;letter-spacing:.08em}
body[data-theme=gemini] .auth-or::before,body[data-theme=gemini] .auth-or::after{content:"";flex:1;height:1px;background:var(--line)}
body[data-theme=gemini] .auth-pwwrap{position:relative;display:block}
body[data-theme=gemini] .auth-pwwrap input{width:100%;padding-inline-end:62px}
body[data-theme=gemini] .auth-peek{position:absolute;inset-inline-end:6px;top:50%;transform:translateY(-50%);background:transparent;border:none;color:var(--ink3);font:inherit;font-size:11px;font-weight:600;cursor:pointer;padding:5px 7px;text-transform:uppercase;letter-spacing:.05em}
body[data-theme=gemini] .auth-peek:hover{color:var(--ink1)}
body[data-theme=gemini] .auth-err{display:block;min-height:0;color:var(--dn);font-size:11.5px;line-height:1.5;margin-top:5px}
body[data-theme=gemini] .auth-err:empty{margin-top:0}
body[data-theme=gemini] input.bad{border-color:var(--dn)}
body[data-theme=gemini] .pwmeter{display:flex;align-items:center;gap:9px;margin:-4px 0 10px}
body[data-theme=gemini] .pwbars{display:flex;gap:3px;flex:1}
body[data-theme=gemini] .pwbars i{flex:1;height:3px;background:var(--line)}
body[data-theme=gemini] .pwlabel{font-size:11px;color:var(--ink3);white-space:nowrap}
body[data-theme=gemini] .pwmeter[data-s="1"] .pwbars i:nth-child(-n+1),
body[data-theme=gemini] .pwmeter[data-s="2"] .pwbars i:nth-child(-n+2){background:var(--dn)}
body[data-theme=gemini] .pwmeter[data-s="3"] .pwbars i:nth-child(-n+3){background:#b8860b}
body[data-theme=gemini] .pwmeter[data-s="4"] .pwbars i{background:var(--up)}
body[data-theme=gemini] .pwhint{font-size:11.5px;line-height:1.55;color:var(--ink3);margin:-4px 0 12px}
/* Turnstile mount. `:empty` collapses it entirely while CAPTCHA_SITE_KEY is blank, so the auth
   form has no phantom gap before bot protection is switched on. The widget's own iframe is a
   fixed 300x65; letting it overflow rather than clipping keeps it from being cut off if
   Cloudflare ever changes that size. */
body[data-theme=gemini] .capbox{margin:4px 0 10px;min-height:0}
body[data-theme=gemini] .capbox:empty{display:none}
body[data-theme=gemini] .auth-go.busy{opacity:.65;cursor:progress}
body[data-theme=gemini] .pc-soon{color:var(--ink3);font-style:normal;line-height:1.6}
@media (min-width:900px){body[data-theme=gemini] .plan-grid-3{grid-template-columns:repeat(3,1fr)}}
/* members-only gate — the signed-out terminal */
body[data-theme=gemini] .gate{display:flex;align-items:center;justify-content:center;min-height:min(72vh,640px);padding:24px 16px}
body[data-theme=gemini] .gate-card{width:100%;max-width:560px;border:1px solid var(--line);background:var(--panel);padding:32px 30px}
body[data-theme=gemini] .gate-kicker{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3)}
body[data-theme=gemini] .gate-h{font-size:26px;line-height:1.22;margin:10px 0 12px;font-weight:600}
body[data-theme=gemini] .gate-sub{font-size:14px;line-height:1.68;color:var(--ink2);margin:0 0 22px}
body[data-theme=gemini] .gate-cta{display:flex;flex-direction:column;gap:9px}
body[data-theme=gemini] .gate-cta .bw-go{width:100%}
body[data-theme=gemini] .gate-alt{width:100%;padding:12px 14px;background:transparent;border:1px solid var(--line);color:var(--ink1);font:inherit;font-size:13px;cursor:pointer}
body[data-theme=gemini] .gate-alt:hover{border-color:var(--ink1);background:var(--panel2)}
body[data-theme=gemini] .gate-open{margin-top:20px;padding-top:16px;border-top:1px solid var(--line);font-size:13px;line-height:1.6;color:var(--ink2)}
body[data-theme=gemini] .gate-legal{margin:14px 0 0;font-size:11.5px;line-height:1.6;color:var(--ink3)}
@media (max-width:420px){body[data-theme=gemini] .gate-card{padding:24px 18px}body[data-theme=gemini] .gate-h{font-size:22px}}
/* tradeability block on the ticker page — turnover, spread, exit time */
body[data-theme=gemini] .liq-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;margin-top:12px;background:var(--line)}
body[data-theme=gemini] .liq-cell{background:var(--panel2);padding:11px 13px;display:flex;flex-direction:column;gap:5px;min-width:0}
body[data-theme=gemini] .liq-k{font-size:10.5px;color:var(--ink3);text-transform:uppercase;letter-spacing:.04em;line-height:1.35}
body[data-theme=gemini] .liq-v{font-family:var(--num,inherit);font-size:17px;line-height:1.1}
@media (max-width:720px){body[data-theme=gemini] .liq-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:400px){body[data-theme=gemini] .liq-grid{grid-template-columns:1fr}}
/* the little contributions-vs-growth chart */
body[data-theme=gemini] .tbars{display:flex;align-items:flex-end;gap:3px;height:120px;margin-top:14px;padding-top:6px;border-bottom:1px solid var(--line)}
body[data-theme=gemini] .tbar{position:relative;flex:1;height:100%;display:flex;align-items:flex-end;justify-content:center}
body[data-theme=gemini] .tb-grow,body[data-theme=gemini] .tb-put{position:absolute;bottom:0;width:100%}
body[data-theme=gemini] .tb-grow{background:var(--up);opacity:.85}
body[data-theme=gemini] .tb-put{background:var(--ink1)}
body[data-theme=gemini] .tbar i{position:absolute;bottom:-15px;font-size:8.5px;color:var(--ink3);font-style:normal}
body[data-theme=gemini] .tlegend{display:flex;gap:16px;margin-top:20px;font-size:11px;color:var(--ink3)}
body[data-theme=gemini] .tlegend .sw{display:inline-block;width:9px;height:9px;margin-inline-end:5px}
body[data-theme=gemini] .tlegend .sw.put{background:var(--ink1)}
body[data-theme=gemini] .tlegend .sw.grow{background:var(--up);opacity:.85}
@media(max-width:720px){body[data-theme=gemini] .ttabs{flex-direction:column}
  body[data-theme=gemini] .ttab{flex:none;text-align:start}
  body[data-theme=gemini] .tgrid{grid-template-columns:1fr 1fr}
  body[data-theme=gemini] .tbar i{display:none}}
@media(max-width:720px){body[data-theme=gemini] .jy-body{padding:10px 11px}
  body[data-theme=gemini] .lh-side{gap:8px}}
/* levels */
body[data-theme=gemini] .lvl{border:1px solid var(--line);background:var(--panel);margin-bottom:10px}
body[data-theme=gemini] .lvl.locked{opacity:.55}
body[data-theme=gemini] .lvl.full{border-inline-start:3px solid var(--up)}
body[data-theme=gemini] .lvl-head{display:flex;align-items:center;gap:13px;padding:14px 16px}
body[data-theme=gemini] .lvl-n{flex:none;width:34px;height:34px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--ink1);font-family:"Pixelify Sans",var(--mono,monospace);font-size:16px}
body[data-theme=gemini] .lvl.full .lvl-n{background:var(--up);color:#fff;border-color:var(--up)}
body[data-theme=gemini] .lvl-t{flex:1;min-width:0}
body[data-theme=gemini] .lvl-t b{display:block;font-size:14.5px;margin-bottom:2px}
body[data-theme=gemini] .lvl-lessons{border-top:1px solid var(--hair)}
body[data-theme=gemini] .lvl-locked{border-top:1px solid var(--hair);padding:12px 16px}
body[data-theme=gemini] .lsn{display:flex;align-items:center;gap:13px;width:100%;text-align:start;background:transparent;border:none;border-bottom:1px solid var(--hair);padding:12px 16px;cursor:pointer;font:inherit;color:var(--ink1)}
body[data-theme=gemini] .lsn:last-child{border-bottom:none}
body[data-theme=gemini] .lsn:hover{background:var(--panel2)}
body[data-theme=gemini] .lsn-n{flex:none;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--line);font-family:"Pixelify Sans",var(--mono,monospace);font-size:13px}
body[data-theme=gemini] .lsn.done .lsn-n{background:var(--up);color:#fff;border-color:var(--up)}
body[data-theme=gemini] .lsn-t{flex:1;min-width:0}
body[data-theme=gemini] .lsn-t b{display:block;font-size:13.5px;margin-bottom:2px}
body[data-theme=gemini] .lsn-m{flex:none;font-size:11px;color:var(--ink3)}
/* ---- the lesson player: one idea per screen ---- */
body[data-theme=gemini] .pl-overlay{position:fixed;inset:0;background:rgba(10,10,10,.55);z-index:120;display:flex;align-items:center;justify-content:center;padding:20px}
body[data-theme=gemini] .pl-box{background:var(--panel);border:1.5px solid var(--ink1);width:min(760px,100%);max-height:92vh;display:flex;flex-direction:column}
body[data-theme=gemini] .pl-top{display:flex;align-items:flex-start;gap:12px;padding:15px 18px 10px}
body[data-theme=gemini] .pl-title{flex:1;min-width:0}
body[data-theme=gemini] .pl-title b{display:block;font-size:16px;margin-top:2px}
body[data-theme=gemini] .pl-x{flex:none;background:transparent;border:1px solid var(--line);width:28px;height:28px;cursor:pointer;font:inherit;color:var(--ink2)}
body[data-theme=gemini] .pl-dots{display:flex;gap:4px;padding:0 18px 12px}
body[data-theme=gemini] .pl-dot{flex:1;height:3px;background:var(--hair)}
body[data-theme=gemini] .pl-dot.did{background:var(--ink3)}
body[data-theme=gemini] .pl-dot.on{background:var(--ink1)}
body[data-theme=gemini] .pl-body{flex:1;overflow-y:auto;padding:0 18px}
body[data-theme=gemini] .pl-foot{display:flex;align-items:center;gap:12px;padding:14px 18px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .pl-foot .bw-go{margin:0 0 0 auto}
body[data-theme=gemini] .pl-back{background:none;border:none;color:var(--ink3);font:inherit;font-size:12.5px;cursor:pointer}
body[data-theme=gemini] .pl-back:disabled{opacity:.35;cursor:default}
body[data-theme=gemini] .pl-count{font-size:11px;color:var(--ink3)}
/* the card kinds — each visually unmistakable */
body[data-theme=gemini] .pl-kind{display:inline-block;font-size:9.5px;text-transform:uppercase;letter-spacing:.14em;padding:3px 8px;border:1px solid var(--line);color:var(--ink3);margin-bottom:12px}
body[data-theme=gemini] .pl-kind.k-warn{border-color:var(--dn);color:var(--dn)}
body[data-theme=gemini] .pl-kind.k-key{background:var(--ink1);color:var(--panel);border-color:var(--ink1)}
body[data-theme=gemini] .pl-kind.k-quiz{background:var(--accent);color:var(--panel);border-color:var(--accent)}
body[data-theme=gemini] .pl-kind.k-anatomy,body[data-theme=gemini] .pl-kind.k-docmap,body[data-theme=gemini] .pl-kind.k-timeline{border-color:var(--accent);color:var(--accent)}
body[data-theme=gemini] .pl-card{padding:6px 0 20px}
body[data-theme=gemini] .pl-card.k-warn{border-inline-start:3px solid var(--dn);padding-inline-start:14px}
body[data-theme=gemini] .pl-card.k-key{border-inline-start:3px solid var(--ink1);padding-inline-start:14px;background:var(--panel2)}
body[data-theme=gemini] .pl-h{font-size:19px;line-height:1.3;margin:0 0 10px}
body[data-theme=gemini] .pl-card p{font-size:14.5px;line-height:1.7;color:var(--ink2);margin:0 0 12px}
body[data-theme=gemini] .pl-card.k-key p{font-size:15.5px;font-weight:600;color:var(--ink1)}
body[data-theme=gemini] .pl-q{font-size:16px;font-weight:700;line-height:1.4;margin-bottom:14px}
/* interactive: the labelled statement */
body[data-theme=gemini] .anatomy{border:1px solid var(--line);margin-top:6px}
body[data-theme=gemini] .an-top{padding:11px 13px;border-bottom:1px solid var(--hair);background:var(--panel2)}
body[data-theme=gemini] .an-top b{display:block;font-size:14px}
body[data-theme=gemini] .an-src{padding:9px 13px;font-size:11.5px;line-height:1.55;color:var(--ink3);border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .an-head{padding:9px 13px 5px;font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink3);background:var(--panel2)}
body[data-theme=gemini] .an-row{display:flex;align-items:center;gap:10px;width:100%;background:transparent;border:none;border-bottom:1px solid var(--hair);padding:9px 13px;font:inherit;font-size:13px;color:var(--ink2);cursor:pointer;text-align:start}
body[data-theme=gemini] .an-row:hover{background:var(--panel2)}
body[data-theme=gemini] .an-row.on{background:color-mix(in srgb,var(--accent) 10%,var(--panel));color:var(--ink1)}
body[data-theme=gemini] .an-row.b{font-weight:700;color:var(--ink1)}
body[data-theme=gemini] .an-l{flex:1;min-width:0}
body[data-theme=gemini] .an-v{flex:none;font-family:"Pixelify Sans",var(--mono,monospace);font-size:13px}
body[data-theme=gemini] .an-v i{font-family:var(--font-body);font-size:10.5px;color:var(--ink3);font-style:normal}
body[data-theme=gemini] .an-row.has .an-v{color:var(--ink1)}
body[data-theme=gemini] .an-v.neg{color:var(--dn)}
body[data-theme=gemini] .an-i{flex:none;width:17px;height:17px;display:flex;align-items:center;justify-content:center;border:1px solid var(--hair);font-size:9.5px;color:var(--ink3)}
body[data-theme=gemini] .an-detail,body[data-theme=gemini] .dm-detail{padding:12px 13px;background:var(--panel2);border-top:1px solid var(--line);min-height:74px}
body[data-theme=gemini] .an-d-t{font-weight:700;font-size:13.5px;margin-bottom:5px}
body[data-theme=gemini] .an-detail p,body[data-theme=gemini] .dm-detail p{font-size:13px;line-height:1.6;margin:0 0 8px;color:var(--ink2)}
body[data-theme=gemini] .an-d-w{border-inline-start:3px solid var(--accent);padding:6px 10px;font-size:12.5px;line-height:1.55;color:var(--ink1);background:var(--panel)}
body[data-theme=gemini] .an-d-w .ark{display:block;margin-bottom:2px}
/* interactive: the document map */
body[data-theme=gemini] .docmap{display:grid;grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:6px;margin-top:6px}
body[data-theme=gemini] .dm-item{text-align:start;background:var(--panel);border:1px solid var(--line);padding:9px 11px;cursor:pointer;font:inherit;color:var(--ink1)}
body[data-theme=gemini] .dm-item:hover{border-color:var(--ink1)}
body[data-theme=gemini] .dm-item.on{background:color-mix(in srgb,var(--accent) 12%,var(--panel));border-color:var(--accent)}
body[data-theme=gemini] .dm-item b{display:block;font-size:12.5px;margin-bottom:2px}
body[data-theme=gemini] .dm-detail{grid-column:1/-1;border:1px solid var(--line)}
/* interactive: the dividend timeline */
body[data-theme=gemini] .divtl{margin-top:6px}
body[data-theme=gemini] .dt-step{display:flex;gap:13px;padding:11px 0;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .dt-step.hot .dt-dot{background:var(--accent);color:var(--panel);border-color:var(--accent)}
body[data-theme=gemini] .dt-step.hot{background:color-mix(in srgb,var(--accent) 7%,transparent)}
body[data-theme=gemini] .dt-dot{flex:none;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--ink1);font-family:"Pixelify Sans",var(--mono,monospace);font-size:13px}
body[data-theme=gemini] .dt-c b{display:block;font-size:13.5px}
body[data-theme=gemini] .dt-n{font-size:12.5px;line-height:1.55;color:var(--ink1);margin-top:5px;border-inline-start:3px solid var(--line);padding-inline-start:9px}
@media(max-width:720px){body[data-theme=gemini] .pl-overlay{padding:0}
  body[data-theme=gemini] .pl-box{max-height:100vh;height:100%;width:100%;border:none}
  body[data-theme=gemini] .docmap{grid-template-columns:1fr 1fr}}
body[data-theme=gemini] .ll-live{border:1px solid var(--line);padding:12px 14px;margin:14px 0}
body[data-theme=gemini] .ll-live>b{display:block;font-size:12px;margin-bottom:7px}
body[data-theme=gemini] .ll-row{display:flex;gap:12px;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .ll-row>span:first-child{font-weight:700;min-width:62px}
body[data-theme=gemini] .ll-row .sub{flex:1}
body[data-theme=gemini] .ll-go{display:inline-block;margin-top:9px;font-size:12px;font-weight:700;color:var(--accent)}
body[data-theme=gemini] .ls-check{border:1px dashed var(--line);padding:13px 14px;margin-top:14px}
body[data-theme=gemini] .ls-q{font-size:13.5px;font-weight:700;margin-bottom:10px}
body[data-theme=gemini] .ls-opt{display:block;width:100%;text-align:start;background:var(--panel);border:1px solid var(--line);font:inherit;font-size:13px;padding:9px 12px;margin-bottom:6px;cursor:pointer;color:var(--ink1)}
body[data-theme=gemini] .ls-opt:hover:not(:disabled){border-color:var(--ink1)}
body[data-theme=gemini] .ls-opt:disabled{cursor:default;opacity:.75}
body[data-theme=gemini] .ls-opt.right{border-color:var(--up);background:color-mix(in srgb,var(--up) 12%,var(--panel));opacity:1}
body[data-theme=gemini] .ls-opt.wrong{border-color:var(--dn);background:color-mix(in srgb,var(--dn) 12%,var(--panel));opacity:1}
body[data-theme=gemini] .ls-explain{font-size:13px;line-height:1.6;color:var(--ink2);margin-top:9px;padding-top:9px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .ls-foot{margin-top:16px}
/* plans */
body[data-theme=gemini] .plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(235px,1fr));gap:10px}
body[data-theme=gemini] .plan-card{border:1px solid var(--line);background:var(--panel);padding:16px}
body[data-theme=gemini] .plan-card.on{border:1.5px solid var(--ink1)}
body[data-theme=gemini] .plan-card.soon{opacity:.7}
body[data-theme=gemini] .pc-cta{margin-top:12px;padding-top:11px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .pc-btn{width:100%;background:var(--ink1);color:#f4f4f0;border:1.5px solid var(--ink1);font:inherit;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:11px 14px;cursor:pointer}
body[data-theme=gemini] .pc-btn:hover:not(:disabled){background:#000}
body[data-theme=gemini] .pc-btn.ghost{background:transparent;color:var(--ink3);border-color:var(--line);cursor:default}
body[data-theme=gemini] .pc-cta .pc-price{margin-top:8px;padding:0;border:none}
body[data-theme=gemini] .owner-preview{margin-top:12px;border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .pc-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
body[data-theme=gemini] .pc-top b{font-size:16px}
body[data-theme=gemini] .pc-feats{margin-top:11px;border-top:1px solid var(--hair);padding-top:9px}
body[data-theme=gemini] .pc-f{font-size:12.5px;color:var(--ink2);padding:4px 0 4px 15px;position:relative}
body[data-theme=gemini] .pc-f:before{content:"·";position:absolute;inset-inline-start:4px;font-weight:800;color:var(--ink1)}
body[data-theme=gemini] .pc-price{margin-top:11px;padding-top:9px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .mode-row{display:flex;gap:1px;background:var(--hair);border:1.5px solid var(--line);width:fit-content}
@media(max-width:720px){body[data-theme=gemini] .plan-grid{grid-template-columns:1fr}
  body[data-theme=gemini] .ls-head{gap:9px;padding:11px 12px}
  body[data-theme=gemini] .ls-mins{display:none}}
/* the generic paid-plan wall, used on every gated page */
body[data-theme=gemini] .plan-wall{text-align:center;padding:28px 22px;border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .plan-wall h3{margin:6px 0 8px;font-size:16.5px}
body[data-theme=gemini] .plan-wall .sub{max-width:470px;margin:0 auto 12px;line-height:1.6}
body[data-theme=gemini] .plan-wall .bw-go{margin:2px auto 0;display:block}
/* the daily sky (gochara) tiles + the comeback card */
body[data-theme=gemini] .goch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:10px;margin-bottom:12px}
body[data-theme=gemini] .goch-tile{border:1px solid var(--line);padding:10px 12px;background:var(--panel)}
body[data-theme=gemini] .goch-tile.up{border-inline-start:3px solid var(--up)}
body[data-theme=gemini] .goch-tile.dn{border-inline-start:3px solid var(--dn)}
body[data-theme=gemini] .goch-top{display:flex;align-items:center;gap:8px;margin-bottom:5px}
body[data-theme=gemini] .goch-top .pill{margin-inline-start:auto}
body[data-theme=gemini] .next-look{border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .nl-row{display:flex;gap:14px;padding:8px 0;border-bottom:1px solid var(--hair);align-items:baseline}
body[data-theme=gemini] .nl-row:last-of-type{border-bottom:none}
body[data-theme=gemini] .nl-row b.num{flex:none;font-family:"Pixelify Sans",var(--mono,monospace)}
body[data-theme=gemini] .orr-transit{opacity:.42}
@media(max-width:720px){body[data-theme=gemini] .goch-grid{grid-template-columns:1fr 1fr}}
body[data-theme=gemini] .syn-card{padding:0;margin-bottom:10px}
body[data-theme=gemini] .syn-head{display:flex;align-items:center;gap:12px;padding:12px 15px;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .syn-score{flex:none;width:44px;height:44px;display:flex;align-items:center;justify-content:center;font-family:"Pixelify Sans",var(--mono,monospace);font-size:20px;font-weight:700;border:1.5px solid var(--ink1)}
body[data-theme=gemini] .syn-score.sharmonious,body[data-theme=gemini] .syn-score.sfavourable{background:var(--up);color:#fff;border-color:var(--up)}
body[data-theme=gemini] .syn-score.stesting,body[data-theme=gemini] .syn-score.sdiscordant{background:var(--dn);color:#fff;border-color:var(--dn)}
body[data-theme=gemini] .syn-head .pill{margin-inline-start:auto}
body[data-theme=gemini] .syn-why{padding:10px 15px;display:flex;flex-direction:column;gap:6px}
body[data-theme=gemini] .syn-r{font-size:12px;line-height:1.5;color:var(--ink2);padding-inline-start:10px;border-inline-start:2px solid var(--hair)}
body[data-theme=gemini] .syn-r.up{border-left-color:var(--up)}body[data-theme=gemini] .syn-r.dn{border-left-color:var(--dn)}
@media(max-width:720px){body[data-theme=gemini] .bw-opts{grid-template-columns:1fr}body[data-theme=gemini] .mc-chart-top{gap:14px}}
/* Astro board — pixel grahas, the zodiac strip, and the reading cards */
body[data-theme=gemini] .pxg{display:inline-block;vertical-align:middle;image-rendering:pixelated}
body[data-theme=gemini] .zstrip{border:1.5px solid var(--line);margin:12px 0;overflow-x:auto}
body[data-theme=gemini] .zs-lane{display:grid;grid-template-columns:52px repeat(12,minmax(44px,1fr));border-bottom:1px solid var(--hair);min-width:580px}
body[data-theme=gemini] .zs-lane:last-child{border-bottom:none}
body[data-theme=gemini] .zs-lane.natal{background:var(--panel2,var(--panel))}
body[data-theme=gemini] .zs-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);display:flex;align-items:center;padding:4px 7px;border-inline-end:1px solid var(--hair)}
body[data-theme=gemini] .zs-cell{display:flex;flex-wrap:wrap;gap:3px;align-items:center;justify-content:center;padding:5px 2px;border-inline-end:1px solid var(--hair);min-height:34px}
body[data-theme=gemini] .zs-cell:last-child{border-inline-end:none}
body[data-theme=gemini] .zs-cell.sign{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);min-height:0;padding:3px 2px}
body[data-theme=gemini] .zs-g{display:inline-flex;flex-direction:column;align-items:center;gap:1px;color:var(--ink1)}
body[data-theme=gemini] .zs-g i{font-style:normal;font-size:8px;color:var(--ink3);line-height:1}
body[data-theme=gemini] .ar-card{border-inline-start:3px solid var(--ink1)}
body[data-theme=gemini] .ar-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
body[data-theme=gemini] .ar-head>b{font-size:17px}
body[data-theme=gemini] .ar-head .pill{margin-inline-start:auto}
body[data-theme=gemini] .ar-birth{margin-top:6px;line-height:1.55}
body[data-theme=gemini] .ar-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1px;background:var(--hair);border:1.5px solid var(--line);margin:0 0 12px}
body[data-theme=gemini] .ar-cell{background:var(--panel);padding:10px 12px;display:flex;flex-direction:column;gap:3px}
body[data-theme=gemini] .ark{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3)}
body[data-theme=gemini] .ar-cell>b{font-size:13.5px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
body[data-theme=gemini] .ar-cell>i{font-style:normal;font-size:11.5px;color:var(--ink3);line-height:1.5}
body[data-theme=gemini] .ar-read p{font-size:13px;line-height:1.65;color:var(--ink2);margin:0 0 8px}
body[data-theme=gemini] .ar-caveat{font-size:12px;color:var(--ink3);border-top:1px solid var(--hair);padding-top:9px}
body[data-theme=gemini] .ar-caveat a{color:var(--accent)}
/* the four value blocks: the dated dasha ladder, the falsification receipt, today's sky joined to
   what it measured, and the two reference charts. Each is a bordered slab so the eye can take one
   at a time — the complaint they answer was "basic info nobody will care about". */
body[data-theme=gemini] .ar-block{border:1.5px solid var(--line);background:var(--panel);padding:12px 14px 13px;margin:0 0 10px}
body[data-theme=gemini] .ar-bh{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
body[data-theme=gemini] .ar-bh>b{font-size:13.5px}
body[data-theme=gemini] .ar-bh .pill,body[data-theme=gemini] .ar-bh .tag{margin-inline-start:auto}
body[data-theme=gemini] .ar-bp{font-size:12.5px;line-height:1.6;color:var(--ink2);margin:0 0 9px}
body[data-theme=gemini] .ar-bn{font-size:11.5px;line-height:1.55;color:var(--ink3);margin:9px 0 0;border-top:1px solid var(--hair);padding-top:8px}
/* dasha ladder — one dated lane per period, tinted by the tradition's own benefic/malefic label */
body[data-theme=gemini] .ar-dl-wrap{display:flex;flex-direction:column;gap:1px;background:var(--hair);border:1px solid var(--line)}
body[data-theme=gemini] .ar-drow{display:grid;grid-template-columns:minmax(96px,1fr) minmax(84px,auto) minmax(112px,auto) minmax(72px,auto);gap:8px;align-items:center;background:var(--panel);padding:8px 10px;font-size:12px;border-inline-start:3px solid var(--line)}
body[data-theme=gemini] .ar-drow.benefic{border-inline-start-color:var(--up)}
body[data-theme=gemini] .ar-drow.malefic{border-inline-start-color:var(--dn)}
body[data-theme=gemini] .ar-dl{display:flex;align-items:center;gap:6px;font-weight:600}
body[data-theme=gemini] .ar-dk{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3)}
body[data-theme=gemini] .ar-dd{font-variant-numeric:tabular-nums;color:var(--ink2)}
body[data-theme=gemini] .ar-dn{font-size:10.5px;text-align:end;color:var(--ink3)}
body[data-theme=gemini] .ar-dn.benefic{color:var(--up)}
body[data-theme=gemini] .ar-dn.malefic{color:var(--dn)}
/* receipt table — scrolls in its own box rather than pushing the page sideways */
body[data-theme=gemini] .ar-tt{overflow-x:auto}
body[data-theme=gemini] .ar-tt table{width:100%;border-collapse:collapse;font-size:11.5px;min-width:420px}
body[data-theme=gemini] .ar-tt th{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);text-align:start;padding:5px 8px;border-bottom:1.5px solid var(--line)}
body[data-theme=gemini] .ar-tt td{padding:6px 8px;border-bottom:1px solid var(--hair);vertical-align:top}
body[data-theme=gemini] .ar-tt th.r,body[data-theme=gemini] .ar-tt td.r{text-align:end}
body[data-theme=gemini] .ar-tt td.num{font-variant-numeric:tabular-nums}
body[data-theme=gemini] .ar-tt .sub{font-size:10.5px;color:var(--ink3)}
/* today's sky → the measurement, one row each */
body[data-theme=gemini] .ar-live{display:flex;flex-direction:column;gap:1px;background:var(--hair);border:1px solid var(--line)}
body[data-theme=gemini] .ar-lrow{display:grid;grid-template-columns:minmax(150px,1fr) minmax(180px,1.4fr) minmax(180px,auto);gap:10px;background:var(--panel);padding:9px 10px;font-size:12px;align-items:start}
body[data-theme=gemini] .ar-lc{font-weight:600}
body[data-theme=gemini] .ar-ld{color:var(--ink3);font-size:11.5px;line-height:1.5}
body[data-theme=gemini] .ar-lm{text-align:end;display:flex;flex-direction:column;gap:2px}
body[data-theme=gemini] .ar-lm em{font-style:normal;font-weight:600;font-variant-numeric:tabular-nums}
body[data-theme=gemini] .ar-lm i{font-style:normal;font-size:10.5px;color:var(--ink3)}
/* the two reference charts side by side */
body[data-theme=gemini] .ar-cmpg{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1px;background:var(--hair);border:1px solid var(--line)}
body[data-theme=gemini] .ar-cmp{background:var(--panel);padding:10px 12px;display:flex;flex-direction:column;gap:4px}
body[data-theme=gemini] .ar-cmp>b{font-size:12.5px;line-height:1.5}
body[data-theme=gemini] .ar-cmp>i{font-style:normal;font-size:11px;color:var(--ink3);line-height:1.5}
@media (max-width:640px){
  body[data-theme=gemini] .ar-drow{grid-template-columns:1fr auto;row-gap:3px}
  body[data-theme=gemini] .ar-drow .ar-dd{grid-column:1;text-align:start}
  body[data-theme=gemini] .ar-drow .ar-dn{grid-column:2}
  body[data-theme=gemini] .ar-lrow{grid-template-columns:1fr;row-gap:4px}
  body[data-theme=gemini] .ar-lm{text-align:start;align-items:flex-start}
  /* the card clips its overflow, so a min-width table would lose its last column rather than
     scroll. On a phone the receipt drops the raw day count — effect, p and survives are what the
     row is for — and the table shrinks to fit instead. */
  body[data-theme=gemini] .ar-tt table{min-width:0}
  body[data-theme=gemini] .ar-tt th:nth-child(2),body[data-theme=gemini] .ar-tt td:nth-child(2){display:none}
  body[data-theme=gemini] .ar-tt th,body[data-theme=gemini] .ar-tt td{padding:5px 4px}
}
/* Strategies page — your board (tiles + add) */
body[data-theme=gemini] .sb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
body[data-theme=gemini] .sb-tile{position:relative;display:flex;flex-direction:column;gap:5px;border:1.5px solid var(--line);background:var(--panel2,var(--panel));padding:13px 15px;min-height:104px;font:inherit;color:var(--ink1);text-align:start}
body[data-theme=gemini] .sb-tile>b{font-size:16px;padding-inline-end:22px}
body[data-theme=gemini] .sb-nm{font-size:11px;color:var(--ink3);min-height:14px}
body[data-theme=gemini] .sb-tile .pill{align-self:flex-start;margin-top:auto}
body[data-theme=gemini] .sb-x{position:absolute;top:7px;inset-inline-end:7px;background:transparent;border:1.5px solid transparent;color:var(--ink3);font:inherit;font-size:11px;line-height:1;padding:3px 6px;cursor:pointer}
body[data-theme=gemini] .sb-x:hover{border-color:var(--dn);color:var(--dn)}
body[data-theme=gemini] .sb-add{border-style:dashed;background:var(--panel);cursor:default}
body[data-theme=gemini] .sb-add .ph-in{width:100%;flex:none;min-width:0}
body[data-theme=gemini] .sb-add .note-save{align-self:flex-start;margin-top:auto}
body[data-theme=gemini] .sb-res-head{display:flex;align-items:center;gap:10px;padding:12px 17px;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .sb-res-head .pill{margin-inline-start:auto}
/* Strategies page — the plain-English dictionary */
body[data-theme=gemini] .dict{display:block;border:1.5px solid var(--line);background:var(--panel);margin:10px 0 14px}
body[data-theme=gemini] .dict>summary{display:flex;align-items:center;gap:12px;list-style:none;cursor:pointer;padding:14px 17px}
body[data-theme=gemini] .dict>summary::-webkit-details-marker{display:none}
body[data-theme=gemini] .dict>summary:hover{background:var(--hair)}
body[data-theme=gemini] .dict-arrow{margin-inline-start:auto;color:var(--ink3)}
body[data-theme=gemini] .dict[open] .dict-arrow{transform:rotate(180deg)}
body[data-theme=gemini] .dict[open]>summary{border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .dict-cat{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);padding:14px 17px 4px}
body[data-theme=gemini] .dict-row{display:grid;grid-template-columns:230px 1fr 160px;gap:14px;align-items:baseline;padding:10px 17px;border-top:1px solid var(--hair)}
body[data-theme=gemini] .dict-row p{font-size:12.5px;color:var(--ink2);line-height:1.55;margin:0}
body[data-theme=gemini] .dict-meta{display:block;font-size:10.5px;color:var(--ink3);margin-top:3px}
body[data-theme=gemini] .dict-proven{font-size:11px;color:var(--up);text-align:end;white-space:nowrap}
body[data-theme=gemini] .dict-proven.none{color:var(--ink3)}
@media(max-width:720px){body[data-theme=gemini] .dict-row{grid-template-columns:1fr;gap:5px}body[data-theme=gemini] .dict-proven{text-align:start}}
/* Strategies page — request-a-strategy form */
body[data-theme=gemini] .rq-form{display:flex;flex-direction:column;gap:10px}
/* "how it works" — page prose demoted behind an expander so the glance row leads */
body[data-theme=gemini] .how{display:block;border:1.5px solid var(--line);background:var(--panel);margin:0 0 14px}
body[data-theme=gemini] .how>summary{display:flex;align-items:center;gap:12px;list-style:none;cursor:pointer;padding:11px 15px}
body[data-theme=gemini] .how>summary::-webkit-details-marker{display:none}
body[data-theme=gemini] .how>summary:hover{background:var(--hair)}
body[data-theme=gemini] .how[open]>summary{border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .how[open] .dict-arrow{transform:rotate(180deg)}
body[data-theme=gemini] .how>p{font-size:12.5px;color:var(--ink2);line-height:1.6;margin:0;padding:12px 15px}
/* Desk Room — full debate collapsed behind an expander */
body[data-theme=gemini] .room-transcript{border:1.5px solid var(--line);margin-top:12px}
body[data-theme=gemini] .room-transcript>summary{cursor:pointer;list-style:none;padding:10px 13px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink2);display:flex;align-items:center;justify-content:space-between;gap:8px}
body[data-theme=gemini] .room-transcript>summary::-webkit-details-marker{display:none}
body[data-theme=gemini] .room-transcript>summary::after{content:"▾";color:var(--ink3)}
body[data-theme=gemini] .room-transcript[open]>summary::after{content:"▴"}
body[data-theme=gemini] .room-transcript[open]>summary{border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .room-transcript>.two-col,body[data-theme=gemini] .room-transcript>.card{margin:12px 13px}
body[data-theme=gemini] .exhint{font-weight:400;text-transform:none;letter-spacing:0;color:var(--ink3);font-size:10px}
/* Full session transcript — the analysts' turns, in order, for people who read the working */
body[data-theme=gemini] .tr-wrap{padding:14px 15px}
body[data-theme=gemini] .tr-intro{font-size:12.5px;color:var(--ink3);line-height:1.6;margin:0 0 16px;padding-bottom:12px;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .tr-turn{display:grid;grid-template-columns:34px 1fr;gap:12px;padding-bottom:18px}
body[data-theme=gemini] .tr-rail{display:flex;flex-direction:column;align-items:center;gap:6px}
body[data-theme=gemini] .tr-rail::after{content:"";flex:1;width:1.5px;background:var(--hair)}
body[data-theme=gemini] .tr-turn:last-of-type .tr-rail::after{display:none}
body[data-theme=gemini] .tr-av{flex:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--ink1);color:#f4f4f0;font-size:10.5px;font-weight:700;letter-spacing:.04em}
body[data-theme=gemini] .tr-head{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:5px}
body[data-theme=gemini] .tr-head>b{font-size:14px}
body[data-theme=gemini] .tr-role{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .tr-p{font-size:13.5px;line-height:1.65;color:var(--ink2);margin:0 0 8px}
body[data-theme=gemini] .tr-ul{margin:0 0 8px 16px;padding:0}
body[data-theme=gemini] .tr-ul li{font-size:13px;line-height:1.6;color:var(--ink2);margin-bottom:4px}
body[data-theme=gemini] .tr-facts{display:flex;flex-wrap:wrap;gap:6px 14px;margin:0 0 8px}
body[data-theme=gemini] .tr-facts i{font-style:normal;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3)}
body[data-theme=gemini] .tr-facts b{font-size:12.5px}
body[data-theme=gemini] .tr-note{font-size:12.5px;color:var(--ink2);line-height:1.55;margin-bottom:6px;padding-inline-start:10px;border-inline-start:2px solid var(--hair)}
body[data-theme=gemini] .tr-note>span{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);margin-bottom:1px}
body[data-theme=gemini] .tr-claim{font-size:12.5px;color:var(--ink1);border:1.5px solid var(--line);padding:7px 10px;margin-top:8px}
body[data-theme=gemini] .tr-claim>span{display:block;font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin-bottom:2px}
body[data-theme=gemini] .tr-claim i{color:var(--ink3);font-style:normal}
body[data-theme=gemini] .tr-close{font-size:12.5px;color:var(--ink2);background:var(--panel2,var(--panel));border:1.5px solid var(--line);padding:10px 13px}
/* The test log — every strategy's prose verdict, pass and fail */
body[data-theme=gemini] .testlog{display:block;border:1.5px solid var(--line);background:var(--panel);margin:10px 0 14px}
body[data-theme=gemini] .testlog>summary{display:flex;align-items:center;gap:12px;list-style:none;cursor:pointer;padding:14px 17px}
body[data-theme=gemini] .testlog>summary::-webkit-details-marker{display:none}
body[data-theme=gemini] .testlog>summary:hover{background:var(--hair)}
body[data-theme=gemini] .testlog[open]>summary{border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .testlog[open] .dict-arrow{transform:rotate(180deg)}
body[data-theme=gemini] .tl-wrap{padding:14px 17px}
body[data-theme=gemini] .tl-sec{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin:14px 0 8px}
body[data-theme=gemini] .tl-row{border-inline-start:3px solid var(--line);padding:2px 0 10px 12px;margin-bottom:14px}
body[data-theme=gemini] .tl-row.pass{border-left-color:var(--up)}
body[data-theme=gemini] .tl-row.fail{border-left-color:var(--hair)}
body[data-theme=gemini] .tl-head{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:5px}
body[data-theme=gemini] .tl-head>b{font-size:14px}
body[data-theme=gemini] .tl-verdict{margin-inline-start:auto;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3)}
body[data-theme=gemini] .tl-verdict.up{color:var(--up)}
body[data-theme=gemini] .tl-rule{font-size:12.5px;color:var(--ink3);line-height:1.55;margin:0 0 6px}
body[data-theme=gemini] .tl-rule i{font-style:normal;text-transform:uppercase;font-size:10px;letter-spacing:.05em}
body[data-theme=gemini] .tl-p{font-size:13px;color:var(--ink2);line-height:1.65;margin:0 0 6px}
body[data-theme=gemini] .tl-why{font-size:12.5px;color:var(--ink2);line-height:1.6;margin:0}
@media(max-width:720px){body[data-theme=gemini] .tr-turn{grid-template-columns:26px 1fr;gap:9px}body[data-theme=gemini] .tr-av{width:26px;height:26px;font-size:9px}}
/* educational / risk layer on the ticker page */
body[data-theme=gemini] .disclaimer{border:1.5px solid var(--line);border-inline-start:4px solid var(--dn);background:var(--panel);padding:9px 13px;font-size:11.5px;line-height:1.5;color:var(--ink2);margin:8px 0 12px}
body[data-theme=gemini] .prov{font-size:10.5px;color:var(--ink3);letter-spacing:.02em;margin:8px 0 2px;line-height:1.5}
body[data-theme=gemini] .flaghdr{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;font-weight:700;padding-bottom:7px;margin-bottom:6px;border-bottom:1.5px solid var(--line)}
body[data-theme=gemini] .flaghdr.up{color:var(--up)}
body[data-theme=gemini] .flaghdr.dn{color:var(--dn)}
body[data-theme=gemini] .flag{display:flex;gap:8px;align-items:flex-start;font-size:12px;line-height:1.45;padding:6px 0;border-bottom:1px dotted var(--hair)}
body[data-theme=gemini] .flag span{font-size:9.5px;line-height:1.7;flex:none}
body[data-theme=gemini] .flag.pro span{color:var(--up)}
body[data-theme=gemini] .flag.con span{color:var(--dn)}
body[data-theme=gemini] .checklist{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--hair);border:1px solid var(--hair)}
body[data-theme=gemini] .qrow{display:flex;gap:10px;align-items:flex-start;background:var(--panel);padding:11px 13px}
body[data-theme=gemini] .qrow>div:last-child b{font-size:13px;display:block;margin-bottom:3px}
body[data-theme=gemini] .qmark{flex:none;width:20px;height:20px;border-radius:0;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;color:#fff;border:1.5px solid var(--line)}
body[data-theme=gemini] .qmark.ok{background:var(--up);border-color:var(--up)}
body[data-theme=gemini] .qmark.warn{background:var(--dn);border-color:var(--dn)}
body[data-theme=gemini] .qmark.info{background:var(--panel);color:var(--ink2)}
body[data-theme=gemini] .risktbl td{padding:9px 8px;border-bottom:1px dotted var(--hair);font-size:12px;vertical-align:top}
body[data-theme=gemini] .rlvl{display:inline-block;padding:1px 7px;border:1.5px solid var(--line);border-radius:0;font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
body[data-theme=gemini] .rlvl.hi{background:var(--dn);color:#fff;border-color:var(--dn)}
body[data-theme=gemini] .rlvl.md{background:transparent;color:var(--ink1)}
body[data-theme=gemini] .rlvl.lo{background:var(--up);color:#fff;border-color:var(--up)}
@media(max-width:720px){body[data-theme=gemini] .checklist{grid-template-columns:1fr}}
/* timing banner */
body[data-theme=gemini] .timing{display:flex;gap:0;border:1.5px solid var(--line);border-radius:0;overflow:hidden;margin-bottom:12px}
body[data-theme=gemini] .timing>div{flex:1;padding:12px 14px;border-inline-end:1px solid var(--hair)}
body[data-theme=gemini] .timing>div:last-child{border-inline-end:none}
body[data-theme=gemini] .timing span{display:block;font-size:9.5px;color:var(--ink3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px}
body[data-theme=gemini] .timing b{font-size:15px;font-weight:700}
body[data-theme=gemini] .cd{display:inline-block;min-width:24px;padding:1px 7px;border-radius:0;background:var(--ink1);color:#f4f4f0;font-weight:700;font-size:11.5px}
body[data-theme=gemini] .cd.soon{background:var(--dn);color:#fff}
body[data-theme=gemini] .seg{display:flex;align-items:center;gap:10px;margin:20px 0 10px}
body[data-theme=gemini] main>.seg:first-child{margin-top:2px}
body[data-theme=gemini] .seg h2{white-space:nowrap}
body[data-theme=gemini] .seg .ln{flex:1;height:1.5px;background:var(--line)}
/* global markets ticker tape (terminal) */
body[data-theme=gemini] .gstrip{display:flex;gap:0;overflow:hidden;border:1.5px solid var(--line);border-radius:0;margin-bottom:12px;background:var(--ink1)}
body[data-theme=gemini] .gstrip .gtrack{display:flex;gap:0;flex:none;width:max-content;animation:marquee 60s linear infinite;will-change:transform}
body[data-theme=gemini] .gstrip:hover .gtrack{animation-play-state:paused}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){body[data-theme=gemini] .gstrip{overflow-x:auto}body[data-theme=gemini] .gstrip .gtrack{animation:none;width:auto}}
body[data-theme=gemini] .gstrip .gitem{flex-direction:row;align-items:baseline;gap:6px;padding:6px 14px;border-inline-end:1px solid #333;white-space:nowrap;min-width:auto}
body[data-theme=gemini] .gstrip .gitem span{font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:#c9c9c2;order:0}
body[data-theme=gemini] .gstrip .gitem b{font-size:11.5px;font-weight:700;color:#f4f4f0}
body[data-theme=gemini] .gstrip .gitem i{font-size:10.5px;font-style:normal;font-weight:600}
/* terminal components: hero, funnel, matrix, status footer */
body[data-theme=gemini] .thero{font-family:var(--font-pixel);font-size:46px;font-weight:700;line-height:1;letter-spacing:.02em}
body[data-theme=gemini] .funnel{display:flex;flex-direction:column;gap:6px}
body[data-theme=gemini] .frow{display:flex;align-items:center;gap:8px}
body[data-theme=gemini] .frow span{font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink3);width:82px;flex:none}
body[data-theme=gemini] .fbar{height:20px;background:var(--ink1);color:#f4f4f0;display:flex;align-items:center;padding:0 8px;font-size:10.5px;font-weight:700}
body[data-theme=gemini] table.matrix{width:100%;border-collapse:collapse}
body[data-theme=gemini] table.matrix th{border:none;text-align:center;color:var(--ink3)}
body[data-theme=gemini] table.matrix td{text-align:center;padding:0;height:22px;border:1px solid var(--panel);font-weight:700;color:#fff;font-size:10.5px}
body[data-theme=gemini] table.matrix td.sym{color:var(--ink1);text-align:start;padding-inline-start:6px;background:var(--panel)!important;border-bottom:1px dotted var(--hair)}
body[data-theme=gemini] .foot{margin-top:10px;border:1.5px solid var(--line);background:var(--ink1);color:#bdbdb5;font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;padding:6px 12px;display:flex;gap:16px;flex-wrap:wrap}
body[data-theme=gemini] .foot b{color:#f4f4f0}

/* shared polarity + heat tint hooks */
body .up{color:var(--up)} body .dn{color:var(--dn)}

/* ---------- ticker search ---------- */
/* The search is a primary action, so it reads as a field rather than an icon button. Behaviour is
   unchanged (it still opens the palette) — only the target and the affordance grew. */
.searchbtn{display:flex;align-items:center;gap:9px;justify-content:flex-start;min-width:230px;height:34px;padding:0 10px;border-radius:0;border:1px solid var(--line);background:transparent;color:var(--ink2);cursor:pointer;transition:.12s}
.searchbtn .sb-label{font:inherit;font-size:12px;color:var(--ink3);white-space:nowrap}
.searchbtn .sb-key{margin-inline-start:auto;font-size:10.5px;color:var(--ink3);border:1px solid var(--hair);padding:1px 6px;line-height:1.5}
.searchbtn:hover{background:var(--line2);color:var(--ink1);border-color:var(--ink3)}
.searchbtn:hover .sb-label{color:var(--ink1)}
@media(max-width:1100px){.searchbtn{min-width:0;width:34px;justify-content:center;padding:0}
  .searchbtn .sb-label,.searchbtn .sb-key{display:none}}
.searchbtn svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.langbtn{display:flex;align-items:center;justify-content:center;height:34px;padding:0 12px;border-radius:0;border:1px solid var(--line);background:transparent;color:var(--ink2);cursor:pointer;transition:.12s;font:inherit;font-size:12px;white-space:nowrap}
.langbtn:hover{background:var(--line2);color:var(--ink1);border-color:var(--ink3)}
body[data-lang="ur"] .langbtn{font-family:"Noto Nastaliq Urdu","Jameel Noori Nastaleeq",serif}
.searchbox{position:fixed;inset:0;z-index:200;background:rgba(19,23,34,.28);backdrop-filter:blur(3px);display:flex;justify-content:center;align-items:flex-start;padding-top:12vh;animation:fadeIn .15s both}
.searchbox[hidden]{display:none!important}
.searchpanel{width:min(560px,92vw);background:#fff;border:1px solid var(--line);border-radius:0;box-shadow:0 20px 60px rgba(19,23,34,.25);overflow:hidden;animation:fadeUp .18s both}
.searchhead{display:flex;align-items:center;gap:10px;padding:0 14px 0 18px;border-bottom:1px solid var(--line)}
.searchhead .searchico{width:18px;height:18px;flex:none;fill:none;stroke:var(--ink3);stroke-width:2;stroke-linecap:round}
.searchpanel input{flex:1;border:none;outline:none;padding:18px 6px;font:600 17px var(--font-body,sans-serif);color:var(--ink1);background:transparent}
.searchclose{flex:none;width:32px;height:32px;border:none;background:var(--line2);color:var(--ink2);border-radius:0;font-size:15px;cursor:pointer;transition:.12s}
.searchclose:hover{background:var(--line);color:var(--ink1)}
.searchresults{max-height:52vh;overflow-y:auto}
.searchitem{display:flex;align-items:baseline;gap:10px;padding:11px 20px;cursor:pointer;border-bottom:1px solid var(--line2)}
.searchitem:hover{background:var(--surf)}
.searchitem b{font-size:14px;min-width:64px}
.searchitem span{font-size:12px;color:var(--ink3)}
@media (max-width:720px){
  body[data-theme=gemini] header.app .searchbtn{margin-inline-start:auto}
  .searchbox{padding-top:0}
  .searchpanel{width:100vw;height:100dvh;border-radius:0;border:none}
  .searchresults{max-height:calc(100dvh - 60px)}
}

/* ============ ANIMATIONS (subtle, reduced-motion aware) ============ */
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes barGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
/* page + card entrance: main children stagger in on each route render */
#view.enter>*{animation:fadeUp .22s cubic-bezier(.23,1,.32,1) both}
#view.enter>*:nth-child(1){animation-delay:.02s}
#view.enter>*:nth-child(2){animation-delay:.06s}
#view.enter>*:nth-child(3){animation-delay:.10s}
#view.enter>*:nth-child(4){animation-delay:.14s}
#view.enter>*:nth-child(5){animation-delay:.18s}
#view.enter>*:nth-child(n+6){animation-delay:.20s}
body[data-theme=gemini] .cell{animation:fadeIn .3s both}
/* ============ INTERACTION POLISH — consistent hover (web) + tap feedback (web+mobile) ============ */
/* kill the default blue mobile tap flash everywhere; we provide our own feedback */
body[data-theme=gemini] a,body[data-theme=gemini] button,body[data-theme=gemini] .clickable,
body[data-theme=gemini] [onclick],body[data-theme=gemini] [data-watch],body[data-theme=gemini] [data-broker],
body[data-theme=gemini] label{-webkit-tap-highlight-color:transparent}
/* smooth transitions on every interactive surface */
body[data-theme=gemini] button,body[data-theme=gemini] .card.clickable,body[data-theme=gemini] .cell,
body[data-theme=gemini] tr.clickable,body[data-theme=gemini] .side-nav a,body[data-theme=gemini] .replay-tile,
body[data-theme=gemini] .follow-chip,body[data-theme=gemini] .seg-opt,body[data-theme=gemini] .pill.clickable,
body[data-theme=gemini] .rp-btn2,body[data-theme=gemini] .rp-dot,body[data-theme=gemini] .starbtn,
body[data-theme=gemini] .crumb,body[data-theme=gemini] .rp-skip,body[data-theme=gemini] .note-save,
body[data-theme=gemini] .acct-btn,body[data-theme=gemini] .acct-signin,body[data-theme=gemini] nav.tabs a,
body[data-theme=gemini] .ranges button{transition:transform .09s ease,background .13s ease,border-color .13s ease,opacity .13s ease,color .13s ease}
/* HOVER (web) — a subtle lift/tint so things feel alive under the cursor */
@media(hover:hover){
  body[data-theme=gemini] tr.clickable:hover>td{background:var(--panel2)}
  body[data-theme=gemini] .replay-tile:hover,body[data-theme=gemini] .card.clickable:hover{background:var(--panel2)}
  body[data-theme=gemini] .crumb:hover{color:var(--ink1)}
  body[data-theme=gemini] .pill.clickable:hover{border-color:var(--ink2)}
  body[data-theme=gemini] button:hover:not(.on):not(:disabled){border-color:var(--ink2)}
}
/* TAP / CLICK press feedback (works on touch too) */
body[data-theme=gemini] button:active,body[data-theme=gemini] .card.clickable:active,body[data-theme=gemini] .cell:active,
body[data-theme=gemini] .replay-tile:active,body[data-theme=gemini] .follow-chip:active,body[data-theme=gemini] .seg-opt:active,
body[data-theme=gemini] .rp-btn2:active,body[data-theme=gemini] .starbtn:active,body[data-theme=gemini] .note-save:active,
body[data-theme=gemini] .side-nav a:active,body[data-theme=gemini] nav.tabs a:active,body[data-theme=gemini] .bottomnav a:active,
body[data-theme=gemini] .ranges button:active,body[data-theme=gemini] .acct-signin:active,body[data-theme=gemini] .rp-skip:active{transform:scale(.97);opacity:.9}
/* rows shouldn't scale (transform on tr is janky) — just deepen the tint on press */
body[data-theme=gemini] tr.clickable:active>td{background:var(--hair)}
body[data-theme=gemini] .card.clickable,body[data-theme=gemini] .cell,body[data-theme=gemini] tr.clickable{transition:transform .12s ease,box-shadow .15s ease,border-color .15s ease,background .1s ease}
body[data-theme=gemini] .pill{transition:background .2s ease,color .2s ease}
/* chart fades in when (re)drawn */
.chartwrap canvas{animation:fadeIn .3s both}
@media (prefers-reduced-motion:reduce){
  #view.enter>*,body[data-theme=gemini] .cell,.chartwrap canvas{animation:none!important}
  *{transition:none!important}
}

/* ============ BOTTOM NAV (mobile app bar) ============ */
.bottomnav{display:none}
.bottomnav svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ============ MOBILE (≤720px): single column, app chrome ============ */
@media (max-width:720px){
  body[data-theme=gemini]{--gap:14px;font-size:14px}
  body[data-theme=gemini] main{padding:14px 14px calc(76px + env(safe-area-inset-bottom));max-width:100%}
  /* header: brand + market status + search only; nav moves to bottom bar.
     NOTE: the live header is <header class="topbar"> (index.html), NOT header.app — an earlier set
     of `header.app` mobile rules here never applied to anything and has been re-scoped to .topbar.
     Keep new header rules on .topbar or they are silently dead. */
  /* no `overflow:hidden` here either — it clips the account dropdown on mobile exactly as the
     desktop rule did. The global html/body backstop handles sideways overflow. */
  body[data-theme=gemini] .topbar{padding:6px 10px;gap:6px;flex-wrap:nowrap;position:sticky;top:0}
  body[data-theme=gemini] .topbar nav.tabs{display:none}
  body[data-theme=gemini] .topbar .meta{display:none}
  body[data-theme=gemini] .topbar #health,
  body[data-theme=gemini] .topbar #regime,
  body[data-theme=gemini] .topbar #georisk{display:none!important}
  body[data-theme=gemini] .brand{font-size:15px;margin-inline-end:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  body[data-theme=gemini] header #mkt{font-size:10.5px;padding:3px 9px;white-space:nowrap;flex:none}
  body[data-theme=gemini] header .searchbtn{flex:none}
  /* everything stacks */
  body[data-theme=gemini] .grid-board,body[data-theme=gemini] .two-col{grid-template-columns:1fr!important;gap:var(--gap)}
  body[data-theme=gemini] main>.card,body[data-theme=gemini] main>.two-col,body[data-theme=gemini] .cards>*{margin-bottom:var(--gap)}
  /* NOTE: .card keeps padding:0 + the 12px child-inset rhythm (see .card>* rules above) —
     do not add card-level padding here, it would compound with the child margins below. */
  body[data-theme=gemini] .facts{grid-template-columns:1fr 1fr}
  body[data-theme=gemini] .statgrid{grid-template-columns:1fr 1fr}
  body[data-theme=gemini] .heat{grid-template-columns:repeat(3,1fr)}
  body[data-theme=gemini] .timing{flex-direction:column}
  body[data-theme=gemini] .timing>div{border-inline-end:none;border-bottom:1px solid var(--line)}
  body[data-theme=gemini] .tk-head .sym{font-size:24px}
  body[data-theme=gemini] .tk-head .px{font-size:22px}
  body[data-theme=gemini] .chartwrap canvas{height:280px!important}
  /* touch targets */
  body[data-theme=gemini] .ranges button{padding:8px 14px;font-size:13px;min-height:36px}
  body[data-theme=gemini] tr.clickable td,body[data-theme=gemini] td,body[data-theme=gemini] .risktbl td{padding:11px 8px}
  /* bottom nav bar */
  .bottomnav{display:flex;position:fixed;inset-inline-start:0;inset-inline-end:0;bottom:0;z-index:50;
    background:rgba(255,255,255,.92);backdrop-filter:blur(14px);border-top:1px solid var(--line);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));justify-content:space-around}
  .bottomnav a{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
    padding:6px 2px;color:var(--ink3);font-size:10.5px;font-weight:600;min-height:48px;
    border-radius:0;transition:color .15s,background .15s}
  .bottomnav a.on{color:var(--accent)}
  .bottomnav a.on svg{stroke:var(--accent)}
}
@media (max-width:400px){
  body[data-theme=gemini] .heat{grid-template-columns:repeat(2,1fr)}
  body[data-theme=gemini] .facts,body[data-theme=gemini] .statgrid{grid-template-columns:1fr 1fr}
}

/* ---------------------------------------------------------------------------
   Mobile overflow guards — MUST STAY LAST IN THIS FILE.
   These override earlier same-specificity rules (`.seg h2{white-space:nowrap}`), so moving them
   up the file silently disables them. Nothing may push the page body sideways: a long section
   heading wraps, and a wide table scrolls inside its own card instead of dragging the page.
   --------------------------------------------------------------------------- */
@media(max-width:720px){
  body[data-theme=gemini] .seg{flex-wrap:wrap}
  body[data-theme=gemini] .seg h2{white-space:normal}
}

/* ===========================================================================================
   TABLES ON MOBILE.

   WHAT WAS WRONG. The old rule was `.card table{display:block;overflow-x:auto;white-space:nowrap}`
   — "let it scroll sideways". Measured on a 375px viewport, that produced a Radar table 4,393px
   wide and a ticker-page risk table 1,113px wide, because `nowrap` forces a whole prose column
   ("The desk's angle", "Key risk", the risk commentary) onto a single unbreakable line. A reader
   had to drag a two-sentence paragraph past four screen-widths to finish it. `display:block` also
   quietly dropped `width:100%` — a block box shrink-wraps — so even narrow tables sat misaligned
   inside their card.

   WHAT HAPPENS NOW, in three tiers, because tables here are not one kind of thing:

   ≤720px — prose wraps. Numbers keep `nowrap` (a price broken across two lines is unreadable),
   everything else is free to wrap, and inline `width:150px` attributes baked into the HTML
   templates are overridden. Most tables now simply fit. The `.tscroll` wrapper (added by
   enhanceTables() in app.js) catches the ones that still cannot.

   ≤560px — tables with 5+ columns stack. At phone width there is no honest way to show seven
   numeric columns; a sideways scrollbar just hides four of them behind a gesture most people
   never make. Each row becomes its own block and each cell prints `label  value`, which is the
   same information in a shape that reads top-to-bottom like the rest of the page.

   Tables with 4 or fewer columns are NOT stacked — they already fit, and stacking would turn a
   19-row list into 76 lines and destroy the column-scan that makes a table worth using.
   =========================================================================================== */
.tscroll{max-width:100%}
@media(max-width:720px){
  .tscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
  /* Keyed to `.tscroll`, not `.card`. Two tables on the Ask page live in `.ans-block` rather than
     a card, and a `.card`-scoped guard missed them — which is why a separate `.ans-block table`
     patch had grown at the bottom of this file. Every table gets a `.tscroll` wrapper, so one
     selector now covers all of them wherever they sit. */
  body[data-theme=gemini] .tscroll table{
    display:table;width:100%;max-width:100%;white-space:normal}
  /* inline width="150px"/"180px" live in the HTML string templates (geo factors, ticker risk
     table). At 375px a 180px label column leaves 140px for a sentence. Release them.

     `overflow-wrap:break-word`, NOT `anywhere`: per spec `anywhere` also shrinks the box's
     min-content contribution to a single character, which is exactly what auto table layout uses
     to allocate column widths. With `anywhere`, the macro sector column collapsed to 24px while
     "Global tape explains" claimed 177px for a column whose values are all "2.6%". `break-word`
     still breaks a genuinely over-long word but leaves column sizing alone. */
  body[data-theme=gemini] .tscroll table th,body[data-theme=gemini] .tscroll table td{
    width:auto!important;min-width:0!important;max-width:none!important;overflow-wrap:break-word}
  /* ...but never break a number, a date, or a short status chip across lines.
     TD ONLY — not TH. `class="r"` marks a right-aligned COLUMN, so it sits on the header too, and
     holding a header like "Global tape explains" on one line reserved 177px for a column whose
     widest value is "2.6%", crushing the sector name beside it to 24px. Headers wrap; data does not. */
  body[data-theme=gemini] .tscroll table td.r,
  body[data-theme=gemini] .tscroll table td.num,body[data-theme=gemini] .tscroll table .pill,
  body[data-theme=gemini] .tscroll table .tag,body[data-theme=gemini] .tscroll table .cd{
    white-space:nowrap;overflow-wrap:normal}
}

/* ============ VERSION BADGE + WHAT'S NEW ============ */
body[data-theme=gemini] .side-ver{display:flex;align-items:center;justify-content:center;gap:6px;
  width:100%;background:none;border:none;border-top:1px solid var(--hair);color:var(--ink3);
  font:inherit;font-size:10px;letter-spacing:.06em;text-transform:uppercase;padding:9px 8px;
  cursor:pointer;transition:color .12s ease}
/* display:flex above outranks the UA's [hidden]{display:none}, so the markup's `hidden` attribute
   does NOT hide this button — renderVersion() bails early when there is no changelog yet and
   leaves an empty bordered bar pinned to the sidebar. Same idiom as .acct-menu[hidden] and
   .searchbox[hidden] elsewhere in this file. */
body[data-theme=gemini] .side-ver[hidden]{display:none}
body[data-theme=gemini] .side-ver.fresh{color:var(--accent)}
body[data-theme=gemini] .ver-dot{width:5px;height:5px;background:var(--accent);border-radius:50%;
  display:inline-block;flex:none}
@media(hover:hover){body[data-theme=gemini] .side-ver:hover{color:var(--ink1)}}
/* collapsed sidebar: the number is the whole point, so drop the "v" prefix room, not the badge */
body[data-theme=gemini] .sidebar.collapsed .side-ver span{display:none}
body[data-theme=gemini] .sidebar.collapsed .side-ver::after{content:"v";font-size:11px}

/* The panel is a column, not a scrolling block: the header and the close button stay put and only
   the release list moves. Whole-panel scroll pushes the ✕ off the top of a phone screen on the
   second release, which on a full-height sheet leaves no way out but the back gesture. */
body[data-theme=gemini] .wn-panel{display:flex;flex-direction:column;background:var(--panel);
  border:1.5px solid var(--ink1);width:min(560px,100%);max-height:88vh;min-height:0}
body[data-theme=gemini] .wn-top{display:flex;align-items:flex-start;gap:12px;padding:15px 18px 0}
body[data-theme=gemini] .wn-top h2{flex:1;min-width:0;margin:5px 0 0}
body[data-theme=gemini] .wn-x{flex:none}
body[data-theme=gemini] .wn-sub{padding:7px 18px 13px;margin:0;border-bottom:1px solid var(--hair)}
body[data-theme=gemini] .wn-body{flex:1;min-height:0;overflow-y:auto;padding:0 18px 16px;
  -webkit-overflow-scrolling:touch;overscroll-behavior:contain}
body[data-theme=gemini] .wn-rel{border-top:1.5px solid var(--line);padding:14px 0 4px}
body[data-theme=gemini] .wn-rel:first-of-type{border-top:none}
body[data-theme=gemini] .wn-h{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:8px}
body[data-theme=gemini] .wn-h b{font-size:14px}
body[data-theme=gemini] .wn-h span{font-size:12.5px;color:var(--ink2)}
body[data-theme=gemini] .wn-h i{margin-inline-start:auto;font-style:normal;font-size:10.5px;color:var(--ink3)}
body[data-theme=gemini] .wn-now .wn-h b{color:var(--accent)}
body[data-theme=gemini] .wn-rel ul{list-style:none;padding:0;margin:0}
body[data-theme=gemini] .wn-rel li{font-size:13px;line-height:1.6;color:var(--ink2);
  padding:5px 0 5px 14px;position:relative}
body[data-theme=gemini] .wn-rel li::before{content:"";position:absolute;inset-inline-start:0;top:12px;
  width:5px;height:1.5px;background:var(--ink3)}
/* Phone: full-height sheet, matching the lesson player, which already zeroes the overlay padding
   at this width. 88vh inside a zero-padding overlay would sit against the top edge with a 12vh
   gap under it — a box that is neither a sheet nor a centred dialog. */
@media(max-width:720px){
  body[data-theme=gemini] .wn-panel{width:100%;max-height:100vh;max-height:100dvh;height:100%;border:none}
  body[data-theme=gemini] .wn-top{padding:14px 15px 0}
  body[data-theme=gemini] .wn-sub{padding:7px 15px 12px}
  body[data-theme=gemini] .wn-body{padding:0 15px 20px}
  /* 28px is under the tap-target floor and this is the only way out of a full-screen sheet. */
  body[data-theme=gemini] .wn-x{width:40px;height:40px;margin:-6px -6px 0 0;font-size:15px}
  body[data-theme=gemini] .wn-rel li{font-size:13.5px}
}

/* ---- STACKED ROWS ----
   `data-stack` is set by restackTables() in app.js, which MEASURES each table against its card
   and only marks the ones that do not fit. Nothing here is keyed to a column count.

   TD horizontal padding is 0, not 12px, on purpose: the table already sits inside the `.tscroll`
   wrapper, which inherits an inset from whatever contains it — 12px from `.card>*:not(h2):not(.sub)`
   in a card, or `.ans-block`'s own 13px/15px padding on the Ask page. Repeating 12px here would
   double it, the same mistake the child-inset contract exists to prevent elsewhere. Same reasoning
   as `.fvline` (padding:3px 0): a row inside an already-inset container relies on that outer inset
   rather than adding its own. */
body[data-theme=gemini] .tscroll table[data-stack]{display:block}
body[data-theme=gemini] .tscroll table[data-stack] thead{display:none}
body[data-theme=gemini] .tscroll table[data-stack] tbody{display:block}
body[data-theme=gemini] .tscroll table[data-stack] tbody tr{
  display:block;padding:9px 0 10px;border-bottom:1.5px solid var(--line)}
body[data-theme=gemini] .tscroll table[data-stack] tbody tr:last-child{border-bottom:none}
/* `flex-wrap:wrap` matters: a cell whose value is a row of chips (the macro sector table's
   "demonstrated drivers") forms one anonymous flex item with `min-width:auto`, which refuses to
   shrink and pushed the card 166px wide even after stacking. Wrapping drops the value onto its
   own line, where it is free to reflow. */
body[data-theme=gemini] .tscroll table[data-stack] tbody td{
  display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:2px 14px;
  padding:3px 0;border:none;text-align:end}
body[data-theme=gemini] .tscroll table[data-stack] tbody td[data-l]::before{
  content:attr(data-l);flex:0 0 auto;font-size:9.5px;text-transform:uppercase;
  letter-spacing:.06em;color:var(--ink3);font-weight:600;text-align:start}
/* The first cell is the row's subject (the ticker, the date, the house). It gets no label and
   reads as a heading — otherwise every stacked row opens with "TICKER  UBL", which is noise. */
body[data-theme=gemini] .tscroll table[data-stack] tbody td:first-child{
  display:block;text-align:start;font-size:14px;font-weight:700;padding-bottom:5px}
body[data-theme=gemini] .tscroll table[data-stack] tbody td:first-child::before{content:none}
/* a cell with no header label (the caret / action column) has nothing to announce */
body[data-theme=gemini] .tscroll table[data-stack] tbody td:not([data-l]):not(:first-child){
  justify-content:flex-end}
/* Headless tables have no labels to print, so their cells stack as plain full-width blocks
   rather than label/value pairs. The first cell is still the subject line. */
body[data-theme=gemini] .tscroll table[data-stack][data-nohead] tbody td{
  display:block;text-align:start;padding:2px 0}
body[data-theme=gemini] .tscroll table[data-stack][data-nohead] tbody td:first-child{padding-bottom:4px}

/* ===========================================================================
   INTERACTION STATES — one place, applied consistently.
   Every clickable thing gets a hover AND a keyboard focus ring. The focus ring
   matters more than the hover: it is the only way a keyboard user can tell
   where they are, and it was missing entirely before this block.
   =========================================================================== */
body[data-theme=gemini] .note-save,
body[data-theme=gemini] .bw-go,
body[data-theme=gemini] .pc-btn,
body[data-theme=gemini] .ttab,
body[data-theme=gemini] .seg-opt,
body[data-theme=gemini] .scr-sample,
body[data-theme=gemini] .ls-opt,
body[data-theme=gemini] .lsn,
body[data-theme=gemini] .jy-lsn,
body[data-theme=gemini] .an-row,
body[data-theme=gemini] .dm-item,
body[data-theme=gemini] .lang-btn,
body[data-theme=gemini] .searchbtn,
body[data-theme=gemini] .acct-btn,
body[data-theme=gemini] .acct-signin,
body[data-theme=gemini] .starbtn,
body[data-theme=gemini] .side-open,
body[data-theme=gemini] .pl-x,
body[data-theme=gemini] .pl-back,
body[data-theme=gemini] .mkt-x,
body[data-theme=gemini] .idx-cell,
body[data-theme=gemini] .clickable,
body[data-theme=gemini] .ph-in,
body[data-theme=gemini] .mkt-rule select,
body[data-theme=gemini] .mkt-rule input{transition:background .12s ease,border-color .12s ease,color .12s ease,opacity .12s ease}

/* keyboard focus: visible on every interactive element, never on mouse click */
body[data-theme=gemini] a:focus-visible,
body[data-theme=gemini] button:focus-visible,
body[data-theme=gemini] input:focus-visible,
body[data-theme=gemini] select:focus-visible,
body[data-theme=gemini] textarea:focus-visible,
body[data-theme=gemini] [tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* text inputs: a real focus state, not just the browser default */
body[data-theme=gemini] .ph-in:focus,
body[data-theme=gemini] .tknote:focus,
body[data-theme=gemini] .mkt-rule select:focus,
body[data-theme=gemini] .mkt-rule input:focus{border-color:var(--ink1);outline:none}

/* hovers that were missing */
body[data-theme=gemini] .note-save:hover:not(:disabled){opacity:1;background:#000}
body[data-theme=gemini] .seg-opt:hover:not(.on):not(:disabled){background:var(--panel2);color:var(--ink1)}
body[data-theme=gemini] .idx-cell:hover{background:var(--panel2)}
body[data-theme=gemini] .xr-row:hover,
body[data-theme=gemini] .lrow:hover,
body[data-theme=gemini] .al-row:hover,
body[data-theme=gemini] .scan-row:hover,
body[data-theme=gemini] .ll-row:hover{background:var(--panel2)}
body[data-theme=gemini] .sc-tile:hover,
body[data-theme=gemini] .comm-card:hover,
body[data-theme=gemini] .wx-card:hover,
body[data-theme=gemini] .plan-card:hover,
body[data-theme=gemini] .mkt-card:hover{border-color:var(--ink3)}
body[data-theme=gemini] .pl-x:hover,
body[data-theme=gemini] .mkt-x:hover{border-color:var(--ink1);color:var(--ink1)}
body[data-theme=gemini] .pl-back:hover:not(:disabled){color:var(--ink1)}
body[data-theme=gemini] .acct-btn:hover,
body[data-theme=gemini] .acct-signin:hover{background:#000}
body[data-theme=gemini] .side-open:hover{background:var(--panel2)}
body[data-theme=gemini] .starbtn:hover{border-color:var(--ink1)}
body[data-theme=gemini] a.clickable:hover,
body[data-theme=gemini] tr.clickable:hover{background:var(--panel2)}

/* nothing disabled should look interactive */
body[data-theme=gemini] button:disabled{cursor:default;opacity:.55}
body[data-theme=gemini] button:disabled:hover{background:inherit;border-color:inherit}

/* pointer affordance everywhere it is actually clickable */
body[data-theme=gemini] .clickable,
body[data-theme=gemini] .idx-cell,
body[data-theme=gemini] tr.clickable{cursor:pointer}

/* respect reduced motion for every transition added above */
@media(prefers-reduced-motion:reduce){
  body[data-theme=gemini] *{transition:none!important;animation:none!important}
}

/* touch targets: on a phone nothing interactive should be under ~34px tall */
@media(max-width:720px){
  body[data-theme=gemini] .note-save,
  body[data-theme=gemini] .bw-go,
  body[data-theme=gemini] .pc-btn,
  body[data-theme=gemini] .seg-opt,
  body[data-theme=gemini] .ttab,
  body[data-theme=gemini] .scr-sample{min-height:36px}
  body[data-theme=gemini] .ph-in,
  body[data-theme=gemini] .mkt-rule select,
  body[data-theme=gemini] .mkt-rule input{min-height:38px}
}

/* ===========================================================================
   RESPONSIVE + A11Y HARDENING (from the UI audit)
   =========================================================================== */
/* The sticky header must never push the page sideways. This used to be `overflow:hidden` on
   .topbar — which worked, and silently broke the account menu: the topbar is 49px tall, so an
   absolutely-positioned dropdown inside it was CLIPPED to 49px. The button appeared dead.
   That was a stacking-independent bug; raising z-index alone did not fix it (verified by
   hit-testing a probe at the menu's own coordinates — the probe never won).
   `overflow-x:hidden; overflow-y:visible` is not an escape either: per spec, when one axis is
   clipped the `visible` axis computes to `auto`, which still creates a clipping scrollport.
   So: no overflow on the header at all. Sideways protection is already guaranteed one line
   below by the global html/body backstop, which is the correct place for it — a page-level
   invariant enforced at page level, instead of every sticky child clipping its own children. */
body[data-theme=gemini] .topbar{min-width:0}
body[data-theme=gemini] .topbar>*{min-width:0}
/* Global backstop — nothing should ever produce a horizontal scrollbar.
   `clip`, NOT `hidden`, and the comment three lines above explains why without having spotted
   that it applied here too: when one axis is `hidden` the other computes to `auto`, so this line
   turned html/body into a scrollport. A scrollport is a sticky container — which silently broke
   BOTH `position:sticky` boxes in the app. The sidebar and the topbar scrolled away with the page
   instead of holding, and the sidebar's tail was left stranded mid-document.
   `overflow-x:clip` clips without creating a scroll container, so `overflow-y` stays `visible`
   and sticky works. The `hidden` declaration is kept first as the fallback for engines predating
   `clip` (Safari <16): they lose sticky, exactly as before, but never gain a sideways scrollbar. */
html,body{max-width:100%;overflow-x:hidden;overflow-x:clip}
/* the account menu is absolutely positioned; keep it inside the viewport as it grows */
body[data-theme=gemini] .acct-menu{max-width:calc(100vw - 24px)}

/* (The old `.ans-block table{display:block;overflow-x:auto}` patch lived here. It existed because
   the table guard used to be scoped to `.card`, so the Ask page's tables escaped it. The guard is
   now keyed to the `.tscroll` wrapper, which every table gets regardless of what contains it, so
   this rule is redundant — and harmful: being last in the file it won on equal specificity and
   re-imposed the `display:block` shrink-wrap the new rules exist to undo.) */

/* --- touch targets: nothing interactive under ~32px on a phone --- */
body[data-theme=gemini] .auth-x,
body[data-theme=gemini] .pl-x,
body[data-theme=gemini] .bw-x,
body[data-theme=gemini] .replay-x,
body[data-theme=gemini] .sb-x,
body[data-theme=gemini] .mkt-x,
body[data-theme=gemini] .ph-del{min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center}
@media(max-width:900px){
  /* the hamburger is the most-tapped control on a phone and was 30x30 */
  body[data-theme=gemini] .side-open{width:40px;height:40px}
  body[data-theme=gemini] .acct-btn{width:36px;height:36px}
}
@media(max-width:720px){
  body[data-theme=gemini] .starbtn{width:32px;height:32px}
  /* a 4px-tall bar was a tap target; keep the visual, grow the hit area */
  body[data-theme=gemini] .rp-dot{padding:10px 0;background-clip:content-box}
}
/* ---------------------------------------------------------------------------
   Scout-backlog features: CSV export · glossary · compare · desk-rule check ·
   since-your-last-visit. Hard corners and mono labels throughout, per the
   locked design language — no radii, no new fonts, existing tokens only.
   --------------------------------------------------------------------------- */
body[data-theme=gemini] .csv-btn{padding:5px 11px;font-size:10px;margin-inline-start:auto}

/* glossary */
body[data-theme=gemini] .gloss-list{display:flex;flex-direction:column;gap:0}
body[data-theme=gemini] .gloss-item{padding:12px 0;border-bottom:1px solid var(--line2)}
body[data-theme=gemini] .gloss-item:last-child{border-bottom:0;padding-bottom:0}
body[data-theme=gemini] .gloss-item:first-child{padding-top:0}
body[data-theme=gemini] .gloss-term{font-weight:700;font-size:13px;margin-bottom:4px}
body[data-theme=gemini] .gloss-def{font-size:13px;line-height:1.62;color:var(--ink2)}

/* compare */
body[data-theme=gemini] .cmp-table th{vertical-align:bottom}
body[data-theme=gemini] .cmp-table td:first-child,
body[data-theme=gemini] .cmp-table th:first-child{white-space:nowrap}
body[data-theme=gemini] .cmp-x{margin-inline-start:6px;cursor:pointer;opacity:.7}
body[data-theme=gemini] .cmp-x:hover{opacity:1}

/* desk-rule check + sizer */
body[data-theme=gemini] .dr-row{display:flex;align-items:baseline;gap:10px;padding:7px 0;border-bottom:1px solid var(--line2)}
body[data-theme=gemini] .dr-row:last-of-type{border-bottom:0}
body[data-theme=gemini] .dr-dot{width:18px;height:18px;flex:0 0 18px;display:inline-flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:700;border:1.5px solid var(--ink1);align-self:center}
body[data-theme=gemini] .dr-dot.ok{background:var(--up);border-color:var(--up);color:#fff}
body[data-theme=gemini] .dr-dot.no{background:var(--warn);border-color:var(--warn);color:#000}
body[data-theme=gemini] .dr-lab{font-size:13px;font-weight:700}
body[data-theme=gemini] .dr-det{margin-inline-start:auto;text-align:end}
body[data-theme=gemini] .dr-f{display:flex;flex-direction:column;gap:4px;font-size:10px;font-weight:700;
  text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);flex:1 1 150px}

/* since your last visit */
body[data-theme=gemini] .since-card{border-inline-start:3px solid var(--accent)}
body[data-theme=gemini] .since-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}
body[data-theme=gemini] .since-x{margin-inline-start:auto;background:none;border:0;color:var(--ink3);cursor:pointer;
  font:inherit;font-size:13px;min-width:32px;min-height:32px}
body[data-theme=gemini] .since-x:hover{color:var(--ink1)}
body[data-theme=gemini] .since-body{font-size:13.5px;line-height:1.6}

@media(max-width:720px){
  body[data-theme=gemini] .dr-det{margin-inline-start:0;text-align:start;flex-basis:100%}
  body[data-theme=gemini] .dr-row{flex-wrap:wrap}
}

/* ── SCROLL TILES ─────────────────────────────────────────────────────────────
   A long list inside a card used to push every card under it off the bottom of
   the phone — the board's universe grid buried the strategy and predictability
   tiles under ~120 cells. A .tilebox caps the height and scrolls INSIDE the
   card, so what follows stays reachable.

   Two elements are required, not one: the fade lives on the wrapper, because a
   ::after on the scrolling element itself scrolls away with the content and is
   only visible when it is already useless.

   This is NOT a small-screen-only affordance. A 120-cell grid runs past the fold
   on a 1440px monitor too, and burying a card under it is the same failure at any
   width. What the width changes is the size of the cap, and that is decided in JS
   (tileDims) from the viewport height and written to --tilemax — so these rules
   are unconditional and the media query that used to gate them is gone. */
body[data-theme=gemini] .tilebox{position:relative}

body[data-theme=gemini] .tilebody{
  max-height:var(--tilemax,340px);overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;padding-inline-end:8px}
/* The scrollbar is the other half of the signal. Mobile overlay scrollbars
   only appear once the user has already guessed there was more, so give this
   one a permanent track: a visible groove says "scrollable" at rest. */
body[data-theme=gemini] .tilebody::-webkit-scrollbar{width:6px}
body[data-theme=gemini] .tilebody::-webkit-scrollbar-track{background:var(--line);border:0}
body[data-theme=gemini] .tilebody::-webkit-scrollbar-thumb{background:var(--ink3);border:0}
body[data-theme=gemini] .tilebody::-webkit-scrollbar-thumb:hover{background:var(--ink2)}

body[data-theme=gemini] .tilebox::after{
  content:"";position:absolute;inset-inline:0;bottom:0;height:54px;pointer-events:none;
  background:linear-gradient(to bottom,transparent,var(--panel) 92%);
  backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 60%);
  mask-image:linear-gradient(to bottom,transparent,#000 60%);
  opacity:1;transition:opacity .18s ease}
/* A blur alone reads as a rendering artefact on a static screen. Name it. */
body[data-theme=gemini] .tilebox::before{
  content:"scroll ▾";position:absolute;inset-inline-end:10px;bottom:5px;z-index:1;
  font-family:var(--mono,ui-monospace,monospace);font-size:9px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);
  pointer-events:none;opacity:1;transition:opacity .18s ease}
body[data-theme=gemini] .tilebox.at-end::after,
body[data-theme=gemini] .tilebox.at-end::before{opacity:0}
/* Content that fits gets no decoration at all — wireTiles() measures it. */
body[data-theme=gemini] .tilebox.no-scroll::after,
body[data-theme=gemini] .tilebox.no-scroll::before{display:none}

/* ── EXPAND/COLLAPSE ROWS INSIDE A STACKED TABLE ──────────────────────────────
   `.tscroll table[data-stack] tbody tr{display:block}` is specificity (0,3,4)
   and beats the plain `.fvdetail{display:none}` at (0,2,1). So the moment the
   value table stacked on a phone, EVERY row's working-detail block was forced
   open — the page the desk shows as a scannable list became a wall. Re-state
   the collapse at stacked specificity; `.open` then switches to `block`,
   because `display:table-row` means nothing inside a table that is a block. */
body[data-theme=gemini] .tscroll table[data-stack] tbody tr.fvdetail{
  display:none;padding:0;border-bottom:none}
body[data-theme=gemini] .tscroll table[data-stack] tbody tr.fvdetail.open{display:block}
body[data-theme=gemini] .tscroll table[data-stack] tbody tr.fvdetail>td{
  display:block;padding:0;text-align:start}
body[data-theme=gemini] .tscroll table[data-stack] tbody tr.fvdetail>td::before{content:none}
/* The caret is the whole affordance on mobile — the row is the tap target, but
   nothing says so unless the caret is legible. */
body[data-theme=gemini] .tscroll table[data-stack] .fvrow .fvcaret{font-size:13px;color:var(--ink2)}

/* ── SEE MORE ─────────────────────────────────────────────────────────────────
   Rows past the fold are rendered but hidden, so "show all" is a class removal
   and never a re-fetch or a re-render that loses the user's place. The stacked
   rule (0,3,4) has to be beaten here too. */
body[data-theme=gemini] tr.xmore{display:none}
body[data-theme=gemini] .tscroll table[data-stack] tbody tr.xmore{display:none}
body[data-theme=gemini] .morebar{
  display:block;width:100%;margin-top:2px;padding:11px 0;
  background:var(--panel2);border:0;border-top:1.5px solid var(--line);
  color:var(--ink2);cursor:pointer;
  font-family:var(--mono,ui-monospace,monospace);font-size:10.5px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase}
body[data-theme=gemini] .morebar:hover{color:var(--ink1);background:var(--panel)}
