/* Filing Signals — a register, not an essay.
   Deliberately NOT an editorial-serif layout: monospace carries the metadata,
   the palette is cool slate rather than warm paper, corners are square and the
   structure is ruled and dense. Colour is reserved almost entirely for data
   encoding; the one status colour is used only for severity.
   Series slots are the validated categorical set (see charts.py) and are fixed,
   so a signal keeps its colour in tags, row rules and charts alike. */
:root{
  color-scheme:light;
  --bg:#eceff2; --surface:#fff; --surface-2:#f3f5f7; --surface-3:#e2e6ea;
  --line:#d3d9df; --line-strong:#b3bcc5;
  --ink:#0f151b; --ink-2:#39424b; --muted:#68727c;
  --rule:#0f151b;
  --alert:#b3261e; --alert-ink:#fff;

  --series-1:#2a78d6; --series-2:#eb6834; --series-3:#1baf7a;
  --series-4:#eda100; --series-5:#e87ba4; --series-6:#008300;

  --radius:2px; --wrap:1340px; --reading:76ch;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
}
/* Dark is declared twice on purpose: the media query covers the OS setting,
   the attribute scope covers an explicit choice, and the :not() guard lets a
   light choice win even when the OS is dark. */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --bg:#0b0f13; --surface:#151b21; --surface-2:#1b232a; --surface-3:#232c34;
    --line:#2a343d; --line-strong:#3d4952;
    --ink:#e7ecf1; --ink-2:#b9c3cc; --muted:#8593a0;
    --rule:#3d4952;
    --alert:#ff6b5e; --alert-ink:#1a0f0d;
    --series-1:#3987e5; --series-2:#d95926; --series-3:#199e70;
    --series-4:#c98500; --series-5:#d55181; --series-6:#008300;
  }
}
:root[data-theme="dark"]{
    color-scheme:dark;
    --bg:#0b0f13; --surface:#151b21; --surface-2:#1b232a; --surface-3:#232c34;
    --line:#2a343d; --line-strong:#3d4952;
    --ink:#e7ecf1; --ink-2:#b9c3cc; --muted:#8593a0;
    --rule:#3d4952;
    --alert:#ff6b5e; --alert-ink:#1a0f0d;
    --series-1:#3987e5; --series-2:#d95926; --series-3:#199e70;
    --series-4:#c98500; --series-5:#d55181; --series-6:#008300;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);
  font-size:15.5px;line-height:1.58;-webkit-font-smoothing:antialiased}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 clamp(14px,2.4vw,28px)}
a{color:var(--ink);text-decoration-color:var(--line-strong);text-underline-offset:3px}
a:hover{text-decoration-color:currentColor}
.skip{position:absolute;left:-9999px}
.skip:focus{left:8px;top:8px;background:var(--surface);padding:8px;z-index:10}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
/* The last card was sitting hard against the footer rule. Note the selector:
   <main> also carries .wrap, whose `padding: 0 clamp(...)` shorthand resets
   padding-bottom to zero and outranks a bare element selector. Matching both
   is what makes this apply. */
main.wrap{padding-bottom:96px}
main p{max-width:var(--reading)}

/* ── masthead: a status bar, not a brand banner ───────────── */
.site-head{background:var(--surface);border-bottom:2px solid var(--rule);
  position:sticky;top:0;z-index:5}
.site-head .wrap{display:flex;align-items:center;justify-content:space-between;
  gap:18px;flex-wrap:wrap;padding-top:11px;padding-bottom:11px}
.brand{font-family:var(--mono);font-weight:700;font-size:.95rem;color:var(--ink);
  text-decoration:none;display:inline-flex;align-items:center;gap:9px;
  letter-spacing:.06em;text-transform:uppercase}
.dot{width:7px;height:7px;background:var(--ink);flex:none;border-radius:50%}
.site-head nav{display:flex;gap:0;flex-wrap:wrap;font-size:.8rem;font-family:var(--mono)}
.site-head nav a{color:var(--muted);text-decoration:none;padding:5px 11px;
  letter-spacing:.05em;text-transform:uppercase;border-left:1px solid var(--line)}
.site-head nav a:first-child{border-left:none}
.site-head nav a:hover{color:var(--ink);background:var(--surface-2)}

