/* Inferra AI — company page interactivity (company-page model).
   Loaded by every prerendered /company/<TICKER>/ page alongside
   /assets/company-page.js. The styles for the interactive surfaces
   (watchlist row, on-site reader, assistant panel, summary cards)
   are ported from the main site's stylesheet so the company
   page renders those surfaces identically to the library page.
   No rule here moves the viewport: this file contains no scrolling
   behaviour at all. */

/* ---------- Back control ---------- */
.cp-backrow { margin: 18px 0 4px; }
.cp-back-btn { font: inherit; font-size: 14.5px; font-weight: 600; color: var(--copper-strong); background: var(--card); border: 1px solid var(--copper); border-radius: 999px; padding: 7px 18px; cursor: pointer; }
.cp-back-btn:hover { background: var(--paper-2); }
.cp-back-btn:focus-visible { outline: 2px solid var(--copper); outline-offset: 2px; }

/* ---------- Assistant summon row ---------- */
.cp-asst-row { margin: 10px 0 2px; }
.asst-btn {
  font: inherit; font-size: 14px; font-weight: 600; cursor: pointer;
  color: #bfe6ff; background: rgba(10, 15, 30, 0.88);
  border: 1px solid rgba(125, 211, 252, 0.45); border-radius: 999px; padding: 8px 18px;
  box-shadow: 0 0 18px rgba(56, 189, 248, 0.14);
  transition: border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}
.asst-btn:hover { border-color: #d97e4a; color: #f3c09a; box-shadow: 0 0 22px rgba(217, 126, 74, 0.28); }
.asst-btn:active { transform: translateY(1px); }

/* ---------- Watchlist row (Feature 4) — ported ---------- */
.co-watch { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; margin: 10px 0 4px; }
.co-watch .co-watch-lbl { font-family: "IBM Plex Mono", monospace; font-size: 11.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-3); }
.co-watch-btns { display: inline-flex; flex-wrap: wrap; gap: 8px; }
.wl-toggle { font: inherit; font-size: 13.5px; font-weight: 600; color: var(--ink-2); background: var(--paper-2); border: 1px solid var(--line); border-radius: 999px; padding: 5px 13px; cursor: pointer; transition: border-color 0.15s ease, color 0.15s ease; }
.wl-toggle:hover { border-color: var(--copper); }
.wl-toggle[aria-pressed="true"] { color: var(--copper-strong); border-color: var(--copper); background: var(--card); }
.wl-toggle[disabled] { opacity: 0.6; cursor: default; }
.co-watch-signin { font-size: 14px; color: var(--ink-2); }
.co-watch-signin a { color: var(--copper-strong); font-weight: 600; text-decoration: none; }
.co-watch-signin a:hover { text-decoration: underline; }
.co-watch-note { font-size: 13.5px; color: var(--ink-3); }

/* ---------- Document type filters ---------- */
.cp-filters { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 34px; }
.cp-filters-lbl { font-family: "IBM Plex Mono", monospace; font-size: 11.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-3); margin-right: 4px; }
.cp-filters button { font: inherit; font-size: 13.5px; font-weight: 600; color: var(--ink-2); background: var(--card); border: 1px solid var(--line); border-radius: 999px; padding: 6px 15px; cursor: pointer; }
.cp-filters button:hover { border-color: var(--copper); }
.cp-filters button[aria-pressed="true"] { background: var(--char); color: var(--on-char); border-color: var(--char); }
.cp-filters + .shelf { margin-top: 26px; }
.shelf[hidden] { display: none !important; }

/* ---------- Reader affordances on document rows — ported ---------- */
.cp-read { font: inherit; font-size: 13.5px; font-weight: 600; color: var(--copper-strong); background: none; border: 1px solid var(--line); border-radius: 999px; padding: 4px 13px; cursor: pointer; margin-top: 8px; }
.cp-read:hover { border-color: var(--copper); }
.doc .meta .rdr-hint { color: var(--copper-strong); font-weight: 600; }
.doc .meta a.orig { color: var(--copper-strong); font-weight: 600; text-decoration: none; }
.doc .meta a.orig:hover { text-decoration: underline; }

/* ---------- Summary cards (2026-10-23) ----------
   Event-summary bullets render as cards in the Latest earnings
   cards' visual language (elevated panel, hairline border, rounded
   corners, hover lift) expressed in the page theme's variables so the
   cards sit correctly in light and dark. A card carrying
   [data-sumcard] is one click target: the whole card opens the
   on-site reader at the bullet's passage. The only inner action is
   the provenance link in the card foot (.sc-orig, "SEC original ↗"),
   a secondary affordance that never triggers the reader. There is NO
   Save control on summary bullets (owner ruling 2026-10-23); saving
   lives in the reader ("Save passage", Feature 3). */
