:root{
  --paper:#f7f8f6;
  --raise:#ffffff;
  --ink:#1b2320;
  --ink-2:#414b45;
  --ink-3:#77827b;
  --muted:#5f6a63;
  --rule:#d9ded8;
  --rule-soft:#e8ebe6;
  --accent:#0f5f4c;
  --accent-soft:#dfeae5;
  --alarm:#a8321e;
  --alarm-soft:#f2e0dc;
  --shadow:0 1px 2px rgba(27,35,32,.06);
  --hero-hot:#e58068; --hero-mute:#8e9a93; --hero-fg2:#c3cdc7; --hero-rule:#3a453e;
  --sun:0; --moon:1;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --paper:#121614; --raise:#1a201d; --ink:#e7ece8; --ink-2:#c3cdc7;
    --muted:#8e9a93; --rule:#2c352f; --rule-soft:#222a26;
    --accent:#57bd9f; --accent-soft:#182b25; --alarm:#e58068; --alarm-soft:#331f1b;
    --shadow:0 1px 2px rgba(0,0,0,.45);
    --hero-hot:#a8321e; --hero-mute:#5f6a63; --hero-fg2:#414b45; --hero-rule:#c9d0ca;
    --sun:1; --moon:0;
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --paper:#121614; --raise:#1a201d; --ink:#e7ece8; --ink-2:#c3cdc7;
  --muted:#8e9a93; --rule:#2c352f; --rule-soft:#222a26;
  --accent:#57bd9f; --accent-soft:#182b25; --alarm:#e58068; --alarm-soft:#331f1b;
  --shadow:0 1px 2px rgba(0,0,0,.45);
  --hero-hot:#a8321e; --hero-mute:#5f6a63; --hero-fg2:#414b45; --hero-rule:#c9d0ca;
  --sun:1; --moon:0;
}

*{box-sizing:border-box}
[hidden]{display:none!important}  /* .rally, .td-cta etc set display, which beats the UA [hidden] rule */
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:"Archivo",system-ui,-apple-system,"Segoe UI",sans-serif;
  font-size:16px;line-height:1.55;
  font-variant-numeric:tabular-nums;
  overflow-x:clip; /* the full-bleed carousel is 100vw; keep the page itself from scrolling sideways */
}
.wrap{max-width:880px;margin:0 auto;padding-inline:20px}
/* Section nav. Sits between the hero and the body, so it only pins once the hero has scrolled past.
   The strip scrolls sideways rather than wrapping: nine labels do not fit a phone. */
.snav{position:sticky;top:0;z-index:30;background:var(--paper);border-bottom:1px solid var(--rule)}
.snav-bar{max-width:880px;margin:0 auto;padding-inline:20px;display:flex;align-items:center;gap:8px}
.snav-in{flex:1 1 auto;display:flex;align-items:center;gap:2px;overflow-x:auto;scrollbar-width:none;scroll-behavior:smooth}
.snav-in::-webkit-scrollbar{display:none}
.snav a{flex:0 0 auto;padding:12px 9px;font-size:.75rem;font-weight:600;color:var(--muted);text-decoration:none;white-space:nowrap;border-bottom:2px solid transparent}
.snav a:hover{color:var(--ink)}
.snav a.on{color:var(--ink);border-bottom-color:var(--alarm)}
.snav a.go{flex:0 0 auto;margin-left:auto;margin-block:6px;padding:7px 12px;border-bottom:0;border-radius:3px;background:var(--alarm);color:var(--paper)}
.snav a.go:hover{color:var(--paper);opacity:.88}
.snav-t{display:none;align-items:center;gap:9px;padding:11px 2px;border:0;background:transparent;font:inherit;font-size:.78rem;font-weight:600;color:var(--ink);cursor:pointer}
/* Three bars from one element, and the same element crossed out when the panel is open. */
.snav-i,.snav-i::before,.snav-i::after{content:"";display:block;width:17px;height:2px;background:var(--ink);transition:transform .15s,opacity .15s}
.snav-i{position:relative}
.snav-i::before{position:absolute;top:-5px}
.snav-i::after{position:absolute;top:5px}
.snav.open .snav-i{background:transparent}
.snav.open .snav-i::before{top:0;transform:rotate(45deg)}
.snav.open .snav-i::after{top:0;transform:rotate(-45deg)}
@media (max-width:720px){
  .snav-t{display:flex}
  /* The strip becomes a panel under the bar: nine labels never read well side by side on a phone. */
  .snav-in{display:none;position:absolute;left:0;right:0;top:100%;flex-direction:column;align-items:stretch;gap:0;
    background:var(--raise);border-bottom:1px solid var(--rule);box-shadow:0 12px 20px rgba(27,35,32,.10);max-height:70vh;overflow-y:auto}
  .snav.open .snav-in{display:flex}
  .snav a{padding:13px 20px;font-size:.85rem;border-bottom:1px solid var(--rule-soft);border-left:3px solid transparent}
  .snav a.on{border-bottom-color:var(--rule-soft);border-left-color:var(--alarm)}
  .snav a.go{font-size:.72rem;padding:7px 10px}
}
@media (prefers-reduced-motion:reduce){.snav-in{scroll-behavior:auto}.snav-i,.snav-i::before,.snav-i::after{transition:none}}
/* Theme switch. Pinned to the top-right corner above everything; the palette decides which of the
   two stacked icons is visible, and the JS only flips the attribute and the label. */
.theme-t{position:fixed;top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));z-index:40;
  width:38px;height:38px;padding:0;border:1px solid var(--rule);border-radius:999px;cursor:pointer;
  color:var(--ink);background:color-mix(in srgb,var(--raise) 84%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  box-shadow:0 2px 10px rgba(0,0,0,.14);transition:transform .2s,box-shadow .2s}
.theme-t:hover{transform:scale(1.08);box-shadow:0 4px 16px rgba(0,0,0,.2)}
.theme-t:active{transform:scale(.94)}
.theme-t:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.theme-t svg{position:absolute;inset:0;margin:auto;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;
  transition:opacity .35s,transform .45s cubic-bezier(.2,.8,.2,1.2)}