/* ── section labels ───────────────────────────────────────── */
.eyebrow{font-family:var(--mono);font-size:.68rem;text-transform:uppercase;
  letter-spacing:.12em;color:var(--muted);font-weight:600;margin:0 0 10px;
  padding-bottom:7px;border-bottom:1px solid var(--rule);max-width:none;
  display:flex;justify-content:space-between;gap:14px;align-items:baseline}

/* ── hero ─────────────────────────────────────────────────── */
.hero{padding:clamp(24px,3.4vw,44px) 0 22px;border-bottom:1px solid var(--line);
  margin-bottom:26px}
h1{font-family:var(--sans);font-size:clamp(1.55rem,3.1vw,2.35rem);line-height:1.16;
  letter-spacing:-.028em;margin:0 0 14px;font-weight:700;max-width:22ch;text-wrap:balance}
.lede{font-size:.99rem;color:var(--ink-2);max-width:var(--reading);margin:0;line-height:1.62}

/* Key figures as a monospace data strip. */
.figures{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;
  margin:24px 0 0;border-top:1px solid var(--rule);border-left:1px solid var(--line)}
.figures>div{padding:11px 13px;border-bottom:1px solid var(--line);
  border-right:1px solid var(--line);background:var(--surface)}
.figures dt{font-family:var(--mono);font-size:.63rem;text-transform:uppercase;
  letter-spacing:.11em;color:var(--muted);font-weight:600;margin-bottom:5px}
.figures dd{margin:0;font-family:var(--mono);font-size:1.3rem;font-weight:700;
  letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;line-height:1}
.figures .dd-date{font-size:1rem;letter-spacing:0}
@media (min-width:1080px){
  .hero-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr);
    gap:clamp(28px,3.5vw,56px);align-items:start}
  .figures{grid-template-columns:repeat(2,1fr);margin-top:4px}
}
.mixbar{display:block;width:100%;height:9px;margin:24px 0 0;border-radius:0}

/* ── charts ───────────────────────────────────────────────── */
.chart{margin:0 0 28px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:15px 16px 10px}
.chart svg{display:block;width:100%;height:auto;overflow:visible}
.chart .grid{stroke:var(--line);stroke-width:1}
.chart .axis{fill:var(--muted);font-size:10.5px;font-family:var(--mono);
  font-variant-numeric:tabular-nums;letter-spacing:.02em}
.chart .bar-total{fill:var(--ink-2);font-size:10.5px;font-weight:700;
  font-family:var(--mono);font-variant-numeric:tabular-nums}
.chart .seg{transition:opacity .12s}
.chart svg:hover .seg{opacity:.5}
.chart .seg:hover{opacity:1}
.chart-legend{display:flex;gap:15px;flex-wrap:wrap;margin-bottom:11px;
  font-size:.7rem;color:var(--muted);font-family:var(--mono);text-transform:uppercase;
  letter-spacing:.06em}
.key{display:inline-flex;align-items:center;gap:6px}
.key i{width:9px;height:9px;flex:none}
.chart-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}

/* ── rate bars ────────────────────────────────────────────── */
.rates{display:grid;gap:18px;margin:0 0 26px;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--radius);padding:20px}
.rate-head{display:flex;gap:14px;align-items:baseline;justify-content:space-between;
  margin-bottom:7px}
.rate-label{font-size:.92rem;line-height:1.35}
.rate-value{font-family:var(--mono);font-size:1.22rem;font-weight:700;
  font-variant-numeric:tabular-nums;letter-spacing:-.02em;flex:none}
.rate-track{height:10px;background:var(--surface-3);overflow:hidden}
.rate-fill{height:100%;background:var(--ink-2);min-width:5px}
.rate-foot{font-family:var(--mono);font-size:.7rem;color:var(--muted);margin-top:5px;
  letter-spacing:.04em}

