/* ═══════════════════════════════════════════════════════════════
 SitePath Intelligence — Shared Stylesheet
 ═══════════════════════════════════════════════════════════════ */
/* Fonts (Geist / Geist Mono / Fraunces) load via a non-blocking <link> —
   injected by site-chrome.js on chrome pages, and placed directly in the
   <head> of the two standalone pages that don't load it (accept-invite.html,
   redeem-referral.html). A render-blocking CSS @import here used to serialize
   the font fetch behind main.css and cost ~10 Lighthouse perf points; do not
   reintroduce it. */
*{box-sizing:border-box;margin:0;padding:0}
:root{
 --navy:#0a1628;--navy2:#0f1e38;
 --blue:#0077b6;--sky:#0096c7;--sky2:#48cae4;
 --green:#16a34a;--green2:#15803d;
 --red:#dc2626;--amber:#d97706;
 --text:#111;--text2:#374151;--text3:#64748b;--text4:#94a3b8;
 --border:#e2e8f0;--border2:#f0f0f0;
 --surface:#fff;--bg:#f1f5f9;
}
html{height:100%}
body{font-family:'Geist',ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:var(--text);line-height:1.5;background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:'ss03','cv11'}
.serif,.display-serif{font-family:'Fraunces',Georgia,serif;font-weight:500;letter-spacing:-0.015em;font-feature-settings:'ss01'}
.mono{font-family:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-feature-settings:'cv02','ss01'}
.serif{font-family:'Instrument Serif',Georgia,serif;font-weight:400;letter-spacing:-0.01em}
a{color:var(--sky);text-decoration:none}
a:hover{text-decoration:underline}
button{font-family:inherit;cursor:pointer}

