/* Shared mechanics for the motion layer. Each version supplies its own look via tokens. */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body { margin: 0; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: hidden; }
img { display: block; max-width: 100%; }
main { overflow-x: clip; }
a { color: inherit; }
button { font: inherit; color: inherit; }
:focus-visible { outline: 3px solid var(--focus, #F8A719); outline-offset: 3px; border-radius: 6px; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.skip { position: fixed; left: 12px; top: -60px; z-index: 999; padding: 10px 16px; border-radius: 999px; background: var(--ink, #282828); color: #fff; text-decoration: none; transition: top .2s; }
.skip:focus { top: 12px; }

/* ---- reveal ---- */
[data-reveal] { opacity: 0; transform: translate3d(0, 28px, 0); transition: opacity .9s cubic-bezier(.2,.7,.2,1) var(--d, 0s), transform .9s cubic-bezier(.2,.7,.2,1) var(--d, 0s); }
[data-reveal="left"] { transform: translate3d(-36px, 0, 0); }
[data-reveal="right"] { transform: translate3d(36px, 0, 0); }
[data-reveal="scale"] { transform: scale(.94); }
[data-reveal="fade"] { transform: none; }
[data-reveal].in { opacity: 1; transform: none; }

/* ---- split text ---- */
[data-split] .w { display: inline-block; overflow: hidden; vertical-align: top; padding-bottom: .04em; margin-bottom: -.04em; }
[data-split] .wi, [data-split] .c { display: inline-block; transform: translate3d(0, 110%, 0); transition: transform 1s cubic-bezier(.16,1,.3,1) var(--i, 0s); }
[data-split].in .wi, [data-split].in .c { transform: none; }

/* ---- scrubbed text ---- */
[data-scrub] .sw { opacity: calc(.16 + var(--lit, 0) * .84); transition: opacity .15s linear; }

/* ---- marquee ---- */
[data-marquee] { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }
[data-marquee] > * { display: flex; width: max-content; animation: marquee var(--speed, 40s) linear infinite; }
[data-marquee]:hover > * { animation-play-state: paused; }
@keyframes marquee { to { transform: translateX(-50%); } }

/* ---- parallax ---- */
[data-parallax] { transform: translate3d(0, var(--py, 0), 0); will-change: transform; }

/* ---- stack cards ---- */
[data-stack-card] { transform: scale(calc(1 - var(--sp, 0) * .06)); filter: brightness(calc(1 - var(--sp, 0) * .12)); transform-origin: 50% 0; }

/* ---- carousel ---- */
[data-carousel] { position: relative; }
.car-viewport { overflow: hidden; }
[data-track] { display: flex; transition: transform .8s cubic-bezier(.7,0,.2,1); touch-action: pan-y; }
[data-track] > * { flex: 0 0 100%; min-width: 0; }
[data-dots] { display: flex; gap: 8px; }
[data-dots] button { width: 8px; height: 8px; padding: 0; border: 0; border-radius: 99px; background: currentColor; opacity: .25; cursor: pointer; transition: width .4s, opacity .4s; }
[data-dots] button.on { width: 26px; opacity: 1; }

/* ---- accordion ---- */
[data-accordion] [data-acc-btn] + * { height: 0; overflow: hidden; transition: height .45s cubic-bezier(.2,.7,.2,1); }

/* ---- follow image ---- */
.follow-img { position: fixed; left: 0; top: 0; width: 180px; height: 220px; object-fit: cover; border-radius: 18px; pointer-events: none; z-index: 60; opacity: 0; scale: .6; transition: opacity .25s, scale .35s cubic-bezier(.16,1,.3,1); box-shadow: 0 30px 60px -20px rgba(0,0,0,.45); }
.follow-img.on { opacity: 1; scale: 1; }

/* ---- scroll progress ---- */
[data-progress] { position: fixed; left: 0; top: 0; height: 3px; width: 100%; transform-origin: 0 50%; transform: scaleX(0); z-index: 100; }

/* ---- lead form states ---- */
[data-lead-form].sent { display: none; }
[data-lead-done] { display: none; }
[data-lead-done].show { display: block; animation: pop .7s cubic-bezier(.16,1,.3,1); }
@keyframes pop { from { opacity: 0; transform: translateY(16px) scale(.97); } }
.field .err { display: block; min-height: 1em; font-size: 13px; margin-top: 4px; }

/* ---- loader intro ---- */
.intro { opacity: 0; transform: translateY(20px); transition: opacity 1s cubic-bezier(.2,.7,.2,1) var(--d, 0s), transform 1s cubic-bezier(.2,.7,.2,1) var(--d, 0s); }
.is-loaded .intro { opacity: 1; transform: none; }

@keyframes spin { to { rotate: 360deg; } }
@keyframes floaty { 50% { translate: 0 -10px; } }
@keyframes wave-x { to { transform: translateX(-50%); } }
@keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(46,160,67,.55); } 70% { box-shadow: 0 0 0 9px rgba(46,160,67,0); } 100% { box-shadow: 0 0 0 0 rgba(46,160,67,0); } }

.reduce-motion *, .reduce-motion *::before, .reduce-motion *::after { animation-duration: .001s !important; animation-iteration-count: 1 !important; transition-duration: .001s !important; scroll-behavior: auto !important; }
.reduce-motion [data-reveal], .reduce-motion .intro { opacity: 1; transform: none; }
.reduce-motion [data-split] .wi, .reduce-motion [data-split] .c { transform: none; }
.reduce-motion [data-marquee] > * { animation: none; }