/* ── controls ─────────────────────────────────────────────── */
.controls{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.search{flex:1 1 260px}
.search input{width:100%;padding:9px 12px;border:1px solid var(--line-strong);
  border-radius:var(--radius);background:var(--surface);color:var(--ink);
  font-size:.9rem;font-family:var(--mono)}
.search input:focus{outline:2px solid var(--ink);outline-offset:-1px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{border:1px solid var(--line-strong);background:var(--surface);
  color:var(--muted);border-radius:var(--radius);padding:8px 13px;font-size:.7rem;
  cursor:pointer;font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em}
.chip:hover{color:var(--ink);background:var(--surface-2)}
.chip.is-on{background:var(--ink);color:var(--surface)}
.count{font-family:var(--mono);color:var(--muted);font-size:.72rem;margin:0 0 16px;
  letter-spacing:.06em;text-transform:uppercase}

/* ── the register ─────────────────────────────────────────── */
.feed{display:grid;gap:12px}
@media (min-width:1120px){ .feed{grid-template-columns:1fr 1fr;align-items:start} }
.event{background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:15px 17px 15px 19px;position:relative;
  transition:border-color .12s}
.event::before{content:"";position:absolute;left:0;top:-1px;bottom:-1px;width:3px}
.event[data-signal="restatement"]::before{background:var(--series-1)}
.event[data-signal="auditor_change"]::before{background:var(--series-2)}
.event[data-signal="late_filing"]::before{background:var(--series-3)}
.event[data-signal="going_concern"]::before{background:var(--series-4)}
.event[data-signal="policy_change"]::before{background:var(--series-5)}
.event[data-signal="revenue_recognition"]::before{background:var(--series-6)}
.event:hover{border-color:var(--line-strong)}
.event-head{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-bottom:9px}
.event-head time{margin-left:auto;color:var(--muted);font-size:.72rem;
  font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:.04em}
.event-title{font-size:1rem;line-height:1.38;margin:0 0 8px;letter-spacing:-.012em;
  font-weight:650}
.event-meta{font-size:.8rem;color:var(--muted);margin:0 0 11px;font-family:var(--mono);
  letter-spacing:.02em}
.event-meta a{font-weight:600;font-family:var(--sans);letter-spacing:0}
.sep{margin:0 6px;opacity:.55}
.ticker{font-family:var(--mono);font-size:.72rem;background:var(--surface-3);
  color:var(--ink-2);padding:1px 5px;margin-left:6px;letter-spacing:.04em}

.tag{font-family:var(--mono);font-size:.63rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.09em;padding:3px 7px;border-radius:0;white-space:nowrap;
  border:1px solid currentColor}
.tag-restatement{color:var(--series-1)}
.tag-auditor_change{color:var(--series-2)}
.tag-late_filing{color:var(--series-3)}
.tag-going_concern{color:var(--series-4)}
.tag-policy_change{color:var(--series-5)}
.tag-revenue_recognition{color:var(--series-6)}
.tag-beta{color:var(--muted);letter-spacing:.06em;font-weight:600}
.tag-conf{color:var(--muted);border-style:dashed;font-weight:500;letter-spacing:.05em}
.tag-sev-high{color:var(--alert-ink);background:var(--alert);border-color:var(--alert)}

.ai{background:var(--surface-2);border-left:2px solid var(--line-strong);
  padding:11px 13px;margin:0 0 11px}
.ai-label{font-family:var(--mono);font-size:.62rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.11em;color:var(--muted)}
.ai p{margin:5px 0 0;font-size:.92rem}
.ai .why{color:var(--muted);font-size:.86rem}

.subclass{font-size:.85rem;margin:0 0 9px;display:flex;gap:8px;align-items:center;
  flex-wrap:wrap}
.firms{font-family:var(--mono);font-weight:650;font-size:.83rem;letter-spacing:.01em}
.transition{display:flex;gap:9px;align-items:center;flex-wrap:wrap;font-size:.8rem;
  margin:0 0 11px;padding:8px 11px;background:var(--surface-2);font-family:var(--mono);
  letter-spacing:.01em}
.transition .from{color:var(--muted);text-decoration:line-through}
.transition .to{font-weight:700}
.transition .arrow,.arrow{color:var(--ink);font-weight:700}
.caveat{font-size:.83rem;color:var(--ink-2);background:var(--surface-2);
  border-left:2px solid var(--alert);padding:9px 12px;margin:0 0 11px}
blockquote{margin:0 0 11px;padding:2px 0 2px 13px;border-left:1px solid var(--line-strong);
  color:var(--ink-2);font-size:.87rem;line-height:1.6}
.evidence{margin:0 0 11px;font-size:.82rem}
.evidence summary{cursor:pointer;color:var(--muted);font-weight:600;font-family:var(--mono);
  font-size:.7rem;text-transform:uppercase;letter-spacing:.08em}
.evidence dl{display:grid;grid-template-columns:auto 1fr;gap:4px 13px;margin:10px 0 0;
  font-family:var(--mono);font-size:.76rem}
.evidence dt{color:var(--muted)}
.evidence dd{margin:0;word-break:break-word}
.evidence ul{margin:6px 0 0;padding-left:17px;color:var(--muted)}
.links{margin:0;font-size:.78rem;display:flex;gap:15px;flex-wrap:wrap;
  font-family:var(--mono);letter-spacing:.04em}

/* ── chains, tables, misc ─────────────────────────────────── */
.chain{list-style:none;padding:0;margin:10px 0 0;display:flex;flex-direction:column;gap:8px}
.chain li{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding-left:17px;
  position:relative}
.chain li::before{content:"";position:absolute;left:2px;top:8px;width:6px;height:6px;
  background:var(--ink-2)}
.chain li:not(:last-child)::after{content:"";position:absolute;left:4.5px;top:16px;
  bottom:-10px;width:1px;background:var(--line-strong)}
.chain time{color:var(--muted);font-family:var(--mono);font-size:.75rem;
  font-variant-numeric:tabular-nums;flex:none}
.chain-note{color:var(--muted);font-family:var(--mono);font-size:.72rem}
.chain-box{background:var(--surface);border:1px solid var(--line);padding:15px 18px;
  margin:0 0 20px}
.chain-box h2{margin:0;font-size:.72rem;font-family:var(--mono);text-transform:uppercase;
  letter-spacing:.11em;color:var(--muted)}
.signal-block{border-top:1px solid var(--line);padding:20px 0}
.signal-block h2{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:.95rem;
  margin:0 0 8px;text-transform:none;letter-spacing:-.01em;font-family:var(--sans)}
.mini{list-style:none;padding:0;margin:11px 0 0;font-size:.87rem}
.mini li{padding:6px 0;border-bottom:1px solid var(--line);display:flex;gap:10px;flex-wrap:wrap}
.mini time{color:var(--muted);font-family:var(--mono);font-size:.75rem;
  font-variant-numeric:tabular-nums;flex:none}
.ladder{max-width:62ch}.ladder li{margin:5px 0}
.notice{background:var(--surface-2);border-left:2px solid var(--line-strong);
  padding:13px 15px;font-size:.9rem;max-width:var(--reading)}
code{font-family:var(--mono);font-size:.88em;background:var(--surface-3);padding:1px 4px}
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);
  background:var(--surface)}
