/* Dystopian Florida - single site stylesheet.
   Consolidates the approved visual prototype (shared.css + the per-page inline
   <style> blocks from florida.html/index.html/sumter.html/act.html).
   No build step, no preprocessor - edit this file directly. */

/* ---- Self-hosted fonts (replaces fonts.googleapis.com) ----
   Files live in static/fonts/. Only the Latin subset was fetched - this site
   ships American English copy only, so no cyrillic/greek/vietnamese glyphs
   are needed. */
@font-face{font-family:'Archivo Black';font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/archivo-black-400.woff2") format("woff2")}
@font-face{font-family:'Oswald';font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/oswald-400.woff2") format("woff2")}
@font-face{font-family:'Oswald';font-style:normal;font-weight:500;font-display:swap;
  src:url("fonts/oswald-500.woff2") format("woff2")}
@font-face{font-family:'Oswald';font-style:normal;font-weight:700;font-display:swap;
  src:url("fonts/oswald-700.woff2") format("woff2")}
@font-face{font-family:'Zilla Slab';font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/zilla-slab-400.woff2") format("woff2")}
@font-face{font-family:'Zilla Slab';font-style:normal;font-weight:700;font-display:swap;
  src:url("fonts/zilla-slab-700.woff2") format("woff2")}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/jetbrains-mono-400.woff2") format("woff2")}

/* ---- Tokens ---- */
:root{--red:#C1272D;--bone:#F2E8D5;--ink:#1A1512;--manila:#D9C7A3;--dead:#3A322C;--green:#2E5D3A;
--display:'Archivo Black',Impact,sans-serif;
--cond:'Oswald','Arial Narrow',sans-serif;
--body:'Zilla Slab',Georgia,serif;
--mono:'JetBrains Mono','Courier New',monospace}

/* ---- Reset + base ---- */
*{box-sizing:border-box}html,body{margin:0}
body{background:var(--bone);color:var(--ink);font-family:var(--body);font-size:19px;line-height:1.65;overflow-x:hidden}

/* SVG grain filter overlay - present on every page (some prototype drafts of
   florida.html omitted it; restored here so the whole site is consistent). */
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:9999;opacity:.5;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='.42'/%3E%3C/svg%3E");mix-blend-mode:multiply}

.wrap{max-width:1140px;margin:0 auto;padding:0 28px}
/* Wider canvas for the statewide landing page's hero/stat/section content. */
.wrap.wide{max-width:1180px}

/* ---- Masthead ---- */
.masthead{background:var(--ink);color:var(--bone);border-bottom:7px solid var(--red)}
.masthead .wrap{display:flex;justify-content:space-between;align-items:center;padding:14px 28px;flex-wrap:wrap;gap:16px}
.brand{font-family:var(--cond);font-weight:700;letter-spacing:.28em;text-transform:uppercase;font-size:15px}
.brand b{color:var(--red)}
.masthead nav{font-family:var(--cond);letter-spacing:.14em;text-transform:uppercase;font-size:12.5px;display:flex;gap:22px;flex-wrap:wrap}
.masthead nav a{color:var(--manila);text-decoration:none}
.masthead nav a:hover{color:var(--bone)}

/* ---- County sub-page header (.jh = "jump header") ---- */
.jh{background:var(--red);color:var(--bone);border-bottom:9px solid var(--ink);position:relative;overflow:hidden}
.jh.dark-hero{background:var(--dead);color:var(--manila)}
.jh.dark-hero h1{color:var(--bone);text-shadow:3px 3px 0 var(--ink)}
.rays{position:absolute;top:-50%;left:50%;width:200vw;height:200vw;transform:translateX(-50%);
background:repeating-conic-gradient(from 0deg at 50% 50%,rgba(255,255,255,.09) 0deg 5deg,transparent 5deg 12deg)}
.jh .wrap{position:relative;padding:48px 28px 42px}
.crumb{font-family:var(--mono);font-size:11.5px;letter-spacing:.22em;text-transform:uppercase;opacity:.85;margin-bottom:14px}
h1{font-family:var(--display);font-size:clamp(38px,6.6vw,88px);line-height:.88;margin:0 0 16px;text-transform:uppercase;
text-shadow:3px 3px 0 var(--ink)}
.badge{font-family:var(--cond);font-weight:700;letter-spacing:.16em;text-transform:uppercase;font-size:13px;
border:3px solid var(--bone);padding:7px 13px;display:inline-block;background:rgba(0,0,0,.25)}

/* ---- Stat band (county sub-pages: stat items are direct children) ---- */
.stats{display:grid;grid-template-columns:repeat(4,1fr);background:var(--ink);color:var(--bone);border-bottom:9px solid var(--red)}
.stat{text-align:center;padding:26px 10px;border-right:2px dashed rgba(242,232,213,.22)}.stat:last-child{border-right:none}
.stat .n{font-family:var(--display);font-size:clamp(22px,3.4vw,44px);color:var(--red);text-shadow:2px 2px 0 var(--bone)}
.stat .l{font-family:var(--cond);font-size:11px;letter-spacing:.18em;text-transform:uppercase;margin-top:9px;color:var(--manila)}

/* ---- Stat band variant (statewide landing: stat items nested in an inner .wrap) ---- */
.stats .wrap{grid-template-columns:repeat(4,1fr);padding:34px 28px}
.stats .wrap .stat{padding:0}
.stats .wrap .stat .n{font-size:clamp(30px,4.6vw,58px);line-height:1}
.stats .wrap .stat .l{font-size:11.5px;letter-spacing:.24em;margin-top:11px}

section{padding:56px 0;border-bottom:3px solid var(--ink)}
.eyebrow{font-family:var(--mono);font-size:11.5px;letter-spacing:.28em;text-transform:uppercase;color:var(--red);margin-bottom:12px}
h2{font-family:var(--display);text-transform:uppercase;font-size:clamp(25px,3.8vw,44px);line-height:.98;margin:0 0 18px}
h3{font-family:var(--cond);font-weight:700;text-transform:uppercase;letter-spacing:.06em;font-size:20px;margin:26px 0 10px}
.lede{font-size:21px;max-width:64ch;margin-bottom:26px}p{max-width:68ch}

/* ---- Tables (governments / vendors) ---- */
table{border-collapse:collapse;width:100%;font-size:16px;background:var(--bone);border:3px solid var(--ink)}
th{background:var(--ink);color:var(--bone);font-family:var(--cond);text-transform:uppercase;letter-spacing:.12em;font-size:12px;padding:11px;text-align:left}
td{padding:11px;border-top:2px solid var(--manila);vertical-align:top}
tr:nth-child(even) td{background:rgba(217,199,163,.28)}

/* ---- Timeline ---- */
.tl{border-left:5px solid var(--ink);margin:26px 0;padding-left:0}
.ev{position:relative;padding:0 0 26px 30px;border-left:3px solid var(--red);margin-left:8px}
.ev:last-child{padding-bottom:0}
.ev::before{content:"";position:absolute;left:-9px;top:5px;width:15px;height:15px;background:var(--red);border:3px solid var(--ink)}
.ev .d{font-family:var(--mono);font-size:11.5px;letter-spacing:.10em;color:var(--red);text-transform:uppercase}
.ev .h{font-family:var(--cond);font-weight:700;font-size:19px;text-transform:uppercase;line-height:1.2;margin:3px 0 5px}
.ev p{margin:0;font-size:17px}

/* ---- Evidence cards (used by county_documented + documents.html) ---- */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:20px}
.card{background:var(--bone);border:3px solid var(--ink);box-shadow:6px 6px 0 var(--ink);padding:19px}
.card .t{font-family:var(--cond);font-weight:700;text-transform:uppercase;font-size:16.5px;margin-bottom:8px;line-height:1.2}
.card .d{font-size:15.5px;margin-bottom:12px}
.chip{font-family:var(--mono);font-size:9.5px;background:var(--ink);color:var(--bone);padding:5px 8px;display:inline-block;text-transform:uppercase;letter-spacing:.05em}
.chip.v{background:var(--green)}.chip.w{background:var(--red)}
.stamp{display:inline-block;border:3px solid var(--red);color:var(--red);font-family:var(--cond);font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:5px 11px;font-size:12.5px;transform:rotate(-6deg);margin-top:8px}

/* ---- Exhibit photo (evidence image with mono caption bar) ---- */
.plate-img{position:relative;filter:drop-shadow(9px 9px 0 rgba(26,21,18,.85));max-width:420px;margin:26px 0}
.plate-img img{width:100%;display:block;border:5px solid var(--ink)}
.plate-cap{font-family:var(--mono);font-size:11px;letter-spacing:.10em;margin-top:11px;background:var(--ink);color:var(--manila);padding:7px 10px;text-transform:uppercase}

.callout{background:var(--ink);color:var(--bone);padding:32px;border:5px solid var(--red)}
.callout h3{color:var(--bone);margin-top:0}
.gap{background:var(--manila);border:4px solid var(--ink);padding:24px;margin-top:8px}
.gap ul{margin:0;padding-left:22px}.gap li{margin-bottom:9px;max-width:64ch}

/* ---- Officials / "who to write" cards (county_documented, county_dark, act) ---- */
.who{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px;margin-top:22px}
.off{background:var(--ink);color:var(--bone);border:3px solid var(--red);padding:18px}
.off .r{font-family:var(--mono);font-size:10.5px;color:var(--red);letter-spacing:.16em;text-transform:uppercase}
.off .n{font-family:var(--cond);font-weight:700;font-size:19px;text-transform:uppercase;margin:5px 0 7px;line-height:1.15}
.off .c{font-family:var(--mono);font-size:12px;color:var(--manila);line-height:1.55;word-break:break-word}
.off a{color:var(--bone)}
.elected{display:inline-block;background:var(--red);color:var(--bone);font-family:var(--mono);font-size:9.5px;
padding:3px 7px;letter-spacing:.10em;margin-top:8px;text-transform:uppercase}
.elected.appointed{background:var(--dead)}

.quote{border-left:8px solid var(--red);padding:6px 0 6px 22px;margin:24px 0;max-width:64ch}
.quote p{font-family:var(--cond);font-weight:500;font-size:clamp(19px,2.4vw,27px);line-height:1.28;margin:0 0 9px}
.quote cite{font-family:var(--mono);font-size:12px;font-style:normal;letter-spacing:.08em;text-transform:uppercase;opacity:.8}
.quote cite a{color:var(--red)}

.letter{background:var(--bone);border:3px dashed var(--ink);padding:24px;font-family:var(--mono);font-size:14.5px;line-height:1.7;white-space:pre-wrap;max-width:none}
.btn{display:inline-block;background:var(--red);color:var(--bone);font-family:var(--cond);font-weight:700;letter-spacing:.14em;
text-transform:uppercase;padding:13px 20px;border:3px solid var(--ink);text-decoration:none;margin:10px 10px 0 0;font-size:14px}
.btn.dark{background:var(--ink)}

footer{background:var(--ink);color:var(--manila);padding:42px 0;font-family:var(--mono);font-size:12.5px}
footer .wrap{display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap}footer b{color:var(--bone)}

/* ---- Warning / high-alert callout ---- */
.warn{background:var(--red);color:var(--bone);padding:30px;border:5px solid var(--ink);margin:26px 0}
.warn h3{color:var(--bone);margin-top:0;font-size:clamp(20px,2.8vw,27px);font-family:var(--display);text-transform:uppercase;line-height:1.1}

/* ---- Abuse ledger (documented misuse cases) ---- */
.ledger{border:4px solid var(--ink);background:var(--bone)}
.row{display:grid;grid-template-columns:150px 1fr;gap:0;border-bottom:3px solid var(--ink)}
.row:last-child{border-bottom:none}
.row .w{background:var(--ink);color:var(--red);font-family:var(--display);font-size:15px;padding:18px 14px;text-transform:uppercase;line-height:1.15}
.row .w span{display:block;color:var(--manila);font-family:var(--mono);font-size:10px;margin-top:6px;letter-spacing:.08em}
.row .b{padding:18px 20px}
.row .b b{font-family:var(--cond);text-transform:uppercase;letter-spacing:.03em;font-size:17px;display:block;margin-bottom:5px}
.row .b p{margin:0;font-size:16.5px;max-width:none}

/* ---- Dark ink callout ("here" = case-in-point box) ---- */
.here{background:var(--ink);color:var(--bone);border:5px solid var(--red);padding:28px;margin:26px 0}
.here .tag{font-family:var(--mono);font-size:11px;color:var(--red);letter-spacing:.24em;text-transform:uppercase}
.here h3{color:var(--bone);font-family:var(--display);font-size:clamp(22px,3.2vw,34px);margin:10px 0 12px;text-transform:uppercase;line-height:1.05}
.here p{max-width:66ch}

/* ---- Facial-recognition stat boxes ---- */
.face{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;margin:24px 0}
.fbox{border:3px solid var(--ink);background:var(--dead);color:var(--manila);padding:16px;text-align:center}
.fbox .fn{font-family:var(--display);font-size:30px;color:var(--red);text-shadow:2px 2px 0 var(--bone)}
.fbox .fl{font-family:var(--cond);font-size:12px;letter-spacing:.14em;text-transform:uppercase;margin-top:8px}

/* ---- Source citation links ---- */
.src{font-family:var(--mono);font-size:11px;margin-top:9px}
.src a{color:var(--red);text-decoration:none;border-bottom:1px solid var(--red)}
.src a:hover{background:var(--red);color:var(--bone)}
.row .b .src a{color:var(--ink);border-color:var(--ink)}

/* ---- Statewide landing hero (illustration, not the old sunburst treatment) ---- */
.hero.art{padding:0;border-bottom:9px solid var(--ink);background:var(--ink);position:relative}
.hero.art .heroimg{display:block;width:100%;height:auto}
.artcap{position:absolute;left:0;right:0;bottom:0;background:rgba(26,21,18,.86);color:var(--manila);
font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;padding:7px 14px;text-align:center}

/* ---- Big single-stat banner (1/67 counter) ---- */
.big{background:var(--ink);color:var(--bone);text-align:center;padding:54px 28px;border-bottom:9px solid var(--red)}
.big .n{font-family:var(--display);font-size:clamp(64px,13vw,180px);line-height:.9;color:var(--red);text-shadow:4px 4px 0 var(--bone)}
.big .t{font-family:var(--cond);font-size:clamp(16px,2.4vw,28px);letter-spacing:.16em;text-transform:uppercase;margin-top:16px}
.big .s{font-family:var(--mono);font-size:13px;color:var(--manila);margin-top:14px}

/* ---- County lookup grid ---- */
#search{width:100%;padding:18px 20px;font-family:var(--cond);font-size:20px;text-transform:uppercase;letter-spacing:.10em;
border:4px solid var(--ink);background:var(--bone);color:var(--ink);margin-bottom:8px}
.hint{font-family:var(--mono);font-size:12px;color:#6b5f55;margin-bottom:22px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:7px}
.tile{display:block;padding:13px 11px;text-decoration:none;border:2px solid var(--ink);background:var(--dead);color:var(--manila)}
.tile:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--ink)}
.tile .cn{display:block;font-family:var(--cond);font-weight:600;font-size:14.5px;text-transform:uppercase;line-height:1.15}
.tile .cs{display:block;font-family:var(--mono);font-size:9.5px;margin-top:7px;opacity:.72}
.tile.doc{background:var(--red);color:var(--bone)}.tile.doc .cs{opacity:1;font-weight:700}
.legend{font-family:var(--mono);font-size:12px;display:flex;gap:22px;margin:20px 0 26px;flex-wrap:wrap}
.sw{display:inline-block;width:13px;height:13px;border:2px solid var(--ink);vertical-align:-2px;margin-right:7px}

