/* ── 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}
.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)}
.map .county.accountability-outline{stroke:var(--alert);stroke-width:2.2}
.map .county.accountability-outline:hover,.map .county.accountability-outline:focus{stroke:var(--alert-dark);stroke-width:3}

/* 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}
.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:2.2rem 0 2.4rem}
/* 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:1.5rem 3.5rem;align-items:end
}
.hero .eyebrow{margin:0 0 .7rem}
/* 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 .8rem;max-width:16ch;
  font:800 var(--t-hero)/1.08 var(--f-display);letter-spacing:-.022em;color:var(--on-navy)
}
.hero-lede{margin:0;max-width:52ch;font-size:1.02rem}
.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:2.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)}
.legend-separation-note{
  margin:.65rem 0 0;padding:.5rem .6rem;background:var(--surface-soft);
  border-left:3px solid var(--alert);border-radius:0 var(--radius-sm) var(--radius-sm) 0;
  font-size:var(--t-fine);color:var(--ink-soft)
}

/* ── 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-question{max-width:20ch}
  .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}
  .hero{padding:1.6rem 0 1.8rem}
  .hero-question{max-width:none}
  .hero-search{margin-top:1.25rem}
  .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}}
