:root{--bg:#f6f4ef;--paper:#fcfcfb;--ink:#14213d;--ink2:#4a5468;--mute:#6f7787;--rule:#dcd8cf;--accent:#b8862b;--s1:#2a78d6;--s2:#eb6834;--gain:#2a78d6;--loss:#e34948;--chip:#ece8de;--focus:#2a78d6;--ok:#2e7d32;--warn:#a25a00;--hdr:60px}
*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--ink);font:14px/1.5 Inter,system-ui,sans-serif;min-height:100vh;display:flex;flex-direction:column}
a{color:var(--ink)}button,select,input,textarea{font:inherit;color:var(--ink)}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
/* header */
.hdr{position:sticky;top:0;z-index:20;height:var(--hdr);display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 20px;background:var(--paper);border-bottom:1px solid var(--rule)}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;min-width:0}.mark{flex:none;display:flex}
.wordmark{font:700 13px/1.2 Inter;letter-spacing:.11em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wordmark small{display:block;font-weight:500;letter-spacing:0;color:var(--mute);font-size:11.5px;margin-top:2px}
.hdr-r{display:flex;align-items:center;gap:8px;flex:none}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--rule);background:var(--paper);border-radius:6px;padding:7px 13px;cursor:pointer;text-decoration:none;font-size:13.5px;line-height:1.2}
.btn:hover{background:#f1eee6}.btn.pri{background:var(--ink);color:#fff;border-color:var(--ink)}.btn.pri:hover{background:#22325a}
.btn.danger{border-color:var(--loss);color:var(--loss)}.btn.sm{padding:4px 9px;font-size:12.5px}.btn[disabled]{opacity:.55;cursor:default}
.icon-btn{width:38px;height:38px;border-radius:50%;border:1px solid var(--rule);background:var(--paper);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.icon-btn:hover,.icon-btn.on{background:#f1eee6;border-color:var(--ink2)}
.banner-note{background:#faf6ea;border-bottom:1px solid var(--rule);padding:7px 20px;font-size:13px}
/* layout */
.app{flex:1;display:grid;grid-template-columns:248px 1fr;align-items:start;background:linear-gradient(90deg,var(--paper) 0 247px,var(--rule) 247px 248px,transparent 248px)}
aside{background:var(--paper);border-right:1px solid var(--rule);position:sticky;top:var(--hdr);height:calc(100vh - var(--hdr));overflow:auto;padding-bottom:20px}
.menu{display:none;margin:10px 16px 0;border:1px solid var(--rule);background:#fff;border-radius:6px;padding:6px 10px;cursor:pointer}
.cty{padding:14px 20px;border-bottom:1px solid var(--rule)}.cty label{display:block;font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);margin-bottom:4px}
.cty select{width:100%;border:1px solid var(--rule);background:#fff;border-radius:6px;padding:6px 8px}
.sec{padding:14px 20px 4px;font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mute)}
.nav a{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 20px;color:var(--ink2);text-decoration:none;font-size:13.5px;border-left:3px solid transparent}
.nav a:hover{background:#f1eee6}.nav a.on{color:var(--ink);font-weight:600;border-left-color:var(--accent);background:#f4f0e6}
.tag{font-size:10px;color:var(--mute);border:1px solid var(--rule);border-radius:10px;padding:0 6px;white-space:nowrap}.tag.soon{border-style:dashed}.tag.ok{color:var(--ok);border-color:var(--ok)}
main{padding:26px 36px 50px;max-width:1160px;width:100%;min-width:0}
main:focus{outline:none}
.loading,.empty{color:var(--mute);padding:20px 0}
.top{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;border-bottom:2px solid var(--ink);padding-bottom:12px;flex-wrap:wrap}
h1{font:700 30px/1.15 "Source Serif 4",Georgia,serif;margin:0}.sub{color:var(--ink2);margin-top:4px}
h2{font:600 17px "Source Serif 4",serif;margin:0 0 2px}h3{font:600 14px Inter;margin:14px 0 6px}
.ctl{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.ctl select,.ctl input{border:1px solid var(--rule);background:var(--paper);border-radius:6px;padding:6px 10px}
.q{font:italic 16px "Source Serif 4",serif;color:var(--ink2);margin:16px 0 18px}
.tiles{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--rule);background:var(--paper)}
.tile{padding:14px 16px;border-right:1px solid var(--rule);min-width:0}.tile:last-child{border-right:0}
.tile .k{font-size:11px;color:var(--mute);text-transform:uppercase;letter-spacing:.06em}.tile .v{font:600 26px/1.2 "Source Serif 4",serif;margin:4px 0;font-variant-numeric:tabular-nums}.tile .d{font-size:12.5px;color:var(--ink2)}
.grid{display:grid;grid-template-columns:3fr 2fr;gap:22px;margin-top:22px}.grid.one{grid-template-columns:1fr}.grid.half{grid-template-columns:1fr 1fr}
.panel{background:var(--paper);border:1px solid var(--rule);padding:16px 18px;min-width:0}
.panel .note,.note{font-size:12.5px;color:var(--mute);margin-bottom:8px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;margin-top:18px}
.card{display:block;background:var(--paper);border:1px solid var(--rule);padding:14px 16px;text-decoration:none;color:var(--ink);min-height:96px}
.card:hover{border-color:var(--ink2)}.card b{display:block;font:600 15px "Source Serif 4",serif;margin-bottom:4px}.card span{font-size:12.5px;color:var(--ink2)}
.card .tag{float:right;margin-left:6px}
table{width:100%;border-collapse:collapse;font-size:13px}th{text-align:left;font-weight:600;color:var(--mute);font-size:11px;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--ink);padding:6px 4px}
td{padding:7px 4px;border-bottom:1px solid var(--rule);vertical-align:top}td.n,th.n{text-align:right;font-variant-numeric:tabular-nums}
.scroll{overflow-x:auto}
svg .grid{stroke:var(--rule)}svg .ax{fill:var(--mute);font-size:11px}svg .ln{fill:none;stroke-width:2}svg .ln.s1{stroke:var(--s1)}svg .ln.s2{stroke:var(--s2)}svg .dot.s1{fill:var(--s1)}svg .dot.s2{fill:var(--s2)}svg .lbl{font-size:11.5px;fill:var(--ink2)}svg .xh{stroke:var(--mute);stroke-dasharray:3 3}svg .zero{stroke:var(--mute)}svg .gain{fill:var(--gain)}svg .loss{fill:var(--loss)}svg .val{font-size:11.5px;fill:var(--ink2);font-variant-numeric:tabular-nums}svg .val.in{fill:#fff;font-weight:600}
svg .band{fill:var(--s1);fill-opacity:.28}svg .band:hover{fill-opacity:.6}svg .node{fill:var(--ink)}
.chart{position:relative}.tip{position:absolute;background:var(--ink);color:#fff;font-size:12px;padding:6px 9px;border-radius:4px;pointer-events:none;white-space:nowrap;z-index:5}
.read{border-left:3px solid var(--accent);padding:6px 12px;background:#faf6ea;margin-top:10px;font-size:13.5px}
.bar{display:inline-block;width:120px;height:8px;background:var(--chip);border-radius:4px;vertical-align:middle}.bar i{display:block;height:100%;background:var(--s1);border-radius:4px}.bar i.r{background:var(--loss)}.bar i.d{background:var(--gain)}.bar i.o{background:var(--s2)}
.pill{font-size:11px;border-radius:10px;padding:1px 8px;border:1px solid var(--rule);color:var(--ink2);white-space:nowrap}.pill.live,.pill.ok{border-color:var(--ok);color:var(--ok)}.pill.planned{border-style:dashed}.pill.warn{border-color:var(--warn);color:var(--warn)}
.pill.approved,.pill.awarded{border-color:var(--accent);color:#7a5a17}.pill.obligated{border-color:var(--s1);color:var(--s1)}.pill.paid,.pill.completed{border-color:var(--ok);color:var(--ok)}
.lock{max-width:660px;background:var(--paper);border:1px solid var(--rule);padding:22px 24px;margin-top:20px}.lock h2{font:600 20px "Source Serif 4",serif;margin:0 0 6px}
.search{display:flex;gap:8px;margin:14px 0;flex-wrap:wrap}.search input,.search select{flex:1;min-width:160px;border:1px solid var(--rule);border-radius:6px;padding:8px 10px;background:#fff}.search select{flex:0 1 auto}
.legend{display:flex;gap:16px;font-size:12px;color:var(--ink2);margin:2px 0 6px}.legend i{display:inline-block;width:14px;height:3px;border-radius:2px;vertical-align:middle;margin-right:6px}
/* citations */
sup.ref{font-size:10px;line-height:0;margin-left:2px}sup.ref a{color:var(--accent);text-decoration:none;font-weight:600;padding:0 1px}sup.ref a:hover{text-decoration:underline}
.flash{animation:flash 1.6s ease-out}@keyframes flash{0%{background:#f5e3b8}100%{background:transparent}}
/* forms */
.form{max-width:440px;background:var(--paper);border:1px solid var(--rule);padding:22px 24px;margin-top:20px}
.form label{display:block;font-size:12.5px;font-weight:600;margin:12px 0 4px}.form input,.form select,.form textarea{width:100%;border:1px solid var(--rule);border-radius:6px;padding:8px 10px;background:#fff}
.form .row{display:flex;gap:10px;align-items:center;margin-top:16px;flex-wrap:wrap}.form .hint{font-size:12px;color:var(--mute);margin-top:4px}
.msg{margin-top:12px;padding:8px 10px;border-radius:6px;font-size:13px}.msg.err{background:#fdecec;color:#8a1c1c}.msg.ok{background:#e9f5ea;color:#1d5c20}
.choice{display:flex;gap:10px;margin-top:6px}.choice label{flex:1;margin:0;border:1px solid var(--rule);border-radius:8px;padding:10px 12px;font-weight:500;cursor:pointer;background:#fff}
.choice input{width:auto;margin-right:6px}.choice label:has(input:checked){border-color:var(--ink);background:#f4f0e6}
/* settings */
.settings{display:grid;grid-template-columns:210px 1fr;gap:22px;margin-top:20px}
.snav a{display:block;padding:7px 12px;text-decoration:none;color:var(--ink2);border-left:3px solid transparent;font-size:13.5px}.snav a.on{border-left-color:var(--accent);color:var(--ink);font-weight:600;background:#f4f0e6}
.kv{display:grid;grid-template-columns:170px 1fr;gap:6px 14px;font-size:13.5px}.kv div:nth-child(odd){color:var(--mute)}
code.secret{display:block;padding:10px;background:#14213d;color:#fff;border-radius:6px;word-break:break-all;margin:8px 0}
/* map */
#map{height:560px;border:1px solid var(--rule);background:#e8e6df}
.leaflet-container{font:13px Inter,system-ui,sans-serif}
/* hero (signed out home) */
.hero{background:var(--paper);border:1px solid var(--rule);padding:26px 28px;margin-top:4px}
.hero h1{font-size:34px}.hero p{font-size:15.5px;color:var(--ink2);max-width:720px}
/* footer */
.ftr{display:grid;grid-template-columns:minmax(220px,300px) 1fr;gap:30px;padding:24px 36px 30px;border-top:1px solid var(--rule);background:var(--paper);font-size:12.5px;color:var(--ink2)}
.ftr a{color:var(--ink2)}.ftr-biz div{margin-bottom:4px}.ftr-links{margin-top:6px}.ftr-note{margin-top:10px;color:var(--mute);font-size:12px}
.ftr-src h4{margin:0 0 6px;font:600 12px Inter;text-transform:uppercase;letter-spacing:.08em;color:var(--mute)}
.ftr-src ol{margin:0;padding-left:22px}.ftr-src li{margin:0 0 6px;scroll-margin-top:80px}.ftr-src li .src-links{color:var(--mute)}.ftr-src li .src-links a{color:var(--ink2)}
.ftr-src code{font-size:11px}
.share-page .app{grid-template-columns:1fr;background:none}.share-page main{max-width:980px;margin:0 auto}
@media print{.hdr,aside,.ctl,.noprint,.menu,.banner-note{display:none!important}.app{display:block}main{padding:0;max-width:none}.panel,.tiles{break-inside:avoid}body{background:#fff}.ftr{display:block;border:0;padding:12px 0}.ftr-src{margin-top:10px}}
@media(max-width:900px){.app{grid-template-columns:1fr;background:none}aside{position:static;height:auto;padding-bottom:0}.menu{display:block}aside:not(.open) #nav{display:none}
 .tiles{grid-template-columns:1fr 1fr}.tile:nth-child(2){border-right:0}.grid,.grid.half,.settings{grid-template-columns:1fr}main{padding:18px 16px}.ftr{grid-template-columns:1fr;padding:20px 16px}
 .wordmark small{display:none}.hdr{padding:0 12px}.kv{grid-template-columns:1fr}#map{height:420px}}
@media(max-width:480px){.wordmark{font-size:11px;letter-spacing:.06em}.btn{padding:6px 10px}}
