:root{
  color-scheme:light;
  --bg:#FBFAF7; --panel:#fff; --text:#14151A; --muted:#46484F; --muted2:#6B6F76;
  --border:rgba(20,21,26,0.1); --border-soft:rgba(20,21,26,0.08); --border-fill:rgba(20,21,26,0.04);
  --blue: oklch(0.55 0.14 255); --blue-soft: oklch(0.97 0.02 255);
  --green: oklch(0.5 0.13 150); --green-bg: oklch(0.96 0.03 150); --green-text: oklch(0.42 0.1 150); --green-strong: oklch(0.62 0.15 150);
  --red: oklch(0.5 0.16 25); --red-bg: oklch(0.94 0.05 25); --red-strong: oklch(0.62 0.16 25);
  --font-sans:'Instrument Sans',system-ui,sans-serif; --font-serif:'Instrument Serif',Georgia,serif; --font-mono:'IBM Plex Mono',monospace;
}
[data-theme="dark"]{
  color-scheme:dark;
  --bg:#15161B; --panel:#1D1F26; --text:#F2F1ED; --muted:#B8BAC2; --muted2:#8B8E97;
  --border:rgba(242,241,237,0.14); --border-soft:rgba(242,241,237,0.1); --border-fill:rgba(242,241,237,0.06);
  --blue: oklch(0.72 0.13 255); --blue-soft: oklch(0.28 0.05 255);
  --green: oklch(0.68 0.14 150); --green-bg: oklch(0.26 0.05 150); --green-text: oklch(0.78 0.12 150); --green-strong: oklch(0.68 0.15 150);
  --red: oklch(0.68 0.15 25); --red-bg: oklch(0.28 0.07 25); --red-strong: oklch(0.7 0.16 25);
}
[data-theme="dark"] img, [data-theme="dark"] .brand .mark{filter:none}
[data-theme="dark"] .site-header{background:rgba(21,22,27,.86)}
[data-theme="dark"] ::selection{background:oklch(0.35 0.07 150)}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg)}
body{color:var(--text);font-family:var(--font-sans);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:var(--text);text-decoration:none}
a:hover{color:var(--blue)}
input,button,select{font:inherit;color:inherit}
input[type="text"],input[type="email"],input[type="password"],input[type="number"],input[type="date"],input[type="search"],select,textarea{
  background:var(--panel); color:var(--text); border-color:var(--border);
}
::placeholder{color:var(--muted2); opacity:1}
select option{background:var(--panel); color:var(--text)}
[data-theme="dark"] input[type="date"]::-webkit-calendar-picker-indicator{filter:invert(1)}
::selection{background:oklch(0.88 0.09 150)}
.wrap{max-width:1240px;margin:0 auto;padding:0 28px}
@keyframes riseIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes pulseSoft{0%,100%{opacity:.35}50%{opacity:1}}

/* header */
.site-header{position:sticky;top:0;z-index:40;backdrop-filter:blur(14px);background:rgba(251,250,247,.86);border-bottom:1px solid var(--border-soft)}
.site-header .wrap{padding:14px 28px;display:flex;align-items:center;gap:28px}
.brand{display:flex;align-items:baseline;gap:7px}
.brand .mark{font-family:var(--font-mono);font-weight:600;font-size:17px;letter-spacing:-.02em}
.brand .sub{font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--blue)}
.nav-tabs{display:flex;align-items:center;gap:2px;padding:3px;background:var(--border-fill);border-radius:999px}
.nav-tabs a{padding:7px 14px;border-radius:999px;font-size:13.5px;font-weight:500;color:var(--muted2)}
.nav-tabs a.active{background:var(--panel);color:var(--text);box-shadow:0 1px 4px rgba(20,21,26,.14)}
.spacer{flex:1}
.search-trigger{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:999px;border:1px solid var(--border);background:var(--panel);color:var(--muted2);cursor:pointer;flex-shrink:0}
.search-trigger:hover{color:var(--text);border-color:var(--muted2)}
.kbd{font-family:var(--font-mono);font-size:11px;padding:2px 6px;border-radius:5px;background:var(--border-fill);color:var(--text)}
.btn{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:10px;font-size:13.5px;font-weight:500;cursor:pointer;border:1px solid transparent}
.btn-dark{background:var(--text);color:var(--bg);border-color:var(--text)}
.btn-primary{background:var(--text);color:var(--bg);border:0;padding:13px 22px;border-radius:12px;font-size:15px}
.btn-secondary{background:var(--panel);border-color:var(--border);padding:13px 22px;border-radius:12px;font-size:15px}
.btn-outline{background:var(--panel);border-color:var(--border);border-radius:9px;padding:8px 13px;font-size:13px}
.btn-ghost{background:transparent;border:1px dashed var(--border);color:var(--muted);border-radius:11px;padding:11px;font-size:13.5px;width:100%;text-align:center}