/* ---- Submit-records steps ---- */
.steps{counter-reset:s;list-style:none;padding:0}
.steps li{counter-increment:s;position:relative;padding-left:52px;margin-bottom:18px;max-width:60ch}
.steps li::before{content:counter(s);position:absolute;left:0;top:-2px;font-family:var(--display);font-size:26px;color:var(--red)}
.mail{display:inline-block;font-family:var(--mono);font-size:clamp(13px,1.9vw,18px);background:var(--red);color:var(--bone);
padding:14px 18px;border:3px solid var(--bone);margin-top:8px;word-break:break-all}

/* ---- Demand-action cards ---- */
.demand{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px;margin-top:24px}
.dcard{background:var(--ink);color:var(--bone);border:4px solid var(--red);padding:22px;display:flex;flex-direction:column}
.dcard .r{font-family:var(--mono);font-size:10.5px;color:var(--red);letter-spacing:.18em;text-transform:uppercase}
.dcard .n{font-family:var(--display);font-size:22px;text-transform:uppercase;margin:8px 0 6px;line-height:1.08}
.dcard .c{font-family:var(--mono);font-size:12px;color:var(--manila);line-height:1.6;word-break:break-word;flex:1}
.dcard a.go{display:block;margin-top:14px;background:var(--red);color:var(--bone);text-align:center;
font-family:var(--cond);font-weight:700;letter-spacing:.12em;text-transform:uppercase;padding:11px;text-decoration:none;font-size:13px;border:2px solid var(--bone)}
.letterbox{background:var(--bone);border:4px dashed var(--ink);padding:22px;font-family:var(--mono);font-size:14px;line-height:1.65;white-space:pre-wrap;margin-top:22px}

