/* Calendar and election detail desk. */
body:has(.catalyst-page){background:#f2f5fc;color:#17223e}body:has(.catalyst-page) .site-header{background:#fff;border-bottom-color:#e0e6f1}body:has(.catalyst-page) .site-footer{background:#e9eef9}body:has(.catalyst-page) .nav-link[href="/election-calendar"]{color:#2855e8}
.catalyst-page{--ink:#17223e;--muted:#61708b;--line:#dfe6f2;--blue:#2e5cff;color:var(--ink);font-family:Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;padding-top:36px;padding-bottom:45px}
.catalyst-heading{display:flex;align-items:center;justify-content:space-between;gap:25px;margin-bottom:30px}.catalyst-heading h1{font:700 clamp(30px,3.3vw,44px)/1.15 Inter,sans-serif;letter-spacing:-.055em;margin:0;color:#15223f}.catalyst-heading h1 span{color:#2e5cff}.catalyst-filters{display:flex;gap:10px}.catalyst-filters select{height:43px;width:170px;padding:9px 28px 9px 12px;background:#fff;border:1px solid #cbd6ec;border-radius:9px;color:#263756;font:500 14px Inter,sans-serif;box-shadow:0 2px 4px #20376804}
.election-calendar{border:1px solid #dbe3f2;border-radius:15px;background:#fff;overflow:hidden;box-shadow:0 10px 35px #29497608}.calendar-toolbar{display:flex;justify-content:space-between;align-items:center;padding:22px 24px;background:#2e5cff;color:#fff}.calendar-toolbar h2{font-size:27px;font-weight:700;letter-spacing:-.04em;margin:0}.calendar-nav{display:flex;align-items:center;gap:7px}.calendar-nav a{display:flex;align-items:center;justify-content:center;border:1px solid #ffffff4d;border-radius:7px;color:#fff;height:35px;width:36px;background:#ffffff15;font-size:28px;line-height:1}.calendar-nav a:first-child{width:auto;padding:0 16px;margin-right:8px;font-size:14px;font-weight:500}.calendar-nav a:hover{background:#ffffff30}
.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.calendar-weekday{text-align:right;padding:13px 14px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.055em;color:#62718c;border-bottom:1px solid var(--line);background:#fafbfe}.calendar-weekday abbr{text-decoration:none}.calendar-day{min-height:108px;border-right:1px solid #e4eaf5;border-bottom:1px solid #e4eaf5;padding:7px 5px 9px;min-width:0}.calendar-day:nth-child(7n){border-right:0}.calendar-day>time{display:flex;align-items:center;justify-content:center;margin:0 3px 7px auto;width:28px;height:28px;font-size:14px;font-weight:500;font-variant-numeric:tabular-nums}.calendar-day.is-outside{background:#f7f9fd}.calendar-day.is-outside>time{color:#697892}.calendar-day.is-today{background:#f0f4ff}.calendar-day.is-today>time{background:#2e5cff;color:#fff;border-radius:50%;font-weight:700;box-shadow:0 3px 8px #2e5cff30}.calendar-day-events{display:grid;gap:6px}
.calendar-event{display:grid;grid-template-columns:24px minmax(0,1fr);align-items:center;gap:5px 7px;border-left:3px solid #10a777;border-radius:6px;background:#d9f6e9;color:#095f43;padding:8px 6px;font-size:13px;font-weight:650;line-height:1.3;text-decoration:none;min-width:0;transition:transform .15s,box-shadow .15s}.calendar-event img{width:24px;height:18px;object-fit:cover;border-radius:2px}.calendar-country{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-event small{grid-column:1/-1;font-size:11px;font-weight:500}.calendar-event.tone-bg{background:#eee3ff;border-color:#9556dd;color:#61309a}.calendar-event.tone-us{background:#dfebff;border-color:#3478ed;color:#254e9c}.calendar-event.tone-nz{background:#fff0d5;border-color:#e6a024;color:#85500b}.calendar-event.tone-gm{background:#ffe4e2;border-color:#e65e63;color:#9e303b}.calendar-event:hover{transform:translateY(-1px);box-shadow:0 3px 8px #20376815}.calendar-code{display:none}.calendar-empty{padding:18px 24px;color:var(--muted);font-size:14px;margin:0}.calendar-unplaced{padding-top:24px}.calendar-unplaced h2{font-size:20px}.calendar-unplaced a{display:block;margin:10px 0;font-size:15px}.catalyst-empty{padding:30px 0}.calendar-page-footer{display:flex;justify-content:flex-end;margin-top:18px}.calendar-page-footer a{font-size:12px;color:#65758e;text-decoration:underline;text-underline-offset:3px}
.election-detail-list[hidden]{display:none}.election-fallback{margin-top:15px;border:1px solid var(--line);padding:20px;border-radius:10px;background:#fff}.election-fallback>summary{cursor:pointer}.election-fallback .election-detail-content{padding-top:18px}.election-modal-open{overflow:hidden}.election-dialog{font-family:Inter,sans-serif;color:#17223e;background:#fff;border:0;border-radius:20px;box-shadow:0 25px 100px #14234a40;width:min(920px,calc(100vw - 40px));max-height:calc(100dvh - 40px);padding:32px;margin:auto;overflow-y:auto}.election-dialog::backdrop{background:#17284a70;backdrop-filter:blur(5px)}.election-close{position:absolute;z-index:2;top:15px;right:15px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:1px solid #e0e7f3;border-radius:50%;background:#f3f6fc;color:#586985;font-size:27px;cursor:pointer}.election-close:hover{background:#e6edff;color:#2e5cff}
.election-hero{display:grid;grid-template-columns:220px minmax(0,1fr);gap:30px}.election-summary{padding:12px 22px 0 0}.election-detail-country{display:flex;align-items:center;gap:10px;font-size:15px;font-weight:600}.election-detail-country img{object-fit:cover;border-radius:3px;box-shadow:0 1px 3px #14234a12}.election-detail-country>span{font-size:13px;color:#6c7b92;font-weight:400}.election-detail-content h2{font:700 34px/1.13 Inter,sans-serif;letter-spacing:-.045em;margin:18px 0 22px;color:#15223f}.election-detail-date{font-size:25px;font-weight:650;letter-spacing:-.025em;line-height:1.4;margin:0 0 12px}.election-detail-kind{display:flex;flex-wrap:wrap;gap:8px;font-size:12px;color:#506380;line-height:1.5;margin:0}.election-detail-kind>span{background:#f0f3f9;padding:5px 9px;border-radius:5px}.election-detail-kind>.election-certainty{color:#087443;background:#e3f7ec}.election-detail-note{font-size:15px;line-height:1.75;margin:18px 0 0;color:#4c5d78}.election-status,.election-review{font-size:13px;color:#985725}.election-leader{margin:0}.election-leader>img{display:block;width:220px;height:254px;object-fit:cover;object-position:center 22%;border-radius:12px;background:#e7edf6}.election-leader figcaption{margin-top:11px;line-height:1.5}.election-leader figcaption span{display:block;font-size:12px;color:#65748b}.election-leader figcaption strong{display:block;font-size:15px;font-weight:650;margin-top:3px}.election-checked{font-size:11px;line-height:1.6;color:#61718b;margin:20px 0 0}
.election-odds{border-top:1px solid #e3e9f4;margin-top:25px;padding-top:22px}.election-odds[hidden]{display:none}.odds-brand-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}.odds-brand-header img{width:170px;height:auto;max-height:36px;object-fit:contain;object-position:left center}.odds-brand-header .odds-heading{font-size:13px;color:#687992;font-weight:500;margin:0}.odds-groups{display:grid;gap:16px}.odds-groups.has-multiple{grid-template-columns:1fr 1fr}.odds-group{border:1px solid #dce5f5;background:#f8faff;border-radius:12px;padding:20px}.odds-group-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.odds-group-head h4{font-size:17px;font-weight:650;letter-spacing:-.02em;margin:0}.odds-group-head a{font-size:12px;color:#2e5cff;white-space:nowrap;font-weight:500}.odds-scope{font-size:12px;color:#62728b;line-height:1.55;margin:8px 0 15px}.odds-volume{display:inline-flex;align-items:baseline;gap:9px;padding:9px 12px;border:1px solid #d6e4ff;border-radius:7px;background:#eaf1ff;margin-bottom:7px;color:#2251d1}.odds-volume strong{font-size:25px;line-height:1.1;letter-spacing:-.05em;font-weight:750;font-variant-numeric:tabular-nums}.odds-volume span{font-size:11px;font-weight:600}.odds-row{--bar:#2e5cff;display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:7px 12px;margin:15px 0;font-size:15px;line-height:1.4}.odds-row.odds-coral{--bar:#bd4d2d}.odds-row.odds-violet{--bar:#9663db}.odds-row strong{font-size:21px;color:var(--bar);font-variant-numeric:tabular-nums;font-weight:700;letter-spacing:-.04em}.odds-track{grid-column:1/-1;background:#e5ebf6;height:7px;border-radius:4px;overflow:hidden}.odds-track>span{display:block;background:var(--bar);height:100%;border-radius:4px}.odds-updated{font-size:10px;color:#576885;line-height:1.6;margin:16px 0 0}.odds-note{font-size:14px;color:#61718b}.odds-stale{font-size:12px;line-height:1.6;color:#965b2e}.odds-more{font-size:12px;color:#4164ad;margin-top:15px}.odds-more summary{cursor:pointer}.odds-retry{border:1px solid #c5d4f0;background:#edf3ff;color:#2855d4;padding:8px 14px;border-radius:6px;cursor:pointer;font-size:13px}
.calendar-references{max-width:900px}.calendar-references h1{font-size:38px;margin:25px 0}.calendar-references h2{font-size:22px;margin:0 0 15px}.calendar-references section{margin:25px 0;padding:25px;background:#fff;border:1px solid var(--line);border-radius:10px}.calendar-references p,.calendar-references li{font-size:15px;line-height:1.8;margin:10px 0}.calendar-references ul{list-style:disc;padding-left:20px}.calendar-references a{color:#2a55d7;text-decoration:underline;overflow-wrap:anywhere}
.catalyst-page a:focus-visible,.catalyst-page button:focus-visible,.catalyst-page select:focus-visible,.catalyst-page summary:focus-visible{outline:3px solid #f2a629;outline-offset:3px}.catalyst-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(min-width:1400px){.calendar-day{min-height:120px}}@media(max-width:850px){.catalyst-heading{align-items:start;flex-direction:column;gap:20px}.calendar-event{padding:6px 3px;gap:4px;border-left-width:2px;font-size:11px;grid-template-columns:20px minmax(0,1fr)}.calendar-event img{width:20px;height:15px}.calendar-event small{font-size:10px}.calendar-day{min-height:100px}.calendar-weekday{padding-right:9px}.election-dialog{padding:28px}.election-hero{grid-template-columns:185px minmax(0,1fr);gap:24px}.election-leader>img{width:185px;height:230px}.election-detail-content h2{font-size:30px}.odds-groups.has-multiple{grid-template-columns:1fr}.election-summary{padding-right:10px}}
@media(max-width:560px){.catalyst-page{padding-top:25px;padding-bottom:30px}.catalyst-heading{gap:20px;margin-bottom:23px}.catalyst-heading h1{font-size:32px}.catalyst-filters{width:100%}.catalyst-filters label{flex:1;min-width:0}.catalyst-filters select{width:100%;font-size:13px}.calendar-toolbar{padding:16px 12px}.calendar-toolbar h2{font-size:21px}.calendar-nav{gap:4px}.calendar-nav a{width:29px;height:30px}.calendar-nav a:first-child{padding:0 9px;margin-right:3px;font-size:12px}.calendar-weekday{text-align:center;padding:12px 0;font-size:10px;letter-spacing:0}.calendar-day{min-height:91px;padding:5px 2px 7px}.calendar-day>time{font-size:12px;margin:0 auto 6px;width:25px;height:25px}.calendar-event{grid-template-columns:1fr;justify-items:center;gap:4px;border-left-width:2px;padding:6px 1px;font-size:10px;min-height:48px}.calendar-event img{width:23px;height:17px}.calendar-country,.calendar-event small{display:none}.calendar-code{display:inline}.calendar-day-events{gap:5px}.calendar-empty{font-size:13px;padding:15px}.election-dialog{padding:24px 20px;border-radius:16px;width:calc(100vw - 24px);max-height:calc(100dvh - 24px)}.election-close{width:32px;height:32px;top:12px;right:12px}.election-hero{grid-template-columns:minmax(0,1fr) 125px;gap:0 18px}.election-summary{display:contents}.election-detail-country{grid-column:1/-1;font-size:14px;padding-right:25px}.election-detail-country>span{display:none}.election-detail-content h2{grid-column:1/-1;font-size:29px;line-height:1.13;margin:19px 0 23px}.election-leader{grid-column:2;grid-row:3/7}.election-leader>img{width:125px;height:162px;border-radius:9px}.election-leader figcaption span{font-size:11px}.election-leader figcaption strong{font-size:13px}.election-detail-date{grid-column:1;font-size:22px;line-height:1.25;margin-bottom:13px}.election-detail-kind{grid-column:1;gap:6px;font-size:11px}.election-detail-kind>span{padding:4px 7px}.election-detail-note{grid-column:1/-1;font-size:14px;margin:18px 0 0}.election-status,.election-review{grid-column:1/-1}.election-odds{margin-top:23px;padding-top:21px}.odds-brand-header img{width:152px}.odds-brand-header .odds-heading{font-size:12px}.odds-group{padding:17px 15px}.odds-group-head h4{font-size:17px}.odds-group-head a{font-size:11px}.odds-scope{font-size:12px}.odds-volume strong{font-size:26px}.odds-volume span{font-size:11px}.odds-row{font-size:14px}.odds-row strong{font-size:22px}.odds-updated{font-size:11px}.election-checked{font-size:11px}.calendar-references section{padding:20px}}
@media(prefers-reduced-motion:reduce){.calendar-event{transition:none}}
/* Permanent election pages and a crawlable calendar directory. */
.election-hero.without-portrait{grid-template-columns:1fr}.election-page-link{display:inline-block;margin-top:12px;color:#244ecb;font-size:16px;font-weight:600}.election-directory{margin-top:36px}.election-directory-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}.election-directory-heading h2{font-size:24px;letter-spacing:-.035em;margin:0}.election-directory-heading>span{font-size:13px;color:#61708b}.election-directory-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.election-directory-row{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid #dfe6f2;border-radius:10px;padding:18px;color:#17223e;text-decoration:none;min-width:0}.election-directory-row:hover{border-color:#7191ef;box-shadow:0 3px 12px #29497612}.election-directory-row img{flex-shrink:0;object-fit:contain}.election-directory-row>span:nth-last-child(3){flex:1;min-width:0}.election-directory-row strong{display:block;font-size:15px;line-height:1.45}.election-directory-row small{display:block;color:#66728a;font-size:12px;margin-top:5px}.election-directory-row time{max-width:130px;flex-shrink:0;text-align:right;font-size:13px;font-weight:600;color:#3256ab}.election-directory-row>span:last-child{color:#496dc9}.election-archive{margin-top:22px}.election-archive summary{cursor:pointer;font-weight:600}.election-archive li{margin:12px 0}.election-page{max-width:1040px}.election-breadcrumb{display:flex;gap:10px;flex-wrap:wrap;font-size:14px;margin-bottom:24px;color:#61708b}.election-breadcrumb a{color:#3256ab}.election-page-card{background:#fff;border:1px solid #dfe6f2;border-radius:18px;padding:34px}.election-page h1{font:750 clamp(28px,3.3vw,42px)/1.15 Inter,sans-serif;letter-spacing:-.04em;margin:20px 0;color:#17223e}.election-page .election-checked{margin:22px 0}.election-sources,.election-related{border-top:1px solid #e2e8f2;padding-top:25px;margin-top:25px}.election-page h2{font-size:22px}.election-sources ul,.election-related ul{padding-left:20px}.election-sources li,.election-related li{margin:14px 0;font-size:16px;line-height:1.6}.election-sources li span{display:block;font-size:13px;color:#61708b}.election-page-footer{border-top:1px solid #e2e8f2;margin-top:28px;padding-top:20px;display:flex;justify-content:space-between;gap:16px;font-size:14px}.election-page a:focus-visible,.election-directory a:focus-visible{outline:3px solid #2e5cff;outline-offset:4px}.election-page .odds-brand-header{margin-top:25px}
@media(max-width:760px){.election-directory-grid{grid-template-columns:1fr}.election-directory-heading{align-items:flex-start;flex-direction:column;gap:6px}.election-directory-row{padding:15px;gap:10px}.election-directory-row strong{font-size:14px}.election-directory-row time{max-width:95px;font-size:12px}.election-page-card{padding:22px 18px}.election-page-footer{flex-direction:column}.election-page h1{font-size:30px}}

@media(max-width:760px){.election-page h1{grid-column:1/-1}.election-page-link{grid-column:1/-1}}
