/* FX: fondo animado, transiciones y movimiento. Todo se apaga con "reducir movimiento". */
body{background:transparent!important}
#fxBg{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden;background:#000}
#fxBg .g{position:absolute;border-radius:50%;filter:blur(70px);opacity:.5;will-change:transform}
#fxBg .g1{width:60vmax;height:60vmax;left:-20vmax;top:-25vmax;background:radial-gradient(circle,rgba(120,110,255,.30),transparent 65%);animation:fxA 26s ease-in-out infinite alternate}
#fxBg .g2{width:55vmax;height:55vmax;right:-22vmax;top:20vh;background:radial-gradient(circle,rgba(255,90,140,.20),transparent 65%);animation:fxB 31s ease-in-out infinite alternate}
#fxBg .g3{width:50vmax;height:50vmax;left:10vw;bottom:-28vmax;background:radial-gradient(circle,rgba(70,200,190,.18),transparent 65%);animation:fxC 36s ease-in-out infinite alternate}
@keyframes fxA{to{transform:translate3d(14vmax,10vmax,0) scale(1.15)}}
@keyframes fxB{to{transform:translate3d(-12vmax,-8vmax,0) scale(1.1)}}
@keyframes fxC{to{transform:translate3d(10vmax,-9vmax,0) scale(1.2)}}
#fxBg .spot{position:absolute;inset:0;background:radial-gradient(420px circle at var(--mx,50%) var(--my,30%),rgba(255,255,255,.07),transparent 60%);opacity:0;transition:opacity .4s}
#fxBg.on .spot{opacity:1}
#fxBg canvas{position:absolute;inset:0;width:100%;height:100%;opacity:.55}
#fxBg .grain{position:absolute;inset:-50%;opacity:.07;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");animation:fxG 1.2s steps(6) infinite}
@keyframes fxG{0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}60%{transform:translate(-2%,-1%)}80%{transform:translate(3%,3%)}100%{transform:translate(0,0)}}
/* entrada de pagina */
@keyframes fxIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
#main.fx-in{animation:fxIn .45s cubic-bezier(.2,.8,.2,1)}
/* aparicion al deslizar */
.fx-rv{opacity:0;transform:translateY(22px) scale(.985);transition:opacity .6s ease,transform .7s cubic-bezier(.2,.8,.2,1)}
.fx-rv.in{opacity:1;transform:none}
/* logo y titulo */
.hdr .logo{animation:fxFloat 6s ease-in-out infinite;box-shadow:0 0 0 0 rgba(255,255,255,.0);transition:box-shadow .4s}
.hdr .logo:hover{box-shadow:0 0 40px 4px rgba(150,140,255,.35)}
@keyframes fxFloat{50%{transform:translateY(-6px)}}
.hdr h1{background:linear-gradient(100deg,#fefefe 40%,#a9a2ff 50%,#fefefe 60%);background-size:250% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:fxShine 7s ease-in-out infinite}
@keyframes fxShine{0%,60%{background-position:120% 0}100%{background-position:-120% 0}}
/* pestanas */
.tabs a{transition:opacity .15s,transform .25s,background .25s,box-shadow .25s}
.tabs a:hover{opacity:1;transform:translateY(-2px);box-shadow:0 6px 20px rgba(150,140,255,.25)}
.tabs a[aria-selected=true]{box-shadow:0 0 22px rgba(150,140,255,.35)}
/* tarjetas e imagenes */
.card,.item,.imgb .sq,.imgb img,.lnk{transition:transform .35s cubic-bezier(.2,.8,.2,1),box-shadow .35s}
.item:hover,.card.bd:hover{transform:translateY(-4px);box-shadow:0 12px 34px rgba(150,140,255,.22)}
.imgb .sq:hover,.imgb img:hover{transform:scale(1.015);box-shadow:0 12px 34px rgba(150,140,255,.2)}
.sub-btn,.cta{transition:transform .2s,box-shadow .2s,opacity .15s}
.sub-btn:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(255,255,255,.18)}
@media (prefers-reduced-motion:reduce){
 #fxBg .g,#fxBg .grain,.hdr .logo,.hdr h1{animation:none!important}
 #fxBg canvas{display:none}
 .fx-rv{opacity:1;transform:none;transition:none}
 #main.fx-in{animation:none}
}

#fxBg.m-cassette .g,#fxBg.m-vinilo .g,#fxBg.m-espectro .g,#fxBg.m-polvo .g,#fxBg.m-mpc .g,#fxBg.m-eq .g,#fxBg.m-sonar .g,#fxBg.m-const .g,#fxBg.m-daw .g{opacity:.18}
#fxBg.m-cassette .spot,#fxBg.m-vinilo .spot,#fxBg.m-espectro .spot,#fxBg.m-polvo .spot,#fxBg.m-mpc .spot,#fxBg.m-eq .spot,#fxBg.m-sonar .spot,#fxBg.m-const .spot,#fxBg.m-daw .spot{display:none}
#fxPick{position:fixed;left:8px;right:8px;top:8px;z-index:9999;display:flex;gap:6px;flex-wrap:wrap;align-items:center;justify-content:center;background:rgba(0,0,0,.85);border:1px solid #444;border-radius:12px;padding:6px 8px;font:600 11px Montserrat,sans-serif;color:#fff}
#fxPick button{background:transparent;border:1px solid #666;color:#fff;border-radius:999px;padding:6px 10px;font:600 11px Montserrat,sans-serif;cursor:pointer}
#fxPick button.on{background:#fff;color:#000}
