/* Durations are one-way. Content, layout and controls keep separate rhythms. */
:root{--ui-enter-duration:480ms;--ui-page-enter-duration:640ms;--ui-page-exit-duration:320ms;--ui-page-ease:linear;--ui-page-enter-ease:cubic-bezier(.45,0,.55,1);--ui-enter-ease:cubic-bezier(.2,0,.2,1);--ui-feedback-duration:320ms;--ui-control-duration:160ms;--ui-halo-duration:400ms;--ui-hover-duration:320ms;--ui-hover-ease:linear;--ui-state-enter-duration:480ms;--ui-state-exit-duration:480ms;--ui-replace-exit-duration:320ms;--ui-replace-enter-duration:320ms;--ui-replace-ease:cubic-bezier(.45,0,.55,1);--ui-expand-ease:cubic-bezier(.45,0,.55,1);--ui-motion-ease:var(--ui-enter-ease);--ease:var(--ui-motion-ease)}
.content-page{--ui-enter-ease:cubic-bezier(.45,0,.55,1)}
:is(.content-page,.site-head)>[data-ui-enter],.content-page [data-ui-enter]{--ui-enter-duration:var(--ui-page-enter-duration);--ui-enter-ease:var(--ui-page-enter-ease)}
.homepage{--ui-enter-duration:1200ms}
.ui-expand-panel{display:grid;grid-template-rows:0fr;opacity:0;visibility:hidden;transition:grid-template-rows var(--ui-state-exit-duration) var(--ui-expand-ease),opacity var(--ui-state-exit-duration) linear,visibility 0s linear var(--ui-state-exit-duration)}
.ui-expand-panel.is-open{grid-template-rows:1fr;opacity:1;visibility:visible;transition:grid-template-rows var(--ui-state-enter-duration) var(--ui-expand-ease),opacity var(--ui-state-enter-duration) linear,visibility 0s}
.ui-expand-panel-inner{min-height:0;overflow:hidden;transition:overflow 0s allow-discrete}
/* Clip the reveal, then let menus and focus rings extend beyond the open body. */
.ui-expand-panel.is-open>.ui-expand-panel-inner{overflow:visible;transition-delay:var(--ui-state-enter-duration)}
.ui-enter-enabled [data-ui-enter]{opacity:0;transition:opacity var(--ui-enter-duration) var(--ui-enter-ease);transition-delay:var(--ui-enter-delay,0ms)}
.ui-enter-enabled [data-ui-enter].ui-entered{opacity:1}
/* Keyboard controls stay visible; automatic heading focus must not skip a layer. */
.ui-enter-enabled [data-ui-enter]:has(:is(a[href],button,input,select,textarea,summary,[contenteditable]):focus-visible){opacity:1;transition-delay:0ms}
@media(prefers-reduced-motion:reduce){:root{--ui-enter-duration:120ms;--ui-page-enter-duration:0ms;--ui-page-exit-duration:0ms;--ui-control-duration:120ms;--ui-halo-duration:0ms;--ui-hover-duration:0ms;--ui-state-enter-duration:120ms;--ui-state-exit-duration:120ms;--ui-replace-exit-duration:0ms;--ui-replace-enter-duration:0ms}.homepage{--ui-enter-duration:120ms}.ui-enter-enabled [data-ui-enter]{transition-delay:0ms}.ui-expand-panel{transition:grid-template-rows 0s,opacity 120ms,visibility 0s linear 120ms}.ui-expand-panel.is-open{transition:grid-template-rows 0s,opacity 120ms,visibility 0s}}

@keyframes ui-pop-enter{from{opacity:0;}to{opacity:1;}}
@keyframes ui-pop-exit{from{opacity:1;}to{opacity:0;}}

/* Optical emphasis leaves glyph advances and line breaks unchanged. */
:root{--ui-hover-stroke:.018em}
html[data-reading-theme="dark"]{--ui-hover-stroke:.014em}
@property --ui-text-emphasis{syntax:"<length>";inherits:false;initial-value:0px}

