/* Motion language: light passing over copper, precise line drawing, restrained depth. */
.hero{isolation:isolate}
.hero::before{content:"";position:absolute;z-index:1;inset:0;pointer-events:none;background:linear-gradient(111deg,transparent 28%,rgba(251,185,69,.02) 46%,rgba(255,223,157,.15) 50%,rgba(251,185,69,.03) 54%,transparent 72%);transform:translateX(-145%);animation:heroSweep 8.5s ease-in-out 1.1s infinite}
.hero::after{content:"";position:absolute;z-index:1;inset:0;pointer-events:none;background:radial-gradient(520px circle at var(--pointer-x,76%) var(--pointer-y,48%),rgba(255,190,75,.17),transparent 70%);opacity:var(--pointer-opacity,0);transition:opacity .5s ease}
.hero-content{z-index:2}
.hero-foot{z-index:2}
.hero .line{animation:headlineIn .95s cubic-bezier(.22,.75,.16,1) both;transform-origin:bottom left}
.hero .line:nth-child(1){animation-delay:.12s}.hero .line:nth-child(2){animation-delay:.29s}.hero .line:nth-child(3){animation-delay:.46s}
.hero .intro{animation:rise .85s .7s both}
.header{animation:navIn .8s .1s both}
.brand>span{display:inline-block;animation:markPulse 6s ease-in-out 2s infinite}
.hero-foot a span{animation:scrollCue 2.4s ease-in-out infinite}
.section-label{position:relative}.section-label::after{content:"";position:absolute;left:0;bottom:-1px;height:1px;width:100%;background:var(--amber);transform-origin:left;transform:scaleX(0);transition:transform .9s cubic-bezier(.16,1,.3,1)}.section-label.visible::after{transform:scaleX(1)}
.about-figure{overflow:hidden}.about-figure img{transition:transform 1s cubic-bezier(.2,.75,.2,1),filter .8s}.about-figure:hover img{transform:scale(1.045);filter:saturate(1)}
.principles .reveal:nth-child(2){transition-delay:.11s}.principles .reveal:nth-child(3){transition-delay:.22s}
.service{position:relative;overflow:hidden}.service::before{content:"";position:absolute;top:0;left:0;width:100%;height:1px;background:linear-gradient(90deg,transparent,var(--amber),transparent);transform:translateX(-105%);opacity:.8;pointer-events:none;transition:transform .8s ease}.service:hover::before,.service:focus-within::before{transform:translateX(105%)}.service summary h3{transition:transform .35s cubic-bezier(.2,.7,.2,1)}.service summary:hover h3{transform:translateX(9px)}
.service-list .service:nth-child(2){transition-delay:.1s}.service-list .service:nth-child(3){transition-delay:.2s}
.calculator-preview{position:relative;overflow:hidden}.calculator-preview::before{content:"";position:absolute;inset:-50%;pointer-events:none;background:linear-gradient(105deg,transparent 45%,rgba(247,182,50,.08) 50%,transparent 55%);transform:translateX(-75%) rotate(-12deg);animation:calcSheen 9s ease-in-out 2s infinite}.calculator-preview>*{position:relative}.calculator-preview .preview-answer strong{transition:color .35s}.calculator-preview:hover .preview-answer strong{color:var(--amber)}
.contact-orb{box-shadow:0 0 0 0 rgba(247,182,50,.23);animation:orbBreathe 4s ease-in-out infinite}.contact-orb:hover{animation:none;box-shadow:0 0 0 14px rgba(247,182,50,.18)}
.motion-progress{position:fixed;left:0;top:0;bottom:0;width:3px;z-index:30;pointer-events:none;background:linear-gradient(to bottom,var(--amber) var(--scroll-progress,0%),transparent var(--scroll-progress,0%));opacity:.8}
.js-motion .reveal{transition-duration:.9s;transition-timing-function:cubic-bezier(.2,.72,.18,1)}.js-motion .reveal:not(.visible){transform:translate3d(0,38px,0)}
.motion-paused *,.motion-paused *::before,.motion-paused *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.motion-paused .hero::before,.motion-paused .hero::after,.motion-paused .motion-progress{display:none}.motion-paused .section-label::after{transform:scaleX(1)}
@keyframes heroSweep{0%,16%{transform:translateX(-145%);opacity:0}21%{opacity:1}42%{transform:translateX(145%);opacity:1}49%,100%{transform:translateX(145%);opacity:0}}
@keyframes headlineIn{from{opacity:0;transform:translate3d(0,80%,0);filter:blur(6px)}to{opacity:1;transform:translate3d(0,0,0);filter:blur(0)}}
@keyframes navIn{from{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}
@keyframes markPulse{0%,80%,100%{filter:drop-shadow(0 0 0 transparent)}88%{filter:drop-shadow(0 0 12px rgba(247,182,50,.85))}}
@keyframes scrollCue{0%,100%{transform:translateY(0)}50%{transform:translateY(8px)}}
@keyframes calcSheen{0%,15%{transform:translateX(-75%) rotate(-12deg)}38%,100%{transform:translateX(75%) rotate(-12deg)}}
@keyframes orbBreathe{0%,100%{box-shadow:0 0 0 0 rgba(247,182,50,.2)}55%{box-shadow:0 0 0 12px rgba(247,182,50,0)}}
@media(max-width:760px){.hero::after{display:none}.hero::before{background:linear-gradient(111deg,transparent 38%,rgba(255,213,126,.09) 50%,transparent 62%)}.motion-progress{width:2px}.hero .line{animation-duration:.8s}}
@media(prefers-reduced-motion:reduce){.hero::before,.hero::after,.motion-progress{display:none!important}.section-label::after{transform:scaleX(1)!important}.hero .line,.hero .intro,.header{animation:none!important;opacity:1!important;transform:none!important;filter:none!important}.about-figure img,.service summary h3{transition:none!important}}

/* Each matching group occupies half the track, so the loop has no visible reset. */
.ticker{position:relative;overflow:hidden;mask-image:linear-gradient(90deg,transparent,#000 3%,#000 97%,transparent)}
.ticker .ticker-track{display:flex;width:max-content;animation:tickerFlow 42s linear infinite;will-change:transform}
.ticker .ticker-group{display:flex;align-items:center;flex:none}
.ticker .ticker-item{display:inline-block;flex:none;white-space:nowrap;font-size:14px;font-weight:550;letter-spacing:1.4px;color:#e5e9dc;padding:0 34px}
.ticker .ticker-separator{flex:none;color:var(--amber);font-size:20px;line-height:1}
@keyframes tickerFlow{to{transform:translate3d(-50%,0,0)}}
@media(max-width:760px){.ticker .ticker-track{animation-duration:36s}.ticker .ticker-item{font-size:12px;padding:0 22px;letter-spacing:1.1px}.ticker .ticker-separator{font-size:17px}}
@media(prefers-reduced-motion:reduce){.ticker{overflow:auto;mask-image:none}.ticker .ticker-track{animation:none!important;will-change:auto}.ticker .ticker-group[aria-hidden="true"]{display:none}}
.motion-paused .ticker{overflow:hidden;mask-image:none}.motion-paused .ticker .ticker-track{animation:none!important}.motion-paused .ticker .ticker-group[aria-hidden="true"]{display:none}

/* The service ribbon is driven by its own animation; swipes never scroll it. */
.ticker{touch-action:pan-y;overscroll-behavior-x:contain}
