/* Company Overview — the tearsheet.
 *
 * Tokens are the design handoff's, verbatim (design_handoff_company_overview/README.md
 * "Design Tokens"). They are declared on .ovx rather than :root so this page can carry
 * its own palette without reaching into the rest of the app, which runs on a different
 * (oklch) scale — one page changing, not the whole product.
 *
 * Dark mode: the handoff specifies a single light palette. Rather than invent a dark
 * one, the tokens are re-pointed at the app's existing dark surfaces under
 * [data-theme="dark"], so a reader who has chosen dark elsewhere is not flash-banged by
 * this page.
 */

.ovx{
  --bg:#faf8f4; --card:#ffffff; --warm:#f7f4ec; --track:#f4f1ea;
  --ink:#1b1a17; --ink-2:#33302a; --body:#4a423f; --body-2:#4d4a44;
  --muted:#6f6a62; --muted-2:#7c766d;
  --faint:#928c82; --faint-2:#a8a29a; --faint-3:#a09a8e;
  --line:#e7e2d8; --line-2:#e2ddd2; --line-3:#ddd7cb;
  --hair:#efece4; --hair-2:#f2efe8; --dotted:#cfc8ba;
  --green:#146b52; --green-dark:#0e4d3a; --chart-fill:#e9f0ec;
  --red:#b02a20; --red-bg:#fdf0ee; --red-line:#f0cbc5; --red-faint:#d8a49d;
  --amber:#a06a12; --amber-bg:#f7f4ec; --amber-line:#e2dbc9; --amber-ring:#d8c69a;
  --serif:Spectral,Georgia,serif;
  --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --ui:'Helvetica Neue',Helvetica,Arial,system-ui,sans-serif;
  font-family:var(--ui); color:var(--ink); -webkit-font-smoothing:antialiased;
}
:root[data-theme="dark"] .ovx{
  --bg:oklch(0.185 0.008 70); --card:oklch(0.218 0.008 70); --warm:oklch(0.25 0.008 70);
  --track:oklch(0.25 0.008 70);
  --ink:oklch(0.94 0.006 80); --ink-2:oklch(0.90 0.006 80); --body:oklch(0.80 0.006 80);
  --body-2:oklch(0.78 0.006 80); --muted:oklch(0.70 0.006 80); --muted-2:oklch(0.68 0.006 80);
  --faint:oklch(0.62 0.006 80); --faint-2:oklch(0.58 0.006 80); --faint-3:oklch(0.58 0.006 80);
  --line:oklch(0.31 0.008 70); --line-2:oklch(0.33 0.008 70); --line-3:oklch(0.36 0.008 70);
  --hair:oklch(0.28 0.008 70); --hair-2:oklch(0.27 0.008 70); --dotted:oklch(0.42 0.008 70);
  --green:oklch(0.74 0.11 150); --green-dark:oklch(0.80 0.11 150);
  --chart-fill:oklch(0.28 0.04 150);
  --red:oklch(0.70 0.14 28); --red-bg:oklch(0.26 0.05 28); --red-line:oklch(0.36 0.07 28);
  --red-faint:oklch(0.50 0.09 28);
  --amber:oklch(0.78 0.11 75); --amber-bg:oklch(0.25 0.03 75); --amber-line:oklch(0.34 0.04 75);
  --amber-ring:oklch(0.42 0.06 75);
}

.ovx a{color:var(--green);text-decoration:none}
.ovx a:hover{color:var(--green-dark);text-decoration:underline}
.ovx button{font-family:inherit}
.ovx .k{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--faint)}
.ovx .card{background:var(--card);border:1px solid var(--line);border-radius:10px}

/* ── company header ───────────────────────────────────────────────────────────── */
.ovx-head{padding:30px 0 0;display:flex;align-items:flex-start;gap:40px;flex-wrap:wrap}
.ovx-head .l{flex:1 1 480px;min-width:300px}
.ovx-eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--faint)}
/* The sector, clickable through to the screener filtered by it. Underlined on hover
   rather than always: the eyebrow is a classification line first and a control second,
   and four permanently-linked-looking words above the company name read as navigation
   the reader is supposed to use. Focus IS always visible — it is reachable by keyboard
   (role=link, tabindex=0) and a focus ring you cannot see is not an affordance. */
.ovx-sector{cursor:pointer;color:var(--ink-2);text-underline-offset:3px;background:none;border:0;padding:0;font:inherit;letter-spacing:inherit;text-transform:inherit}
.ovx-sector:hover{color:var(--accent);text-decoration:underline}
.ovx-sector:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}
.ovx h1.ovx-co{font-family:var(--serif);font-weight:600;font-size:40px;line-height:1.1;
  margin:8px 0 0;letter-spacing:-.4px;color:var(--ink);text-wrap:pretty}
.ovx-px{display:flex;align-items:baseline;gap:14px;margin-top:14px;font-family:var(--mono);
  flex-wrap:wrap}