.theme-t .sun{opacity:var(--sun);transform:rotate(calc(-90deg + var(--sun) * 90deg)) scale(calc(.4 + var(--sun) * .6))}
.theme-t .moon{opacity:var(--moon);transform:rotate(calc(90deg - var(--moon) * 90deg)) scale(calc(.4 + var(--moon) * .6))}
.snav-bar{padding-right:max(20px,calc(62px - max(0px,(100vw - 880px) / 2)))}
@media (prefers-reduced-motion:reduce){.theme-t,.theme-t svg{transition:none}}
h1,h2{font-family:"Newsreader",Georgia,serif;font-weight:500;text-wrap:balance;margin:0}
h1{font-size:clamp(2rem,5.5vw,3.1rem);line-height:1.05;letter-spacing:-.015em}
h2{font-size:clamp(1.35rem,3.2vw,1.8rem);line-height:1.15;letter-spacing:-.01em}
h3{font-size:.95rem;font-weight:600;margin:0;line-height:1.3}
p{margin:0}
a{color:var(--accent);text-underline-offset:2px}
a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.eyebrow{font-size:.68rem;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--muted);margin:0}
.cap{font-size:.88rem;color:var(--ink-2);max-width:62ch}
.src{font-size:.74rem;color:var(--muted)}
sup.ref{font-size:.68rem;line-height:1;vertical-align:.35em;font-weight:700;margin-left:3px}
sup.ref+sup.ref{margin-left:2px}
sup.ref a{display:inline-block;text-decoration:none;color:var(--accent);background:var(--accent-soft);border:1px solid var(--accent);border-radius:999px;padding:1px 6px;min-width:1.5em;text-align:center;font-variant-numeric:tabular-nums;cursor:help}
sup.ref a:hover,sup.ref a:focus-visible,sup.ref a.open{background:var(--accent);color:var(--paper);outline:none}
.hero sup.ref a{color:var(--hero-fg2);background:transparent;border-color:var(--hero-rule)}
.hero sup.ref a:hover,.hero sup.ref a:focus-visible,.hero sup.ref a.open{background:var(--hero-fg2);color:var(--ink);border-color:var(--hero-fg2)}
.refpop{position:absolute;z-index:20;max-width:min(360px,calc(100vw - 32px));background:var(--ink);color:var(--paper);font-size:.78rem;line-height:1.45;padding:10px 12px;border-radius:4px;box-shadow:0 6px 24px rgba(0,0,0,.25);font-family:"Archivo",sans-serif;font-weight:400}
.refpop b{display:block;font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;color:var(--hero-mute);margin-bottom:4px}
.refpop a{color:var(--hero-hot);word-break:break-word}
.refpop em{font-style:italic}
ol.refs li:target{background:var(--accent-soft);outline:6px solid var(--accent-soft)}

/* masthead */
header{padding-block:34px 30px;border-bottom:1px solid var(--ink);display:flex;flex-direction:column;gap:22px}
.doc-line{display:flex;flex-wrap:wrap;gap:8px 16px;font-size:.68rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--rule);padding-bottom:12px}
.doc-line .live{color:var(--alarm)}
.hero{background:var(--ink);color:var(--paper);padding:28px 20px 22px;border-bottom:0}
.hero-in{max-width:880px;margin:0 auto;display:flex;flex-direction:column;gap:20px}
.harp{display:flex;justify-content:center;color:var(--hero-hot)}.harp svg{width:54px;height:62px}
.hero .doc-line{color:var(--hero-mute);border-color:var(--hero-rule)}
.hero .doc-line .live{color:var(--hero-hot)}
.hero-grid{display:grid;grid-template-columns:1fr}
.hero-text{display:flex;flex-direction:column;gap:12px}
.hero h1{color:var(--paper)}
.hero .slogan{font-family:"Archivo",sans-serif;font-weight:700;text-transform:uppercase;letter-spacing:-.025em;line-height:.92;font-size:clamp(2.1rem,6.4vw,3.9rem)}
.hero .slogan mark{background:var(--hero-hot);color:var(--ink);padding:0 .12em;margin:0 .02em;border-radius:3px}
.hero .sub{font-family:"Newsreader",Georgia,serif;font-size:1.25rem;color:var(--hero-hot);line-height:1.2}
.hero .cap{color:var(--hero-fg2)}
.hero-cta{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
.btn{display:inline-flex;align-items:center;padding:11px 18px;font-size:.86rem;font-weight:600;text-decoration:none;border:1px solid var(--hero-fg2);color:var(--paper);border-radius:3px;background:transparent;font-family:inherit;cursor:pointer}
.btn.primary{background:var(--hero-hot);border-color:var(--hero-hot);color:var(--ink)}
.btn:hover{border-color:var(--paper)}
.btn:focus-visible{outline:2px solid var(--hero-hot);outline-offset:3px}
.hero-quotes{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--hero-rule);padding-top:18px;gap:16px 28px}
.hero-quotes blockquote{margin:0;display:flex;flex-direction:column;gap:6px}
.hero-quotes p{font-family:"Newsreader",Georgia,serif;font-size:1.15rem;line-height:1.3;color:var(--paper);text-wrap:balance}
.hero-quotes cite{font-style:normal;font-size:.7rem;color:var(--hero-mute);line-height:1.35}
.hero-quotes cite a{color:var(--hero-mute)}
.share{display:flex;flex-wrap:wrap;align-items:center;gap:8px;border-top:1px solid var(--hero-rule);padding-top:14px}
.share .eyebrow{color:var(--hero-mute);margin-right:6px}
.share a,.share button{font:inherit;font-size:.76rem;font-weight:600;color:var(--paper);background:transparent;border:1px solid var(--hero-rule);padding:6px 12px;border-radius:999px;text-decoration:none;cursor:pointer;line-height:1.2}
.share a:hover,.share button:hover{border-color:var(--paper)}
.share a:focus-visible,.share button:focus-visible{outline:2px solid var(--hero-hot);outline-offset:2px}
@media (max-width:640px){.hero{padding:20px 16px 16px}.hero-quotes{grid-template-columns:1fr}}

