/* ── Idaho Immigration Watch · Action Map ───────────────────────────────
   RC8 brand layer. The organizational identity (navy chrome, red calls to
   action, banded sections, dark footer) is expressed in these tokens and
   applied to the page shell; the data surfaces inside it stay white and
   typographically quiet. Status tokens further down are semantic and are
   deliberately NOT part of the brand palette - a red button and a red
   operational status must never be mistaken for each other. */
:root{
  /* Parent-brand primitives, sampled from idahoimmigrationwatch.org. */
  --navy:#08093C; --navy-2:#141a5c; --navy-3:#232a70; --navy-line:#343b7d;
  --brand-red:#C41E3A; --brand-red-dark:#9C1730; --brand-red-soft:#F08E80;
  --cream:#FDF0E6;
  --on-navy:#FFFFFF; --on-navy-soft:#C3C6E4;
}
:root{
  --paper:#F7F5F0; --paper-deep:#EFEBE2; --ink:#1E2A32; --ink-soft:#44525C;
  --river:#20606E; --river-deep:#174754;
  --st-active:#33604F; --st-operational:#1F5560; --st-adopted:#A8721F;
  --st-pending:#A8721F; --st-declined:#7E3B2C; --st-ended:#5B4A57;
  --st-unresolved:#6E7780; --st-none:#DDD9D0;
  --st-wso:#33604F; --st-jem:#1F5560; --st-tfm:#4C5B8A; --st-multi:#3D4F63;
  --st-admin:#7E3B2C; --st-judicial:#33604F; --st-conditional:#A8721F;
  --st-caseby:#4C5B8A; --st-declines:#20606E;
  --rule:#C9C3B6; --focus:#B8551F;
  --surface:#FFFFFF; --surface-soft:#FBF9F4; --surface-edge:#E6E0D2;
  --radius:10px; --radius-sm:6px;
  --shadow-card:0 1px 2px rgba(30,42,50,.06),0 1px 1px rgba(30,42,50,.04);
  /* The parent site sets headings in acumin-pro and body in Poppins, both
     served from a remote font host. font-src 'self' forbids loading those
     here and no licensed face ships in this repository, so both stacks name
     them first (used only if a visitor already has them installed - never a
     network request) and then fall back to the platform's own modern
     grotesque. The previous serif body face is what made evidence-heavy
     pages read as an archival record rather than a current campaign tool. */
  --f-display:Poppins,"Segoe UI Variable Display","Segoe UI",Inter,ui-sans-serif,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --f-body:Poppins,"Segoe UI Variable Text","Segoe UI",Inter,ui-sans-serif,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --f-mono:"SFMono-Regular",Consolas,"Liberation Mono",ui-monospace,monospace;
  /* Type scale. Fluid where the element is a page-level statement, fixed
     where it labels evidence and must stay predictable at every width. */
  --t-masthead:1.16rem; --t-product:.72rem;
  --t-hero:clamp(1.75rem,3.6vw,2.85rem);
  --t-page:clamp(1.6rem,3vw,2.35rem);
  --t-status:clamp(1.3rem,2.2vw,1.75rem);
  --t-section:1.28rem; --t-card:1.2rem;
  --t-body:1rem; --t-meta:.88rem; --t-fine:.82rem;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;animation:none!important}}
/* 16.5px sans reads at the same optical size the old 17px serif did while
   giving the shorter x-height stack a comfortable measure. */
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--f-body);font-size:16.5px;line-height:1.62}
h1,h2,h3,h4,.ui{font-family:var(--f-display)}
h1{font-weight:800;letter-spacing:-.018em}
h2{font-weight:800;letter-spacing:-.012em}
h3{font-weight:700;letter-spacing:-.008em}
code,.mono{font-family:var(--f-mono);font-size:.82em}
a{color:var(--river);text-underline-offset:2px}
a:hover{color:var(--river-deep)}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:2px}
.skip-link{position:absolute;left:-999px;top:0;background:var(--ink);color:var(--paper);padding:.6rem 1rem;z-index:99;font-family:var(--f-display)}
.skip-link:focus{left:.5rem;top:.5rem}
/* One content column across the masthead, every band, and the footer. The
   map band previously ran 180px wider than the rest of the page, which
   left the left-anchored map/legend pair floating in a large right-hand
   gutter and broke vertical alignment with the header above it. */
.wrap{max-width:1200px;margin:0 auto;padding:0 1.25rem}
.map-wrap{max-width:1200px}
.jurisdiction-page{max-width:1040px}

/* header / footer — the branded chrome that wraps the data product */
.site-head{background:var(--navy);border-bottom:3px solid var(--brand-red)}
/* The masthead is a two-part lockup: the organization's own logo artwork,
   then a ruled-off product name that identifies the Action Map as one tool
   within Idaho Immigration Watch rather than a separate publication. */
.brand{display:inline-flex;align-items:center;gap:.85rem;text-decoration:none;color:var(--on-navy)}
.brand-mark{display:block;height:2.4rem;width:auto;flex:none}
.brand-product{
  display:block;padding-left:.85rem;border-left:1px solid var(--navy-line);
  font:800 var(--t-product)/1.25 var(--f-display);letter-spacing:.17em;
  text-transform:uppercase;color:var(--on-navy)
}
.brand:hover .brand-product{color:var(--brand-red-soft)}
.brand-cluster{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1.1rem}
.parent-link{font-family:var(--f-display);font-weight:600;font-size:.8rem;color:var(--on-navy-soft);text-decoration:none;white-space:nowrap}
.parent-link:hover{color:var(--on-navy);text-decoration:underline}
.head-inner nav{display:flex;gap:1.5rem;margin-left:auto;font-family:var(--f-display);font-size:.92rem;font-weight:600}
.head-inner nav a{text-decoration:none;color:var(--on-navy-soft);padding:.3rem 0;border-bottom:3px solid transparent}
.head-inner nav a:hover{color:var(--on-navy)}
.head-inner nav a[aria-current="page"]{color:var(--on-navy);border-bottom-color:var(--brand-red)}
.site-head :focus-visible{outline-color:var(--brand-red-soft)}
.site-foot{margin-top:0;background:var(--navy);color:var(--on-navy-soft)}
.foot-inner{
  max-width:1200px;margin:0 auto;padding:1.9rem 1.25rem;display:flex;flex-wrap:wrap;
  align-items:center;justify-content:space-between;gap:1rem 1.5rem;
  font-family:var(--f-display);font-size:var(--t-meta);color:var(--on-navy-soft)
}
/* align-items must be explicit: the default `stretch` on a column flex
   container overrides the logo's width:auto and squashes its aspect ratio. */