.ovx-px .p{font-size:26px;font-weight:500}
.ovx-px .m{font-size:14px}
.ovx-px .m.up{color:var(--green)} .ovx-px .m.dn{color:var(--red)}
.ovx-px .s{font-size:12px;color:var(--faint)}
.ovx-head .r{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:10px}
.ovx-head .r .ovx-print{margin-top:0;justify-content:flex-end}
.ovx-btns{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.ovx-b{border-radius:8px;padding:10px 16px;font-size:13.5px;font-weight:500;cursor:pointer;
  border:1px solid transparent;transition:background .14s ease,border-color .14s ease}
.ovx-b.dark{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.ovx-b.dark:hover{background:#33302a}
.ovx-b.out{background:var(--card);color:var(--ink-2);border-color:var(--line-3);font-weight:400}
.ovx-b.out:hover{border-color:#bdb5a5}
.ovx-b.red{background:var(--red);color:#fff;border-color:var(--red)}
.ovx-b.red:hover{background:#8f2019}
.ovx-b.green{background:var(--green);color:#fff;border-color:var(--green)}
.ovx-b.green:hover{background:var(--green-dark)}
.ovx-b[disabled]{opacity:.55;cursor:default}
/* Owner-only controls. Dashed and quiet on purpose: they sit beside the buttons a
   customer sees, and must never read as part of the product. */
.ovx-b.ovx-owner{border-style:dashed;font-family:var(--mono);font-size:11px;
  letter-spacing:.04em;text-transform:uppercase;padding:8px 12px;color:var(--muted)}
.ovx-b.ovx-owner:hover{color:var(--ink-2);border-color:#bdb5a5}
.ovx-pos{display:flex;align-items:center;gap:10px;font-family:var(--mono);font-size:11px;
  color:var(--muted);text-align:right}
.ovx-pos i{width:6px;height:6px;border-radius:50%;background:var(--green);display:inline-block;
  flex:0 0 auto}
.ovx-pos.dn i{background:var(--red)}

/* factor scores — QVM and its three components, as percentile chips in a rail card */
.ovx-fxrow{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
.ovx-fx{font-family:var(--mono);font-size:11px;letter-spacing:.06em;border-radius:6px;
  padding:6px 10px;cursor:help;border:1px solid var(--line-2);background:var(--card);
  color:var(--muted);display:inline-flex;gap:6px;align-items:baseline;flex:1 1 auto;
  justify-content:center}
.ovx-fx b{font-weight:600;color:var(--ink);font-size:12.5px}
/* The composite leads on weight and a warm fill, not by inverting to black — it is one
   score among four, not a different kind of thing. */
.ovx-fx.lead{background:var(--track);border-color:var(--line-3);color:var(--body-2);
  font-weight:600}
.ovx-fx.hi b{color:var(--green)} .ovx-fx.lo b{color:var(--red)} .ovx-fx.mid b{color:var(--amber)}
.ovx-fx:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.ovx-fxcard{padding:18px 22px}

/* the next scheduled print, shown only when it is close enough to matter */
.ovx-print{display:flex;align-items:center;gap:8px;margin-top:10px;font-family:var(--mono);
  font-size:11px;letter-spacing:.04em;color:var(--amber)}
.ovx-print i{width:6px;height:6px;border-radius:50%;background:var(--amber);flex:0 0 auto;
  animation:ovxpulse 2.4s ease-in-out infinite}
@keyframes ovxpulse{0%,100%{opacity:.35}50%{opacity:1}}
@media (prefers-reduced-motion:reduce){.ovx-print i{animation:none;opacity:1}}

/* ── banners ──────────────────────────────────────────────────────────────────── */
.ovx-banner{margin-top:22px;display:flex;gap:14px;border-radius:8px;padding:16px 18px;
  align-items:flex-start}
.ovx-banner.flash{background:var(--red-bg);border:1px solid var(--red-line);
  border-left:4px solid var(--red)}
.ovx-banner.running{background:var(--amber-bg);border:1px solid var(--amber-line);
  border-left:4px solid var(--amber);align-items:center}
.ovx-banner .glyph{font-family:var(--mono);color:var(--red);font-size:14px;line-height:1.2}
.ovx-banner .kick{font-family:var(--mono);font-size:11px;letter-spacing:.12em;font-weight:600}
.ovx-banner.flash .kick{color:var(--red)} .ovx-banner.running .kick{color:var(--amber)}
.ovx-banner p{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--body);
  margin:6px 0 0;text-wrap:pretty}
.ovx-banner > div:last-child{flex:1 1 auto;min-width:0}
.ovx-banner strong{font-weight:600}
.ovx-spin{width:14px;height:14px;border:2px solid var(--amber-ring);border-top-color:var(--amber);
  border-radius:50%;animation:ovxspin 1s linear infinite;flex:0 0 auto}
@keyframes ovxspin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.ovx-spin{animation:none}}

/* ── empty state ──────────────────────────────────────────────────────────────── */
/* No top margin: the handoff's 22px assumed this card sat directly under the page header,
   but it renders inside the body grid, which already has its own 26px. The extra pushed it
   22px below the price chart at the top of the rail beside it. */
.ovx-empty{padding:30px 32px}
.ovx-empty h2{font-family:var(--serif);font-weight:600;font-size:26px;margin:10px 0 8px;
  color:var(--ink);text-wrap:pretty}
.ovx-empty p{font-family:var(--serif);font-size:17px;line-height:1.6;color:var(--body);
  max-width:72ch;margin:0}
.ovx-opts{display:flex;gap:26px;margin-top:24px;flex-wrap:wrap}
.ovx-opt{flex:1 1 280px;border:1px solid var(--line);border-radius:10px;padding:18px 20px}
.ovx-opt .kick{font-family:var(--mono);font-size:11px;letter-spacing:.12em;font-weight:600}
.ovx-opt p{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--body);
  margin:8px 0 14px}

/* ── body grid ────────────────────────────────────────────────────────────────── */
.ovx-body{display:grid;grid-template-columns:minmax(0,1fr) 372px;gap:34px;align-items:start;
  margin:26px 0 60px}
.ovx-main{min-width:0}
.ovx-rail{position:sticky;top:84px;display:flex;flex-direction:column;gap:16px}
@media (max-width:1000px){
  .ovx-body{grid-template-columns:1fr}
  .ovx-rail{position:static}
}

/* ── thesis card ──────────────────────────────────────────────────────────────── */
.ovx-thesis{padding:26px 30px 8px}
.ovx-thead{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.ovx-badge{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;font-weight:600;
  color:#fff;border-radius:4px;padding:5px 9px;background:var(--red)}
.ovx-badge.deep{background:var(--green)}
.ovx-tmeta{font-family:var(--mono);font-size:11px;color:var(--faint)}
.ovx-one{font-family:var(--serif);font-size:25px;line-height:1.38;font-weight:500;color:var(--ink);
  margin:10px 0 0;max-width:46ch;text-wrap:pretty}
.ovx-verdicts{display:flex;gap:30px;flex-wrap:wrap;margin-top:24px;padding:18px 0 22px;
  border-top:1px solid var(--hair);border-bottom:1px solid var(--hair)}
.ovx-v{min-width:130px;flex:0 1 auto}
.ovx-v .lab{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;color:var(--faint)}
.ovx-v .val{font-family:var(--serif);font-size:19px;font-weight:600;margin-top:5px}
.ovx-v .note{font-size:12px;color:var(--muted-2);margin-top:3px;line-height:1.4}
/* deep / flash switch, in the thesis card's header row */
.ovx-vt{margin-left:auto}

/* scenario cards, inline — the handoff's three verdict items replaced by the engine's
   own bear / base / bull, with the fair value and the conviction kept as one caption. */
.ovx-scn-wrap{margin-top:24px;padding:18px 0 22px;border-top:1px solid var(--hair);
  border-bottom:1px solid var(--hair)}
.ovx-scn-cap{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 22px;margin-bottom:16px}
.ovx-scn-cap .lab{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;
  color:var(--faint)}
.ovx-scn-cap b{font-family:var(--serif);font-size:19px;font-weight:600;margin-left:-14px}
.ovx-scn-cap .up{font-size:12.5px;color:var(--green)}
.ovx-scn-cap .dn{font-size:12.5px;color:var(--red)}
/* Flex, not grid: opening a card widens it AND narrows its siblings, which a grid with
   fixed tracks cannot do without reflowing the row. Numeric flex bases so the growth is
   animatable rather than a jump. */
.ovx-scn-grid{display:flex;gap:12px;align-items:start}
.ovx-scn{flex:1 1 0;min-width:0;border:1px solid var(--line);border-radius:10px;
  padding:13px 15px;background:var(--bg);
  transition:flex-grow .2s ease,background .2s ease}
@media (prefers-reduced-motion:reduce){.ovx-scn{transition:none}}
.ovx-scn.bear{background:var(--red-bg);border-color:var(--red-line)}
.ovx-scn.bull{background:var(--chart-fill);border-color:color-mix(in srgb,var(--green) 24%,transparent)}
.ovx-scn .h{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.ovx-scn .tag{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;font-weight:600;
  text-transform:uppercase;color:var(--body-2)}
.ovx-scn.bear .tag{color:var(--red)} .ovx-scn.bull .tag{color:var(--green)}
.ovx-scn .w{font-family:var(--mono);font-size:10.5px;color:var(--faint)}
.ovx-scn .px{font-family:var(--mono);font-size:21px;font-weight:500;margin-top:5px}
.ovx-scn .up{font-family:var(--mono);font-size:12px;margin-top:1px}
.ovx-scn .up.pos{color:var(--green)} .ovx-scn .up.neg{color:var(--red)}
.ovx-scn[role="button"]{cursor:pointer}
.ovx-scn[role="button"]:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.ovx-scn .nt{font-family:var(--serif);font-size:13px;line-height:1.5;color:var(--body);
  margin-top:9px;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;
  overflow:hidden}
.ovx-scn.open .nt{-webkit-line-clamp:unset;display:block;font-size:14px;line-height:1.6;
  max-width:64ch}
/* The affordance says which way the next click goes. overview.js rewrites the text, so
   this is only the resting style. */
.ovx-scn .mo{font-family:var(--mono);font-size:10px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--faint);margin-top:8px}
.ovx-scn:hover .mo{color:var(--body-2)}

/* Reading one case: it takes about two thirds of the row and the other two fall back to
   their headline figures. Keeping three columns of prose while one is open would leave the
   open card no wider than it started, which is the whole point of opening it. */
.ovx-scn-grid.focused .ovx-scn.open{flex-grow:4.2}
.ovx-scn-grid.focused .ovx-scn:not(.open){flex-grow:.9}
.ovx-scn-grid.focused .ovx-scn:not(.open) .nt,
.ovx-scn-grid.focused .ovx-scn:not(.open) .mo{display:none}
.ovx-scn-grid.focused .ovx-scn:not(.open){opacity:.72}
.ovx-scn-grid.focused .ovx-scn:not(.open):hover{opacity:1}

/* One column on a phone, where there is no width to redistribute — the card just opens
   downwards and its siblings stay as they are. */
@media (max-width:760px){
  .ovx-scn-grid{flex-direction:column}
  .ovx-scn,.ovx-scn-grid.focused .ovx-scn.open,
  .ovx-scn-grid.focused .ovx-scn:not(.open){flex:0 0 auto}
  .ovx-scn-grid.focused .ovx-scn:not(.open) .nt{display:-webkit-box}
  .ovx-scn-grid.focused .ovx-scn:not(.open) .mo{display:block}
  .ovx-scn-grid.focused .ovx-scn:not(.open){opacity:1}
}

.ovx-sec{border-bottom:1px solid var(--hair)}
.ovx-sec > button{width:100%;display:flex;align-items:center;gap:12px;background:none;border:none;
  padding:18px 0;cursor:pointer;text-align:left;color:inherit}
.ovx-sec > button:focus-visible{outline:2px solid var(--green);outline-offset:2px;border-radius:4px}
.ovx-sec .kick{font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--red);
  font-weight:600}
.ovx-sec.deep .kick{color:var(--green)}
.ovx-sec .chev{margin-left:auto;font-family:var(--mono);font-size:13px;color:var(--faint)}
.ovx-secbody{padding:0 0 22px}
.ovx-secbody p{font-family:var(--serif);font-size:17px;line-height:1.66;color:var(--ink-2);
  margin:0 0 14px;max-width:74ch;text-wrap:pretty}
.ovx-secbody .ovx-subh{font-family:var(--serif);font-size:18.5px;font-weight:600;color:var(--ink-1);
  margin:20px 0 10px;max-width:74ch;line-height:1.4}
.ovx-secbody .ovx-subh:first-child{margin-top:0}
.ovx-secbody .bul{display:flex;gap:12px;margin-bottom:12px;max-width:74ch}
.ovx-secbody .bul span{font-family:var(--mono);color:#b8b1a4;font-size:14px;line-height:1.7}
.ovx-secbody .bul p{font-size:16.5px;line-height:1.6;margin:0}
/* Dated earnings notes, above the thesis they amend. Set apart from the research by a
   tinted rail rather than a heavier border: they are a different KIND of document (what
   changed since) and the reader has to see that at a glance, but they are not louder than
   the thesis itself. Impact tints the rail; a thesis-effect badge carries the verdict. */
.ovx-notes{border-bottom:1px solid var(--hair);padding:4px 0 18px}
.ovx-notes > .k{font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--faint);
  font-weight:600;padding:16px 0 10px}
.ovx-note{border-left:2px solid var(--line-3);padding-left:14px;margin-bottom:8px}
.ovx-note.pos{border-left-color:var(--green)}
.ovx-note.neg{border-left-color:var(--red)}
.ovx-note > button{width:100%;display:flex;align-items:baseline;gap:10px;background:none;
  border:none;padding:8px 0;cursor:pointer;text-align:left;color:inherit;flex-wrap:wrap}
.ovx-note > button:focus-visible{outline:2px solid var(--green);outline-offset:2px;border-radius:4px}
.ovx-note .d{font-family:var(--mono);font-size:11.5px;color:var(--faint);flex:none}
.ovx-note .t{font-size:15.5px;font-weight:600;line-height:1.4;color:var(--ink-1)}
.ovx-note .chev{margin-left:auto;font-family:var(--mono);font-size:13px;color:var(--faint)}
.ovx-noteeff{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;padding:2px 6px;
  border-radius:3px;border:1px solid var(--line-3);color:var(--ink-3);flex:none}
.ovx-noteeff.breaks{border-color:var(--red);color:var(--red)}
.ovx-noteeff.confirms{border-color:var(--green);color:var(--green)}
.ovx-notecall{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;color:var(--faint);
  border:1px dashed var(--line-3);border-radius:3px;padding:2px 6px;flex:none}
.ovx-notebody{padding:2px 0 14px}
.ovx-notebody p{font-family:var(--serif);font-size:16px;line-height:1.62;color:var(--ink-2);
  margin:0 0 12px;max-width:74ch;text-wrap:pretty}
.ovx-notebody li{font-family:var(--serif);font-size:16px;line-height:1.62;color:var(--ink-2);
  margin:0 0 8px;max-width:74ch}
.ovx-notebody ul{margin:0 0 12px;padding-left:20px}

.ovx-chips{display:flex;gap:10px;flex-wrap:wrap;padding:20px 0 24px}
.ovx-chip{font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;border:1px solid var(--line-3);
  border-radius:20px;padding:8px 14px;color:var(--ink-2);transition:border-color .14s,color .14s}
.ovx-chip:hover{border-color:var(--green);color:var(--green);text-decoration:none}
/* The download chip a reader has not bought yet. Dimmer than its siblings and marked
   with a padlock, so it reads as "there is more here" rather than as a dead control —
   the word and the icon both, since colour alone is not a signal. */
.ovx-chip.lock{color:var(--ink-3);border-style:dashed}
.ovx-chip.lock::before{content:"🔒";margin-right:6px;font-size:10px}

/* the signed-out sales card — deliberately NOT branded as a flash thesis */
.ovx-sales{padding:26px 30px 28px}
.ovx-sales .ovx-one{margin-top:12px;max-width:52ch}
.ovx-sell{margin-top:22px;padding-top:20px;border-top:1px solid var(--hair)}
.ovx-sell p{font-family:var(--serif);font-size:16.5px;line-height:1.62;color:var(--ink-2);
  max-width:74ch;margin:0 0 12px}
.ovx-covers{margin:0 0 14px;padding-left:0;list-style:none;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:4px 20px}
.ovx-covers li{font-family:var(--serif);font-size:16px;line-height:1.5;color:var(--ink-2);
  padding-left:20px;position:relative}
.ovx-covers li::before{content:"→";position:absolute;left:0;color:var(--green);
  font-family:var(--mono);font-size:12px;top:2px}
/* The wait is the thing a buyer is most likely to be surprised by, so it is the loudest
   element on the card — not a footnote under the button. */
.ovx-wait{margin-top:22px;background:var(--red-bg);border:1px solid var(--red-line);
  border-left:4px solid var(--red);border-radius:8px;padding:16px 18px}
.ovx-wait .kick{font-family:var(--mono);font-size:11px;letter-spacing:.12em;font-weight:600;
  color:var(--red)}
.ovx-wait p{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--body);
  margin:6px 0 0;max-width:80ch}
.ovx-ready{margin-top:22px;background:var(--chart-fill);border:1px solid var(--line);
  border-left:4px solid var(--green);border-radius:8px;padding:14px 18px;
  font-family:var(--serif);font-size:15.5px;color:var(--ink-2)}
.ovx-buy{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}
.ovx-buy .ovx-b{text-decoration:none}
.ovx-buy .ovx-b:hover{text-decoration:none}
.ovx-buynote{font-size:12px;color:var(--faint);margin-top:10px}

/* the older pipeline's rendered fragment, carried through as one section */
.ovx-frag{border:1px solid var(--hair);border-radius:8px;margin:0 0 22px;overflow:hidden}

/* ── panels ───────────────────────────────────────────────────────────────────── */
.ovx-panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;
  margin-top:20px}
.ovx-panel{padding:22px 24px}
.ovx-row{display:flex;gap:12px;padding:13px 0;border-bottom:1px solid var(--hair-2)}
.ovx-row:last-of-type{border-bottom:0}
.ovx-row .n{font-family:var(--mono);font-size:10.5px;color:var(--faint-3);padding-top:3px;
  flex:0 0 auto}
.ovx-row .t{font-family:var(--serif);font-size:16px;font-weight:600;line-height:1.35;
  color:var(--ink)}
.ovx-row .d{font-family:var(--serif);font-size:15.5px;line-height:1.5;color:var(--ink-2)}
.ovx-row .d2{font-family:var(--serif);font-size:14.5px;line-height:1.55;color:var(--body);
  margin-top:4px}
/* A deep dive's watch list is its thesis-monitor tripwires — trigger AND what crossing it
   would signal. That detail needs the width, so the panel takes the whole row. */
.ovx-panel.wide{grid-column:1 / -1}
.ovx-panel .gapmark{color:var(--red-faint)}
.ovx-gapcta{margin-top:16px;width:100%;background:var(--red-bg);color:var(--red);
  border:1px solid var(--red-line);border-radius:8px;padding:10px;font-size:13px;font-weight:500;
  cursor:pointer}
/* The variant shown when a deep dive already exists: it routes, it does not spend. */
.ovx-gapcta.alt{background:var(--chart-fill);color:var(--green);
  border-color:color-mix(in srgb,var(--green) 24%,transparent)}

/* ── ask box ──────────────────────────────────────────────────────────────────── */
.ovx-ask{padding:22px 24px;margin-top:20px}
.ovx-askrow{display:flex;gap:10px;margin-top:12px;flex-wrap:wrap}
.ovx-ask input{flex:1 1 320px;border:1px solid var(--line-2);border-radius:8px;padding:11px 14px;
  font-size:14px;background:var(--bg);color:var(--ink);outline:none;font-family:var(--ui)}
.ovx-ask input:focus{border-color:var(--green)}
.ovx-askchips{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.ovx-askchip{background:var(--bg);border:1px solid var(--line);border-radius:18px;padding:7px 13px;
  font-size:12.5px;color:var(--body-2);cursor:pointer}
.ovx-askchip:hover{border-color:#bdb5a5}
.ovx-ask-locked p{font-family:var(--serif);font-size:16px;line-height:1.6;color:var(--ink-2);
  max-width:70ch;margin:10px 0 16px}
.ovx-ask-locked .ovx-b{display:inline-block;text-decoration:none}
.ovx-ask-locked .ovx-b:hover{text-decoration:none}
.ovx-answer{margin-top:16px;border-top:1px solid var(--hair);padding-top:16px;
  font-family:var(--serif);font-size:16.5px;line-height:1.62;color:var(--ink-2);max-width:74ch}

/* ── rail: price chart ────────────────────────────────────────────────────────── */
.ovx-chart{padding:20px 22px}
.ovx-chart .top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ovx-seg{display:flex;gap:3px;background:var(--track);border-radius:6px;padding:2px}
.ovx-seg button{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;border:none;
  border-radius:5px;padding:6px 9px;cursor:pointer;white-space:nowrap;background:transparent;
  color:var(--muted)}
.ovx-seg button[aria-pressed="true"]{background:var(--ink);color:var(--bg);font-weight:600}
.ovx-chart svg{width:100%;height:92px;display:block;margin-top:14px;overflow:visible}
.ovx-chart .foot{display:flex;justify-content:space-between;gap:8px;font-family:var(--mono);
  font-size:10.5px;color:var(--faint);margin-top:8px}
.ovx-chart .foot .fv{color:var(--red)}

/* ── rail: at a glance ────────────────────────────────────────────────────────── */
.ovx-glance{padding:4px 22px 18px}
.ovx-glance .head{display:flex;align-items:center;justify-content:space-between;
  padding:16px 0 8px;border-bottom:1px solid var(--hair)}
.ovx-grp{padding:16px 0 4px;border-bottom:1px solid var(--hair)}
.ovx-grp > .lab{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;color:var(--faint-2)}
.ovx-m{display:flex;align-items:baseline;gap:10px;padding:9px 0;cursor:help;width:100%;
  background:none;border:none;text-align:left;color:inherit;font-family:inherit}
.ovx-m:focus-visible{outline:2px solid var(--green);outline-offset:2px;border-radius:4px}
.ovx-m .l{flex:1 1 auto;min-width:0}
.ovx-m .l b{font-size:13px;color:var(--body-2);border-bottom:1px dotted var(--dotted);
  display:inline;font-weight:400}
.ovx-m .l i{display:block;font-size:11.5px;color:var(--faint);line-height:1.4;margin-top:3px;
  font-style:normal}
.ovx-m .v{font-family:var(--mono);font-size:14px;font-weight:500;white-space:nowrap}
.ovx-glance .src{font-family:var(--mono);font-size:10px;color:var(--faint-2);padding-top:14px;
  line-height:1.5}

/* ── rail: go deeper ──────────────────────────────────────────────────────────── */
.ovx-deeper{padding:18px 22px}
.ovx-deeper a{display:flex;align-items:baseline;gap:10px;padding:11px 0;
  border-bottom:1px solid var(--hair-2);color:var(--ink)}
.ovx-deeper a:last-of-type{border-bottom:0}
.ovx-deeper a:hover{text-decoration:none;color:var(--green)}
.ovx-deeper .lab{font-family:var(--serif);font-size:16px;font-weight:600}
.ovx-deeper .note{font-size:12px;color:var(--faint);flex:1 1 auto}
.ovx-deeper .arr{font-family:var(--mono);font-size:12px;color:#b8b1a4}

/* ── rail extras: peer standing, comps, research log ──────────────────────────── */
/* Not in the handoff. They live here because it routes peer comparison to a "Peers" tab
   this app does not have, and dropping them would drop the capability with it. */
.ovx-panel .sub{font-size:11.5px;color:var(--faint);margin:8px 0 4px;line-height:1.45}
.ovx-panel .note{font-size:11px;color:var(--faint);margin-top:10px;line-height:1.45}
.ovx-stand .ovx-st{padding:9px 0;border-bottom:1px solid var(--hair-2)}
.ovx-stand .ovx-st:last-of-type{border-bottom:0}
.ovx-stand .t{display:flex;justify-content:space-between;gap:10px;font-size:13px}
.ovx-stand .t .l{color:var(--body-2)}
.ovx-stand .t .v{font-family:var(--mono);font-weight:500;white-space:nowrap}
.ovx-stand .b{display:flex;justify-content:space-between;gap:10px;font-size:11.5px;
  color:var(--faint);margin-top:3px}
.ovx-stand .dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;
  vertical-align:middle;background:var(--faint-2)}
.ovx-stand .dot.green{background:var(--green)}
.ovx-stand .dot.red{background:var(--red)}
.ovx-stand .dot.amber{background:var(--amber)}
.ovx-comps table{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed;
  margin-top:10px}
.ovx-comps th{font-family:var(--mono);font-size:10px;letter-spacing:.04em;text-transform:uppercase;
  color:var(--faint-2);font-weight:600;padding:0 0 6px;text-align:right;
  border-bottom:1px solid var(--hair)}
.ovx-comps td{padding:6px 0;text-align:right;border-bottom:1px solid var(--hair-2);
  color:var(--body-2);white-space:nowrap;font-family:var(--mono)}
.ovx-comps th:first-child,.ovx-comps td:first-child{text-align:left;width:38%;overflow:hidden;
  text-overflow:ellipsis;font-family:var(--ui)}
.ovx-comps tr.self td{font-weight:700;color:var(--ink)}
.ovx-comps tr.med td{border-bottom:0;color:var(--faint);font-style:italic}
/* "there is more of this elsewhere" — a rail card's way out. Sized like the card's own
   note rather than like a button: it is an offer to read on, not the card's purpose. */
.ovx-more{display:inline-block;margin-top:10px;font-family:var(--mono);font-size:11px;
  letter-spacing:.05em;text-transform:uppercase;color:var(--green);text-decoration:none}
.ovx-more:hover{text-decoration:underline}
.ovx-log .ovx-li{display:grid;grid-template-columns:74px 1fr;gap:10px;padding:9px 0;
  border-bottom:1px solid var(--hair-2)}
.ovx-log .ovx-li:last-of-type{border-bottom:0}
.ovx-log .d{font-family:var(--mono);font-size:11.5px;color:var(--faint);padding-top:1px}
.ovx-log .t{font-size:13px;font-weight:600;line-height:1.35}
.ovx-log .x{font-size:11.5px;color:var(--faint);line-height:1.45;margin-top:2px}
.ovx-log .tag{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;
  font-weight:700;padding:2px 6px;border-radius:5px;background:var(--track);color:var(--faint);
  margin-left:6px;vertical-align:1px}
.ovx-log .tag.accent{background:var(--chart-fill);color:var(--green)}
.ovx-log .tag.warn,.ovx-log .tag.neg{background:var(--red-bg);color:var(--red)}
.ovx-log .tag.pos{background:var(--chart-fill);color:var(--green)}

/* ── tooltip ──────────────────────────────────────────────────────────────────── */
#ovxTip{position:fixed;width:290px;background:#1b1a17;color:#f3f0e9;border-radius:8px;
  padding:13px 15px;z-index:80;box-shadow:0 12px 30px rgba(27,26,23,.28);pointer-events:none;
  display:none}
#ovxTip .n{font-family:var(--mono,'IBM Plex Mono',monospace);font-size:10px;letter-spacing:.12em;
  color:#a8a29a}
#ovxTip .d{font-family:Spectral,Georgia,serif;font-size:14.5px;line-height:1.5;margin-top:5px}

/* ── deep-dive confirm modal ──────────────────────────────────────────────────── */
#ovxModal{position:fixed;inset:0;background:rgba(27,26,23,.42);display:none;align-items:center;
  justify-content:center;z-index:90;padding:24px}
#ovxModal.on{display:flex}
#ovxModal .panel{background:var(--bg,#faf8f4);color:var(--ink,#1b1a17);border-radius:12px;
  max-width:520px;width:100%;padding:30px 32px;box-shadow:0 24px 60px rgba(27,26,23,.22)}
#ovxModal .kick{font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--green);
  font-weight:600}
#ovxModal h3{font-family:var(--serif);font-size:26px;font-weight:600;margin:10px 0 12px;
  text-wrap:pretty}
#ovxModal p{font-family:var(--serif);font-size:16.5px;line-height:1.6;color:var(--body);
  margin:0 0 20px}
#ovxModal .meta{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;
  font-family:var(--mono);font-size:12px;color:var(--muted);border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);padding:14px 0;margin-bottom:22px}
