/* ===========================================================
   GTSB Holdings - premium animation layer (v1)
   Bold, performant, FOUC-safe, reduced-motion aware.
   Activated by html.gtsb-anim; html.gtsb-fallback forces
   content visible if the runtime cannot complete.
   =========================================================== */
:root{
  --gtsb-ease:cubic-bezier(.16,1,.3,1);
  --gtsb-ease-out:cubic-bezier(.22,.61,.36,1);
  --gtsb-shadow:0 18px 44px rgba(47,24,84,.20);
}

/* ---- scroll progress bar ---- */
.gtsb-progress{position:fixed;top:0;left:0;width:100%;height:3px;z-index:99999;
  pointer-events:none;transform:scaleX(0);transform-origin:0 50%;will-change:transform;
  background:linear-gradient(90deg,#2f1854 0%,#6f2b8b 55%,#ffed29 100%);
  box-shadow:0 0 16px rgba(111,43,139,.45);}

/* ---- header entrance, without transform on sticky/header ancestors ---- */
@keyframes gtsb-nav-in{from{opacity:0;}to{opacity:1;}}
html.gtsb-anim .elementor-33{opacity:0;animation:gtsb-nav-in .72s var(--gtsb-ease-out) .06s both;}
html.gtsb-anim .elementor-33 .elementor-widget{opacity:1;transform:none;transition:none;}

/* ---- base reveal ---- */
html.gtsb-anim .elementor-widget,
html.gtsb-anim .gtsb-rev{
  opacity:0;transform:translate3d(0,28px,0);
  transition:opacity .82s var(--gtsb-ease),transform .9s var(--gtsb-ease);
  transition-delay:var(--d,0ms);}
html.gtsb-anim .elementor-widget.is-in,
html.gtsb-anim .gtsb-rev.is-in{opacity:1;transform:translate3d(0,0,0);}

/* ---- portrait: cinematic clip-wipe + scale ---- */
html.gtsb-anim .gtsb-portrait{
  --gtsb-portrait-y:0px;position:relative;overflow:hidden;opacity:0;
  transform:translate3d(0,var(--gtsb-portrait-y),0) scale(1.07);
  transform-origin:center bottom;-webkit-clip-path:inset(0 0 100% 0);clip-path:inset(0 0 100% 0);
  transition:opacity .95s var(--gtsb-ease),transform 1.35s var(--gtsb-ease),-webkit-clip-path 1.05s var(--gtsb-ease),clip-path 1.05s var(--gtsb-ease);
  will-change:transform,opacity,clip-path;}
html.gtsb-anim .gtsb-portrait::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(135deg,rgba(255,237,41,.18),rgba(111,43,139,0) 42%,rgba(30,15,56,.14));
  opacity:0;transition:opacity 1.2s var(--gtsb-ease-out) .35s;}
html.gtsb-anim .gtsb-portrait.is-in{opacity:1;
  transform:translate3d(0,var(--gtsb-portrait-y),0) scale(1);
  -webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0);}
html.gtsb-anim .gtsb-portrait.is-in::after{opacity:1;}
@supports not ((clip-path:inset(0)) or (-webkit-clip-path:inset(0))){
  html.gtsb-anim .gtsb-portrait{-webkit-clip-path:none;clip-path:none;}
}

/* ---- hero heading word stagger ---- */
html.gtsb-anim .gtsb-word{display:inline-block;overflow:hidden;vertical-align:top;}
html.gtsb-anim .gtsb-word > span{display:inline-block;opacity:0;transform:translate3d(0,112%,0) rotate(2deg);
  transition:transform .86s var(--gtsb-ease),opacity .86s var(--gtsb-ease);transition-delay:var(--wd,0ms);will-change:transform,opacity;}
html.gtsb-anim .gtsb-head-split.is-in .gtsb-word > span{opacity:1;transform:translate3d(0,0,0) rotate(0deg);}