/* hero */
.hero{display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,1fr);gap:56px;align-items:center;padding:84px 0 72px}
.pill{display:inline-flex;align-items:center;gap:9px;padding:6px 12px 6px 9px;border-radius:999px;background:var(--green-bg);font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--green-text)}
.pulse-dot{width:6px;height:6px;border-radius:999px;background:var(--green-strong);animation:pulseSoft 2.4s ease-in-out infinite}
h1{font-family:var(--font-serif);font-weight:400;letter-spacing:-.025em;margin:22px 0 0;font-size:clamp(38px, 8vw, 72px);line-height:1.02}
h1 em{font-style:italic;color:var(--blue)}
.lead{font-size:18px;color:var(--muted);max-width:46ch;margin:20px 0 0}
.cta-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:30px}
.hero-stats{display:grid;grid-template-columns:repeat(3,auto);gap:28px;margin-top:40px;padding-top:26px;border-top:1px solid var(--border-soft)}
.stat-value{font-family:var(--font-mono);font-size:clamp(20px, 5vw, 26px);font-weight:500;letter-spacing:-.02em}
.stat-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted2);margin-top:3px}

/* spread card (home + city) */
.card{background:var(--panel);border:1px solid var(--border);border-radius:20px;padding:26px}
.spread-card{box-shadow:0 24px 60px -30px rgba(20,21,26,.28)}
.spread-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.kicker{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted2)}
.spread-prices{display:flex;align-items:flex-end;gap:20px;margin:26px 0 8px}
.price-big{font-family:var(--font-mono);font-size:clamp(24px, 6vw, 34px);font-weight:500;letter-spacing:-.03em;line-height:1.1}
.price-name{font-size:12.5px;color:var(--muted2)}
.spread-track-wrap{position:relative;height:76px;margin-top:14px}
.spread-track{position:absolute;left:0;right:0;top:34px;height:8px;border-radius:999px;background:linear-gradient(90deg,oklch(0.86 0.1 150),oklch(0.9 0.09 85),oklch(0.84 0.11 25))}
.spread-dot{position:absolute;top:22px;transform:translateX(-50%);background:none;border:0;padding:0;cursor:pointer;font:inherit}
.spread-dot .marker{width:16px;height:32px;border-radius:999px;border:3px solid #fff;box-shadow:0 2px 8px rgba(20,21,26,.22)}
.spread-tooltip{position:absolute;bottom:0;transform:translateX(-50%);white-space:nowrap;font-family:var(--font-mono);font-size:11px}
.spread-tooltip span{padding:4px 9px;border-radius:7px;background:var(--text);color:var(--bg)}
.spread-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:22px;padding-top:20px;border-top:1px solid var(--border-soft)}
.metric-box{padding:14px;border-radius:13px}
.metric-box.save{background:var(--green-bg)}
.metric-box.spread{background:var(--border-fill)}
.metric-label{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted2)}
.metric-label.save{color:var(--green-text)}
.metric-value{font-family:var(--font-mono);font-size:clamp(19px, 5vw, 25px);font-weight:500;margin-top:4px}