#ovxModal .acts{display:flex;gap:10px;justify-content:flex-end}

/* ── small screens ────────────────────────────────────────────────────────────── */
@media (max-width:640px){
  .ovx h1.ovx-co{font-size:30px}
  .ovx-one{font-size:21px}
  .ovx-thesis{padding:20px 18px 4px}
  .ovx-panel,.ovx-ask,.ovx-glance,.ovx-chart,.ovx-deeper{padding-left:18px;padding-right:18px}
  .ovx-head{gap:18px}
  .ovx-head .r{align-items:flex-start}
  .ovx-pos{text-align:left}
  #ovxTip{width:min(290px,calc(100vw - 32px))}
}

/* A view that RAISED. Deliberately loud: the failure mode this replaces returned an empty
   string, which left the old template's markup standing and served a UI we no longer ship as
   though nothing were wrong — invisible to the reader and to us. A broken section should look
   broken. See render._render_failure. */
.render-failed{margin:16px 0;padding:14px 16px;border:1px solid #d94a3d;border-left:4px solid #d94a3d;
  border-radius:6px;background:rgba(217,74,61,.06);color:var(--ink,#222);
  font:400 14px/1.55 "Hanken Grotesk",system-ui,sans-serif}
.render-failed strong{display:block;margin-bottom:4px;color:#b8352a;font-weight:700}
.render-failed code{font:600 12px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
  padding:1px 5px;border-radius:3px;background:rgba(217,74,61,.12)}

/* Prose put back into an archived version at serve time. A snapshot was rendered with the
   capturing process's (nonexistent) entitlements, so its thesis slot froze as an empty state;
   render._rehydrate_snapshot fetches the run's own narrative and drops it in here. */
.pq-archived-thesis p{font-family:'Spectral',Georgia,serif;font-size:16px;line-height:1.7;
  color:var(--ink);margin:12px 0}

/* SECOND LOOK — the automated post-publish critique panel (overview_render._second_look).
   Sits under the flash thesis card, toggles with the flash reading. Deliberately quiet:
   it is machine commentary beside published research, not a second thesis. */
.ovx-secondlook .k{display:flex;align-items:center;gap:10px}
.sl-verdict{font:700 10px/1 "Hanken Grotesk",system-ui,sans-serif;letter-spacing:.08em;
  padding:3px 8px;border-radius:999px;border:1px solid var(--amber-line);color:var(--amber);
  background:var(--amber-bg)}
.sl-verdict.ok{color:var(--green);border-color:var(--chart-fill);background:var(--chart-fill)}
.sl-verdict.bad{color:var(--red);border-color:var(--red-line);background:var(--red-bg)}
.sl-summary{font-size:13px;line-height:1.55;color:var(--ink);margin:10px 0 6px}
.ovx-secondlook .slmark{color:var(--red)}
.sl-meta{font-size:10.5px;color:var(--faint);margin-top:10px;letter-spacing:.02em}

/* ── what the discount rests on ────────────────────────────────────────────────
   The cost-of-capital disclosure (research/coc_reference), directly under the fair
   value it qualifies. Amber, not red: it is a sensitivity a reader should weigh, not
   a fault in the research — the red treatment is reserved for the flash-vs-deep
   warning, which is a different claim about a different thing. */
.ovx-thesis .cocnote{margin:20px 0 4px;padding:14px 16px;border:1px solid var(--amber-line);
  border-left:3px solid var(--amber);border-radius:9px;background:var(--amber-bg)}
.ovx-thesis .cocnote>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:9px}
.ovx-thesis .cocnote>summary::-webkit-details-marker{display:none}
.ovx-thesis .cocnote>summary::marker{content:""}
.ovx-thesis .cocnote .cn-h{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;
  font-weight:600;color:var(--amber);margin:0}
/* chevron: down when shut, up when open. Drawn rather than an entity so it inherits the amber. */
.ovx-thesis .cocnote>summary::after{content:"";width:6px;height:6px;color:var(--amber);
  border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;
  transform:rotate(45deg);margin-top:-3px;opacity:.8;transition:transform .15s ease}
.ovx-thesis .cocnote[open]>summary::after{transform:rotate(-135deg);margin-top:2px}
.ovx-thesis .cocnote>summary:focus-visible{outline:2px solid var(--amber);outline-offset:3px;border-radius:3px}
@media (prefers-reduced-motion:reduce){.ovx-thesis .cocnote>summary::after{transition:none}}
.ovx-thesis .cocnote p{font-family:var(--serif);font-size:14.5px;line-height:1.6;
  color:var(--body);margin:9px 0 0;max-width:78ch;text-wrap:pretty}
.ovx-thesis .cocnote b{color:var(--ink);font-weight:600}
