.reveal { transition-delay: var(--reveal-delay, 0ms); }

.page-hero--shift::before { animation: shift-hero-ring 24s linear infinite; }
.page-hero--shift .container { animation: shift-hero-in 800ms 100ms cubic-bezier(.22, 1, .36, 1) backwards; }
.page-hero--shift .page-brand-logo { animation: shift-logo-float 5s 1s ease-in-out infinite alternate; }

.jazz-score.is-visible .score-wave--one {
    stroke-dasharray: 1100;
    stroke-dashoffset: 1100;
    animation: line-draw 1400ms cubic-bezier(.22, 1, .36, 1) forwards;
}
.jazz-score.is-visible .score-wave--two { animation: score-drift 6s ease-in-out infinite alternate; }
.jazz-score.is-visible circle { transform-box: fill-box; transform-origin: center; animation: note-pulse 3.8s ease-in-out infinite; }
.jazz-score.is-visible circle:nth-of-type(2) { animation-delay: .6s; }
.jazz-score.is-visible circle:nth-of-type(3) { animation-delay: 1.2s; }
.jazz-score.is-visible circle:nth-of-type(4) { animation-delay: 1.8s; }

.impact-system.is-visible .impact-ring--outer { animation: orbit-spin 34s linear infinite; }
.impact-system.is-visible .impact-ring--middle { animation: orbit-spin 26s linear infinite reverse; }
.impact-system.is-visible .impact-node--skills { animation: node-float 4.8s ease-in-out infinite alternate; }
.impact-system.is-visible .impact-node--behaviour { animation: node-float 5.4s .6s ease-in-out infinite alternate; }
.impact-system.is-visible .impact-node--system { animation: node-float 4.4s 1.1s ease-in-out infinite alternate-reverse; }
.impact-system.is-visible .impact-core,
.topic-orbit.is-visible .topic-core { animation: core-breathe 4.5s ease-in-out infinite; }

.brand-convergence.is-visible .convergence-lines i { animation: line-unmask 900ms 250ms cubic-bezier(.22, 1, .36, 1) both; }
.brand-convergence.is-visible .convergence-lines span { animation: plus-pulse 3s 1s ease-in-out infinite; }
.brand-convergence.is-visible .convergence-result { animation: result-rise 750ms 450ms cubic-bezier(.22, 1, .36, 1) backwards; }

.team-capability-map.is-visible svg path { animation: path-flow 12s linear infinite; }
.team-capability-map.is-visible .capability--shift { animation: capability-in 700ms 100ms cubic-bezier(.22, 1, .36, 1) backwards; }
.team-capability-map.is-visible .capability--people { animation: capability-in 700ms 250ms cubic-bezier(.22, 1, .36, 1) backwards; }
.team-capability-map.is-visible .capability--jazz { animation: capability-in 700ms 400ms cubic-bezier(.22, 1, .36, 1) backwards; }

.contact-flow article.is-visible i { animation: arrow-nudge 1.8s .8s ease-in-out infinite; }
.topic-orbit.is-visible::before { animation: orbit-spin 30s linear infinite; }
.topic-orbit.is-visible > span:nth-of-type(odd) { animation: node-float 4.5s ease-in-out infinite alternate; }
.topic-orbit.is-visible > span:nth-of-type(even) { animation: node-float 5.2s .7s ease-in-out infinite alternate-reverse; }

.service-path::after { position: absolute; top: -1px; right: 0; left: 0; height: 2px; background: linear-gradient(90deg, var(--color-black), var(--color-yellow)); content: ''; }
.service-path:has(> div.is-visible)::after { animation: axis-grow 950ms 250ms cubic-bezier(.22, 1, .36, 1) both; transform-origin: left; }
.service-path > div:nth-child(1) { --reveal-delay: 100ms; }
.service-path > div:nth-child(2) { --reveal-delay: 200ms; }
.service-path > div:nth-child(3) { --reveal-delay: 300ms; }
.service-path > div:nth-child(4) { --reveal-delay: 400ms; }