/* sections */
.section{border-top:1px solid var(--border-soft);padding:56px 0}
.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap}
.section-kicker{font-family:var(--font-mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--blue)}
h2{font-family:var(--font-serif);font-weight:400;font-size:clamp(28px, 6vw, 42px);letter-spacing:-.02em;margin:8px 0 0}
.section p{color:var(--muted);max-width:62ch;margin:10px 0 0}
.best-rate-chip{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:13px;background:var(--text);color:var(--bg)}
.best-rate-chip .label{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;opacity:.6}
.best-rate-chip .value{font-family:var(--font-mono);font-size:clamp(20px, 5vw, 27px);font-weight:500;letter-spacing:-.02em}

/* simulator controls */
.controls-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px;margin-top:30px}
.control-card{background:var(--panel);border:1px solid var(--border);border-radius:15px;padding:15px}
.control-label{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted2)}
.control-options{display:flex;flex-wrap:wrap;gap:6px;margin-top:11px}
.control-btn{border:1px solid var(--border);border-radius:9px;padding:7px 11px;font-size:13px;background:var(--panel);color:var(--muted);font-family:inherit;cursor:pointer}
.control-btn.active{background:var(--text);color:var(--bg);border-color:var(--text)}
.control-btn.small{border-radius:8px;padding:5px 9px;font-size:12.5px}

.panels-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:16px;margin-top:16px}
.panel{background:var(--panel);border:1px solid var(--border);border-radius:18px;padding:22px}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:16px}
.trend-badge{font-family:var(--font-mono);font-size:12.5px;padding:4px 9px;border-radius:7px}
.trend-badge.up{background:var(--red-bg);color:oklch(0.48 0.15 25)}
.trend-badge.down{background:oklch(0.94 0.05 150);color:oklch(0.42 0.12 150)}
.trend-labels{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:10.5px;color:var(--muted2);margin-top:8px}
.trend-legend{display:flex;gap:18px;margin-top:14px;padding-top:14px;border-top:1px solid var(--border-soft);font-size:12.5px;color:var(--muted2)}
.trend-legend span{display:flex;align-items:center;gap:7px}
.legend-swatch{width:14px;height:2.5px;background:var(--blue);border-radius:2px}
.legend-swatch.dash{height:2px;background:var(--border)}

.rank-row{display:grid;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:12px;padding:9px 10px;border-radius:10px}
.rank-row.active{background:var(--border-fill)}
.rank-idx{font-family:var(--font-mono);font-size:11.5px;color:var(--muted2)}
.rank-name{font-size:14px;font-weight:500}
.rank-bar{display:block;height:4px;border-radius:999px;margin-top:6px}
.rank-price{font-family:var(--font-mono);font-size:14.5px}

/* compare */
.compare-chips{display:flex;gap:8px;flex-wrap:wrap;max-width:420px}
.chip{border-radius:999px;padding:7px 13px;font-size:13px;border:1px solid var(--border);background:var(--panel);color:var(--muted);font-family:inherit;cursor:pointer}
.chip.active{background:var(--text);color:var(--bg);border-color:var(--text)}
.compare-row + .compare-row{margin-top:26px}
.compare-row-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px}
.compare-track-wrap{position:relative;height:30px;margin-top:10px}
.compare-track{position:absolute;left:0;right:0;top:13px;height:3px;background:var(--border-fill);border-radius:999px}
.compare-fill{position:absolute;top:9px;height:11px;border-radius:999px}
.compare-median{position:absolute;top:0;width:2px;height:30px;background:var(--text)}
.compare-note{font-size:13px;color:var(--muted2);margin-top:8px}
.compare-scale{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:10.5px;color:var(--muted2);margin-top:22px;padding-top:14px;border-top:1px solid var(--border-soft)}

/* steps */
.steps-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin-top:28px}
.step-card{background:var(--panel);border:1px solid var(--border);border-radius:18px;padding:22px}
.step-num{font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;color:var(--blue)}
.step-title{font-size:19px;font-weight:600;margin-top:12px;letter-spacing:-.01em}
.step-body{color:var(--muted);font-size:14.5px;margin:8px 0 0}

/* affiliate */
.affiliate{display:flex;align-items:center;gap:20px;flex-wrap:wrap;padding:20px 24px;border-radius:16px;background:var(--border-fill);border:1px solid var(--border-soft);margin-top:44px}
.affiliate-title{font-size:16px;font-weight:600}
.affiliate-sub{font-size:13.5px;color:var(--muted2);margin-top:3px}

