/* phillylate.st — design system
   Type: Newsreader (display serif) + Inter (UI and data)
   Layout: single measure column, full-bleed bands, asymmetric margins
   Palette: warm paper, near-black ink, one print red. Nothing else. */

:root{
  --ink:#12141a; --ink-2:#4a4f58; --ink-3:#7c828c;
  --paper:#fdfcfa; --paper-2:#f6f4ef;
  --rule:#e4e0d8; --rule-2:#cfc9bd;
  --red:#c8102e; --red-ink:#a00c25;

  --font-display:"Newsreader",Georgia,"Times New Roman",serif;
  --font-ui:"Public Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;

  /* modular scale, ratio ~1.333 at the top */
  --t-kicker:.71rem; --t-small:.82rem; --t-body:1.0625rem; --t-lead:1.25rem;
  --t-h3:1.18rem; --t-h2:1.45rem;
  --t-h1:clamp(2.1rem,5.2vw,3.35rem);
  --t-stat:clamp(2.3rem,7vw,3.6rem);

  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px;
  --s6:32px; --s7:48px; --s8:64px; --s9:96px;

  --measure:36rem;   /* ~69 characters at the body size, inside the 45-75 band */
  --wrap:64rem;
}

@media (prefers-color-scheme:dark){
  :root{
    --ink:#f2f0ec; --ink-2:#b9b6b0; --ink-3:#8b8880;
    --paper:#121316; --paper-2:#1a1c20;
    --rule:#2b2d33; --rule-2:#3a3d44;
    --red:#ff4d5e; --red-ink:#ff6b78;
  }
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--font-ui);font-size:var(--t-body);line-height:1.58;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
img,svg{max-width:100%;display:block}
strong{font-weight:600}
hr{border:0;border-top:1px solid var(--rule);margin:var(--s7) 0}

/* ---------- masthead ---------- */
.masthead{position:sticky;top:0;z-index:20;background:var(--paper);border-bottom:1px solid var(--rule)}
.masthead-in{max-width:var(--wrap);margin:0 auto;padding:var(--s3) var(--s5);display:flex;align-items:baseline;justify-content:space-between;gap:var(--s5)}
.wordmark{font-family:var(--font-ui);font-weight:700;font-size:1.3rem;letter-spacing:-.03em;line-height:1;color:var(--ink);text-decoration:none;white-space:nowrap}
.wordmark .dot{display:inline-block;width:.17em;height:.17em;background:var(--red);border-radius:50%;vertical-align:baseline;margin:0 .012em 0 .006em;position:relative;top:-.01em}
@media (max-width:24rem){.wordmark{letter-spacing:-.01em}.wordmark .dot{margin-left:.05em}}
.masthead nav{display:flex;gap:var(--s5);align-items:baseline}
.masthead nav a{
  font-size:var(--t-kicker);font-weight:600;text-transform:uppercase;letter-spacing:.09em;
  color:var(--ink-2);text-decoration:none;padding:var(--s2) 0;border-bottom:2px solid transparent;
}
.masthead nav a:hover{color:var(--ink);border-bottom-color:var(--red)}
.masthead nav a[aria-current="page"]{color:var(--ink);border-bottom-color:var(--ink)}

