/* TFS motion layer — driven by site-fx.js, loaded by every page. Every hidden
   initial state is gated on html[data-fx], which only that script sets, so a
   blocked script still leaves a complete page.

   Hooks (set in the artboards, never touched by the runtime's React props):
     [data-fx~="reveal"]        fade + rise on entering the viewport (.fx-in)
       + d1…d5                  stagger delay 90…450ms
       + zoom                   starts slightly scaled up instead of shifted
       + word                   per-word: rise + blur-in (quote headlines)
       + bar                    vertical accent bar growing from the top
     [data-fx~="tilt"]          pointer tilt (cards)
     [data-fx~="parallax"]      drifts against the scroll
     [data-fx~="glow"|"drift"|"drift2"]  slow ambient gradient motion
     [data-stepimg]/[data-stepcap]       photo + caption following [data-step] rows
     #tfs-hero-3d               host for the three.js hero scene */
#tfs-hero-3d { position:absolute; inset:0; overflow:hidden; opacity:0; transition:opacity 1600ms ease; --hero3d-op:1; }
#tfs-hero-3d.is-live { opacity:var(--hero3d-op); }
@media (max-width: 1023px) { #tfs-hero-3d { --hero3d-op:.55; } }
@keyframes tfs-glow { 0%, 100% { opacity:.85; } 50% { opacity:1; } }
[data-fx~="glow"] { animation:tfs-glow 9s ease-in-out infinite; }

html[data-fx] [data-fx~="reveal"] { opacity:0; transform:translateY(22px); transition:opacity 760ms cubic-bezier(.2,.6,.2,1), transform 760ms cubic-bezier(.2,.6,.2,1); }
html[data-fx] [data-fx~="reveal"][data-fx~="zoom"] { transform:scale(1.05); transition-duration:1400ms; }
html[data-fx] [data-fx~="reveal"].fx-in { opacity:1; transform:none; }
[data-fx~="d1"] { transition-delay:90ms; }
[data-fx~="d2"] { transition-delay:180ms; }
[data-fx~="d3"] { transition-delay:270ms; }
[data-fx~="d4"] { transition-delay:360ms; }
[data-fx~="d5"] { transition-delay:450ms; }
[data-fx~="tilt"] { transition:transform 340ms cubic-bezier(.2,.6,.2,1), box-shadow 340ms cubic-bezier(.2,.6,.2,1); will-change:transform; }

html[data-fx] [data-fx~="reveal"][data-fx~="word"] { transform:translateY(0.5em); filter:blur(8px); transition:opacity 900ms cubic-bezier(.2,.6,.2,1), transform 900ms cubic-bezier(.2,.6,.2,1), filter 900ms cubic-bezier(.2,.6,.2,1); }
html[data-fx] [data-fx~="reveal"][data-fx~="word"].fx-in { filter:blur(0); }
html[data-fx] [data-fx~="reveal"][data-fx~="bar"] { opacity:1; transform:scaleY(0); transition:transform 1400ms cubic-bezier(.2,.6,.2,1) 200ms; }
@keyframes tfs-drift { 0% { transform:translate(0,0) scale(1); } 50% { transform:translate(6%,-5%) scale(1.12); } 100% { transform:translate(0,0) scale(1); } }
@keyframes tfs-drift2 { 0% { transform:translate(0,0) scale(1); } 50% { transform:translate(-7%,6%) scale(1.15); } 100% { transform:translate(0,0) scale(1); } }
[data-fx~="drift"] { animation:tfs-drift 16s ease-in-out infinite; }
[data-fx~="drift2"] { animation:tfs-drift2 21s ease-in-out infinite; }

html[data-fx] [data-stepimg] { opacity:0; transform:scale(1.06); transition:opacity 700ms cubic-bezier(.2,.6,.2,1), transform 1500ms cubic-bezier(.2,.6,.2,1); }
html[data-fx] [data-stepimg].is-active { opacity:1; transform:none; }
[data-stepcap] { display:inline-flex; }
html[data-fx] [data-stepcap]:not(.is-active) { display:none; }

@media (prefers-reduced-motion: reduce) {
  html[data-fx] [data-fx~="reveal"] { opacity:1; transform:none; transition:none; }
  html[data-fx] [data-fx~="reveal"][data-fx~="word"] { transform:translateY(0.5em); filter:blur(8px); transition:opacity 900ms cubic-bezier(.2,.6,.2,1), transform 900ms cubic-bezier(.2,.6,.2,1), filter 900ms cubic-bezier(.2,.6,.2,1); }
html[data-fx] [data-fx~="reveal"][data-fx~="word"].fx-in { filter:blur(0); }
html[data-fx] [data-fx~="reveal"][data-fx~="bar"] { opacity:1; transform:scaleY(0); transition:transform 1400ms cubic-bezier(.2,.6,.2,1) 200ms; }
@keyframes tfs-drift { 0% { transform:translate(0,0) scale(1); } 50% { transform:translate(6%,-5%) scale(1.12); } 100% { transform:translate(0,0) scale(1); } }
@keyframes tfs-drift2 { 0% { transform:translate(0,0) scale(1); } 50% { transform:translate(-7%,6%) scale(1.15); } 100% { transform:translate(0,0) scale(1); } }
[data-fx~="drift"] { animation:tfs-drift 16s ease-in-out infinite; }
[data-fx~="drift2"] { animation:tfs-drift2 21s ease-in-out infinite; }

html[data-fx] [data-stepimg] { transition:none; }
  [data-fx~="glow"], [data-fx~="drift"], [data-fx~="drift2"] { animation:none; }
  #tfs-hero-3d { opacity:var(--hero3d-op); transition:none; }
}