/* city page */
.breadcrumb{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11.5px;color:var(--muted2)}
.city-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:40px;margin-top:22px;align-items:start}
.city-hero-title{font-size:clamp(30px, 8vw, 56px);line-height:1.15;overflow-wrap:break-word}
.badges-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
.badge{display:flex;align-items:center;gap:8px;padding:7px 12px;border-radius:999px;font-size:13px}
.badge.estimate{background:var(--green-bg);color:var(--green-text)}
.badge.source{background:var(--border-fill);color:var(--muted)}
.badge.link{border:1px solid var(--border)}
.rate-table{background:var(--panel);border:1px solid var(--border);border-radius:18px;margin-top:30px;overflow:hidden}
.rate-table-head{display:grid;grid-template-columns:26px minmax(0,1fr) 130px 92px;gap:14px;padding:13px 20px;border-bottom:1px solid var(--border-soft);font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted2)}
.rate-row{position:relative;display:grid;grid-template-columns:26px minmax(0,1fr) 130px 92px;gap:14px;padding:15px 20px;align-items:center;border-bottom:1px solid var(--border-soft)}
.rate-row.active{background:var(--border-fill)}
.rate-row-hover-link{position:absolute;inset:0;z-index:0;cursor:pointer}
.rate-row .idx{font-family:var(--font-mono);font-size:12px;color:var(--muted2)}
.rate-row .name{position:relative;z-index:1;font-size:15px;font-weight:500;color:var(--text);text-decoration:none}
.rate-row .name:hover{color:var(--blue);text-decoration:underline}
.rate-row .tag{display:block;font-size:12.5px;color:var(--muted2);margin-top:2px}
.position-track{position:relative;height:8px;border-radius:999px;background:var(--border-fill)}
.position-dot{position:absolute;top:-3px;width:14px;height:14px;border-radius:999px;border:2px solid #fff;box-shadow:0 1px 4px rgba(20,21,26,.2);transform:translateX(-50%)}
.rate-row .price{font-family:var(--font-mono);font-size:16px;text-align:right}

.explainer{background:#14151A;color:#FBFAF7;border-radius:18px;padding:26px;margin-top:20px}
.explainer-head{display:flex;align-items:center;gap:10px}
.explainer-head .dot{width:7px;height:7px;border-radius:999px;background:var(--green-strong);animation:pulseSoft 2.2s ease-in-out infinite}
.explainer-head .label{font-family:var(--font-mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase;opacity:.68}
.explainer-title{font-family:var(--font-serif);font-size:clamp(22px, 6vw, 32px);line-height:1.15;margin-top:14px}
.explainer-body{opacity:.72;font-size:15px;margin:12px 0 0;max-width:66ch}
.factor-row{display:grid;grid-template-columns:190px minmax(0,1fr) 76px;gap:16px;align-items:center;margin-top:10px}
.factor-label{font-size:14px;opacity:.86}
.factor-track{position:relative;height:10px;border-radius:999px;background:rgba(251,250,247,.12)}
.factor-fill{position:absolute;top:0;bottom:0;border-radius:999px}
.factor-mid{position:absolute;top:-3px;bottom:-3px;left:50%;width:1px;background:rgba(251,250,247,.3)}
.factor-delta{font-family:var(--font-mono);font-size:13.5px;text-align:right}
.explainer-actions{display:flex;gap:10px;margin-top:24px;flex-wrap:wrap}
.explainer-actions .btn-light{padding:10px 16px;border-radius:10px;border:0;background:#FBFAF7;color:#14151A;font-size:13.5px;font-weight:500}
.explainer-actions .btn-outline-light{padding:10px 16px;border-radius:10px;border:1px solid rgba(251,250,247,.28);background:transparent;color:#FBFAF7;font-size:13.5px}

.methodology{margin-top:30px;padding:22px;border-radius:16px;border:1px dashed var(--border)}
.sidebar-card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:18px}
.sidebar-card + .sidebar-card{margin-top:14px}
.nearby-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;margin:0 -10px;border-radius:9px}
.nearby-row .price{font-family:var(--font-mono);font-size:13px}

/* map */
.mode-toggle{display:inline-flex;width:max-content;gap:3px;padding:3px;background:var(--border-fill);border:1px solid var(--border-soft);border-radius:11px}
.mode-toggle a{border-radius:9px;padding:8px 14px;font-size:13px;color:var(--muted2);white-space:nowrap;transition:color 150ms ease,background 150ms ease}
.mode-toggle a:hover{color:var(--text)}
.mode-toggle a.active{background:var(--panel);color:var(--text);font-weight:600;box-shadow:0 1px 4px rgba(20,21,26,.14)}
.map-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:24px;margin-top:32px;align-items:start}
.tiles-grid{display:grid;grid-template-columns:repeat(11,1fr);grid-auto-rows:1fr;gap:6px}
.tile{aspect-ratio:1;border-radius:9px;display:flex;flex-direction:column;align-items:center;justify-content:center;outline:2px solid transparent}
.tile.active{outline-color:var(--text);box-shadow:0 8px 20px -8px rgba(20,21,26,.5)}
.tile .ab{font-family:var(--font-mono);font-size:12px;font-weight:600}
.tile .val{font-family:var(--font-mono);font-size:10px;opacity:.75}
.legend-row{display:flex;align-items:center;gap:14px;margin-top:24px;padding-top:18px;border-top:1px solid var(--border-soft)}
.legend-bar{flex:1;height:8px;border-radius:999px;background:linear-gradient(90deg,oklch(0.72 0.14 150),oklch(0.8 0.13 85),oklch(0.62 0.16 25))}

/* search */
.search-box{display:flex;align-items:center;gap:12px;margin-top:24px;padding:16px 20px;background:var(--panel);border:1px solid var(--border);border-radius:15px;box-shadow:0 12px 34px -26px rgba(20,21,26,.4)}
.search-box input{flex:1;border:0;outline:none;font-size:19px;background:transparent}
.filter-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.result-row{display:grid;grid-template-columns:minmax(0,1fr) 200px 110px;gap:20px;align-items:center;padding:18px 20px;background:var(--panel);border:1px solid var(--border);border-radius:15px;margin-top:8px}
.result-name{font-size:17px;font-weight:600;letter-spacing:-.01em}
.result-sub{font-size:13px;color:var(--muted2);margin-top:2px}
.mini-track{position:relative;height:26px}
.mini-track-bg{position:absolute;left:0;right:0;top:11px;height:4px;border-radius:999px;background:var(--border-fill)}
.mini-fill{position:absolute;top:8px;height:10px;border-radius:999px;background:linear-gradient(90deg,oklch(0.72 0.14 150),oklch(0.62 0.16 25))}
.result-price{font-family:var(--font-mono);font-size:18px;text-align:right}
.result-from{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted2);text-align:right}
.empty-state{padding:46px 24px;text-align:center;color:var(--muted2);border:1px dashed var(--border);border-radius:16px;margin-top:8px}
.empty-state-inner{display:flex;flex-direction:column;align-items:center;gap:14px;max-width:38ch;margin:0 auto}
.empty-state-art{color:var(--muted2)}
.empty-state p{margin:0;font-size:14px;line-height:1.5}
.empty-state a{color:var(--blue);text-decoration:underline}

/* dashboard */
.dash-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin-top:30px}
.dash-stat{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:18px}
.dash-stat .value{font-family:var(--font-mono);font-size:clamp(22px, 6vw, 30px);font-weight:500;letter-spacing:-.02em;margin-top:8px}
.dash-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:16px;margin-top:16px;align-items:start}
.saved-row{display:grid;grid-template-columns:minmax(0,1fr) 96px 90px 30px;gap:16px;align-items:center;padding:14px 12px;margin:0 -12px;border-radius:12px}
.saved-row .price{font-family:var(--font-mono);font-size:16px;text-align:right}
.remove-btn{width:30px;height:30px;border-radius:8px;border:1px solid var(--border);background:transparent;color:var(--muted2);font-size:15px;line-height:1}
.alert-row{display:grid;grid-template-columns:minmax(0,1fr) 42px;gap:14px;align-items:center;margin-top:12px}
.toggle{width:42px;height:25px;border-radius:999px;border:0;position:relative;background:var(--border)}
.toggle.on{background:var(--green-strong)}
.toggle .knob{position:absolute;top:3px;left:3px;width:19px;height:19px;border-radius:999px;background:#fff;box-shadow:0 1px 3px rgba(20,21,26,.3)}
.toggle.on .knob{left:20px}
.feed-item{display:grid;grid-template-columns:8px minmax(0,1fr);gap:12px;margin-top:14px}
.feed-dot{width:8px;height:8px;margin-top:6px;border-radius:999px}
.feed-when{font-family:var(--font-mono);font-size:11px;color:var(--muted2);margin-top:2px}

/* onboarding */
.progress-row{display:flex;align-items:center;gap:10px}
.progress-seg{height:4px;border-radius:999px;flex:1;background:var(--border)}
.progress-seg.done{background:var(--text)}
.onboard-options{background:var(--panel);border:1px solid var(--border);border-radius:18px;padding:22px;margin-top:28px;display:flex;flex-direction:column;gap:8px}
.onboard-option{display:flex;align-items:center;justify-content:space-between;gap:16px;text-align:left;padding:16px 18px;border-radius:13px;border:1.5px solid var(--border);background:var(--panel);width:100%;font-family:inherit;cursor:pointer;color:var(--text)}
.onboard-option.active{background:var(--blue-soft);border-color:var(--blue)}
.onboard-option .impact{font-family:var(--font-mono);font-size:14px}
.onboard-actions{display:flex;align-items:center;gap:12px;margin-top:22px}

/* palette */
.palette-overlay{position:fixed;inset:0;z-index:90;background:rgba(20,21,26,.4);backdrop-filter:blur(6px);display:none;align-items:flex-start;justify-content:center;padding-top:14vh}
.palette-overlay.open{display:flex}
.palette-box{width:min(560px,92vw);background:var(--bg);border-radius:18px;box-shadow:0 40px 90px -30px rgba(20,21,26,.6);overflow:hidden;animation:riseIn 200ms ease both}
.palette-input-row{display:flex;align-items:center;gap:12px;padding:18px 20px;border-bottom:1px solid var(--border-soft)}
.palette-input-row input{flex:1;border:0;outline:none;background:transparent;font-size:17px}
.palette-list{max-height:46vh;overflow:auto;padding:8px}
.palette-item{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 14px;border-radius:11px;cursor:pointer}
.palette-item:hover,.palette-item.active{background:var(--border-fill)}
.palette-kind{font-family:var(--font-mono);font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted2);width:44px;display:inline-block}
.palette-meta{font-family:var(--font-mono);font-size:13px;color:var(--muted2)}

