/* Global visual layer: aurora, scroll progress, reveal, spotlight */
html.js .reveal{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0s)}
html.js .reveal.in{opacity:1;transform:none}
#fx-progress{position:fixed;top:0;left:0;height:3px;width:0;z-index:100;background:linear-gradient(90deg,#38bdf8,#818cf8,#c084fc);box-shadow:0 0 12px rgba(56,189,248,.7)}
body::before{content:"";position:fixed;inset:-20%;z-index:-1;pointer-events:none;opacity:.55;
  background:radial-gradient(40% 35% at 15% 20%,rgba(14,165,233,.18),transparent 70%),
             radial-gradient(35% 35% at 85% 15%,rgba(139,92,246,.16),transparent 70%),
             radial-gradient(40% 40% at 70% 85%,rgba(16,185,129,.10),transparent 70%);
  animation:fx-drift 24s ease-in-out infinite alternate}
@keyframes fx-drift{to{transform:translate3d(-3%,3%,0) scale(1.08)}}
body::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.35;
  background-image:linear-gradient(rgba(148,163,184,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(148,163,184,.06) 1px,transparent 1px);
  background-size:56px 56px;mask-image:radial-gradient(ellipse at 50% 0%,#000 10%,transparent 70%);-webkit-mask-image:radial-gradient(ellipse at 50% 0%,#000 10%,transparent 70%)}
.spot{position:relative;overflow:hidden}
.spot::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .3s;
  background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),rgba(56,189,248,.16),transparent 70%)}
.spot:hover::before{opacity:1}
.gborder{position:relative}
.gborder::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;pointer-events:none;
  background:linear-gradient(135deg,rgba(56,189,248,.6),rgba(129,140,248,.15),rgba(192,132,252,.6));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude}
@media (prefers-reduced-motion:reduce){body::before{animation:none}html.js .reveal{opacity:1;transform:none;transition:none}}