table{border-collapse:collapse;width:100%;font-size:.83rem;min-width:620px;
  font-family:var(--mono)}
th,td{text-align:left;padding:9px 13px;border-bottom:1px solid var(--line);white-space:nowrap}
th{font-size:.65rem;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);
  background:var(--surface-2);font-weight:700}
tr:last-child td{border-bottom:none}
td{font-variant-numeric:tabular-nums}
.net-pos{color:var(--series-6)}.net-neg{color:var(--series-2)}
.empty-state{background:var(--surface);border:1px solid var(--line);padding:34px;
  text-align:center}
.empty-state h2{margin-top:0}
.empty{color:var(--muted);text-align:center;padding:34px;font-family:var(--mono);
  font-size:.8rem;text-transform:uppercase;letter-spacing:.08em}
.crumb{font-family:var(--mono);font-size:.74rem;margin:22px 0 8px;text-transform:uppercase;
  letter-spacing:.07em}
.muted{color:var(--muted)}
h2{font-family:var(--sans);font-size:clamp(1.05rem,1.7vw,1.28rem);letter-spacing:-.018em;
  margin:36px 0 12px;font-weight:700}
.site-foot{border-top:2px solid var(--rule);background:var(--surface);
  padding:32px 0 40px;font-size:.83rem;margin-top:24px}
.site-foot p{margin:0 0 8px;max-width:78ch}
.colophon{font-family:var(--mono);font-size:.7rem;color:var(--muted);
  text-transform:uppercase;letter-spacing:.1em;margin:0 0 14px!important;
  padding-bottom:13px;border-bottom:1px solid var(--line)}