/* footer */
.site-footer{border-top:1px solid var(--border-soft);background:var(--border-fill);margin-top:60px}
.footer-main{padding:52px 28px 36px;display:grid;grid-template-columns:1.6fr repeat(4, 1fr);gap:32px}
.footer-brand .brand{display:inline-flex}
.footer-tagline{font-size:13.5px;color:var(--muted2);line-height:1.55;margin:16px 0 0;max-width:34ch}
.footer-col-head{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted2);margin-bottom:14px}
.footer-col{display:flex;flex-direction:column;gap:11px}
.footer-col a{font-size:13.5px;color:var(--muted);width:fit-content}
.footer-col a:hover{color:var(--text)}
.footer-bottom{border-top:1px solid var(--border-soft);padding:20px 28px;display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}
.site-footer .copy{font-family:var(--font-mono);font-size:11.5px;color:var(--muted2)}
.footer-disclaimer{font-size:11.5px;color:var(--muted2)}
main{max-width:1240px;margin:0 auto;padding:0 28px 96px}
main.narrow{max-width:1000px}
main.onboard{max-width:760px;padding-top:56px}
main.top-pad{padding-top:40px}

/* forms (login, register, contact) - additive, same token system */
.form-shell{max-width:440px;margin:64px auto}
.form-shell .card{padding:32px}
.form-field{margin-bottom:16px}
.form-field label{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted2);margin-bottom:6px}
.form-field input,.form-field textarea,.form-field select{width:100%;padding:11px 13px;border:1px solid var(--border);border-radius:10px;font:inherit;font-size:14.5px;background:var(--panel);color:var(--text)}
.form-field input:focus,.form-field textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft)}
.form-field .hint{font-size:12px;color:var(--muted2);margin-top:4px}
.hint{font-size:11.5px;color:var(--muted2);line-height:1.4;margin-top:5px;letter-spacing:.01em}
.form-actions-full .btn{width:100%;justify-content:center}
.form-foot{text-align:center;margin-top:16px;font-size:13.5px;color:var(--muted2)}
.notice{padding:12px 16px;border-radius:10px;font-size:13.5px;margin-bottom:16px}
.notice.error{background:var(--red-bg);color:oklch(0.42 0.15 25)}
.notice.success{background:var(--green-bg);color:var(--green-text)}

