/* Video Shotcraft cursor-flyover: 16-frame cursor move, click at frame 22,
   44-frame stations and an 18-frame ripple. Adapted to the existing neutral
   workspace illustration without a moving camera or real clicks. */
.ch-app { position: relative; }
.ch-tour-cursor { position: absolute; left: 0; top: 0; width: 15px; height: 20px; z-index: 3; pointer-events: none; opacity: 0; transition: translate .533s cubic-bezier(.55,0,.18,1), opacity .12s ease; }
.ch-tour-cursor.is-visible { opacity: 1; }
.ch-tour-ring { position: absolute; z-index: 2; width: 28px; height: 28px; margin: -14px 0 0 -14px; border: 2px solid #91391e; border-radius: 50%; pointer-events: none; animation: ch-tour-ripple .6s ease-out forwards; }
.ch-tour-active { box-shadow: inset 0 0 0 2px #91391e; }
@keyframes ch-tour-ripple { from { transform: scale(.3); opacity: 1; } to { transform: scale(1.5); opacity: 0; } }
/* Shotcraft type-assembly-moves, split-text-stagger: each closing value rises
   inside its baseline box with a 10% overshoot and a staggered delay. */
.ch-close-rail li { overflow: hidden; }
.ch-close-rail li span { display: inline-block; }
.ch-close-rail.is-assembling li span { animation: close-rail-rise .667s cubic-bezier(.2,.75,.3,1) calc(.15s + var(--rail) * .12s) both; }
@keyframes close-rail-rise { 0% { transform: translateY(115%); } 70% { transform: translateY(-10%); } 100% { transform: translateY(0); } }
/* Shotcraft bezier-source-converge-merge: a coral packet travels across each
   ecosystem pillar's top rule and answers with a brief arrow nudge. */
.ch-ecosystem-item { position: relative; }
.ch-ecosystem-item::before { content: ''; position: absolute; top: -2px; left: 0; width: 32%; height: 2px; background: var(--ch-orange); opacity: 0; pointer-events: none; }
.ch-ecosystem-grid.is-converging .ch-ecosystem-item::before { animation: eco-packet .55s cubic-bezier(.3,0,.2,1) calc(.15s + var(--eco) * .45s) both; }
.ch-ecosystem-grid.is-converging .ch-ecosystem-item span .ch-ic { animation: eco-arrow .36s cubic-bezier(.2,.75,.3,1) calc(.45s + var(--eco) * .45s) both; }
@keyframes eco-packet { 0% { transform: translateX(0); opacity: 0; } 20%, 80% { opacity: 1; } 100% { transform: translateX(212%); opacity: 0; } }
@keyframes eco-arrow { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(6px); } }
@media (prefers-reduced-motion: reduce) { .ch-tour-cursor, .ch-tour-ring { display: none; } .ch-tour-active { box-shadow: none; } .ch-close-rail.is-assembling li span, .ch-ecosystem-grid.is-converging .ch-ecosystem-item::before, .ch-ecosystem-grid.is-converging .ch-ecosystem-item span .ch-ic { animation: none; } }