/* sections */
section{padding-block:40px;border-bottom:1px solid var(--rule-soft);scroll-margin-top:56px}
section:last-of-type{border-bottom:0}
.sec-head{display:flex;flex-direction:column;gap:6px;margin-bottom:18px}
.fig-block{display:flex;flex-direction:column;gap:14px}
/* News: dated coverage and statements, newest first, straight under the nav. */
.news{list-style:none;margin:0;padding:0;border-top:1px solid var(--rule-soft)}
.news li{border-bottom:1px solid var(--rule-soft)}
.news a{display:grid;grid-template-columns:64px 1fr;gap:1px 14px;padding:11px 2px;text-decoration:none;color:inherit}
.news a:hover b,.news a:focus-visible b{text-decoration:underline}
.news time{grid-row:span 2;padding-top:4px;font-size:.74rem;font-weight:600;color:var(--muted);white-space:nowrap}
.news b{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:1.1rem;line-height:1.25;color:var(--ink)}
.news .src>i{font-style:normal;color:var(--accent);font-weight:600}
@media (max-width:560px){.news a{grid-template-columns:1fr;gap:2px}.news time{grid-row:auto}}
.news-more>summary{padding:11px 2px;font-size:.78rem;font-weight:600;color:var(--accent);cursor:pointer}
.news-more[open]>summary{color:var(--muted);border-bottom:1px solid var(--rule-soft)}
.news-more .news{border-top:0}
svg{display:block;width:100%;height:auto}
.svg-hold{background:var(--raise);border:1px solid var(--rule);padding:16px 14px;box-shadow:var(--shadow)}
/* A chart drawn elsewhere, shown as it was drawn: the card is always its own light paper, whatever
   the theme, the way the Scheme sheet on /amendment is. */