/* plain content pages (about, methodology, privacy, terms) */
main.prose{max-width:66ch}
main.prose h1{font-size:clamp(28px, 7vw, 44px)}
main.prose h3{font-family:var(--font-sans);font-size:18px;font-weight:600;margin:28px 0 6px}
main.prose p{color:var(--muted);font-size:15px;margin:0 0 14px;max-width:70ch}

/* companies A-Z */
.az-bar{display:flex;flex-wrap:wrap;gap:4px;margin-top:22px;padding:14px;background:var(--panel);border:1px solid var(--border);border-radius:14px;position:sticky;top:70px;z-index:10}
.az-bar a,.az-bar span{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:8px;font-family:var(--font-mono);font-size:12.5px}
.az-bar a{color:var(--text);background:var(--border-fill)}
.az-bar a:hover{background:var(--text);color:var(--bg);text-decoration:none}
.az-bar span{color:var(--border);cursor:default}
.az-section{margin-top:34px;scroll-margin-top:120px}
.az-section-heading{font-family:var(--font-serif);font-size:28px;color:var(--blue);border-bottom:1px solid var(--border-soft);padding-bottom:8px;margin-bottom:16px}

/* skeleton loading, used while /home-data.php is in flight */
@keyframes skeletonShine{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}
.is-loading{position:relative;pointer-events:none;overflow:hidden}
.is-loading > *{opacity:.35;filter:blur(.2px)}
.is-loading::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,var(--border-fill) 40%,var(--border) 50%,var(--border-fill) 60%,transparent);
  background-size:200px 100%;background-repeat:no-repeat;
  animation:skeletonShine 1.1s ease-in-out infinite;
}

