/* ==========================================================================
   AUSTRALIAN DEMOCRATS — HOW TO VOTE — design system v2
   Brand: green #29a895 / deep #1f877a / gold #fcd666 / gold-deep #f5b94d / ink #1d2a28
   Public chrome: logo-only header, curved green band, national authorisation footer.
   ========================================================================== */

:root {
  --ad-green: #29a895;
  --ad-green-deep: #1f877a;
  --ad-green-dark: #15655a;
  --ad-green-tint: #e9f6f3;
  --ad-gold: #fcd666;
  --ad-gold-deep: #f5b94d;
  --ad-ink: #1d2a28;
  --ad-paper: #ffffff; /* flat white page — structure comes from type, not boxes */
  --ad-grad-brand: linear-gradient(135deg, #2eb7a2 0%, #1f877a 60%, #15655a 100%);
  --ad-grad-sun: linear-gradient(135deg, #fcd666 0%, #f5b94d 100%);
  --htv-radius: 18px;
  --htv-shadow: 0 14px 40px rgba(21, 101, 90, 0.13), 0 2px 10px rgba(29, 42, 40, 0.06);
  --ballot-ink: #14171a;
  --ballot-line: #3a3f44;
  font-size: 16px;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  font-family: "Avenir Next", Avenir, "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", sans-serif;
  color: var(--ad-ink);
  background: var(--ad-paper);
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}
img { max-width: 100%; }
a { color: var(--ad-green-deep); }

.htv-wrap { max-width: 1160px; margin: 0 auto; padding: 0 22px; }

/* ---------- public header: logo + HOW TO VOTE wordmark on the green band ---------- */
.htv-header { background: var(--ad-grad-brand); position: relative; z-index: 5; }
.htv-header-in { display: flex; align-items: center; justify-content: flex-start; gap: 18px; padding: 20px 22px 16px; max-width: 1160px; margin: 0 auto; }
.htv-logo img { height: 40px; display: block; }
.htv-wordmark { color: #fff; font-weight: 800; font-size: .92rem; letter-spacing: .26em; text-transform: uppercase; border-left: 1px solid rgba(255,255,255,.45); padding-left: 18px; line-height: 1.2; }
/* the curve lives on the hero (or on the header itself when a page has no hero) */
.htv-header.has-curve { padding-bottom: 46px; }
.htv-header.has-curve::after { content: ""; position: absolute; inset: auto 0 -1px 0; height: 46px; background: var(--ad-paper); clip-path: ellipse(78% 100% at 50% 100%); }

/* ---------- hero (inner pages: short title band, continues the header green) ---------- */
.htv-hero { background: var(--ad-grad-brand); color: #fff; padding: 8px 0 92px; position: relative; margin-top: -1px; }
.htv-hero::after { content: ""; position: absolute; inset: auto 0 -1px 0; height: 64px; background: var(--ad-paper); clip-path: ellipse(78% 100% at 50% 100%); }
.htv-hero h1 { font-size: clamp(1.65rem, 4vw, 2.6rem); line-height: 1.12; margin: 0 0 10px; font-weight: 800; letter-spacing: -0.01em; }
.htv-hero h1 em { font-style: normal; color: var(--ad-gold); }
.htv-hero p { max-width: 640px; font-size: 1.02rem; opacity: .95; margin: 0; }
.htv-kicker { display: block; background: none; border: 0; padding: 0; border-radius: 0; font-size: .74rem; letter-spacing: .2em; text-transform: uppercase; font-weight: 700; margin-bottom: 12px; opacity: .92; }
/* hero candidate space: name + short blurb, properly set */
.hero-cand { margin-top: 14px; border-left: 3px solid var(--ad-gold); padding-left: 14px; }
.hero-cand .hc-name { font-size: 1.18rem; font-weight: 800; }
.hero-cand .hc-blurb { max-width: 620px; font-size: .96rem; opacity: .94; margin: 3px 0 0; }

/* ---------- flat sections (no floating card containers) ---------- */
.htv-section { margin: 0 auto; position: relative; z-index: 2; padding-top: 10px; }
.htv-card { background: transparent; border-radius: 0; box-shadow: none; padding: 26px 0; }
.htv-card + .htv-card, .htv-duo + .htv-card, .htv-card + .htv-duo { margin-top: 0; border-top: 1px solid #eceeeb; }
.htv-h2 { font-size: 1.32rem; margin: 0 0 6px; font-weight: 800; letter-spacing: -.01em; }
.htv-sub { color: #5b6a66; margin: 0 0 16px; font-size: .96rem; }
.htv-grid { display: grid; gap: 20px; }
@media (min-width: 880px) { .htv-grid-map { grid-template-columns: 1.25fr .75fr; align-items: center; } }

/* Papers stack vertically: portrait slips centre on their own stage, the
   broadsheet then owns the FULL content width beneath — no desktop scrolling. */
.htv-duo { display: block; }
.htv-duo > .htv-card + .htv-card { border-top: 1px solid #eceeeb; }

.htv-btn { display: inline-flex; align-items: center; gap: 8px; background: var(--ad-grad-sun); color: var(--ad-ink); font-weight: 800; border: 0; border-radius: 12px; padding: 13px 22px; font-size: 1rem; cursor: pointer; text-decoration: none; box-shadow: 0 4px 14px rgba(245,185,77,.42); transition: transform .12s ease, box-shadow .12s ease; }
.htv-btn:hover { transform: translateY(-1px); box-shadow: 0 7px 18px rgba(245,185,77,.5); }
.htv-btn-ghost { background: #fff; color: var(--ad-green-deep); box-shadow: none; border: 2px solid var(--ad-green); }
.htv-btn-ghost:hover { background: var(--ad-green-tint); box-shadow: none; }

/* plain-type labels — the capsule/pill style is banned */
.htv-pill { display: inline-block; padding: 0; border-radius: 0; background: none !important; border: 0; font-size: .74rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
.htv-pill-live { color: var(--ad-green-dark); }
.htv-pill-demo { color: #8a6414; }

/* step headers: numbered disc + small-caps kicker over the heading —
   mirrors the numbered steps on the printed sheets */
.step-head { display: flex; gap: 14px; align-items: flex-start; margin: 0 0 8px; }
.step-head .step-n { width: 36px; height: 36px; border-radius: 50%; background: var(--ad-green); color: #fff; font-weight: 900; font-size: 1.08rem; display: flex; align-items: center; justify-content: center; flex: none; margin-top: 3px; box-shadow: 0 4px 12px rgba(41,168,149,.35); }
.step-head .step-kick { display: block; font-size: .74rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: var(--ad-green-dark); }
.step-head .htv-h2 { margin: 2px 0 0; }
@media (max-width: 480px) { .step-head { gap: 10px; } .step-head .step-n { width: 30px; height: 30px; font-size: .95rem; } }

/* ---------- map (three tiers: gold = HTV, green = campaign, grey = none) ---------- */
.htv-map svg { width: 100%; height: auto; display: block; }
.htv-map .st { fill: #e9e6dc; stroke: #fff; stroke-width: 2; transition: fill .15s ease, filter .15s ease; }
.htv-map a .st { cursor: pointer; }
.htv-map .st.is-active { fill: var(--ad-gold); filter: drop-shadow(0 3px 8px rgba(245,185,77,.45)); }
.htv-map a:hover .st.is-active { fill: var(--ad-gold-deep); }
.htv-map .st.is-campaign { fill: #7fcabc; filter: drop-shadow(0 3px 8px rgba(41,168,149,.35)); }
.htv-map a:hover .st.is-campaign { fill: var(--ad-green); }
.htv-map .st-label { font-size: 26px; font-weight: 800; fill: var(--ad-ink); pointer-events: none; }
.htv-map .st-label.on-gold { fill: #6b4d00; }
.htv-map .st-label.on-green { fill: #0d423a; }
.htv-map-legend { display: flex; gap: 16px; margin-top: 12px; font-size: .84rem; color: #5b6a66; flex-wrap: wrap; }
.htv-map-legend i { display: inline-block; width: 14px; height: 14px; border-radius: 4px; margin-right: 6px; vertical-align: -2px; }

/* ---------- finder & choices (borderless, soft) ---------- */
.htv-finder { background: var(--ad-green-tint); border-radius: 16px; padding: 22px; }
.htv-finder label { font-weight: 700; font-size: .93rem; display: block; margin-bottom: 9px; }
.htv-finder-row { display: flex; gap: 10px; flex-wrap: wrap; }
.htv-input { flex: 1; min-width: 170px; padding: 13px 15px; border: 0; border-radius: 12px; font-size: 1.06rem; font-family: inherit; background: #fff; box-shadow: inset 0 0 0 1.5px #cfe6e0; }
.htv-input:focus { outline: none; box-shadow: inset 0 0 0 2px var(--ad-green), 0 0 0 3px rgba(41,168,149,.16); }
.htv-finder-results { margin-top: 14px; display: none; }
.htv-finder-results.show { display: block; }
.htv-finder-results .hint { font-size: .86rem; color: #4c5a56; margin: 0 0 8px; }
.htv-choice { display: flex; justify-content: space-between; align-items: center; gap: 10px; width: 100%; text-align: left; background: #f6f9f8; border: 0; padding: 13px 15px; border-radius: 12px; margin-bottom: 8px; font-size: 1rem; font-family: inherit; cursor: pointer; text-decoration: none; color: var(--ad-ink); font-weight: 600; transition: background .12s, transform .12s, box-shadow .12s; }
.htv-choice:hover { background: #fff; box-shadow: 0 4px 14px rgba(21,101,90,.14); transform: translateY(-1px); }
.htv-choice .tag { font-size: .76rem; font-weight: 800; color: var(--ad-green-dark); background: none; padding: 0; white-space: nowrap; letter-spacing: .04em; }
.htv-choice .tag.none { color: #8a6414; background: none; }
.htv-choice.is-off { opacity: .55; cursor: default; pointer-events: none; }
.htv-elist { display: grid; gap: 8px; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); }

/* =====================================================================
   BALLOT REPLICAS
   ===================================================================== */
.ballot-stage { margin: 24px 0 8px; }
.ballot-frame { position: relative; border-radius: 8px; padding: 24px 20px 20px; box-shadow: 0 10px 26px rgba(29,42,40,.16), 0 1px 3px rgba(29,42,40,.14); background: var(--paper, #fff); color: var(--ballot-ink); font-family: "Helvetica Neue", Arial, sans-serif; }
.ballot-portrait { max-width: 430px; margin-left: auto; margin-right: auto; }
.ballot-band { height: 30px; margin: -24px -20px 16px; border-radius: 8px 8px 0 0; }
.ballot-head { text-align: center; margin-bottom: 13px; }
.ballot-head .b1 { font-size: .78rem; letter-spacing: .07em; text-transform: uppercase; font-weight: 700; }
.ballot-head .b2 { font-size: 1.02rem; font-weight: 800; margin-top: 2px; }
.ballot-head .b3 { font-size: .88rem; margin-top: 2px; }
.ballot-instr { border: 1.5px solid var(--ballot-line); background: rgba(255,255,255,.6); padding: 9px 13px; font-size: .84rem; margin: 0 auto 16px; max-width: 560px; }
.ballot-instr p { margin: 2px 0; }

/* lower house rows (per real ballots): [LOGO] [box] [SURNAME, Given / party] */
.ballot-rows { max-width: 420px; margin: 0 auto; }
.ballot-row { display: flex; align-items: center; gap: 11px; padding: 9px 4px; border-bottom: 1px solid rgba(0,0,0,.13); }
.ballot-row:last-child { border-bottom: 0; }
.plogo-slot { width: 34px; min-width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; }
.plogo-slot img { width: 32px; height: 32px; object-fit: contain; filter: grayscale(1) contrast(1.1); }
.ballot-box { width: 42px; height: 42px; min-width: 42px; border: 2.5px solid var(--ballot-ink); background: #fff; display: flex; align-items: center; justify-content: center; font-size: 1.45rem; font-weight: 800; font-family: "Comic Sans MS", "Segoe Print", "Bradley Hand", cursive; color: #0d47a1; }
.ballot-row .cand { flex: 1; min-width: 0; }
.ballot-row .cand .nm { font-weight: 800; font-size: .98rem; letter-spacing: .02em; }
.ballot-row .cand .nm small { font-weight: 600; }
.ballot-row .cand .pt { font-size: .8rem; color: #333; margin-top: 1px; }
.ballot-row.ours { background: rgba(252, 214, 102, .3); box-shadow: inset 0 0 0 3px var(--ad-gold-deep); border-radius: 8px; border-bottom-color: transparent; }
.ballot-row.ours .ballot-box { border-color: var(--ad-green-dark); box-shadow: 0 0 0 3px rgba(41,168,149,.25); }
.ballot-leave { font-size: .76rem; color: #667; font-style: italic; white-space: nowrap; }

/* broadsheet — FULL WIDTH: columns flex to occupy every available pixel */
.ballot-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 6px; width: 100%; }
.scroll-hint { display: none; text-align: center; font-size: .78rem; color: #5b6a66; margin: 4px 0 8px; }
.bs { display: flex; align-items: stretch; width: 100%; min-width: 640px; }
.bs-col { border: 1.5px solid var(--ballot-line); border-right-width: 0; flex: 1 1 0; min-width: 118px; display: flex; flex-direction: column; background: rgba(255,255,255,.62); }
.bs-col:last-child { border-right-width: 1.5px; }
.bs-col .letter { text-align: center; font-weight: 800; font-size: 1.05rem; padding: 6px 4px 2px; }
/* ATL cell (per real ballot photos): letter → LOGO ABOVE the box → box → party name UNDER */
.bs-col .atl { display: flex; flex-direction: column; justify-content: flex-start; align-items: center; gap: 5px; padding: 2px 4px 8px; }
.bs-col .atl img { width: 26px; height: 26px; object-fit: contain; filter: grayscale(1) contrast(1.1); }
.bs-col .pname { text-align: center; font-size: .76rem; font-weight: 700; min-height: 32px; padding: 0 6px 8px; display: flex; align-items: flex-start; justify-content: center; }
.bs-col.ours { background: rgba(252,214,102,.34); box-shadow: inset 0 0 0 3px var(--ad-gold-deep); }
.bs-col.ours .letter { color: var(--ad-green-dark); }
/* skipped runs: a hair-thin ⋯ sliver, nothing more */
.bs-gap { border: 1.5px solid var(--ballot-line); border-right-width: 0; flex: 0 0 26px; min-width: 26px; max-width: 26px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 8px 0; background: #fdfdfc; color: #8a9793; text-align: center; }
.bs-gap .dots { font-weight: 900; font-size: 1.05rem; line-height: 1; letter-spacing: 0; }
.bs-gap .rng { writing-mode: vertical-rl; font-size: .6rem; letter-spacing: .1em; color: #9aa4a1; font-weight: 700; }
.bs-line { position: relative; margin: 0 0 14px; }
.bs-line hr { border: 0; border-top: 5px solid var(--ballot-ink); margin: 0; }
.bs-line span { position: absolute; right: 8px; top: -11px; background: var(--paper, #fff); padding: 0 8px; font-size: .7rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; }
.bs-cand { display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-top: 1px solid rgba(0,0,0,.12); }
.bs-cand .bx { width: 26px; height: 26px; min-width: 26px; border: 2px solid var(--ballot-ink); background: #fff; display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: .95rem; font-family: "Comic Sans MS", "Segoe Print", cursive; color: #0d47a1; }
.bs-cand .cn { font-size: .73rem; line-height: 1.22; min-width: 0; }
.bs-cand .cn b { display: block; font-size: .77rem; }
.bs-atl-note { text-align: center; font-size: .82rem; margin: 8px auto 0; color: #333; max-width: 620px; }

/* Hare-Clark columns */
.hc .bs-col { min-width: 185px; max-width: 215px; }
.hc-anyorder { text-align: center; background: rgba(252,214,102,.5); border: 2px dashed var(--ad-gold-deep); font-weight: 700; padding: 9px; font-size: .85rem; margin: 0 auto 12px; border-radius: 8px; max-width: 620px; }

/* tabs (ATL / BTL) */
.htv-tabs { display: flex; gap: 8px; margin: 0 0 14px; flex-wrap: wrap; }
.htv-tab { border: 2px solid var(--ad-green); background: #fff; color: var(--ad-green-deep); font-weight: 800; padding: 10px 18px; border-radius: 99px; cursor: pointer; font-size: .92rem; font-family: inherit; }
.htv-tab[aria-selected="true"] { background: var(--ad-green); color: #fff; }
/* plain-type "recommended" flag — capsule labels are banned by the design system */
.htv-tab .rec { font-size: .66rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; background: none; border-radius: 0; padding: 0; margin-left: 6px; color: #8a6414; vertical-align: 1px; }
.htv-tab[aria-selected="true"] .rec { color: var(--ad-gold); }
.htv-tabpanel[hidden] { display: none; }

/* position explainer */
.htv-pos { background: var(--ad-green-tint); border-radius: 14px; padding: 14px 18px; margin: 0 0 16px; }
.pos-strip { display: flex; gap: 4px; margin: 2px 0 8px; flex-wrap: wrap; }
.pos-cell { width: 32px; height: 32px; border: 1.5px solid #b7c4c0; border-radius: 7px; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: .8rem; color: #5b6a66; background: #fff; }
.pos-cell.ours { background: var(--ad-gold); border-color: var(--ad-gold-deep); color: var(--ad-ink); box-shadow: 0 2px 8px rgba(245,185,77,.55); transform: scale(1.14); }
.pos-text { font-size: .95rem; font-weight: 700; color: var(--ad-green-dark); }

/* our candidate banner */
.htv-cand { display: flex; gap: 16px; align-items: center; background: var(--ad-grad-brand); color: #fff; border-radius: var(--htv-radius); padding: 18px 22px; margin: 18px 0 22px; box-shadow: var(--htv-shadow); }
.htv-cand img { width: 72px; height: 72px; border-radius: 50%; object-fit: cover; border: 3px solid var(--ad-gold); background: #fff; flex: none; }
.htv-cand .who .lead { font-size: .78rem; letter-spacing: .12em; text-transform: uppercase; opacity: .9; }
.htv-cand .who .nm { font-size: 1.28rem; font-weight: 800; }
.htv-bignum { margin-left: auto; text-align: center; background: var(--ad-gold); color: var(--ad-ink); border-radius: 14px; padding: 8px 18px; font-weight: 900; flex: none; }
.htv-bignum .n { font-size: 2rem; line-height: 1; display: block; }
.htv-bignum .t { font-size: .66rem; letter-spacing: .09em; text-transform: uppercase; }

/* just vote 1 */
.justone { text-align: center; padding: 8px 12px 4px; }
.justone .big1 { width: 92px; height: 92px; margin: 0 auto 12px; border: 4px solid var(--ballot-ink); background: #fff; display: flex; align-items: center; justify-content: center; font-size: 3.4rem; font-weight: 900; font-family: "Comic Sans MS", "Segoe Print", cursive; color: #0d47a1; box-shadow: 0 0 0 6px rgba(252,214,102,.8); }
.justone p { font-weight: 800; font-size: 1.05rem; margin: 4px 0 0; }
.justone .note { display: block; white-space: normal; font-size: .84rem; font-style: italic; color: #566; max-width: 380px; margin: 8px auto 0; line-height: 1.45; }

/* candidate profile — quiet section under the main screen area */
.cand-profile { border-top: 1px solid #eceeeb; margin-top: 8px; padding: 30px 0 10px; display: flex; gap: 24px; align-items: flex-start; }
.cand-profile img { width: 104px; height: 104px; border-radius: 50%; object-fit: cover; flex: none; background: var(--ad-green-tint); }
.cand-profile .cp-body h3 { margin: 0 0 2px; font-size: 1.15rem; }
.cand-profile .cp-body .cp-role { font-size: .78rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--ad-green-dark); margin-bottom: 8px; }
.cand-profile .cp-body p { margin: 0 0 12px; color: #3c4a46; max-width: 68ch; }
.cand-profile .cp-more { font-weight: 800; text-decoration: none; }
@media (max-width: 640px) { .cand-profile { flex-direction: column; } }

/* home chooser: Federal ⇄ Other, swapped in place */
.home-view[hidden] { display: none; }
.map-wrap { position: relative; }
.map-fedlabel { position: absolute; inset: 0 0 12% 0; display: flex; align-items: center; justify-content: center; pointer-events: none; font-weight: 900; font-size: clamp(2rem, 8.5vw, 4.4rem); letter-spacing: .24em; text-transform: uppercase; color: rgba(29, 42, 40, .34); text-indent: .24em; }
.home-back { margin-top: 12px; font-size: .92rem; }
/* federal silhouette: ONE country, no internal borders */
.htv-map.silhouette .st { stroke: var(--ad-gold); stroke-width: 1.5; }
.htv-map.silhouette a:hover .st { fill: var(--ad-gold-deep); stroke: var(--ad-gold-deep); }
.home-fed { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 34px; align-items: center; }
.home-or { text-align: center; }
.home-or .or { display: block; font-weight: 900; font-size: clamp(1.6rem, 3vw, 2.3rem); letter-spacing: .34em; text-transform: uppercase; color: #9aa79f; margin-bottom: 20px; text-indent: .34em; }
.home-or-btn { width: 100%; justify-content: center; font-size: 1.12rem; padding: 18px 20px; border-width: 2.5px; }
/* two-line poster lockup over the country */
.map-fedlabel { flex-direction: column; gap: 0; line-height: 1.02; }
.map-fedlabel .fl2 { font-size: .62em; letter-spacing: .3em; text-indent: .3em; }
@media (max-width: 760px) { .home-fed { grid-template-columns: 1fr; gap: 10px; } .home-or { padding-bottom: 8px; } .home-or .or { margin: 8px 0 12px; } }

/* mobile broadsheet coaching bubble */
.bs-wrap { position: relative; }
.bs-bubble { position: absolute; top: 46%; right: 10px; z-index: 6; background: var(--ad-ink); color: #fff; font-size: .82rem; font-weight: 700; padding: 10px 14px; border-radius: 12px; box-shadow: 0 6px 18px rgba(29,42,40,.35); animation: bsNudge 1.6s ease-in-out infinite; pointer-events: none; max-width: 180px; }
.bs-bubble::after { content: ""; position: absolute; left: -7px; top: 50%; transform: translateY(-50%); border: 8px solid transparent; border-right-color: var(--ad-ink); border-left: 0; }
.bs-bubble[hidden] { display: none; }
@keyframes bsNudge { 0%,100% { transform: translateX(0); } 50% { transform: translateX(-7px); } }
@media (prefers-reduced-motion: reduce) { .bs-bubble { animation: none; } }

/* searcher-first portals: the electorate search at hero weight */
.wz-hero .wz-filter { font-size: 1.18rem; padding: 17px 18px; }
.wz-hero .wz-opt strong { font-size: 1.12rem; }

/* national jump-box: name search + "or enter your postcode" side by side */
.jump-head { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.jump-head .jh-pc { font-size: .95rem; font-weight: 700; color: var(--ad-green-deep); white-space: nowrap; }
.jump-row { display: grid; grid-template-columns: minmax(0, 2fr) minmax(150px, 1fr); gap: 12px; max-width: 760px; }
@media (max-width: 640px) { .jump-row { grid-template-columns: 1fr; } }

/* DESKTOP: candidate panel to the RIGHT of the green ballot paper */
.paper-duo { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 30px; align-items: start; }
.cand-side { border-left: 1px solid #eceeeb; padding-left: 26px; }
.cand-side img { width: 100%; max-width: 260px; aspect-ratio: 1; object-fit: cover; border-radius: 16px; display: block; background: var(--ad-green-tint); }
.cand-side .cs-role { font-size: .74rem; font-weight: 800; letter-spacing: .13em; text-transform: uppercase; color: var(--ad-green-dark); margin: 14px 0 2px; }
.cand-side h3 { margin: 0 0 6px; font-size: 1.3rem; letter-spacing: -.01em; }
.cand-side .cs-blurb { font-weight: 700; color: var(--ad-ink); margin: 0 0 10px; font-size: .98rem; line-height: 1.5; }
.cand-side .cs-bio { color: #4c5a56; font-size: .92rem; margin: 0 0 14px; line-height: 1.6; }
.cand-side .cs-more { font-weight: 800; text-decoration: none; }
@media (max-width: 980px) {
  .paper-duo { grid-template-columns: 1fr; }
  .cand-side { border-left: 0; border-top: 1px solid #eceeeb; padding: 22px 0 0; margin-top: 8px; display: flex; gap: 18px; align-items: flex-start; }
  .cand-side img { width: 108px; min-width: 108px; }
}
@media (max-width: 520px) { .cand-side { flex-direction: column; } .cand-side img { width: 140px; } }

/* wizard list: one row, then “… show all” */
.wz-collapsible.collapsed { max-height: 58px; overflow: hidden; }
.wz-more { margin-top: 10px; background: none; border: 0; color: var(--ad-green-deep); font-weight: 800; font-size: .92rem; cursor: pointer; font-family: inherit; padding: 4px 0; }
.wz-more::before { content: "… "; }

/* our mark inside a ballot box (Robson columns) — the real AD icon, not a tick */
.ballot-box img, .bs-cand .bx img { width: 72%; height: 72%; object-fit: contain; filter: grayscale(1) contrast(1.1); }

/* hero candidate portrait + state brand logo */
.hero-cand { display: flex; gap: 14px; align-items: center; }
.hero-cand img { width: 62px; height: 62px; border-radius: 50%; object-fit: cover; border: 2px solid var(--ad-gold); background: #fff; flex: none; }
.hero-brand { position: absolute; top: 16px; right: 22px; height: 34px; opacity: .95; }
.hero-brand img { height: 100%; width: auto; }
.htv-hero .htv-wrap { position: relative; }
@media (max-width: 640px) { .hero-brand { display: none; } }

/* ---------- FAMILY PACK ---------- */
.fp-lead { max-width: 640px; }
.fp-builder { margin: 8px 0 10px; }
.fp-addrow { display: grid; grid-template-columns: minmax(120px, 200px) minmax(0, 1fr) auto; gap: 10px; align-items: start; }
@media (max-width: 700px) { .fp-addrow { grid-template-columns: 1fr; } }
.fp-search { position: relative; }
.fp-results { position: absolute; inset: calc(100% + 4px) 0 auto 0; background: #fff; border-radius: 12px; box-shadow: 0 14px 34px rgba(21,101,90,.2); z-index: 20; max-height: 260px; overflow: auto; display: none; }
.fp-results.show { display: block; }
.fp-results button { display: flex; justify-content: space-between; gap: 10px; width: 100%; border: 0; background: none; padding: 11px 14px; font-family: inherit; font-size: .95rem; text-align: left; cursor: pointer; }
.fp-results button:hover { background: var(--ad-green-tint); }
.fp-results .st { color: #8a9793; font-size: .78rem; font-weight: 700; text-transform: uppercase; }
.fp-list { list-style: none; margin: 18px 0 0; padding: 0; }
.fp-list li { display: flex; align-items: center; gap: 14px; padding: 12px 2px; border-bottom: 1px solid #eceeeb; }
.fp-avatar { width: 40px; height: 40px; border-radius: 50%; background: var(--ad-grad-brand); color: #fff; font-weight: 800; display: flex; align-items: center; justify-content: center; flex: none; }
.fp-list .who { flex: 1; min-width: 0; }
.fp-list .who strong { display: block; }
.fp-list .who span { color: #5b6a66; font-size: .88rem; }
.fp-remove { border: 0; background: none; color: #b33; font-size: 1.1rem; cursor: pointer; padding: 6px; }
.fp-summary { background: var(--ad-grad-brand); color: #fff; border-radius: 18px; padding: 20px 24px; margin-top: 24px; }
.fp-summary .fp-sumtop { display: flex; flex-wrap: wrap; align-items: center; gap: 16px; }
.fp-summary .cnt { font-weight: 700; }
.fp-summary .htv-btn { margin-left: auto; }
.fp-empty { color: #5b6a66; font-size: .95rem; padding: 18px 0; }
/* one-tap relationship chips */
.fp-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 14px; }
.fp-chip { border: 1.5px solid #cfe6e0; background: #fff; color: var(--ad-green-dark); font-weight: 700; font-size: .88rem; padding: 7px 14px; border-radius: 10px; cursor: pointer; font-family: inherit; transition: background .1s, transform .1s; }
.fp-chip:hover { background: var(--ad-green-tint); transform: translateY(-1px); }
.fp-chip[disabled] { opacity: .38; cursor: default; transform: none; }
/* page-by-page preview: miniature A4 tiles of what will print */
.fp-pages { display: flex; flex-wrap: wrap; gap: 10px; margin: 16px 0 2px; }
.fp-page { width: 76px; min-height: 100px; background: #fff; color: var(--ad-ink); border-radius: 6px; box-shadow: 0 3px 10px rgba(0,0,0,.25); padding: 8px 7px; font-size: .58rem; line-height: 1.25; position: relative; overflow: hidden; }
.fp-page::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 12px; background: var(--ad-grad-brand); }
.fp-page.senate::after { content: ""; position: absolute; top: 0; right: 0; border: 9px solid transparent; border-top-color: var(--ad-gold-deep); border-right-color: var(--ad-gold-deep); }
.fp-page b { display: block; margin-top: 14px; font-size: .62rem; }
.fp-page span { color: #5b6a66; }
.fp-clear { border: 0; background: none; color: rgba(255,255,255,.85); font-weight: 700; font-size: .84rem; cursor: pointer; font-family: inherit; text-decoration: underline; }
/* printed pack cover: numbered roll-call + "on the day" steps */
.fp-cover-who { font-size: 9pt; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: var(--ad-green-dark); margin: 5mm 0 1mm; }
.fp-cover-names { list-style: none; margin: 0 0 6mm; padding: 0; counter-reset: fpn; }
.fp-cover-names li { counter-increment: fpn; font-size: 13.5pt; padding: 2.6mm 2mm; border-bottom: .25mm solid #e2e7e2; display: flex; align-items: center; gap: 4mm; }
.fp-cover-names li::before { content: counter(fpn); flex: none; width: 7.5mm; height: 7.5mm; border-radius: 50%; background: var(--ad-gold) !important; color: var(--ad-ink); font-weight: 900; font-size: 10.5pt; display: flex; align-items: center; justify-content: center; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.fp-cover-names b { font-weight: 800; }
.fp-cover-names li span { color: #4c5a56; font-weight: 600; margin-left: auto; font-size: 11pt; text-align: right; }
.fp-cover-names.many { column-count: 2; column-gap: 9mm; }
.fp-cover-names.many li { break-inside: avoid; font-size: 11.5pt; }
.fp-onday { display: flex; gap: 5mm; margin: 2mm 0 0; }
.fp-onday .fo-step { flex: 1 1 0; display: flex; gap: 3mm; align-items: flex-start; background: var(--ad-green-tint) !important; border-radius: 3mm; padding: 4mm; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.fp-onday .fo-step strong { display: block; font-size: 10.5pt; line-height: 1.25; margin-bottom: 1mm; }
.fp-onday .fo-step div span { font-size: 8.5pt; color: #3c4a46; line-height: 1.35; }
/* "For Mum & Dad" personalisation on each pack page */
.ps-for { display: none; }
@media print { .ps-for:not(:empty) { display: inline-block; } }
.print-sheet.ps-preview .ps-for:not(:empty) { display: inline-block; }
.ps-for:not(:empty) { background: var(--ad-gold) !important; border-radius: 2mm; padding: 1.2mm 4mm; font-weight: 900; font-size: 11pt; color: var(--ad-ink); margin: 1.5mm 0 .5mm; -webkit-print-color-adjust: exact; print-color-adjust: exact; }

/* sample watermark — OFF by default in content; shown only when the card enables it */
.is-sample::after { content: "SAMPLE — recommendation to be confirmed"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(-24deg); font-size: clamp(.95rem, 3.2vw, 1.6rem); font-weight: 900; letter-spacing: .16em; text-transform: uppercase; color: rgba(180, 30, 30, .15); border: 3px solid rgba(180, 30, 30, .13); padding: 8px 22px; border-radius: 10px; pointer-events: none; white-space: nowrap; }
.is-sample { overflow: hidden; }

/* =====================================================================
   SHARE — pronounced panel
   ===================================================================== */
.htv-share-panel { background: var(--ad-grad-brand); color: #fff; border-radius: var(--htv-radius); box-shadow: var(--htv-shadow); padding: 26px 28px; margin-top: 26px; }
.htv-share-panel .sp-head { margin-bottom: 16px; }
.htv-share-panel .sp-head strong { display: block; font-size: 1.3rem; font-weight: 800; letter-spacing: -.01em; }
.htv-share-panel .sp-head span { opacity: .92; font-size: .95rem; }
.sp-btns { display: flex; flex-wrap: wrap; gap: 10px; }
.share-btn { display: inline-flex; align-items: center; gap: 8px; padding: 12px 18px; border-radius: 99px; border: 0; cursor: pointer; font-weight: 800; font-size: .94rem; background: #fff; color: var(--ad-ink); text-decoration: none; font-family: inherit; transition: transform .1s, box-shadow .1s; box-shadow: 0 2px 8px rgba(0,0,0,.18); }
.share-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 14px rgba(0,0,0,.24); }
.share-btn svg { width: 18px; height: 18px; flex: none; }
.share-wa svg { fill: #1faf52; } .share-fb svg { fill: #1877f2; } .share-ms svg { fill: #a626ff; } .share-x svg { fill: #14171a; } .share-em svg { fill: #5b6a66; } .share-cp svg { fill: var(--ad-green-deep); } .share-nt svg { fill: var(--ad-gold-deep); }
.share-btn.share-pr { background: var(--ad-grad-sun); color: var(--ad-ink); font-size: 1rem; padding: 12px 22px; }
.share-btn.share-pr svg { fill: var(--ad-ink); }

/* compliance / notes */
.htv-note { background: #fff6dd; border-radius: 12px; padding: 13px 17px; font-size: .9rem; margin: 18px 0; }
.htv-note.green { background: var(--ad-green-tint); }

/* breadcrumbs */
.htv-crumbs { font-size: .85rem; margin: 18px 0 0; color: #5b6a66; }
.htv-crumbs a { text-decoration: none; font-weight: 600; }

/* ---------- footer: national authorisation ---------- */
.htv-footer { margin-top: 72px; background: var(--ad-ink); color: #cfd8d5; font-size: .88rem; }
.htv-footer-in { max-width: 1160px; margin: 0 auto; padding: 30px 22px 38px; text-align: center; }
.htv-footer-links { display: block; margin-bottom: 10px; }
.htv-footer a { color: var(--ad-gold); text-decoration: none; margin: 0 9px; }
.htv-auth { display: block; border-top: 1px solid #33413d; margin-top: 14px; padding-top: 14px; font-size: .84rem; color: #a9bab5; }

/* =====================================================================
   PRINT — the flagship A4 how-to-vote card
   ===================================================================== */
.print-band, .print-auth, .print-url { display: none; }
@media print {
  @page { size: A4; margin: 10mm 11mm 16mm; }
  html, body { background: #fff !important; }
  body { font-size: 10.5pt; }
  .htv-header, .htv-footer, .htv-share-panel, .htv-tabs, .htv-finder, .htv-crumbs,
  .no-print, .htv-note, .scroll-hint, .test-banner { display: none !important; }

  .print-band { display: flex !important; align-items: center; justify-content: space-between; gap: 8mm; background: var(--ad-grad-brand) !important; border-radius: 3mm; padding: 5mm 7mm; margin-bottom: 6mm; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .print-band img { height: 9mm; }
  .print-band .pb-right { color: #fff; font-weight: 700; font-size: 8.5pt; letter-spacing: .08em; text-transform: uppercase; text-align: right; }

  .htv-hero { background: none !important; color: var(--ad-ink); padding: 0 0 4mm; margin: 0; }
  .htv-hero::after { display: none; }
  .htv-hero h1 { font-size: 21pt; margin: 0 0 2mm; }
  .htv-hero h1 em { color: var(--ad-green-dark); }
  .htv-hero p { font-size: 10pt; opacity: 1; max-width: none; }
  .htv-kicker { background: none; border: 0; padding: 0; color: var(--ad-green-dark); letter-spacing: .14em; margin-bottom: 1mm; }
  .htv-wrap { max-width: none; padding: 0; }
  .htv-section { margin: 0; }

  .htv-card, .htv-duo > .htv-card { box-shadow: none !important; border: 0 !important; padding: 0; margin: 0 0 7mm !important; break-inside: avoid; }
  .htv-duo { display: block; }
  .htv-pill { border: 1px solid currentColor; }

  .htv-cand { -webkit-print-color-adjust: exact; print-color-adjust: exact; box-shadow: none; border-radius: 3mm; padding: 4mm 6mm; margin: 0 0 6mm; }
  .htv-pos { -webkit-print-color-adjust: exact; print-color-adjust: exact; break-inside: avoid; }
  .pos-cell.ours, .htv-bignum, .justone .big1 { -webkit-print-color-adjust: exact; print-color-adjust: exact; }

  .ballot-stage { margin: 3mm 0; }
  .ballot-frame { box-shadow: none; border: .4mm solid #9aa; break-inside: avoid; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .ballot-portrait { max-width: 118mm; }
  .ballot-scroll { overflow: visible; }
  .print-scale .bs { zoom: .72; }
  .hc .bs { zoom: .8; }
  .htv-tabpanel[hidden] { display: none !important; }
  .bs-col.ours, .ballot-row.ours, .hc-anyorder, .is-sample::after, .ballot-band { -webkit-print-color-adjust: exact; print-color-adjust: exact; }

  .print-auth { display: block !important; position: fixed; bottom: 0; left: 0; right: 0; background: #fff; border-top: .5pt solid #888; padding: 2mm 0 0; font-size: 7.5pt; color: #333; text-align: center; }
  main { margin-bottom: 12mm; }
}

/* =====================================================================
   MOBILE
   ===================================================================== */
@media (max-width: 720px) {
  .htv-logo img { height: 34px; }
  .htv-card { padding: 22px 18px; border-radius: 16px; }
  .htv-hero { padding-bottom: 78px; }
  .htv-section { margin-top: -50px; }
  .htv-share-panel { padding: 20px 18px; }
  .sp-btns { gap: 8px; }
  .share-btn { padding: 11px 15px; font-size: .88rem; }
  .scroll-hint { display: block; }
  .htv-cand { flex-wrap: wrap; }
  .htv-bignum { margin-left: 0; }
}
@media (max-width: 480px) {
  .htv-wrap { padding: 0 14px; }
  .ballot-box { width: 38px; height: 38px; min-width: 38px; font-size: 1.25rem; }
  .htv-elist { grid-template-columns: 1fr; }
  .htv-finder { padding: 16px; }
  .htv-btn { width: 100%; justify-content: center; }
  .htv-btn + .htv-btn, .htv-btn-ghost { margin-left: 0 !important; margin-top: 10px; }
}

/* =====================================================================
   ACTION BAR — Print · Save PDF · Save image · Share, in your face
   ===================================================================== */
.htv-actions { position: sticky; top: 10px; z-index: 35; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: center; background: #fff; border-radius: 18px; box-shadow: 0 10px 30px rgba(21,101,90,.22), 0 2px 8px rgba(29,42,40,.1); padding: 8px; margin: 14px auto 22px; width: fit-content; max-width: 100%; }
.htv-actions .act { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; gap: 8px; border: 0; border-radius: 12px; padding: 12px 20px; font-weight: 800; font-size: .95rem; cursor: pointer; font-family: inherit; transition: transform .1s ease, box-shadow .1s ease; white-space: nowrap; }
.htv-actions .act:hover { transform: translateY(-1px); box-shadow: 0 5px 14px rgba(29,42,40,.18); }
.htv-actions .act svg { width: 19px; height: 19px; fill: currentColor; flex: none; }
.act-print { background: var(--ad-grad-sun); color: var(--ad-ink); }
.act-pdf { background: var(--ad-ink); color: #fff; }
.act-img { background: var(--ad-green-tint); color: var(--ad-green-dark); }
.act-share { background: var(--ad-green); color: #fff; }
.act-busy { font-size: .8rem; font-weight: 700; color: var(--ad-green-dark); padding: 0 6px; }
/* one-line clarifier under the bar: says exactly what the print button covers */
.act-hint { text-align: center; font-size: .84rem; color: #5b6a66; max-width: 660px; margin: -12px auto 20px; line-height: 1.45; }
@media (max-width: 640px) {
  .htv-actions { display: grid; grid-template-columns: 1fr 1fr; }
  .htv-actions .act { min-width: 0; }
  .act-busy { grid-column: 1 / -1; text-align: center; }
}

/* =====================================================================
   WIZARD — "I know my electorate" OR "use my postcode"
   ===================================================================== */
.wz-options { display: grid; gap: 12px; grid-template-columns: 1fr 1fr; margin-bottom: 16px; }
@media (max-width: 640px) { .wz-options { grid-template-columns: 1fr; } }
.wz-opt { display: flex; align-items: center; gap: 14px; text-align: left; background: #f6f9f8; border: 2.5px solid transparent; border-radius: 16px; padding: 18px; cursor: pointer; font-family: inherit; transition: border-color .12s, background .12s, transform .12s; }
.wz-opt:hover { transform: translateY(-1px); background: #fff; box-shadow: 0 6px 18px rgba(21,101,90,.14); }
.wz-opt[aria-selected="true"] { border-color: var(--ad-green); background: #fff; box-shadow: 0 6px 18px rgba(21,101,90,.16); }
.wz-opt .ic { width: 46px; height: 46px; border-radius: 13px; background: var(--ad-grad-brand); color: #fff; display: flex; align-items: center; justify-content: center; flex: none; }
.wz-opt .ic svg { width: 24px; height: 24px; fill: currentColor; }
.wz-opt strong { display: block; font-size: 1.05rem; }
.wz-opt span { font-size: .85rem; color: #5b6a66; }
.wz-panel[hidden] { display: none; }
.wz-filter { width: 100%; padding: 13px 15px; border: 0; border-radius: 12px; background: #fff; box-shadow: inset 0 0 0 1.5px #cfe6e0; font-size: 1.02rem; font-family: inherit; margin-bottom: 12px; }
.wz-filter:focus { outline: none; box-shadow: inset 0 0 0 2px var(--ad-green); }
.wz-none { font-size: .88rem; color: #5b6a66; }

/* =====================================================================
   PULSING COUNTRY (federal election live)
   ===================================================================== */
.htv-map.pulse a .st, .htv-map.pulse a:hover .st { cursor: pointer; }
.htv-map.pulse .st.is-active { animation: htvPulse 1.7s ease-in-out infinite; }
@keyframes htvPulse {
  0%, 100% { fill: var(--ad-gold); filter: drop-shadow(0 2px 6px rgba(245,185,77,.35)); }
  50% { fill: var(--ad-gold-deep); filter: drop-shadow(0 6px 16px rgba(245,185,77,.65)); }
}
.htv-map.pulse:hover .st.is-active { animation-play-state: paused; fill: var(--ad-gold-deep); }
@media (prefers-reduced-motion: reduce) { .htv-map.pulse .st.is-active { animation: none; } }
.htv-cta-row { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 18px; }
.htv-cta-row .htv-btn { flex: 2; min-width: 240px; justify-content: center; font-size: 1.08rem; padding: 16px 22px; }
.htv-cta-row .htv-btn-ghost { flex: 1; min-width: 190px; }

/* dropdown state picker (federal flow only) */
.htv-select { display: block; width: 100%; padding: 13px 15px; border: 0; border-radius: 12px; background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%231f877a'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E") no-repeat right 12px center/22px; box-shadow: inset 0 0 0 1.5px #cfe6e0; font-size: 1.05rem; font-family: inherit; font-weight: 600; color: var(--ad-ink); appearance: none; cursor: pointer; }
.htv-select:focus { outline: none; box-shadow: inset 0 0 0 2px var(--ad-green); }

/* print picker (combined OR printout) */
.print-picker { background: #fff9e0; border-radius: 14px; padding: 14px 16px; margin-top: 14px; }
.print-picker .pp-title { font-weight: 800; margin-bottom: 8px; }
.print-picker label { display: inline-flex; align-items: center; gap: 7px; font-weight: 600; font-size: .92rem; margin: 4px 14px 4px 0; }
.print-picker input { width: 18px; height: 18px; accent-color: var(--ad-green-deep); }
.print-picker .htv-btn { margin-top: 10px; }

/* =====================================================================
   PRINT SHEETS — bespoke A4 artefacts (never the webpage)
   ===================================================================== */
.print-sheet { display: none; color: var(--ad-ink); font-family: "Avenir Next", Avenir, "Segoe UI", system-ui, sans-serif; }
.print-sheet * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
@media print {
  /* When a page ships a bespoke sheet, print ONLY the sheet */
  body:has(.print-sheet) main,
  body:has(.print-sheet) .print-band,
  body:has(.print-sheet) .htv-header,
  body:has(.print-sheet) .htv-footer,
  body:has(.print-sheet) > .print-auth { display: none !important; }

  .print-sheet { display: block !important; }
  /* optional sheets print ONLY when ticked — must out-rank the !important
     block above or every pre-rendered sheet prints (a 150-page surprise) */
  .ps-optional:not(.ps-include) { display: none !important; }
  /* every sheet holds exactly one .ps-page, so a :last-child opt-out would
     match ALL of them and kill every page break in a multi-sheet pack */
  .ps-page { page-break-after: always; break-after: page; }
}

  .ps-mast { display: flex; justify-content: space-between; align-items: center; gap: 8mm; background: var(--ad-grad-brand) !important; border-radius: 3.5mm; padding: 5mm 7mm; box-shadow: inset 0 -1.4mm 0 var(--ad-gold); }
  .ps-mast img { height: 9.5mm; }
  .ps-mast .pm-right { color: #fff; font-weight: 800; font-size: 9pt; letter-spacing: .1em; text-transform: uppercase; text-align: right; line-height: 1.5; }

  .ps-title { margin: 6mm 0 3mm; }
  .ps-title .pt-kicker { font-size: 9pt; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: var(--ad-green-dark); }
  .ps-title h1 { font-size: 26pt; margin: .5mm 0 0; letter-spacing: -.02em; line-height: 1.05; }
  .ps-title .pt-sub { margin: 1.5mm 0 0; font-size: 11pt; color: #3c4a46; }
  .ps-cond { display: inline-block; background: #eef4f2 !important; border-radius: 2mm; padding: 1.5mm 3.5mm; font-size: 9.5pt; font-weight: 700; margin: 2mm 0 0; }

  .ps-hero1 { display: flex; gap: 6mm; align-items: center; background: #fff5cf !important; border-radius: 3.5mm; padding: 4.5mm 6mm; margin: 4mm 0 5mm; }
  .ps-hero1 .n1 { width: 17mm; height: 17mm; flex: none; border: 1.1mm solid var(--ballot-ink); background: #fff !important; display: flex; align-items: center; justify-content: center; font-size: 24pt; font-weight: 900; font-family: "Comic Sans MS", "Segoe Print", cursive; color: #0d47a1; }
  .ps-hero1 .h1t strong { display: block; font-size: 14.5pt; letter-spacing: -.01em; }
  .ps-hero1 .h1t span { font-size: 10pt; color: #4c5a56; }

  .ps-step { border: .4mm solid #d9dfda; border-radius: 3.5mm; padding: 4mm 4.5mm; margin-bottom: 4.5mm; break-inside: avoid; }
  .ps-step:last-of-type { margin-bottom: 0; }
  .ps-step .ps-paper { margin: 0; }
  .ps-step-head { display: flex; align-items: center; gap: 3.5mm; font-weight: 900; font-size: 12.5pt; margin-bottom: 3mm; }
  .ps-chname { flex: 1; min-width: 0; letter-spacing: -.01em; }
  .ps-nstep { display: inline-flex; width: 8.5mm; height: 8.5mm; flex: none; border-radius: 50%; background: var(--ad-green) !important; color: #fff; align-items: center; justify-content: center; font-size: 11pt; font-weight: 900; }
  .ps-paperchip { margin-left: auto; flex: none; font-size: 8pt; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; padding: 1.2mm 3mm; border-radius: 2mm; border: .3mm solid rgba(0,0,0,.3); color: #14171a; }

  table.ps-ballot { width: 100%; border-collapse: collapse; }
  .ps-ballot td { border-bottom: .2mm solid #d5d5d0; padding: 1.8mm 2mm; font-size: 10pt; vertical-align: middle; }
  .ps-ballot tr:last-child td { border-bottom: 0; }
  .ps-ballot .cb { width: 13mm; }
  .ps-ballot .bx { width: 10.5mm; height: 10.5mm; border: .8mm solid var(--ballot-ink); background: #fff !important; display: flex; align-items: center; justify-content: center; font-weight: 900; font-family: "Comic Sans MS", "Segoe Print", cursive; color: #0d47a1; font-size: 14pt; }
  .ps-ballot .nm { font-weight: 800; }
  .ps-ballot .nm small { font-weight: 600; }
  .ps-ballot .pt { display: block; font-size: 8.5pt; color: #555; }
  .ps-ballot tr.ours { background: #ffedb3 !important; }
  .ps-ballot tr.ours td { border-bottom-color: transparent; }
  .ps-ballot .lv { font-size: 8.5pt; font-style: italic; color: #778; white-space: nowrap; }

  .ps-anyorder { background: #fff5cf !important; border: .5mm dashed var(--ad-gold-deep); border-radius: 2.5mm; padding: 3mm 4mm; font-size: 10.5pt; font-weight: 700; margin-bottom: 3mm; }

  .ps-strip { display: flex; gap: 1.2mm; margin: 1mm 0 2.5mm; }
  .ps-cell { flex: 1 1 0; border: .3mm solid #b9c2bd; border-radius: 1.6mm; padding: 1.6mm 1mm; text-align: center; background: #fff !important; min-width: 0; }
  .ps-cell .l { font-weight: 900; font-size: 9.5pt; display: block; }
  .ps-cell .b { width: 7.5mm; height: 7.5mm; border: .6mm solid var(--ballot-ink); margin: 1mm auto 0; display: flex; align-items: center; justify-content: center; font-weight: 900; color: #0d47a1; font-family: "Comic Sans MS", "Segoe Print", cursive; font-size: 11pt; background: #fff !important; }
  .ps-cell .pn { display: block; font-size: 6.4pt; line-height: 1.15; margin-top: .8mm; color: #333; }
  .ps-cell.ours { background: #ffe9a8 !important; border-color: var(--ad-gold-deep); border-width: .6mm; }
  .ps-cell.gap { flex: 0 1 14mm; background: repeating-linear-gradient(45deg, #ececec 0 1.6mm, #fff 1.6mm 3.2mm) !important; color: #667; display: flex; flex-direction: column; justify-content: center; }
  .ps-cell.gap .l { font-size: 7.5pt; }
  .ps-cell.gap .g { font-size: 6.2pt; font-style: italic; }
  .ps-pos { font-size: 10pt; font-weight: 700; color: var(--ad-green-dark); margin: 1mm 0 0; }
  .ps-btl { font-size: 8.5pt; color: #555; margin-top: 1.5mm; }

  .ps-remember { display: flex; flex-wrap: wrap; gap: 3mm 7mm; background: var(--ad-green-tint) !important; border-radius: 3mm; padding: 3.5mm 5mm; font-size: 9.5pt; font-weight: 700; margin-top: 1mm; }
  .ps-remember span::before { content: "✔ "; color: var(--ad-green-deep); }

  .ps-foot { text-align: center; font-size: 7.4pt; color: #333; border-top: .3mm solid #9aa; padding-top: 1.6mm; margin-top: 5mm; }
  /* Each sheet is a self-contained A4 page: content flows from the top, the
     remember strip + footer anchor to the page bottom. (Never position:fixed —
     in a multi-sheet pack every sheet's footer would print on every page,
     overlapping into an unreadable smudge.) */
  @media print {
    .ps-page { min-height: 269mm; display: flex; flex-direction: column; }
    .ps-body { flex: 1; display: flex; flex-direction: column; }
    .ps-body > .ps-remember, .ps-body > .fp-onday { margin-top: auto; }
    .ps-foot { background: #fff !important; }
  }

/* REPLICA PAPERS ON THE SHEET — same design as on screen, no card container.
   Compact so a House + Senate pair fits ONE A4 page. */
.ps-paper { background: var(--paper, #fff); border: 1px solid #b9c2bd; border-radius: 6px; padding: 14px 14px 12px; margin: 12px 0; font-family: "Helvetica Neue", Arial, sans-serif; color: var(--ballot-ink); }
.ps-paper .ballot-band { height: 16px; margin: -14px -14px 10px; border-radius: 6px 6px 0 0; }
.ps-paper .ballot-head .b1 { font-size: .68rem; }
.ps-paper .ballot-head .b2 { font-size: .85rem; }
.ps-paper .ballot-head .b3 { font-size: .74rem; }
.ps-paper .ballot-instr { font-size: .68rem; padding: 6px 10px; margin-bottom: 10px; max-width: 520px; }
.ps-paper-lower .ballot-rows { max-width: 420px; }
.ps-paper .ballot-row { padding: 5px 3px; gap: 8px; }
.ps-paper .ballot-box { width: 30px; height: 30px; min-width: 30px; font-size: 1.05rem; border-width: 2px; }
.ps-paper .plogo-slot { width: 24px; min-width: 24px; height: 24px; }
.ps-paper .plogo-slot img { width: 22px; height: 22px; }
.ps-paper .ballot-row .cand .nm { font-size: .78rem; }
.ps-paper .ballot-row .cand .pt { font-size: .66rem; }
.ps-paper .ballot-leave { font-size: .62rem; }
.ps-paper .hc-anyorder { font-size: .7rem; padding: 6px; margin-bottom: 8px; }
.ps-paper .bs { width: 100%; min-width: 0; }
.ps-paper .bs-col { min-width: 0; }
.ps-paper .bs-col .letter { font-size: .82rem; padding: 4px 2px 1px; }
.ps-paper .bs-col .atl { gap: 3px; padding: 1px 2px 5px; }
.ps-paper .bs-col .atl img { width: 18px; height: 18px; }
.ps-paper .bs-col .pname { font-size: .6rem; min-height: 24px; padding: 0 3px 5px; }
.ps-paper .bs-gap { flex: 0 0 16px; min-width: 16px; max-width: 16px; gap: 4px; padding: 4px 0; }
.ps-paper .bs-gap .dots { font-size: .8rem; }
.ps-paper .bs-gap .rng { font-size: .48rem; }
.ps-paper .bs-line { margin-bottom: 8px; }
.ps-paper .bs-line hr { border-top-width: 3.5px; }
.ps-paper .bs-line span { font-size: .55rem; top: -8px; }
/* Hare-Clark columns on paper: same replica, compacted to fit A4 (no scroll) */
.ps-paper .bs.hc { min-width: 0; }
.ps-paper .hc .bs-col { min-width: 0; max-width: none; }
.ps-paper .hc .pname { min-height: 22px; align-items: center; }
.ps-paper .bs-cand { padding: 3px 5px; gap: 5px; }
.ps-paper .bs-cand .bx { width: 20px; height: 20px; min-width: 20px; font-size: .72rem; border-width: 1.5px; }
.ps-paper .bs-cand .cn { font-size: .58rem; line-height: 1.18; }
.ps-paper .bs-cand .cn b { font-size: .62rem; }
.ps-paper .hc .hc-anyorder { font-size: .58rem; margin: 4px; padding: 3px 4px; }
.ps-pos { font-weight: 700; color: var(--ad-green-dark); font-size: .72rem; margin: 4px 0 0; font-family: "Avenir Next", Avenir, system-ui, sans-serif; }
.ps-btl { font-size: .66rem; color: #444; margin: 3px 0 0; font-family: "Avenir Next", Avenir, system-ui, sans-serif; }
@media print {
  .ps-paper * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .ps-paper { break-inside: avoid; }
  .ps-mast { padding: 4mm 6mm; }
  .ps-title h1 { font-size: 20pt; }
  .ps-title { margin: 4mm 0 2mm; }
  .ps-remember { padding: 2.5mm 4mm; font-size: 8.5pt; margin-top: 2mm; }
}

/* pdf capture rendering (offscreen clone for Save PDF) */
.print-sheet.pdf-render { display: block; width: 794px; padding: 34px 38px; background: #fff; }
.print-sheet.pdf-render .ps-foot { position: static; margin-top: 18px; border-top: 1px solid #9aa; padding-top: 8px; }

/* screen preview hook (test exports force sheets visible) */
.print-sheet.ps-preview { display: block; max-width: 820px; margin: 30px auto; background: #fff; padding: 34px; border-radius: 14px; box-shadow: var(--htv-shadow); }
.print-sheet.ps-preview .ps-optional { display: block; opacity: .55; }
.print-sheet.ps-preview .ps-optional.ps-include { opacity: 1; }

