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

.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; }

.shift-blueprint:has(li.is-visible)::before { animation: axis-grow 1100ms 200ms cubic-bezier(.22, 1, .36, 1) both; transform-origin: left; }
.shift-blueprint li:nth-child(1) { --reveal-delay: 80ms; }
.shift-blueprint li:nth-child(2) { --reveal-delay: 180ms; }
.shift-blueprint li:nth-child(3) { --reveal-delay: 280ms; }
.shift-blueprint li:nth-child(4) { --reveal-delay: 380ms; }
.shift-blueprint:has(li.is-visible) .blueprint-node i { animation: point-pulse 3.4s 1.2s ease-in-out infinite; }

.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; }

.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 axis-grow-y { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes point-pulse { 50% { box-shadow: 0 0 0 2px var(--color-black), 0 0 0 9px rgb(244 196 0 / 14%); } }
@keyframes note-pulse { 50% { transform: scale(1.12); } }

@media (max-width: 700px) {
    .shift-blueprint:has(li.is-visible)::before { animation-name: axis-grow-y; transform-origin: top; }
}

@media (prefers-reduced-motion: reduce) {
    .impact-system *, .brand-convergence *, .team-capability-map *, .contact-flow *,
    .topic-orbit *, .shift-blueprint *, .jazz-score *, .service-path * { animation: none !important; transform: none !important; }
}