/* small helpers */
#page-progress{position:fixed;top:0;left:0;height:2.5px;width:0;background:var(--blue);z-index:200;opacity:0;box-shadow:0 0 8px oklch(0.55 0.14 255 / 0.6)}
.text-muted{color:var(--muted2)}
.mt-0{margin-top:0}

/* =========================================================
   Mobile / responsive
========================================================= */

/* Touch targets and base tweaks */
@media (max-width: 900px) {
  .wrap{padding:0 18px}
  main{padding:0 18px 64px}
  .hero{grid-template-columns:1fr;gap:36px;padding:36px 0 48px}
  .hero-stats{grid-template-columns:repeat(3,1fr);gap:14px}
  .panels-grid{grid-template-columns:1fr}
  .map-layout{grid-template-columns:1fr}
  .city-layout{grid-template-columns:1fr;gap:24px}
  .city-layout aside{position:static;top:auto}
  .dash-grid{grid-template-columns:1fr}
  .factor-row{grid-template-columns:1fr;gap:6px}
  .factor-row .factor-delta{text-align:left}
  .section{padding:40px 0}
  .az-bar{position:static; gap:3px; padding:10px}
  .az-bar a,.az-bar span{width:25px;height:25px;font-size:11.5px}
}

/* Header: collapse the tab bar into a menu on narrow screens */
@media (max-width: 860px) {
  .site-header .wrap{padding:12px 18px;gap:12px;flex-wrap:nowrap}
  .brand{flex-shrink:0}
  .nav-tabs{
    position:fixed; left:0; right:0; top:57px; z-index:39;
    display:none; flex-direction:column; align-items:stretch;
    background:var(--bg); border-bottom:1px solid var(--border-soft);
    border-radius:0; padding:8px 14px 14px; gap:2px;
    max-height:calc(100vh - 57px); overflow-y:auto;
  }
  .nav-tabs.open{display:flex}
  .nav-tabs a{padding:12px 10px; border-radius:10px; font-size:15px}
  .nav-tabs a.active{box-shadow:none; background:var(--border-fill)}
  .nav-toggle{
    display:flex; flex-direction:column; justify-content:center; gap:4px;
    width:36px;height:36px; border-radius:10px; border:1px solid var(--border);
    background:var(--panel); flex-shrink:0; cursor:pointer;
  }
  .nav-toggle span{display:block;height:2px;margin:0 8px;background:var(--text);border-radius:2px}
  .desktop-only{display:none}
  .nav-tabs-auth-mobile{display:flex; flex-direction:column; gap:2px; margin-top:8px; padding-top:8px; border-top:1px solid var(--border-soft)}
  .nav-tabs-auth-mobile a{padding:12px 10px; border-radius:10px; font-size:15px; font-weight:500}
}
@media (min-width: 861px) {
  .nav-toggle{display:none}
  .nav-tabs-auth-mobile{display:none}
}