/* ---------- article ---------- */
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--s5)}
.article{max-width:var(--measure);margin:0 auto;padding:var(--s7) var(--s5) var(--s9)}
.kicker{font-size:var(--t-kicker);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--red);margin:0 0 var(--s3)}
h1{font-family:var(--font-display);font-weight:600;font-size:var(--t-h1);line-height:1.08;letter-spacing:-.018em;margin:0 0 var(--s4);text-wrap:balance;font-variation-settings:"opsz" 48}
.standfirst{font-family:var(--font-display);font-size:var(--t-lead);line-height:1.45;color:var(--ink-2);margin:0 0 var(--s4)}
.article--lead{max-width:var(--measure);padding-bottom:var(--s6)}
.byline{display:flex;flex-wrap:wrap;gap:var(--s4);align-items:baseline;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:var(--s3) 0;margin:0 0 var(--s7);font-size:var(--t-small);color:var(--ink-3)}
.byline .stamp{margin:0}
h2{font-family:var(--font-display);font-size:var(--t-h2);font-weight:600;line-height:1.2;letter-spacing:-.01em;margin:var(--s7) 0 var(--s5)}
h3{font-size:var(--t-h3);font-weight:650;margin:var(--s6) 0 var(--s2)}
p{margin:0 0 var(--s4)}
ul{margin:0 0 var(--s4);padding-left:1.15em}
li{margin-bottom:var(--s2)}
code{background:var(--paper-2);padding:1px 5px;border-radius:2px;font-size:.9em}
a{color:inherit;text-underline-offset:2px;text-decoration-thickness:1px}
.article a{text-decoration-color:var(--rule-2)}
.article a:hover{text-decoration-color:var(--red)}
.muted{color:var(--ink-3);font-size:.79rem}

/* ---------- stat band: hierarchy by scale and rule, not decoration ---------- */
.statband{border-top:3px solid var(--ink);border-bottom:1px solid var(--rule);margin:0 0 var(--s7);padding:var(--s5) 0 var(--s4)}
.stats{max-width:var(--wrap);margin:0 auto;padding:0 var(--s5);display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s5)}
.stat{position:relative}
.stat + .stat{border-left:1px solid var(--rule);padding-left:var(--s5)}
.stat .n{font-family:var(--font-display);font-size:var(--t-stat);font-weight:600;line-height:1;letter-spacing:-.03em;display:block;margin-bottom:var(--s2)}
.stat.lead .n{color:var(--red)}
.stat .lab{display:block;font-size:var(--t-kicker);font-weight:600;text-transform:uppercase;letter-spacing:.09em;color:var(--ink-3);line-height:1.35}
.stat .sub{display:block;font-size:var(--t-small);color:var(--ink-2);margin-top:var(--s1)}
.srcline{max-width:var(--wrap);margin:var(--s4) auto 0;padding:0 var(--s5);font-size:var(--t-small);color:var(--ink-3)}

/* ---------- data table: full measure, because records need width ---------- */
.tablewrap{max-width:var(--wrap);margin:var(--s6) auto var(--s5);padding:0 var(--s5)}
.tablecap{font-size:var(--t-kicker);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--ink-3);border-bottom:2px solid var(--ink);padding-bottom:var(--s2);margin:0}
table{border-collapse:collapse;width:100%;font-size:.9rem;table-layout:fixed}
thead th{position:sticky;top:52px;z-index:5;background:var(--paper);text-align:left;font-size:var(--t-kicker);font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);padding:var(--s3) var(--s4) var(--s3) 0;border-bottom:1px solid var(--rule-2);white-space:nowrap}
th:nth-child(1),td:nth-child(1){width:24%}
th:nth-child(2),td:nth-child(2){width:21%}
th:nth-child(3),td:nth-child(3){width:17%}
th:nth-child(4),td:nth-child(4){width:19%}
th:nth-child(5),td:nth-child(5){width:19%}
tbody td{padding:var(--s3) var(--s4) var(--s3) 0;border-bottom:1px solid var(--rule);vertical-align:top}
tbody tr:hover td{background:var(--paper-2)}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
th.num,td.num:not(:last-child){padding-right:var(--s5)}
td:last-child,th:last-child{padding-right:0}
td .addr{display:block;font-weight:600;line-height:1.3}
td .sub{display:block;color:var(--ink-3);font-size:.76rem;margin-top:2px;white-space:nowrap}
td .finding{display:block;line-height:1.35;color:var(--ink-2)}
td .flag{display:inline-block;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--red);margin-bottom:3px}
.debt{color:var(--red-ink);font-weight:600}

