/* Motion stays restrained; financial consequences do the storytelling. */
header nav a { position: relative; }
header nav a:not(.join-link)::after { content: ''; position: absolute; left: 0; right: 0; bottom: -6px; height: 1px; background: currentColor; transform: scaleX(0); transform-origin: left; transition: transform .2s ease; }
header nav a:not(.join-link):hover::after,header nav a[aria-current="page"]::after { transform: scaleX(1); }
header nav a[aria-current="page"] { text-decoration: none; }
a,button { -webkit-tap-highlight-color: transparent; }
.button,.entry-button,.text-card,.event-list>a,.intro-primary { transition: background .2s ease, transform .2s ease, border-color .2s ease; }
.button:hover { transform: translateY(-2px); }
.button:active,button:active { transform: translateY(1px); }
.event-list>a:hover { background: #f6f6f2; }
.event-list .arrow { transition: transform .2s ease; }
.event-list>a:hover .arrow { transform: translate(3px,-3px); }
.text-card:hover { background: #fafaf7; }
.motion-reveal { opacity: 0; transform: translateY(12px); transition: opacity .45s ease, transform .45s ease; }
.motion-reveal.is-visible { opacity: 1; transform: none; }
.reader-layout img { animation: image-arrive .2s ease; }
@keyframes image-arrive { from { opacity: .4; } to { opacity: 1; } }

.save-confirmed{animation:save-feedback .6s ease-out}@keyframes save-feedback{from{background:#e2eddf}to{background:transparent}}.chart-reveal{animation:chart-show .45s ease-out}@keyframes chart-show{from{opacity:.2;transform:translateY(4px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.motion-reveal{opacity:1;transform:none}}@media print{.motion-reveal{opacity:1;transform:none}}


/* Only the page crossfades. The header remains a stable reference point. */
body > header { view-transition-name: cupec-header; }
::view-transition-group(root),
::view-transition-old(root),
::view-transition-new(root) { animation-duration: 170ms; animation-timing-function: ease-out; }
::view-transition-group(cupec-header) { animation: none; }
::view-transition-old(cupec-header) { animation: none; opacity: 0; }
::view-transition-new(cupec-header) { animation: none; mix-blend-mode: normal; }
::view-transition { pointer-events: none; }
#join-details[open] { animation: cupec-panel-enter 150ms ease-out; }
#join-details[open]::backdrop { animation: cupec-backdrop-enter 150ms ease-out; }
@keyframes cupec-panel-enter { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: none; } }
@keyframes cupec-backdrop-enter { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
}
@view-transition { navigation: auto; }