/* Rate map: keep the real 11-col US-shaped grid, let it pan horizontally
   instead of squeezing states unreadably thin */
@media (max-width: 900px) {
  .map-layout .card{overflow-x:auto; -webkit-overflow-scrolling:touch}
  .tiles-grid{grid-template-columns:repeat(11, 64px); width:max-content}
  .map-scroll-hint{display:block}
}
@media (min-width: 901px) {
  .map-scroll-hint{display:none}
}

/* Rate table: drop the spread-position column on phones, keep it scannable */
@media (max-width: 600px) {
  .rate-table-head{grid-template-columns:22px minmax(0,1fr) 84px}
  .rate-table-head span:nth-child(3){display:none}
  .rate-row{grid-template-columns:22px minmax(0,1fr) 84px}
  .rate-row .position-track{display:none}
}

/* Result rows (search) and saved rows (watchlist): drop the mini spread
   track, stack price under the name instead of a rigid 3-column grid */
@media (max-width: 640px) {
  .result-row{grid-template-columns:1fr auto; gap:10px 14px}
  .result-row .mini-track{display:none}
  .saved-row{grid-template-columns:1fr auto 30px; gap:10px}
  .saved-row > div:nth-child(2){display:none}
}

/* Compare / explainer scale rows */
@media (max-width: 640px) {
  .compare-scale span:nth-child(odd):not(:first-child):not(:last-child){display:none}
}

/* Footer stacks cleanly */
@media (max-width: 900px) {
  .footer-main{grid-template-columns:1fr 1fr;gap:32px 24px}
  .footer-brand{grid-column:1 / -1}
}
@media (max-width: 640px) {
  .footer-main{grid-template-columns:1fr 1fr;padding:40px 20px 24px;gap:28px 20px}
  .footer-bottom{flex-direction:column;align-items:flex-start;gap:6px;padding:16px 20px}
}

/* Palette overlay: use more of the viewport on small phones */
@media (max-width: 480px) {
  .palette-overlay{padding-top:8vh}
  .palette-box{width:94vw}
}

/* Onboarding / forms breathing room */
@media (max-width: 640px) {
  .form-shell{margin:32px auto}
  main.onboard{padding-top:32px}
  .onboard-actions{flex-wrap:wrap}
  .onboard-actions .spacer{flex-basis:100%;height:0}
}

/* Ensure tap targets are comfortably sized on touch */
@media (max-width: 640px) {
  .control-btn, .chip{padding:9px 13px}
  .btn{padding:11px 16px}
  .remove-btn{width:36px;height:36px}
  .toggle{width:46px;height:28px}
  .toggle .knob{width:22px;height:22px}
  .toggle.on .knob{left:21px}
}