/* ---- Petition ---- */
.pet{background:var(--ink);color:var(--bone);border:6px solid var(--red);padding:34px;margin-top:26px}
.pet h3{font-family:var(--display);font-size:clamp(24px,3.4vw,38px);text-transform:uppercase;margin:0 0 16px;line-height:1.05;color:var(--bone)}
.pet .ask{border-left:6px solid var(--red);padding-left:18px;margin:20px 0}
.pet .ask li{margin-bottom:10px;max-width:62ch}
.sign{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:20px}
.sign input{padding:14px;font-family:var(--mono);font-size:14px;border:3px solid var(--bone);background:var(--dead);color:var(--bone)}
.sign input::placeholder{color:#9a8c7e}
.signbtn{grid-column:1 / -1;background:var(--red);color:var(--bone);border:3px solid var(--bone);
font-family:var(--display);font-size:18px;text-transform:uppercase;padding:16px;cursor:pointer;letter-spacing:.06em}
.counter{font-family:var(--mono);font-size:12px;color:var(--manila);margin-top:12px;text-align:center}

/* ---- Data-broker "network" feed cards ---- */
.feeds{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px;margin:26px 0}
.feed{background:var(--ink);color:var(--bone);border:4px solid var(--red);padding:20px}
.feed .k{font-family:var(--mono);font-size:10.5px;color:var(--red);letter-spacing:.18em;text-transform:uppercase}
.feed .h{font-family:var(--display);font-size:19px;text-transform:uppercase;margin:8px 0;line-height:1.1}
.feed p{font-size:15.5px;margin:0;max-width:none}

/* ---- Country comparison blocks ---- */
.ctry{border:4px solid var(--ink);background:var(--bone);margin-bottom:16px}
.ctry .top{background:var(--ink);color:var(--bone);padding:14px 18px;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;align-items:baseline}
.ctry .top b{font-family:var(--display);font-size:21px;text-transform:uppercase}
.ctry .top span{font-family:var(--mono);font-size:11.5px;color:var(--red);letter-spacing:.10em}
.ctry .bd{padding:18px}.ctry .bd p{max-width:none;margin:0 0 10px}

/* ---- Responsive ----
   Verified at 375px: county grid holds 2 columns, stat bands collapse to 2,
   ledger rows and the petition form stack to a single column. */
@media(max-width:760px){
  .stats{grid-template-columns:repeat(2,1fr)}
  .stats .wrap{grid-template-columns:repeat(2,1fr)}
  .stat{border-right:none}
  .sign{grid-template-columns:1fr}
  .row{grid-template-columns:1fr}
  /* Vendor/agency tables have enough columns that their min-content width
     pushes past a phone viewport and scrolls the whole page sideways.
     Fixed layout makes the table respect its container and wrap instead. */
  table{table-layout:fixed;font-size:14px}
  table th,table td{word-break:break-word;padding-left:6px;padding-right:6px}
}
@media(max-width:420px){
  .grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}
  h1{font-size:clamp(30px,10vw,58px)}
}

