/* Full-bleed header row in normal flow; no overlay or viewport-unit scrollbar overflow. */
.site-header:has(.announcement){row-gap:12px;padding-block-start:0}
.announcement{grid-column:1 / -1;min-width:0;width:calc(100% + 2 * var(--gutter));max-width:none;display:block;padding:0 max(16px,env(safe-area-inset-right,0px)) 0 max(16px,env(safe-area-inset-left,0px));margin:0 calc(-1 * var(--gutter));box-sizing:border-box;border-block:1px solid var(--rule);border-inline:0;border-radius:0;background:var(--paper);color:var(--ink);box-shadow:0 3px 12px rgb(0 0 0 / .06);font-size:13px;line-height:1.5}
.announcement-message{position:relative;display:block;min-width:0;overflow:hidden;padding-block:10px;color:inherit;overflow-wrap:anywhere;text-decoration:none}
a.announcement-message:hover{color:var(--accent)}
a.announcement-message .announcement-text{text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px}
.announcement-text{white-space:pre-line}
.announcement-visual{display:none;overflow:hidden;white-space:nowrap}
.announcement-track,.announcement-group{display:flex;width:max-content;flex:none}
.announcement-copy{flex:none;padding-inline-end:var(--announcement-gap,64px)}
.announcement[data-moving] .announcement-visual{display:block}
.announcement[data-moving] .announcement-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.announcement[data-moving] .announcement-track{animation:announcement-flow var(--announcement-duration,30s) linear infinite}
.announcement:hover .announcement-track,.announcement:focus-within .announcement-track{animation-play-state:paused}
/* Keyboard focus reveals the entire canonical message rather than a clipped frame. */
.announcement:focus-within .announcement-visual{display:none}
.announcement:focus-within .announcement-text{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip-path:none;white-space:pre-line}
/* Existing CMS renderer emits this hidden legacy node; never reserve visible control space. */
.announcement-toggle{display:none}
.announcement-message:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
@keyframes announcement-flow{to{transform:translateX(calc(-1 * var(--announcement-distance,0px)))}}
/* CSS is also a fail-safe if the motion event or JS does not run. */
:root[data-animations="off"] .announcement .announcement-visual{display:none}
:root[data-animations="off"] .announcement .announcement-text{position:static;width:auto;height:auto;margin:0;overflow:visible;clip-path:none;white-space:pre-line}
@media(prefers-reduced-motion:reduce){
 .announcement .announcement-visual{display:none!important}
 .announcement .announcement-text{position:static!important;width:auto!important;height:auto!important;margin:0!important;overflow:visible!important;clip-path:none!important;white-space:pre-line!important}
 .announcement .announcement-track{animation:none!important}
}
