/* ============================================================
   DCT Dynamic Effects — scroll-reveal + hover lift/shine
   Loaded only on pages that include dct-fx.js.
   Safe add-on: no layout/color/content changes.
   Hidden state is gated by html.dctfx (added by JS), so if
   JavaScript is off, nothing is ever hidden.
   ============================================================ */

html.dctfx [data-dctfx="reveal"]{
  opacity:0;
  transform:translateY(28px) scale(.985);
  transition:opacity .7s ease, transform .8s cubic-bezier(.34,1.56,.64,1);
}
html.dctfx [data-dctfx="reveal"].dctfx-in{ opacity:1; transform:none; }

.dctfx-hover{
  transition:transform .3s cubic-bezier(.34,1.56,.64,1), box-shadow .3s ease, filter .3s ease;
  will-change:transform;
}
.dctfx-hover:hover{ transform:translateY(-6px) scale(1.02); box-shadow:0 18px 44px rgba(20,30,60,.16); }

.dctfx-shine{ position:relative; overflow:hidden; }
.dctfx-shine::after{
  content:''; position:absolute; top:0; left:-160%; width:55%; height:100%;
  background:linear-gradient(120deg,transparent,rgba(255,255,255,.55),transparent);
  transform:skewX(-20deg); transition:left .8s ease; pointer-events:none;
}
.dctfx-shine:hover::after{ left:170%; }

@media (prefers-reduced-motion: reduce){
  html.dctfx [data-dctfx="reveal"]{ opacity:1!important; transform:none!important; }
  .dctfx-hover, .dctfx-shine{ transition:none!important; }
}
