/* A screen-on opening, followed by masked type and scroll-driven camera layers. */
.opening{animation:screenOn 1.1s cubic-bezier(.16,.7,.2,1) both}.intro-hello{animation:greetingLand .85s .95s cubic-bezier(.16,.75,.2,1) both}.opening .intro-logo{animation:logoResolve 1s 1.1s cubic-bezier(.16,.75,.2,1) both}.opening-line{animation:copyResolve .8s 1.8s both}.opening-purpose{animation:copyResolve .8s 2.05s both}.opening .page-arrow{animation:copyResolve .7s 2.35s both}.intro-caret{animation:cursorBlink 1.2s step-end infinite}.page-arrow span{animation:arrowPulse 3s 2.7s ease-in-out infinite}
@keyframes screenOn{0%{clip-path:inset(49.8% 48% round 3px);filter:brightness(1.2)}24%{clip-path:inset(49.8% 0 round 3px);filter:brightness(1.12)}100%{clip-path:inset(0 round 28px);filter:brightness(1)}}
@keyframes greetingLand{from{opacity:0;transform:translateY(28px);filter:blur(2px)}to{opacity:1;transform:none;filter:none}}
@keyframes logoResolve{0%{opacity:0;transform:scale(.82);filter:brightness(0) blur(3px)}75%{opacity:1;transform:scale(1.035);filter:brightness(0)}100%{opacity:1;transform:none;filter:brightness(0)}}
@keyframes copyResolve{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes cursorBlink{50%{opacity:0}}@keyframes arrowPulse{0%,65%,100%{transform:translateY(0)}80%{transform:translateY(5px)}}
/* Native Web Animations owns each entrance; these rules are only initial states. */
.js-motion .reveal,.js-motion .scene-label,.js-motion .scene-media{opacity:0}.js-motion h2.reveal{opacity:1}.headline-word{display:inline-block}.js-motion .headline-word{opacity:0}.js-motion .is-shown{opacity:1}.js-motion .reveal.is-shown,.js-motion .scene-label.is-shown,.js-motion .scene-media.is-shown{opacity:1}
.js-motion .scene-media:after{opacity:0}.js-motion .scene-live .scene-media:after{animation:gradeIn 1.1s .25s both}
@keyframes gradeIn{from{opacity:0}to{opacity:1}}
.example-image img{transform-origin:center;transition:filter .4s}.example-image:hover img{filter:brightness(1.07)}
#plan{transition:background .6s,color .6s}#plan[data-mode=network]{background:#e6d4ad;--line:#bca984;--muted:#62563e}#plan[data-mode=ai]{background:#153bea;--ink:#f3f1e9;--line:#ffffff50;--muted:#d4e0ff}#plan[data-mode=ai] .plan-tabs button{color:#cad8ff}#plan[data-mode=ai] .plan-tabs button[aria-selected=true]{color:white;border-color:white}
@media(min-width:951px){.contact-actions .button{transition:box-shadow .3s,background .3s}.contact-actions .button:hover{box-shadow:0 8px 50px #a8c6ff55}.opening .intro-logo:hover{filter:brightness(0) drop-shadow(0 0 8px #9cbaf766)}}
@media(max-width:600px){.opening{animation-name:screenOnMobile}@keyframes screenOnMobile{0%{clip-path:inset(49.8% 48% round 3px);filter:brightness(1.2)}24%{clip-path:inset(49.8% 0 round 3px);filter:brightness(1.12)}100%{clip-path:inset(0 round 22px);filter:brightness(1)}}}
@media(prefers-reduced-motion:reduce){.opening,.intro-hello,.opening .intro-logo,.opening-line,.opening-purpose,.opening .page-arrow,.intro-caret,.page-arrow span,.js-motion .scene-live .scene-media:after{animation:none;opacity:1;transform:none;filter:none}.opening .intro-logo{filter:brightness(0)}.js-motion .reveal,.js-motion .scene-label,.js-motion .scene-media,.js-motion .headline-word{opacity:1}.js-motion .scene-media:after{opacity:1}.media-camera{transform:none}#plan,.example-image img{transition:none}}
@media print{.opening,.intro-hello,.opening .intro-logo,.opening-line,.opening-purpose,.headline-word,.reveal,.scene-label{animation:none!important;opacity:1!important;transform:none!important;filter:none!important}.opening .intro-logo{filter:brightness(0)!important}}