/* ---- section-title accent underline ---- */
.gtsb-h-accent .elementor-heading-title{position:relative;display:inline-block;}
.gtsb-h-accent .elementor-heading-title::after{content:"";position:absolute;left:0;bottom:-.28em;height:4px;width:100%;
  border-radius:3px;background:linear-gradient(90deg,#6f2b8b,#ffed29);
  box-shadow:0 6px 18px rgba(111,43,139,.22);transform:scaleX(0);transform-origin:0 50%;
  transition:transform .78s var(--gtsb-ease-out) .25s;}
.gtsb-h-accent.is-in .elementor-heading-title::after{transform:scaleX(1);}

/* ---- premium CTA buttons: lift + light sweep ---- */
html.gtsb-anim .elementor-button,
html.gtsb-anim .wpcf7-submit{position:relative;overflow:hidden;isolation:isolate;
  transform:translate3d(0,0,0);
  transition:transform .28s var(--gtsb-ease-out),box-shadow .28s var(--gtsb-ease-out),background-color .25s,color .25s,border-color .25s;}
html.gtsb-anim .elementor-button > *{position:relative;z-index:1;}
html.gtsb-anim .elementor-button::after{content:"";position:absolute;inset:-30% auto -30% -65%;width:42%;z-index:0;
  background:linear-gradient(115deg,transparent,rgba(255,255,255,.48),rgba(255,237,41,.26),transparent);
  transform:translate3d(-120%,0,0) skewX(-22deg);transition:transform .68s var(--gtsb-ease-out);pointer-events:none;}
@media (hover:hover) and (pointer:fine){
  html.gtsb-anim .elementor-button:hover,
  html.gtsb-anim .wpcf7-submit:hover{transform:translate3d(0,-3px,0);box-shadow:var(--gtsb-shadow);}
  html.gtsb-anim .elementor-button:hover::after{transform:translate3d(440%,0,0) skewX(-22deg);}
  html.gtsb-anim .gtsb-card:hover{transform:translate3d(0,-7px,0);box-shadow:0 24px 52px rgba(47,24,84,.16);}
}
html.gtsb-anim .elementor-button:active,
html.gtsb-anim .wpcf7-submit:active{transform:translate3d(0,-1px,0) scale(.99);}
html.gtsb-anim .elementor-button:focus-visible,
html.gtsb-anim .wpcf7-submit:focus-visible{outline:3px solid #1e0f38;outline-offset:3px;
  box-shadow:0 0 0 5px rgba(255,237,41,.35),0 14px 32px rgba(47,24,84,.24);}

/* ---- card hover lift (heading+text containers, tagged in JS) ---- */
html.gtsb-anim .gtsb-card{border-radius:8px;transform:translate3d(0,0,0);
  transition:transform .36s var(--gtsb-ease-out),box-shadow .36s var(--gtsb-ease-out);}
html.gtsb-anim .gtsb-card:focus-within{transform:translate3d(0,-4px,0);box-shadow:0 18px 40px rgba(47,24,84,.14);}

/* ---- hero logo gentle float ---- */
@keyframes gtsb-float{0%,100%{transform:translate3d(0,0,0);}50%{transform:translate3d(0,-4px,0);}}
html.gtsb-anim .gtsb-logo-float{transform-origin:center;animation:gtsb-float 6.5s ease-in-out infinite;}

@media (max-width:767px){
  html.gtsb-anim .elementor-widget,
  html.gtsb-anim .gtsb-rev{transform:translate3d(0,18px,0);}
  html.gtsb-anim .elementor-widget.is-in,
  html.gtsb-anim .gtsb-rev.is-in{transform:translate3d(0,0,0);}
  html.gtsb-anim .gtsb-portrait{transform:translate3d(0,0,0) scale(1.035);}
  html.gtsb-anim .gtsb-portrait.is-in{transform:translate3d(0,0,0) scale(1);}
}

/* ---- failsafe / reduced-motion: reveal all, kill motion ---- */
html.gtsb-fallback .elementor-33{opacity:1!important;animation:none!important;}
html.gtsb-fallback .elementor-widget,
html.gtsb-fallback .gtsb-rev,
html.gtsb-fallback .gtsb-portrait,
html.gtsb-fallback .gtsb-word > span{opacity:1!important;transform:none!important;-webkit-clip-path:none!important;clip-path:none!important;transition:none!important;animation:none!important;}
html.gtsb-fallback .gtsb-h-accent .elementor-heading-title::after{transform:scaleX(1)!important;transition:none!important;}
html.gtsb-fallback .gtsb-progress,
html.gtsb-fallback .gtsb-portrait::after{display:none!important;}
@media (prefers-reduced-motion:reduce){
  html.gtsb-anim .elementor-33{opacity:1!important;animation:none!important;}
  html .elementor-widget,html .gtsb-rev,html .gtsb-portrait,html .gtsb-word > span{
    opacity:1!important;transform:none!important;-webkit-clip-path:none!important;clip-path:none!important;transition:none!important;animation:none!important;}
  .gtsb-h-accent .elementor-heading-title::after{transform:scaleX(1)!important;transition:none!important;}
  .gtsb-progress{display:none!important;}
  html.gtsb-anim .gtsb-logo-float{animation:none!important;}
  html.gtsb-anim .gtsb-portrait::after{animation:none!important;display:none!important;}
}
