/* NorthStar design system — same tokens as the Davidson manager pages.
   Brand blue #0076bc, ink #1a2744, navy-tinted shadows, Inter 14px, 8pt grid. */
:root{
  --brand:#0076bc; --brand-deep:#0067a5; --accent:#00aae7; --gold:#f59e0b;
  --ink:#1a2744; --bg:#f6f8fa; --card:#fff; --border:#dfe6ee;
  --fg:#16202e; --muted:#5b6b7c;
  --ok:#15803d; --ok-bg:#eaf6ee; --warn:#b45309; --warn-bg:#fdf3e3;
  --err:#b42318; --err-bg:#fdecea; --info:#0369a1; --info-bg:#e7f2fb;
  --sh-sm:0 1px 2px rgba(26,39,68,.08),0 1px 3px rgba(26,39,68,.06);
  --sh-md:0 4px 10px rgba(26,39,68,.10);
  --r-sm:6px; --r-md:8px; --r-lg:10px;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;background:var(--bg);color:var(--fg);
  font:400 14px/1.5 Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
h1,h2,h3{font-weight:600;letter-spacing:-.015em;margin:0}
a{color:var(--brand)}
button{font:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.app{min-height:100vh;display:flex;flex-direction:column}
.top{background:var(--brand-deep);color:#fff;padding:14px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px}
.top-l{display:flex;align-items:center;gap:14px;min-width:0}
.top-logo{height:30px;flex:none;display:block}
.top-t{font-size:15.5px;font-weight:600;letter-spacing:-.01em}
.top-s{font-size:12px;opacity:.85}
.top-r{display:flex;align-items:center;gap:10px;flex:none;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;justify-content:center;height:34px;padding:0 14px;border-radius:var(--r-md);
  border:1px solid transparent;text-decoration:none;cursor:pointer;font-family:inherit;line-height:1;font-weight:600;font-size:13px;transition:all .16s ease-out}
.btn:active{transform:scale(.96)}
.btn.ghost{background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.25)}
.btn.ghost:hover{background:rgba(255,255,255,.22)}
.btn.ghost[aria-current=page]{background:#fff;color:var(--brand-deep)}
.btn.primary{background:var(--brand-deep);color:#fff}
.btn.primary:hover{background:var(--brand)}
.btn.line{background:#fff;color:var(--brand-deep);border-color:var(--border)}
.btn.line:hover{background:#eef4fb}
main{flex:1;padding:24px;max-width:1280px;width:100%;margin:0 auto;display:flex;flex-direction:column;gap:24px}
.bar{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.stamp{font-size:12px;color:var(--muted)}
.stamp b{color:var(--fg);font-weight:600}
.fdot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:1px}
.f-live{background:#1fa055}.f-snap{background:#b8c0cb}.f-dark{background:#b45309}
.kpis{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
.kpi{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:18px 20px;box-shadow:var(--sh-sm);display:flex;flex-direction:column;gap:6px}
.kpi-l{font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.kpi-v{font-size:30px;font-weight:600;letter-spacing:-.03em;font-variant-numeric:tabular-nums;line-height:1}
.kpi-v small{font-size:13px;font-weight:500;color:var(--muted);letter-spacing:0}
.kpi-d{font-size:12px;color:var(--muted)}
.kpi.alert .kpi-v{color:var(--err)}
.kpi.good .kpi-v{color:var(--ok)}
.dup{color:var(--err);font-weight:600}.ddn{color:var(--ok);font-weight:600}.dflat{color:var(--muted)}
.panel{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:20px;box-shadow:var(--sh-sm);display:flex;flex-direction:column;gap:12px}
.panel-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.panel-h h2{font-size:15.5px}
.panel-n{font-size:12px;font-weight:600;color:var(--muted);background:#eef3f8;padding:3px 9px;border-radius:999px}
.panel-d{margin:0;font-size:12.5px;color:var(--muted);max-width:78ch}
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{text-align:left;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:0 12px 8px;white-space:nowrap;border-bottom:1px solid var(--border)}
.tbl td{padding:9px 12px;border-bottom:1px solid #eef2f6;vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl tbody tr:hover{background:#f8fbfd}
.num{font-variant-numeric:tabular-nums;white-space:nowrap}
.sub{font-size:11.5px;color:var(--muted)}
.lnk{color:var(--brand);text-decoration:none;font-size:12px;font-weight:600}
.lnk:hover{text-decoration:underline}
.chip{display:inline-block;font-size:11px;font-weight:600;padding:3px 9px;border-radius:999px;white-space:nowrap}
.c-high{background:var(--err-bg);color:var(--err)}.c-elev{background:var(--warn-bg);color:var(--warn)}
.c-low{background:var(--ok-bg);color:var(--ok)}.c-na{background:#eef1f4;color:var(--muted)}
/* rate sheet */
.rates-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.rate-card{border:1px solid #e3e8ef;border-radius:10px;padding:10px 12px;background:#fbfcfe;overflow-x:auto}
.rate-h{font-weight:700;font-size:13.5px;color:#14263c}
.rate-s{font-size:11px;color:#6b7686;margin:2px 0 8px}
.rate-tbl th,.rate-tbl td{padding:4px 8px;font-size:12.5px}
.rate-tbl tr.over td{color:var(--err)}
.rate-tbl tr.sweet td{background:#eaf6ee}
.limit-tag{display:inline-block;font-size:9.5px;font-weight:700;background:var(--err);color:#fff;padding:1px 5px;border-radius:4px;margin-left:5px;letter-spacing:.03em;vertical-align:1px}
.rates-note{font-size:11.5px;color:#6b7686;margin-top:6px;max-width:100ch}
.lockseg{display:inline-flex;gap:4px;align-items:center;vertical-align:middle;margin:0 2px;flex-wrap:wrap}
.lockbtn{border:1px solid #d5dce5;background:#fff;border-radius:999px;padding:2px 9px;font-size:11px;font-weight:600;cursor:pointer;color:#3c4757}
.lockbtn.on{background:#1a56b0;border-color:#1a56b0;color:#fff}
.lockbtn:hover:not(.on){background:#eef3f9}
.lockbtn:disabled{opacity:.4;cursor:not-allowed}
.fwdlab{display:inline-flex;align-items:center;font-weight:600}
.fwdlab input{width:110px;height:26px;padding:0 8px;border:1px solid var(--border);border-radius:var(--r-sm);font:inherit;font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;background:#fff;color:var(--fg)}
/* lock-period cards for the two live specials */
.lock-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.lc{border:1px solid var(--border);border-radius:10px;padding:12px 14px;background:#fbfcfe;position:relative}
.lc.over{background:#fff5f4;border-color:#f2c4c4}
.lc .l{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.lc .v{font-size:24px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.1;margin-top:4px}
.lc.over .v{color:var(--err)}
.lc .d{font-size:11.5px;color:var(--muted);margin-top:4px}
.lc .o{font-size:10.5px;font-weight:700;color:var(--err);margin-top:3px}
.spec-h{display:flex;align-items:center;gap:8px;margin:6px 0 8px;font-weight:600;font-size:13.5px}
.spec-h .rb{background:var(--ink);color:#fff;padding:2px 9px;border-radius:6px;font-size:12.5px}
/* day-by-day */
.hs-row{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:6px 0}
.hs-lab{font-size:12px;color:#5b6b7c;display:inline-flex;gap:6px;align-items:center}
.hsel{border:1px solid #d5dce5;border-radius:8px;background:#fff;padding:5px 8px;font:inherit;font-size:12.5px;color:#22303f}
#hsBars svg{width:100%;height:auto;display:block}
#hsBars .grid{stroke:#e6ebf1;stroke-width:1}
#hsBars .axis{font-size:11px;fill:#7a8896}
#hsBars .blab{font-size:11px;font-weight:600}
.ptog{margin-left:auto;width:28px;height:28px;border-radius:8px;border:1px solid #cdd6e0;background:#fff;color:#0067a5;font-size:13px;cursor:pointer;flex:none}
.ptog:hover{background:#eaf3fa;border-color:#0067a5}
/* competition */
.comp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;margin-top:6px}
.comp-card{border:1px solid #d6e0ea;border-radius:11px;padding:12px 14px;background:#fff;display:flex;flex-direction:column;gap:6px}
.comp-b{font-weight:600;font-size:13.5px;color:#1a2744}
.comp-o{font-size:12.5px;line-height:1.5;color:#31404f}
.comp-t{display:inline-block;font-size:10.5px;font-weight:600;letter-spacing:.03em;padding:2px 7px;border-radius:7px;background:#e0f2fe;color:#0067a5;margin-right:2px}
.read{border-left:3px solid var(--brand);padding:8px 14px;background:#f8fbfd;border-radius:0 8px 8px 0;font-size:13px;max-width:90ch}
.read b{display:block;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:2px}
/* build your promo (same classes the promo module renders) */
.promo-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:14px 0 4px}
.promo-r2{margin-top:10px;padding-top:12px;border-top:1px dashed var(--border)}
.pf label{display:block;font-size:11.5px;color:var(--muted);margin-bottom:4px;font-weight:600}
.pf select,.pf input{width:100%;height:34px;padding:0 9px;border:1px solid var(--border);border-radius:var(--r-md);font:inherit;font-size:13px;background:#fff;color:var(--fg)}
.pm-empty{margin:18px 0 6px;padding:16px;border:1px dashed var(--border);border-radius:var(--r-lg);color:var(--muted);font-size:13px;text-align:center}
.pm-card{border:1px solid var(--border);border-radius:var(--r-lg);background:#fbfcfe;padding:14px 16px;margin-top:14px;box-shadow:var(--sh-sm)}
.pm-card.off{opacity:.75}
.pm-na{margin-top:8px;font-size:12.5px;color:var(--err)}
.pm-tag{display:inline-block;font-size:11px;font-weight:700;padding:3px 9px;border-radius:var(--r-sm);letter-spacing:.03em}
.t-va{background:var(--ok-bg);color:var(--ok)}.t-fha{background:#e2f1fb;color:var(--brand-deep)}.t-conv{background:var(--warn-bg);color:var(--warn)}
.pm-two{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:12px}
@media(max-width:760px){.pm-two{grid-template-columns:1fr}}
.pm-h{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:6px}
.pm-big{font-size:26px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-bottom:8px}
.pm-big span{font-size:13px;font-weight:500;color:var(--muted)}
.pm-rows div{display:flex;justify-content:space-between;gap:12px;font-size:12.5px;padding:2.5px 0}
.pm-rows div span:first-child{color:var(--muted)}
.pm-rows div span:last-child{font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap}
.pm-rows .pm-tot{border-top:1px solid var(--border);margin-top:5px;padding-top:6px;font-weight:600}
.pm-rows .pm-tot span:first-child{color:var(--fg)}
.pm-side{border-left:1px dashed var(--border);padding-left:18px}
@media(max-width:760px){.pm-side{border-left:0;padding-left:0;border-top:1px dashed var(--border);padding-top:12px}}
.pm-cost{margin-top:10px;font-size:24px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--brand-deep)}
.pm-cost span{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.pm-pct{font-size:12px;color:var(--muted);margin-top:3px}
.pm-split{font-size:11.5px;color:var(--muted);margin-top:4px;font-variant-numeric:tabular-nums}
.pm-warn{margin-top:10px;background:var(--warn-bg);color:var(--warn);border-radius:var(--r-md);padding:8px 11px;font-size:12px}
.pm-fine{margin-top:14px;font-size:11.5px;color:var(--muted);max-width:90ch;line-height:1.5}
.pm-ipc{margin-top:10px;border-radius:var(--r-md);padding:8px 12px;font-size:12.5px;line-height:1.5}
.pm-ipc.ok{background:#e8f5ec;color:#14532d;border:1px solid #bfe3cb}
.pm-ipc.over{background:#fdeaea;color:#7f1d1d;border:1px solid #f2c4c4;font-weight:500}
.pm-disc{margin-top:10px;border:1px solid #d8dee9;border-left:3px solid #0076bc;border-radius:var(--r-md);padding:10px 12px;font-size:12px;line-height:1.55;color:#3b4658;background:#fff}
.foot{padding:8px 0 4px;color:var(--muted);font-size:12px;display:flex;flex-direction:column;gap:6px}
.foot-fine{font-size:11px;line-height:1.5;max-width:110ch}
@media (max-width:760px){
  .top{flex-wrap:wrap;padding:10px 14px;row-gap:8px}
  .top-l{width:100%;gap:10px}.top-logo{height:20px}.top-t{font-size:13.5px}.top-s{font-size:11px}
  .top-r{width:100%;gap:6px}.btn{height:30px;padding:0 10px;font-size:12px}
  main{padding:14px;gap:14px}.kpis{grid-template-columns:repeat(2,1fr);gap:10px}.kpi-v{font-size:24px}.panel{padding:14px}
}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* ---------- market pages ---------- */
.mc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:12px}
.mc-grid .pm-card{margin-top:0}
.hero{background:linear-gradient(135deg,var(--ink) 0%,#1f3a63 100%);color:#fff;border-radius:var(--r-lg);padding:26px 28px;display:grid;grid-template-columns:1fr auto;gap:20px;align-items:center}
.hero h1{font-size:26px;letter-spacing:-.02em}
.hero p{margin:6px 0 0;opacity:.85;max-width:70ch;font-size:13.5px}
.hero .hk{display:flex;gap:10px;flex-wrap:wrap}
.hero .hk div{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.18);border-radius:10px;padding:10px 14px;min-width:120px}
.hero .hk b{display:block;font-size:22px;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.hero .hk span{font-size:11px;text-transform:uppercase;letter-spacing:.06em;opacity:.8}
@media(max-width:760px){.hero{grid-template-columns:1fr}}
.comm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.comm{border:1px solid var(--border);border-radius:10px;padding:12px 14px;background:#fbfcfe}
.comm b{display:block;font-size:14px}
.comm .sub{display:block;margin-top:2px}
.team{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.tm{border:1px solid var(--border);border-radius:10px;padding:14px;background:#fbfcfe}
.tm b{display:block;font-size:14px}
.tm .role{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}
.tm a{font-size:12.5px;display:block;margin-top:4px}
/* I have a buyer */
.bp-btn{position:fixed;right:20px;bottom:20px;z-index:60;background:var(--gold);color:#1a2744;border:0;border-radius:999px;padding:12px 18px;font-weight:700;font-size:14px;box-shadow:var(--sh-md)}
.bp-btn:hover{filter:brightness(1.05)}
.buyer-scrim{position:fixed;inset:0;background:rgba(26,39,68,.45);z-index:70;display:none}
.buyer-scrim.open{display:block}
.buyer-panel{position:fixed;top:0;right:0;height:100vh;width:min(440px,100vw);background:#fff;z-index:80;transform:translateX(100%);transition:transform .2s ease-out;box-shadow:-12px 0 32px rgba(26,39,68,.25);overflow:auto;display:flex;flex-direction:column}
.buyer-panel.open{transform:none}
.bp-head{padding:18px 20px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.bp-head h3{font-size:17px}.bp-head p{margin:4px 0 0;font-size:12.5px;color:var(--muted)}
.bp-x{border:0;background:none;font-size:22px;line-height:1;cursor:pointer;color:var(--muted)}
.bp-body{padding:16px 20px;display:flex;flex-direction:column;gap:10px}
.bp-body label{font-size:11.5px;font-weight:600;color:var(--muted)}
.bp-body input,.bp-body select,.bp-body textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:var(--r-md);font:inherit;font-size:13.5px}
.bp-msg{font-size:12.5px;color:var(--fg);min-height:18px}
