.surrey-election-hub{background:#0d0e10;color:#fff}.surrey-election-hub .page-hero{padding-top:90px;padding-bottom:70px}.surrey-election-hub .page-hero h1{max-width:950px;font-size:clamp(54px,7vw,104px);line-height:.95}.surrey-election-hub .page-hero>p:last-child{max-width:760px;color:#b7b7ba;font-size:1.15rem}.election-key{background:#c61520;padding:34px 0}.election-key .wrap{display:grid;grid-template-columns:repeat(3,1fr);gap:28px}.election-key .wrap>div{border-right:1px solid rgba(255,255,255,.35);padding-right:24px}.election-key span,.election-key small{display:block}.election-key span{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em}.election-key strong{display:block;margin:8px 0;font:700 1.65rem Fraunces,serif}.election-key small{color:#ffd7d7}.candidate-section{background:#0d0e10;color:#fff}.candidate-section h2,.party-guides h2,.election-faq h2{font-size:clamp(42px,5vw,72px);color:#fff}.candidate-section .section-lede,.party-guides .section-lede{max-width:900px;color:#aaa}.candidate-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:42px}.candidate-grid article{overflow:hidden;border:1px solid #303236;border-radius:18px;background:#15161a}.candidate-photo{display:block;aspect-ratio:4/3;overflow:hidden;background:#222}.candidate-photo img{width:100%;height:100%;object-fit:cover;object-position:center top}.candidate-grid article>div{padding:24px}.candidate-grid span{color:#e73b42;font-size:.7rem;font-weight:800}.candidate-grid h3{margin:16px 0 7px;color:#fff;font-size:1.9rem}.candidate-grid b{color:#e73b42;font-size:.7rem;text-transform:uppercase}.candidate-grid p{min-height:64px;color:#aaa}.candidate-grid article>div>a{color:#fff;font-size:.75rem;font-weight:800;border-bottom:1px solid #e02a33}.candidate-warning{margin-top:30px;padding:22px;border-left:4px solid #e02a33;background:#17181b;color:#aaa}.candidate-warning strong{color:#fff}.surrey-election-hub .paper{background:#f4f1eb;color:#111}.election-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:70px}.election-main h2{color:#111;font-size:clamp(44px,5vw,72px)}.vote-steps{list-style:none;counter-reset:vote;padding:0}.vote-steps li{counter-increment:vote;position:relative;padding:28px 0 28px 72px;border-bottom:1px solid #d5d0c7;color:#111}.vote-steps li:before{content:counter(vote,decimal-leading-zero);position:absolute;left:0;top:25px;color:#c61520;font-weight:800}.vote-steps strong{color:#111;font:700 1.45rem Fraunces,serif}.vote-steps p{color:#666}.official-box{position:sticky;top:120px;padding:30px;border-radius:20px;background:#101113;color:#fff}.official-box h3{color:#fff;font-size:2rem}.official-box a{display:block;padding:13px 0;border-bottom:1px solid #333;color:#ddd}.editorial-note{margin-top:20px;padding:22px;border:1px solid #d6d1c8;border-radius:16px;color:#666}.party-guides{background:#f3f0eb;color:#111}.party-guides>div>h2{color:#111}.election-faq{background:#111;color:#fff}.faq-list{max-width:1000px}.faq-list details{padding:22px 0;border-top:1px solid #333}.faq-list summary{cursor:pointer;color:#fff;font:700 1.65rem Fraunces,serif}.faq-list p{max-width:780px;color:#aaa}.election-disclaimer-band{background:#1b0507;color:#fff}.election-disclaimer-band h2{color:#fff}.election-disclaimer-band p{max-width:1050px;color:#ddd}.election-disclaimer-band a{color:#ff5960}@media(max-width:900px){.election-key .wrap,.election-layout{grid-template-columns:1fr}.election-key .wrap>div{border-right:0;border-bottom:1px solid rgba(255,255,255,.35);padding-bottom:20px}.candidate-grid{grid-template-columns:1fr 1fr}.official-box{position:static}}@media(max-width:560px){.candidate-grid{grid-template-columns:1fr}.surrey-election-hub .page-hero{padding-top:55px}.election-layout{gap:35px}}
/* Campaign directory: locally bundled portraits and full profile links. */
.candidate-directory{padding-top:80px}.candidate-party{margin-top:65px;padding-top:28px;border-top:2px solid #171717}.candidate-party>header{display:flex;align-items:end;justify-content:space-between;gap:25px;margin-bottom:25px}.candidate-party>header h3{font:clamp(36px,4vw,58px)/1 var(--serif);margin:0 0 6px;color:#171717}.candidate-party>header span{color:#666;font-size:13px}.candidate-party>header a{color:#b50912;font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.06em}.candidate-profile-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}.candidate-profile{overflow:hidden;min-width:0;border:1px solid #d3cec5;border-radius:18px;background:#fff;display:block;color:#151515;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.candidate-profile:hover,.candidate-profile:focus-visible{transform:translateY(-4px);border-color:#b50912;box-shadow:0 18px 38px rgba(15,15,15,.12)}.candidate-profile.mayoral{grid-column:span 2;display:grid;grid-template-columns:1fr 1.1fr}.candidate-photo{aspect-ratio:1/1;background:#111;overflow:hidden}.candidate-photo img{width:100%;height:100%;object-fit:cover;object-position:center top}.candidate-profile>div:last-child{padding:22px}.candidate-profile>div>span{color:#b50912;font-size:10px;font-weight:900;letter-spacing:.1em;text-transform:uppercase}.candidate-profile h4{font:29px/1.03 var(--serif);margin:8px 0 10px;color:#171717}.candidate-profile p{margin:0;color:#666;font-size:13px;line-height:1.55}.candidate-profile b{display:block;margin-top:14px;color:#b50912;font-size:11px;text-transform:uppercase;letter-spacing:.08em}@media(max-width:900px){.candidate-profile-grid{grid-template-columns:1fr 1fr}.candidate-profile.mayoral{grid-column:span 2}}@media(max-width:560px){.candidate-party>header{align-items:flex-start;flex-direction:column}.candidate-profile-grid{grid-template-columns:1fr}.candidate-profile.mayoral{grid-column:auto;display:block}.candidate-profile h4{font-size:27px}}