/* ── TOPBAR ──────────────────────────────────────────────── */
.topbar{
 display:flex;align-items:center;justify-content:space-between;
 padding:0 16px;height:52px;
 background:var(--navy);
 border-bottom:1px solid rgba(255,255,255,0.06);
 flex-shrink:0;z-index:600;position:relative;
}
.t-logo{display:flex;align-items:center;gap:9px;text-decoration:none;flex-shrink:0}
.t-logo:hover{opacity:0.88}
.t-logo-img{width:32px;height:32px;display:block;flex-shrink:0}
.t-logo-text{display:flex;flex-direction:column;gap:0}
.t-logo-name{font-size:14px;font-weight:800;color:#fff;letter-spacing:-0.3px;line-height:1.1}
.t-logo-name span{color:var(--sky2)}
.t-logo-sub{font-size:9px;font-weight:600;color:rgba(255,255,255,0.3);letter-spacing:2px;text-transform:uppercase}
.t-nav{display:flex;align-items:center;gap:1px;margin:0 8px}
.t-navlink{font-size:12px;font-weight:500;color:rgba(255,255,255,0.55);padding:5px 11px;border-radius:5px;text-decoration:none;transition:all 0.15s;white-space:nowrap}
.t-navlink:hover{color:#fff;background:rgba(255,255,255,0.08);text-decoration:none}
.t-navlink.active{color:#fff;background:rgba(255,255,255,0.1);font-weight:600}
.t-right{display:flex;gap:6px;align-items:center;flex-shrink:0}
.user-pill{font-size:11px;padding:3px 10px;border-radius:20px;background:rgba(74,222,128,0.15);color:#4ade80;border:1px solid rgba(74,222,128,0.3);display:none;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}
.user-pill.show{display:block}
.btn-nav{font-size:12px;font-weight:600;padding:5px 14px;border-radius:6px;background:var(--green);color:#fff;border:none;transition:background 0.15s}
.btn-nav:hover{background:var(--green2)}
.btn-nav-ghost{font-size:12px;padding:5px 11px;border-radius:6px;background:rgba(255,255,255,0.08);color:rgba(255,255,255,0.65);border:1px solid rgba(255,255,255,0.12);transition:all 0.15s}
.btn-nav-ghost:hover{color:#fff;background:rgba(255,255,255,0.14)}
.hamburger{display:none;flex-direction:column;gap:4px;background:none;border:none;padding:4px;cursor:pointer}
.hamburger span{display:block;width:18px;height:1.5px;background:rgba(255,255,255,0.6)}

/* ── MOBILE NAV ──────────────────────────────────────────── */
.mobile-drawer{display:none;position:fixed;top:52px;left:0;right:0;background:var(--navy);border-bottom:1px solid rgba(255,255,255,0.08);z-index:599;padding:6px 0}
.mobile-drawer.open{display:block}
.mobile-drawer a{display:block;padding:11px 20px;font-size:13px;color:rgba(255,255,255,0.7);text-decoration:none;border-bottom:1px solid rgba(255,255,255,0.05)}
.mobile-drawer a:hover{color:#fff;background:rgba(255,255,255,0.05)}

/* ── PILLS ───────────────────────────────────────────────── */
.pill{font-size:10px;padding:2px 7px;border-radius:10px;font-weight:600;display:inline-block}
.pg{background:#dcfce7;color:#166534}.py{background:#fef9c3;color:#854d0e}
.po{background:#ffedd5;color:#9a3412}.pr{background:#fee2e2;color:#991b1b}.pgy{background:#f1f5f9;color:var(--text2)}

/* ── MODALS ──────────────────────────────────────────────── */
.overlay{position:fixed;inset:0;background:rgba(10,22,40,0.9);backdrop-filter:blur(6px);z-index:2000;display:none;align-items:center;justify-content:center;padding:16px}
.overlay.show{display:flex}
.modal{background:#fff;border-radius:14px;width:100%;max-width:400px;box-shadow:0 20px 60px rgba(0,0,0,0.3);overflow:hidden}
.modal-head{padding:24px 24px 14px;text-align:center}
.modal-icon{font-size:32px;margin-bottom:10px}
.modal-head h2{font-size:17px;font-weight:800;color:var(--navy);margin-bottom:6px}
.modal-head p{font-size:12px;color:var(--text3);line-height:1.6}
.modal-body{padding:0 22px 22px}
.m-btn{width:100%;padding:11px;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;border:none;margin-bottom:6px;transition:all 0.15s;font-family:inherit}
.mb-green{background:var(--green);color:#fff}.mb-green:hover{background:var(--green2)}
.mb-navy{background:var(--navy);color:#fff}.mb-navy:hover{background:var(--navy2)}
.mb-sky{background:var(--sky);color:#fff}.mb-sky:hover{background:var(--blue)}
.mb-ghost{background:#f1f5f9;color:var(--text2)}.mb-ghost:hover{background:var(--border)}
.m-or{display:flex;align-items:center;gap:8px;margin:3px 0 8px;color:var(--border);font-size:11px}
.m-or::before,.m-or::after{content:'';flex:1;height:1px;background:#f1f5f9}
.m-note{font-size:11px;color:var(--text4);text-align:center;margin-top:6px;line-height:1.55}
.m-note a{color:var(--sky)}

/* ── PAGE LAYOUTS ────────────────────────────────────────── */
.page-shell{max-width:860px;margin:0 auto;padding:48px 24px 80px}
.page-header{margin-bottom:32px}
.page-title{font-size:24px;font-weight:800;color:var(--navy);margin-bottom:6px;letter-spacing:-0.3px}
.page-sub{font-size:14px;color:var(--text3);line-height:1.65;max-width:600px}
.page-hero{background:var(--navy);padding:48px 32px;text-align:center}
.page-hero h1{font-size:clamp(24px,4vw,40px);font-weight:800;color:#fff;margin-bottom:10px;letter-spacing:-0.5px}
.page-hero p{font-size:14px;color:rgba(255,255,255,0.55);max-width:520px;margin:0 auto;line-height:1.7}

/* ── CARDS ───────────────────────────────────────────────── */
.card{background:#fff;border:1px solid var(--border);border-radius:10px;padding:24px}
.card+.card{margin-top:16px}
.card h2{font-size:16px;font-weight:700;color:var(--navy);margin-bottom:10px}
.card p{font-size:13px;color:var(--text2);line-height:1.75;margin-bottom:10px}
.card p:last-child{margin:0}

/* ── SITE FOOTER ─────────────────────────────────────────── */
.site-footer{border-top:1px solid var(--border);padding:24px 32px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;background:#fff}
.sf-brand{font-size:13px;font-weight:800;color:var(--navy)}
.sf-brand span{color:var(--sky)}
.sf-links{display:flex;gap:20px;flex-wrap:wrap}
.sf-links a{font-size:12px;color:var(--text4);text-decoration:none;transition:color 0.15s}
.sf-links a:hover{color:var(--text2)}
.sf-legal{font-size:12px;color:var(--text4)}

/* ── COOKIE BANNER ───────────────────────────────────────── */
#cookieBanner{display:none;position:fixed;bottom:0;left:0;right:0;z-index:900;background:#fff;border-top:1px solid var(--border);padding:12px 24px}
.cb-inner{display:flex;align-items:center;gap:16px;flex-wrap:wrap;max-width:1000px;margin:0 auto}
.cb-text{font-size:12px;color:var(--text3);flex:1;min-width:240px;line-height:1.5}
.cb-text a{color:var(--sky)}
.cb-btns{display:flex;gap:8px;flex-shrink:0}
.cb-btn{font-size:12px;font-weight:600;padding:6px 14px;border-radius:5px;cursor:pointer;font-family:inherit;transition:all 0.15s}
.cb-essential{background:transparent;color:var(--text3);border:1px solid var(--border)}.cb-essential:hover{border-color:var(--text4);color:var(--text2)}
.cb-accept{background:var(--green);color:#fff;border:none}.cb-accept:hover{background:var(--green2)}

/* ═══════════════════════════════════════════════════════════
 SHARED DATA-TABLE UI (SPUI) — used by data-centers / bess /
 projects pages. Skeletons, accessible focus, responsive card
 tables, active-filter pills, collapsible analytics sections.
 ═══════════════════════════════════════════════════════════ */

/* Screen-reader-only utility */
.sp-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* Eyebrow / kicker — small label above a page or section title */
.sp-eyebrow{font-size:11px;font-weight:700;letter-spacing:0.14em;text-transform:uppercase;color:var(--blue);margin-bottom:8px}

/* Qualitative value card — replaces raw-count KPI cards on coverage
   layers that aren't yet nationally complete, so we lead with the value
   proposition (nationwide / sourced / fresh) rather than small totals. */
.sp-valuecard{background:#fff;border:1px solid var(--border);border-radius:10px;padding:15px 17px}
.sp-valuecard .sp-vc-lbl{font-size:14px;font-weight:800;color:var(--navy);letter-spacing:-0.1px;margin-bottom:5px}
.sp-valuecard .sp-vc-sub{font-size:12px;color:var(--text3);line-height:1.5}

/* Visible focus ring for keyboard users on interactive surfaces
   (rows, sortable headers, stat cards, chips). Mouse clicks don't
   trigger :focus-visible, so this stays out of the way for them. */
.sp-focusable:focus-visible,
th.sortable:focus-visible,
tr[data-activate]:focus-visible,
.sp-statcard:focus-visible{outline:3px solid var(--blue);outline-offset:2px;border-radius:8px}
tr[data-activate]:focus-visible{outline-offset:-3px}

/* See more / Show less — caps long lists so a section doesn't scroll
   forever before the next one. */
.sp-hidden{display:none!important}
.sp-more-ctrl{margin-top:12px;text-align:center}
.sp-more-row>td{text-align:center;padding:12px 10px!important;border-bottom:none!important}
.sp-more-btn{font-size:12px;font-weight:600;color:var(--blue);background:transparent;border:1px solid #dbe3ef;padding:7px 16px;border-radius:8px;cursor:pointer;font-family:inherit}
.sp-more-btn:hover{background:#eff6ff;border-color:#bfdbfe}
.sp-more-btn::after{content:" ↓";opacity:0.7}
.sp-more-btn[aria-expanded="true"]::after{content:" ↑"}
body.sp-editorial .sp-more-btn{color:var(--accent);border-color:var(--rule-strong);border-radius:6px}
body.sp-editorial .sp-more-btn:hover{background:var(--paper2)}

/* Loading skeleton shimmer */
@keyframes sp-shimmer{0%{background-position:-400px 0}100%{background-position:400px 0}}
.sp-skel{display:inline-block;height:12px;border-radius:6px;background:#f1f5f9;background-image:linear-gradient(90deg,#f1f5f9 0px,#f1f5f9 200px,#f1f5f9 400px);background-size:800px 100%;animation:sp-shimmer 1.4s infinite linear}
.sp-skel-row td{padding:12px 10px!important}
@media (prefers-reduced-motion: reduce){.sp-skel{animation:none}}

/* Active-filter pills */
.sp-fpills{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.sp-fpill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:4px 6px 4px 11px;border-radius:16px;background:#eff6ff;color:var(--blue);border:1px solid #bfdbfe;cursor:pointer;font-family:inherit;line-height:1.4}
.sp-fpill:hover{background:#dbeafe}
.sp-fpill-x{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(29,78,216,0.12);font-size:13px;line-height:1}
.sp-fpill-clear{background:transparent;color:var(--text3);border:1px solid transparent;text-decoration:underline;padding:4px 8px}
.sp-fpill-clear:hover{background:#f1f5f9;color:var(--navy);text-decoration:none}

/* Collapsible analytics section (native <details>) */
.sp-collapse{background:#fff;border:1px solid var(--border);border-radius:12px;margin-bottom:18px;overflow:hidden}
.sp-collapse>summary{list-style:none;cursor:pointer;padding:16px 22px;display:flex;align-items:center;gap:10px;font-size:15px;font-weight:800;color:var(--navy);user-select:none}
.sp-collapse>summary::-webkit-details-marker{display:none}
.sp-collapse>summary:hover{background:#f9fafb}
.sp-collapse>summary:focus-visible{outline:3px solid var(--blue);outline-offset:-3px}
.sp-collapse>summary .sp-chev{margin-left:auto;transition:transform .18s ease;color:var(--text4);flex-shrink:0}
.sp-collapse[open]>summary .sp-chev{transform:rotate(180deg)}
.sp-collapse>summary .sp-sum-sub{font-size:12px;font-weight:500;color:var(--text3)}
.sp-collapse-body{padding:0 22px 20px}

/* Responsive "card" table: below 720px each row becomes a stacked
   card and every cell shows its column label — so we never hide
   primary columns (Status, Capacity) on phones. Opt in by adding
   class "sp-cardable" to the <table> and data-label on each <td>. */
@media (max-width: 720px){
 table.sp-cardable thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
 table.sp-cardable,table.sp-cardable tbody,table.sp-cardable tr,table.sp-cardable td{display:block;width:100%}
 table.sp-cardable tr{border:1px solid var(--border);border-radius:10px;margin-bottom:10px;padding:6px 4px;background:#fff}
 table.sp-cardable tr.sp-skel-row{padding:10px}
 table.sp-cardable td{border:none!important;padding:6px 12px!important;display:flex;justify-content:space-between;align-items:baseline;gap:14px;text-align:right}
 table.sp-cardable td::before{content:attr(data-label);text-align:left;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:0.5px;color:var(--text3);flex-shrink:0}
 table.sp-cardable td[data-label=""]::before,table.sp-cardable td:not([data-label])::before{content:none}
 table.sp-cardable td.sp-card-primary{display:block;text-align:left;font-size:14px;padding-top:10px!important}
 table.sp-cardable td.sp-card-primary::before{display:block;margin-bottom:2px}
 table.sp-cardable .hide-mobile{display:flex!important}
 /* Full-width utility rows (empty / loading / no-match) span the card. */
 table.sp-cardable td[colspan]{display:block!important;text-align:center}
 table.sp-cardable td[colspan]::before{content:none}
}

/* ── RESPONSIVE ──────────────────────────────────────────── */
@media(max-width:768px){
 .t-nav{display:none}
 .hamburger{display:flex}
 .page-shell{padding:32px 16px 60px}
 .site-footer{padding:20px 16px}
 .sf-links{display:none}
}
@media print{
 .topbar,.mobile-drawer,.site-footer,#cookieBanner,.overlay{display:none!important}
}

/* ═══════════════════════════════════════════════════════════
 EDITORIAL THEME (light) — opt in with <body class="sp-editorial">
 Used by data-centers / bess / projects. Serif-led, warm-paper,
 magazine-rule aesthetic that leans on the Fraunces brand face.
 Scoped under body.sp-editorial so it outranks each page's own
 scoped <style> without needing !important.
 ═══════════════════════════════════════════════════════════ */
body.sp-editorial{
 --paper:#f6f3ec; --paper2:#efeae0;
 --ink:#161b22; --ink-soft:#53535f; --ink-mute:#8a8794;
 --rule:#e6dfd2; --rule-strong:#d7cebd;
 --card:#ffffff; --accent:var(--blue); --accent-deep:var(--navy);
 background:var(--paper); color:var(--ink);
}

/* ── Display headings → Fraunces serif ─────────────────────── */
body.sp-editorial .dc-title,
body.sp-editorial .pp-title{
 font-family:'Fraunces',Georgia,serif;font-weight:560;
 font-size:clamp(28px,3.4vw,38px);letter-spacing:-0.02em;line-height:1.1;color:var(--ink);
}
body.sp-editorial .dc-sub,
body.sp-editorial .pp-sub{color:var(--ink-soft);font-size:15px;line-height:1.62;max-width:760px}
body.sp-editorial .dc-sub strong,
body.sp-editorial .pp-sub strong{color:var(--ink)}
/* Editorial eyebrow → mono kicker with a short accent rule */
body.sp-editorial .sp-eyebrow{font-family:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;letter-spacing:0.16em;color:var(--accent);display:flex;align-items:center;gap:9px;margin-bottom:11px}
body.sp-editorial .sp-eyebrow::before{content:"";width:20px;height:2px;background:var(--accent);flex-shrink:0}
/* Masthead hairline under the page header */
body.sp-editorial .dc-header,
body.sp-editorial .pp-header{border-bottom:1px solid var(--rule-strong);padding-bottom:20px;margin-bottom:24px}
/* Title icon chip → warm, squared */
body.sp-editorial .dc-title>span:first-child{background:var(--paper2);color:var(--accent-deep);border-radius:7px}

/* ── Surfaces → warm paper-white + hairline + small radius ─── */
body.sp-editorial .dc-section,
body.sp-editorial .sp-collapse,
body.sp-editorial .insight-card,
body.sp-editorial .dc-rollup-card,
body.sp-editorial .pp-stat,
body.sp-editorial .pp-table-wrap,
body.sp-editorial .pp-filters{background:var(--card);border-color:var(--rule);border-radius:7px}
body.sp-editorial .dc-section{box-shadow:none;padding:22px 24px}
body.sp-editorial .dc-card{border-radius:6px}

/* ── Section headers serif + accent rule ───────────────────── */
body.sp-editorial .dc-section>h2,
body.sp-editorial .sp-collapse>summary{font-family:'Fraunces',Georgia,serif;font-weight:560;font-size:20px;letter-spacing:-0.01em;color:var(--ink)}
body.sp-editorial .dc-section>h2{padding-left:13px;border-left:3px solid var(--accent);line-height:1.15}
body.sp-editorial .h-sub,
body.sp-editorial .sp-sum-sub{color:var(--ink-mute)}

/* ── KPI numerals → big serif figures ──────────────────────── */
body.sp-editorial .dc-card .val,
body.sp-editorial .pp-stat .val{font-family:'Fraunces',Georgia,serif;font-weight:500;font-size:34px;letter-spacing:-0.015em}
body.sp-editorial .dc-card .lbl,
body.sp-editorial .pp-stat .lbl{letter-spacing:0.09em;color:var(--ink-mute);font-weight:700}
body.sp-editorial .sp-valuecard{background:var(--card);border-color:var(--rule);border-radius:7px}
body.sp-editorial .sp-valuecard .sp-vc-lbl{font-family:'Fraunces',Georgia,serif;font-weight:560;font-size:17px;color:var(--ink)}
body.sp-editorial .sp-valuecard .sp-vc-sub{color:var(--ink-mute)}

/* ── Tables → taller rows, hairline rules, serif primary cell ─ */
body.sp-editorial .dc-table th,
body.sp-editorial .pp-table th{color:var(--ink-mute);letter-spacing:0.09em;font-weight:700;background:transparent;border-bottom:1.5px solid var(--ink)}
body.sp-editorial .dc-table td,
body.sp-editorial .pp-table td{border-bottom:1px solid var(--rule);padding-top:13px;padding-bottom:13px}
body.sp-editorial .dc-table tr.clickable:hover td,
body.sp-editorial .pp-table tr:hover td{background:var(--paper2)}
body.sp-editorial .col-county,
body.sp-editorial .pp-name{font-family:'Fraunces',Georgia,serif;font-weight:500;font-size:15px;color:var(--ink)}
body.sp-editorial .col-state{color:var(--ink-mute)}

/* ── Inputs / buttons / chips → warm, squared ──────────────── */
body.sp-editorial .dc-search input,
body.sp-editorial .dc-state,
body.sp-editorial .pp-filters input,
body.sp-editorial .pp-filters select,
body.sp-editorial .btn-clear,
body.sp-editorial .pp-pagination button{border-color:var(--rule-strong);border-radius:6px;background:var(--card);color:var(--ink)}
body.sp-editorial .dc-search input:focus,
body.sp-editorial .dc-state:focus,
body.sp-editorial .pp-filters input:focus,
body.sp-editorial .pp-filters select:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(29,78,216,0.12)}
body.sp-editorial .dc-chip{border-radius:5px;border-color:var(--rule-strong);color:var(--ink-soft)}
body.sp-editorial .dc-chip:hover{border-color:var(--ink);color:var(--ink)}
body.sp-editorial .dc-chip.active{background:var(--accent-deep);border-color:var(--accent-deep);color:#fff}

/* ── Badges → squarer, lighter ─────────────────────────────── */
body.sp-editorial .dc-badge,
body.sp-editorial .pp-badge,
body.sp-editorial .dc-sentiment,
body.sp-editorial .dc-traj,
body.sp-editorial .pp-tech,
body.sp-editorial .dc-flag{border-radius:4px}

/* ── Integrity note → editorial pull-quote ─────────────────── */
body.sp-editorial .pp-integrity{background:transparent;border:none;border-left:3px solid var(--accent);border-radius:0;padding:6px 0 6px 16px;color:var(--ink-soft);font-size:13px}
body.sp-editorial .pp-integrity>summary{font-family:'Fraunces',Georgia,serif;font-style:italic;font-weight:500;color:var(--ink)}
body.sp-editorial .pp-integrity>summary::before{color:var(--accent)}

/* ── Active-filter pills + results meta ────────────────────── */
body.sp-editorial .sp-fpill{background:var(--paper2);border-color:var(--rule-strong);color:var(--accent-deep);border-radius:5px}
body.sp-editorial .sp-fpill-x{background:rgba(10,22,40,0.08)}
body.sp-editorial .pp-results-meta,
body.sp-editorial .muted,
body.sp-editorial .pp-county{color:var(--ink-soft)}
body.sp-editorial .pp-pagination{background:var(--paper);border-top-color:var(--rule)}

/* ── Skeleton tuned to warm paper ──────────────────────────── */
body.sp-editorial .sp-skel{background:#ece6da;background-image:linear-gradient(90deg,#ece6da 0,#f4efe5 200px,#ece6da 400px)}

/* ═══════════════════════════════════════════════════════════
 INTEL PAGES (data-centers.html / bess.html) — shared layer.
 Both pages are twins; these styles used to be copy-pasted inline
 in each. Single source of truth now. "dc-" prefix is shared by
 both the Data Center and Energy Storage trackers.
 ═══════════════════════════════════════════════════════════ */

/* ── Hero ─────────────────────────────────────────────────── */
.dc-hero{background:linear-gradient(180deg,#f9fafb 0%,#fff 78%);border-bottom:1px solid var(--border)}
.dc-hero-in{max-width:1180px;margin:0 auto;padding:46px 28px 30px}
.dc-eyebrow{font-size:11px;font-weight:600;color:var(--text3);letter-spacing:2.4px;text-transform:uppercase;display:flex;align-items:center;gap:10px;margin-bottom:18px}
.dc-eyebrow i{width:26px;height:1px;background:var(--text4);display:inline-block}
.dc-h1{font-size:clamp(28px,3.4vw,44px);font-weight:700;color:var(--navy);letter-spacing:-0.03em;line-height:1.08;margin:0 0 12px}
.dc-sub{font-size:16px;color:var(--text2);max-width:600px;line-height:1.6;margin:0}
.dc-sub a{color:var(--blue);font-weight:600}

/* ── Page shell ───────────────────────────────────────────── */
.dc-wrap{max-width:1180px;margin:0 auto;padding:0 28px 80px}

/* ── Sticky control bar ───────────────────────────────────── */
/* z-index 50: sits above page content but below the site nav (.topbar
   z-index 600) and the mobile drawer (599), both injected by site-chrome.js. */
.dc-controls{position:sticky;top:0;z-index:50;background:rgba(255,255,255,0.92);backdrop-filter:saturate(180%) blur(8px);-webkit-backdrop-filter:saturate(180%) blur(8px);border-bottom:1px solid var(--border);margin:0 -28px 22px;padding:14px 28px}
.dc-controls-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.dc-search{position:relative;flex:1;min-width:230px}
.dc-search>svg{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--text4);pointer-events:none}
.dc-search input{width:100%;font-size:13.5px;padding:10px 14px 10px 38px;border:1px solid var(--border);border-radius:9px;outline:none;font-family:inherit;color:var(--navy);background:#fff;transition:border-color .12s,box-shadow .12s}
.dc-search input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,0.12)}
.dc-state{font-size:13px;padding:10px 12px;border:1px solid var(--border);border-radius:9px;font-family:inherit;color:var(--navy);background:#fff;cursor:pointer}
.dc-state:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,0.12)}
/* segmented Table/Map toggle */
.dc-seg{display:inline-flex;background:#f1f5f9;border:1px solid var(--border);border-radius:9px;padding:3px;gap:2px;flex-shrink:0}
.dc-seg button{font-size:12.5px;font-weight:600;padding:6px 14px;border-radius:7px;border:none;background:transparent;color:var(--text2);display:inline-flex;align-items:center;gap:6px;transition:all .12s}
.dc-seg button.on{background:#fff;color:var(--navy);box-shadow:0 1px 3px rgba(10,22,40,0.12)}
.dc-seg button:hover:not(.on){color:var(--navy)}
/* status chips */
.dc-chips{display:flex;gap:7px;margin-top:11px;flex-wrap:wrap}
.dc-chip{font-size:12px;background:#fff;border:1px solid var(--border);border-radius:18px;padding:5px 13px;color:var(--text2);font-weight:600;cursor:pointer;transition:all .12s;white-space:nowrap;display:inline-flex;align-items:center;gap:7px;font-family:inherit}
.dc-chip:hover{border-color:var(--navy);color:var(--navy)}
.dc-chip.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.dc-chip .n{font-size:10.5px;font-weight:700;opacity:0.55}
.dc-chip.active .n{opacity:0.8}

/* ── Table ────────────────────────────────────────────────── */
.dc-tablecard{background:#fff;border:1px solid var(--border);border-radius:13px;overflow:hidden;box-shadow:0 1px 2px rgba(10,22,40,0.03)}
.dc-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff}
.dc-table th{text-align:left;color:var(--text3);font-size:10.5px;text-transform:uppercase;letter-spacing:0.6px;padding:13px 16px;border-bottom:1px solid var(--border);font-weight:700;background:#f9fafb;white-space:nowrap}
.dc-table th.sortable{cursor:pointer;user-select:none}
.dc-table th.sortable:hover{color:var(--navy)}
.dc-table th.sortable::after{content:' ⇅';opacity:0.35;font-size:10px}
.dc-table th.sort-asc::after{content:' ↑';opacity:1;color:var(--blue)}
.dc-table th.sort-desc::after{content:' ↓';opacity:1;color:var(--blue)}
.dc-table td{padding:13px 16px;border-bottom:1px solid #f1f5f9;color:#0f172a;vertical-align:top;line-height:1.5}
.dc-table tr.clickable{cursor:pointer;transition:background .08s}
.dc-table tr.clickable:hover td{background:#f9fafb}
.dc-wrap .col-county{font-weight:700;color:var(--navy);font-size:13.5px}
.dc-wrap .col-state{font-weight:700;color:var(--text3);font-size:11px;letter-spacing:0.5px}
.dc-wrap .col-summary{font-size:12.5px;color:var(--text2);line-height:1.55}
/* .muted / .empty are scoped to the intel pages so these generic names
   don't leak onto other pages that use class="empty" without defining it. */
.dc-wrap .muted{color:var(--text4);font-size:11px}

/* status badges */
.dc-badge{display:inline-block;padding:3px 10px;border-radius:7px;font-size:11px;font-weight:700;white-space:nowrap}
.dc-badge.moratorium-active{background:#fee2e2;color:#991b1b}
.dc-badge.ban-enacted{background:#fecaca;color:#7f1d1d}
.dc-badge.proposed-moratorium{background:#fef3c7;color:#92400e}
.dc-badge.proposed-ban{background:#fed7aa;color:#9a3412}
.dc-badge.moratorium-wave{background:#fee2e2;color:#991b1b}
.dc-badge.township-moratorium{background:#fef3c7;color:#854d0e}
.dc-badge.restrictions-tightened{background:#fef3c7;color:#a16207}
.dc-badge.moratorium-expired{background:#dbeafe;color:#3730a3}
.dc-badge.major-market{background:#dbeafe;color:#1e3a8a}
.dc-badge.emerging-market{background:#dcfce7;color:#166534}
.dc-badge.no-activity{background:#f1f5f9;color:var(--text3)}
.dc-badge.standalone-ordinance{background:#dbeafe;color:#1e3a8a}
.dc-badge.combined-with-solar{background:#dcfce7;color:#166534}
.dc-badge.cup-required{background:#dbeafe;color:#3730a3}
.dc-badge.state-preempted{background:#f1f5f9;color:var(--text2)}
.dc-badge.major-deployment{background:#dcfce7;color:var(--green2)}
.dc-badge.state-default{background:#f1f5f9;color:var(--text3)}

/* sentiment / trajectory / concern chips */
.dc-sentiment{display:inline-block;padding:2px 9px;border-radius:7px;font-size:11px;font-weight:700;white-space:nowrap}
.dc-sentiment.supportive{background:#dcfce7;color:var(--green2)}
.dc-sentiment.opposed{background:#fee2e2;color:#991b1b}
.dc-sentiment.contentious{background:#fef3c7;color:#a16207}
.dc-sentiment.mixed{background:#dbeafe;color:#3730a3}
.dc-sentiment.neutral{background:#f1f5f9;color:var(--text2)}
.dc-traj{display:inline-block;padding:2px 9px;border-radius:7px;font-size:11px;font-weight:700;white-space:nowrap}
.dc-traj.tightening{background:#fee2e2;color:#991b1b}
.dc-traj.loosening{background:#dcfce7;color:var(--green2)}
.dc-traj.contentious{background:#fef3c7;color:#a16207}
.dc-traj.stable{background:#f1f5f9;color:var(--text2)}
.dc-flag{display:inline-flex;align-items:center;font-size:11px;padding:2px 8px;border-radius:7px;background:#f1f5f9;color:var(--text2);font-weight:600;margin:1px 3px 1px 0}
.dc-flag.water{background:#dbeafe;color:#1e40af}
.dc-flag.power{background:#fef3c7;color:#854d0e}
.dc-flag.opposition{background:#fee2e2;color:#991b1b}
.dc-flag.tax{background:#dcfce7;color:#166534}
.dc-projcount{display:inline-flex;gap:4px;justify-content:flex-end;font-size:11px;font-weight:700}
.dc-projcount .pp{padding:1px 6px;border-radius:6px;background:#f1f5f9;color:var(--text2)}
.dc-projcount .pp.approved{background:#dcfce7;color:#166534}
.dc-projcount .pp.denied{background:#fee2e2;color:#991b1b}
.dc-projcount .pp.under-construction{background:#dbeafe;color:#1e40af}
.dc-projcount .pp.announced{background:#fef3c7;color:#854d0e}

.dc-wrap .empty{padding:36px 20px;text-align:center;color:var(--text4);font-size:13px}
.dc-table td.empty{border-bottom:none}
.dc-wrap .btn-clear{font-size:12px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:6px 12px;color:var(--text2);cursor:pointer;font-weight:600;font-family:inherit}
.dc-wrap .btn-clear:hover{border-color:var(--navy);color:var(--navy)}

/* ── Map view ─────────────────────────────────────────────── */
.dc-map-wrap{position:relative;height:560px;border-radius:13px;overflow:hidden;border:1px solid var(--border);background:#f9fafb}
.dc-map{position:absolute;inset:0}
.dc-wrap .dc-maphint-txt{font-size:12px;color:var(--text3);margin-top:10px;text-align:center}
.dc-map-legend{position:absolute;bottom:14px;left:14px;background:rgba(255,255,255,0.96);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:11px;line-height:1.7;z-index:401;box-shadow:0 4px 12px rgba(15,23,42,0.06);max-width:230px}
.dc-map-legend-title{font-weight:800;color:var(--navy);text-transform:uppercase;letter-spacing:0.5px;font-size:10px;margin-bottom:6px}
.dc-map-legend-row{display:flex;align-items:center;gap:7px;color:var(--text2)}
.dc-map-legend-dot{display:inline-block;width:10px;height:10px;border-radius:50%;border:1.5px solid rgba(255,255,255,0.9);box-shadow:0 1px 3px rgba(0,0,0,0.25);flex-shrink:0}
.dc-map-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text4);font-size:13px;background:#f9fafb}
.dc-map-hint{position:absolute;top:14px;left:50%;transform:translateX(-50%);background:rgba(15,23,42,0.85);color:#fff;padding:7px 14px;border-radius:18px;font-size:11px;font-weight:600;letter-spacing:0.3px;z-index:402;pointer-events:none;opacity:0;transition:opacity .3s ease}
.dc-map-hint.show{opacity:1}
.dc-map-wrap .leaflet-tooltip{font-size:11px;font-weight:600;line-height:1.45;padding:5px 10px;border:none;border-radius:6px;background:var(--navy);color:#fff;box-shadow:0 6px 16px rgba(10,22,40,0.28)}
.dc-map-wrap .leaflet-tooltip strong{color:#fff;font-weight:800}
.dc-map-wrap .leaflet-tooltip-top:before{border-top-color:var(--navy)}
.dc-map-wrap .leaflet-tooltip-bottom:before{border-bottom-color:var(--navy)}
.dc-map-wrap .leaflet-tooltip-left:before{border-left-color:var(--navy)}
.dc-map-wrap .leaflet-tooltip-right:before{border-right-color:var(--navy)}
.dc-map-popup .leaflet-popup-content-wrapper{border-radius:12px;border:1px solid var(--border);box-shadow:0 16px 40px rgba(10,22,40,0.20);padding:3px}
.dc-map-popup .leaflet-popup-content{margin:14px 16px;font-family:inherit;line-height:1.4}
.dc-map-popup .leaflet-popup-tip{border:1px solid var(--border);box-shadow:0 8px 16px rgba(10,22,40,0.12)}
.dc-map-popup a.leaflet-popup-close-button{color:var(--text4);padding:8px 9px 0 0}
.dcp-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:11px;padding-bottom:10px;border-bottom:1px solid #f1f5f9}
.dcp-county{font-size:15px;font-weight:800;color:var(--navy);letter-spacing:-0.2px}
.dcp-lbl{font-family:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:600;letter-spacing:0.15em;text-transform:uppercase;color:var(--blue);margin-bottom:7px;display:flex;align-items:center;gap:7px}
.dcp-lbl::before{content:"";width:14px;height:2px;background:var(--blue);flex-shrink:0}
.dcp-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.dcp-list li{display:flex;flex-direction:column;gap:1px;line-height:1.3}
.dcp-pname{font-size:13px;font-weight:600;color:#161b22}
.dcp-pmeta{font-size:11.5px;color:var(--text3)}
.dcp-more{font-size:11px;color:var(--text4);margin-top:6px}
.dcp-summary{font-size:12.5px;color:var(--text2);line-height:1.5}
.dcp-totals{font-size:11.5px;color:var(--navy);background:#f6f3ec;border:1px solid #ece6da;border-radius:7px;padding:6px 10px;margin-top:11px;font-weight:600}
.dcp-link{display:inline-block;margin-top:12px;font-size:12px;font-weight:700;color:var(--blue);text-decoration:none}
.dcp-link:hover{text-decoration:underline}
.dc-map-popup .dc-badge{font-size:10px;flex-shrink:0}
.dcp-psrc{font-size:10.5px;font-weight:600;color:var(--blue);text-decoration:none;margin-left:6px;white-space:nowrap}
.dcp-psrc:hover{text-decoration:underline}
.dcp-fmeta{font-size:12px;color:var(--text2);margin-bottom:3px}
.dcp-fdev{font-size:12px;color:var(--navy);font-weight:600;margin-bottom:2px}
.dcp-fnote{font-size:10.5px;color:var(--text4);margin-top:5px}
.dc-map-wrap .leaflet-control-layers{border-radius:9px;border:1px solid var(--border);box-shadow:0 6px 18px rgba(10,22,40,0.12)}
.dc-map-wrap .leaflet-control-layers-expanded{padding:9px 13px 7px 10px}
.dc-map-wrap .leaflet-control-layers label{margin-bottom:4px;display:flex;align-items:center}
.dc-lyr{display:inline-flex;flex-direction:column;line-height:1.2;vertical-align:middle;margin-left:2px}
.dc-lyr b{font-size:12px;font-weight:800;color:var(--navy)}
.dc-lyr em{font-style:normal;font-size:10px;color:var(--text3)}

/* ── Insights (secondary, below the data) ─────────────────── */
.dc-insights{margin-top:26px}
.dc-insights-hd{font-size:13px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:0.8px;margin-bottom:4px}
.dc-insights-sub{font-size:12.5px;color:var(--text3);margin-bottom:16px}
.dc-igrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}
.dc-panel{background:#fff;border:1px solid var(--border);border-radius:12px;padding:18px 18px 16px}
.dc-panel h3{font-size:12px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:0.5px;margin:0 0 13px}
.dc-bar{display:flex;align-items:center;gap:9px;margin-bottom:8px;font-size:12px}
.dc-bar .lab{min-width:92px}
.dc-bar .track{flex:1;background:#f1f5f9;height:7px;border-radius:4px;overflow:hidden}
.dc-bar .fill{height:100%;border-radius:4px}
.dc-tags{display:flex;flex-wrap:wrap;gap:7px}
.dc-tag{font-size:12px;font-weight:600;color:var(--navy);background:#f1f5f9;border:1px solid var(--border);border-radius:8px;padding:6px 11px;cursor:pointer;transition:all .12s;font-family:inherit}
.dc-tag:hover{border-color:var(--blue);background:#f1f5f9}
.dc-tag.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.dc-states{display:grid;grid-template-columns:repeat(auto-fill,minmax(56px,1fr));gap:6px}
.dc-statebox{text-align:center;font-size:12px;font-weight:700;color:var(--navy);background:#f1f5f9;border:1px solid var(--border);border-radius:8px;padding:9px 4px;cursor:pointer;transition:all .12s}
.dc-statebox:hover{border-color:var(--blue);background:#f1f5f9}
.dc-statebox.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.dc-statebox .dot{display:block;width:7px;height:7px;border-radius:50%;margin:5px auto 0}

@media (max-width:720px){
 .dc-controls{margin:0 -16px 18px;padding:12px 16px}
 .dc-wrap{padding:0 16px 60px}
 .dc-hero-in{padding:34px 16px 24px}
 .dc-map-wrap{height:440px}
 .hide-mobile{display:none}
}