/* ---- Tile status colors (county grid on index.html) ----
   status_class from build.py: doc=documented (red), vendor=vendor-confirmed
   (manila/amber), unk=dark (dead grey, the base .tile style already). */
.tile.vendor{background:var(--manila);color:var(--ink)}
.tile.vendor .cs{opacity:1;font-weight:700}
.sw.doc{background:var(--red)}
.sw.vendor{background:var(--manila)}
.sw.unk{background:var(--dead)}

/* ---- Report cards (index.html raw_document_list, built.py's
   _DOCUMENT_CARD_TPL: <div class="report-card"><a>title</a> - date</div>) ---- */
.report-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}
.report-card{background:var(--bone);border:3px solid var(--ink);box-shadow:6px 6px 0 var(--ink);padding:18px;font-family:var(--cond);font-size:15px;text-transform:uppercase;letter-spacing:.02em}
.report-card a{color:var(--ink)}

/* ---- Document page hash/provenance chips ---- */
.chips{display:flex;gap:8px;flex-wrap:wrap;margin:20px 0}

/* ---- County pages now use per-status templates (_county_documented,
   _county_vendor_confirmed, _county_dark), selected by build.py from
   county["status"]. templates/county.html only fires as a last-resort
   fallback for a status value that matches none of the three - keep it
   generic and safe against empty raw_*_rows rather than deleting it,
   since build_site() reads it unconditionally. ---- */
.dyn:empty{display:none}
.evd{display:none}
.evd:has(.dyn:not(:empty)){display:block}

/* ---- Vendor-confirmed hero: amber, distinct from documented (red) and
   dark (grey) so the three statuses read differently at a glance. ---- */
.jh.vendor-hero{background:var(--manila);color:var(--ink)}
.jh.vendor-hero h1{color:var(--ink);text-shadow:3px 3px 0 var(--bone)}