/* Capture only outgoing content/actions; background and chrome remain steady. */
@view-transition{navigation:auto;types:navigation}
.site-head>.primary-nav{view-transition-name:primary-navigation}
.site-head>.theme-toggle{view-transition-name:reading-mode}
html[data-ui-navigation=active] .content-page{view-transition-name:page-content}
html[data-ui-navigation=active] .site-head>:is(.site-tools,.daily-header-actions){view-transition-name:page-actions}
html:active-view-transition-type(navigation)::view-transition-group(root){animation:none}
/* Keep the outgoing geometry until it is invisible, including its scroll offset. */
::view-transition-group(page-content),::view-transition-group(page-actions),::view-transition-group(primary-navigation),::view-transition-group(reading-mode){animation-duration:var(--ui-page-exit-duration);animation-timing-function:step-end}
html:active-view-transition-type(navigation)::view-transition-old(root){animation:none;visibility:hidden}
html:active-view-transition-type(navigation)::view-transition-new(root){animation:none;opacity:1}
/* The destination owns the group size; outgoing captures keep their own size. */
::view-transition-old(page-content),::view-transition-old(page-actions){animation:ui-pop-exit var(--ui-page-exit-duration) var(--ui-page-ease) both;mix-blend-mode:normal}
::view-transition-old(page-content),::view-transition-old(page-actions),::view-transition-old(primary-navigation),::view-transition-old(reading-mode){width:auto;height:auto;max-width:none;object-fit:none;object-position:left top}
::view-transition-old(page-actions){left:auto;right:0;object-position:right top}
::view-transition-new(page-content),::view-transition-new(page-actions){animation:none;opacity:0}
html[data-ui-navigation=active]:not([data-ui-chrome-ready])::view-transition-group(*),html[data-ui-navigation=active]:not([data-ui-chrome-ready])::view-transition-old(page-content),html[data-ui-navigation=active]:not([data-ui-chrome-ready])::view-transition-old(page-actions),html[data-ui-navigation=active]:not([data-ui-chrome-ready])::view-transition-old(.primary-page-marker):only-child,html[data-ui-navigation=active]:not([data-ui-chrome-ready])::view-transition-new(.primary-page-marker):only-child{animation-play-state:paused}
::view-transition-old(primary-navigation),::view-transition-new(primary-navigation),::view-transition-old(reading-mode),::view-transition-new(reading-mode){animation:none;mix-blend-mode:normal}
::view-transition-old(primary-navigation),::view-transition-old(reading-mode){visibility:hidden}
html:active-view-transition-type(navigation)::view-transition-old(primary-navigation),html:active-view-transition-type(navigation)::view-transition-old(reading-mode){visibility:visible}
html:active-view-transition-type(navigation)::view-transition-new(primary-navigation),html:active-view-transition-type(navigation)::view-transition-new(reading-mode){visibility:hidden}
/* Page-specific marker names keep both positions fixed; only the mark crossfades.
   A matching name (same-page or theme refresh) stays fully visible. */
::view-transition-group(.primary-page-marker){animation:none}
::view-transition-old(.primary-page-marker){animation:none;opacity:0;mix-blend-mode:normal}
::view-transition-new(.primary-page-marker){animation:none;opacity:1;mix-blend-mode:normal}
html:active-view-transition-type(navigation)::view-transition-old(.primary-page-marker):only-child{animation:ui-pop-exit var(--ui-page-exit-duration) var(--ui-page-ease) both}
html:active-view-transition-type(navigation)::view-transition-new(.primary-page-marker):only-child{animation:ui-pop-enter var(--ui-page-exit-duration) var(--ui-page-ease) both}
/* On first entry from Home there is no outgoing chrome to keep visible. */
html:active-view-transition-type(navigation)::view-transition-new(primary-navigation):only-child,html:active-view-transition-type(navigation)::view-transition-new(reading-mode):only-child{visibility:visible}
::view-transition,::view-transition-group(*),::view-transition-image-pair(*),::view-transition-old(*),::view-transition-new(*){pointer-events:none}
@media(prefers-reduced-motion:reduce){::view-transition-old(page-content),::view-transition-old(page-actions),::view-transition-old(.primary-page-marker),::view-transition-new(.primary-page-marker){animation:none}}