.chart-card{border:1px solid var(--rule);box-shadow:var(--shadow);background:#fbfaf7;color:#222;overflow:hidden}
.chart-ext{display:block}
.chart-ext img{display:block;width:100%;height:auto}
.chart-ext:hover img{opacity:.9}
.chart-ext:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
/* The key, in the chart's own two inks so it reads the same in both themes */
.chart-key{list-style:none;margin:0;padding:14px 4% 8px;border-top:1px solid #e3e1da;display:grid;grid-template-columns:1fr 1fr;gap:4px 28px;font-size:.8rem;line-height:1.45}
.chart-key li{display:flex;gap:12px;align-items:flex-start;margin:0 0 8px}
.chart-key .sw{flex:none;width:46px;height:14px;margin-top:3px;background:#5a5a5a;box-sizing:border-box}
.chart-key .sw.new{background:#111}
.chart-key .sw.wait{background:transparent;border:1.5px dashed #111}
.chart-key .sw.stop{width:3px;background:#111}
.chart-key b{color:#111}
.chart-hint{display:none}
@media (max-width:720px){
  /* 1200px of chart on a phone is a smear; let it scroll sideways at a size the labels survive */
  .chart-ext{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .chart-ext img{min-width:760px}
  .chart-hint{display:block;margin-top:-6px}
  .chart-key{grid-template-columns:1fr}
}

/* quote */
blockquote{margin:0;padding-left:18px;border-left:3px solid var(--alarm);font-family:"Newsreader",Georgia,serif;font-size:1.16rem;line-height:1.38}
blockquote cite{display:block;margin-top:8px;font-family:"Archivo",sans-serif;font-size:.72rem;font-style:normal;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);font-weight:700}

/* audit grid */
.audit{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
@media (max-width:760px){.audit{grid-template-columns:repeat(2,1fr)}}
@media (max-width:460px){.audit{grid-template-columns:1fr}}
.audit div{background:var(--raise);padding:16px 14px;display:flex;flex-direction:column;gap:8px}
.audit .box{width:22px;height:22px;border:2px solid var(--alarm);position:relative}
.audit .box::after{content:"";position:absolute;inset:4px;background:repeating-linear-gradient(45deg,var(--alarm-soft) 0 3px,transparent 3px 6px)}
.audit h3{font-size:.86rem}
.audit p{font-size:.76rem;color:var(--muted)}
.audit .verdict{font-size:.68rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--alarm)}

/* studies */
.studies{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
@media (max-width:620px){.studies,.asks{grid-template-columns:1fr}}
@media (max-width:460px){.actions{grid-template-columns:1fr}}
.studies div{background:var(--raise);padding:16px 14px;display:flex;flex-direction:column;gap:7px}
.studies .find{font-family:"Newsreader",Georgia,serif;font-size:1.02rem;line-height:1.3;color:var(--accent)}
.studies p{font-size:.76rem;color:var(--muted)}

/* year scale */
.scale-row{display:grid;grid-template-columns:minmax(96px,150px) 1fr 46px;gap:12px;align-items:center;padding-block:4px}
.scale-row .name{font-size:.82rem;line-height:1.2;color:var(--ink-2)}
.scale-row .name b{font-weight:600;color:var(--ink)}
.track{position:relative;height:18px;background:var(--rule-soft)}
.bar{position:absolute;inset-block:0;left:0;background:var(--accent);opacity:.82}
.bar.is-added{background:var(--alarm);opacity:.92}
.bar.is-cur{background:var(--accent);opacity:1}
.scale-row .val{font-size:.78rem;font-weight:700;color:var(--muted);text-align:right}
.scale-row.hi .name b,.scale-row.hi .val{color:var(--alarm)}
.axis{display:grid;grid-template-columns:minmax(96px,150px) 1fr 46px;gap:12px;margin-top:6px;padding-top:6px;border-top:1px solid var(--rule)}
.axis-ticks{position:relative;height:15px}
.axis-ticks span{position:absolute;top:0;transform:translateX(-50%);font-size:.66rem;font-weight:700;color:var(--muted)}
@media (max-width:540px){.scale-row,.axis{grid-template-columns:minmax(80px,104px) 1fr 40px;gap:9px}.scale-row .name{font-size:.74rem}}

/* proportion */
.prop{display:flex;flex-direction:column;gap:6px}
.prop-top{display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.prop-num{font-family:"Newsreader",Georgia,serif;font-size:2.1rem;line-height:1;color:var(--accent)}
.prop-lab{font-size:.82rem;color:var(--ink-2);text-align:right}
.prop-track{height:26px;background:var(--rule-soft);position:relative}
.prop-fill{position:absolute;inset-block:0;left:0;background:var(--accent)}

/* actions */
.actions{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.action{background:var(--raise);padding:18px 16px;display:flex;flex-direction:column;gap:7px}
.action .n{font-size:.66rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--accent)}
.action p{font-size:.8rem;color:var(--ink-2)}
.action a{font-size:.82rem;font-weight:600}
#talk .action{background:var(--accent-soft)}
#talk h3{font-size:1.02rem}

/* allies */
.ally-bar{display:flex;justify-content:space-between;align-items:center;gap:14px}
.ally-nav{display:flex;gap:6px;flex:none}
.ally-b{font:inherit;font-size:1rem;line-height:1;width:36px;height:36px;background:var(--raise);color:var(--ink);border:1px solid var(--rule);border-radius:3px;cursor:pointer}
.ally-b:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}
.ally-b:disabled{opacity:.3;cursor:default}
.ally-b:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.allies{
  display:grid;grid-auto-flow:column;grid-auto-columns:clamp(248px,72vw,316px);gap:14px;
  /* Bleed to the full width of the page and keep only a small gutter off the page edge, so the
     strip reads as full-bleed rather than as another column. No scroll-snap: it pulled the first
     card onto the scrollport edge on load and ate this padding, and scroll-padding cannot cancel
     that. A link strip does not need snapping; the buttons already step by a card. --sb is the
     scrollbar width, measured in script: 100vw counts it, the page does not, so without it the
     strip hangs half a scrollbar off each edge and the gutter comes up short. Capped at 1360px,
     like the TD board: on a wide monitor four cards do not reach the edges, and a strip that
     starts at the far left and stops short of the right reads as broken, not full-bleed. */
  margin-inline:max(calc(50% - 50vw + var(--sb,0px)/2),calc(50% - 680px));
  padding:2px 20px;
  overflow-x:auto;overscroll-behavior-x:contain;scroll-behavior:smooth;
  scrollbar-width:thin;scrollbar-color:var(--rule) transparent;cursor:grab;
}
.allies.drag{cursor:grabbing;user-select:none;scroll-behavior:auto}
/* Three petitions fit the column at desktop width: no bleed, no scrolling, no arrows to press. */
@media (min-width:720px){
  #petitions .allies,#posters .allies{margin-inline:0;padding-inline:0;grid-auto-columns:minmax(0,1fr);overflow:visible}
  #petitions .ally-nav,#posters .ally-nav{display:none}
}
/* The protest call: the same slogan type as the hero, one size down, in the alarm colour. */
.rally{display:flex;flex-direction:column;gap:10px;margin-bottom:18px}
.rally-h{font-family:"Archivo",sans-serif;font-weight:700;text-transform:uppercase;letter-spacing:-.025em;line-height:.95;font-size:clamp(1.9rem,5.6vw,3.3rem);color:var(--ink)}
.rally-h mark{background:transparent;color:var(--alarm)}
.rally-sub{font-family:"Newsreader",Georgia,serif;font-size:1.15rem;line-height:1.35;max-width:52ch}
.rally-sub a{font-family:"Archivo",sans-serif;font-size:.85rem;font-weight:600;white-space:nowrap}
/* Posters are portrait and the picture is the point: show the whole sheet, not a 16:7 crop of it. */
#posters .ally-shot{aspect-ratio:772/956}
/* The day itself: four square thumbs on one line, small. The picture opens in the lightbox. */
.shots{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;max-width:420px;margin-bottom:26px}
.shots a{display:block;border:1px solid var(--rule);box-shadow:var(--shadow)}
.shots a:hover{border-color:var(--accent)}
.shots a:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
/* height:auto or the width/height attributes make the box definite and aspect-ratio is ignored,
   which renders the thumbs as full-height slivers. The crowd sits low in each frame, so the
   square crop is pulled down off centre, per photo. */
.shots img{width:100%;height:auto;aspect-ratio:1;object-fit:cover;object-position:center 70%;display:block}
.shots a:nth-child(1) img{object-position:center 55%}
.shots a:nth-child(4) img{object-position:center 92%}
.shots.sun a:nth-child(1) img{object-position:center 72%}
.shots.sun a:nth-child(2) img{object-position:left center}
.shots.sun a:nth-child(4) img{object-position:center 50%}
/* Lightbox: a plain <dialog>, so Escape and the backdrop come free. */
.lb{border:1px solid var(--rule);padding:6px;background:var(--raise);max-width:min(94vw,860px);box-shadow:0 12px 40px rgba(0,0,0,.35)}
.lb::backdrop{background:rgba(0,0,0,.66)}
.lb img{display:block;width:100%;height:auto;max-height:84vh;object-fit:contain}
.lb-x{position:absolute;top:14px;right:14px;font:inherit;font-size:1.1rem;line-height:1;width:32px;height:32px;background:var(--raise);color:var(--ink);border:1px solid var(--rule);border-radius:3px;cursor:pointer}
.lb-x:hover{background:var(--accent-soft);border-color:var(--accent)}
.lb-nav{display:flex;align-items:center;justify-content:center;gap:12px;padding:8px 2px 2px}
.lb-b{font:inherit;font-size:1rem;line-height:1;width:34px;height:34px;background:var(--raise);color:var(--ink);border:1px solid var(--rule);border-radius:3px;cursor:pointer}
.lb-b:hover{background:var(--accent-soft);border-color:var(--accent)}
.lb-n{font-size:.76rem;font-weight:600;color:var(--muted);min-width:56px;text-align:center}
/* Next protest: the call, then the map of the walk. */
.rally.second{margin-bottom:34px}
/* Thursday: one alarm-coloured bar at the top of the page, and the plan in a modal behind it. The
   bar is a button, so it never gets a URL of its own; the modal is a <dialog>, so the mirror still
   reads the plan and Escape and the backdrop come free. */
#thursday{padding-block:22px 0;border-bottom:0}
.hl{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;width:100%;text-align:left;background:var(--alarm);color:#fff;border:0;border-radius:4px;padding:12px 16px;font:inherit;cursor:pointer;box-shadow:var(--shadow)}
.hl:hover{filter:brightness(1.08)}
.hl:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.hl-tag{flex:none;background:#fff;color:var(--alarm);font-family:"Archivo",sans-serif;font-size:.68rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:5px 8px;border-radius:3px}
.hl-txt{flex:1 1 300px;font-size:.95rem;line-height:1.35}
.hl-txt b{font-family:"Archivo",sans-serif;font-weight:700}
.hl-go{flex:none;font-size:.82rem;font-weight:700;white-space:nowrap;text-decoration:underline;text-underline-offset:3px}
.pm{border:1px solid var(--rule);border-top:4px solid var(--alarm);padding:26px 28px 28px;background:var(--raise);color:var(--ink);width:min(94vw,640px);box-sizing:border-box;overflow:auto;box-shadow:0 12px 40px rgba(0,0,0,.35)}
.pm::backdrop{background:rgba(0,0,0,.66)}
.pm .rally{margin-bottom:0}
.pm .rally-h{font-size:clamp(1.6rem,4.6vw,2.3rem)}
.pm .rally-sub{font-size:1.05rem}
.pm .plan{grid-template-columns:1fr;gap:12px;margin-top:16px}
.pm .lb-x{top:12px;right:12px}
@media (max-width:540px){.pm{padding:22px 18px 22px}}
.plan{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 22px;border-top:1px solid var(--rule);padding-top:16px;margin-top:18px}
.plan div{display:flex;flex-direction:column;gap:3px;font-size:.86rem;line-height:1.45;color:var(--ink-2);padding-left:11px;border-left:2px solid var(--rule)}
.plan div.hot{border-left-color:var(--alarm)}
.plan b{font-family:"Archivo",sans-serif;font-size:.68rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--ink)}
.plan div.hot b{color:var(--alarm)}
@media (max-width:600px){.plan{grid-template-columns:1fr}}


/* The protest strip, and the modal its cards open. */
.ally.up .k{color:var(--alarm)}
.allies.pr .ally-shot img{object-position:center 62%}
/* Seanad announcement: date block, the words, and the schedule it comes from. */
.sn-card{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start;border:1px solid var(--rule);border-left:4px solid var(--alarm);background:var(--raise);padding:18px 20px;box-shadow:var(--shadow)}
.sn-when{flex:0 0 auto;text-align:center;font-family:"Archivo",sans-serif;line-height:1;border-right:1px solid var(--rule);padding-right:18px}
.sn-when b,.sn-when span{display:block;font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.sn-when i{display:block;font-style:normal;font-size:2.7rem;font-weight:700;color:var(--alarm);margin-block:3px}
.sn-when em{display:block;margin-top:9px;font-style:normal;font-size:1.05rem;font-weight:700;color:var(--ink)}
.sn-txt{flex:3 1 320px;min-width:0;display:flex;flex-direction:column;gap:9px}
.sn-txt .btn{align-self:flex-start;background:var(--alarm);border-color:var(--alarm);color:#fff;margin-top:3px}
.sn-txt .btn:hover{opacity:.88}
.sn-shot{flex:1 1 210px;max-width:320px;display:flex;flex-direction:column;gap:6px;text-decoration:none}
.sn-shot img{width:100%;height:auto;display:block;border:1px solid var(--rule);background:var(--raise)}
.sn-shot:hover img{border-color:var(--alarm)}
/* The General Scheme, published three days before the statements: a strip across the foot of the
   same card, so the two are read together. Ten Heads in one glance, then the document itself. */
.sn-bill{flex:1 1 100%;border-top:1px solid var(--rule);padding-top:16px;display:flex;flex-direction:column;gap:12px}
.sn-bill .eyebrow .new{color:var(--alarm)}
.sn-bill h3{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:1.3rem;line-height:1.15;text-wrap:balance}
.sn-heads{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px 22px;font-size:.85rem;color:var(--ink-2);line-height:1.4}
.sn-heads li{padding-left:11px;border-left:2px solid var(--rule)}
.sn-heads li.hot{border-left-color:var(--alarm)}
.sn-heads b{display:block;color:var(--ink);font-weight:600}
.sn-heads small{display:block;font-size:.7rem;color:var(--ink-3);margin-top:2px}
.sn-docs{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}
.sn-docs .btn{background:var(--ink);border-color:var(--ink);color:var(--paper);gap:8px}
.sn-docs .btn:hover{opacity:.88}
.sn-docs .btn.ghost{background:transparent;border-color:var(--ink-3);color:var(--ink)}
.sn-docs .btn.ghost:hover{border-color:var(--ink);opacity:1}
.sn-docs .btn svg{width:15px;height:15px;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sn-docs .btn small{font-weight:500;opacity:.75;font-size:.76rem}
.sn-docs .src{flex-basis:100%}
@media (max-width:560px){
  .sn-card{flex-direction:column;gap:12px}
  .sn-bill{padding-top:12px}
  .sn-when{display:flex;align-items:baseline;gap:9px;width:100%;text-align:left;border-right:0;border-bottom:1px solid var(--rule);padding:0 0 11px}
  .sn-when i{font-size:1.7rem;margin:0}
  .sn-when em{margin:0 0 0 auto}
}
/* Where the TDs stand. Five stance columns from oppose to support, then the ones who have not
   answered; every name a chip with a party dot. Tier colours are mixed into the card surface so
   the same rules hold in both themes. */
/* The board bleeds past the 880px column, the same way the ally strip does, capped at 1360px so
   five columns of names never stretch into thin ribbons on a wide monitor. */
.stand{display:flex;flex-direction:column;gap:18px;margin-inline:max(calc(50% - 50vw + var(--sb,0px)/2),calc(50% - 680px));padding-inline:20px}
.stand .oppose{--c:#2b8a57}.stand .transition{--c:#7fb98a}.stand .neutral{--c:#d4a83c}.stand .support{--c:var(--alarm)}.stand .silent{--c:#8e948f}
.stand-bar{display:flex;gap:3px;height:34px;font-size:.78rem;font-weight:700;color:#fff}
.stand-bar span{flex:1 1 0;display:flex;align-items:center;justify-content:center;background:var(--c);border-radius:2px;min-width:26px}
.stand-bar .transition{color:var(--ink)}.stand-bar .neutral{color:var(--ink)}
.stand-cols{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;align-items:start}
.stand-col{background:color-mix(in srgb,var(--c) 10%,var(--raise));border:1px solid color-mix(in srgb,var(--c) 40%,var(--rule));border-top:4px solid var(--c);padding:14px 14px 8px;min-width:0}
.stand-head{display:flex;flex-direction:column;gap:2px;padding-bottom:10px;border-bottom:1px solid color-mix(in srgb,var(--c) 30%,var(--rule));margin-bottom:4px}
.stand-head b{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:2.2rem;line-height:1;color:var(--c)}
.stand-col.neutral .stand-head b,.stand-col.transition .stand-head b{color:color-mix(in srgb,var(--c) 70%,var(--ink))}
.stand-head h3{font-size:.86rem;font-weight:700;line-height:1.2;color:var(--ink)}
.stand-head p{font-size:.74rem;color:var(--ink-2);line-height:1.35}
.stand-sub{font-size:.66rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin:10px 0 4px;line-height:1.3}
.stand-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px}
.stand-list a{display:grid;grid-template-columns:8px 1fr;gap:1px 8px;align-items:center;padding:6px 8px;margin-inline:-8px;border-radius:3px;text-decoration:none;color:var(--ink)}
.stand-list a:hover,.stand-list a:focus-visible{background:color-mix(in srgb,var(--c) 18%,var(--raise));outline:none}
.stand-list a:hover .nm{text-decoration:underline}
.stand-list a i,.stand-legend i{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--p,#999)}
.stand-list .nm{font-weight:600;font-size:.86rem;line-height:1.2}
.stand-list .meta{grid-column:2;font-size:.68rem;color:var(--muted);line-height:1.2}
.stand-col.silent .stand-list a i{background:transparent;box-shadow:inset 0 0 0 1.5px var(--p,#999)}
.p-ff{--p:#3ea45e}.p-fg{--p:#2f6fdb}.p-sf{--p:#1c6b58}.p-lab{--p:#d2382c}.p-sd{--p:#7a2f8f}.p-gp{--p:#8cc63f}.p-pbp{--p:#c0267a}.p-ii{--p:#e07b1a}.p-ind{--p:#8a8f8b}
.stand-legend{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center}
.stand-legend i{margin-right:5px;vertical-align:baseline}
.stand-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px;border-top:1px solid var(--rule-soft);padding-top:14px}
.stand-foot .cap{flex:1 1 320px}
.stand-cta{display:flex;flex-wrap:wrap;gap:8px}
.stand-cta .btn{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.stand-cta .btn:hover{opacity:.88}
.stand-cta .btn.ghost{background:transparent;border-color:var(--ink-3);color:var(--ink)}
.stand-cta .btn.ghost:hover{border-color:var(--ink);opacity:1}
@media (max-width:860px){.stand-cols{grid-template-columns:repeat(3,1fr)}}
@media (max-width:600px){
  .stand-cols{grid-template-columns:1fr 1fr}
  .stand-bar{height:28px;font-size:.72rem}
  .stand-head b{font-size:1.8rem}
}
@media (max-width:400px){.stand-cols{grid-template-columns:1fr}}

/* The march route: a drawn map, not a tile embed. No third-party requests, no key, no
   cookies, and it prints. Geometry is projected from real coordinates, so the shape of the
   walk is honest even though only the streets that matter are on it. */
.route{display:grid;grid-template-columns:minmax(0,300px) minmax(0,1fr);gap:20px;align-items:start;margin:4px 0 0}
.route svg{width:100%;height:auto;display:block;background:var(--raise);border:1px solid var(--rule);box-shadow:var(--shadow)}
.route .rt-txt{display:flex;flex-direction:column;gap:10px}
.route .rt-step{display:flex;flex-direction:column;gap:2px;font-size:.84rem;line-height:1.4;color:var(--ink-2)}
.route .rt-step b{font-family:"Archivo",sans-serif;font-size:.68rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--ink)}
.route .rt-step.hot b{color:var(--alarm)}
.route figcaption{font-size:.78rem;line-height:1.45;color:var(--muted)}
@media (max-width:540px){.route{grid-template-columns:1fr}}
.allies.more{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 88px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 88px),transparent)}
.allies:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.ally{border:1px solid var(--rule);box-shadow:var(--shadow);background:var(--raise);display:flex;flex-direction:column;gap:6px;padding-bottom:15px;color:inherit;text-decoration:none}
.ally:hover{background:var(--accent-soft)}
.ally:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.ally-shot{aspect-ratio:16/7;overflow:hidden;background:var(--rule-soft);border-bottom:1px solid var(--rule)}
.ally-shot img{width:100%;height:100%;object-fit:cover;object-position:top center;display:block}
.ally-shot.ph{display:flex;align-items:center;justify-content:center;font-size:.76rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.ally .k{font-size:.62rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--accent);padding:13px 15px 0}
.ally b{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:1.15rem;line-height:1.2;padding-inline:15px}
.ally .d{font-size:.8rem;line-height:1.45;color:var(--ink-2);padding-inline:15px}
.ally .u{margin-top:auto;padding:6px 15px 0;font-size:.78rem;font-weight:600;color:var(--accent)}
.ally.hot{border-color:var(--alarm)}
.ally.hot .k,.ally.hot .u{color:var(--alarm)}
/* Thursday's card: the one that has not happened yet, so the one the strip is for. A heavier
   border with a glow off it, a tag on the photo, and the link as a solid button. */
.ally.next{border:2px solid var(--alarm);box-shadow:0 0 0 4px color-mix(in srgb,var(--alarm) 22%,transparent),var(--shadow)}
.ally.next .ally-shot{position:relative}
.ally-tag{position:absolute;top:10px;left:10px;background:var(--alarm);color:#fff;font-family:"Archivo",sans-serif;font-size:.66rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:5px 8px;border-radius:3px;box-shadow:0 1px 4px rgba(0,0,0,.3)}
.ally.next .u{margin:auto 15px 0;padding:8px 12px;align-self:flex-start;background:var(--alarm);color:#fff;border-radius:3px}
.ally.next:hover .u{filter:brightness(1.08)}
@media (prefers-reduced-motion:reduce){.allies{scroll-behavior:auto}}


/* letter tool */
.letter-tool{display:grid;grid-template-columns:minmax(260px,340px) 1fr;gap:20px;align-items:start}
.letter-form{display:flex;flex-direction:column;gap:10px}
.letter-form label{display:flex;flex-direction:column;gap:4px;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.letter-form input,.letter-form select,.letter-form textarea{font:inherit;font-size:.9rem;text-transform:none;letter-spacing:0;font-weight:400;color:var(--ink);background:var(--raise);border:1px solid var(--rule);padding:8px 10px;border-radius:3px;width:100%}
.letter-form input:focus-visible,.letter-form select:focus-visible,.letter-form textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.seg{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--ink);border-radius:3px;overflow:hidden;margin-bottom:6px}
.seg button{font:inherit;font-size:.78rem;font-weight:600;padding:9px 8px;background:var(--raise);color:var(--ink);border:0;cursor:pointer}
.seg button.on{background:var(--ink);color:var(--paper)}
.seg button:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
.letter-cta{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.letter-cta .btn{border-color:var(--ink);color:var(--ink)}
.letter-cta .btn.primary{background:var(--alarm);border-color:var(--alarm);color:#fff}
.letter-cta .btn:focus-visible{outline-color:var(--accent)}
.action.wide{grid-column:1/-1}
.reply-ask{margin-top:24px;background:var(--accent-soft);border:1.5px solid var(--accent);padding:26px 28px}
.reply-ask .eyebrow{color:var(--accent)}
.reply-ask .h3{font-size:clamp(1.3rem,3.4vw,1.75rem);line-height:1.15;color:var(--accent);margin:4px 0 10px}
.reply-ask p{font-size:.92rem;line-height:1.6;color:var(--ink-2);margin:0}
.reply-ask .src{font-size:.78rem;color:var(--muted)}
.reply-cta{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0 14px}
.reply-cta .btn{border-color:var(--accent);color:var(--accent);font-size:.95rem}
.reply-cta .btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.reply-cta .btn:focus-visible{outline-color:var(--accent)}
.letter-out{margin:0;background:var(--raise);border:1px solid var(--rule);padding:22px 24px;font-family:"Archivo",sans-serif;font-size:.86rem;line-height:1.55;white-space:pre-wrap;color:var(--ink-2);min-height:400px}
.letter-out mark{background:var(--alarm-soft);color:var(--alarm);padding:0 3px;border-radius:2px;font-weight:600}
@media (max-width:760px){.letter-tool{grid-template-columns:1fr}}


/* td finder */
.td-tool{display:flex;flex-direction:column;gap:14px}
.td-pick{display:grid;grid-template-columns:1fr 1fr 140px;gap:10px 14px;align-items:end}
.td-pick label{display:flex;flex-direction:column;gap:4px;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.td-pick select,.td-pick input{font:inherit;font-size:.9rem;text-transform:none;letter-spacing:0;font-weight:400;color:var(--ink);background:var(--raise);border:1px solid var(--rule);padding:8px 10px;border-radius:3px;width:100%}
.td-pick select:focus-visible,.td-pick input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.td-pick .src{grid-column:1/-1}
.td-list{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.td-list>.src{background:var(--raise);padding:16px;grid-column:1/-1}
.td{background:var(--raise);padding:14px 14px 14px 12px;display:grid;grid-template-columns:auto 1fr;gap:4px 10px;align-items:start}
.td input{margin:4px 0 0;width:16px;height:16px;accent-color:var(--accent)}
.td .nm{font-weight:600;font-size:.95rem;line-height:1.25}
.td .meta{font-size:.76rem;color:var(--muted);grid-column:2}
.td .tag{display:inline-block;font-size:.62rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:2px 6px;border-radius:2px;margin-left:6px;vertical-align:middle;background:var(--accent-soft);color:var(--accent)}
.td .tag.min{background:var(--alarm-soft);color:var(--alarm)}
.td .ct{font-size:.78rem;grid-column:2;display:flex;flex-wrap:wrap;gap:4px 14px}
.td .ct a{word-break:break-all}
.td.sel{outline:2px solid var(--accent);outline-offset:-2px}
.cm-head{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:flex-end;justify-content:space-between}
.cm-head h3{margin:2px 0 0}
.cm-head .btn{border-color:var(--ink);color:var(--ink)}
.cm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:10px;margin-top:8px}
.cm-lab{margin:20px 0 0}
/* Same card as the TD finder, minus the checkbox column: these are not selectable, because the
   letter tool addresses Deputies and five of the fourteen are Senators. */
.td.cm{border:1px solid var(--rule);box-shadow:var(--shadow)}
.td.cm .av{grid-row:1/3;align-self:start;width:46px;height:46px;border-radius:50%;object-fit:cover;background:var(--rule-soft)}
.td.cm .ct{grid-column:1/-1;margin-top:2px}
.td-list .td:last-child:nth-child(odd){grid-column:1/-1}
.td-cta{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.td-cta .btn{border-color:var(--ink);color:var(--ink)}
.td-cta .btn:focus-visible{outline-color:var(--accent)}
@media (max-width:720px){.td-pick{grid-template-columns:1fr 1fr}.td-list{grid-template-columns:1fr}}
@media (max-width:460px){.td-pick{grid-template-columns:1fr}}


/* voice */
.voice-grid{display:grid;grid-template-columns:192px 1fr;gap:20px 36px;align-items:start}
.voice-grid img{width:192px;height:192px;border-radius:50%;object-fit:cover;border:1px solid var(--rule);max-width:100%}
.voice-grid>div{display:flex;flex-direction:column;gap:12px}
blockquote.big{margin:0;font-family:"Newsreader",Georgia,serif;font-size:clamp(1.4rem,3.2vw,2rem);line-height:1.2;color:var(--ink);text-wrap:balance;border-left:3px solid var(--alarm);padding-left:18px}
blockquote.big em{color:var(--alarm);font-style:italic}
@media (max-width:620px){.voice-grid{grid-template-columns:1fr}.voice-grid img{width:120px;height:120px}}


/* claims */
.claims{display:flex;flex-direction:column;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-bottom:22px}
.claim{background:var(--raise);display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1.4fr) 132px;gap:16px 24px;padding:18px 18px;align-items:start}
.claim .said p{font-family:"Newsreader",Georgia,serif;font-size:1.08rem;line-height:1.3;color:var(--ink);text-wrap:balance}
.claim .said cite{display:block;font-style:normal;font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:8px}
.claim .data .big{font-family:"Newsreader",Georgia,serif;font-size:clamp(1.5rem,3vw,2rem);line-height:1;color:var(--accent);letter-spacing:-.02em;margin-bottom:8px}
.claim .data .big small{font-size:.55em}
.claim .data .big .vs{font-family:"Archivo",sans-serif;font-size:.6rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0 .2em;vertical-align:middle}
.claim .data p{font-size:.84rem;color:var(--ink-2);line-height:1.5}
.claim .verdict{justify-self:end;font-size:.66rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--alarm);border:1.5px solid var(--alarm);padding:6px 10px;text-align:center;transform:rotate(-2deg);white-space:nowrap}
.audit-strip{display:flex;flex-direction:column;gap:8px;margin-bottom:22px}
.audit-strip ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--rule);border:1px solid var(--rule)}
.audit-strip li{background:var(--raise);padding:10px 12px;font-size:.78rem;color:var(--ink-2);display:flex;flex-direction:column;gap:2px}
.audit-strip li b{color:var(--alarm);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase}
@media (max-width:720px){.claim{grid-template-columns:1fr}.claim .verdict{justify-self:start;transform:none}}


/* who */
.fig-block+.fig-block{margin-top:36px}
.picts{display:grid;grid-template-columns:repeat(2,1fr);gap:28px 40px}
.pp-row{display:flex;gap:4px;margin-bottom:10px}
.pp{width:22px;height:26px;fill:var(--rule);flex:none}.pp.on{fill:var(--accent)}
.pict-num{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:2.2rem;line-height:1;color:var(--accent);letter-spacing:-.02em}
.pict-lab{font-size:.85rem;color:var(--ink-2);margin-top:6px;line-height:1.4}
.who-top{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.who-big{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:2.6rem;line-height:1;color:var(--alarm);letter-spacing:-.02em}
.who-big-lab{font-size:.85rem;color:var(--ink-2)}
.who-register{display:flex;flex-direction:column;gap:10px}
.who-bar{display:flex;height:34px;background:var(--rule-soft);overflow:hidden}
.who-bar i{display:flex;align-items:center;padding-inline:8px;background:var(--rule);color:var(--ink);font-style:normal;font-size:.7rem;font-weight:700;white-space:nowrap;overflow:hidden;min-width:0}
.who-bar i.a{background:var(--accent);color:var(--paper)}.who-bar i.b{background:#2f8a72;color:var(--paper)}.who-bar i.c{background:#7cb8a4;color:var(--ink)}.who-bar i.d{background:var(--accent-soft)}
.who-bar i span{overflow:hidden;text-overflow:ellipsis}
@media (max-width:720px){.picts{grid-template-columns:1fr}.pp{width:18px;height:22px}.who-bar i.c span,.who-bar i.b span{display:none}}

/* flow */
.flow{display:flex;flex-direction:column}
.fs-grp{font-family:"Archivo",sans-serif;font-size:.7rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);padding:0 0 10px 34px;margin-left:11px;border-left:2px solid var(--rule)}
.fs-grp:first-child{border-left-color:transparent}
.fs{position:relative;padding:0 0 22px 34px;border-left:2px solid var(--rule);margin-left:11px}
.fs.end{border-left-color:transparent;padding-bottom:0}
.fs.done,.fs.done+.fs-grp,.fs.now{border-left-color:var(--accent)}
.fs i{position:absolute;left:-8px;top:2px;width:14px;height:14px;border-radius:50%;background:var(--paper);border:2px solid var(--rule)}
.fs.done i{background:var(--accent);border-color:var(--accent)}
.fs.now i{background:var(--alarm);border-color:var(--alarm);width:20px;height:20px;left:-11px;top:-1px;box-shadow:0 0 0 5px rgba(168,50,30,.18)}
.fs.end i{background:var(--ink);border-color:var(--ink)}
.fs b{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:1.25rem;line-height:1.1;color:var(--ink)}
.fs .t{font-family:"Archivo",sans-serif;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.fs-grp small{display:block;font-weight:400;letter-spacing:0;text-transform:none;font-size:.85rem;color:var(--alarm);margin-top:2px}
.fs.now b,.fs .here{color:var(--alarm)}
.fs>span{display:block;font-size:.88rem;color:var(--ink-2);line-height:1.45;margin-top:4px;max-width:60ch}
.fs .q{display:block;margin-top:8px;padding:8px 10px;border:1.5px solid var(--alarm);color:var(--ink);font-size:.85rem}

.privacy{margin:16px 0 0;padding:14px 16px;border:1.5px solid var(--accent);font-size:.9rem;line-height:1.5;color:var(--ink-2)}
.privacy b{color:var(--accent)}

/* after */
.h3{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:1.35rem;margin:0 0 4px}
.after{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.af{background:var(--raise);padding:16px 18px 18px;display:flex;flex-direction:column;gap:8px}
.af-h{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.af-h b{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:1.2rem}
.af-h span{font-family:"Archivo",sans-serif;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.af-said{margin:0;font-family:"Newsreader",Georgia,serif;font-style:italic;font-size:1rem;line-height:1.4;color:var(--ink)}
.af-said i{display:block;font-family:"Archivo",sans-serif;font-style:normal;font-size:.72rem;color:var(--ink-3);margin-top:3px}
.af-n{font-family:"Newsreader",Georgia,serif;font-weight:500;font-size:2.1rem;line-height:1;letter-spacing:-.02em;color:var(--alarm);margin-top:6px}
.af.up .af-n{color:var(--accent)}
.af-w{margin:0;font-size:.85rem;line-height:1.45;color:var(--ink-2)}
@media (max-width:720px){.after{grid-template-columns:1fr}}

/* refs */
ol.refs{margin:0;padding-left:2em;display:flex;flex-direction:column;gap:7px;font-size:.78rem;line-height:1.45;color:var(--ink-2)}
ol.refs a{word-break:break-word}
footer{padding-block:30px 56px;border-top:1px solid var(--ink);font-size:.78rem;color:var(--muted);display:flex;flex-direction:column;gap:8px}

/* Every page but Home: a strip of the hero, so it is the same site, and the way back to the start. */
.mast{background:var(--ink);padding:14px 20px}
.mast a{max-width:880px;margin:0 auto;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;text-decoration:none;color:var(--paper);
  padding-right:48px}
.mast b{font-family:"Archivo",sans-serif;font-weight:700;font-size:1.05rem;letter-spacing:-.01em}
.mast span{font-family:"Archivo",sans-serif;font-weight:700;text-transform:uppercase;letter-spacing:-.01em;font-size:.78rem;color:var(--hero-fg2)}
.mast mark{background:var(--hero-hot);color:var(--ink);padding:0 .15em;border-radius:2px}
.mast a:hover b{text-decoration:underline;text-underline-offset:3px}

/* The Scheme on /bill is the Seanad card's lower half, standing on its own. */
.sn-card>.sn-bill:first-child{border-top:0;padding-top:0}

/* Home's glance at the TD board: the bar, what each colour is, the way to the names. */
.stand-key{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 18px;font-size:.82rem;color:var(--ink-2)}
.stand-key li{display:flex;align-items:center;gap:7px}
.stand-key i{width:10px;height:10px;border-radius:2px;background:var(--c)}
.stand-key b{color:var(--ink)}
#glance .stand{margin-inline:0;padding-inline:0}