.sum-cards { display: grid; grid-template-columns: 1fr; gap: 12px; margin-top: 12px; }
.sum-cards-fig { grid-template-columns: repeat(auto-fit, minmax(245px, 1fr)); }
.sum-cards-fig .sum-card-wide { grid-column: 1 / -1; }
.sum-card {
  background: var(--card); border: 1px solid var(--line); border-radius: 12px;
  padding: 16px 18px 14px; box-shadow: 0 14px 30px -22px rgba(0, 0, 0, 0.45);
}
.sum-card[data-sumcard] { cursor: pointer; transition: border-color 0.2s ease, transform 0.2s ease; }
.sum-card[data-sumcard]:hover, .sum-card[data-sumcard]:focus-visible { border-color: var(--copper); transform: translateY(-2px); outline: none; }
.sc-top { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; justify-content: space-between; margin: 0; }
.sc-metric { font-family: "IBM Plex Mono", monospace; font-size: 12px; font-weight: 600; letter-spacing: 0.05em; text-transform: uppercase; color: var(--ink-3); }
.sc-period { font-family: "IBM Plex Mono", monospace; font-size: 11.5px; color: var(--copper-strong); border: 1px solid var(--line); border-radius: 999px; padding: 1px 9px; white-space: nowrap; }
.sc-value { font-size: 25px; font-weight: 700; line-height: 1.15; margin: 7px 0 0; color: var(--ink); }
.sc-context { font-size: 13.5px; line-height: 1.55; color: var(--ink-2); margin: 8px 0 0; }
.sc-text { font-size: 15px; line-height: 1.6; color: var(--ink); margin: 0; }
.sc-foot { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; margin: 11px 0 0; padding-top: 10px; border-top: 1px solid var(--line); font-size: 12.5px; color: var(--ink-3); }
.sc-orig { font-weight: 600; color: var(--copper-strong); text-decoration: none; white-space: nowrap; }
.sc-orig:hover { text-decoration: underline; }
.sc-form { font-family: "IBM Plex Mono", monospace; font-size: 11px; border: 1px solid var(--line); background: var(--paper-2); border-radius: 4px; padding: 1px 6px; color: var(--ink); }
.sum-card .sum-note { font-size: 14.5px; color: var(--ink-2); margin: 6px 0 0; line-height: 1.55; }
.sum-card .sum-fig { font-size: 14.5px; color: var(--ink-2); margin: 8px 0 0; line-height: 1.55; }
.sum-card .sum-fig .fm { font-weight: 600; color: var(--ink); }
.sum-conflict-tag { font-family: "IBM Plex Mono", monospace; font-size: 11px; color: var(--copper-strong); margin: 8px 0 0; }