.foot-brand{display:flex;flex-direction:column;align-items:flex-start;gap:.7rem;min-width:0}
.foot-mark{display:block;height:2.1rem;width:auto}
.foot-tagline{margin:0}
.foot-tagline a{color:var(--on-navy);text-decoration:underline}
.foot-tagline a:hover{color:var(--brand-red-soft)}
.foot-nav{display:flex;flex-wrap:wrap;gap:.5rem 1.4rem;margin:0;padding:0;list-style:none}
.foot-nav a{color:var(--on-navy-soft);text-decoration:none;font-weight:600}
.foot-nav a:hover{color:var(--on-navy);text-decoration:underline}
.foot-actions{display:flex;flex-direction:column;align-items:flex-end;gap:.75rem}
.foot-main-site{
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--brand-red);color:#fff;font:700 .82rem var(--f-display);
  letter-spacing:.04em;padding:.7rem 1.15rem;text-decoration:none;white-space:nowrap
}
.foot-main-site:hover{background:#fff;color:var(--navy)}
.site-foot :focus-visible{outline-color:var(--brand-red-soft)}
.demo-banner{background:var(--st-adopted);color:#fff;font-family:var(--f-display);font-size:.9rem;padding:.55rem 1.25rem;text-align:center}
.demo-banner strong{font-weight:700}

/* question masthead — the signature element */
.masthead{padding:1.7rem 0 1rem;border-bottom:1px solid var(--rule)}
.masthead .eyebrow{font-family:var(--f-mono);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft);margin:0 0 .5rem}
.masthead h1{font-size:clamp(1.5rem,3.4vw,2.4rem);font-weight:800;line-height:1.12;margin:0 0 .7rem;max-width:21ch}
.masthead .lede{margin:0 0 .3rem}
.tagline{
  display:inline-flex;align-items:center;margin:0 0 .7rem;
  font:800 .8rem var(--f-display);letter-spacing:.05em;text-transform:uppercase;
  color:var(--river-deep)
}
.tagline-arrow{color:var(--focus);margin:0 .05em}
.legend{display:flex;flex-wrap:wrap;gap:.35rem 1.4rem;padding:0;margin:0;list-style:none;font-family:var(--f-display);font-size:.88rem}
.legend li{display:flex;align-items:center;gap:.45rem;color:var(--ink-soft)}
.legend .swatch{width:1.35rem;height:.55rem;border:1px solid var(--ink);flex:none}

/* view switcher + filters */
.controls{display:flex;flex-wrap:wrap;gap:.7rem;align-items:end;padding:1.1rem 0}
.field{display:flex;flex-direction:column;gap:.25rem;font-family:var(--f-display);font-size:.8rem;color:var(--ink-soft)}
select,input[type=search]{font-family:var(--f-display);font-size:.95rem;padding:.45rem .6rem;border:1.5px solid var(--ink-soft);background:#fff;color:var(--ink);border-radius:var(--radius-sm);min-width:11rem}
select:focus-visible,input[type=search]:focus-visible{border-color:var(--focus)}
.btnlink{font-family:var(--f-display);font-size:.9rem;background:none;border:none;color:var(--river);text-decoration:underline;cursor:pointer;padding:.4rem 0}

/* map */
/* Both tracks are minmax(0, ...): a hard px legend column (no minmax floor)
   can't shrink below its own size and forces horizontal overflow before
   the stacking breakpoint, so the legend must stay just as elastic as the
   map column even though its practical width rarely approaches its cap.
   justify-content:start (not center) keeps the pair anchored to the left
   edge of .map-wrap instead of centering the ~940px pair inside a much
   wider container, which was splitting the leftover space into equal,
   large left AND right margins - left-aligning collects that slack on
   the right only, closing the empty gutter this was meant to fix. */
/* Row gap is now separate from column gap: the grid's first row is the
   section-heading row, which wants tighter spacing beneath it than the
   2rem gutter between the map and legend columns. */
/* Legend track widened 235px -> 280px so the spelled-out model names
   ("Warrant Service Officer (WSO)") wrap at most once instead of being
   squeezed to three lines. The map track and the 2rem gutter are unchanged,
   so the map keeps its exact rendered width; the extra 45px comes out of
   the unused slack to the right of the left-anchored pair. */
.map-grid{display:grid;grid-template-columns:minmax(0,700px) minmax(0,280px);justify-content:start;gap:1.15rem 2rem;align-items:start;padding:.75rem 0 0}
@media(max-width:880px){.map-grid{grid-template-columns:1fr}}
.plat{width:100%;height:auto;display:block}
.plat .county{fill:var(--st-none);stroke:var(--ink);stroke-width:.7;cursor:default}
.plat .county[data-cls]{cursor:pointer}
.plat .county:hover,.plat .county:focus{stroke-width:2}
.plat .state-outline{fill:none;stroke:var(--ink);stroke-width:1.6}
.plat .place{stroke:var(--ink);stroke-width:1.2;cursor:pointer}
.statewide-band{border:1.5px solid var(--ink);background:#fff;padding:.8rem 1rem;margin:0 0 1rem;font-family:var(--f-display)}
.statewide-band .tag{font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft)}
.statewide-band button{display:flex;align-items:center;gap:.6rem;background:none;border:none;font:inherit;font-weight:700;font-size:1.02rem;color:var(--ink);cursor:pointer;padding:.2rem 0;text-align:left}
.dot{width:.85rem;height:.85rem;border:1.5px solid var(--ink);border-radius:50%;flex:none}
.side-panel{border:1.5px solid var(--ink);background:#fff;padding:1rem 1.1rem;position:sticky;top:1rem}
.side-panel h2{margin:.1rem 0 .3rem;font-size:1.05rem}
.side-panel .status{font-family:var(--f-display);font-weight:600;font-size:.95rem}
.empty-state{border:1.5px dashed var(--ink-soft);padding:2.2rem 1.6rem;margin:1.6rem 0;background:#fff}
.empty-state h2{margin-top:0}

/* status chips (never color-only: text label always present) */
.chip{display:inline-flex;align-items:center;gap:.45rem;font-family:var(--f-display);font-size:.86rem;font-weight:600;padding:.18rem .55rem;border:1.5px solid var(--ink);background:#fff}
.chip .swatch{width:.9rem;height:.9rem;border:1px solid var(--ink)}

/* list view */
.data-table{width:100%;border-collapse:collapse;font-size:.95rem;background:#fff}
.data-table caption{text-align:left;font-family:var(--f-display);font-weight:700;padding:.6rem 0}
.data-table th{font-family:var(--f-display);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;text-align:left;border-bottom:2px solid var(--ink);padding:.5rem .6rem}
.data-table td{border-bottom:1px solid var(--rule);padding:.55rem .6rem;vertical-align:top}
.data-table tr:hover td{background:var(--paper-deep)}

/* profile */
.profile-head{padding:2rem 0 1rem;border-bottom:2px solid var(--ink)}
.profile-head h1{margin:.2rem 0 .4rem;font-size:clamp(1.4rem,3vw,2.1rem)}
.disclosures{border:2px solid var(--st-adopted);background:#FCF6EA;padding:1rem 1.2rem;margin:1.4rem 0}
.disclosures h2{margin:0 0 .5rem;font-size:1rem;display:flex;gap:.5rem;align-items:center}
.disclosures ul{margin:.2rem 0 0;padding-left:1.2rem}
.disclosures li{margin:.35rem 0}
.section{padding:1.6rem 0;border-bottom:1px solid var(--rule)}
.section h2{font-size:1.15rem;margin:0 0 .8rem}
.kv{display:grid;grid-template-columns:max-content 1fr;gap:.3rem 1.2rem;font-size:.95rem}
.kv dt{font-family:var(--f-display);font-weight:600;color:var(--ink-soft)}
.kv dd{margin:0}
.record-card{border:1.5px solid var(--ink);background:#fff;padding:1rem 1.1rem;margin:0 0 1rem}
.record-card h3{margin:0 0 .3rem;font-size:1.02rem}
.source-table{width:100%;border-collapse:collapse;font-size:.85rem;margin:.5rem 0 0}
.source-table th{font-family:var(--f-display);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;text-align:left;border-bottom:1.5px solid var(--ink);padding:.3rem .45rem}
.source-table td{border-bottom:1px solid var(--rule);padding:.35rem .45rem;vertical-align:top}
.badge{display:inline-block;font-family:var(--f-mono);font-size:.68rem;border:1px solid var(--ink-soft);padding:0 .35rem;color:var(--ink-soft)}
.badge.yes{border-color:var(--st-active);color:var(--st-active)}

.fail-closed{border:2px solid var(--st-declined);background:#FBEFEC;padding:1.2rem 1.4rem;margin:1.6rem 0}
.fail-closed h2{margin-top:0}


/* v1.0.1 controls and responsive hardening */
.filter-panel{border:1px solid var(--rule);background:#fff;margin:.2rem 0 1.2rem;padding:.65rem .8rem}
.filter-panel summary{font-family:var(--f-display);font-weight:700;cursor:pointer}
.filter-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.75rem;margin-top:.8rem;align-items:end}
.filter-grid select,.filter-grid input[type=date]{width:100%;min-width:0}
.secondary-button{font:600 .9rem var(--f-display);border:1.5px solid var(--ink);background:var(--paper);padding:.5rem .75rem;cursor:pointer;align-self:end}
.date-wrap{display:flex;width:100%;min-width:0;border:1.5px solid var(--ink-soft);background:#fff;border-radius:3px;padding:.43rem .55rem}
.date-wrap input{display:block;width:100%;min-width:0;border:0;background:transparent;padding:0;font:inherit;color:var(--ink)}
.table-scroll{max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}
.table-scroll:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.source-table,.data-table{min-width:760px}
.key-facts{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
  gap:.5rem .9rem;list-style:none;padding:0;margin:.6rem 0 0
}
.key-facts li{background:var(--surface-soft);border-radius:var(--radius-sm);padding:.6rem .8rem;font-size:.92rem;margin:0}
.record-limit{border-left:4px solid var(--st-adopted);background:#FCF6EA;padding:.65rem .8rem;margin:.8rem 0}
.record-limit ul{margin:.3rem 0 0;padding-left:1.2rem}
.target-line{font-size:.9rem;color:var(--ink-soft)}
.advocacy-card{border:2px solid var(--st-declined);background:#fff;padding:1rem 1.2rem;margin:1.2rem 0}
.advocacy-label{font:700 .75rem var(--f-display);letter-spacing:.1em;text-transform:uppercase;color:var(--st-declined)}

@media(max-width:640px){
  body{font-size:16px}
  .wrap{padding:0 .85rem}
  .head-inner{padding:.9rem .85rem}
  .head-inner nav{margin-left:0;gap:.4rem .85rem;flex-wrap:wrap;width:100%}
  .head-inner nav a{padding:.35rem 0}
  .masthead{padding-top:1.35rem}
  .controls{align-items:stretch}
  .controls .field,.controls select,.controls input[type=search]{width:100%;min-width:0}
  .btnlink{display:block;width:100%}
  .map-grid{gap:1rem}
  .side-panel{position:static}
  .kv{grid-template-columns:1fr;gap:.05rem}
  .kv dt{margin-top:.55rem}
  .key-facts{grid-template-columns:1fr}
  .profile-head{padding-top:1.25rem}
  .legend{display:grid;grid-template-columns:1fr}
}

@media(max-width:360px){
  .brand{font-size:1.05rem}
  .parent-link{font-size:.72rem}
  .head-inner nav{font-size:.86rem}
  .demo-banner{font-size:.8rem;padding:.5rem .65rem}
  .record-card,.disclosures,.empty-state{padding:.8rem}
}

/* Structured status colors and uncertainty treatments */
.status-active,.status-wso{background-color:var(--st-active);fill:var(--st-active)}
.status-operational,.status-jem{background-color:var(--st-operational);fill:var(--st-operational)}
.status-adopted,.status-pending{background-color:var(--st-adopted);fill:var(--st-adopted)}
.status-declined,.status-admin{background-color:var(--st-declined);fill:var(--st-declined)}
.status-ended{background-color:var(--st-ended);fill:var(--st-ended)}
.status-unresolved{background-color:var(--st-unresolved);fill:var(--st-unresolved)}
.status-none{background-color:var(--st-none);fill:var(--st-none)}
.status-tfm,.status-caseby{background-color:var(--st-tfm);fill:var(--st-tfm)}
.status-multi{background-color:var(--st-multi);fill:var(--st-multi)}
.status-judicial,.status-declines{background-color:var(--st-judicial);fill:var(--st-judicial)}
.status-conditional{background-color:var(--st-conditional);fill:var(--st-conditional)}
.swatch.hatched{
  background-image:repeating-linear-gradient(135deg,rgba(30,42,50,.62) 0,rgba(30,42,50,.62) 1.5px,transparent 1.5px,transparent 5px);
}
.svg-fill.status-active,.svg-fill.status-wso{fill:var(--st-active)}
.svg-fill.status-operational,.svg-fill.status-jem{fill:var(--st-operational)}
.svg-fill.status-adopted,.svg-fill.status-pending{fill:var(--st-adopted)}
.svg-fill.status-declined,.svg-fill.status-admin{fill:var(--st-declined)}
.svg-fill.status-ended{fill:var(--st-ended)}
.svg-fill.status-unresolved{fill:var(--st-unresolved)}
.svg-fill.status-none{fill:var(--st-none)}
.svg-fill.status-tfm,.svg-fill.status-caseby{fill:var(--st-tfm)}
.svg-fill.status-multi{fill:var(--st-multi)}
.svg-fill.status-judicial,.svg-fill.status-declines{fill:var(--st-judicial)}
.svg-fill.status-conditional{fill:var(--st-conditional)}

/* RC7 public-position classes and clearly separated IIW advocacy */
:root{
  --alert:#B42318; --alert-dark:#7A170F; --alert-bg:#FFF1EF;
  --st-support:#2F654F; --st-support-limited:#55715F; --st-local-control:#6C5A27;
  --st-opposes:#963C2E; --st-mandate:#7A5269; --st-mixed:#7C6C42;
}
.status-support{background-color:var(--st-support);fill:var(--st-support)}
.status-support-limited{background-color:var(--st-support-limited);fill:var(--st-support-limited)}
.status-local-control{background-color:var(--st-local-control);fill:var(--st-local-control)}
.status-opposes{background-color:var(--st-opposes);fill:var(--st-opposes)}
.status-mandate{background-color:var(--st-mandate);fill:var(--st-mandate)}
.status-mixed{background-color:var(--st-mixed);fill:var(--st-mixed)}
.svg-fill.status-support{fill:var(--st-support)}
.svg-fill.status-support-limited{fill:var(--st-support-limited)}
.svg-fill.status-local-control{fill:var(--st-local-control)}
.svg-fill.status-opposes{fill:var(--st-opposes)}
.svg-fill.status-mandate{fill:var(--st-mandate)}
.svg-fill.status-mixed{fill:var(--st-mixed)}
.action-alert-marker{cursor:pointer}
.action-alert-marker circle{fill:var(--alert);stroke:#fff;stroke-width:2.5;filter:drop-shadow(0 1px 1px rgba(0,0,0,.35))}
.action-alert-marker text{fill:#fff;font:800 14px var(--f-display);pointer-events:none}
.action-alert-marker:focus circle,.action-alert-marker:hover circle{stroke:var(--ink);stroke-width:3}
.action-alert-inline{display:inline-flex;align-items:center;gap:.25rem;background:var(--alert);color:#fff;border-radius:2px;padding:.1rem .38rem;font:800 .7rem var(--f-display);letter-spacing:.035em;text-transform:uppercase;white-space:nowrap}
.action-alert-summary{border-left:4px solid var(--alert);padding:.55rem .7rem;background:var(--alert-bg);font-family:var(--f-display);font-weight:650}
.action-alert-section{border-top:4px solid var(--alert);background:linear-gradient(to bottom,var(--alert-bg),transparent 11rem);padding-inline:1rem}
.action-alert-intro{font-family:var(--f-display);font-weight:650}
.advocacy-stack{display:grid;gap:1rem}
.action-alert-card{border:2px solid var(--alert);background:#fff;padding:1.1rem 1.2rem;margin:.75rem 0}
.action-alert-card h3{font-size:1.12rem;margin:.2rem 0 .5rem}
.action-alert-label{color:var(--alert-dark);font:800 .74rem var(--f-display);letter-spacing:.09em;text-transform:uppercase;margin:0}
.recommended-message{border-left:4px solid var(--alert);background:var(--alert-bg);padding:.7rem .85rem;margin:.8rem 0}
.recommended-message p{margin:.25rem 0 0}
.advocacy-disclaimer{font-size:.82rem;color:var(--ink-soft);border-top:1px solid var(--rule);padding-top:.55rem}
.statement-card{border-left:4px solid var(--river);background:#fff;padding:.8rem 1rem;margin:.8rem 0}
.statement-meta{font:700 .76rem var(--f-display);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);margin:0 0 .35rem}
.statement-card blockquote{margin:.6rem 0;padding-left:.8rem;border-left:2px solid var(--rule)}
.statement-sources{margin:.45rem 0 0;padding-left:1.2rem;font-size:.88rem}
.action-alert-marker.support circle{fill:var(--st-support)}
.action-alert-marker.support text{font-size:12px}
.action-alert-inline.support{background:var(--st-support)}
.action-alert-inline.needed{background:var(--alert)}
.support-action-summary{border-left:4px solid var(--st-support);padding:.55rem .7rem;background:#EEF7F1;font-family:var(--f-display);font-weight:650}
.action-alert-card.support{border-color:var(--st-support);background:#FBFFFC}
.action-alert-card.support .action-alert-label{color:var(--st-support)}
.action-alert-card.support .recommended-message{border-left-color:var(--st-support);background:#EEF7F1}

/* 1.1 universal jurisdiction experience */
:root{--directory-fill:#E8E2D6;--advocacy:#8B2E20;--advocacy-bg:#FFF4F0}
.head-inner{max-width:1200px;margin:0 auto;padding:1.15rem 1.25rem;display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1.5rem}
.lede{max-width:70ch;color:var(--ink-soft)}
.eyebrow{font:700 .72rem var(--f-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft)}
.jurisdiction-search{padding:.85rem 0;border-bottom:1px solid var(--rule);font-family:var(--f-display)}
.jurisdiction-search>label{display:block;font-weight:800;margin-bottom:.4rem}
.search-row{display:flex;gap:.6rem;max-width:760px}
.search-row input{flex:1;min-width:0;padding:.8rem .9rem;font-size:1rem;border-radius:var(--radius-sm)}
.search-row input:focus-visible{border-color:var(--focus);box-shadow:0 0 0 1px var(--focus)}
/* Red is the organization's own voice: it marks what Idaho Immigration
   Watch is asking a visitor to do. It is never used to state a finding, so
   it cannot be confused with the red formal-rejection status, which always
   appears as a labelled badge rather than a button. */
.primary-button,.primary-action{display:inline-flex;justify-content:center;align-items:center;gap:.4rem;border:2px solid var(--brand-red);border-radius:2px;background:var(--brand-red);color:#fff;padding:.8rem 1.4rem;font:800 .84rem var(--f-display);letter-spacing:.045em;text-decoration:none;cursor:pointer;transition:background-color .12s,border-color .12s}
.primary-button:hover,.primary-action:hover{background:var(--brand-red-dark);border-color:var(--brand-red-dark);color:#fff}
.primary-button:focus-visible,.primary-action:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.primary-action.disabled{background:var(--st-not_verified);border-color:var(--st-not_verified);color:var(--ink);cursor:not-allowed}
.homepage-search-results:empty{display:none}
.homepage-search-results .search-results{margin:.8rem 0 1.1rem}
.search-result-actions{display:flex;flex-wrap:wrap;gap:.55rem;margin-top:1rem}
.search-result-actions .primary-action,.secondary-action{
  min-height:2.75rem;padding:.6rem .9rem;border-radius:2px;
  font:800 .8rem var(--f-display);cursor:pointer;text-decoration:none
}
/* Navy = secondary. Distinct from the red primary ask and from every
   status color, so button hierarchy never reads as a finding. */
.secondary-action{display:inline-flex;align-items:center;justify-content:center;border:2px solid var(--navy);background:#fff;color:var(--navy)}
.secondary-action:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.secondary-action:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.jurisdiction-search.is-compact{padding:.45rem 0}
.jurisdiction-search.is-compact>label{font-size:.85rem;font-weight:700;margin-bottom:.3rem}
.jurisdiction-search.is-compact .search-row{max-width:520px}
.jurisdiction-search.is-compact .search-row input{padding:.55rem .7rem;font-size:.92rem}
.jurisdiction-search.is-compact .primary-button{padding:.55rem 1rem;font-size:.76rem}
.map-question{padding:1rem 0 0}
.map-question label{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;font:700 .82rem var(--f-display)}
.map-question h2{font-size:1.15rem}
.sr-only{
  position:absolute!important;width:1px!important;height:1px!important;padding:0!important;
  margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;
  white-space:nowrap!important;border:0!important
}
.map-interaction{
  position:relative;overflow:hidden;border:1px solid var(--surface-edge);border-radius:var(--radius);
  background:var(--paper);touch-action:pan-y;isolation:isolate;
  width:fit-content;max-width:100%;margin-inline:auto;padding:4rem .85rem .85rem
}
.map-interaction:focus-visible:not(.is-pointer-focus){outline:4px solid var(--focus);outline-offset:3px}
.map-interaction.is-pointer-focus{outline:none}
.map-controls{
  position:absolute;z-index:4;top:.85rem;left:.85rem;display:flex;gap:.3rem;align-items:center;
  padding:.25rem;background:rgba(255,255,255,.96);border:1px solid var(--surface-edge);
  border-radius:var(--radius-sm);box-shadow:var(--shadow-card)
}
.map-control{
  min-width:2.3rem;min-height:2.3rem;border:1px solid var(--surface-edge);border-radius:4px;
  background:#fff;color:var(--ink);font:800 1.1rem/1 var(--f-display);cursor:pointer
}
.map-reset{
  min-height:2.3rem;padding:0 .75rem;margin-left:.15rem;border:1px solid var(--river);
  border-radius:4px;background:var(--river);color:#fff;font:700 .74rem var(--f-display);
  letter-spacing:.02em;cursor:pointer
}
.map-control:hover{background:var(--river);color:#fff;border-color:var(--river)}
.map-reset:hover{background:var(--river-deep);border-color:var(--river-deep)}
.map-control:focus-visible,.map-reset:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.map-control:disabled{opacity:.4;cursor:not-allowed;background:#fff;color:var(--ink)}
.map-reset:disabled{opacity:1;cursor:not-allowed;background:var(--surface-soft);color:var(--ink-soft);border-color:var(--surface-edge)}
.map-hint{
  position:absolute;z-index:3;left:50%;bottom:.85rem;transform:translateX(-50%);
  width:max-content;max-width:calc(100% - 1.2rem);margin:0;padding:.4rem .65rem;
  border:1px solid var(--ink);background:rgba(255,255,255,.94);
  font:700 .72rem var(--f-display);pointer-events:none
}
.map-hint[hidden]{display:none}
.map-gesture-cue{
  position:absolute;z-index:6;left:50%;bottom:3rem;transform:translateX(-50%);
  width:max-content;max-width:calc(100% - 1.2rem);margin:0;padding:.45rem .7rem;
  border:1px solid var(--river-deep);border-radius:var(--radius-sm);
  background:rgba(255,255,255,.97);box-shadow:var(--shadow-card);
  font:800 .74rem var(--f-display);pointer-events:none
}
.map-gesture-cue[hidden]{display:none}
.map-located-status{
  position:absolute;z-index:6;top:.85rem;right:.85rem;display:flex;align-items:center;
  flex-wrap:wrap;justify-content:flex-end;gap:.35rem .7rem;max-width:calc(100% - 18rem);
  padding:.38rem .55rem;border:1px solid var(--surface-edge);border-radius:var(--radius-sm);
  background:rgba(255,255,255,.97);box-shadow:var(--shadow-card);
  font:.74rem var(--f-display)
}
.map-located-status[hidden]{display:none}
.map-located-status strong{font-weight:900}
.map-located-record{font-weight:800}
.map-located-reset{border:0;background:none;padding:.3rem;color:var(--river-deep);font:800 .74rem var(--f-display);text-decoration:underline;cursor:pointer}
.map-located-reset:focus-visible,.map-located-record:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.map-tooltip{
  position:absolute;z-index:5;display:grid;gap:.18rem;width:max-content;
  max-width:min(18rem,calc(100% - 1rem));padding:.55rem .65rem;
  border:1.5px solid var(--ink);background:#fff;color:var(--ink);
  box-shadow:0 4px 14px rgba(0,0,0,.2);pointer-events:none;
  font:.76rem/1.3 var(--f-display)
}
.map-tooltip[hidden]{display:none}
/* The jurisdiction name is the tooltip's headline: it must read first and
   strongest, ahead of the status line and the model list beneath it. */
.map-tooltip-title{
  display:block;font-size:1.02rem;font-weight:900;line-height:1.2;
  letter-spacing:-.015em;color:var(--ink);margin-bottom:.15rem
}
.map-tooltip-status,.map-tooltip-model,.map-tooltip-flag,.map-tooltip-prompt{display:block}
.map-tooltip-status,.map-tooltip-flag{display:flex;align-items:center;gap:.3rem}
.map-tooltip-model{color:var(--ink-soft)}
.map-tooltip-flag{font-weight:800;color:var(--alert-dark)}
.map-tooltip-prompt{margin-top:.1rem;color:var(--ink-soft)}
.map-instructions{
  margin:0;padding:.55rem .75rem;border-top:1px solid var(--rule);
  background:#fff;font:700 .76rem var(--f-display);color:var(--ink-soft)
}
/* Idaho's outline is tall and narrow (640 x 1032.78), so this element's
   rendered WIDTH is derived from its height via aspect-ratio, capped by
   max-width:100% so it can never overflow .map-interaction. The height
   clamp's preferred term must be large enough (>100vh is intentional
   here) that a typical desktop viewport lands the derived width in the
   680-720px target range "where space permits" - a smaller vh term
   caps height (and therefore width) well under its own max on an
   ordinary ~900px-tall viewport regardless of how wide .map-grid's
   column is, which is what kept the map narrower than the column in
   earlier passes even after the column itself was widened. Express the
   same constraint as width so a max-width cap cannot leave the SVG
   viewport taller than its rendered contents.
*/
.map{
  display:block;width:clamp(297.5px,76.86vh,700px);max-width:100%;height:auto;
  aspect-ratio:640/1032.78;margin-bottom:.85rem
}
.map.is-panning{cursor:grabbing}
.map-feature-link,.map-feature-link:focus,.map-feature-link:focus-visible{
  outline:none!important
}
.place-link.is-search-hidden{display:none}
.map .state-outline{fill:none;stroke:var(--ink);stroke-width:1.6}
.map .state-outline,.map .county{vector-effect:non-scaling-stroke}
.map .county{stroke:var(--ink);stroke-width:.65;cursor:pointer}
.map .county:hover,.county-link:focus .county,.county-link:focus-visible .county{
  stroke:var(--focus);stroke-width:2
}
.map .county.is-selected{stroke:var(--focus);stroke-width:3;filter:drop-shadow(0 0 2px #fff)}
.map .county.directory-only{stroke-dasharray:2 1}
.county-label-layer{pointer-events:none}
.map-label-leaders .declined-county-leader{stroke:var(--ink);stroke-width:1.75px;stroke-linecap:round}
.county-label{font:800 16px var(--f-display);fill:var(--ink);paint-order:stroke;stroke:var(--paper);stroke-width:4.2px;stroke-linejoin:round}
.county-label.is-selected{fill:var(--focus);font-weight:900}
.county-label.is-suppressed{display:none}
.place-marker{cursor:pointer}
.place-marker circle{fill:var(--river);stroke:#fff;stroke-width:2}
.place-marker text{font:700 10px var(--f-display);fill:var(--ink);paint-order:stroke;stroke:var(--paper);stroke-width:2.5px}
.place-marker:hover circle,.place-link:focus circle,.place-link:focus-visible circle{
  stroke:var(--focus);stroke-width:3.5
}
.place-marker circle{vector-effect:non-scaling-stroke}
.place-marker.is-selected circle{fill:var(--focus);stroke:var(--ink);stroke-width:3}
.place-marker.is-selected .place-label{fill:var(--focus);font-weight:900}
.place-marker.label-suppressed .place-label{display:none}
.jurisdiction-layout{margin:.35rem 0 1.25rem}
.jurisdiction-page .masthead{padding:1.3rem 0 .15rem}
.jurisdiction-card>.chip{margin-bottom:.9rem}
.research-intro{
  margin-top:1.1rem;padding:.9rem 1rem;background:var(--surface-soft);
  border-radius:var(--radius-sm);border-left:3px solid var(--river)
}
.research-intro h3{margin:0 0 .3rem;font-size:1.02rem}
.research-intro-copy{margin:0 0 .7rem;font-size:.88rem;color:var(--ink-soft)}
.research-jump-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.45rem}
.research-jump-list a{
  display:inline-block;font:700 .78rem var(--f-display);color:var(--river-deep);
  background:#fff;border:1px solid var(--surface-edge);border-radius:999px;
  padding:.28rem .7rem;text-decoration:none
}
.research-jump-list a:hover{background:#EEF6F7;border-color:var(--river)}
.research-section,.sources-section{scroll-margin-top:1rem}
.back-link-top{margin:.6rem 0 0;font-size:.92rem}
.jurisdiction-results{min-width:0}
.map-panel{min-width:0}
.map-aside{
  min-width:0;border:1px solid var(--surface-edge);border-radius:var(--radius);
  background:var(--surface-soft);padding:1.15rem 1.25rem;position:sticky;top:1rem
}
.map-aside h2{margin:0 0 .4rem;font-size:1.05rem}
.map-aside>p{margin:0 0 .9rem;font-size:.88rem;color:var(--ink-soft)}
.legend-list{padding:0}
.status-directory{background:var(--directory-fill)}
.map-note,.small,.verification,.source-meta{font-size:.83rem;color:var(--ink-soft)}
.map-note{margin-top:.45rem;font-size:.88rem;opacity:.9}
.featured-jurisdictions{margin:2.4rem 0 0;padding:1.55rem 0 0;border-top:1px solid var(--rule)}
.featured-jurisdictions>h2{margin:0 0 1.1rem;font-size:1.2rem;text-transform:uppercase;letter-spacing:.04em;color:var(--river-deep)}
.featured-group+.featured-group{margin-top:1.45rem}
.featured-group>h3{display:flex;align-items:center;gap:.45rem;margin:0 0 .7rem;font-size:1.02rem}
.featured-group-participation>h3{color:var(--st-participating)}
.featured-group-opposition>h3{color:var(--alert-dark)}
.featured-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem}
.featured-card{min-width:0;border:1px solid var(--surface-edge);border-radius:var(--radius);background:var(--surface);padding:1rem 1.1rem;box-shadow:var(--shadow-card)}
.featured-card-participation{border-left:4px solid var(--st-participating);background:#F6FBF7}
.featured-card-opposition{border-left:4px solid var(--alert);background:#FFF9F7}
.featured-card h4{margin:.35rem 0 .45rem;font-size:1.2rem;line-height:1.15}
.featured-type{display:inline-block;margin:0;font:800 .68rem var(--f-display);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);background:#fff;border:1px solid var(--surface-edge);border-radius:999px;padding:.12rem .55rem}
.featured-status{display:flex;align-items:center;gap:.4rem;margin:0;font:800 .82rem var(--f-display);color:var(--ink)}
.featured-summary{margin:.6rem 0 1rem;font-size:.9rem;line-height:1.45}
.featured-link{display:inline-flex;align-items:center;min-height:2.3rem;border:1px solid var(--ink-soft);border-radius:var(--radius-sm);padding:.35rem .75rem;font:800 .76rem var(--f-display);letter-spacing:.03em;text-transform:uppercase;color:var(--ink);text-decoration:none;background:#fff}
.featured-link:hover{border-color:var(--river-deep);color:var(--river-deep);background:var(--surface-soft)}
.context-note{border-left:5px solid var(--river);background:#EDF6F7;padding:.75rem 1rem;margin:1rem 0;border-radius:0 var(--radius-sm) var(--radius-sm) 0}
.context-note-headline{margin:0 0 .3rem;font:800 .98rem var(--f-display);color:var(--ink)}
.context-note-support{margin:0;font-size:.88rem;color:var(--ink-soft)}
.search-results{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1rem;margin:1.2rem 0}
.result-card{border:1px solid var(--surface-edge);border-radius:var(--radius);background:#fff;padding:1.1rem 1.2rem;box-shadow:var(--shadow-card)}
.result-card h2{margin:.2rem 0}
.jurisdiction-page>.masthead{border-bottom:0}
.paired-cards{display:grid;gap:1.25rem;margin:1.2rem 0}
.jurisdiction-card{
  border:1px solid var(--surface-edge);border-radius:var(--radius);
  background:#fff;padding:1.3rem 1.4rem;box-shadow:var(--shadow-card)
}
.card-kicker{margin:0 0 .55rem;font:700 .72rem var(--f-mono);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-soft)}
.summary{font-size:1.05rem}
.jurisdiction-card-compact{padding:1.1rem 1.2rem}
.jurisdiction-card-compact .operational-status{padding:.85rem 1rem}
.jurisdiction-card-compact .operational-label{font-size:clamp(1.05rem,1.8vw,1.3rem)}
.compact-context{margin:.7rem 0 0;font-size:.88rem;color:var(--ink-soft)}
.compact-source-count{margin:.9rem 0 0;font-size:.82rem;color:var(--ink-soft)}
.compact-full-link{display:inline-block;margin-top:.4rem;font:700 .85rem var(--f-display);text-decoration:none}
.compact-full-link:hover{text-decoration:underline}
.jurisdiction-card-compact .primary-action{margin-top:.9rem;padding:.6rem 1rem;font-size:.76rem}
.service-note{border-left:4px solid var(--river);padding:.55rem .8rem;background:#F1F7F7;margin:1rem 0;border-radius:0 var(--radius-sm) var(--radius-sm) 0}
.service-note p{margin:.25rem 0 0}
.research-section{padding:1rem 0;border-top:1px solid var(--rule)}
.research-section h3{margin:.2rem 0 .65rem}
.advocacy-card{
  border:0;border-left:5px solid var(--advocacy);border-radius:0 var(--radius) var(--radius) 0;
  background:var(--advocacy-bg);padding:1.15rem 1.3rem;margin:1.3rem 0
}
.advocacy-card.tone-positive{border-left-color:var(--st-support);background:#F2FAF5}
.advocacy-card.tone-positive .action-attribution{color:var(--st-support)}
.advocacy-card.tone-encourage{border-left-color:var(--river);background:#EEF6F7}
.advocacy-card.tone-encourage .action-attribution{color:var(--river-deep)}
.advocacy-card.tone-neutral{border-left-color:var(--st-adopted);background:#FCF8EE}
.advocacy-card.tone-neutral .action-attribution{color:#8A6516}
.action-attribution{color:var(--advocacy);font:900 .73rem var(--f-display);letter-spacing:.12em;margin:0;text-transform:uppercase}
.advocacy-headline{font:800 1.12rem/1.3 var(--f-display);margin:.5rem 0 0;color:var(--ink)}
.advocacy-headline .status-icon{margin-right:.4rem}
.advocacy-support-copy{margin:.4rem 0 0;font-size:.94rem;color:var(--ink-soft)}
.message-template{background:rgba(255,255,255,.7);border-left:3px solid var(--advocacy);border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:.85rem .9rem;margin:1rem 0}
.advocacy-card.tone-positive .message-template{border-left-color:var(--st-support)}
.advocacy-card.tone-encourage .message-template{border-left-color:var(--river)}
.advocacy-card.tone-neutral .message-template{border-left-color:var(--st-adopted)}
.message-template-label{margin:0 0 .6rem;font:800 .68rem var(--f-display);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}
.message-fields{display:grid;grid-template-columns:max-content 1fr;gap:.3rem 1rem;margin:0}
.message-fields dt{font:700 .76rem var(--f-display);color:var(--ink-soft);letter-spacing:.03em;text-transform:uppercase;padding-top:.1rem}
.message-fields dd{margin:0}
.message-subject{font-weight:700}
.message-body{line-height:1.5}
.copy-message-row{display:flex;align-items:center;gap:.7rem;margin-top:.85rem;flex-wrap:wrap}
.copy-message-button{
  font:700 .78rem var(--f-display);border:1px solid var(--surface-edge);border-radius:999px;
  background:#fff;color:var(--ink);padding:.4rem .85rem;cursor:pointer
}
.copy-message-button:hover{background:var(--surface-soft);border-color:var(--ink-soft)}
.copy-message-button:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.copy-status{font-size:.8rem;color:var(--ink-soft)}
.source-summary-line{
  margin:1rem 0 0;font-size:.9rem;color:var(--ink-soft);
  display:flex;flex-wrap:wrap;align-items:baseline;gap:.3rem
}
.source-summary-line strong{color:var(--ink)}
.source-summary-title{color:var(--ink-soft)}
.source-summary-link{
  font:700 .82rem var(--f-display);color:var(--river-deep);background:none;
  border:0;padding:0;cursor:pointer;text-decoration:underline
}
.source-summary-link:hover{color:var(--focus)}
.source-summary-link:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.contact-options{border-top:1px solid var(--rule);margin-top:1rem;padding-top:.7rem}
.contact-options summary{cursor:pointer;font:800 .9rem var(--f-display)}
.contact-list{list-style:none;padding:0}
.contact-list li{display:grid;gap:.2rem;padding:.55rem 0;border-bottom:1px dotted var(--rule)}
.contact-list a{overflow-wrap:anywhere}
.sources-section{padding:1.1rem 0 0;border-top:1px solid var(--rule);margin-top:.4rem}
.source-list{list-style:none;margin:.7rem 0 0;padding:0;display:grid;gap:1.3rem}
.source-item{padding-bottom:1.3rem;border-bottom:1px solid var(--rule)}
.source-item:last-child{border-bottom:0;padding-bottom:0}
.source-title{margin:0 0 .18rem;font:700 .98rem var(--f-display)}
.source-title a{text-decoration:none}
.source-title a:hover{text-decoration:underline}
.source-publisher{margin:0 0 .35rem;font-size:.88rem;color:var(--ink-soft)}
.source-role{margin:0;font-size:.82rem;display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.source-type{
  font:700 .72rem var(--f-display);color:var(--river-deep);background:#EEF6F7;
  border-radius:999px;padding:.08rem .55rem
}
.source-support{
  font-size:.76rem;color:var(--ink-soft);background:var(--surface-soft);
  border-radius:999px;padding:.08rem .55rem
}
.back-link{margin:1.2rem 0 2rem}
.data-table{margin-bottom:2rem}
.directory-filters{display:flex;flex-wrap:wrap;gap:.5rem;margin:1rem 0 .7rem}
.directory-filter{
  border:1.5px solid var(--river);border-radius:var(--radius-sm);background:#fff;color:var(--river-deep);
  padding:.45rem .75rem;font:800 .82rem var(--f-display);letter-spacing:.035em;cursor:pointer
}
.directory-filter:hover{background:#EEF6F7;border-color:var(--focus);color:var(--focus)}
.directory-filter:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.directory-filter[aria-pressed="true"]{border-color:var(--ink);background:var(--ink);color:#fff}
.directory-filter[aria-pressed="true"]::before{content:"✓ ";font-weight:900}
.directory-type-label{
  display:inline-block;border:1px solid var(--ink-soft);border-radius:999px;padding:.08rem .5rem;
  color:var(--ink-soft);font:700 .72rem var(--f-display)
}
.directory-type-label.county{background:#EEF6F7;color:var(--river-deep);border-color:var(--river)}
.directory-empty{margin:.8rem 0 1.2rem;color:var(--ink-soft)}

@media(max-width:880px){
  .map-grid{grid-template-columns:1fr}
  .map-aside{position:static}
  .county-label{font-size:14px}
  .map-interaction{width:100%;margin-inline:0}
  .map{height:auto;aspect-ratio:auto;max-width:100%}
}
@media(max-width:640px){
  .head-inner{display:block;padding-inline:.85rem}
  .head-inner nav{margin:.65rem 0 0}
  .search-row{display:grid}
  .primary-button,.primary-action{width:100%;font-size:.78rem;padding:.75rem 1rem;letter-spacing:.03em}
  .search-result-actions{display:grid}
  .search-result-actions .secondary-action{width:100%}
  .county-label{font-size:12.5px}
  .county-label.is-selected{display:block}
  .map .county[data-directory-slug]{stroke-width:1.2}
  .map-interaction{padding-top:3.6rem}
  .map-interaction:has(.map-located-status:not([hidden])){padding-top:7.2rem}
  .map-located-status{top:3.55rem;left:.4rem;right:.4rem;max-width:none;justify-content:flex-start}
  .map-controls{top:.4rem;left:.4rem}
  .map-control,.map-reset{min-height:2.8rem}
  .map-hint{bottom:.35rem;font-size:.68rem}
  .jurisdiction-card{padding:.85rem}
  .featured-jurisdictions{margin-top:1.8rem}
  .featured-cards{grid-template-columns:1fr}
}
@media(min-width:900px){
  .paired-cards{grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:start}
  .paired-cards .jurisdiction-card:first-child:last-child{grid-column:1/-1}
}

/* 1.1.0-rc.7 FIND -> STATUS -> ACT operational and accountability layers */
:root{
  --st-participating:#2E7D4F;
  --st-unresolved:#D5A51D;
  --st-not_verified:#AEB3B7;
  --st-formal_rejection:#B42318;
  --rust:#9C5B34; --rust-dark:#7A4526; --rust-bg:#FBF3EC;
}
/* Participation-model shades (map visualization only). Three deliberately
   separated luminance steps, not hue variations: the light step stays
   clearly green against --st-not_verified gray (#AEB3B7), and the dark step
   stops well short of the value where the paper-haloed county labels and
   boundaries would lose readability. --st-participating is unchanged and
   still drives every badge, icon, chip and card. */
:root{
  --st-model-wso:#A8D5B5;
  --st-model-jem:#3E9C63;
  --st-model-tfm:#1E6B41;
}
.status-participating{background-color:var(--st-participating);fill:var(--st-participating)}
.status-not_verified{background-color:var(--st-not_verified);fill:var(--st-not_verified)}
.status-formal_rejection{background-color:var(--st-formal_rejection);fill:var(--st-formal_rejection)}
.map .county.status-unresolved{fill:url(#status-unresolved)}
.map .county.status-pending{fill:url(#status-pending)}
.map .county.status-adopted{fill:url(#status-adopted)}
.map .county.status-conditional{fill:url(#status-conditional)}
.map .county.status-caseby{fill:url(#status-caseby)}
.map .county.status-mandate{fill:url(#status-mandate)}
.map .county.status-mixed{fill:url(#status-mixed)}
.map .county.status-support-limited{fill:url(#status-support-limited)}
.map .county.status-local-control{fill:url(#status-local-control)}

/* Reusable status-icon component (see statusIcon() in app.js). Sized to
   sit inline with text by default; .status-icon-sm/-lg adjust for compact
   rows and standalone/legend placements. Tone classes set the icon's own
   color for use on neutral surfaces; icons with no tone class inherit
   currentColor from whatever colored surface they sit on (a status badge,
   a map marker) so they never fight that surface's own color. */
.status-icon{width:1.05em;height:1.05em;flex:none;vertical-align:-.15em}
.status-icon-sm{width:.82rem;height:.82rem}
.status-icon-lg{width:1.45rem;height:1.45rem}
.status-icon.tone-positive{color:var(--st-participating)}
.status-icon.tone-unresolved{color:#8A6516}
.status-icon.tone-neutral{color:var(--st-not_verified)}
.status-icon.tone-rejection{color:var(--st-formal_rejection)}
.status-icon.tone-opposition{color:var(--alert-dark)}
.status-icon.tone-concern{color:var(--rust-dark)}

/* Filled-circle status-icon badge (see statusIconBadge() in app.js) - a
   colored disc carrying a white/dark glyph, reusing the exact tone/text
   pairings already established on .status-badge, so a plain colored
   glyph floating on the page background ("looks like thin inline
   punctuation") becomes a self-contained badge instead. Sized per
   context via a modifier class rather than a single fixed size. */
.status-icon-badge{
  display:inline-grid;place-items:center;flex:none;border-radius:50%;
  box-shadow:0 1px 2px rgba(30,42,50,.2)
}
.status-icon-badge .status-icon{width:60%;height:60%}
.status-icon-badge-legend{width:1.55rem;height:1.55rem}
.status-icon-badge-card{width:1.9rem;height:1.9rem}
.status-icon-badge-participating{background:var(--st-participating);color:#fff}
.status-icon-badge-unresolved{background:var(--st-unresolved);color:#4A3B08}
.status-icon-badge-not_verified{background:var(--st-not_verified);color:var(--ink)}
.status-icon-badge-formal_rejection{background:var(--st-formal_rejection);color:#fff}

/* Map SVG vector icons (see mapVectorIcon() in app.js) - same shapes as
   .status-icon above, drawn as raw paths in the map's own coordinate
   space instead of a nested <svg>, since the county/marker layer already
   has its own zoom-compensation transform math. */
.map-vector-icon path,.map-vector-icon line,.map-vector-icon circle{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}
.map-vector-icon-check path{stroke-width:2.6}
.map-vector-icon-x path{stroke-width:2.6}
.map-vector-icon-caution path{fill:none;stroke-width:1.7}
.map-vector-icon-caution circle{fill:currentColor;stroke:none}
.map-vector-icon-flag path:first-child{stroke-width:2.2}
.map-vector-icon-flag path:last-child{
  fill:currentColor;stroke:#fff;stroke-width:1.3;stroke-linejoin:round;paint-order:stroke
}
.accountability-flag-icon,.place-marker .map-vector-icon-flag{
  color:var(--alert);filter:drop-shadow(0 1px 1.5px rgba(30,42,50,.45))
}
.place-marker circle{fill:var(--st-not_verified)}
.place-marker[data-status="participating"] circle{fill:var(--st-participating)}
/* Model shade overrides for participating features only. Every other
   status, the selection outline, focus ring, boundaries and labels are
   untouched. */
.map .county.model-wso{fill:var(--st-model-wso)}
.map .county.model-jem{fill:var(--st-model-jem)}
.map .county.model-tfm{fill:var(--st-model-tfm)}
.place-marker[data-model="wso"] circle{fill:var(--st-model-wso)}
.place-marker[data-model="jem"] circle{fill:var(--st-model-jem)}
.place-marker[data-model="tfm"] circle{fill:var(--st-model-tfm)}
/* The check glyph flips to ink on the light shade, where white would be
   too low-contrast to read. */
.place-marker[data-model="wso"] .map-vector-icon-check{color:var(--ink)}
.place-marker[data-status="unresolved"] circle{fill:var(--st-unresolved)}
.place-marker[data-status="formal_rejection"] circle{fill:var(--st-formal_rejection)}
.place-marker .map-vector-icon-check,.place-marker .map-vector-icon-x{color:#fff}
.place-marker[data-status="unresolved"] .map-vector-icon-caution{color:#4A3B08}
.county-flag-layer{pointer-events:none}
.legend-list{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}
.legend-list li{display:flex;align-items:center;gap:.55rem;font-family:var(--f-display);font-size:.88rem}
.result-flag,.table-flag{color:var(--alert-dark);font:800 .8rem var(--f-display);align-items:center;flex-wrap:wrap;gap:.3rem}
.result-flag{display:flex}
.table-flag{display:inline-flex}
.operational-status{
  border:1px solid var(--rule);border-left-width:6px;border-radius:0 var(--radius) var(--radius) 0;
  padding:1.05rem 1.2rem;margin:1rem 0;
  background:var(--surface)!important;color:var(--ink);box-shadow:var(--shadow-card)
}
.operational-status.status-participating{border-left-color:var(--st-participating);background:#F6FBF7!important}
.operational-status.status-unresolved{border-left-color:var(--st-unresolved);background:#FDFAF1!important}
.operational-status.status-not_verified{border-left-color:var(--st-not_verified);background:#FAFAF9!important}
.operational-status.status-formal_rejection{border-left-color:var(--st-formal_rejection);background:#FDF4F3!important}
.status-top-row{display:flex;align-items:center;flex-wrap:wrap;gap:.55rem;margin-bottom:.15rem}
.status-badge{
  display:inline-flex;align-items:center;gap:.32rem;font:800 .68rem var(--f-display);
  letter-spacing:.05em;text-transform:uppercase;color:#fff;
  padding:.22rem .6rem;border-radius:999px;line-height:1.3
}
.status-badge.status-participating{background:var(--st-participating)}
.status-badge.status-unresolved{background:var(--st-unresolved);color:#4A3B08}
.status-badge.status-not_verified{background:var(--st-not_verified);color:var(--ink)}
.status-badge.status-formal_rejection{background:var(--st-formal_rejection)}
.operational-label{
  margin:.2rem 0 .45rem;font:900 clamp(1.25rem,2.2vw,1.7rem)/1.15 var(--f-display)
}
.operational-model{margin:0;font:700 .88rem var(--f-display);color:var(--ink-soft)}
.operational-model-row{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}
.operational-model-sep{
  display:inline-block;width:.3rem;height:.3rem;border-radius:50%;
  background:var(--rule);flex:none
}
.operational-model-suffix{font-weight:700;color:var(--ink-soft)}
.status-explanation{margin:.6rem 0 0;font-size:.92rem;color:var(--ink-soft)}
.model-term-wrap{position:relative;display:inline}
.model-term{
  display:inline-flex;align-items:center;gap:.3rem;
  font:700 .85rem var(--f-display);color:var(--river-deep);background:#EDF6F7;
  border:1px solid rgba(32,96,110,.28);border-radius:999px;
  padding:.14rem .6rem .14rem .55rem;line-height:1.35;margin:0;
  cursor:pointer
}
.model-term-icon{opacity:.7;font-size:.85em}
.model-term:hover,.model-term:focus-visible{color:var(--focus);background:#E3F0F2;border-color:var(--focus)}
.model-term:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.model-popover{
  position:fixed;z-index:30;background:#fff;color:var(--ink);
  border:1.5px solid var(--ink);border-radius:2px;padding:.55rem .7rem;
  box-shadow:0 4px 14px rgba(0,0,0,.22);font-size:.82rem;line-height:1.35;
  width:max-content;max-width:min(20rem,calc(100vw - 1rem))
}
.model-popover[hidden]{display:none}
/* Legend variant of the same model-definition trigger: the model name
   itself is the target, styled as plain text with a dotted underline
   rather than the jurisdiction-page pill+icon, so it reads as "more
   information available" rather than as a button or a navigation link.
   It opens the same .model-popover box above. */
.legend-model-term{
  display:inline;background:none;border:0;padding:0;margin:0;
  font:inherit;line-height:inherit;color:inherit;cursor:help;
  text-decoration:underline dotted;text-decoration-color:currentColor;
  text-underline-offset:.2em;text-decoration-thickness:1px
}
.legend-model-term:hover,.legend-model-term:focus-visible{color:var(--river-deep)}
.legend-model-term:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:2px}
.accountability-section{margin:1rem 0}
.accountability-card{
  border:0;border-left:5px solid var(--alert);border-radius:0 var(--radius) var(--radius) 0;
  background:#FFF7F5;padding:1rem 1.2rem;box-shadow:var(--shadow-card)
}
.accountability-card+.accountability-card{margin-top:.75rem}
.accountability-card h3{margin:.25rem 0 .5rem}
/* "Concern" reads as a softer, less formal signal than "opposition" or
   "resistance" (which stay on the full-strength alert red) - a distinct
   rust tone keeps that difference visible on the card itself, not just
   in the label text, without approaching the formal-rejection red used
   for operational status. */
.accountability-card.tone-concern{border-left-color:var(--rust);background:var(--rust-bg)}
.accountability-card.tone-concern .accountability-label{color:var(--rust-dark)}
.accountability-label{
  margin:0;display:flex;align-items:center;gap:.35rem;color:var(--alert-dark);font:900 .78rem var(--f-display);
  letter-spacing:.08em;text-transform:uppercase
}
.accountability-chips{list-style:none;margin:.6rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.4rem}
.accountability-chip{
  display:inline-block;font:700 .74rem var(--f-display);color:var(--alert-dark);
  background:#fff;border:1px solid rgba(180,35,24,.28);border-radius:999px;padding:.15rem .6rem
}
.flag-actions{
  display:flex;flex-wrap:wrap;gap:.5rem 1.2rem;align-items:baseline;
  margin-top:.9rem
}
.flag-evidence-link{font:800 .86rem var(--f-display);color:var(--alert-dark)}
.flag-advocacy-link{font:700 .8rem var(--f-display);color:var(--ink-soft);text-decoration:none}
.flag-advocacy-link:hover{color:var(--river-deep);text-decoration:underline}
.detailed-record{
  border:0;border-top:1px solid var(--rule);margin-top:1.2rem;padding:.9rem 0 .1rem;background:none
}
.detailed-record>summary{
  cursor:pointer;font:700 .95rem var(--f-display);color:var(--ink);
  list-style:none;display:flex;flex-wrap:wrap;align-items:center;gap:.15rem .45rem;padding:.2rem 0
}
.detailed-record>summary::-webkit-details-marker{display:none}
.detailed-record>summary::before{
  content:"▸";display:inline-block;color:var(--river);font-size:.85em;
  transition:transform .15s
}
.detailed-record[open]>summary::before{transform:rotate(90deg)}
.detail-hint{flex-basis:100%;font-weight:400;font-size:.78rem;color:var(--ink-soft)}
.detailed-record[open]>summary{padding-bottom:.7rem;border-bottom:1px solid var(--rule);margin-bottom:.7rem}

/* agreements */
.agreement-shared-note{
  font-size:.9rem;color:var(--ink-soft);background:var(--surface-soft);
  border-left:3px solid var(--rule);padding:.6rem .8rem;margin:0 0 .9rem;
  border-radius:0 var(--radius-sm) var(--radius-sm) 0
}
.agreement-list{display:grid;gap:.7rem}
.agreement-disclosure{
  border:1px solid var(--surface-edge);border-radius:var(--radius-sm);
  background:#fff;padding:.75rem .9rem
}
.agreement-disclosure>summary{
  cursor:pointer;list-style:none;display:flex;flex-wrap:wrap;align-items:baseline;
  gap:.25rem .7rem
}
.agreement-disclosure>summary::-webkit-details-marker{display:none}
.agreement-disclosure>summary::before{
  content:"▸";color:var(--river);font-size:.8em;display:inline-block;
  transition:transform .15s;margin-right:.3rem
}
.agreement-disclosure[open]>summary::before{transform:rotate(90deg)}
.agreement-title{font:800 .95rem var(--f-display);color:var(--ink)}
.agreement-summary-line{font:600 .78rem var(--f-display);color:var(--ink-soft)}
.agreement-full-label{margin:.6rem 0 0;font-size:.8rem;color:var(--ink-soft);font-style:italic}
.agreement-grid{
  display:grid;grid-template-columns:max-content 1fr;gap:.35rem 1rem;
  margin:.75rem 0 0;font-size:.88rem;align-items:center
}
.agreement-grid dt{font-family:var(--f-display);font-weight:700;color:var(--ink-soft)}
.agreement-grid dd{margin:0}
.agreement-badge{
  display:inline-flex;align-items:center;font:700 .74rem var(--f-display);
  padding:.12rem .55rem;border-radius:999px;background:var(--surface-soft);color:var(--ink)
}
.agreement-badge.tone-positive{background:#EAF5EE;color:var(--st-support)}
.agreement-badge.tone-neutral{background:#F1EFE9;color:var(--ink-soft)}
.agreement-badge.tone-negative{background:var(--alert-bg);color:var(--alert-dark)}
.agreement-narrative{margin:.85rem 0 0;font-size:.92rem}
@media(max-width:640px){
  .agreement-grid{grid-template-columns:1fr;gap:.05rem}
  .agreement-grid dt{margin-top:.5rem}
  .message-fields{grid-template-columns:1fr;gap:.05rem}
  .message-fields dt{margin-top:.5rem}
}

/* legal instruments */
.instruments-list{margin-top:.9rem;padding-top:.75rem;border-top:1px solid var(--rule)}
.instruments-list h4{margin:0 0 .5rem;font-size:.78rem;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft)}
.instrument-row{padding:.5rem 0;border-bottom:1px dotted var(--rule)}
.instrument-row:last-child{border-bottom:0;padding-bottom:0}
.instrument-title{margin:0 0 .15rem;font-weight:700}
.instrument-meta{margin:0;font-size:.78rem;color:var(--ink-soft)}

/* research timeline */
.research-timeline{list-style:none;margin:.6rem 0 0;padding:0;border-left:2px solid var(--surface-edge)}
.research-timeline-item{position:relative;padding:.15rem 0 .9rem 1.1rem}
.research-timeline-item::before{
  content:"";position:absolute;left:-.36rem;top:.4rem;width:.6rem;height:.6rem;
  border-radius:50%;background:var(--river);border:2px solid #fff
}
.research-timeline-date{margin:0 0 .1rem;font:700 .78rem var(--f-mono);color:var(--ink-soft)}
.research-timeline-event{margin:0}

/* statement cards */
.statement-summary{margin:.35rem 0 0}
.statement-source{margin:.5rem 0 0;font-size:.85rem}
.statement-card blockquote{font-size:1.02rem;font-style:italic}

/* ═══════════════════════════════════════════════════════════════════════
   RC8 visual-brand layer

   Everything below is presentation only. It introduces the banded page
   structure the parent site uses, restyles the shell chrome in the brand
   palette, and raises the contrast of the status, featured-record and
   advocacy modules. It changes no status semantics, no classification, and
   no evidence presentation: the four operational-status colors, the
   separate accountability-flag treatment, and the factual/advocacy split
   all keep the tokens and class names they already had.
   ══════════════════════════════════════════════════════════════════════ */

/* ── Page frame ─────────────────────────────────────────────────────────
   Short routes (a no-result search, the not-found state) ended with the
   dark footer stranded in the middle of the viewport above a band of bare
   page background. The shell is a column so the main region absorbs the
   leftover height and the footer always closes the page. */
#app{display:flex;flex-direction:column;min-height:100vh}
#app>main{flex:1 0 auto}
#app>.site-foot{flex:none}

/* ── Section bands ──────────────────────────────────────────────────────
   Full-width color bands are the parent site's main structural device and
   the single biggest fix for "visually flat". Each band is a normal
   block-level section so it can never introduce the horizontal overflow a
   100vw full-bleed trick would risk; the reading container stays centered
   inside it at its existing max-width. */
.band{width:100%}
/* Text color on a navy band is set by inheritance plus a short list of
   named classes, never by a blanket element selector - a light-on-dark `p`
   rule would leak into the white result cards that sit inside the hero. */
.band-navy{background:var(--navy);color:var(--on-navy)}
.band-navy h1,.band-navy h2,.band-navy h3,.band-navy strong{color:var(--on-navy)}
.band-navy .lede,.band-navy .hero-lede,.band-navy .search-hint,
.band-navy .map-band-head p,.band-navy .small{color:var(--on-navy-soft)}
.band-navy .eyebrow,.band-navy .tagline,.band-navy .tagline-arrow{color:var(--brand-red-soft)}
/* Light panels that sit ON a navy band must re-assert the page ink color.
   Without this they inherit the band's white and their body text
   disappears against their own white background. */
.band-navy .map-interaction,.band-navy .map-aside,
.band-navy .homepage-search-results{color:var(--ink)}
/* `.band-navy strong` sets white for bold text on the band itself, but it
   also reaches bold text inside these light panels, where it rendered
   white-on-white -- the map tooltip's jurisdiction name and the located-
   status pill were both invisible. Re-assert ink at higher specificity
   rather than narrowing the band rule, which the dark bands still need. */
.band-navy .map-interaction strong,.band-navy .map-aside strong,
.band-navy .homepage-search-results strong{color:var(--ink)}
.band-cream{background:var(--cream)}
.band-paper{background:var(--paper)}

/* ── Page header band (interior pages) ────────────────────────────────── */
.page-band{padding:1.9rem 0 2rem}
.page-band .masthead{padding:0;border-bottom:0}
.page-band .masthead h1{font-size:var(--t-page);max-width:22ch;margin-bottom:.55rem}
.page-band .eyebrow{color:var(--brand-red-soft)}
.page-band .lede{max-width:64ch}

/* ── Map-page hero ──────────────────────────────────────────────────────
   Deliberately compact. The question and the search field are the whole
   hero; there is no photographic banner, so the map still starts near the
   top of the page on an ordinary laptop viewport. */
.hero{padding:1.25rem 0 1rem}
/* Two columns on desktop: the statement occupies the left, the search
   control the right. That closes the large empty right half a single
   centered column left behind and keeps the hero short enough that the map
   still reaches the first screen. */
.hero-inner{
  display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
  gap:1rem 3.5rem;align-items:center
}
.hero .eyebrow{margin:0 0 .45rem}
/* Visible homepage H1: the product's subject, set as one restrained display
   line above the hero question rather than competing with it. Sized between
   the eyebrow and the question so the hero's existing hierarchy is intact. */
.hero-title{
  margin:0 0 .45rem;font:800 1.12rem/1.2 var(--f-display);
  letter-spacing:-.005em;color:var(--on-navy)
}
.hero-question{
  margin:0 0 .65rem;
  font:800 clamp(1.5rem,2.4vw,2rem)/1.12 var(--f-display);letter-spacing:-.022em;color:var(--on-navy)
}
.hero-lede{margin:0;font-size:.95rem}
.hero-search{padding-bottom:.2rem}
.hero .jurisdiction-search{padding:0;border-bottom:0}
.hero .jurisdiction-search>.search-heading{margin:0 0 .5rem;font:800 .95rem var(--f-display);color:var(--on-navy)}
.hero .search-heading label{cursor:pointer}
.hero .search-row{max-width:none}
.hero .search-row input{border:2px solid transparent;background:#fff;padding:.85rem .95rem;font-size:1rem}
.hero .search-row input:focus-visible{border-color:var(--brand-red-soft);box-shadow:none}
.hero .search-hint{margin:.65rem 0 0;font-size:var(--t-fine)}
/* Inline results drop onto their own light surface inside the hero so the
   result cards keep exactly the colors they use everywhere else. */
.hero .homepage-search-results:not(:empty){
  margin-top:1.4rem;background:var(--paper);color:var(--ink);
  border-radius:var(--radius);padding:.2rem 1.1rem 1.1rem
}
.hero .homepage-search-results h2{color:var(--ink)}
.hero .homepage-search-results .small,.hero .homepage-search-results .eyebrow{color:var(--ink-soft)}

/* Search inputs read as brand-grade controls rather than default widgets. */
.search-row input{border:2px solid var(--surface-edge);border-radius:2px}
.jurisdiction-search>.search-heading{
  display:block;margin:0 0 .45rem;font:800 1.02rem var(--f-display);color:var(--ink)
}
.jurisdiction-search.is-compact>.search-heading{font-size:.85rem;font-weight:700;margin-bottom:.3rem}

/* ── Map band ───────────────────────────────────────────────────────────
   The map sits in a white panel framed by navy, which is what makes it
   read as the centerpiece of the page instead of one more section on the
   same flat background. */
.map-band{padding:1rem 0 2.4rem}
/* Section-heading row for the map. It is the grid's first row and spans
   both tracks, so its box is exactly as wide as the map column + gap +
   legend column. That is what puts the count's right edge on the legend
   card's right edge without any fixed width, offset, or transform: the
   alignment is inherited from the same track sizing the map and legend
   already use, at every width and in the stacked layout too. */
.map-band-head{
  grid-column:1/-1;
  display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;
  gap:.35rem 1.5rem;margin:0
}
.map-band-head h2{margin:0;font:800 var(--t-section) var(--f-display);color:var(--on-navy)}
.map-band-head p{margin:0;font-size:var(--t-meta);color:var(--on-navy-soft)}
/* The frame is applied to .map-interaction itself rather than to a padded
   wrapper: an extra wrapper's horizontal padding would shrink the rendered
   map, and the usable map area must not lose width to decoration. */
.map-band .map-interaction{
  border:1px solid var(--navy-line);border-radius:var(--radius);
  box-shadow:0 10px 30px rgba(8,9,60,.32)
}
.map-band .map-note{margin:.85rem .1rem 0;color:var(--on-navy-soft);opacity:1}

/* ── Legend ─────────────────────────────────────────────────────────────
   Split into two explicitly labelled groups. Map fill answers one question
   (is participation verified); the flag overlay answers a different one
   (has a relevant official taken a published position). Grouping, a rule
   between them, and a plain-language note keep a red status and a red flag
   from ever reading as the same signal. */
.map-aside{
  background:var(--surface);border:0;border-radius:var(--radius);
  padding:0 0 1.05rem;overflow:hidden;box-shadow:0 10px 30px rgba(8,9,60,.28)
}
.map-aside h2{
  margin:0;padding:.85rem 1.05rem;background:var(--navy-2);color:var(--on-navy);
  font:800 .96rem var(--f-display);letter-spacing:.01em
}
.map-aside>p{margin:.85rem 1.05rem .95rem;font-size:var(--t-fine);color:var(--ink-soft)}
.legend-group{padding:0 1.05rem}
.legend-group+.legend-group{margin-top:.8rem;padding-top:.8rem;border-top:1px solid var(--surface-edge)}
.legend-group-label{
  margin:0 0 .5rem;font:800 .66rem var(--f-display);letter-spacing:.09em;
  text-transform:uppercase;color:var(--ink-soft)
}
/* Own line rather than wrapping mid-phrase inside the uppercase label. */
.legend-group-note{display:block;font-weight:600;font-size:.95em;letter-spacing:.02em;text-transform:none}
.legend-group-overlay .legend-group-label{color:var(--alert-dark)}
.legend-list{gap:.42rem}
.legend-list li{align-items:flex-start;line-height:1.3;font-size:.83rem}
.legend-list li>svg{margin-top:.05rem}
/* Square color chips rather than icon badges: the legend now distinguishes
   six fills, and a text label on every row is what carries the meaning. */
.legend-swatch{
  width:1.1rem;height:1.1rem;flex:none;border-radius:3px;margin-top:.05rem;
  border:1px solid rgba(30,42,50,.22)
}
.legend-swatch-wso{background:var(--st-model-wso)}
.legend-swatch-jem{background:var(--st-model-jem)}
.legend-swatch-tfm{background:var(--st-model-tfm)}
.legend-swatch-unresolved{background:var(--st-unresolved)}
.legend-swatch-not_verified{background:var(--st-not_verified)}
.legend-swatch-formal_rejection{background:var(--st-formal_rejection)}
/* ── Local action at a glance ───────────────────────────────────────────
   Same records, same grouping, same data source - louder. Cards get a
   solid status-colored header rule and a filled action button so they stop
   dissolving into the page background. */
.featured-band{padding:2.5rem 0 3rem}
.featured-jurisdictions{margin:0;padding:0;border-top:0}
.featured-jurisdictions>h2{
  margin:0 0 1.4rem;font-size:var(--t-section);text-transform:uppercase;
  letter-spacing:.09em;color:var(--navy)
}
.featured-jurisdictions>h2::after{
  content:"";display:block;width:3.5rem;height:4px;margin-top:.6rem;background:var(--brand-red)
}
.featured-group+.featured-group{margin-top:2rem}
.featured-group>h3{font-size:1.1rem;margin:0 0 .85rem}
.featured-group-participation>h3{color:var(--st-participating)}
.featured-group-opposition>h3{color:var(--alert-dark)}
.featured-card{
  border:1px solid var(--surface-edge);border-top:5px solid var(--ink-soft);
  border-radius:0 0 var(--radius) var(--radius);background:var(--surface);
  padding:1.15rem 1.25rem 1.3rem;box-shadow:0 2px 10px rgba(8,9,60,.09)
}
.featured-card-participation{border-left:1px solid var(--surface-edge);border-top-color:var(--st-participating);background:var(--surface)}
.featured-card-opposition{border-left:1px solid var(--surface-edge);border-top-color:var(--alert);background:var(--surface)}
.featured-card h4{margin:.45rem 0 .55rem;font-size:1.45rem;letter-spacing:-.015em}
.featured-type{background:var(--paper-deep);border-color:transparent;color:var(--ink-soft)}
.featured-status{gap:.5rem;font-size:.92rem;font-weight:800}
.featured-summary{margin:.65rem 0 1.15rem;color:var(--ink-soft)}
.featured-link{
  border:2px solid var(--navy);border-radius:2px;background:var(--navy);color:#fff;
  min-height:2.6rem;padding:.5rem 1rem;font-size:.78rem
}
.featured-link:hover{background:#fff;color:var(--navy);border-color:var(--navy)}

/* ── Jurisdiction record header ─────────────────────────────────────────
   Replaces the tall, near-empty masthead + back-link + search stack that
   pushed the actual record far below the fold. Identity sits left, the
   "search another jurisdiction" control sits right at a supporting size,
   and the record itself starts immediately underneath. */
.record-band{padding:1.5rem 0 1.7rem}
.record-band-inner{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,22rem);
  gap:1rem 2.5rem;align-items:end
}
.record-band .masthead{padding:0;border-bottom:0}
.record-band .masthead h1{margin:.15rem 0 0;font-size:var(--t-page)}
.record-band .eyebrow{color:var(--brand-red-soft)}
.record-band .back-link-top{margin:0 0 .75rem;font-size:.88rem}
.record-band .back-link-top a{color:var(--on-navy-soft);font-weight:600;text-decoration:none}
.record-band .back-link-top a:hover{color:#fff;text-decoration:underline}
.record-band .jurisdiction-search{padding:0;border-bottom:0}
.record-band .search-heading{color:var(--on-navy-soft);font-weight:700}
.record-band .search-row input{border:2px solid transparent}
.record-band .search-row input:focus-visible{border-color:var(--brand-red-soft);box-shadow:none}
.record-body{padding:1.9rem 0 2.6rem}
.jurisdiction-layout{margin:0}
.jurisdiction-page .back-link{margin:1.4rem 0 0}

/* ── Operational status block ───────────────────────────────────────────
   Promoted from a tinted note to the record's own status header: a solid
   status-colored rail, a larger label, and the model chips directly under
   it. Each of the four categories keeps its own distinct treatment, so two
   red-accented jurisdictions with different underlying reasons (a declined
   operational status vs. a documented official position) never look alike. */
.operational-status{
  border:1px solid var(--surface-edge);border-left-width:8px;
  border-radius:var(--radius-sm);padding:1.2rem 1.35rem;margin:0 0 1.15rem
}
.jurisdiction-card>.operational-status:first-of-type{margin-top:.15rem}
.status-top-row{gap:.65rem;margin-bottom:.35rem}
.status-badge{font-size:.7rem;letter-spacing:.07em;padding:.28rem .7rem}
.operational-label{margin:.35rem 0 .55rem;font-size:var(--t-status);letter-spacing:-.018em}
.operational-model{font-size:.9rem}
.status-explanation{font-size:.9rem;max-width:64ch}

/* ── Idaho Immigration Watch advocacy module ────────────────────────────
   The one place on a record page that is allowed to look like a campaign.
   It keeps its explicit sponsor attribution and stays visually separate
   from every sourced panel above it: solid navy field, red rule, red call
   to action. Sourced findings never receive this treatment. */
.advocacy-card{
  border:0;border-top:5px solid var(--brand-red);border-radius:0 0 var(--radius) var(--radius);
  background:var(--navy);color:var(--on-navy);padding:1.35rem 1.4rem 1.4rem;margin:1.5rem 0 0
}
/* The top rule stays brand red for every tone. It marks whose voice the
   card is, not what the jurisdiction's status is - tinting it with a
   status color would put a green or yellow bar directly beneath a green or
   yellow status panel and invite exactly the conflation this design has to
   avoid. Tone still differentiates the cards through the headline icon and
   the message-template accent. */
.advocacy-card.tone-positive,.advocacy-card.tone-encourage,.advocacy-card.tone-neutral{
  background:var(--navy);border-top-color:var(--brand-red)
}
.action-attribution,
.advocacy-card.tone-positive .action-attribution,
.advocacy-card.tone-encourage .action-attribution,
.advocacy-card.tone-neutral .action-attribution{color:var(--brand-red-soft)}
.advocacy-headline{margin:.55rem 0 0;font-size:1.28rem;line-height:1.25;color:var(--on-navy)}
.advocacy-support-copy{margin:.55rem 0 0;color:var(--on-navy-soft);font-size:.95rem;max-width:62ch}
.advocacy-card .primary-action{margin-top:1.1rem}
.advocacy-card .primary-action:hover{background:#fff;color:var(--navy);border-color:#fff}
.message-template,
.advocacy-card.tone-positive .message-template,
.advocacy-card.tone-encourage .message-template,
.advocacy-card.tone-neutral .message-template{
  background:rgba(255,255,255,.07);border-left:3px solid var(--brand-red-soft);
  border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:.95rem 1.05rem;margin:1.15rem 0 0
}
.message-template-label{color:var(--on-navy-soft)}
.message-fields dt{color:var(--on-navy-soft)}
.message-fields dd{color:var(--on-navy)}
.message-subject{font-size:1.02rem}
.copy-message-button{
  border:1px solid rgba(255,255,255,.45);border-radius:2px;background:transparent;color:#fff
}
.copy-message-button:hover{background:#fff;color:var(--navy);border-color:#fff}
.copy-status{color:var(--on-navy-soft)}
.advocacy-card .contact-options{border-top-color:var(--navy-line)}
.advocacy-card .contact-options summary{color:var(--on-navy)}
.advocacy-card .contact-list li{border-bottom-color:var(--navy-line)}
.advocacy-card .contact-list a{color:var(--brand-red-soft)}
.advocacy-card .verification{color:var(--on-navy-soft)}
.advocacy-card :focus-visible{outline-color:var(--brand-red-soft)}

/* ── Record surfaces stay quiet ─────────────────────────────────────────
   Evidence keeps a white, low-ornament treatment so credibility is never
   traded for energy. */
.jurisdiction-card{padding:1.5rem 1.6rem;border-radius:var(--radius);box-shadow:0 2px 12px rgba(8,9,60,.08)}
.jurisdiction-card-compact{padding:1.25rem 1.35rem}
/* A documented official position is evidence, so it gets the white
   evidence-card surface with a colored rail. Operational status gets a
   filled tint. That structural difference is what keeps a red status and a
   red flag apart on a jurisdiction like Canyon County, where both appear
   one above the other - previously the two shared near-identical pink
   fills and were told apart only by their icon. */
.accountability-card{
  border:1px solid rgba(180,35,24,.3);border-left:6px solid var(--alert);
  border-radius:var(--radius-sm);background:var(--surface)
}
.accountability-card.tone-concern{
  border-color:rgba(156,91,52,.32);border-left-color:var(--rust);background:var(--surface)
}
.accountability-label{font-size:.74rem}
.source-summary-line{
  margin-top:1.3rem;padding-top:1rem;border-top:1px solid var(--rule);font-size:var(--t-meta)
}
.source-summary-link{color:var(--navy)}
.source-summary-link:hover{color:var(--brand-red)}
.detailed-record>summary{font-size:.98rem}
.detailed-record>summary::before{color:var(--brand-red)}
.research-intro{border-left-color:var(--navy)}
.research-jump-list a{color:var(--navy)}
.research-jump-list a:hover{background:var(--paper-deep);border-color:var(--navy)}
.section,.research-section h3{color:var(--ink)}

/* ── Directory and about ────────────────────────────────────────────────*/
.directory-body,.about-body{padding:1.9rem 0 2.6rem}
.data-table th{background:var(--navy);color:#fff;border-bottom:0;padding:.7rem .6rem}
.data-table caption{color:var(--ink-soft);font-size:var(--t-meta)}
.directory-filter{border-color:var(--navy);color:var(--navy);border-radius:2px}
.directory-filter:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.directory-filter[aria-pressed="true"]{border-color:var(--navy);background:var(--navy);color:#fff}
.directory-result-count{font:700 var(--t-meta) var(--f-display);color:var(--ink-soft);margin:.2rem 0 0}
/* Two columns on wide screens. Each methodology note is short enough that a
   single 74ch column left most of the page empty and made the page read as
   a long scroll of loose paragraphs. */
.about-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(24rem,1fr));gap:0 3rem}
.about-body .research-section{
  border-top:0;border-bottom:1px solid var(--rule);padding:1.35rem 0;margin:0
}
.about-body .research-section h2{font-size:1.1rem;margin:0 0 .4rem;color:var(--navy)}
.about-body .research-section p{margin:0;max-width:62ch;color:var(--ink-soft)}
.about-body .verification{margin-top:1.8rem}
@media(max-width:880px){.about-grid{grid-template-columns:1fr;gap:0}}

/* ── Result and empty surfaces ──────────────────────────────────────────*/
.result-card{border-top:4px solid var(--navy);border-radius:0 0 var(--radius) var(--radius)}
.result-card h2{font-size:var(--t-card)}
.empty-state{border:1px solid var(--surface-edge);border-radius:var(--radius);background:var(--surface)}
.fail-closed{border-radius:var(--radius)}
.context-note{border-left-color:var(--navy);background:#EEF0F8;border-radius:0 var(--radius-sm) var(--radius-sm) 0}

/* ── Responsive ─────────────────────────────────────────────────────────
   Mobile is composed rather than compressed: the masthead becomes a single
   brand row with a wrapped nav strip, the hero and record headers drop to
   one column, and the footer stacks left-aligned. */
@media(max-width:900px){
  .record-band-inner{grid-template-columns:1fr;align-items:start}
  .record-band .jurisdiction-search{max-width:32rem}
}
@media(max-width:880px){
  .map-band{padding:1.6rem 0 1.9rem}
  .map-aside{margin-top:1.25rem}
  /* The legend spans the full column once it drops below the map, so its
     four fill rows sit two-up instead of running down one narrow edge. */
  .legend-group-participating .legend-list,
  .legend-group-other .legend-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem 1.4rem}
}
@media(max-width:520px){
  .legend-group-participating .legend-list,
  .legend-group-other .legend-list{grid-template-columns:1fr}
}
@media(max-width:880px){
  .hero-inner{grid-template-columns:1fr;align-items:start}
  .hero-search{max-width:34rem}
}
@media(max-width:640px){
  /* Both fit on one line at 390px, but the count then reads as a value
     trailing the heading rather than as a caption for the map. Stack it
     explicitly, left-aligned under the heading, with modest spacing -
     never centered, and never shrunk to force a single line. */
  .map-band-head{flex-direction:column;align-items:flex-start;gap:.25rem}
  .brand-mark{height:2.05rem}
  .brand-product{padding-left:.65rem;font-size:.66rem;letter-spacing:.14em}
  .head-inner nav{gap:.9rem 1.1rem;border-top:1px solid var(--navy-line);padding-top:.7rem}
  /* Homepage-only compact masthead; other routes retain their existing header. */
  .homepage-head .head-inner{display:flex;flex-wrap:nowrap;justify-content:space-between;gap:.6rem;padding:.4rem .85rem}
  .homepage-head .brand{gap:.5rem}
  .homepage-head .brand-mark{width:2rem;height:2rem;object-fit:cover;object-position:left}
  .homepage-head .brand-product{border:0;padding:0;font-size:.72rem;letter-spacing:0;white-space:nowrap}
  .homepage-head .parent-link{display:none}
  .homepage-head nav{width:auto;margin:0;padding:0;border:0;gap:.65rem;flex-wrap:nowrap;font-size:.8rem}
  .homepage-head nav a{display:flex;align-items:center;min-height:44px;padding:.35rem 0}
  .hero{padding:1rem 0 .65rem}
  .hero-title{font-size:1.2rem;margin-bottom:.85rem}
  .hero-question{font-size:1.6rem;line-height:1.25;margin-bottom:.85rem}
  .hero-lede{font-size:.9rem;line-height:1.45}
  .hero-inner{gap:.55rem}
  .hero-copy,.hero-search{min-width:0}
  .hero-search{margin:0;max-width:none}
  .hero .search-row{display:flex;gap:.5rem}
  .hero .search-row input{width:0;padding:.7rem .6rem;font-size:.85rem}
  .hero .primary-button{width:auto;flex:none;padding:.7rem .85rem;min-height:44px}
  .hero .search-hint{display:none}
  .map-page .map-band{padding-top:0}
  .page-band,.record-band{padding:1.35rem 0 1.5rem}
  .record-body{padding:1.3rem 0 2rem}
  .featured-band{padding:1.9rem 0 2.2rem}
  .featured-card h4{font-size:1.3rem}
  .jurisdiction-card{padding:1.1rem 1rem}
  .operational-status{padding:1rem 1.05rem;border-left-width:6px}
  .advocacy-card{padding:1.1rem 1.05rem 1.2rem}
  .message-template{padding:.8rem .85rem}
  .foot-inner{flex-direction:column;align-items:flex-start}
  .foot-actions{align-items:flex-start;width:100%}
  .foot-main-site{width:100%}
}

/* Server-rendered content for crawlers and for the moment before app.js
   hydrates. renderApp() replaces all of it with the interactive view, so
   these rules never apply to the running application; they exist so the
   prerendered page is legible rather than unstyled if it is ever seen. */
.seo-directory-list{margin:.9rem 0;padding-left:1.2rem;line-height:1.65}
.seo-directory-list a{font-weight:600}
.record-models,.record-structure,.record-contacts,.record-sources,.record-related{
  margin-top:1.4rem;padding-top:1.1rem;border-top:1px solid var(--rule)
}
.record-nav{margin:1.6rem 0 2.4rem}

/* State agencies sit outside the map and the local-jurisdiction directory. */
.statewide-band{padding:1.8rem 0}
.statewide-participation{margin:0 0 1.7rem}
.statewide-participation h2,.participation-totals h2{font-size:1.35rem}
.statewide-scope-note{max-width:70ch;margin:.6rem 0 1.1rem}
.statewide-agency-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.statewide-agency-card{min-width:0;padding:1.2rem}
.statewide-agency-card h3{font-size:1.2rem;margin:.3rem 0 .7rem}
.statewide-agency-card .operational-model-line{flex-wrap:wrap}
.statewide-status{display:flex;align-items:center;gap:.35rem}
.participation-totals{border-top:1px solid var(--rule);padding-top:1rem}
.participation-totals p{margin:.45rem 0}
.participation-total{font-weight:700}
@media(max-width:640px){.statewide-agency-grid{grid-template-columns:1fr}.statewide-band{padding:1.3rem 0}}

/* A7: only the homepage search popup; no map/layout/record styling changes. */
.hero-search .jurisdiction-search{position:relative}
.jurisdiction-suggestions{
  position:absolute;inset:auto 0 auto;top:100%;z-index:60;
  margin-top:.35rem;max-height:var(--suggestion-height,440px);display:flex;flex-direction:column;
  background:var(--paper);color:var(--ink);border:2px solid var(--ink);
  border-radius:var(--radius-sm);box-shadow:0 8px 22px rgba(0,0,0,.24);
  font-family:var(--f-display);font-size:.9rem;overflow:hidden
}
.jurisdiction-suggestions[hidden],.jurisdiction-suggestions [hidden]{display:none}
.jurisdiction-suggestions[data-placement=above]{top:auto;bottom:100%;margin-top:0;margin-bottom:.35rem}
.suggestion-heading{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.3rem .65rem;border-bottom:1px solid var(--rule);flex:none}
.suggestion-summary{margin:0;font-weight:800;overflow-wrap:anywhere}
.suggestion-dismiss{font:inherit;min-height:40px;padding:.35rem .45rem;background:transparent;color:var(--ink);border:1px solid var(--rule);border-radius:var(--radius-sm);cursor:pointer}
.suggestion-list{list-style:none;margin:0;padding:0;overflow-y:auto;overscroll-behavior:contain;min-height:0;flex:1 1 auto}
.suggestion-list [role=option]{padding:.5rem .7rem;min-height:44px;cursor:pointer;border-bottom:1px solid var(--rule)}
.suggestion-list [role=option]:not([aria-selected=true]):hover{background:var(--surface)}
.suggestion-list [aria-selected=true]{background:var(--ink);color:var(--paper);outline:2px solid var(--focus);outline-offset:-3px}
.suggestion-name,.suggestion-context{display:block}
.suggestion-name{font-weight:800}
.suggestion-context{font-size:.78rem;line-height:1.3;margin-top:.12rem}
.suggestion-note{margin:0;padding:.45rem .7rem;font-size:.78rem;line-height:1.35;flex:none}
.suggestion-all{display:block;padding:.65rem .7rem;border-top:1px solid var(--rule);font-weight:800;min-height:44px;flex:none}
.suggestion-actions{display:flex;flex-wrap:wrap;gap:.5rem;padding:.65rem;flex:none}
.suggestion-actions a,.suggestion-actions button{min-height:44px;flex:1;text-align:center}
.suggestion-dismiss:focus-visible,.suggestion-actions :focus-visible,.suggestion-all:focus-visible{outline:3px solid var(--focus);outline-offset:-3px}
@media(forced-colors:active){
  .jurisdiction-suggestions{border-color:CanvasText;background:Canvas;color:CanvasText}
  .suggestion-list [aria-selected=true]{forced-color-adjust:none;background:Highlight;color:HighlightText;outline:2px solid Highlight}
}
/* End A7 search popup. */

/* City record hierarchy: scoped to municipal record routes. */
.city-record-page .record-band{background:var(--paper);color:var(--ink);padding-bottom:1rem}
.city-record-page .record-band .back-link-top a{color:var(--brand-red)}
.city-record-identity h1{font-size:clamp(2rem,4vw,3rem);line-height:1.1;margin:.6rem 0 .25rem}
.city-agency{font-size:1.25rem;font-weight:700;color:#515962;margin:0}
.city-record-page .record-body{padding-top:.5rem}
.city-record-page .jurisdiction-card{background:var(--paper)}
.city-record-page .operational-status{border:0;border-radius:12px;padding:1.4rem 1.5rem;background:#e9ebed;color:#08093c}
.city-record-page .operational-status.status-participating{background:#dff4d4}
.city-record-page .operational-status .status-badge{font-size:clamp(1.3rem,3vw,2rem);letter-spacing:-.02em;background:transparent;color:inherit;padding:0;border:0;line-height:1.15}
.city-record-page .operational-status.status-participating .status-badge{color:#006137}
.city-record-page .operational-label{font-size:1.2rem;line-height:1.3}
.city-record-page .status-explanation{font-size:1rem;max-width:80ch}
.city-record-page .city-county-context{background:#f4f4f3;border:1px solid #dedede;border-radius:10px;padding:1.1rem 1.25rem;margin-top:1.4rem;color:#303844;font-size:.9rem;box-shadow:0 1px 3px #00000012}
.city-county-context h2{font-size:1.15rem;margin:0 0 .5rem;color:var(--ink)}
.city-county-context h3{font-size:1rem;margin:.75rem 0 .3rem}
.city-county-context p{margin:.4rem 0;line-height:1.5}
.city-county-context a{display:inline-block;margin-top:.5rem;font-weight:700}
@media(max-width:640px){
 .city-record-page .record-band-inner{gap:.75rem}
 .city-record-page .city-agency{font-size:1.05rem}
 .city-record-page .operational-status{padding:1rem}
 .city-record-page .city-county-context{padding:1rem}
}

.city-record-page.jurisdiction-record-page .record-band{background:#fff}
.city-record-page.jurisdiction-record-page .city-record-identity h1{color:#08093c}
.city-record-page.jurisdiction-record-page .record-band .search-heading{color:#515962}
.city-record-page.jurisdiction-record-page .jurisdiction-card{background:#fff}
.city-record-page.jurisdiction-record-page .jurisdiction-card>.operational-status.status-not_verified{background:#e9ebed}
.city-record-page.jurisdiction-record-page .jurisdiction-card>.operational-status.status-participating{background:#dff4d4}
.city-record-page.jurisdiction-record-page .operational-status .status-badge{font-size:clamp(1.5rem,3vw,2rem)}
.city-record-page.jurisdiction-record-page .jurisdiction-card>.operational-status.status-not_verified{background:#e9ebed!important}
.city-record-page.jurisdiction-record-page .jurisdiction-card>.operational-status.status-participating{background:#dff4d4!important}
.city-record-page.jurisdiction-record-page .city-county-context h2{font-size:1.05rem}

/* Approved record-page hierarchy. Scoped away from home, directory and map. */
.refined-record-page .jurisdiction-page{max-width:880px}
.refined-record-page .record-band{background:#fff;color:var(--ink);padding:1rem 0 .9rem}
.refined-record-page .record-band .back-link-top a{color:var(--brand-red)}
.refined-record-page .city-record-identity h1{color:var(--ink);font-size:2.25rem;line-height:1.15;margin:.6rem 0 .3rem}
.refined-record-page .city-agency{font-size:1.05rem;color:#515962;margin:0;font-weight:700}
.refined-record-page .record-band .search-heading{color:var(--ink);font-size:.75rem}
.refined-record-page .record-band .search-row input{font-size:.8125rem}
/* Record-page search field: the band is white, so the field gets a paper-tone fill, a visible ink border and a darker
   placeholder; hover and keyboard focus are distinct states. Palette and type are the established ones. */
.city-record-page .record-band .search-row input,.refined-record-page .record-band .search-row input{background:var(--paper);border:2px solid var(--ink-soft);color:var(--ink)}
.city-record-page .record-band .search-row input::placeholder,.refined-record-page .record-band .search-row input::placeholder{color:#4f5d67;opacity:1}
.city-record-page .record-band .search-row input:hover,.refined-record-page .record-band .search-row input:hover{border-color:var(--ink);background:#fff}
.city-record-page .record-band .search-row input:focus-visible,.refined-record-page .record-band .search-row input:focus-visible{background:#fff;border-color:var(--brand-red-dark);box-shadow:0 0 0 3px rgba(196,30,58,.22)}
/* County status on a full city record: the shared status chip, carrying the county's own published label. */
.city-county-context .county-context-status{margin:.15rem 0 .5rem}
.city-county-context .status-badge{text-transform:none;letter-spacing:0;font-size:.8rem;line-height:1.35;padding:.3rem .8rem;max-width:100%;white-space:normal;border-radius:14px}
.refined-record-page .record-body{padding-top:.55rem}
.refined-record-page .jurisdiction-card{padding:1.35rem 1.25rem;font-size:.8125rem;line-height:1.55;background:#fff}
.refined-record-page .jurisdiction-card>.operational-status{border:0;border-radius:10px;padding:1.2rem 1.35rem;margin:0 0 .9rem;color:var(--ink)}
.refined-record-page .jurisdiction-card>.operational-status.status-participating{background:#dff4d4!important}
.refined-record-page .jurisdiction-card>.operational-status.status-not_verified{background:#e9ebed!important}
.refined-record-page .jurisdiction-card>.operational-status.status-formal_rejection{background:#fbe2e4!important}
.refined-record-page .jurisdiction-card .operational-status .status-badge{background:transparent;color:inherit;border:0;padding:0;font-size:1.5rem;letter-spacing:-.03em;line-height:1.2}
.refined-record-page .jurisdiction-card .operational-status.status-participating .status-badge{color:#007345}
.refined-record-page .jurisdiction-card .operational-status.status-formal_rejection .status-badge{color:#b71c35}
.refined-record-page .jurisdiction-card .status-explanation{font-size:.8125rem;line-height:1.65;max-width:none;margin:.6rem 0 0}
.refined-record-page .jurisdiction-card .operational-model{font-size:.75rem;margin:.4rem 0 0}
.refined-record-page .record-at-a-glance{margin-top:1rem;padding-top:.7rem;border-top:1px solid #00000016}
.record-at-a-glance h3{font-size:.75rem;margin:0 0 .35rem}
.record-at-a-glance ul{display:flex;gap:.5rem 1rem;flex-wrap:wrap;list-style:none;padding:0;margin:0}
.record-at-a-glance li{flex:1 1 16rem;font-size:.75rem;line-height:1.55}
.refined-record-page .accountability-card{padding:1rem 1.1rem;border-left-width:4px;margin:.9rem 0}
.refined-record-page .accountability-card h3{font-size:.875rem}
.refined-record-page .accountability-card p{font-size:.8125rem;line-height:1.6}
.refined-record-page .jurisdiction-card>.additional-context-section{background:#fcfaf6;border:1px solid #ead9c7;border-left:4px solid #a45b35;border-radius:4px;padding:.9rem 1rem;margin:.9rem 0}
.refined-record-page .additional-context-section h3{font-size:.875rem;margin:0 0 .4rem}
.refined-record-page .city-county-context{font-size:.8125rem;padding:1rem;margin:.9rem 0}
.refined-record-page .city-county-context h2{font-size:.9375rem}
.refined-record-page .city-county-context h3{font-size:.8125rem}
.refined-record-page .city-county-context .operational-model{font-size:.75rem}
.refined-record-page .source-summary-line{font-size:.75rem;padding:.75rem 0;margin:1rem 0}
.refined-record-page .advocacy-card{padding:1rem 1.1rem;margin:1rem 0}
.refined-record-page .advocacy-headline{font-size:1rem;line-height:1.4}
.refined-record-page .advocacy-support-copy{font-size:.8125rem;line-height:1.6}
.refined-record-page .action-attribution{font-size:.6875rem}
.refined-record-page .message-template{padding:.85rem .9rem;margin:.9rem 0 0}
.refined-record-page .message-fields{font-size:.75rem}
.refined-record-page .message-subject{font-size:.8125rem}
.refined-record-page .detailed-record>summary{font-size:.8125rem}
@media(max-width:640px){
 .refined-record-page .record-band{padding:1.3rem 0 1rem}
 .refined-record-page .city-record-identity h1{font-size:1.75rem}
 .refined-record-page .jurisdiction-card{padding:.9rem .85rem}
 .refined-record-page .jurisdiction-card>.operational-status{padding:1rem .85rem}
 .refined-record-page .jurisdiction-card .operational-status .status-badge{font-size:1.3rem}
 .refined-record-page .record-at-a-glance ul{display:block}
 .refined-record-page .record-at-a-glance li+li{margin-top:.5rem}
 .refined-record-page .city-county-context{padding:.9rem}
 .refined-record-page .accountability-card{padding:.85rem .95rem}
}

.refined-record-page.jurisdiction-record-page .city-county-context h2{font-size:.9375rem}
.refined-record-page .jurisdiction-card .model-term{font-size:.75rem}

.refined-record-page .jurisdiction-card>.operational-status .status-top-row{flex-wrap:nowrap}
.refined-record-page .jurisdiction-card>.operational-status .status-badge{min-width:0;flex:1;white-space:normal}
.refined-record-page .jurisdiction-card>.operational-status .status-icon-badge{flex-shrink:0}

/* Local Civic Atlas experiment. All presentation is scoped to ?atlas=1. */
.civic-atlas{
  --atlas-paper:#eae8e0;--atlas-ink:#20313c;--atlas-rule:#dedbd2;
  position:relative;min-height:760px;height:100svh;overflow:hidden;
  background:var(--atlas-paper);color:var(--atlas-ink);font-family:"Segoe UI",sans-serif;
}
.civic-atlas h1,.civic-atlas h2,.civic-atlas h3,.atlas-brand{font-family:Georgia,"Times New Roman",serif;font-weight:400}
.civic-atlas button,.civic-atlas input{font-family:inherit}
.civic-atlas a{color:inherit}
.civic-atlas :focus-visible{outline:3px solid #98622c;outline-offset:3px}
/* The information-panel title takes scripted focus when a place is selected. After a mouse or touch selection it should not
   draw a ring; keyboard-initiated selection (input modality "keyboard", the default) still shows it. */
.civic-atlas[data-input=pointer] #atlas-panel-title:focus,.civic-atlas[data-input=pointer] #atlas-panel-title:focus-visible{outline:none}
.civic-atlas [hidden]{display:none!important}
.atlas-header{position:absolute;inset:26px 32px auto;z-index:5;display:flex;justify-content:space-between;align-items:center;gap:20px}
/* The approved logo artwork is reversed (white) for the navy masthead, so it keeps its navy ground. */
.atlas-brand{display:inline-flex;align-items:center;gap:12px;text-decoration:none;background:var(--navy);color:var(--on-navy);
  border-radius:14px;padding:9px 18px 9px 15px;border-bottom:3px solid var(--brand-red)}
.atlas-brand-mark{display:block;height:34px;width:auto;flex:none}
.atlas-brand-product{padding-left:12px;border-left:1px solid var(--navy-line);font:800 11px/1.25 "Segoe UI",sans-serif;
  letter-spacing:.17em;text-transform:uppercase;color:var(--on-navy)}
.atlas-brand:hover .atlas-brand-product{color:var(--brand-red-soft)}
.atlas-header nav{display:flex;gap:5px;background:#f8f6f0;padding:5px;border-radius:30px}
.atlas-header nav a{font-size:15px;padding:9px 20px;text-decoration:none;min-height:44px}
.atlas-header nav a:first-child{background:var(--atlas-ink);color:white;border-radius:24px}
.atlas-intro{position:absolute;z-index:2;top:142px;left:32px;width:27%;max-width:410px}
.atlas-intro .eyebrow{color:#216b60;font-size:12px;letter-spacing:.15em;margin:0 0 12px}
.atlas-intro h1{font-size:clamp(36px,3.5vw,60px);line-height:1.06;letter-spacing:-.035em;margin:0}
.atlas-lede{font-size:17px;line-height:1.6;margin:24px 0 0}
.atlas-search{position:absolute;left:32px;top:480px;width:27%;max-width:410px;z-index:8}
/* Anchor the suggestion list to the search field in every layout (the grid layout makes .atlas-search static). */
.atlas-search .jurisdiction-search{padding:0;border:0;position:relative}
.atlas-search .search-heading{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden}
.atlas-search .search-row{display:flex;background:#fff;padding:6px;border:1px solid #c9c7bf;border-radius:17px;gap:4px;box-shadow:0 8px 24px #20313c12}
.atlas-search input{min-width:0;width:100%;padding:12px 9px;border:0;background:white;color:var(--atlas-ink);font-size:16px;box-shadow:none}
.atlas-search .primary-button{background:var(--atlas-ink);color:#fff;border:0;border-radius:12px;padding:12px 16px;font-size:13px;min-height:48px;width:auto;flex:none}
.atlas-directory{font-size:13px;margin:14px 3px}
.atlas-legend{position:absolute;left:32px;bottom:42px;width:27%;max-width:410px;z-index:5;background:#faf9f4;border-radius:20px;padding:14px 18px;box-shadow:0 8px 28px #20313c08}
.atlas-legend>summary{cursor:pointer;font-size:12px;letter-spacing:.12em;text-transform:uppercase;min-height:24px}
.atlas-legend .map-aside{background:transparent;box-shadow:none;border:0;padding:0;margin:0;max-height:none;overflow:visible;position:static}
.atlas-legend .map-aside>h2{display:none}
.atlas-legend .map-aside>p{font-size:12px;line-height:1.45;color:#52666d;margin:9px 0 0}
.atlas-legend .legend-groups{display:grid;gap:0;margin-top:10px}
.atlas-legend .legend-group{padding:9px 0 0;margin:9px 0 0;border:0;border-top:1px solid var(--atlas-rule)}
.atlas-legend .legend-group:first-child{margin-top:0;padding-top:0;border-top:0}
.atlas-legend .legend-group-label{font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:#52666d;margin:0 0 6px}
.atlas-legend .legend-group-overlay .legend-group-label{color:#8a2a21}
.atlas-legend .legend-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:5px 14px;margin:0;padding:0;list-style:none}
.atlas-legend .legend-group-participating .legend-list{grid-template-columns:1fr}
.atlas-legend .legend-list li{display:flex;align-items:center;gap:8px;font-size:12.5px;line-height:1.3;min-width:0}
.atlas-legend .legend-swatch{flex:none}
.atlas-legend .map-aside>p:last-child{padding-top:8px;margin-top:8px;border-top:1px solid var(--atlas-rule)}
.atlas-map{position:absolute;inset:96px 30% 28px 29%;display:flex;align-items:center;justify-content:center}
/* Dragging the map must never paint native text selection over its labels. */
.atlas-map,.atlas-map *{-webkit-user-select:none;user-select:none}
.atlas-map .map-interaction{background:transparent;border:0;border-radius:0;padding:0;margin:0;width:auto;max-width:100%;touch-action:none;isolation:auto;overflow:visible}
.atlas-map .map{height:min(calc(100svh - 132px),calc(41vw * 1.6137));width:auto;max-width:100%;margin:0;aspect-ratio:640/1032.78;filter:drop-shadow(0 9px 13px #20313c15)}
.atlas-map .map-controls{top:12px;bottom:auto;left:auto;right:0;flex-direction:column;padding:3px;border:0;box-shadow:0 4px 18px #20313c16}
/* Restrained editorial cartography: counties are small tracked capitals, cities
   are italic serif, halos are thin so labels never read as gray boxes, and
   displaced-label leaders are hairlines. Sizes are set in the label engine. */
.atlas-map .county-label{font:600 12px "Segoe UI",system-ui,sans-serif;text-transform:uppercase;letter-spacing:.12em;fill:#5d6d70;stroke:#faf9f5cc;stroke-width:2.6px}
.atlas-map .county-label.is-selected{fill:var(--atlas-ink);font-weight:700}
.atlas-map .place-marker text{font:italic 400 13px Georgia,"Times New Roman",serif;fill:var(--atlas-ink);stroke:#faf9f5d9;stroke-width:2.8px;letter-spacing:0}
.atlas-map .place-marker.is-selected .place-label{font:600 15px Georgia,"Times New Roman",serif;font-style:normal;fill:var(--atlas-ink)}
.atlas-map .map-label-leader:not(.declined-county-leader){stroke:#7d8a8c;stroke-width:.75px;opacity:.5}
.atlas-map .map-label-leader.is-selected{stroke:var(--atlas-ink);stroke-width:1.4px;opacity:.95}
.atlas-map .map-label-leaders .declined-county-leader{stroke:#3d4d55;stroke-width:1px;opacity:.7}
.atlas-map .map-control{width:42px;height:42px;min-height:42px;background:#fff;color:var(--atlas-ink)}
.atlas-map .map-reset{font-size:11px;max-width:65px;background:#fff;color:var(--atlas-ink);min-height:44px}
.atlas-map .map-hint,.atlas-map .map-instructions,.atlas-map .map-located-status{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.atlas-map .map-tooltip{z-index:9}
.civic-atlas{--atlas-unverified-fill:#faf9f5;--atlas-county-line:#ddd9cf}
.atlas-map .county{fill:var(--atlas-unverified-fill);stroke:var(--atlas-county-line)}
/* The legend swatch for "No verified participation" is the map's actual county fill. */
.atlas-legend .legend-swatch-not_verified{background:var(--atlas-unverified-fill);border:1px solid #b9b5aa}
.atlas-map .state-outline{stroke:#344650;stroke-width:1.3}
.atlas-map .county.status-formal_rejection{fill:var(--st-formal_rejection)}
.atlas-map .county.status-unresolved{fill:var(--st-unresolved)}
.atlas-map .county.is-selected{stroke:#20313c;stroke-width:3}
.atlas-panel{position:absolute;right:28px;top:112px;bottom:42px;width:28%;max-width:480px;z-index:4;background:#fff;border-radius:24px;box-shadow:0 16px 45px #20313c12;display:flex;flex-direction:column;overflow:hidden}
.atlas-panel-heading{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:24px 24px 12px;flex:none}
.atlas-panel-kicker{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#52666d;margin:0 0 7px}
.atlas-panel-heading h2{font-size:34px;line-height:1.1;margin:0}
.atlas-close{flex:none;border:0;border-radius:50%;width:44px;height:44px;font-size:25px;background:#f3f1eb;color:var(--atlas-ink);cursor:pointer}
.atlas-panel-body{padding:4px 24px 24px;overflow-y:auto;overscroll-behavior:contain;min-height:0;scrollbar-width:thin}
.atlas-panel .participation-totals{border:0;background:transparent;padding:0;margin:8px 0 24px}
.atlas-panel .participation-totals h2{display:none}.atlas-panel .participation-total{font:30px/1.25 Georgia,serif}
.atlas-panel .participation-totals p:not(.participation-total){font-size:14px;color:#52666d;line-height:1.65}
.atlas-discovery,.atlas-selection-note{font-size:14px;line-height:1.5;color:#52666d}
.atlas-statewide{margin:0 0 18px;padding:14px 0 0;border-top:1px solid var(--atlas-rule)}
.atlas-statewide h3{font:600 11px "Segoe UI",sans-serif;letter-spacing:.12em;text-transform:uppercase;color:#3f6556;margin:0 0 8px}
.atlas-statewide ul{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.atlas-statewide li{font-size:14px;line-height:1.45}
.atlas-statewide a{display:inline-block;min-height:24px;font-weight:600}
.atlas-statewide-model{color:#52666d}
.atlas-statewide-note{font-size:12.5px;line-height:1.45;color:#52666d;margin:8px 0 0}
.atlas-example-actions{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}
.atlas-example-actions button{border:1px solid #d8d5cd;border-radius:10px;background:#f7f6f0;color:var(--atlas-ink);padding:12px 15px;min-height:44px;cursor:pointer}
.atlas-authorities{display:grid;gap:10px;margin:18px 0}
.atlas-authority{padding:16px;background:#f0f6f1;border-radius:16px}
.atlas-authority .eyebrow{font:11px "Segoe UI",sans-serif;letter-spacing:.11em;color:#3f6556;margin:0 0 9px}
.atlas-authority h3{font-size:21px;line-height:1.18;margin:0 0 10px}
.atlas-authority .status-badge{font-size:11px;text-transform:none;letter-spacing:0;padding:3px 7px;display:inline-block;margin:0 0 6px}
.atlas-authority .operational-model{margin:4px 0 9px}.atlas-authority .model-term{font-size:12px}
.atlas-limit{font-size:13px;line-height:1.5;color:#52666d;margin:10px 0 0}
.atlas-limit p{margin:0 0 6px}
.atlas-limit .atlas-limit-label{font:600 10px "Segoe UI",sans-serif;letter-spacing:.11em;text-transform:uppercase;color:#3f6556;margin-bottom:4px}
/* The model chips are separate pills; their decorative separators render as stray dots. */
.atlas-authority .operational-model-sep{display:none}
.atlas-action-line{font-size:14px;line-height:1.4;margin:10px 0 0;font-weight:600}
/* The desktop panel scrolls internally, so evidence limits stay visible there; the
   action headline belongs to the expandable phone sheet. */
@media(min-width:901px){.atlas-action-line{display:none}}
.atlas-service{font-size:12.5px;line-height:1.45;color:#52666d;margin:4px 0 0}
.atlas-service strong{color:var(--atlas-ink);font-weight:600}
.atlas-flag-scope{display:block;font-weight:400;color:#52666d;font-size:12px;margin-top:2px}
.atlas-flag-detail{font-size:13px;line-height:1.5;color:#52666d;margin:6px 0 0}
.atlas-flag-detail p{margin:0 0 4px}.atlas-flag-detail .atlas-flag-attribution{font-size:12px;font-style:italic}
.atlas-authority-actions{display:flex;flex-wrap:wrap;align-items:center;gap:4px 16px;margin-top:12px}
.atlas-authority a.atlas-action-link{display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border-radius:12px;background:var(--atlas-ink);color:#fff;font-size:14px;font-weight:600;text-decoration:none}
.atlas-authority a.atlas-action-link:hover,.atlas-authority a.atlas-action-link:focus-visible{background:#2e4552;color:#fff}
.atlas-full-record{font-size:13px;display:inline-flex;align-items:center;min-height:44px}
/* Compact jurisdiction card (pilot cities): status, one plain explanation, then short labeled blocks. */
.atlas-compact .atlas-compact-meaning{font-size:14px;line-height:1.46;margin:4px 0 0}
.atlas-compact-block{margin:6px 0 0}
.atlas-compact-block h4{font:600 10px "Segoe UI",sans-serif;letter-spacing:.11em;text-transform:uppercase;color:#3f6556;margin:0 0 3px}
.atlas-compact-block p{font-size:13.5px;line-height:1.4;margin:0}
.atlas-compact-block ul{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.atlas-position p{margin:0}
.atlas-position-who{font-size:13.5px;line-height:1.4}
.atlas-position-flag{font-size:12.5px;line-height:1.4;font-weight:600;margin-top:1px}
.atlas-position .atlas-flag-scope{display:block;margin:0;font-size:12px;line-height:1.4}
.atlas-position-text{font-size:13px;line-height:1.38;color:#52666d;margin-top:1px}
.atlas-county-row{margin:5px 0 0;padding:4px 12px 4px;background:#fff;border:1px solid var(--atlas-rule);border-radius:12px;display:grid;gap:3px}
.atlas-county-head{display:flex;justify-content:space-between;align-items:center;gap:4px 10px;flex-wrap:wrap}
.atlas-county-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
.atlas-county-row p{margin:0}
.atlas-county-label{font:600 10px "Segoe UI",sans-serif;letter-spacing:.11em;text-transform:uppercase;color:#3f6556}
/* County status: a clearly secondary section below the city actions. */
.atlas-county-section{margin:14px 0 0;padding-top:10px;border-top:1px solid var(--atlas-rule)}
.atlas-county-section h4{font:600 10px "Segoe UI",sans-serif;letter-spacing:.11em;text-transform:uppercase;color:#3f6556;margin:0 0 3px}
.atlas-county-sentence{font-size:13px;line-height:1.4;color:#4f6369;margin:0 0 2px}
.atlas-county-name{font-size:14px;line-height:1.3}
.atlas-county-row .status-badge{font-size:11px;text-transform:none;letter-spacing:0;padding:3px 7px;display:inline-block;margin:0}
/* Compact cards: one status-chip style for the city and county chips. Comfortable padding, a readable line height, and wrapping
   that keeps the text off the rounded edges (a long label wraps inside the chip instead of crowding or overflowing it). */
.atlas-compact>.status-badge,.atlas-compact .atlas-county-row .status-badge{font-size:11px;line-height:1.35;padding:4px 11px;border-radius:14px;max-width:100%;box-sizing:border-box;white-space:normal;overflow-wrap:anywhere;text-align:left}
.atlas-county-row .operational-model{margin:0}.atlas-county-row .model-term{font-size:12px}
.atlas-county-row .operational-model-sep{display:none}
.atlas-county-row .result-flag{font-size:12.5px;line-height:1.4}
.atlas-county-row .atlas-full-record{min-height:44px}
.atlas-compact{padding:12px 16px}
.atlas-compact-flag{display:none;margin:0 0 4px;font-size:12.5px;line-height:1.4}
/* Desktop: the card scrolls inside the panel and its actions sit in a footer below the scrolling body,
   so nothing is ever covered. The phone sheet keeps the inline copy instead. */
.atlas-panel-footer{display:none}
@media(min-width:901px){
  .atlas-panel-footer:not([hidden]){display:block;flex:none;padding:6px clamp(16px,1.5vw,24px) 12px;border-top:1px solid var(--atlas-rule);background:#fff}
  .atlas-panel-actions{display:flex;flex-wrap:wrap;align-items:center;gap:0 16px}
  .atlas-panel-footer a.atlas-action-link{display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border-radius:12px;background:var(--atlas-ink);color:#fff;font-size:14px;font-weight:600;text-decoration:none}
  .atlas-panel-footer a.atlas-action-link:hover,.atlas-panel-footer a.atlas-action-link:focus-visible{background:#2e4552;color:#fff}
}
.atlas-sources{margin-top:10px;border-top:1px solid var(--atlas-rule)}
.atlas-sources>summary{display:flex;align-items:center;gap:9px;min-height:44px;cursor:pointer;list-style:none;font-size:13px;font-weight:600;color:var(--atlas-ink)}
.atlas-sources>summary::-webkit-details-marker{display:none}
.atlas-sources>summary:before{content:"";flex:none;width:7px;height:7px;border:solid currentColor;border-width:0 2px 2px 0;transform:rotate(-45deg)}
.atlas-sources[open]>summary:before{transform:rotate(45deg)}
.atlas-sources>summary:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:6px}
.atlas-sources-body{padding:0 0 8px}
.atlas-sources-body h4{font:600 10px "Segoe UI",sans-serif;letter-spacing:.11em;text-transform:uppercase;color:#3f6556;margin:12px 0 4px}
.atlas-sources-body .atlas-limit{margin:0}
.atlas-sources-section{margin:0}
.atlas-source-list{margin:0;padding:0 0 0 18px;font-size:13px;line-height:1.5;color:#52666d}
.atlas-source-list li{margin:0 0 4px}
.atlas-sources-body .atlas-sources-note{margin:12px 0 0}
.atlas-details{border-top:1px solid var(--atlas-rule);padding-top:10px}
.atlas-evidence-title{font-size:24px;margin:16px 0 10px}
.atlas-details .jurisdiction-card{border:0;box-shadow:none;padding:0;margin-bottom:28px}
.atlas-details .jurisdiction-card>.operational-status{padding:16px;border-radius:14px}
.atlas-details .advocacy-card{padding:15px;margin-top:15px}
.atlas-details .advocacy-headline{font-size:18px}.atlas-details .message-template{font-size:13px}
.atlas-details .primary-action{background:var(--atlas-ink);border-color:var(--atlas-ink);border-radius:12px;min-height:44px}
.atlas-details .source-table{min-width:0;font-size:12px}.atlas-details .source-table td{overflow-wrap:anywhere}
.atlas-sheet-toggle{display:none}
.atlas-skip{position:absolute;left:20px;top:-80px;z-index:20;background:#fff;padding:12px}
.atlas-skip:focus{top:12px}
/* Desktop composition: a three-column grid replaces absolute positioning, so the
   left column flows (nothing can overlap) and the map takes the remaining width
   and the full row height. */
@media(min-width:901px){
  .civic-atlas{display:grid;height:100svh;min-height:640px;padding:0 clamp(20px,2vw,32px);
    grid-template-columns:clamp(280px,23.5vw,400px) minmax(0,1fr) clamp(300px,26vw,460px);
    grid-template-rows:auto minmax(0,1fr);column-gap:clamp(8px,1.6vw,30px)}
  .atlas-header{position:static;grid-column:1/-1;padding:clamp(14px,2.4vh,26px) 0 clamp(4px,1vh,10px)}
  .atlas-left{grid-column:1;grid-row:2;display:flex;flex-direction:column;min-height:0;padding:clamp(4px,1.6vh,22px) 0 clamp(14px,3.4vh,34px)}
  .atlas-intro,.atlas-search,.atlas-legend{position:static;width:auto;max-width:none}
  .atlas-intro h1{font-size:clamp(32px,min(3.3vw,5.4vh),58px)}
  .atlas-lede{font-size:clamp(14px,.9vw + 3px,17px);margin-top:clamp(10px,2.2vh,24px)}
  .atlas-search{margin-top:clamp(14px,3vh,30px)}
  .atlas-legend{margin-top:auto}
  .atlas-map{position:relative;inset:auto;grid-column:2;grid-row:2;min-height:0;padding:0 0 clamp(8px,2vh,20px)}
  .atlas-map .map-interaction{height:100%}
  .atlas-map .map{height:100%;width:auto;max-width:100%}
  .atlas-panel{position:static;grid-column:3;grid-row:2;width:auto;max-width:none;
    margin:clamp(4px,1.6vh,22px) 0 clamp(14px,3.4vh,34px)}
  .atlas-panel-heading{padding:clamp(16px,2.6vh,24px) clamp(16px,1.5vw,24px) 12px}
  .atlas-panel-body{padding:4px clamp(16px,1.5vw,24px) 24px}
  .atlas-left{padding-top:clamp(10px,2.6vh,28px)}
  .atlas-map{padding-top:clamp(4px,1vh,10px)}
  .atlas-legend .legend-group-other .legend-list,.atlas-legend .legend-group-overlay .legend-list{grid-template-columns:1fr}
}
/* Shorter laptop windows: drop the lede and tighten the legend so the whole left
   column still fits without internal scrolling. */
@media(min-width:901px) and (max-height:919px){
  .atlas-lede{display:none}
  .atlas-intro h1{font-size:clamp(30px,min(3.3vw,4.7vh),52px)}
  .atlas-legend{padding:12px 16px 13px}
  .atlas-legend .map-aside>p{font-size:11.5px;margin-top:7px}
  .atlas-legend .legend-groups{margin-top:8px}
  .atlas-legend .legend-group{margin-top:7px;padding-top:7px}
  .atlas-legend .legend-list{gap:4px 12px}.atlas-legend .legend-list li{font-size:12px}
}
/* Very short windows: the legend stays in the left column's flow, below the search and directory link, and shares the remaining height.
   When opened it shrinks to fit and its contents scroll, so it can never cover the search or the directory link. */
@media(min-width:901px) and (max-height:799px){
  .atlas-legend[open]{min-height:0;overflow-y:auto;overscroll-behavior:contain}
}
@media(max-width:900px){
  .atlas-left{display:contents}
  .civic-atlas{height:100svh;min-height:560px}
  .atlas-header{inset:12px 14px auto;align-items:flex-start;pointer-events:none}.atlas-header a{pointer-events:auto}
  /* Phones use the production mobile treatment: the cropped mark alone. */
  .atlas-brand{padding:4px;border-radius:12px;border-bottom-width:2px;pointer-events:auto}
  .atlas-brand-product{display:none}.atlas-brand-mark{width:34px;height:34px;object-fit:cover;object-position:left}
  .atlas-header nav{position:absolute;top:62px;right:0;padding:2px;pointer-events:auto}
  .atlas-header nav a{font-size:11px;padding:6px 10px;min-height:32px}
  @media(max-width:350px){.atlas-header nav a{padding:6px 7px}}
  .atlas-intro{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  .atlas-search{top:10px;left:62px;right:14px;width:auto;max-width:none}
  .atlas-search .search-row{padding:3px;border-radius:13px}.atlas-search input{font-size:14px;padding:10px 8px}
  .atlas-search .primary-button{font-size:11px;padding:10px;min-height:42px}.atlas-directory{display:none}
  .atlas-legend{top:74px;left:14px;bottom:auto;width:auto;max-width:calc(100% - 28px);padding:8px 11px;border-radius:18px;z-index:10}
  .atlas-legend>summary{font-size:11px;letter-spacing:0;min-height:20px}.atlas-legend[open]{width:min(330px,calc(100% - 28px))}
  .atlas-legend .map-aside{max-height:38svh}
  /* The sheet has one resting height (--sheet-h); the map fills the space above it
     with the existing aspect-ratio fit, so the whole state shows on first visit.
     Expanding overlays the map rather than resizing it, so the view never moves. */
  .civic-atlas{--sheet-h:176px}
  /* Full-width, full-height interaction box so the controls anchor to the map
     area's corner (empty Montana/Washington side) whatever the framing. */
  .civic-atlas .atlas-map .map-interaction{width:100%;height:100%;padding:0}.civic-atlas .atlas-map .map{margin:0 auto}
  .civic-atlas[data-selected=true]{--sheet-h:min(428px,56svh)}
  /* A compact card also carries the county sheriff status, so its resting sheet is a little taller. */
  .civic-atlas[data-selected=true][data-compact=true]{--sheet-h:min(456px,62svh)}
  .atlas-map{inset:112px 14px calc(var(--sheet-h) + 10px)}
  .atlas-map .map{height:min(calc(100svh - 122px - var(--sheet-h)),calc((100vw - 28px) * 1.6137));max-width:100%;width:auto}
  .atlas-map .map-controls{left:auto;right:0;top:4px;bottom:auto;z-index:3}.atlas-map .map-control{width:40px;height:40px}
  .atlas-map .map-tooltip{max-width:230px}
  .atlas-panel{top:auto;inset-inline:0;bottom:0;width:100%;max-width:none;height:var(--sheet-h);border-radius:25px 25px 0 0;box-shadow:0 -8px 30px #20313c16;padding-bottom:env(safe-area-inset-bottom,0px);z-index:6}
  .civic-atlas[data-expanded=true] .atlas-panel{height:82svh}
  /* Resting sheet = a compact preview; the rest appears when expanded. */
  .civic-atlas:not([data-expanded=true]) :is(.atlas-selection-note,.atlas-statewide,.atlas-limit,.atlas-flag-detail,.atlas-action-line,.atlas-discovery,.atlas-example-actions,.atlas-compact-block,.atlas-sources,
    .participation-totals p:not(.participation-total)){display:none}
  .atlas-sheet-toggle{display:block;flex:none;align-self:center;background:transparent;border:0;color:#53656b;font-size:11px;cursor:pointer;padding:7px 20px 5px;min-height:36px}
  .atlas-sheet-toggle:before{content:"";display:block;width:40px;height:4px;border-radius:4px;background:#d2cfc4;margin:0 auto 5px}
  .atlas-panel-heading{padding:2px 20px 4px}.atlas-panel-heading h2{font-size:28px}.atlas-panel-kicker{font-size:10px;margin-bottom:3px}
  .atlas-panel-body{padding:0 20px 20px;touch-action:pan-y}
  .atlas-panel .participation-totals{margin:0 0 5px}.atlas-panel .participation-total{font-size:18px;line-height:1.3;margin:0 0 7px}
  .atlas-panel .participation-totals p:not(.participation-total){font-size:12px;margin:0}
  .atlas-discovery{font-size:12px}.atlas-selection-note{font-size:12px;margin:0 0 8px}
  /* Authorities stack at full width: label and status share a row, the agency name
     and model chips get the whole line, and both links are full-size tap targets. */
  .atlas-authorities{grid-template-columns:1fr;gap:8px;margin:4px 0 0}
  .atlas-authority{padding:10px 14px 4px;display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:8px}
  .atlas-authority>*{grid-column:1/-1}
  .atlas-authority>.eyebrow{grid-column:1;grid-row:1;font-size:10px;margin:0}
  .atlas-authority>.status-badge{grid-column:2;grid-row:1;margin:0}
  .atlas-authority>.eyebrow{grid-column:1/-1}
  .atlas-authority:not(.long-status)>.eyebrow{grid-column:1}
  .atlas-authority.long-status>.status-badge{grid-column:1/-1;grid-row:auto;justify-self:start;margin:0 0 6px}
  .atlas-authority h3{font-size:18px;margin:4px 0 5px}
  .atlas-authority .operational-model{margin:0 0 4px}.atlas-authority .model-term{font-size:12px}
  .atlas-authority-actions{margin-top:2px}
  .atlas-compact .atlas-compact-meaning{font-size:12.5px;line-height:1.42;margin:2px 0 4px}
  .atlas-compact-block{margin:10px 0 0}
  .civic-atlas:not([data-expanded=true]) .atlas-compact-flag{display:block}
  .atlas-county-row{margin:6px 0 4px;padding:6px 12px 2px;gap:1px}
  .atlas-county-name{font-size:13.5px}
  .atlas-county-row .atlas-full-record{min-height:44px;margin-block:0}
  .civic-atlas:not([data-expanded=true]) .atlas-county-row :is(.operational-model,.result-flag){display:none}
  /* Resting sheet: label, name, then the county status beside its record link. */
  .civic-atlas:not([data-expanded=true]) .atlas-county-row{grid-template-columns:1fr auto;align-items:center;column-gap:8px}
  .civic-atlas:not([data-expanded=true]) .atlas-county-head{display:contents}
  .civic-atlas:not([data-expanded=true]) .atlas-county-label,.civic-atlas:not([data-expanded=true]) .atlas-county-name{grid-column:1/-1}
  .civic-atlas:not([data-expanded=true]) .atlas-county-meta{grid-column:1;grid-row:2}
  .civic-atlas:not([data-expanded=true]) .atlas-county-head .atlas-full-record{grid-column:2;grid-row:2}
  /* Compact cards keep their city actions inline, ahead of the county section (no pinned footer). */
  .atlas-panel-footer:not([hidden]){display:block;flex:none;padding:6px 20px 8px;border-top:1px solid var(--atlas-rule);background:#fff}
  .atlas-panel-actions{display:flex;flex-wrap:wrap;align-items:center;gap:0 16px}
  .atlas-panel-footer a.atlas-action-link{display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border-radius:12px;background:var(--atlas-ink);color:#fff;font-size:14px;font-weight:600;text-decoration:none}
  .atlas-panel-footer a.atlas-full-record{display:inline-flex;align-items:center;min-height:44px}
  .atlas-example-actions{margin:8px 0}
}

/* Official-position callout, shared by compact and standard cards: a documented individual official's opposition, concern or stated
   limits, set apart from the gray participation badge it sits under. Prominent = pale amber fill and a stronger border; subtle (mandate-only
   positions) = lighter fill and border, same text color. Text is >= 7:1 and is never shrunk at narrow widths. Never changes the status. */
.atlas-position-callout{margin:6px 0 2px;padding:7px 11px 8px;background:#fff4d4;border:1px solid #d9b45a;border-radius:12px;color:#4f3300}
.civic-atlas .atlas-position-callout .atlas-compact-flag{display:flex;flex-wrap:nowrap;align-items:flex-start;gap:.35rem;margin:0 0 2px;color:#4f3300;font:800 14px/1.3 var(--f-display,"Segoe UI",sans-serif)}
.atlas-position-callout .status-icon{flex:none;color:#8a5200}
.atlas-position-callout p{margin:0}
.atlas-position-callout-who{font-size:13px;line-height:1.4;color:#4f3300}
.atlas-position-callout-who strong{font-weight:700}
.atlas-position-callout--subtle{background:#fffaf0;border-color:#e7d9b4}
.civic-atlas .atlas-position-callout--subtle .atlas-compact-flag{font-weight:700}
.atlas-position-callout--subtle .status-icon{color:#7a5a1e}
.atlas-flag-disclosure .atlas-flag-detail{margin:6px 0 0}

/* Directory (/list): the Civic Atlas visual language on a scrolling page. One content container holds heading, search, filters and rows. */
.atlas-dir{--atlas-paper:#eae8e0;--atlas-ink:#20313c;--atlas-rule:#dedbd2;--atlas-soft:#52666d;background:var(--atlas-paper);color:var(--atlas-ink);
  font-family:"Segoe UI",sans-serif;min-height:100svh;padding-bottom:56px}
.atlas-dir h1{font-family:Georgia,"Times New Roman",serif;font-weight:400;font-size:clamp(34px,4.2vw,52px);line-height:1.06;letter-spacing:-.03em;margin:0 0 14px}
.atlas-dir a{color:inherit}
.atlas-dir :focus-visible{outline:3px solid #98622c;outline-offset:3px}
.atlas-dir [hidden]{display:none!important}
.atlas-dir-header{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:26px 32px 0;max-width:1120px;margin:0 auto;box-sizing:content-box}
.atlas-dir-nav{display:flex;gap:5px;background:#f8f6f0;padding:5px;border-radius:30px}
.atlas-dir-nav a{font-size:15px;padding:9px 20px;text-decoration:none;min-height:44px;box-sizing:border-box;display:inline-flex;align-items:center;border-radius:24px}
.atlas-dir-nav a[aria-current="page"]{background:var(--atlas-ink);color:#fff}
.atlas-dir-wrap{max-width:1120px;margin:0 auto;padding:44px 32px 0}
.atlas-dir-eyebrow{color:#216b60;font:800 12px/1.2 "Segoe UI",sans-serif;letter-spacing:.15em;text-transform:uppercase;margin:0 0 12px}
.atlas-dir-lede{font-size:17px;line-height:1.6;max-width:62ch;margin:0 0 26px}
.atlas-dir-search-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.atlas-dir-search input{width:100%;box-sizing:border-box;min-height:54px;padding:13px 18px;font:16px "Segoe UI",sans-serif;color:var(--atlas-ink);background:#fff;
  border:1px solid #c9c7bf;border-radius:17px;box-shadow:0 8px 24px #20313c12}
.atlas-dir-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:22px 0 14px;border-bottom:1px solid var(--atlas-rule);padding-bottom:12px}
.atlas-dir-tab{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:9px 18px;border:0;border-radius:24px;background:#f8f6f0;color:var(--atlas-ink);
  font:600 15px "Segoe UI",sans-serif;cursor:pointer}
.atlas-dir-tab-count{font-size:12px;font-weight:700;color:var(--atlas-soft)}
.atlas-dir-tab[aria-pressed="true"]{background:var(--atlas-ink);color:#fff}
.atlas-dir-tab[aria-pressed="true"] .atlas-dir-tab-count{color:#d7dee1}
.atlas-dir-filterbar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 24px;margin-bottom:12px}
.atlas-dir-statusgroup{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.atlas-dir-filterlabel{font:800 11px "Segoe UI",sans-serif;letter-spacing:.13em;text-transform:uppercase;color:var(--atlas-soft);margin-right:2px}
.atlas-dir-chip{min-height:40px;padding:7px 15px;border:1px solid #c9c7bf;border-radius:20px;background:#fff;color:var(--atlas-ink);font:600 14px "Segoe UI",sans-serif;cursor:pointer}
.atlas-dir-chip[aria-pressed="true"]{border-color:var(--atlas-ink);background:var(--atlas-ink);color:#fff}
.atlas-dir-countrow{display:flex;align-items:center;gap:14px}
.atlas-dir-count{margin:0;font-size:13px;font-weight:700;color:var(--atlas-soft)}
.atlas-dir-clear{min-height:40px;padding:6px 14px;border:0;background:none;color:#216b60;font:700 14px "Segoe UI",sans-serif;text-decoration:underline;cursor:pointer}
.atlas-dir-list{list-style:none;margin:0;padding:0;background:#faf9f4;border-radius:20px;box-shadow:0 8px 28px #20313c08;overflow:hidden}
.atlas-dir-row{display:flex;justify-content:space-between;align-items:center;gap:8px 24px;padding:12px 22px;min-height:56px;border-top:1px solid var(--atlas-rule)}
.atlas-dir-row:first-child{border-top:0}
.atlas-dir-main{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;min-width:0}
.atlas-dir-name{font:400 19px Georgia,"Times New Roman",serif;text-decoration:none;color:var(--atlas-ink)}
.atlas-dir-name:hover{text-decoration:underline}
.atlas-dir-kind{font:800 10.5px "Segoe UI",sans-serif;letter-spacing:.12em;text-transform:uppercase;color:var(--atlas-soft)}
.atlas-dir-meta{font-size:13px;color:var(--atlas-soft)}
.atlas-dir-signals{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;flex:none}
.atlas-dir-model{font:800 11px "Segoe UI",sans-serif;letter-spacing:.06em;padding:3px 8px;border-radius:8px;background:#e3ece8;color:#244c42;border:1px solid #b9cfc6}
.atlas-dir-position{display:inline-flex;align-items:center;gap:5px;font:700 12px "Segoe UI",sans-serif;padding:3px 10px;border-radius:12px;background:#fff4d4;border:1px solid #d9b45a;color:#4f3300}
.atlas-dir-position .status-icon{color:#8a5200}
.atlas-dir-empty{padding:34px 22px;background:#faf9f4;border-radius:20px;text-align:center}
.atlas-dir-empty-title{font:400 22px Georgia,"Times New Roman",serif;margin:0 0 6px}
.atlas-dir-legend{font-size:13px;line-height:1.5;color:var(--atlas-soft);margin:16px 4px 0;max-width:80ch}
.atlas-dir-legend .status-icon{color:#8a5200}
@media(max-width:700px){
  .atlas-dir-header{padding:16px 16px 0;flex-wrap:wrap}.atlas-dir-wrap{padding:28px 16px 0}
  .atlas-dir-nav a{padding:9px 14px}
  .atlas-dir-tab{padding:9px 13px;font-size:14px;gap:6px}
  .atlas-dir-row{flex-direction:column;align-items:flex-start;padding:12px 16px}.atlas-dir-signals{justify-content:flex-start}
  .atlas-dir-filterbar{align-items:flex-start}
}

/* First paint on the Atlas routes ("/" and "/list"): the prerendered fallback is the previous site design, which the application replaces with the Atlas.
   Keep it out of the first paint on the Atlas paper colour, and reveal it after 4s if the application never replaces it (it failed to load).
   Only where scripting is enabled: with JavaScript off the fallback is the page and is shown at once. */
@media (scripting:enabled){
  body:has(#app>[data-first-paint="atlas"]){background:#eae8e0}
  #app:has(>[data-first-paint="atlas"]){visibility:hidden;animation:first-paint-reveal 0s 4s forwards}
  @keyframes first-paint-reveal{to{visibility:visible}}
}

/* Full record pages (/j/...): the Atlas masthead above the record, same markup and rules as the Directory header. */
.atlas-site-head{--atlas-paper:#eae8e0;--atlas-ink:#20313c;background:var(--atlas-paper);color:var(--atlas-ink);font-family:"Segoe UI",sans-serif;padding-bottom:16px}
.atlas-site-head a{color:inherit}
.atlas-site-head :focus-visible{outline:3px solid #98622c;outline-offset:3px}

/* Full record pages: the prerendered fallback now has the application's own header band (same markup, same refined styles). Below it sits
   the crawler-readable record, which the application replaces. For scripted browsers keep that body out of view (still in the DOM and the
   accessibility tree) so the old-style card never paints, and hold the footer below the fold so it does not jump. It is shown at once with
   JavaScript off, and revealed after 10s if the application never replaces it. The search form needs scripting, so it is hidden without it. */
@media (scripting:enabled){
  main[data-prerendered] .seo-h1-tail{display:none}
  main[data-prerendered]:has(>.refined-record-page){min-height:100svh}
  main[data-prerendered]:has(>.refined-record-page) .record-body{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;
    animation:record-body-reveal 0s 10s forwards}
  @keyframes record-body-reveal{to{position:static;width:auto;height:auto;overflow:visible;clip-path:none;white-space:normal}}
}
@media (scripting:none){main[data-prerendered] .refined-record-page form.jurisdiction-search{display:none}}
