/* Extra rules for the generated pages under /toll-roads/ — the state hub and
   the per-state pages. Loaded only by those pages, never by the homepage.
 *
 * It is a second stylesheet rather than more of styles.css because the
 * homepage would otherwise pay for rules it never uses, and first-view weight
 * is budgeted in CLAUDE.md. The state pages themselves load no app.js, no
 * MapLibre and no dataset: everything on them is in the HTML, which is the
 * entire point of their existing.
 *
 * Everything these pages can borrow, they borrow — .wrap, .masthead, .block,
 * .block-head, .road-grid, .road, .flag, .status-badge, .foot. What is below
 * is only what has no equivalent on the homepage. */

/* Breadcrumbs. Real links, because they are the crawl path back up as well as
   the reader's way back. */
.crumbs{font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--ink-soft);
  margin:0 0 28px;letter-spacing:.04em}
.crumbs a{color:var(--signal);text-decoration:none}
.crumbs a:hover{text-decoration:underline}
.crumbs span{padding:0 8px;opacity:.5}

.state-hero{padding:56px 0 0}
.state-hero h1{font-family:"Fraunces",serif;font-weight:900;
  font-size:clamp(32px,5.5vw,60px);line-height:1.02;letter-spacing:-.02em;margin:0 0 18px}
.state-lede{max-width:660px;font-size:clamp(16px,2vw,19px);color:var(--ink-soft);margin:0 0 32px}

/* The answer to the question people actually arrive with: which tag works
   here, and who sells it. Prose measure rather than the full 1120px content
   width — at full width a two-line answer reads as a mostly empty panel. */
.tags{background:var(--card);border:1px solid var(--rule);border-radius:6px;
  padding:24px;margin:0 0 40px;max-width:660px;box-shadow:var(--shadow)}
.tags h2{font-family:"Fraunces",serif;font-size:20px;font-weight:600;margin:0 0 12px}
.tags p{margin:0 0 10px;font-size:15px}
.tags p:last-child{margin-bottom:0}
.tags ul{margin:0;padding-left:20px;font-size:15px}
.tags li{margin-bottom:6px}
.tags a{color:var(--signal);font-weight:600}

.state-stats{display:flex;flex-wrap:wrap;gap:28px;margin:0 0 40px}
.state-stats div{display:flex;flex-direction:column}
.state-stats b{font-family:"Fraunces",serif;font-size:30px;font-weight:900;line-height:1}
.state-stats span{font-family:"IBM Plex Mono",monospace;font-size:11px;
  text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);margin-top:6px}

/* Operators. A card each rather than the homepage's sortable table: there are
   rarely more than a handful per state, and sorting needs script. */
.op-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:18px}
.op{background:var(--card);border:1px solid var(--rule);border-radius:6px;padding:22px;
  box-shadow:var(--shadow)}
.op h3{font-family:"Fraunces",serif;font-size:19px;font-weight:600;margin:0 0 8px;line-height:1.15}
.op-kind{font-family:"IBM Plex Mono",monospace;font-size:11px;text-transform:uppercase;
  letter-spacing:.08em;color:var(--ink-soft);margin:0 0 12px}
.op p{font-size:14px;color:var(--ink-soft);margin:0 0 10px}
.op p:last-child{margin-bottom:0}
.op a{color:var(--signal);font-weight:600}

/* The other states. On every page, so any one of them is one hop from all the
   others for a reader and for a crawler. */
.state-nav{display:flex;flex-wrap:wrap;gap:8px 10px;margin:0}
.state-nav a{font-family:"IBM Plex Mono",monospace;font-size:13px;background:var(--card);
  border:1px solid var(--rule);border-radius:4px;padding:6px 11px;text-decoration:none;
  color:var(--ink);white-space:nowrap}
.state-nav a:hover{border-color:var(--signal);color:var(--signal)}
.state-nav a b{font-weight:500;color:var(--ink-soft);margin-left:5px}

/* The hub's index of states. Wider cells than .state-nav because this is the
   page's content rather than its footer. */
.hub-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr));gap:2px;
  background:var(--rule);border:1px solid var(--rule);border-radius:6px;overflow:hidden}
.hub-grid a{background:var(--paper);padding:18px 20px;text-decoration:none;display:block}
.hub-grid a:hover{background:var(--card)}
.hub-grid strong{font-family:"Fraunces",serif;font-size:18px;font-weight:600;display:block}
.hub-grid span{font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--ink-soft);
  display:block;margin-top:5px}

/* ---- Facility pages ---------------------------------------------------- */

.state-hero .status-badge{margin:0 0 16px}
.fac-note{max-width:660px;font-size:16px;color:var(--ink);margin:0 0 28px;
  padding-left:14px;border-left:3px solid var(--line-yellow)}

/* The facts block. A dl because that is what it is — a list of labelled
   values — and each pair is wrapped in a div so the grid can lay out pairs
   rather than dt and dd landing in separate columns. */
.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(220px,100%),1fr));
  gap:20px 28px;margin:0 0 8px;padding:0}
.facts div{margin:0}
.facts dt{font-family:"IBM Plex Mono",monospace;font-size:11px;
  text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);
  margin:0 0 6px}
.facts dd{margin:0;font-size:16px;display:flex;flex-wrap:wrap;gap:6px;
  align-items:center}

/* Acceptance. The affirmative row leads; scope nuance and anything not
   confirmed sit under it, which is the same order the map popup uses. */
.acc{max-width:660px}
.acc-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 12px}
.acc-label{font-family:"IBM Plex Mono",monospace;font-size:11px;
  text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);
  margin-right:4px}
.acc-verified{font-family:"IBM Plex Mono",monospace;font-size:12px;
  color:var(--signal);margin:0 0 12px}
.acc-scope{font-size:14px;color:var(--ink-soft);margin:0 0 10px}
/* Not-confirmed lines are the answer someone came for as often as the
   affirmative ones, so they are not styled as a disclaimer. */
.acc-no{font-size:15px;color:var(--ink);margin:0 0 8px;padding-left:14px;
  border-left:3px solid var(--rule)}
.acc-no strong{font-weight:700}

.party{margin:0 0 4px;font-size:16px}
.party a{color:var(--signal);font-weight:600}
.party-role{font-family:"IBM Plex Mono",monospace;font-size:11px;
  text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);
  margin-left:6px}
.party-note{font-size:14px;color:var(--ink-soft);margin:0 0 14px;max-width:640px}
.op-links{margin:16px 0 0;font-size:14px}
.op-links a{color:var(--signal);font-weight:600}

/* Siblings. Same chip treatment as .state-nav, with the facility type as the
   muted half so a long list stays scannable. */
.sib-nav{display:flex;flex-wrap:wrap;gap:8px 10px;margin:0}
.sib-nav a{font-size:14px;background:var(--paper);border:1px solid var(--rule);
  border-radius:4px;padding:8px 12px;text-decoration:none;color:var(--ink);
  max-width:100%}
.sib-nav a:hover{border-color:var(--signal);color:var(--signal)}
.sib-nav a b{font-family:"IBM Plex Mono",monospace;font-weight:500;font-size:11px;
  color:var(--ink-soft);margin-left:8px;text-transform:uppercase;
  letter-spacing:.06em}
.sib-more{margin:16px 0 0;font-size:14px;color:var(--ink-soft)}
.sib-more a{color:var(--signal);font-weight:600}
