/* PV Informer · Bluff & Paper · TT5 supplement (Styles > ⋮ > Additional CSS)
   Safe to paste before or after the Styles UI changes. Colors repeat the palette
   so this also works as a fallback if the palette isn't changed yet. */
:root{
  --pvi-paper:#FBF9F4; --pvi-ink:#1C2430; --pvi-muted:#4B5563;
  --pvi-teal:#0F5E6E;  --pvi-link:#0B5566; --pvi-sand:#E9E1CF;
  --pvi-slate:#475569; --pvi-slate-tint:#F1F3F6; --pvi-rule:#D6CFBF;
  --pvi-civic:#2E5E3E; --pvi-schools:#8A5A00; --pvi-asks:#6B4E8A;
  --pvi-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --pvi-serif:var(--wp--preset--font-family--source-serif-4,"Source Serif 4"),Georgia,"Times New Roman",serif;
}

/* Body: system font (no download), 18px/1.6, regular weight (TT5 default is 300) */
body{
  background:var(--pvi-paper); color:var(--pvi-ink);
  font-family:var(--pvi-sans); font-size:1.125rem; font-weight:400;
  line-height:1.6; letter-spacing:0;
}

/* 1.1.1: TT5 fluid type uses clamp(~14px→18px) on body; Design requires flat 18px every viewport.
   Do not change heading clamps below. !important only where needed to beat theme.json fluid presets. */
html body{
  font-size:1.125rem !important; /* 18px flat */
  line-height:1.6;
}
html body :where(p, .wp-block-post-content, .wp-block-post-content p){
  font-size:1.125rem !important;
  line-height:1.6;
}

/* Headings: Source Serif 4 600, fluid sizes (mobile → desktop) */
h1,h2,h3,h4,h5,h6,.wp-block-post-title,.wp-block-site-title{
  font-family:var(--pvi-serif); font-weight:600; letter-spacing:0; color:var(--pvi-ink);
}
h1,.wp-block-post-title{font-size:clamp(1.875rem,1.4rem + 1.9vw,2.75rem);line-height:1.2}   /* 30 → 44px */
h2{font-size:clamp(1.4375rem,1.25rem + 0.8vw,1.75rem);line-height:1.25}                      /* 23 → 28px */
h3{font-size:clamp(1.25rem,1.15rem + 0.4vw,1.375rem);line-height:1.3}                         /* 20 → 22px */
h4{font-size:1.125rem;line-height:1.35}

/* Links: dark teal, always underlined (not color alone) */
a:where(:not(.wp-element-button)){
  color:var(--pvi-link); text-decoration:underline;
  text-decoration-thickness:1px; text-underline-offset:0.15em;
}
a:where(:not(.wp-element-button)):hover{text-decoration-thickness:2px}

/* Focus ring: visible for keyboard users; light ring on the dark footer */
:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{
  outline:3px solid var(--pvi-teal); outline-offset:2px;
}
footer.wp-block-template-part :focus-visible{outline-color:var(--pvi-paper)}

/* Buttons: at least 44px */
.wp-element-button,.wp-block-button__link{min-height:44px;display:inline-flex;align-items:center}

/* Navigation: 44px tap targets + labeled menu button */
.wp-block-navigation .wp-block-navigation-item__content{
  min-height:44px; display:flex; align-items:center; padding-inline:12px;
}
.wp-block-navigation__responsive-container-open,
.wp-block-navigation__responsive-container-close{
  min-height:44px; min-width:44px; padding-inline:14px;
  border:1.5px solid #6B7280; border-radius:22px; font-weight:700;
}
.wp-block-navigation__responsive-container-close{border:0}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content{
  min-height:48px; font-size:1.125rem;
}

/* Sticky 56px header (TT5 header part). !important only where TT5 sets inline padding. */
header.wp-block-template-part{
  position:sticky; top:0; z-index:20;
  background:var(--pvi-paper); border-bottom:1px solid var(--pvi-sand);
}
.admin-bar header.wp-block-template-part{top:32px}
@media (max-width:782px){.admin-bar header.wp-block-template-part{top:46px}}
header.wp-block-template-part .alignwide{
  min-height:56px; align-items:center;
  padding-top:0 !important; padding-bottom:0 !important; /* overrides TT5 inline spacing-30 */
}
header.wp-block-template-part .wp-block-site-logo img{width:160px;height:auto}

/* Page H1 accent border (pages only, not the front page) */
body.page:not(.home) .wp-block-post-title{
  border-left:4px solid var(--pvi-teal); padding-left:14px;
}

/* Election Center hook (page ID 9): slate accent only. Full Election styling comes from the
   separate Election Center spec; it should build on --pvi-accent inside this scope. */
body.page-id-9{--pvi-accent:var(--pvi-slate)}
body.page-id-9 .wp-block-post-title{border-left-color:var(--pvi-accent)}

/* Never allow sideways scroll from wide content */
.wp-block-post-content{overflow-wrap:anywhere}
.wp-block-post-content :where(img,table,pre,iframe){max-width:100%}