/* Native details keep summary/keyboard semantics, with one arrow and one body motion. */
:is(.news-event-line,.weekly-event-evidence)>summary{display:flex;align-items:center;gap:10px;list-style:none}
:is(.news-event-line,.weekly-event-evidence)>summary::-webkit-details-marker{display:none}
:is(.news-event-line,.weekly-event-evidence)>summary::before{content:"";flex:0 0 6px;width:6px;height:6px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:translateY(-1px) rotate(45deg);transition:transform var(--ui-state-enter-duration) var(--ui-expand-ease)}
:is(.news-event-line,.weekly-event-evidence)[open]>summary::before{transform:translateY(1px) rotate(225deg)}
@media(prefers-reduced-motion:reduce){:is(.news-event-line,.weekly-event-evidence)>summary::before{transition:none}}

/* Results appear after the real operation; feedback never postpones the operation. */
:is(.ui-feedback,.reader-action-feedback):not(:empty){animation:ui-pop-enter var(--ui-feedback-duration) linear}
@media(prefers-reduced-motion:reduce){:is(.ui-feedback,.reader-action-feedback){animation:none}}

/* Regional geometry changes only at the invisible handoff between equal fade phases. */
html[data-ui-transition=local]{view-transition-name:none}
html[data-ui-transition=local]::view-transition-group(.ui-local-surface){animation-duration:calc(var(--ui-replace-exit-duration) + var(--ui-replace-enter-duration));animation-timing-function:steps(2,jump-none)}
html[data-ui-transition=local]::view-transition-old(.ui-local-surface),html[data-ui-transition=local]::view-transition-new(.ui-local-surface){width:100%;height:100%;object-fit:none;object-position:top left;mix-blend-mode:normal}
html[data-ui-transition=local]::view-transition-old(.ui-local-surface){animation:ui-pop-exit var(--ui-replace-exit-duration) var(--ui-replace-ease) both}
html[data-ui-transition=local]::view-transition-new(.ui-local-surface){animation:ui-pop-enter var(--ui-replace-enter-duration) var(--ui-replace-ease) var(--ui-replace-exit-duration) both}
html[data-ui-transition=local]::view-transition-old(ui-content-0){mask-image:var(--ui-old-mask-0,none)}
html[data-ui-transition=local]::view-transition-new(ui-content-0){mask-image:var(--ui-new-mask-0,none)}
html[data-ui-transition=local]::view-transition-old(ui-content-1){mask-image:var(--ui-old-mask-1,none)}
html[data-ui-transition=local]::view-transition-new(ui-content-1){mask-image:var(--ui-new-mask-1,none)}
html[data-ui-transition=local]::view-transition-old(ui-content-2){mask-image:var(--ui-old-mask-2,none)}
html[data-ui-transition=local]::view-transition-new(ui-content-2){mask-image:var(--ui-new-mask-2,none)}

/* Native details interpolate their intrinsic content; closing and reversal need no JS. */
@supports (interpolate-size:allow-keywords){
 details::details-content{display:flow-root;interpolate-size:allow-keywords;block-size:0;opacity:0;overflow:clip;transition:block-size var(--ui-state-exit-duration) var(--ui-expand-ease),opacity var(--ui-state-exit-duration) linear,content-visibility var(--ui-state-exit-duration) allow-discrete}
 details[open]::details-content{block-size:auto;opacity:1;transition-duration:var(--ui-state-enter-duration)}
}
@media(prefers-reduced-motion:reduce){details::details-content{transition:none}}
