:root{--navy:#F6F8FB;--navy-lift:#FFFFFF;--blue:#2A5FD0;--blue-soft:#2A5FD0;--amber:#A84F0E;--ink:#141922;--muted:#586274;--muted-dim:#667085;--rule:rgba(20,30,50,.12);--good:#0B7A4C;--bad:#B23A2E;--chrome:#07202E;--chrome-line:rgba(255,255,255,.12);--on-chrome:#EAF1F6;--on-chrome-soft:#AFC3CF;--brand-cyan:#59C8F5;}
*{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;}
body{background:var(--navy);color:var(--ink);font-family:'Inter',sans-serif;-webkit-font-smoothing:antialiased;min-height:100vh;display:flex;flex-direction:column;}
.skiplink{position:absolute;left:-9999px;top:0;background:var(--blue);color:#fff;padding:10px 16px;border-radius:0 0 8px 0;font-weight:600;z-index:999;text-decoration:none;}
.skiplink:focus{left:0;}
/* dark navy chrome band (full-width) so the official logo (light-cyan art) stays crisp; body stays light */
.topbar{width:100%;background:var(--chrome);border-bottom:1px solid var(--chrome-line);}
.nav{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;max-width:1160px;margin:0 auto;width:100%;}
.brand{display:inline-flex;align-items:center;border-radius:6px;}
.brand img{height:46px;width:auto;display:block;}
.navlinks{display:flex;gap:22px;font-size:14px;flex-wrap:wrap;}
.navlinks a{color:var(--on-chrome-soft);text-decoration:none;transition:color .16s;position:relative;padding:4px 0;}
/* F6: 24px+ tap targets on touch devices (WCAG 2.2 AA target size) — vertical padding only */
@media(pointer:coarse){.navlinks a{padding:9px 0;display:inline-block;}}
.navlinks a:hover{color:#fff;}
.navlinks a.active{color:#fff;font-weight:500;}
.navlinks a.active::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:2px;background:var(--brand-cyan);border-radius:2px;}
.navlinks a:focus-visible,.brand:focus-visible,.foot a:focus-visible,a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:3px;}
.page{flex:1;width:100%;max-width:1160px;margin:0 auto;padding:34px 24px 72px;}
.page.narrow{max-width:820px;}
.crumbs{font-size:12px;color:var(--muted-dim);margin-bottom:18px;}
.crumbs a{color:var(--muted);text-decoration:none;}
.crumbs a:hover{color:var(--ink);}
.crumbs .sep{margin:0 6px;}
.eyebrow{font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--blue-soft);margin-bottom:14px;opacity:.9;}
h1{font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:clamp(26px,4.4vw,40px);line-height:1.12;color:var(--ink);letter-spacing:-.015em;margin-bottom:12px;}
.lede{font-size:16px;line-height:1.7;color:var(--muted);max-width:64ch;margin-bottom:18px;}
a{color:var(--blue-soft);}
.gAp,.gA{color:#0A1015;background:var(--good);}
.gBp,.gB{color:#fff;background:var(--blue-soft);}
.gCp,.gC{color:#0A1015;background:var(--amber);}
.gDp,.gD{color:#fff;background:#B4683F;}
.gF{color:#fff;background:var(--bad);}
.gna{color:var(--muted);background:rgba(255,255,255,.08);}
.chip{display:inline-block;font-family:'JetBrains Mono',monospace;font-weight:600;font-size:12px;padding:3px 9px;border-radius:999px;}
.tierchip{display:inline-block;font-size:11px;font-family:'JetBrains Mono',monospace;letter-spacing:.06em;text-transform:uppercase;padding:3px 9px;border-radius:999px;border:1px solid var(--rule);color:var(--muted);}
.tier-low{border-color:rgba(255,138,61,.5);color:var(--amber);}
.subnav{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 20px;}
.pill{display:inline-block;font-size:12.5px;padding:7px 13px;border:1px solid var(--rule);border-radius:999px;color:var(--muted);text-decoration:none;background:rgba(255,255,255,.02);transition:border-color .16s,color .16s;}
a.pill:hover{color:var(--ink);border-color:rgba(0,160,234,.55);}
.pill.on{color:#fff;background:var(--blue-soft);border-color:var(--blue-soft);font-weight:600;}
/* states-page multi-select filter dropdown */
/* z-index:30 lifts the whole filter (and its absolute dropdown) above the results table — every
   .page>* is a stacking context from the rise animation, so without this the later table paints on top
   and swallows clicks on the dropdown's lower rows. Same pattern as .searchwrap/.cmppicks. */
.stfilter{position:relative;z-index:30;display:inline-flex;align-items:center;gap:10px;margin:0 0 14px;flex-wrap:wrap;}
.stf-btn{background:var(--navy-lift);border:1px solid var(--rule);color:var(--ink);border-radius:10px;padding:9px 14px;font:14px 'Inter',sans-serif;cursor:pointer;min-height:40px;}
.stf-btn:hover{border-color:var(--blue);}
.stf-caret{color:var(--muted-dim);}
.stf-count{font-size:12.5px;color:var(--muted);}
.stf-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:50;background:var(--navy-lift);border:1px solid var(--rule);border-radius:12px;box-shadow:0 18px 44px rgba(0,0,0,.18);width:min(300px,90vw);max-height:60vh;display:flex;flex-direction:column;overflow:hidden;}
.stf-menu[hidden]{display:none;}
.stf-actions{display:flex;gap:8px;padding:10px;border-bottom:1px solid var(--rule);}
.stf-actions button{flex:1;background:var(--navy);border:1px solid var(--rule);color:var(--ink);border-radius:8px;padding:9px;font:13px 'Inter',sans-serif;cursor:pointer;min-height:40px;}
.stf-actions button:hover{border-color:var(--blue);color:var(--blue);}
.stf-list{overflow-y:auto;padding:6px;}
.stf-opt{display:flex;align-items:center;gap:9px;padding:9px 10px;font-size:14px;color:var(--ink);cursor:pointer;border-radius:8px;min-height:40px;}
.stf-opt:hover{background:rgba(42,95,208,.06);}
.stf-opt input{width:18px;height:18px;accent-color:var(--blue);flex:none;}
/* index - control groups (visually distinct: subnav pills / interactive filters) */
.ctl-label{font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted-dim);align-self:center;}
.viewbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 8px;}
.views{display:inline-flex;gap:4px;background:var(--navy-lift);border:1px solid var(--rule);border-radius:11px;padding:4px;flex-wrap:wrap;}
.viewbtn{appearance:none;border:none;background:transparent;color:var(--muted);font-family:'Inter',sans-serif;font-size:13px;font-weight:500;padding:8px 13px;border-radius:8px;cursor:pointer;transition:.14s;min-height:40px;}
.viewbtn:hover{color:var(--ink);}
.viewbtn[aria-pressed="true"]{background:var(--blue);color:#001119;font-weight:600;}
.viewnote{font-size:12px;color:var(--muted-dim);margin:0 0 18px;line-height:1.5;max-width:78ch;}
.viewnote b{color:var(--muted);}
#mktbl th{cursor:pointer;user-select:none;white-space:nowrap;}
#mktbl th[data-k="city"]{cursor:pointer;}
#mktbl th[aria-sort]{color:var(--blue-soft);}
#mktbl th .arr{color:var(--blue-soft);font-size:11px;}
/* index */
.searchwrap{position:relative;max-width:560px;margin:6px 0 22px;z-index:30;}
.searchwrap input{width:100%;padding:14px 18px;font-size:16px;font-family:'Inter',sans-serif;background:var(--navy-lift);border:1px solid var(--rule);border-radius:12px;color:var(--ink);}
.searchwrap input::placeholder{color:var(--muted-dim);}
/* autocomplete dropdown: opaque surface token + high z-index. The page-child rise
   animation makes every .page>* a stacking context, so the dropdown's z-index is
   scoped to its wrapper - the wrappers (.searchwrap/.cmppicks) are lifted above
   the results table below, and the list itself is opaque so nothing bleeds through. */
.ac{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:100;background:var(--navy-lift);border:1px solid var(--rule);border-radius:12px;overflow:hidden;display:none;max-height:340px;overflow-y:auto;box-shadow:0 18px 44px rgba(0,0,0,.5);}
.ac.open{display:block;}
.ac a{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 16px;color:var(--ink);text-decoration:none;font-size:14.5px;border-bottom:1px solid var(--rule);background:var(--navy-lift);cursor:pointer;}
.ac a:last-child{border-bottom:none;}
.ac a:hover,.ac a.sel{background:rgba(0,160,234,.12);}
.ac .m{color:var(--muted-dim);font-size:12px;font-family:'JetBrains Mono',monospace;}
.filters{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px;align-items:center;}
.filters label{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px;}
.filters select,.filters input{background:var(--navy-lift);border:1px solid var(--rule);color:var(--ink);border-radius:8px;padding:7px 10px;font-size:13px;font-family:'Inter',sans-serif;width:auto;}
.filters input[type=number]{width:74px;}
.tblwrap{overflow-x:auto;border:1px solid var(--rule);border-radius:14px;background:rgba(255,255,255,.02);}
/* Z23 measured-context table (Zillow). Context only — never a scored input. */
.mz-tbl{width:100%;border-collapse:collapse}
.mz-tbl th{text-align:left;font-weight:600;padding:6px 10px 6px 12px;border-bottom:1px solid var(--rule);font-size:13.5px}
.mz-tbl td.mz-num{text-align:right;font-variant-numeric:tabular-nums;padding:6px 12px 6px 10px;border-bottom:1px solid var(--rule);font-size:13.5px;font-weight:700}
.measured-zillow h2{margin-top:0}
table.mk{width:100%;border-collapse:collapse;font-size:13.5px;min-width:820px;}
table.mk th{position:sticky;top:0;background:#EDF1F7;text-align:left;font-size:11.5px;font-family:'JetBrains Mono',monospace;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);padding:11px 12px;border-bottom:1px solid var(--rule);cursor:pointer;user-select:none;white-space:nowrap;}
table.mk th:hover{color:var(--ink);}
table.mk th .arr{opacity:.7;}
table.mk td{padding:10px 12px;border-bottom:1px solid var(--rule);color:var(--muted);font-feature-settings:'tnum' 1;white-space:nowrap;}
table.mk tr:last-child td{border-bottom:none;}
table.mk tbody tr:hover{background:rgba(0,160,234,.06);}
table.mk td.city a{color:var(--ink);text-decoration:none;font-weight:600;}
table.mk td.city a:hover{color:var(--blue-soft);}
.morebar{text-align:center;margin:16px 0;}
.morebar button{background:var(--navy-lift);border:1px solid var(--rule);color:var(--ink);padding:11px 22px;border-radius:10px;font-size:14px;cursor:pointer;font-family:'Inter',sans-serif;}
.morebar button:hover{border-color:var(--blue);}
.asof{font-size:12px;color:var(--muted-dim);margin:14px 0 30px;line-height:1.7;}
.dirwrap{margin-top:34px;}
.dirwrap h2{font-family:'Space Grotesk',sans-serif;font-size:20px;color:var(--ink);margin-bottom:10px;}
.dirwrap details{border:1px solid var(--rule);border-radius:10px;margin-bottom:8px;background:rgba(255,255,255,.02);}
.dirwrap summary{cursor:pointer;padding:11px 16px;font-weight:600;color:var(--ink);font-size:14px;list-style:none;display:flex;justify-content:space-between;}
.dirwrap summary::-webkit-details-marker{display:none;}
.dirwrap summary::after{content:"+";color:var(--muted-dim);font-family:'JetBrains Mono',monospace;}
.dirwrap details[open] summary::after{content:"−";}
.dirlist{padding:4px 16px 14px;display:flex;flex-wrap:wrap;gap:6px 14px;}
.dirlist a{font-size:13px;color:var(--muted);text-decoration:none;}
.dirlist a:hover{color:var(--ink);}
/* city page */
.scorecard{display:flex;gap:26px;align-items:center;flex-wrap:wrap;background:rgba(255,255,255,.02);border:1px solid var(--rule);border-radius:16px;padding:22px 26px;margin:8px 0 20px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04), 0 8px 26px rgba(0,0,0,.28);}
.bignum{font-family:'JetBrains Mono',monospace;font-weight:600;font-size:56px;line-height:1;color:var(--ink);font-feature-settings:'tnum' 1;}
.fieldrel{font-size:11.5px;color:var(--muted-dim);font-style:italic;}
.mathnote{font-size:12.5px;color:var(--muted-dim);line-height:1.55;margin:0 0 14px;max-width:74ch;}
.legend{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin:0 0 18px;font-size:12px;color:var(--muted);}
.legend .lgl{font-family:'JetBrains Mono',monospace;letter-spacing:.06em;color:var(--muted-dim);text-transform:uppercase;font-size:11px;margin-right:2px;}
.legend .chip{font-size:11px;}
.legend .lgb{color:var(--muted-dim);margin-right:6px;font-variant-numeric:tabular-nums;}
.bignum .of{font-size:18px;color:var(--muted-dim);}
.scomet{display:flex;flex-direction:column;gap:8px;font-size:13.5px;color:var(--muted);}
.subgrades{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 22px;}
.sg{border:1px solid var(--rule);border-radius:12px;padding:12px 16px;background:rgba(255,255,255,.02);font-size:13px;color:var(--muted);display:flex;align-items:center;gap:10px;}
.sg b{color:var(--ink);font-size:14px;}
.mathwrap{overflow-x:auto;border:1px solid var(--rule);border-radius:14px;background:rgba(255,255,255,.02);margin-bottom:8px;}
table.math{width:100%;border-collapse:collapse;font-size:13px;min-width:720px;}
table.math th{text-align:left;font-size:11px;font-family:'JetBrains Mono',monospace;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--rule);white-space:nowrap;}
table.math td{padding:10px 12px;border-bottom:1px solid var(--rule);color:var(--muted);font-feature-settings:'tnum' 1;vertical-align:top;}
table.math tr:last-child td{border-bottom:none;}
table.math td.f{color:var(--ink);font-weight:600;white-space:nowrap;}
table.math td.src{font-size:11.5px;color:var(--muted-dim);max-width:220px;white-space:normal;}
table.math tfoot td{border-top:2px solid var(--rule);color:var(--ink);font-weight:600;}
.imputed{color:var(--amber);font-size:10.5px;font-family:'JetBrains Mono',monospace;border:1px solid rgba(255,138,61,.4);border-radius:999px;padding:1px 7px;margin-left:6px;white-space:nowrap;}
.fnotes{font-size:12px;color:var(--muted-dim);line-height:1.7;margin:10px 2px 26px;}
.fnotes li{margin-left:18px;margin-bottom:4px;}
.writeup{margin:6px 0 26px;}
.writeup h2,.ctas h2{font-family:'Space Grotesk',sans-serif;font-size:20px;color:var(--ink);margin-bottom:10px;}
.writeup p{font-size:15px;line-height:1.75;color:var(--muted);max-width:66ch;margin-bottom:12px;}
.writeup b{color:var(--ink);}
.banner-low{border:1px solid rgba(255,138,61,.5);background:rgba(255,138,61,.08);color:var(--ink);border-radius:12px;padding:13px 17px;font-size:14px;line-height:1.6;margin:0 0 18px;}
.ctas{margin-top:8px;}
.ctarow{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;margin-top:12px;}
.tcard{display:flex;flex-direction:column;gap:6px;padding:15px 16px;border:1px solid var(--rule);border-radius:13px;background:rgba(255,255,255,.02);text-decoration:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.04), 0 6px 20px rgba(0,0,0,.22);transition:transform .18s cubic-bezier(.2,.7,.3,1),border-color .18s,background .18s;}
.tcard:hover{transform:translateY(-3px);border-color:rgba(0,160,234,.55);background:rgba(0,160,234,.06);}
.tcard .tt{font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:15px;color:var(--ink);}
.tcard .td{font-size:12.5px;line-height:1.5;color:var(--muted);}
.tcard .tg{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--blue-soft);}
.tcard .tspark{display:block;width:100%;height:30px;margin:2px 0;opacity:.9;}
/* history charts */
.histwrap{margin:4px 0 24px;}
.hist-title{font-family:'Space Grotesk',sans-serif;font-size:20px;color:var(--ink);margin-bottom:10px;}
.histcard{background:rgba(255,255,255,.02);border:1px solid var(--rule);border-radius:14px;padding:14px 16px 8px;margin-bottom:12px;}
.histcard svg{width:100%;height:auto;display:block;}
.cityhero{position:relative;margin:12px 0 20px;border:1px solid var(--rule);border-radius:16px;overflow:hidden;background:#00131C;}
.cityhero img{display:block;width:100%;height:clamp(190px,32vw,300px);object-fit:cover;}
.cityhero--map img{object-fit:contain;}
.herocredit{position:absolute;left:0;right:0;bottom:0;margin:0;padding:16px 14px 7px;font-size:11px;line-height:1.45;color:#D3DEE6;background:linear-gradient(to top,rgba(0,9,14,.86),rgba(0,9,14,0));text-align:right;}
.herocredit a{color:#9FD8F4;text-decoration:none;}
.herocredit a:hover{text-decoration:underline;}
.herocredit--map{position:static;text-align:left;color:var(--muted-dim);background:none;padding:7px 4px 2px;}
.histchart{background:rgba(255,255,255,.02);border:1px solid var(--rule);border-radius:14px;padding:14px 16px 12px;margin-bottom:10px;min-height:80px;}
.hist-fallback{font-family:'JetBrains Mono',monospace;font-size:12.5px;color:var(--muted);line-height:1.6;margin:0;}
.hist-h{font-size:13.5px;font-weight:600;color:var(--ink);margin-bottom:6px;}
.hist-h .hist-r{font-family:'JetBrains Mono',monospace;font-weight:500;font-size:12px;color:var(--muted);margin-left:8px;}
.hlbl{font-family:'JetBrains Mono',monospace;font-size:10px;fill:#5E7787;}
.hist-src{font-size:11px;color:var(--muted-dim);margin:6px 0 6px;line-height:1.5;}
.hist-flag{font-size:12.5px;color:var(--amber);margin:4px 0 8px;line-height:1.55;}
/* compare */
.cmppicks{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:0 0 20px;max-width:900px;position:relative;z-index:30;}
.cmppicks .searchwrap{margin:0;max-width:none;}
.cmppicks label{display:block;font-size:11.5px;font-family:'JetBrains Mono',monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-dim);margin-bottom:6px;}
table.math td.best{background:rgba(31,178,122,.12);color:var(--ink);}
table.math td .small{display:block;font-size:10.5px;color:var(--muted-dim);margin-top:3px;}
table.math th.cityh a{color:var(--ink);text-decoration:none;}
table.math th.cityh a:hover{color:var(--blue-soft);}
/* methodology */
.m-block{margin-top:34px;}
.m-block h2{font-family:'Space Grotesk',sans-serif;font-size:22px;color:var(--ink);margin-bottom:10px;}
.m-block p,.m-block li{font-size:15px;line-height:1.75;color:var(--muted);max-width:66ch;margin-bottom:10px;}
.m-block li{margin-left:20px;}
.m-block b{color:var(--ink);}
.formula{background:var(--navy-lift);border:1px solid var(--rule);border-radius:12px;padding:14px 18px;margin:8px 0 14px;font-family:'JetBrains Mono',monospace;font-size:13.5px;color:var(--ink);overflow-x:auto;white-space:nowrap;}
.wtbl{border:1px solid var(--rule);border-radius:12px;overflow:hidden;margin:8px 0 14px;max-width:520px;}
.wtbl table{width:100%;border-collapse:collapse;font-size:13.5px;}
.wtbl td,.wtbl th{padding:9px 14px;border-bottom:1px solid var(--rule);color:var(--muted);text-align:left;}
.wtbl th{color:var(--muted);font-size:11px;font-family:'JetBrains Mono',monospace;text-transform:uppercase;}
.wtbl tr:last-child td{border-bottom:none;}
.wtbl td:last-child{font-family:'JetBrains Mono',monospace;color:var(--ink);text-align:right;}
#compare-models .wtbl td,#compare-models .wtbl th{text-align:left;font-family:inherit;color:var(--muted);vertical-align:top;}
#compare-models .wtbl th{font-family:'JetBrains Mono',monospace;text-transform:uppercase;font-size:11px;}
#compare-models .wtbl td:first-child{color:var(--ink);font-weight:600;white-space:nowrap;}
#compare-models .wtbl th[scope="row"]{font-family:inherit;text-transform:none;font-size:inherit;color:var(--ink);font-weight:600;white-space:nowrap;}
#city-score,#zip-score,#compare-models{scroll-margin-top:20px;}
/* CLS: reserve the flagship table's area before the JS component mounts (removed once .mkt-ui mounts,
   so filtered/short views never leave a blank gap). Prevents the footer/as-of shift measured in Q1. */
#mkt-table:not(.mkt-ui){min-height:700px;}
.sitefoot{width:100%;background:var(--chrome);border-top:1px solid var(--chrome-line);margin-top:40px;}
.foot{padding:22px 24px;max-width:1160px;margin:0 auto;width:100%;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:13px;color:var(--on-chrome-soft);}
.foot a{color:var(--on-chrome);text-decoration:none;}
.foot a:hover{color:#fff;}
.topbar a:focus-visible{outline:2px solid var(--brand-cyan);outline-offset:3px;border-radius:4px;}
@media (max-width:640px){.nav{padding:18px 16px;}.navlinks{gap:14px;font-size:13px;}.brand img{height:42px;}.page{padding:26px 16px 56px;}.foot{padding:22px 16px;}.bignum{font-size:44px;}.foot{flex-direction:column;}
/* touch targets >=44px: filters, checkbox row, show-all, sort headers */
.filters select,.filters input{min-height:44px;font-size:15px;padding:10px 12px;}
.filters input[type=number]{width:86px;}
.filters label{min-height:44px;font-size:13.5px;}
.filters input[type=checkbox]{width:22px;height:22px;min-height:0;}
.morebar button{min-height:44px;padding:12px 24px;}
table.mk th{padding-top:14px;padding-bottom:14px;}}
@media (prefers-reduced-motion:no-preference){.page>*{animation:rise .5s cubic-bezier(.2,.7,.3,1) both;}.page>*:nth-child(2){animation-delay:.05s}.page>*:nth-child(3){animation-delay:.1s}.page>*:nth-child(4){animation-delay:.15s}.page>*:nth-child(n+5){animation-delay:.2s}}
@keyframes rise{from{transform:translateY(10px);}to{transform:none;}}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;}}
/* ---- v3 interactive lists ---- */
.mkt-explainer{font-size:15px;line-height:1.6;color:var(--ink);max-width:78ch;margin:6px 0 4px;}
.explainer-more{white-space:nowrap;color:var(--blue-soft);text-decoration:none;border-bottom:1px solid transparent;}
.explainer-more:hover{border-bottom-color:currentColor;}
/* Compact model-explanation disclosure (explorer hub pages): a two-sentence .mkt-explainer stays
   visible; the full model/defaults/limitations text a mobile visitor would otherwise have to scroll
   past to reach search lives here, native <details> so it is keyboard/SR-usable and crawlable even
   collapsed. .mkt-intro wraps the whole intro block on the city/ZIP explorer hubs ONLY, so the mobile
   compaction below cannot leak onto city/state/ZIP profile pages that reuse .eyebrow/.subnav. */
.mkt-details{margin:2px 0 12px;max-width:78ch;}
.mkt-details summary{cursor:pointer;font:600 13.5px 'Inter',sans-serif;color:var(--blue-soft);list-style:none;}
.mkt-details summary::-webkit-details-marker{display:none;}
.mkt-details summary::before{content:'▸ ';font-size:11px;}
.mkt-details[open] summary::before{content:'▾ ';}
.mkt-details-body{font-size:14px;line-height:1.6;color:var(--muted);margin-top:8px;}
.mkt-details-body a{color:var(--blue-soft);}
@media (max-width:430px){
  .mkt-intro .eyebrow{margin-bottom:6px;}
  .mkt-intro h1{margin-bottom:6px;}
  .mkt-intro .mkt-explainer{font-size:14px;line-height:1.5;margin:2px 0 2px;}
  .mkt-intro .mkt-details{margin:2px 0 6px;}
  .mkt-intro .subnav{margin:0 0 10px;}
}
/* ---- v3 city scorecard ---- */
.v3scores{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:14px 0;}
/* .v3s.v3s-hero (two classes) so the blue hero wins over the later single-class .v3s base rule */
.v3s.v3s-hero{background:var(--blue);border-color:var(--blue);}
.v3s.v3s-hero:hover{border-color:var(--blue);}
.v3s.v3s-hero .v3lbl,.v3s.v3s-hero .v3pct{color:#EAF1FF;}
.v3s.v3s-hero .v3num{color:#fff;}
.v3s{display:flex;flex-direction:column;gap:2px;background:var(--navy-lift);border:1px solid var(--rule);border-radius:12px;padding:16px;text-decoration:none;}
.v3s:hover{border-color:var(--blue);}
.v3lbl{font:600 12px/1 'Inter',sans-serif;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;}
.v3num{font:700 34px/1 'Space Grotesk',sans-serif;color:var(--ink);margin:6px 0 2px;}
.v3pct{font:11px 'JetBrains Mono',monospace;color:var(--blue-soft);}
.v3meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:8px;}
.tierchip.tier-good{color:var(--good);border-color:rgba(31,178,122,.4);}
.math .ord{font-size:10px;color:var(--muted);}
.math td.one{text-align:left;white-space:normal;max-width:34ch;color:var(--muted);font-size:12.5px;}
.math td.src{font-size:12px;color:var(--muted-dim);}
@media(max-width:640px){.v3scores{grid-template-columns:repeat(2,1fr);}.v3num{font-size:30px;}}
/* ---- city page: identity/grade + national-position bars + deal scenario ---- */
.citysub{color:var(--muted);font-size:15px;margin:0 0 20px;}
.gradeblock{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:0 0 22px;}
.gradebadge{width:72px;height:72px;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;flex:none;box-shadow:0 4px 14px rgba(16,40,60,.18);}
.gradebadge .gg{font:700 30px/1 'Space Grotesk',sans-serif;}
.gradebadge .gr{font:600 11px/1 'JetBrains Mono',monospace;opacity:.92;margin-top:4px;letter-spacing:.04em;}
.gradeinfo .grank{font:600 16px/1.2 'Inter',sans-serif;color:var(--ink);}
.gradeinfo .gstand{font-size:13.5px;color:var(--muted);margin-top:3px;}
.gradeinfo .gmethod{font-size:12.5px;margin-top:5px;}
.gradeinfo .gmethod a{color:var(--blue-soft);text-decoration:none;border-bottom:1px solid transparent;}
.gradeinfo .gmethod a:hover{border-bottom-color:currentColor;}
.card{background:var(--navy-lift);border:1px solid var(--rule);border-radius:16px;padding:22px 24px;margin:0 0 22px;box-shadow:0 1px 2px rgba(16,40,60,.04);}
.card>h2{font:700 13px/1.3 'Inter',sans-serif;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:0 0 6px;}
.card .cardlede{font-size:13px;color:var(--muted);margin:0 0 16px;max-width:70ch;line-height:1.5;}
.mrow{display:grid;grid-template-columns:200px 1fr 92px;align-items:center;gap:14px;padding:9px 0;border-top:1px solid var(--rule);}
.mrow:first-of-type{border-top:none;}
.mlabel{font-size:14px;font-weight:600;color:var(--ink);}
.mlabel small{display:block;font-weight:400;color:var(--muted);font-size:11.5px;margin-top:1px;}
/* Single-hue percentile track (no moralized red-to-green rainbow): a neutral rail, a single-hue fill up
   to this market's position, a visible median tick, and a high-contrast marker.
   Direction/meaning are unchanged — further right is still more favorable, stated in text + legend. */
.mtrack{position:relative;height:11px;border-radius:6px;background:rgba(20,30,50,.10);overflow:visible;}
.mfill{position:absolute;top:0;left:0;height:100%;border-radius:6px 0 0 6px;background:var(--blue-soft);}
.mmedian{position:absolute;top:-3px;bottom:-3px;left:50%;width:2px;background:var(--muted);transform:translateX(-50%);border-radius:1px;}
.mmedian::after{content:"median";position:absolute;top:-13px;left:50%;transform:translateX(-50%);font:600 8.5px/1 'Inter',sans-serif;letter-spacing:.04em;color:var(--muted-dim);white-space:nowrap;}
.mmarker{position:absolute;top:50%;width:15px;height:15px;border-radius:50%;background:var(--navy-lift);border:3px solid var(--ink);transform:translate(-50%,-50%);box-shadow:0 1px 4px rgba(0,0,0,.3);z-index:2;}
.mval{text-align:right;font-variant-numeric:tabular-nums;}
.mval .mn{display:block;font:700 15px/1 'Space Grotesk',sans-serif;color:var(--ink);}
.mval .mp{font:11px 'JetBrains Mono',monospace;color:var(--muted);}
.mlegend{display:flex;justify-content:space-between;font-size:11px;color:var(--muted-dim);margin-top:12px;padding-left:214px;}
.dealcard{background:linear-gradient(180deg,#F1F5FE,#FFFFFF);border-color:#D3E0F7;}
.dealcard>h2{color:var(--blue);}
.deal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:2px 0 14px;}
.deal-cell{background:var(--navy-lift);border:1px solid var(--rule);border-radius:12px;padding:13px 15px;}
.deal-cell .dk{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);}
.deal-cell .dv{font:700 22px/1.15 'Space Grotesk',sans-serif;color:var(--ink);margin-top:3px;}
.deal-cell .dv small{font:500 13px/1 'Inter',sans-serif;color:var(--muted);}
.verdict{display:flex;align-items:flex-start;gap:10px;font-size:14px;line-height:1.5;padding:12px 14px;border-radius:10px;background:var(--navy-lift);border:1px solid var(--rule);color:var(--ink);margin:0 0 14px;}
.verdict .vdot{width:9px;height:9px;border-radius:50%;flex:none;margin-top:6px;}
.verdict .vdot.pos{background:var(--good);}.verdict .vdot.neg{background:var(--amber);}
.dealctas{margin:2px 0 0;}
.dealcta{display:inline-flex;align-items:center;gap:8px;background:var(--blue);color:#fff;text-decoration:none;font-weight:600;font-size:14px;padding:11px 18px;border-radius:10px;min-height:44px;box-sizing:border-box;}
.dealcta:hover{background:#2450B8;color:#fff;}
.deal-note{font-size:12px;color:var(--muted);margin:14px 0 0;line-height:1.55;}
.deal-note b{color:var(--ink);}
@media(max-width:640px){
  .mrow{grid-template-columns:112px 1fr 66px;gap:9px;}
  .mlabel{font-size:13px;}.mlabel small{font-size:10.5px;}
  .mlegend{padding-left:121px;font-size:10px;}
  .deal-grid{grid-template-columns:1fr 1fr;}
  .deal-cell .dv{font-size:19px;}
  .gradebadge{width:60px;height:60px;}.gradebadge .gg{font-size:25px;}
}

.zipmod .zm-wrap{margin:4px 0 12px;}
.zm-tbl{width:100%;border-collapse:collapse;font-size:13.5px;min-width:520px;}
.zm-tbl th{text-align:left;padding:9px 12px;border-bottom:1px solid var(--rule);color:var(--muted);font:600 11px/1.3 'Inter',sans-serif;letter-spacing:.05em;text-transform:uppercase;vertical-align:bottom;}
.zm-tbl th small{display:block;font-weight:400;text-transform:none;letter-spacing:0;color:var(--muted-dim);font-size:10.5px;margin-top:2px;}
.zm-tbl td{padding:9px 12px;border-bottom:1px solid var(--rule);color:var(--ink);vertical-align:top;}
.zm-tbl tr:last-child td{border-bottom:none;}
.zm-zip a{font-weight:700;color:var(--blue);text-decoration:none;font-variant-numeric:tabular-nums;}
.zm-zip a:hover{text-decoration:underline;}
.zm-zip small,.zm-ov small,.zm-sig small,.zm-met small{display:block;color:var(--muted);font-size:11px;margin-top:2px;font-weight:400;}
.zm-sig b,.zm-met b{font:700 15px/1 'Space Grotesk',sans-serif;color:var(--ink);font-variant-numeric:tabular-nums;}
.zm-sig small{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--muted);}
.zm-na{color:var(--muted-dim);}
.zm-tier{display:inline-block;font:600 10.5px/1.4 'Inter',sans-serif;padding:1px 7px;border-radius:999px;border:1px solid var(--rule);color:var(--muted);}
.zm-t-ranked{color:#1FB27A;border-color:rgba(31,178,122,.4);}
.zm-all{display:inline-block;margin-top:4px;font-weight:600;color:var(--blue);text-decoration:none;font-size:13.5px;}
.zm-all:hover{text-decoration:underline;}
.zm-rank{font-family:'JetBrains Mono',monospace;color:var(--muted);width:1%;white-space:nowrap;}
.zm-srk{font-weight:700;color:var(--ink);}
.zm-ovcell .chip{margin-right:5px;vertical-align:baseline;}
.zm-boards{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:6px 0 12px;}
.zm-board-lead{grid-column:1/-1;}
.zm-board h3{font:700 13px/1.3 'Inter',sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--ink);margin:0 0 3px;}
.zm-board .fine{font-size:11.5px;color:var(--muted);margin:0 0 8px;}
/* City/ZIP view toggle on state pages */
.mkviewtoggle{display:inline-flex;border:1px solid var(--rule);border-radius:9px;overflow:hidden;margin:6px 0 2px;}
.mkviewtoggle button{border:0;background:var(--navy-lift);padding:8px 16px;font:600 13px/1 'Inter',sans-serif;color:var(--muted);cursor:pointer;min-height:38px;}
.mkviewtoggle button[aria-pressed="true"]{background:var(--blue);color:#fff;}
[data-mkview="zips"] #citymarkets{display:none;}
[data-mkview="cities"] #statezips{display:none;}
@media(max-width:560px){.zm-tbl{font-size:12.5px;}.zm-tbl th,.zm-tbl td{padding:8px 9px;}.zm-boards{grid-template-columns:1fr;gap:14px;}}