/* ===== Election pages (Design election-additional.css, 2026-10-05) ===== */
/* Alias: homepage Group may use pvi-election-banner; Election Center/Guide use pvi-election-notice. */
.pvi-election-banner,
.pvi-election-notice{
  background:#F1F3F6;border-left:4px solid #475569;
  padding:14px 16px;margin-block:0 24px;font-size:1rem;line-height:1.5
}
.pvi-election-banner p,.pvi-election-notice p{margin:0}
.pvi-election-banner p + p,.pvi-election-notice p + p{margin-top:6px;color:#4B5563;font-size:.9375rem}
/* Retire pvi-ballot-card: treat as race-card if leftover markup exists */
.pvi-election-page .pvi-ballot-card{background:#FFFFFF;border:1px solid #D6CFBF;border-radius:8px;padding:20px 16px 16px;margin:0 0 20px}

/* ==========================================================================
   PV Informer · Election pages (Election Center + Ballot Guide)
   Add to the pvi-bluff-paper plugin stylesheet (or Styles > Additional CSS),
   AFTER the base Bluff & Paper rules.
   Scope: the plugin emits body classes page-election-center, page-ballot-guide
   and pvi-election-page. Every rule below sits under .pvi-election-page, so
   nothing leaks to other pages. No page-id selectors.
   Slate #475569 is the only accent. No red, no blue, no teal accents.
   Links stay #0B5566 underlined (site link color, not an accent).
   ========================================================================== */
/* Page title: slate rule (beats the base teal rule body.page:not(.home) …) */
body.page.page-election-center .wp-block-post-title,
body.page.page-ballot-guide .wp-block-post-title{border-left:4px solid #475569;padding-left:14px}

.pvi-election-page{
  --pvi-slate:#475569; --pvi-panel:#F1F3F6; --pvi-card:#FFFFFF;
  --pvi-rule:#D6CFBF; --pvi-line:#6B7280; /* 4.83:1 on white, UI borders */
}
/* Focus ring: slate instead of the site-wide teal */
.pvi-election-page :focus-visible{outline:3px solid var(--pvi-slate);outline-offset:2px}

/* 1. Election notice (synced pattern). Same look as the homepage banner. */
.pvi-election-page .pvi-election-notice{
  background:var(--pvi-panel);border-left:4px solid var(--pvi-slate);
  padding:14px 16px;margin-block:0 24px;font-size:1rem;line-height:1.5}
.pvi-election-page .pvi-election-notice p{margin:0}
.pvi-election-page .pvi-election-notice p + p{margin-top:6px;color:#4B5563;font-size:.9375rem}

/* 2. Official links: List block, each item = one 56px full-width row link */
.pvi-election-page .pvi-official-links{list-style:none;padding:0;margin:0 0 24px;
  border-top:1px solid var(--pvi-rule)}
.pvi-election-page .pvi-official-links li{margin:0;border-bottom:1px solid var(--pvi-rule)}
.pvi-election-page .pvi-official-links a{display:flex;align-items:center;justify-content:space-between;
  gap:12px;min-height:56px;padding:8px 4px;color:var(--pvi-slate);font-weight:700;text-decoration:none}
.pvi-election-page .pvi-official-links a::after{content:"→";font-weight:400;flex:none} /* decorative */
.pvi-election-page .pvi-official-links a:hover{text-decoration:underline}
.pvi-election-page .pvi-official-links small{display:block;font-weight:400;color:#4B5563;font-size:.875rem}

/* 3. Key dates: static copy of the Upcoming row markup (plugin CSS does not
      load here because the strip block is not on the page). */
.pvi-election-page .pvi-key-dates{list-style:none;padding:0;margin:0 0 8px}
.pvi-election-page .pvi-key-dates .pvi-upcoming__row{display:flex;gap:14px;align-items:flex-start;
  padding:12px 0;border-bottom:1px solid var(--pvi-sand,#E9E1CF);min-height:80px}
.pvi-election-page .pvi-upcoming__date{flex:0 0 56px;height:56px;background:var(--pvi-sand,#E9E1CF);
  border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.1}
.pvi-election-page .pvi-upcoming__date-month{font-size:.8125rem;font-weight:700;color:#4B5563;letter-spacing:.04em}
.pvi-election-page .pvi-upcoming__date-day{font:600 1.375rem/1 var(--pvi-serif);color:#1C2430}
.pvi-election-page .pvi-upcoming__title{font-weight:700;font-size:1.0625rem;margin:0}
.pvi-election-page .pvi-upcoming__meta,.pvi-election-page .pvi-upcoming__source{font-size:.9375rem;color:#4B5563;margin:2px 0 0}

/* 4. Jurisdiction jump menu: List block of anchors. Wraps, never scrolls sideways. */
.pvi-election-page .pvi-jurisdiction-nav{display:flex;flex-wrap:wrap;gap:8px;list-style:none;
  padding:0;margin:0 0 24px;overflow:visible}
.pvi-election-page .pvi-jurisdiction-nav a{display:inline-flex;align-items:center;min-height:44px;
  padding:0 14px;border:1.5px solid var(--pvi-line);border-radius:22px;background:#FBF9F4;
  color:#1C2430;font-size:1rem;font-weight:700;text-decoration:none;white-space:nowrap}
.pvi-election-page .pvi-jurisdiction-nav a:hover{border-color:#1C2430}
.pvi-election-page .pvi-jurisdiction-nav .pvi-count{font-weight:400;color:#4B5563;margin-left:6px}

/* 5. Section heading (H2) with race count */
.pvi-election-page .pvi-section-head{border-top:2px solid var(--pvi-slate);padding-top:16px;margin:40px 0 4px}
.pvi-election-page .pvi-section-count{color:#4B5563;font-size:.9375rem;margin:0 0 16px}

/* 6. Race card + measure block share one shell */
.pvi-election-page .pvi-race-card,
.pvi-election-page .pvi-measure-block{background:var(--pvi-card);border:1px solid var(--pvi-rule);
  border-top:4px solid var(--pvi-slate);border-radius:8px;padding:20px 16px 16px;margin:0 0 24px}
.pvi-election-page .pvi-jurisdiction-tag{display:inline-block;background:var(--pvi-panel);color:var(--pvi-slate);
  font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  padding:3px 8px;border-radius:4px;margin:0 0 8px}
.pvi-election-page .pvi-race-card h3,.pvi-election-page .pvi-measure-block h3{margin:0 0 6px;font-size:1.375rem;line-height:1.3}
.pvi-election-page .pvi-race-meta{font-size:.9375rem;color:#4B5563;margin:0 0 16px}
.pvi-election-page .pvi-race-meta strong{color:#1C2430}

/* 7. "What this office does" callout */
.pvi-election-page .pvi-office-explainer{background:var(--pvi-panel);border-left:4px solid var(--pvi-slate);
  border-radius:0 6px 6px 0;padding:12px 14px;margin:0 0 20px}
.pvi-election-page .pvi-office-explainer .pvi-label{font-size:.8125rem;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;color:var(--pvi-slate);margin:0 0 4px}
.pvi-election-page .pvi-office-explainer p{margin:0;font-size:1.0625rem;line-height:1.55}
.pvi-election-page .pvi-office-explainer .pvi-source-line{margin-top:8px}

/* 8. Candidate rows: identical for everyone. No photos, no numbers. */
.pvi-election-page .pvi-list-label{font-size:.9375rem;font-weight:700;color:#4B5563;margin:0;
  padding-bottom:8px;border-bottom:1px solid var(--pvi-rule)}
.pvi-election-page .pvi-candidate-row{min-height:148px;padding:14px 0 8px;margin:0;border-bottom:1px solid var(--pvi-sand,#E9E1CF)}
.pvi-election-page .pvi-candidate-row h4{font-family:var(--pvi-sans);font-size:1.1875rem;font-weight:700;line-height:1.3;margin:0 0 2px}
.pvi-election-page .pvi-candidate-row p{margin:0;font-size:1rem;line-height:1.5}
.pvi-election-page .pvi-candidate-row .pvi-k{color:#4B5563}
/* Statement + Website lines are ALWAYS present and always 44px tall, link or not,
   so a row with no links is exactly as tall as a row with two. */
.pvi-election-page .pvi-candidate-row .pvi-cand-link{display:flex;align-items:center;flex-wrap:wrap;
  column-gap:6px;min-height:44px}
.pvi-election-page .pvi-candidate-row .pvi-cand-link a{display:inline-flex;align-items:center;min-height:44px}

/* 9. Badges: field level. Solid = official fact. Dashed = not checked yet. */
.pvi-election-page [class*="pvi-badge-"]{display:inline-flex;align-items:center;gap:6px;font-size:.9375rem;
  font-weight:600;line-height:1.3;padding:2px 8px;border-radius:4px;vertical-align:baseline}
.pvi-election-page .pvi-badge-unknown-designation{background:var(--pvi-panel);color:#4B5563;border:1px solid var(--pvi-line)}
.pvi-election-page .pvi-badge-not-verified{background:#FFFFFF;color:var(--pvi-slate);border:1.5px dashed var(--pvi-slate)}
.pvi-election-page .pvi-badge-not-provided{background:transparent;color:#4B5563;font-weight:400;font-style:italic;padding:0}

/* 10. Status chips: race level, in the verification footer */
.pvi-election-page .pvi-status-verified,.pvi-election-page .pvi-status-pending{display:inline-flex;align-items:center;
  min-height:28px;padding:0 10px;border-radius:14px;font-size:.875rem;font-weight:700}
.pvi-election-page .pvi-status-verified{background:var(--pvi-slate);color:#FFFFFF}
.pvi-election-page .pvi-status-pending{background:#FFFFFF;color:var(--pvi-slate);border:1.5px dashed var(--pvi-slate)}

/* 11. Verification footer + source line */
.pvi-election-page .pvi-verify-footer{border-top:1px solid var(--pvi-rule);margin-top:4px;padding-top:12px;
  display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.pvi-election-page .pvi-source-line{font-size:.9375rem;color:#4B5563;margin:0;line-height:1.5}

/* 12. Write-in note + uncontested note */
.pvi-election-page .pvi-writein-note{font-size:.9375rem;color:#4B5563;margin:12px 0}
.pvi-election-page .pvi-uncontested-note{background:var(--pvi-panel);border-radius:6px;padding:10px 12px;
  font-size:1rem;margin:0 0 12px}

/* 13. Measure block */
.pvi-election-page .pvi-measure-head{display:flex;gap:14px;align-items:flex-start}
.pvi-election-page .pvi-measure-letter{flex:0 0 56px;height:56px;border:2px solid var(--pvi-slate);border-radius:8px;
  display:flex;align-items:center;justify-content:center;font:600 1.75rem/1 var(--pvi-serif);color:#1C2430}
.pvi-election-page .pvi-vote-means{display:grid;grid-template-columns:1fr;gap:12px;margin:16px 0}
.pvi-election-page .pvi-vote-means > *{background:var(--pvi-panel);border:1px solid var(--pvi-line);
  border-radius:6px;padding:12px 14px;margin:0}
.pvi-election-page .pvi-vote-means h4{font-family:var(--pvi-sans);font-size:1rem;font-weight:700;margin:0 0 4px}
.pvi-election-page .pvi-vote-means p{margin:0;font-size:1.0625rem}
@media (min-width:782px){.pvi-election-page .pvi-vote-means{grid-template-columns:1fr 1fr}
  .pvi-election-page .pvi-race-card,.pvi-election-page .pvi-measure-block{padding:24px 24px 20px}}

/* 14. Core Details block: 44px summary, slate marker */
.pvi-election-page .wp-block-details{border-bottom:1px solid var(--pvi-rule);margin:0}
.pvi-election-page .wp-block-details summary{min-height:48px;display:flex;align-items:center;gap:8px;
  font-weight:700;cursor:pointer;list-style:none}
.pvi-election-page .wp-block-details summary::before{content:"+";width:.9em;flex:none;color:var(--pvi-slate);font-size:1.25rem}
.pvi-election-page .wp-block-details[open] summary::before{content:"−"}
.pvi-election-page .wp-block-details summary::-webkit-details-marker{display:none}

.pvi-election-page .pvi-measure-block .wp-block-details{border-bottom:0}

/* 15. Long words (district names) wrap instead of forcing sideways scroll */
.pvi-election-page .wp-block-post-content{overflow-wrap:anywhere}

/* 17. Ballot Guide helpers */
.pvi-election-page .pvi-ballot-lookup{border:1px solid var(--pvi-line);border-radius:8px;background:#FFFFFF;
  padding:14px 16px 4px;margin:0 0 20px}
.pvi-election-page .pvi-ballot-lookup h2{font-size:1.25rem;margin:0 0 4px;border:0;padding:0}
.pvi-election-page .pvi-ballot-lookup p{margin:0 0 4px;font-size:1rem}
.pvi-election-page .pvi-ballot-lookup .pvi-official-links{margin:0;border-top:0}
.pvi-election-page .pvi-ballot-lookup .pvi-official-links li:last-child{border-bottom:0}
.pvi-election-page .pvi-order-note{font-size:.9375rem;color:#4B5563;margin:0 0 12px}
.pvi-election-page .pvi-jump-label{font-size:.9375rem;font-weight:700;color:#4B5563;margin:0 0 8px}
.pvi-election-page .pvi-no-race{border:1px dashed var(--pvi-line);border-radius:8px;padding:12px 16px;margin:0 0 24px;font-size:1rem}
.pvi-election-page .pvi-no-race p{margin:0}
.pvi-election-page .pvi-back-top a{display:inline-flex;align-items:center;min-height:44px;font-size:.9375rem}
/* Internal link to the Ballot Guide (Buttons block, outline style) */
.pvi-election-page .pvi-guide-link .wp-block-button__link{width:100%;min-height:56px;justify-content:space-between;
  background:#FFFFFF;color:#1C2430;border:2px solid var(--pvi-slate);border-radius:8px;font-weight:700;padding:0 16px;text-decoration:none}
.pvi-election-page .pvi-guide-link .wp-block-button{width:100%}

/* 16. Print: drop chrome, show URLs, keep cards whole */
@media print{
  header.wp-block-template-part,footer.wp-block-template-part,.pvi-election-page .pvi-jurisdiction-nav{display:none}
  .pvi-election-page .pvi-race-card,.pvi-election-page .pvi-measure-block{break-inside:avoid;border-top-width:2px}
  .pvi-election-page a[href^="http"]::after{content:" (" attr(href) ")";font-size:.75rem;color:#4B5563}
  .pvi-election-page .pvi-official-links a::after{content:" (" attr(href) ")"}
}

/* ===== Who's Running (ballot-guide) interactive layer (1.2.2) — Design Desk ballot-guide.css drop-in, verbatim incl. Student reviews ===== */
/* ==========================================================================
   PV Informer · Who's Running (ballot-guide) interactive layer (Design Desk, Oct 5, 2026)
   Drop-in for pvi-bluff-paper 1.2.1: REPLACES the "Ballot Guide progressive
   enhancement (1.2.0)" block in styles-additional.css. Same class names as
   Tech 1.2.0 (pvi-bg-*), plus Design additions marked NEW.
   Scope: body.page-ballot-guide. Enhanced rules require .pvi-bg-enhanced
   (set by JS), so with no JS the page is the plain long guide.
   Slate #475569 is the only accent. No red, no blue.
   ========================================================================== */
.page-ballot-guide{--bg-slate:#475569;--bg-panel:#F1F3F6;--bg-rule:#D6CFBF;--bg-line:#6B7280;--bg-paper:#FBF9F4;--bg-head:56px;--bg-bar:56px;--bg-teal:#0B5566}

/* ---- Picker: race cards (overview) ---- */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-switcher{display:block;margin:0 0 28px}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-switcher-label{margin:0 0 4px;font-family:var(--pvi-serif,Georgia,serif);font-size:1.625rem;line-height:1.2;font-weight:700;color:#1F2937} /* "Your ballot" (Hub, Oct 5) */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-switcher-meta{margin:0;font-size:.9375rem;color:#4B5563}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-toc{display:none} /* the picker replaces the static "Your ballot" list when JS runs; no-JS keeps it */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-switcher-list{display:grid;grid-template-columns:1fr;gap:10px;list-style:none;margin:0;padding:0}
@media (min-width:640px){.page-ballot-guide.pvi-bg-enhanced .pvi-bg-switcher-list{grid-template-columns:1fr 1fr}}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn{
  display:grid;grid-template-columns:32px 1fr 20px;grid-template-areas:"num title arrow" "num meta arrow";
  column-gap:10px;align-items:start;min-height:76px;height:100%;padding:14px 14px 14px 12px;
  background:#FFFFFF;border:1px solid var(--bg-rule);border-left:4px solid var(--bg-slate);border-radius:8px;
  color:#1C2430;text-decoration:none;font:inherit;text-align:left}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn::after{content:"→";grid-area:arrow;align-self:center;color:var(--bg-slate);font-size:1.125rem} /* decorative */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn:hover{border-color:var(--bg-line);border-left-color:var(--bg-slate)}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-num{grid-area:num;display:flex;align-items:center;justify-content:center;width:32px;height:32px;
  border-radius:16px;background:var(--bg-panel);color:var(--bg-slate);font:600 1rem/1 var(--pvi-serif,Georgia,serif)} /* NEW: guide section number from the H2 text */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-title{grid-area:title;font:600 1.0625rem/1.3 var(--pvi-serif,Georgia,serif)} /* NEW */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-meta{grid-area:meta;margin-top:4px;font-size:.9375rem;color:#4B5563} /* NEW: "3 seats · 5 candidates" (7.56:1) */
/* Last-viewed race: wayfinding only. Same fill as the others; only a 2px outline + label, never color-only. */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn[aria-current="true"]{outline:2px solid var(--bg-slate);outline-offset:1px}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn[aria-current="true"] .pvi-bg-race-meta::after{content:" · Last viewed";font-weight:700;color:var(--bg-slate)}

/* ---- Race mode: one race at a time ---- */
@media screen{
  .page-ballot-guide.pvi-bg-enhanced.pvi-bg-race-mode .wp-block-post-content > :not(.is-active):not(.pvi-bg-keep){display:none} /* NEW: hides intro + picker too */
  .page-ballot-guide.pvi-bg-enhanced.pvi-bg-race-mode .pvi-bg-keep > :not(:first-child){display:none} /* trust banner shrinks to its first line */
  .page-ballot-guide.pvi-bg-enhanced.pvi-bg-race-mode .pvi-bg-keep{margin-bottom:12px;font-size:.9375rem}
}
.page-ballot-guide.pvi-bg-enhanced .is-active,.page-ballot-guide.pvi-bg-enhanced .pvi-candidate-row{scroll-margin-top:calc(var(--bg-head) + var(--bg-bar) + 12px)}
.page-ballot-guide.pvi-bg-enhanced .pvi-race-section.is-active > h2{margin-top:0}

/* ---- Sticky bar (Tech: .pvi-bg-sticky; now sticky under the 56px header, not fixed) ---- */
.page-ballot-guide .pvi-bg-sticky{
  position:sticky;top:var(--bg-head);z-index:18;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;
  min-height:var(--bg-bar);margin:0 0 16px;padding:8px 0;background:var(--bg-paper);border-bottom:1px solid var(--bg-rule)}
.admin-bar.page-ballot-guide .pvi-bg-sticky{top:calc(var(--bg-head) + 32px)}
@media (max-width:782px){.admin-bar.page-ballot-guide .pvi-bg-sticky{top:calc(var(--bg-head) + 46px)}}
.page-ballot-guide .pvi-bg-sticky[hidden]{display:none!important}
.page-ballot-guide .pvi-bg-sticky a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;
  font-size:.9375rem;font-weight:700;color:var(--bg-slate);text-decoration:none;border:1.5px solid var(--bg-line);border-radius:22px;background:#FFFFFF;padding:0 12px}
.page-ballot-guide .pvi-bg-back::before{content:"←\00a0";font-weight:400}
/* 1.2.3: status count/title + icon-only Prev/Next rules removed (sticky now holds the jump select; Prev/Next moved to .pvi-bg-endnav) */

/* ---- Candidate cards (equal for everyone) ---- */
.page-ballot-guide.pvi-bg-enhanced .pvi-candidate-row{min-height:0;margin:0 0 10px;padding:4px 14px 6px;background:var(--bg-paper);
  border:1px solid var(--bg-rule);border-radius:8px}
.page-ballot-guide.pvi-bg-enhanced .pvi-candidate-row :is(h3,h4){margin:0;font-size:inherit}
.page-ballot-guide .pvi-bg-cand-toggle{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px;width:100%;
  min-height:48px;padding:8px 0;margin:0;background:transparent;border:0;cursor:pointer;text-align:left;
  font:700 1.1875rem/1.3 var(--pvi-sans,system-ui,sans-serif);color:#1C2430}
.page-ballot-guide .pvi-bg-cand-hint{display:inline-flex;align-items:center;gap:4px;min-height:32px;padding:0 10px;border:1.5px solid var(--bg-line);
  border-radius:16px;font-size:.875rem;font-weight:700;color:var(--bg-slate);background:#FFFFFF}
/* 1.2.3: +/− is now a real aria-hidden span (.pvi-bg-hint-sign); the old ::after glyph rules are removed */
.page-ballot-guide .pvi-bg-cand-desig{margin:-4px 0 8px;font-size:1rem;line-height:1.45} /* NEW: designation visible when collapsed */
.page-ballot-guide .pvi-bg-cand-desig strong{font-weight:400;color:#4B5563}
.page-ballot-guide .pvi-bg-cand-body{border-top:1px solid var(--bg-rule);padding:12px 0 6px}
.page-ballot-guide .pvi-bg-cand-body > ul{list-style:none;margin:0;padding:0}
.page-ballot-guide .pvi-bg-cand-body > ul > li{margin:0 0 12px;font-size:1rem;line-height:1.5}
.page-ballot-guide .pvi-bg-cand-body > ul > li > strong:first-child{display:block;margin-bottom:2px;font-size:.8125rem;font-weight:700;
  letter-spacing:.05em;text-transform:uppercase;color:var(--bg-slate)} /* field label: slate on paper 7.20:1 */
.page-ballot-guide .pvi-bg-cand-body ul ul{list-style:disc;padding-left:20px;margin:4px 0 0}
.page-ballot-guide .pvi-bg-cand-body a{overflow-wrap:anywhere}
.page-ballot-guide .pvi-candidate-row.is-expanded{background:#FFFFFF}
/* Expand all (NEW) */
.page-ballot-guide .pvi-bg-expand-all{display:flex;margin:0 0 10px auto;min-height:44px;padding:0 14px;align-items:center;
  border:1.5px solid var(--bg-line);border-radius:22px;background:#FFFFFF;color:var(--bg-slate);font:700 .9375rem var(--pvi-sans,system-ui,sans-serif);cursor:pointer}
/* Compare is NOT in v1: hide 1.2.0 compare UI if still present */
.page-ballot-guide .pvi-bg-compare,.page-ballot-guide .pvi-bg-compare-pick{display:none!important}

/* Focus: slate ring everywhere on this page; programmatic heading focus stays quiet */
.page-ballot-guide :is(a,button):focus-visible{outline:3px solid var(--bg-slate);outline-offset:2px}
.page-ballot-guide :is(h2,h3)[tabindex="-1"]:focus{outline:none}
@media (prefers-reduced-motion:reduce){.page-ballot-guide *{scroll-behavior:auto!important;transition:none!important}}

/* ---- Print: every race, every candidate open, no chrome ---- */
@media print{
  .page-ballot-guide .pvi-bg-sticky,.page-ballot-guide .pvi-bg-switcher,.page-ballot-guide .pvi-bg-expand-all,
  .page-ballot-guide .pvi-bg-cand-hint{display:none!important}
  .page-ballot-guide.pvi-bg-enhanced.pvi-bg-race-mode .wp-block-post-content > *{display:block!important}
  .page-ballot-guide .pvi-bg-cand-body[hidden]{display:block!important}           /* JS panels */
  .page-ballot-guide details::details-content{content-visibility:visible;display:block} /* core Details, Chromium 131+/Safari 18.4+; JS beforeprint covers the rest */
  .page-ballot-guide .pvi-candidate-row{break-inside:avoid;background:#FFFFFF}
}

/* ===== Student reviews (pvi-reviews) — appended Oct 5, 2026 3:10 PM PT; also saved alone as pvi-reviews.css ===== */
/* ==========================================================================
   Student reviews: core Details block with class "pvi-reviews" (Hub/Trust, live Oct 5, 2026)
   Every pvi-reviews renders as the SAME plain collapsed row, whether or not a
   profile exists and whatever the numbers: one height, one type size, one
   weight, one color. No stars, icons, badges or color coding. Text is not changed.
   Works with and without JS (not gated on .pvi-bg-enhanced). Prints open.
   Specificity (0,3,1) beats the generic ".pvi-election-page .wp-block-details" rules.
   ========================================================================== */
.page-ballot-guide .wp-block-details.pvi-reviews{margin:12px 0 0;padding:0;border:0;border-top:1px solid #D6CFBF;
  border-bottom:1px solid #D6CFBF;background:transparent;color:#374151;font-family:var(--pvi-sans,system-ui,sans-serif);
  font-size:.9375rem;line-height:1.5;font-weight:400;font-variant-emoji:text}
/* Collapsed row: identical for every candidate */
.page-ballot-guide .wp-block-details.pvi-reviews > summary{display:flex;align-items:center;gap:8px;min-height:44px;
  box-sizing:border-box;margin:0;padding:10px 0;cursor:pointer;list-style:none;
  font:600 .9375rem/1.3 var(--pvi-sans,system-ui,sans-serif);color:#374151;background:none;border:0}
.page-ballot-guide .wp-block-details.pvi-reviews > summary::-webkit-details-marker{display:none}
.page-ballot-guide .wp-block-details.pvi-reviews > summary::marker{content:""}
/* Same +/− affordance as every other Details on the page, in muted ink */
.page-ballot-guide .wp-block-details.pvi-reviews > summary::before{content:"+";flex:none;width:.9em;
  font-size:1.25rem;line-height:1;font-weight:400;color:#4B5563}
.page-ballot-guide .wp-block-details.pvi-reviews[open] > summary::before{content:"\2212"}
.page-ballot-guide .wp-block-details.pvi-reviews > summary:hover{text-decoration:underline;text-underline-offset:3px}
.page-ballot-guide .wp-block-details.pvi-reviews > summary:focus-visible{outline:3px solid #475569;outline-offset:2px;border-radius:2px}
/* Open content: plain list, neutral ink, no emphasis on numbers */
.page-ballot-guide .pvi-reviews > ul{list-style:none;margin:0;padding:0 0 12px}
.page-ballot-guide .pvi-reviews li{margin:0 0 10px;padding:0;font-size:.9375rem;line-height:1.5;color:#374151;font-weight:400}
.page-ballot-guide .pvi-reviews li:last-child{margin-bottom:0}
.page-ballot-guide .pvi-reviews strong,.page-ballot-guide .pvi-reviews b,
.page-ballot-guide .pvi-reviews em,.page-ballot-guide .pvi-reviews mark{font-weight:inherit;font-style:normal;color:inherit;background:none}
.page-ballot-guide .pvi-reviews li > strong:first-child{font-weight:600} /* the source label ("RateMyProfessors.com:") is the only weight change, the same in every row */
.page-ballot-guide .pvi-reviews a{color:inherit;text-decoration:underline;text-decoration-color:#9CA3AF;text-underline-offset:2px;overflow-wrap:anywhere}
.page-ballot-guide .pvi-reviews img,.page-ballot-guide .pvi-reviews svg,
.page-ballot-guide .pvi-reviews .wp-block-image{display:none} /* no icons or star graphics, even if pasted in later */
.page-ballot-guide .pvi-reviews [style]{color:inherit!important;background:none!important;font-weight:inherit!important} /* strips any inline color/highlight */
@media print{
  .page-ballot-guide .wp-block-details.pvi-reviews::details-content{content-visibility:visible;display:block}
  .page-ballot-guide .wp-block-details.pvi-reviews > summary::before{content:none}
  .page-ballot-guide .wp-block-details.pvi-reviews{break-inside:avoid;border-color:#9CA3AF}
  .page-ballot-guide .pvi-reviews a::after{content:none}
}

/* ---- Tech additions (outside the Design drop-in) ---- */
/* Live TT5 is content-box (the prototype set border-box globally): without this, height:100% + padding overflows and cards overlap */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn,.page-ballot-guide .pvi-bg-sticky,.page-ballot-guide.pvi-bg-enhanced .pvi-candidate-row{box-sizing:border-box}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn{align-content:center}
/* 1.2.2 Expand all: JS wraps the button in .pvi-bg-expand-all-wrap. TT5 .is-layout-constrained gives the wrap
   max-width:content-size + margin-inline:auto!important (centred column); the wrap spans that column and the
   button (Design's margin-left:auto) sits on its right edge, at 390px and on desktop. */
.page-ballot-guide .pvi-bg-expand-all-wrap{display:flex;justify-content:flex-end;width:100%;box-sizing:border-box;
  max-width:var(--wp--style--global--content-size,680px)}
.page-ballot-guide .pvi-bg-expand-all-wrap > .pvi-bg-expand-all{flex:none;max-width:none}
@media print{.page-ballot-guide .pvi-bg-expand-all-wrap{display:none!important}}

/* ===== 1.2.3 wayfinding (Design Desk overrides, Oct 5 2026) — later in file, same or higher specificity, so these win ===== */
/* Picker: helper line + "See candidates →" cue (whole card stays the link) */
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-switcher-help{margin:4px 0 16px;font-size:1rem;line-height:1.45;color:#4B5563}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn{grid-template-columns:32px 1fr;grid-template-areas:"num title" "num meta" "num cue"}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-btn::after{content:none}
.page-ballot-guide.pvi-bg-enhanced .pvi-bg-race-cue{grid-area:cue;justify-self:end;margin-top:6px;font:600 .9375rem/1.3 var(--pvi-sans,system-ui,sans-serif);color:var(--bg-teal)}

/* Sticky: one 56px row — [Back ≥600px] · label · select(flex:1) */
.page-ballot-guide .pvi-bg-sticky{display:flex;align-items:center;gap:8px;height:var(--bg-bar);min-height:0;padding:6px 0;margin:0 0 16px}
.page-ballot-guide .pvi-bg-sticky .pvi-bg-back{display:none;flex:none;white-space:nowrap}
@media (min-width:600px){.page-ballot-guide .pvi-bg-sticky .pvi-bg-back{display:inline-flex}}
.page-ballot-guide .pvi-bg-jump-label{flex:none;white-space:nowrap;font:400 .875rem/1.2 var(--pvi-sans,system-ui,sans-serif);color:#4B5563}
.page-ballot-guide .pvi-bg-jump{flex:1 1 auto;min-width:0;height:44px;margin:0;padding:0 34px 0 10px;box-sizing:border-box;
  font:400 16px/1.2 var(--pvi-sans,system-ui,sans-serif);color:#1C2430;background:#FBF9F4 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23475569' stroke-width='2'/%3E%3C/svg%3E") no-repeat right 12px center;
  border:1px solid #D6CFBF;border-radius:4px;-webkit-appearance:none;appearance:none;cursor:pointer;text-overflow:ellipsis}
.page-ballot-guide .pvi-bg-jump:focus-visible,.page-ballot-guide .pvi-bg-jump:focus{outline:3px solid #475569;outline-offset:2px}
.page-ballot-guide .pvi-bg-live{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* End-of-race nav: rule, quiet teal text links, ≥44px; mobile stacked Next first; ≥680px Previous left / Next right */
.page-ballot-guide .pvi-bg-endnav{display:flex;flex-direction:column;align-items:stretch;gap:4px;margin:24px 0 8px;padding-top:12px;border-top:1px solid #E9E1CF}
.page-ballot-guide .pvi-bg-endnav a{display:flex;align-items:center;gap:6px;min-height:44px;padding:8px 0;box-sizing:border-box;
  font:400 1rem/1.35 var(--pvi-sans,system-ui,sans-serif);color:var(--bg-teal);text-decoration:none;background:none;overflow-wrap:anywhere}
.page-ballot-guide .pvi-bg-endnav a:hover{text-decoration:underline;text-underline-offset:3px}
.page-ballot-guide .pvi-bg-endnav .pvi-bg-next{font-weight:600}
.page-ballot-guide .pvi-bg-endnav .pvi-bg-all{font-weight:400}
.page-ballot-guide .pvi-bg-endnav span[aria-hidden]{flex:none}
@media (min-width:680px){
  .page-ballot-guide .pvi-bg-endnav{flex-direction:row;justify-content:space-between;gap:16px}
  .page-ballot-guide .pvi-bg-endnav .pvi-bg-prev{order:-1}
  .page-ballot-guide .pvi-bg-endnav .pvi-bg-next{margin-left:auto;text-align:right;justify-content:flex-end}
}
.page-ballot-guide:not(.pvi-bg-race-mode) .pvi-bg-endnav{display:none} /* overview: race units are shown in full, no end nav */

/* Candidate toggle: "See details +" / "Hide details −", fixed width (both labels in one cell), 44px, 15px 600 teal */
.page-ballot-guide .pvi-bg-cand-hint{display:inline-flex;align-items:center;gap:4px;min-height:44px;padding:0 4px 0 10px;border:0;background:none;
  font:600 .9375rem/1.2 var(--pvi-sans,system-ui,sans-serif);color:var(--bg-teal);white-space:nowrap}
.page-ballot-guide .pvi-bg-cand-hint{display:inline-grid;grid-template-columns:auto 1em;column-gap:4px}
.page-ballot-guide .pvi-bg-hint-see,.page-ballot-guide .pvi-bg-hint-hide{grid-area:1/1}
.page-ballot-guide .pvi-bg-hint-hide,.page-ballot-guide [aria-expanded="true"] .pvi-bg-hint-see{visibility:hidden}
.page-ballot-guide [aria-expanded="true"] .pvi-bg-hint-hide{visibility:visible}
.page-ballot-guide .pvi-bg-hint-sign{grid-area:1/2;text-align:center;font-size:1.0625rem;line-height:1}
.page-ballot-guide .pvi-bg-cand-toggle:hover .pvi-bg-cand-hint{text-decoration:underline;text-underline-offset:3px}

@media print{.page-ballot-guide .pvi-bg-endnav{display:none!important}}
