/* FBLTWX · One storm day (/storms/YYYY-MM-DD/, written from storm.html by server/app/stormpages.py): the rules only these
   pages use, moved out of np.css by V-fu1.2 (Oct. 25, 2026); np.css keeps what they share with the log and radar.html.
   Every color is a token. */
.np-age.stale{background:#ffb300;border-color:#7a4d00}
@media (max-width:720px){
  .np-age{right:6px}
}
.rp-clock{min-width:6.5em;font-weight:800;font-variant-numeric:tabular-nums}
@media (max-width:720px){
  .rp-clock{min-width:0}
  .rp-clock{display:none}
}
.sl-none{font-size:19px;margin:14px 0}
.sd-crumb ol{list-style:none;display:flex;flex-wrap:wrap;margin:0 0 6px;padding:0;font-size:14px;font-weight:800}
.sd-crumb li+li::before{content:"\203A";margin:0 7px;color:var(--ink3)}
.sd-pn{display:flex;justify-content:space-between;gap:12px;margin-top:28px;padding-top:12px;border-top:3px solid var(--ink);font-weight:800}
.sd-pntop{margin:0 0 4px;padding:0;border:0;font-size:14px}
.sd-sum{margin:12px 0 0;max-width:68ch;font-size:17px;line-height:1.45}
.sd-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin:20px 0 0;border-top:1px solid var(--rule);border-left:1px solid var(--rule);background:#fff}
.sd-fact{margin:0;padding:10px 12px;border-right:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.sd-fact dt{font-size:13px;font-weight:800;color:var(--ink2)}
.sd-fact dd{margin:2px 0 0}
.sd-fact dd b{display:block;font-size:24px;font-weight:900;line-height:1.15;font-variant-numeric:tabular-nums}
.sd-fact dd span{display:block;font-size:13px;color:var(--ink2)}
.sd-sec{margin-top:8px}
/* the timeline (Storm Day 4): HTML, so its words keep their size; bars are warnings, dots are reports */
.sd-chart{--labw:280px;margin-top:6px}
.tl-rlist{display:flex;flex-wrap:wrap;gap:4px 16px;margin:0 0 6px;font-size:14px}
.tl-rlist span{display:inline-flex;align-items:center;gap:6px}
.tl-rlist span::before{content:"";width:14px;height:12px;background:var(--wk);border:1px solid var(--rule)}
.tl-rows{list-style:none;margin:0;padding:0}
.tl-row{display:grid;grid-template-columns:var(--labw) minmax(0,1fr);gap:12px;align-items:center;padding:5px 0;border-bottom:1px solid var(--rule)}
.tl-lab{font-size:13.5px;font-weight:700;line-height:1.3}
.tl-track{position:relative;height:18px}
.tl-band{position:absolute;top:-5px;bottom:-5px;background:var(--wk)}
.tl-bar{position:absolute;top:3px;height:12px;box-sizing:border-box;border:2px solid var(--wc,var(--storm-cool));background:#fff}
.tl-w.in .tl-bar{background:var(--wc,var(--storm-cool))}
.tl-w.to{--wc:var(--storm-hot)}
.tl-w.sv{--wc:var(--storm-sv)}
.tl-w.ff{--wc:var(--storm-ff)}
.tl-dot{position:absolute;top:4px;width:10px;height:10px;margin-left:-5px;border-radius:50%;background:var(--storm-cool);box-shadow:0 0 0 1px #fff}
.tl-dot.hot{background:var(--storm-hot)}
.tl-dot.wind{background:var(--storm-wind)}
.tl-dot.plain{background:#fff;box-shadow:0 0 0 2px var(--ink3)}
.tl-axis{position:relative;height:22px;margin-left:calc(var(--labw) + 12px);font-size:12px;font-weight:700;color:var(--ink2)}
.tl-axis span{position:absolute;top:4px;white-space:nowrap;transform:translateX(-50%)}
.tl-axis span:first-child{transform:none}
.tl-axis span:last-child{transform:translateX(-100%)}
.sd-tlkey{margin:6px 0 0}
/* Round Q Phase 2 (Oct. 2026): the day in context (Storm Day 20, 24, 25), the airport's day (Storm Day 9), days like this
   one (Storm Day 26) and the share card Copy link shows (Storm Day 29); each written only when the day has its data */
.sd-ctx{list-style:none;margin:14px 0 0;padding:0;max-width:76ch;font-size:16px;line-height:1.45}
.sd-ctx li{padding:6px 0;border-bottom:1px solid var(--rule)}
.sd-ctx li:first-child{border-top:1px solid var(--rule)}
.air-rows{list-style:none;margin:6px 0 0;padding:0}
.air-row{display:grid;grid-template-columns:var(--labw,280px) minmax(0,1fr);gap:12px;align-items:center;padding:5px 0;border-bottom:1px solid var(--rule)}
.air-lab{font-size:13.5px;line-height:1.3}
.air-track{position:relative;height:46px}
.air-track svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.air-track .tl-band{top:0;bottom:0}
.air-t,.air-w,.air-p{fill:none;stroke-linejoin:round;stroke-linecap:round}
.air-t{stroke:var(--warm);stroke-width:2.5}
.air-w{stroke:var(--ink3);stroke-width:1.5}
.air-p{stroke:var(--navy);stroke-width:2}
.air-g{fill:var(--blue);opacity:.75}
.air-axis{margin-left:calc(var(--labw,280px) + 12px)}
.sd-likes{list-style:none;margin:8px 0 0;padding:0;font-size:15px;line-height:1.4}
.sd-likes li{padding:6px 0;border-bottom:1px solid var(--rule)}
.sd-card{margin:10px 0 0;max-width:420px}
.sd-card img{display:block;width:100%;height:auto;border:1px solid var(--rule)}
.sd-card figcaption{margin-top:4px;font-size:13px;color:var(--ink2)}
.sd-mapfig{margin:0}
@media (min-width:900px){
  .sd-mapfig{display:grid;grid-template-columns:minmax(0,480px) minmax(0,1fr);gap:24px;align-items:start}
}
.sd-svg{display:block;width:100%;height:auto;max-width:480px;border:1px solid var(--rule)}
.sm-bg{fill:var(--paper)}
.sm-county{fill:var(--storm-county);stroke:var(--ink);stroke-width:1.5}
.sm-ring{fill:none;stroke:var(--ink3);stroke-width:1;stroke-dasharray:4 4}
.sm-w{fill-opacity:.16;stroke-width:2;fill:var(--storm-cool);stroke:var(--storm-cool)}
.sm-w.to{fill:var(--storm-hot);stroke:var(--storm-hot)}
.sm-w.sv{fill:var(--storm-sv);stroke:var(--storm-sv)}
.sm-w.ff{fill:var(--storm-ff);stroke:var(--storm-ff)}
.sm-m{stroke:#fff;stroke-width:1.5;fill:var(--storm-cool)}
.sm-m.hot{fill:var(--storm-hot)}
.sm-m.wind{fill:var(--storm-wind)}
.sm-m.plain{fill:#fff;stroke:var(--ink3);stroke-width:2}
.sm-fbl{fill:var(--blue);stroke:#fff;stroke-width:2}
.sm-fbltx,.sm-n{font-family:'Libre Franklin','LF Fallback','LF Fallback Roboto',sans-serif;font-size:18px;font-weight:800;fill:var(--ink);paint-order:stroke;stroke:#fff;stroke-width:4;stroke-linejoin:round}
.sd-legend{list-style:none;display:flex;flex-wrap:wrap;gap:4px 16px;margin:8px 0 0;padding:0;font-size:13px;font-weight:700}
.sd-legend li{display:inline-flex;align-items:center;gap:5px}
.sd-legend svg{flex:none}
.sd-legend .sd-lnote{font-weight:600;color:var(--ink2)}
/* the reports (Storm Day 11 to 15, 23) */
.sd-towns{list-style:none;display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0;padding:0}
.sd-towns li{padding:2px 9px;font-size:13px;background:#fff;border:1px solid var(--rule)}
.sd-ctlab{align-self:center;padding:0 10px;font-size:14px;font-weight:800}
.sd-table .sd-n{text-align:right;font-weight:900;font-variant-numeric:tabular-nums}
.sd-rem{margin-top:3px}
.sd-rem summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--blue)}
/* the warnings (Storm Day 18, 19, 22) */
.sd-lead{margin:10px 0;padding:10px 14px;font-size:16px;line-height:1.45;background:var(--sidebar-bg);border:1px solid var(--sidebar-rule)}
.sd-wnote{margin:8px 0 0;max-width:72ch}
.sd-warnlist{list-style:none;margin:10px 0 0;padding:0}
.sd-warn{margin:0 0 8px;background:#fff;border:1px solid var(--rule);border-left:6px solid var(--wc,var(--storm-cool))}
.sd-warn.to{--wc:var(--storm-hot)}
.sd-warn.sv{--wc:var(--storm-sv)}
.sd-warn.ff{--wc:var(--storm-ff)}
.sd-warn summary{cursor:pointer;padding:9px 12px;font-size:15px;line-height:1.4}
.sd-wt{font-weight:600}
.sd-fbl{display:inline-block;margin-left:4px;padding:0 7px;font-size:13px;font-weight:800;border:1px solid var(--ink3);color:var(--ink2)}
.sd-fbl.yes{border-color:var(--ink);color:var(--ink)}
.sd-warn dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:5px 14px;margin:0;padding:2px 14px 12px 18px;font-size:14px}
.sd-warn dl div{display:contents}
.sd-warn dt{font-weight:800}
.sd-warn dd{margin:0}
@media (max-width:640px){
  .sd-chart{--labw:minmax(0,1fr)}
  .tl-row{grid-template-columns:minmax(0,1fr);gap:3px}
  .tl-axis{margin-left:0}
  .air-row{grid-template-columns:minmax(0,1fr);gap:3px}
  .sd-table td.sd-n{grid-row:1 / span 5;padding-right:8px}
  .sd-warn dl{grid-template-columns:minmax(0,1fr);gap:0}
  .sd-warn dd{margin-bottom:6px}
}
.sd-share{margin:10px 0 0}