/* ---------- subscribe ---------- */
.substrip{max-width:var(--measure);margin:var(--s8) auto var(--s4);padding:var(--s5);border:1px solid var(--rule-2);border-left:3px solid var(--red);background:var(--paper-2)}
.substrip p{margin:0;font-size:var(--t-small);color:var(--ink-2)}
.substrip .ss-k{margin:0 0 var(--s2);font-size:var(--t-kicker);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--ink)}
.subscribe{margin:var(--s5) 0 var(--s3);padding:var(--s5);border:1px solid var(--rule-2);background:var(--paper-2)}
.subscribe label{display:block;font-size:var(--t-kicker);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--ink-3);margin-bottom:var(--s3)}
.subrow{display:flex;gap:var(--s3);flex-wrap:wrap}
.subscribe input[type=email]{flex:1 1 16rem;min-width:0;font:inherit;font-size:1rem;padding:var(--s3) var(--s4);color:var(--ink);background:var(--paper);border:1px solid var(--rule-2);border-radius:2px}
.subscribe input[type=email]:focus{outline:2px solid var(--red);outline-offset:1px}
.subscribe button{font:inherit;font-size:.92rem;font-weight:600;padding:var(--s3) var(--s5);min-height:44px;color:#fff;background:var(--ink);border:1px solid var(--ink);border-radius:2px;cursor:pointer}
.subscribe button:hover{background:var(--red);border-color:var(--red)}
.subscribe .hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.subnote{margin:var(--s3) 0 0;font-size:var(--t-small);color:var(--ink-2);min-height:1.4em}

/* ---------- footer ---------- */
footer{border-top:1px solid var(--rule);margin-top:var(--s8);background:var(--paper-2)}
.footer-in{max-width:var(--wrap);margin:0 auto;padding:var(--s7) var(--s5) var(--s8);display:grid;grid-template-columns:1.5fr 1fr;gap:var(--s7);font-size:var(--t-small);color:var(--ink-2);line-height:1.6}
.fm{font-weight:800;font-size:1.1rem;letter-spacing:-.03em;color:var(--ink);margin:0 0 var(--s3)}
.fm .dot{color:var(--red)}
.footer-in h4{font-size:var(--t-kicker);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--ink-3);margin:0 0 var(--s3)}
.footer-in .legal{grid-column:1/-1;border-top:1px solid var(--rule);padding-top:var(--s4);color:var(--ink-3);font-size:.78rem}

@media (prefers-reduced-motion:no-preference){
  .stat,.tablewrap{animation:rise .45s ease-out both}
  .stat:nth-child(2){animation-delay:.05s}
  .stat:nth-child(3){animation-delay:.1s}
  @keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
}

/* ---------- mobile: stacked records, thumb-sized targets ---------- */
@media (max-width:44rem){
  .wrap,.article{padding-left:var(--s4);padding-right:var(--s4)}
  .masthead-in{padding:var(--s3) var(--s4);flex-wrap:wrap;gap:var(--s3)}
  .masthead nav{gap:var(--s4)}
  .masthead nav a{padding:var(--s3) 0;min-height:44px;display:inline-flex;align-items:center}
  .article{padding-top:var(--s6)}
  .stats{grid-template-columns:1fr;gap:var(--s4)}
  .stat,.stat + .stat{border-left:0;border-top:1px solid var(--rule);padding:var(--s3) 0 0}
  .stat:first-child{border-top:0;padding-top:0}
  .footer-in{grid-template-columns:1fr;gap:var(--s5)}
  thead{display:none}
  table,tbody,tr,td{display:block;width:100%}
  tbody tr{border-bottom:1px solid var(--rule-2);padding:var(--s3) 0 var(--s4)}
  tbody td{padding:2px 0}
  thead th{position:static}
  tbody td[data-label]::before{content:attr(data-label);display:inline-block;min-width:7.5rem;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);vertical-align:top;padding-top:3px}
  tbody tr:hover td{background:transparent}
}