.service-group.is-visible .service-group-heading { animation: service-heading-in 700ms 80ms cubic-bezier(.22, 1, .36, 1) backwards; }
.service-group.is-visible .group-index { animation: service-index-pulse 650ms 280ms cubic-bezier(.22, 1, .36, 1) backwards; }
.service-group.is-visible .service-group-journey ol::before { animation: service-line-draw 900ms 380ms cubic-bezier(.22, 1, .36, 1) backwards; transform-origin: left; }
.service-group.is-visible .service-group-journey li { animation: service-step-in 550ms cubic-bezier(.22, 1, .36, 1) backwards; }
.service-group.is-visible .service-group-journey li:nth-child(1) { animation-delay: 480ms; }
.service-group.is-visible .service-group-journey li:nth-child(2) { animation-delay: 650ms; }
.service-group.is-visible .service-group-journey li:nth-child(3) { animation-delay: 820ms; }
.service-group.is-visible .service-group-journey ol::after { animation: journey-travel 3.8s 1s ease-in-out infinite; }
.service-group.is-visible .service-group-journey li i { animation: journey-node-pulse 2.8s ease-in-out infinite; }
.service-group.is-visible .service-group-journey li:nth-child(2) i { animation-delay: .55s; }
.service-group.is-visible .service-group-journey li:nth-child(3) i { animation-delay: 1.1s; }
.service-group.is-visible .service-list a { animation: service-card-in 620ms cubic-bezier(.22, 1, .36, 1) backwards; }
.service-group.is-visible .service-list a:nth-child(1) { animation-delay: 300ms; }
.service-group.is-visible .service-list a:nth-child(2) { animation-delay: 440ms; }
.service-group.is-visible .service-list a:nth-child(3) { animation-delay: 580ms; }
.service-group.is-visible .service-list a span:last-child { animation: arrow-nudge 1.8s 1.2s ease-in-out infinite; }

.capability,
.convergence-brand,
.convergence-result { transition: transform var(--transition-base), box-shadow var(--transition-base); }
.capability:hover,
.convergence-brand:hover,
.convergence-result:hover { box-shadow: 0 22px 60px rgb(0 0 0 / 13%); transform: translateY(-5px); }

@keyframes line-draw { to { stroke-dashoffset: 0; } }
@keyframes node-float { to { transform: translateY(-8px); } }
@keyframes core-breathe { 50% { box-shadow: 0 25px 80px rgb(244 196 0 / 22%); transform: scale(1.025); } }
@keyframes line-unmask { from { clip-path: inset(0 50%); } to { clip-path: inset(0); } }
@keyframes plus-pulse { 50% { box-shadow: 0 0 0 10px rgb(244 196 0 / 12%); transform: scale(1.08); } }
@keyframes result-rise { from { opacity: 0; transform: translateY(18px); } }
@keyframes path-flow { to { stroke-dashoffset: -130; } }
@keyframes capability-in { from { opacity: 0; transform: scale(.94) translateY(14px); } }
@keyframes arrow-nudge { 50% { transform: translateX(6px); } }
@keyframes axis-grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes note-pulse { 50% { transform: scale(1.12); } }
@keyframes service-heading-in { from { opacity: 0; transform: translateY(18px); } }
@keyframes service-index-pulse { from { opacity: 0; transform: scale(.55) rotate(-18deg); } }
@keyframes service-line-draw { from { transform: scaleX(0); } }
@keyframes service-step-in { from { opacity: 0; transform: translateY(12px) scale(.9); } }
@keyframes service-card-in { from { opacity: 0; transform: translateX(24px); } }
@keyframes journey-travel { 0%, 8% { left: 16%; opacity: 0; } 16% { opacity: 1; } 84% { opacity: 1; } 92%, 100% { left: calc(84% - .65rem); opacity: 0; } }
@keyframes journey-node-pulse { 50% { box-shadow: 0 0 0 1px currentColor, 0 0 0 7px rgb(242 169 5 / 12%); transform: scale(1.12); } }
@keyframes shift-hero-ring { to { transform: rotate(360deg); } }
@keyframes shift-hero-in { from { opacity: 0; transform: translateY(18px); } }
@keyframes shift-logo-float { to { transform: translateY(-6px); } }

@media (prefers-reduced-motion: reduce) {
    .route-progress, .route-pin, .route-vehicle { animation: none !important; }
    .page-hero--shift::before, .page-hero--shift * { animation: none !important; transform: none !important; }
    .impact-system *, .brand-convergence *, .team-capability-map *, .contact-flow *,
    .topic-orbit *, .jazz-score *, .service-path *, .service-group * { animation: none !important; transform: none !important; }
    .service-group-journey ol::after { animation: none !important; }
}