@media (max-width:620px){
  body{font-size:15px}
  /* The header is sticky, so every row costs screen for the whole session.
     Three stacked rows came to 155px on a 812px phone - roughly a fifth of the
     viewport. Collapsed to one row: the wordmark holds its width and the nav
     scrolls beside it. The provenance line moves to the footer, where it is
     read once rather than carried forever. */
  .site-head .wrap{flex-wrap:nowrap;gap:10px;padding-top:0;padding-bottom:0;
    min-height:44px;align-items:center}
  .brand{font-size:.8rem;letter-spacing:.05em;flex:none}
  .brand .dot{width:6px;height:6px}
  /* flex-start, not flex-end: with flex-end the overflow runs off the LEFT
     edge, where scrolling cannot reach it - the first four links were simply
     unreachable. Overflow must run right so the scroll gesture recovers it. */
  .site-head nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;min-width:0;
    justify-content:flex-start;flex:1}
  .site-head nav::-webkit-scrollbar{display:none}
  .site-head nav a{padding:13px 8px;white-space:nowrap;border-left:none;font-size:.68rem}
  .figures{grid-template-columns:1fr}
  .figures dd{font-size:1.15rem}
  .event{padding:13px 14px 13px 16px}
  .event-head time{margin-left:0;width:100%}
  .chart{padding:12px 10px 6px}
  .chart-scroll svg{min-width:660px}
  .rates{padding:15px}
  .rate-head{flex-direction:column;gap:1px}
  th,td{padding:8px 10px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

/* masthead status line: the site states its own provenance */
.statusline{width:100%;margin:9px 0 0;padding-top:8px;border-top:1px solid var(--line);
  display:flex;gap:20px;flex-wrap:wrap;font-family:var(--mono);font-size:.64rem;
  color:var(--muted);text-transform:uppercase;letter-spacing:.11em}
.statusline .live{margin-left:auto;display:inline-flex;align-items:center;gap:6px}
.statusline .live::before{content:"";width:5px;height:5px;border-radius:50%;
  background:var(--series-6)}
@media (max-width:620px){
  /* Must live after the base .statusline rule, or source order wins. */
  .statusline{display:none}
}


/* ── theme toggle ─────────────────────────────────────────── */
.theme-toggle{display:inline-flex;gap:5px;margin-left:16px}
.theme-toggle button{appearance:none;border:1px solid var(--line-strong);
  border-radius:var(--radius);background:var(--surface);color:var(--muted);
  font-family:var(--mono);font-size:.62rem;text-transform:uppercase;
  letter-spacing:.09em;padding:6px 10px;cursor:pointer;line-height:1}
.theme-toggle button:hover{color:var(--ink)}
.theme-toggle button[aria-pressed="true"]{background:var(--ink);color:var(--surface)}
/* On a phone the three-button group costs more width than the nav can spare,
   and burying it in the footer put it several hundred entries away. One
   compact button in the header cycles instead: same three states, ~34px. */
.theme-cycle{display:none}
@media (max-width:620px){
  .site-head .theme-toggle{display:none}
  .theme-cycle{display:inline-flex;align-items:center;justify-content:center;
    flex:none;width:34px;min-height:44px;border:none;background:transparent;
    color:var(--muted);font-size:1rem;cursor:pointer;padding:0;line-height:1}
  .theme-cycle:hover,.theme-cycle:focus-visible{color:var(--ink)}
}

/* ── size filter ──────────────────────────────────────────── */
.controls-size{margin-top:2px;margin-bottom:22px;gap:12px}
.filter-label{font-family:var(--mono);font-size:.64rem;text-transform:uppercase;
  letter-spacing:.11em;color:var(--muted);font-weight:600}
.filter-note{font-family:var(--mono);font-size:.62rem;color:var(--muted);
  letter-spacing:.05em}
.float{font-family:var(--mono);font-weight:650;color:var(--ink-2)}
@media (max-width:620px){ .filter-note{display:none} }

/* ── self-checks ──────────────────────────────────────────── */
.checks{list-style:none;padding:0;margin:14px 0 18px;border-top:1px solid var(--line)}
.check{display:grid;grid-template-columns:12px 1fr auto;gap:10px 12px;align-items:baseline;
  padding:10px 2px;border-bottom:1px solid var(--line)}
.check-dot{width:8px;height:8px;border-radius:50%;align-self:center;background:var(--muted)}
.check-ok .check-dot{background:var(--series-6)}
.check-warn .check-dot{background:var(--series-4)}
.check-fail .check-dot{background:var(--alert)}
.check-name{font-weight:650;font-size:.9rem}
.check-detail{grid-column:2;color:var(--muted);font-family:var(--mono);font-size:.74rem;
  letter-spacing:.02em}
.check-status{font-family:var(--mono);font-size:.62rem;text-transform:uppercase;
  letter-spacing:.11em;color:var(--muted);grid-row:1;grid-column:3}
.check-fail .check-status{color:var(--alert);font-weight:700}
.check-warn .check-status{color:var(--series-4);font-weight:700}