/* ---------- On-site reader — ported ---------- */
.reader { position: fixed; inset: 0; z-index: 200; visibility: hidden; }
.reader.open { visibility: visible; }
.reader-backdrop { position: absolute; inset: 0; background: rgba(16, 15, 13, 0.58); }
.reader-panel { position: relative; background: var(--paper); color: var(--ink); height: 100%; display: flex; flex-direction: column; }
@media (min-width: 760px) {
  .reader { padding: 4vh 20px; }
  .reader-panel { max-width: 1120px; margin: 0 auto; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; box-shadow: 0 30px 70px -30px rgba(10, 10, 10, 0.55); }
}
.reader-head { display: flex; gap: 18px; align-items: flex-start; justify-content: space-between; padding: 20px 24px 14px; border-bottom: 1px solid var(--line); flex: none; }
.reader-kicker { font-family: "IBM Plex Mono", monospace; font-size: 11.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-3); margin-bottom: 6px; }
.reader-head h2 { font-size: clamp(21px, 3vw, 27px); }
.reader-match { margin-top: 7px; font-size: 15.5px; font-weight: 600; color: var(--copper-strong); }
.reader-close { flex: none; width: 40px; height: 40px; border-radius: 999px; border: 1px solid var(--line); background: var(--card); color: var(--ink); font-size: 16px; cursor: pointer; line-height: 1; }
.reader-close:hover { border-color: var(--copper); color: var(--copper-strong); }
.reader-bar { display: flex; flex-wrap: wrap; gap: 10px 22px; align-items: center; padding: 10px 24px; border-bottom: 1px solid var(--line); background: var(--paper-2); flex: none; }
.reader-nav { display: flex; gap: 10px; align-items: center; }
.reader-nav button { font: inherit; font-size: 14px; font-weight: 600; cursor: pointer; color: var(--ink); background: var(--card); border: 1px solid var(--line); border-radius: var(--radius, 6px); padding: 7px 13px; }
.reader-nav button:hover { border-color: var(--copper); color: var(--copper-strong); }
.reader-nav .pos { font-size: 13px; color: var(--ink-2); }
.reader-orig { margin-left: auto; font-weight: 600; font-size: 14.5px; color: var(--copper-strong); text-decoration: none; }
.reader-orig:hover { text-decoration: underline; }
.reader-body { overflow-y: auto; padding: 6px 24px 18px; flex: 1; -webkit-overflow-scrolling: touch; }
.rpass { padding: 17px 0; border-bottom: 1px solid var(--line); }
.rpass:last-child { border-bottom: none; }
.rpass-lbl { font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-3); margin-bottom: 7px; }
.rpass-text { font-size: 16.5px; line-height: 1.75; color: var(--ink); white-space: pre-wrap; overflow-wrap: break-word; max-width: 80ch; }
.rpass-actions { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; }
.rpass-save { font: inherit; font-size: 13.5px; font-weight: 600; color: var(--copper-strong); background: none; border: 1px solid var(--line); border-radius: 999px; padding: 5px 15px; cursor: pointer; transition: border-color 0.15s ease; }
.rpass-save:hover { border-color: var(--copper); }
.rpass-save[disabled] { color: var(--ink-3); cursor: default; }
.rpass-save-note { font-size: 13.5px; color: var(--ink-2); }
.rpass-save-note a { color: var(--copper-strong); font-weight: 600; }
.reader-body mark.current { background: var(--copper); color: #fff8f0; outline: 2px solid var(--copper-strong); outline-offset: 1px; }
.reader-body mark { background: var(--mark); color: inherit; border-radius: 2px; padding: 0 1px; }
.reader-note { padding: 13px 24px 18px; border-top: 1px solid var(--line); font-size: 13.5px; color: var(--ink-3); flex: none; }
.reader-loading { padding: 26px 24px; font-size: 15.5px; color: var(--ink-2); }

/* ---------- Assistant panel — ported ---------- */
.asst-root { position: fixed; inset: 0; z-index: 240; }
.asst-root[hidden] { display: none !important; }
.asst-backdrop { position: absolute; inset: 0; background: rgba(8, 8, 10, 0.5); opacity: 0; transition: opacity 0.28s ease; }
.asst-root.open .asst-backdrop { opacity: 1; }
.asst-panel {
  position: absolute; top: 0; right: 0; height: 100%; width: min(430px, 100%);
  display: flex; flex-direction: column;
  background: linear-gradient(180deg, rgba(10, 14, 28, 0.98), rgba(5, 7, 15, 0.99));
  color: #eef2ff; border-left: 1px solid rgba(125, 211, 252, 0.35);
  box-shadow: -24px 0 60px rgba(0, 0, 0, 0.5), 0 0 46px rgba(56, 189, 248, 0.1);
  transform: translateX(103%); transition: transform 0.28s ease;
}
.asst-root.open .asst-panel { transform: none; }
@media (max-width: 640px) { .asst-panel { width: 100%; border-left: none; } }
.asst-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 20px 20px 14px; border-bottom: 1px solid rgba(125, 211, 252, 0.18); flex: none; }
.asst-head h2 { font-size: 24px; color: #eef2ff; }
.asst-scope { margin-top: 5px; font-family: "IBM Plex Mono", monospace; font-size: 12px; letter-spacing: 0.04em; color: #7dd3fc; }
.asst-close { flex: none; width: 38px; height: 38px; border-radius: 999px; cursor: pointer; border: 1px solid rgba(125, 211, 252, 0.35); background: rgba(10, 15, 30, 0.6); color: #eef2ff; font-size: 15px; line-height: 1; }
.asst-close:hover { border-color: #d97e4a; color: #f3c09a; }
.asst-log { flex: 1; overflow-y: auto; padding: 18px 20px; display: flex; flex-direction: column; gap: 18px; -webkit-overflow-scrolling: touch; }
.asst-msg-user { align-self: flex-end; max-width: 88%; white-space: pre-wrap; overflow-wrap: break-word; background: rgba(56, 189, 248, 0.13); border: 1px solid rgba(125, 211, 252, 0.3); border-radius: 12px 12px 3px 12px; padding: 10px 14px; font-size: 15.5px; line-height: 1.5; }
.asst-msg-ai { font-size: 15.5px; line-height: 1.6; }
.asst-answer { white-space: pre-wrap; overflow-wrap: break-word; }
.asst-cites { margin-top: 14px; border-top: 1px solid rgba(125, 211, 252, 0.18); padding-top: 11px; }
.asst-cites-h { font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: rgba(226, 232, 255, 0.55); margin-bottom: 9px; }
.asst-cite { margin-bottom: 12px; }
.asst-cite:last-child { margin-bottom: 0; }
.asst-cite-line { font-size: 13.5px; color: rgba(238, 242, 255, 0.88); line-height: 1.45; }
.asst-cite-links { margin-top: 3px; display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: 13px; }
.asst-cite-links a { color: #7dd3fc; font-weight: 600; text-decoration: none; }
.asst-cite-links a:hover { color: #f3c09a; text-decoration: underline; }
.asst-loading { font-size: 14.5px; color: rgba(226, 232, 255, 0.65); animation: asstPulse 1.2s ease-in-out infinite; }
@keyframes asstPulse { 0%, 100% { opacity: 0.45; } 50% { opacity: 1; } }
.asst-note { font-size: 14.5px; line-height: 1.5; color: rgba(238, 242, 255, 0.85); }
.asst-note.err { color: #fca5a5; }
.asst-cap { border: 1px solid rgba(217, 126, 74, 0.55); border-radius: 8px; padding: 12px 14px; background: rgba(176, 78, 36, 0.14); font-size: 14.5px; line-height: 1.5; color: #f6d9c4; }
.asst-form { flex: none; display: flex; gap: 10px; padding: 14px 20px; border-top: 1px solid rgba(125, 211, 252, 0.18); }
.asst-form input { flex: 1; min-width: 0; font: inherit; font-size: 15.5px; color: #eef2ff; background: rgba(8, 12, 26, 0.78); border: 1px solid rgba(125, 211, 252, 0.32); border-radius: 8px; padding: 11px 13px; }
.asst-form input::placeholder { color: rgba(226, 232, 255, 0.42); }
.asst-form input:focus { outline: none; border-color: rgba(125, 211, 252, 0.7); box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.18); }
.asst-form button { flex: none; font: inherit; font-weight: 600; font-size: 15px; cursor: pointer; border: none; border-radius: 8px; padding: 0 20px; color: #fff; background: linear-gradient(120deg, #0284c7, #38bdf8); }
.asst-form button:hover { background: linear-gradient(120deg, #0369a1, #0ea5e9); }
.asst-form button:disabled, .asst-form input:disabled { opacity: 0.55; cursor: default; }
.asst-disclaimer { flex: none; padding: 0 20px 16px; font-size: 12.5px; line-height: 1.5; color: rgba(226, 232, 255, 0.55); }

/* ---------- Research upgrade panels (Parts 6–8) ----------
   Important announcements, guidance, charts, competitors and
   recent events.
   Market data is grouped in a navy-ruled block, visually distinct
   from filing evidence. All layouts below are responsive on their
   own (the generated page stylesheet has a known phone gap); no
   rule here moves the viewport. */
.cp-panel { margin-top: 36px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 24px 26px; }
/* The chart suite's static mount (ai-analysis-pages.py emits it
   inside the AI analysis block, directly under "The quarter in
   charts") is empty until company-page.js fills it — and stays
   empty on a no-JS page. Never render the empty box. */
#cpCharts:empty { display: none; }
.cp-tk { font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--copper-strong); margin-bottom: 6px; }
.cp-h { font-size: 26px; line-height: 1.25; }
.cp-sub { font-size: 14.5px; color: var(--ink-2); margin-top: 8px; max-width: 52em; }
.cp-note { font-size: 15.5px; color: var(--ink-2); margin-top: 12px; }
.cp-basis { display: block; font-size: 12.5px; color: var(--ink-3); margin-top: 3px; }
.cp-basis-line { font-family: "IBM Plex Mono", monospace; font-size: 11.5px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-3); margin-top: 14px; }

/* Research detail rows */
.cp-row { display: grid; grid-template-columns: 168px 1fr; gap: 4px 18px; padding: 9px 0; border-bottom: 1px solid var(--line); }
.cp-row:last-child { border-bottom: none; }
.cp-row-lbl { font-family: "IBM Plex Mono", monospace; font-size: 11.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-3); padding-top: 4px; }
.cp-row-val { font-size: 16px; line-height: 1.55; color: var(--ink); min-width: 0; overflow-wrap: break-word; }
.cp-figtext { font-weight: 700; font-size: 17.5px; }
.cp-quote { margin-top: 6px; font-size: 15px; color: var(--ink-2); line-height: 1.6; }
.cp-badge { display: inline-block; font-size: 13px; font-weight: 700; border: 1px solid var(--line); border-radius: 999px; padding: 2.5px 12px; background: var(--paper-2); color: var(--ink-2); }
.cp-badge.b-raised { border-color: #2f7d4f; color: #2f7d4f; background: rgba(47, 125, 79, 0.08); }
.cp-badge.b-lowered { border-color: #b3261e; color: #b3261e; background: rgba(179, 38, 30, 0.07); }
.cp-badge.b-reiterated { border-color: #20456e; color: #20456e; background: rgba(32, 69, 110, 0.07); }
.cp-badge.b-initiated { border-color: var(--copper); color: var(--copper-strong); background: rgba(176, 78, 36, 0.07); }
.cp-badge.b-table { border-color: #9a6a1f; color: #9a6a1f; background: rgba(154, 106, 31, 0.08); }
.cp-badge.b-withdrawn { border-color: var(--ink-3); color: var(--ink-2); }
.cp-badge.b-none { color: var(--ink-3); }
.cp-tag { display: inline-block; font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.04em; border: 1px solid #20456e; color: #20456e; border-radius: 4px; padding: 1px 7px; margin-left: 6px; vertical-align: 2px; }
.cp-evlist { margin-top: 10px; }
.cp-ev { border-left: 3px solid var(--copper); padding: 2px 0 2px 12px; margin-top: 8px; }
.cp-ev-pass { font-size: 14.5px; color: var(--ink-2); line-height: 1.6; }
.cp-ev-meta { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: baseline; margin-top: 5px; font-size: 13.5px; color: var(--ink-3); }
.cp-ev-meta a { color: var(--copper-strong); font-weight: 600; text-decoration: none; }
.cp-ev-meta a:hover { text-decoration: underline; }
.cp-ev-meta .form { font-family: "IBM Plex Mono", monospace; font-size: 12px; color: var(--ink-3); }

/* Market-data block — distinct from filing evidence */
.cp-mkt { margin-top: 16px; border: 1px solid var(--line); border-left: 4px solid #20456e; border-radius: var(--radius); background: var(--paper-2); padding: 6px 18px 10px; }
.cp-mkt-h { font-family: "IBM Plex Mono", monospace; font-size: 11.5px; letter-spacing: 0.1em; text-transform: uppercase; color: #20456e; padding-top: 10px; }
.cp-mkt .cp-row { border-bottom-color: var(--line); }
.cp-mktval { font-weight: 700; font-size: 17px; color: #20456e; }
@media (prefers-color-scheme: dark) {
  .cp-tag { border-color: #8fc3ee; color: #8fc3ee; }
  .cp-mkt { border-left-color: #8fc3ee; }
  .cp-mkt-h, .cp-mktval { color: #8fc3ee; }
  .cp-badge.b-reiterated { border-color: #8fc3ee; color: #8fc3ee; }
  .cp-badge.b-raised { border-color: #7bc79b; color: #7bc79b; }
  .cp-badge.b-lowered { border-color: #f0a49e; color: #f0a49e; }
}

/* Guidance panel */
.cp-guide-head { font-size: 19px; line-height: 1.45; margin-top: 14px; }
.cp-guide-head .fm, .cp-gfig .fm { font-weight: 700; color: var(--ink); }
.cp-next { font-size: 15px; color: var(--ink-2); margin-top: 10px; }
.cp-glist { margin-top: 8px; }
.cp-gitem { padding: 10px 0; border-bottom: 1px solid var(--line); }
.cp-gitem:last-child { border-bottom: none; }
.cp-gfig { font-size: 15.5px; color: var(--ink-2); line-height: 1.6; }
.cp-gpass { font-size: 14.5px; color: var(--ink-2); line-height: 1.6; margin-top: 5px; }
.cp-chip { display: inline-block; font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.04em; border: 1px solid var(--copper); color: var(--copper-strong); border-radius: 999px; padding: 1px 9px; margin-left: 6px; white-space: nowrap; }

/* Charts */
.cp-charts-grid { display: grid; grid-template-columns: 1fr; gap: 26px; margin-top: 18px; }
@media (min-width: 1020px) {
  .cp-charts-grid { grid-template-columns: 1fr 1fr; }
  .cp-chart-wide { grid-column: 1 / -1; }
}
.cp-chart h3 { font-size: 19px; margin-bottom: 8px; }
.cp-svg { width: 100%; height: auto; display: block; }
.cp-svg text { font-family: "IBM Plex Mono", monospace; font-size: 11px; fill: var(--ink-3); }
.cp-svg .cp-barval { fill: var(--ink-2); font-size: 11.5px; }
.cp-grid { stroke: var(--line); stroke-width: 1; }
.cp-axis { stroke: var(--ink-3); stroke-width: 1.2; }
.cp-bar { fill: var(--copper); }
.cp-bar.neg { fill: #20456e; }
.cp-line { stroke-width: 2.2; }
.cp-l-pe { stroke: #20456e; }
.cp-l-fwd { stroke: var(--copper); }
.cp-l-gm { stroke: #2f7d4f; }
.cp-l-om { stroke: #6b4fa1; }
.cp-pt.cp-l-pe { fill: #20456e; }
.cp-pt.cp-l-fwd { fill: var(--copper); }
.cp-pt.cp-l-gm { fill: #2f7d4f; }
.cp-pt.cp-l-om { fill: #6b4fa1; }
.cp-src { font-size: 12.5px; color: var(--ink-3); margin-top: 8px; line-height: 1.5; }
.cp-legend { display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: 13px; color: var(--ink-2); margin-bottom: 6px; }
.cp-leg { display: inline-flex; align-items: center; gap: 7px; }
.cp-sw { display: inline-block; width: 22px; height: 0; border-top: 3px solid var(--ink-3); }
.cp-pline { stroke-width: 1.6; }
.cp-s-close { stroke: #20456e; border-top-color: #20456e; }
.cp-s-s20 { stroke: var(--copper); border-top-color: var(--copper); }
.cp-s-s50 { stroke: #2f7d4f; border-top-color: #2f7d4f; }
.cp-s-s200 { stroke: #6b4fa1; border-top-color: #6b4fa1; }
@media (prefers-color-scheme: dark) {
  .cp-s-close { stroke: #8fc3ee; border-top-color: #8fc3ee; }
  .cp-bar.neg { fill: #8fc3ee; }
  .cp-l-pe { stroke: #8fc3ee; }
  .cp-pt.cp-l-pe { fill: #8fc3ee; }
  .cp-l-gm { stroke: #7fc78f; }
  .cp-pt.cp-l-gm { fill: #7fc78f; }
  .cp-l-om { stroke: #b79ce0; }
  .cp-pt.cp-l-om { fill: #b79ce0; }
}

/* Competitors — individual clickable cards (rule (bi)), the
   calendar cards' treatment: a small bordered card per company,
   several per row, the whole card the link to that company's page. */
.cp-peer-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 10px; margin-top: 14px; }
.cp-peer-card {
  display: block; background: var(--paper-2); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 12px 14px; color: var(--ink); text-decoration: none;
  transition: border-color 0.15s ease;
}
.cp-peer-card:hover { border-color: var(--copper); }
.cp-peer-card:focus-visible { outline: 2px solid var(--copper); outline-offset: 2px; }
.cp-comp-name { font-size: 16.5px; font-weight: 600; }
.cp-comp-tick { font-family: "IBM Plex Mono", monospace; font-size: 12.5px; font-weight: 500; color: var(--ink-3); }
.cp-comp-sector { font-size: 13.5px; font-weight: 400; color: var(--ink-3); }
.cp-comp-pass { display: block; font-size: 14.5px; color: var(--ink-2); line-height: 1.6; margin-top: 5px; }

/* Important announcements (rule (bk)) — headline + date rows, the
   whole item linking straight to the item's original source. */
.cp-ann-list { margin-top: 6px; }
.cp-ann-item {
  display: flex; flex-wrap: wrap; gap: 4px 16px; align-items: baseline; justify-content: space-between;
  padding: 11px 0; border-bottom: 1px solid var(--line); color: var(--ink); text-decoration: none;
}
.cp-ann-item:last-child { border-bottom: none; }
.cp-ann-head { font-size: 16px; font-weight: 600; line-height: 1.45; min-width: 0; overflow-wrap: break-word; }
.cp-ann-item:hover .cp-ann-head { color: var(--copper-strong); text-decoration: underline; }
.cp-ann-date { font-family: "IBM Plex Mono", monospace; font-size: 12.5px; color: var(--ink-3); white-space: nowrap; }

/* Recent events */
.cp-ev-sum { margin-top: 14px; border-left: 3px solid var(--copper); padding-left: 14px; }
.cp-ev-head { font-size: 18px; font-weight: 600; line-height: 1.4; }
.cp-ev-sum .sum-based { font-size: 14.5px; color: var(--ink-2); margin-top: 4px; }
.cp-ev-list { list-style: none; margin: 10px 0 0; padding: 0; }
.cp-ev-item { display: flex; gap: 14px; align-items: flex-start; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid var(--line); }
.cp-ev-item:last-child { border-bottom: none; }
.cp-ev-main { flex: 1; min-width: 0; }
.cp-ev-title { font-size: 15.5px; font-weight: 600; line-height: 1.45; }
.cp-ev-open { font: inherit; color: inherit; background: none; border: 0; padding: 0; text-align: left; cursor: pointer; text-decoration: none; }
.cp-ev-open:hover { text-decoration: underline; }
.cp-ev-meta { display: flex; flex-wrap: wrap; gap: 7px; align-items: center; margin-top: 4px; font-size: 13px; color: var(--ink-3); }
.cp-form { font-family: "IBM Plex Mono", monospace; font-size: 11px; border: 1px solid var(--line); background: var(--paper-2); border-radius: 4px; padding: 1px 6px; color: var(--ink); }
.cp-ev-actions { flex: none; }
.cp-orig { font-size: 13.5px; font-weight: 600; color: var(--copper-strong); text-decoration: none; white-space: nowrap; }
.cp-orig:hover { text-decoration: underline; }

/* Narrow screens — panels stay legible regardless of the page shell */
@media (max-width: 700px) {
  .cp-panel { padding: 18px 16px; margin-top: 28px; }
  .cp-h { font-size: 22px; }
  .cp-row { grid-template-columns: 1fr; gap: 2px; padding: 8px 0; }
  .cp-row-lbl { padding-top: 0; }
  .cp-mkt { padding: 4px 12px 8px; }
  .cp-price-svg { min-height: 210px; }
  .cp-ev-item { flex-direction: column; gap: 6px; }
  .cp-guide-head { font-size: 17px; }
}

/* === AI analysis (2026-10-23) — generated block, do not hand-edit === */
/* AI analysis block (2026-10-23) — the Version 1 (Trader's Brief)
   structure + Version 5 (Visual Story) visual layer, rendered by
   ai-analysis-pages.py into /company/<TICKER>/ pages from
   assets/analysis.json. Theme variables only, so the block sits
   correctly in the page's light and dark themes. No rule here moves
   the viewport: this block contains no scrolling behaviour at all. */
.ai-block { margin-top: 36px; }
.ai-head { margin-bottom: 18px; }
.ai-tk { font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--copper-strong); margin-bottom: 6px; }
.ai-h { font-size: 26px; line-height: 1.25; }
.ai-based { font-size: 14.5px; color: var(--ink-2); margin-top: 6px; }
.ai-sec-h { font-size: 21px; line-height: 1.3; margin: 30px 0 12px; }
.ai-src { font-family: "IBM Plex Mono", monospace; font-size: 10.5px; font-weight: 600; letter-spacing: 0.06em; color: #20456e; border: 1px solid rgba(32, 69, 110, 0.45); border-radius: 4px; padding: 1px 6px; white-space: nowrap; text-decoration: none; vertical-align: 1px; }
a.ai-src:hover { border-color: var(--copper); color: var(--copper-strong); }
.ai-computed { font-family: "IBM Plex Mono", monospace; font-size: 10.5px; color: var(--ink-3); letter-spacing: 0.03em; white-space: nowrap; }
.ai-pos { color: #2f7d4f; font-weight: 600; }
.ai-neg { color: #b3261e; font-weight: 600; }
@media (prefers-color-scheme: dark) {
  .ai-src { color: #8fc3ee; border-color: rgba(143, 195, 238, 0.5); }
  .ai-pos { color: #7bc79b; }
  .ai-neg { color: #f0a49e; }
}

/* KPI row (Version 1) */
.ai-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 12px; }
.ai-kpi { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px 18px; }
.ai-kpi-lab { font-size: 11px; letter-spacing: 0.13em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; }
.ai-kpi-val { font-family: "IBM Plex Mono", monospace; font-size: clamp(22px, 2.6vw, 30px); font-weight: 600; margin: 6px 0 4px; letter-spacing: -0.01em; color: var(--ink); }
.ai-kpi-sub { font-size: 12.5px; color: var(--ink-2); line-height: 1.5; }
.ai-kpi .ai-src { margin-top: 8px; display: inline-block; }

/* Tile grid (Version 1) */
.ai-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 12px; }
.ai-tile { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px 20px; min-width: 0; }
.ai-tile h4 { margin: 0 0 12px; font-size: 11.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; }
.ai-span7 { grid-column: span 7; } .ai-span5 { grid-column: span 5; }
.ai-span6 { grid-column: span 6; } .ai-span4 { grid-column: span 4; }
.ai-span12 { grid-column: span 12; }
table.ai-dt { width: 100%; border-collapse: collapse; font-size: 14px; }
table.ai-dt th, table.ai-dt td { padding: 7px 8px; text-align: right; border-bottom: 1px solid var(--line); }
table.ai-dt th:first-child, table.ai-dt td:first-child { text-align: left; padding-left: 0; }
table.ai-dt th:last-child, table.ai-dt td:last-child { padding-right: 0; }
table.ai-dt thead th { font-size: 11px; letter-spacing: 0.09em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; }
table.ai-dt tbody tr:last-child td { border-bottom: none; }
table.ai-dt td { font-family: "IBM Plex Mono", monospace; font-variant-numeric: tabular-nums; color: var(--ink-2); overflow-wrap: break-word; }
table.ai-dt td:first-child { font-family: inherit; color: var(--ink); }
table.ai-dt td.ai-hl { color: var(--ink); font-weight: 600; }
.ai-kv { display: flex; justify-content: space-between; gap: 14px; padding: 7px 0; border-bottom: 1px solid var(--line); font-size: 14px; }
.ai-kv:last-child { border-bottom: none; }
.ai-k { color: var(--ink-2); }
.ai-v { font-family: "IBM Plex Mono", monospace; text-align: right; color: var(--ink); font-weight: 500; }
.ai-v small { display: block; font-family: inherit; color: var(--ink-3); font-size: 11.5px; font-weight: 400; }
.ai-v-note { font-family: inherit; font-size: 13px; color: var(--ink-2); }
.ai-basis { font-family: "IBM Plex Mono", monospace; font-size: 10.5px; color: var(--ink-3); margin-left: 6px; }
.ai-gdir { font-size: 14.5px; color: var(--ink-2); margin: 0 0 8px; }
.ai-gquote { font-size: 13.5px; color: var(--ink-2); line-height: 1.55; margin: 2px 0 10px; }
.ai-note { font-size: 14px; color: var(--ink-2); line-height: 1.55; margin: 0; }
.ai-tnote { font-size: 13.5px; color: var(--ink-2); line-height: 1.55; margin: 8px 0 0; }
.ai-cfoot { font-size: 12px; color: var(--ink-3); margin-top: 10px; line-height: 1.6; }
.ai-cfoot .ai-src { margin-right: 4px; }

/* What-changed strip (Version 1) */
.ai-strip { margin-top: 12px; background: var(--paper-2); border: 1px solid var(--line); border-left: 4px solid var(--copper); border-radius: var(--radius); padding: 16px 20px; }
.ai-strip h4 { margin: 0 0 10px; font-size: 11.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--copper-strong); font-weight: 600; }
.ai-strip ul { margin: 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 8px 28px; font-size: 14px; color: var(--ink-2); }
.ai-strip li b { color: var(--ink); font-family: "IBM Plex Mono", monospace; font-weight: 600; }

/* Charts (Version 5) */
.ai-charts { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ai-chart { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px 22px; min-width: 0; }
.ai-chart h4 { margin: 0 0 2px; font-size: 16px; font-weight: 600; color: var(--ink); }
.ai-csub { font-size: 12.5px; color: var(--ink-3); margin: 0 0 14px; }
.ai-svg { width: 100%; height: auto; display: block; }
.ai-svg text { font-family: "IBM Plex Mono", monospace; }
.ai-svg .ai-barval { font-size: 12px; fill: var(--ink); font-weight: 600; }
.ai-svg .ai-barlab { font-size: 11px; fill: var(--ink-2); }
.ai-svg .ai-axis { font-size: 10px; fill: var(--ink-3); }
.ai-gl { stroke: var(--line); stroke-width: 1; }
.ai-axisline { stroke: var(--ink-3); stroke-width: 1.2; }
.ai-bar { fill: #7d94c4; }
.ai-bar-cur { fill: var(--copper); }
.ai-bar-alt { fill: var(--ink-3); }
.ai-bar-fcf { fill: #2f7d4f; }
.ai-line { stroke: var(--copper); stroke-width: 2.5; }
.ai-pt { fill: var(--card); stroke: var(--copper); stroke-width: 2.5; }
@media (prefers-color-scheme: dark) {
  .ai-bar-fcf { fill: #4cc38a; }
}
.ai-gap { border: 1.5px dashed rgba(176, 120, 32, 0.5); border-radius: 10px; background: rgba(230, 184, 76, 0.05); padding: 16px 18px; color: var(--ink-2); margin-top: 6px; }
.ai-gap-tag { font-family: "IBM Plex Mono", monospace; font-size: 10.5px; font-weight: 600; letter-spacing: 0.13em; color: #9a7414; text-transform: uppercase; display: block; margin-bottom: 6px; }
@media (prefers-color-scheme: dark) { .ai-gap-tag { color: #e6b84c; } }
.ai-gap p { margin: 0; font-size: 14px; line-height: 1.55; }
.ai-lviz { margin-top: 6px; }
.ai-lv-row { margin-bottom: 16px; }
.ai-lv-head { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; font-size: 13.5px; color: var(--ink-2); margin-bottom: 7px; }
.ai-lv-head b { color: var(--ink); font-family: "IBM Plex Mono", monospace; font-weight: 600; }
.ai-lv-track { position: relative; height: 28px; background: var(--paper-2); border: 1px solid var(--line); border-radius: 6px; }
.ai-lv-bar { position: absolute; top: 0; bottom: 0; border-radius: 6px; }
.ai-lv-a { background: var(--copper); }
.ai-lv-b { background: #b07d2b; }
.ai-lv-mid { position: absolute; top: -4px; bottom: -4px; width: 2px; background: var(--ink); }
.ai-lv-axis { position: relative; height: 18px; font-family: "IBM Plex Mono", monospace; font-size: 10.5px; color: var(--ink-3); }
.ai-lv-axis span { position: absolute; }

/* Quote cards (Version 5) */
.ai-quotes { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
blockquote.ai-q { margin: 0; padding: 18px 20px; background: var(--paper-2); border-left: 3px solid var(--copper); border-radius: 0 var(--radius) var(--radius) 0; font-size: 16.5px; line-height: 1.55; color: var(--ink); }
blockquote.ai-q footer { margin-top: 10px; }

/* Claims timeline (Version 5) */
.ai-timeline { border: 1px solid var(--line); border-radius: var(--radius); padding: 8px 22px; background: var(--card); }
.ai-tl-item { display: grid; grid-template-columns: 130px 1fr; gap: 16px; padding: 13px 0; border-bottom: 1px solid var(--line); }
.ai-tl-item:last-child { border-bottom: none; }
.ai-tl-when { font-family: "IBM Plex Mono", monospace; font-size: 12px; color: var(--copper-strong); padding-top: 2px; }
.ai-tl-lead { font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-3); margin: 0 0 5px; }
.ai-tl-quote { margin: 0 0 6px; font-size: 14.5px; color: var(--ink-2); line-height: 1.55; }

/* Signals */
.ai-signals { margin-top: 26px; }
.ai-signals h4 { margin: 0 0 10px; font-size: 11.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; }
.ai-sig-row { display: flex; flex-wrap: wrap; gap: 8px; }
.ai-sig { display: inline-flex; align-items: center; gap: 8px; border: 1px solid var(--line); border-radius: 999px; padding: 5px 12px; background: var(--card); font-size: 13px; }
.ai-sig-fam { color: var(--ink-2); font-weight: 600; }
.ai-sig-state { font-family: "IBM Plex Mono", monospace; font-size: 10.5px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; }
.ai-sig-on { color: #2f7d4f; }
.ai-sig-off { color: var(--ink-3); }
@media (prefers-color-scheme: dark) { .ai-sig-on { color: #7bc79b; } }

/* Disclaimer */
.ai-disc { border-top: 1px solid var(--line); margin-top: 34px; padding-top: 16px; color: var(--ink-3); font-size: 12.5px; display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; line-height: 1.55; }
.ai-disc strong { color: var(--ink-2); font-weight: 600; }

@media (max-width: 900px) {
  .ai-kpis { grid-template-columns: 1fr 1fr; }
  .ai-span7, .ai-span5, .ai-span6, .ai-span4 { grid-column: span 12; }
  .ai-charts { grid-template-columns: 1fr; }
  .ai-quotes { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .ai-kpis { grid-template-columns: 1fr 1fr; gap: 8px; }
  .ai-kpi { padding: 13px 14px; }
  .ai-tl-item { grid-template-columns: 1fr; gap: 2px; }
  table.ai-dt { font-size: 12.5px; }
  blockquote.ai-q { font-size: 15.5px; padding: 15px 16px; }
}
/* === /AI analysis === */

/* ---------- Document cards on company pages (rule (bd) item 6) ----------
   Recent events and the Documents shelves render as the search
   results' compact card grid grouped by quarter — the same classes
   and geometry as the library page's docCard, in this page's theme
   variables. The thumbnail shares the title's single open action;
   a deck's first-slide image layers over the brand tile and removes
   itself when absent. No "Read here" label exists on a card. */
.doc-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin-top: 20px; }
@media (min-width: 760px) { .doc-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1180px) { .doc-grid { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 2000px) { .doc-grid { grid-template-columns: repeat(5, 1fr); } }
.qgroup-head {
  grid-column: 1 / -1; font-family: "IBM Plex Mono", monospace; font-size: 12.5px; font-weight: 500;
  letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-3);
  border-bottom: 1px solid var(--line); padding-bottom: 5px; margin-top: 22px;
}
.doc-grid > .qgroup-head:first-child { margin-top: 0; }
.dcard {
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
  overflow: hidden; display: flex; flex-direction: column; min-width: 0;
}
.dcard-thumb {
  position: relative; display: block; aspect-ratio: 16 / 6; overflow: hidden;
  text-decoration: none; border-bottom: 1px solid var(--line); flex: none;
}
button.dcard-thumb {
  border-top: 0; border-left: 0; border-right: 0; width: 100%;
  cursor: pointer; text-align: left; font: inherit; color: inherit;
  appearance: none; -webkit-appearance: none; border-radius: 0;
}
.deck-brand-tk { font-family: "IBM Plex Mono", monospace; font-size: 27px; font-weight: 600; letter-spacing: 0.02em; }
.deck-brand-sub { font-family: "IBM Plex Mono", monospace; font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; opacity: 0.75; }
.dcard-thumb .deck-brand-tk { font-size: 19px; }
.dcard-date {
  font-family: "IBM Plex Mono", monospace; font-size: 12.5px;
  color: var(--ink-3); letter-spacing: 0.02em; margin-bottom: 5px;
}
.dcard-thumb img {
  position: absolute; inset: 0; width: 100%; height: 100%; display: block;
  object-fit: cover; object-position: top center;
}
.dcard-thumb--brand {
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: 10px 12px; color: #eef2ff;
  background:
    radial-gradient(420px 170px at 88% -30px, rgba(217, 126, 74, 0.3), transparent 70%),
    radial-gradient(520px 210px at 6% 120%, rgba(56, 189, 248, 0.24), transparent 70%),
    linear-gradient(160deg, #0a1128 0%, #05070f 72%);
}
/* Brand fallback tiles (no cover art): button.dcard-thumb sets
   color: inherit (0,1,1), which used to override the brand color
   above (0,1,0) and render the ticker label dark-on-dark (owner
   feedback fix, 2026-10-30). Pin the light label color. */
.dcard-thumb.dcard-thumb--brand { color: #eef2ff; }
.dcard-thumb--brand .deck-brand-tk,
.deck-cover--brand .deck-brand-tk { color: #eef2ff; }
.dcard .main { padding: 14px 16px 16px; min-width: 0; }
.dcard .title { font-family: "Spectral", serif; font-size: 17px; line-height: 1.35; }
.dcard .title a { color: var(--ink); text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: 4px; }
.dcard .title a:hover { text-decoration-color: var(--copper); color: var(--copper-strong); }
.dcard .title .ropen {
  font: inherit; color: var(--ink); background: none; border: none; padding: 0; cursor: pointer;
  text-align: left; text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: 4px;
}
.dcard .title .ropen:hover { text-decoration-color: var(--copper); color: var(--copper-strong); }
.dcard .meta { margin-top: 6px; display: flex; flex-wrap: wrap; gap: 5px 9px; align-items: center; font-size: 13px; color: var(--ink-3); }
.dcard .meta .form {
  font-family: "IBM Plex Mono", monospace; font-size: 11px; font-weight: 500; color: var(--ink);
  border: 1px solid var(--line); background: var(--paper-2); border-radius: 4px; padding: 1px 6px;
}
.dcard .meta .type-rel { color: var(--copper-strong); font-weight: 600; }
.dcard .meta a.orig { color: var(--copper-strong); font-weight: 600; text-decoration: none; }
.dcard .meta a.orig:hover { text-decoration: underline; }
.dcard .ctx { margin-top: 7px; font-size: 14px; color: var(--ink-2); }
.dcard .ctx .ilabel { font-family: "IBM Plex Mono", monospace; font-size: 11px; color: var(--ink-3); }
.cp-ev-grid { margin-top: 16px; }
