/* Catálogo de animaciones y acciones */
.anim{min-height:100%;background:#0b0b0d;color:#f4f4f1;font-family:"Space Grotesk",system-ui,sans-serif;animation:swap .4s ease}
.demo{position:relative;min-height:100%;display:grid;align-content:center;justify-items:center;padding:clamp(24px,4vw,56px) clamp(16px,3vw,40px);text-align:center;overflow:hidden}
.d-hint{position:absolute;top:14px;left:18px;font-size:.74rem;letter-spacing:.14em;text-transform:uppercase;color:#6d6d69;z-index:3;text-align:left}
.d-kicker{font-size:.78rem;letter-spacing:.3em;color:#9a9a95;margin-bottom:10px}
.d-big{font-size:clamp(2.6rem,9vw,6rem);letter-spacing:-.05em;line-height:1;font-weight:700;transition:filter .22s,opacity .22s,transform .22s}
.d-big.out{filter:blur(12px);opacity:0;transform:translateY(10px)}
.d-sub{color:#9a9a95;margin-top:10px;min-height:1.6em;transition:opacity .22s}
.d-btn{display:inline-block;padding:14px 26px;border-radius:99px;background:#f4f4f1;color:#080808;font-weight:600;border:0;cursor:pointer;font:inherit;font-weight:600}
.d-btn.ghost{background:transparent;color:#f4f4f1;border:1px solid rgba(244,244,241,.3)}
.d-row{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}

/* 1 Dock líquido */
.ld-dock{position:relative;display:flex;gap:6px;margin-top:56px;padding:10px;border-radius:99px;background:#16161a;border:1px solid rgba(255,255,255,.1);box-shadow:0 20px 50px rgba(0,0,0,.6)}
.ld-dock button{position:relative;z-index:2;width:54px;height:54px;border-radius:50%;display:grid;place-items:center;background:none;border:0;color:#8f8f95;cursor:pointer;transition:color .3s}
.ld-dock button.on{color:#0b0b0d}
.ld-dock svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.ld-b{position:absolute;z-index:1;top:10px;left:10px;height:54px;width:54px;border-radius:99px;background:var(--c,#c6f24a);box-shadow:0 0 28px var(--c,#c6f24a);transition:left .3s cubic-bezier(.5,0,.2,1),width .3s cubic-bezier(.5,0,.2,1),background .5s,box-shadow .5s}
.ld-glow{position:absolute;z-index:0;left:12%;right:12%;bottom:-30px;height:46px;background:radial-gradient(closest-side,var(--c,#c6f24a),transparent);filter:blur(16px);opacity:.6;transition:background .5s}

/* 2 Aparición al scroll */
.sr{align-content:start;gap:clamp(34px,6vw,70px);padding-top:70px;padding-bottom:80px}
.sr-item{width:min(100%,520px);padding:34px;border-radius:22px;background:#17171b;border:1px solid rgba(255,255,255,.1);text-align:left;opacity:0;transition:opacity .9s cubic-bezier(.2,.7,.2,1),transform .9s cubic-bezier(.2,.7,.2,1),filter .9s}
.sr-item b{display:block;font-size:1.5rem;letter-spacing:-.03em;margin-bottom:6px}
.sr-item span{color:#9a9a95}
.sr-item[data-fx="up"]{transform:translateY(60px)}
.sr-item[data-fx="left"]{transform:translateX(-90px)}
.sr-item[data-fx="right"]{transform:translateX(90px)}
.sr-item[data-fx="zoom"]{transform:scale(.7)}
.sr-item[data-fx="blur"]{filter:blur(16px);transform:translateY(20px)}
.sr-item[data-fx="rotate"]{transform:rotate(-8deg) translateY(50px)}
.sr-item.in{opacity:1;transform:none;filter:none}

/* 3 Parallax */
.px{min-height:clamp(380px,70dvh,640px);width:100%;cursor:crosshair}
.px-l{position:absolute;inset:0;transition:transform .25s ease-out;pointer-events:none}
.px-l i{position:absolute;display:block;border-radius:50%}
.px-t{position:relative;z-index:4;pointer-events:none}

/* 4 Tilt 3D */
.tl-row{display:flex;flex-wrap:wrap;gap:28px;justify-content:center;perspective:900px}
.tl{width:210px;height:290px;border-radius:22px;padding:22px;text-align:left;display:flex;flex-direction:column;justify-content:flex-end;position:relative;transform-style:preserve-3d;transition:transform .2s ease-out,box-shadow .3s;overflow:hidden;cursor:pointer}
.tl b{font-size:1.5rem;letter-spacing:-.03em;transform:translateZ(40px)}
.tl span{opacity:.75;font-size:.9rem;transform:translateZ(24px)}
.tl::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--gx,50%) var(--gy,0%),rgba(255,255,255,.4),transparent 55%);opacity:0;transition:opacity .3s}
.tl:hover::after{opacity:1}

/* 5 Botón magnético */
.mg-field{position:relative;padding:60px 70px;display:flex;gap:30px;align-items:center;justify-content:center;flex-wrap:wrap}
.mg{transition:transform .25s cubic-bezier(.2,.9,.3,1.4)}
.mg.big{padding:22px 40px;font-size:1.1rem}
.mg.round{width:72px;height:72px;padding:0;border-radius:50%;display:grid;place-items:center;background:#ff6f9a;color:#080808;font-size:1.6rem;border:0;cursor:pointer}

/* 6 Texto que se escribe */
.ty-h{font-size:clamp(1.8rem,6vw,3.6rem);letter-spacing:-.04em;font-weight:700;line-height:1.1}
.ty-w{color:#4ad7f2;border-right:.09em solid #4ad7f2;padding-right:.06em;animation:caret .8s step-end infinite}
@keyframes caret{50%{border-color:transparent}}
.ty-lines{margin-top:40px;font-size:clamp(1.2rem,3.4vw,2rem);font-weight:600;letter-spacing:-.03em;line-height:1.3}
.ty-lines span{display:block;overflow:hidden}
.ty-lines i{display:block;font-style:normal;transform:translateY(105%);transition:transform .8s cubic-bezier(.2,.7,.2,1)}
.ty-lines.go i{transform:none}
.ty-lines span:nth-child(2) i{transition-delay:.12s}.ty-lines span:nth-child(3) i{transition-delay:.24s}

/* 7 Contadores */
.ct-row{display:flex;flex-wrap:wrap;gap:clamp(24px,5vw,64px);justify-content:center}
.ct b{display:block;font-size:clamp(2.8rem,8vw,5rem);letter-spacing:-.05em;line-height:1;font-variant-numeric:tabular-nums}
.ct span{color:#9a9a95;font-size:.9rem}
.ct-note{margin-top:30px;font-size:.8rem;color:#6d6d69}

/* 8 Luz que sigue al cursor */
.sp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;width:min(100%,760px)}
.sp{position:relative;height:150px;border-radius:18px;background:#131316;border:1px solid rgba(255,255,255,.08);padding:20px;text-align:left;overflow:hidden;display:flex;align-items:flex-end}
.sp::before{content:"";position:absolute;inset:0;background:radial-gradient(260px circle at var(--x,50%) var(--y,50%),rgba(180,140,255,.28),transparent 60%);opacity:0;transition:opacity .3s}
.sp::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;background:radial-gradient(180px circle at var(--x,50%) var(--y,50%),rgba(200,170,255,.9),transparent 60%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .3s}
.sp:hover::before,.sp:hover::after{opacity:1}
.sp b{position:relative;z-index:1;font-size:1.1rem;letter-spacing:-.02em}

/* 9 Antes y después */
.ba{position:relative;width:min(100%,640px);aspect-ratio:16/10;border-radius:20px;overflow:hidden;cursor:ew-resize;touch-action:pan-y;user-select:none;border:1px solid rgba(255,255,255,.12)}
.ba-l{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:20px}
.ba-after{background:linear-gradient(135deg,#1c1250,#7b5cff 60%,#ff7ac8);color:#fff}
.ba-after b{font-size:clamp(1.6rem,5vw,3rem);letter-spacing:-.04em;display:block}
.ba-after span{opacity:.85}
.ba-before{background:#b9b6a8;color:#3a3a36;clip-path:inset(0 50% 0 0);font-family:"Comic Sans MS","Segoe Print",cursive}
.ba-before b{font-size:clamp(1.4rem,4.4vw,2.6rem);text-shadow:2px 2px 0 #e0dccb;display:block}
.ba-before span{font-size:.9rem}
.ba-tag{position:absolute;top:12px;padding:4px 12px;border-radius:99px;background:rgba(0,0,0,.55);color:#fff;font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;font-family:"Space Grotesk",sans-serif}
.ba-handle{position:absolute;top:0;bottom:0;left:50%;width:3px;background:#fff;transform:translateX(-50%)}
.ba-handle::after{content:"↔";position:absolute;top:50%;left:50%;width:44px;height:44px;margin:-22px;border-radius:50%;background:#fff;color:#080808;display:grid;place-items:center;font-size:1.1rem;box-shadow:0 6px 20px rgba(0,0,0,.4)}

/* 10 Carrusel arrastrable */
.cr{width:100%;overflow:hidden;cursor:grab;touch-action:pan-y}
.cr:active{cursor:grabbing}
.cr-track{display:flex;gap:18px;padding:10px 6vw;will-change:transform}
.cr-card{flex:0 0 min(70%,260px);aspect-ratio:3/4;border-radius:22px;padding:22px;display:flex;align-items:flex-end;text-align:left;font-size:1.4rem;font-weight:700;letter-spacing:-.03em;user-select:none;transition:transform .35s}
.cr-dots{display:flex;gap:8px;justify-content:center;margin-top:20px}
.cr-dots i{width:8px;height:8px;border-radius:50%;background:#3a3a3d;transition:all .3s}.cr-dots i.on{background:#f4f4f1;width:22px;border-radius:99px}

/* 11 Cambio de tema */
.tt{position:relative;width:min(100%,560px);aspect-ratio:16/10;border-radius:20px;overflow:hidden;border:1px solid rgba(255,255,255,.12)}
.tt-l{position:absolute;inset:0;display:grid;align-content:center;justify-items:center;gap:14px;padding:20px;text-align:center}
.tt-l.dark{background:#0d0d12;color:#f4f4f1}.tt-l.light{background:#f6f3ea;color:#16161a}
.tt-l h3{font-size:clamp(1.4rem,4vw,2.2rem);letter-spacing:-.04em}
.tt-l p{opacity:.65;font-size:.95rem}
.tt-top{clip-path:circle(0 at var(--x,50%) var(--y,50%));z-index:2}
.tt-top.go{clip-path:circle(150% at var(--x,50%) var(--y,50%));transition:clip-path .8s cubic-bezier(.5,0,.2,1)}
.tt-l.light 
/* 12 Marquee */
.mq{width:calc(100% + 80px);margin:0 -40px;display:grid;gap:14px;transform:rotate(-3deg)}
.mq-r{display:flex;width:max-content;gap:28px;font-size:clamp(2.2rem,8vw,5rem);font-weight:700;letter-spacing:-.05em;white-space:nowrap;animation:mq 22s linear infinite}
.mq-r:nth-child(2){animation-direction:reverse;color:transparent;-webkit-text-stroke:1.5px #f4f4f1;animation-duration:28s}
.mq:hover .mq-r{animation-play-state:paused}
@keyframes mq{to{transform:translateX(-50%)}}

/* 13 Filtro de galería */
.gf-chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-bottom:24px}
.gf-chips button{padding:8px 18px;border-radius:99px;border:1px solid rgba(244,244,241,.25);background:none;color:#f4f4f1;cursor:pointer;font:inherit;font-size:.9rem;transition:background .25s,color .25s}
.gf-chips button.on{background:#f4f4f1;color:#080808}
.gf-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;width:min(100%,620px)}
.gf-t{aspect-ratio:1;border-radius:16px;display:flex;align-items:flex-end;padding:14px;font-weight:700;letter-spacing:-.02em;text-align:left;transition:transform .45s cubic-bezier(.2,.7,.2,1),opacity .35s}
.gf-t.hide{opacity:0;transform:scale(.6)}

/* 14 Transición entre páginas */
.pg{position:relative;width:min(100%,600px);aspect-ratio:16/10;border-radius:20px;overflow:hidden;border:1px solid rgba(255,255,255,.12);background:#f4f1ea;color:#16161a;text-align:left}
.pg-nav{display:flex;gap:6px;padding:14px 20px;border-bottom:1px solid rgba(0,0,0,.1);font-size:.9rem;position:relative;z-index:1}
.pg-nav b{margin-right:auto}
.pg-nav button{background:none;border:0;cursor:pointer;font:inherit;padding:4px 12px;border-radius:99px;color:#555}
.pg-nav button.on{background:#16161a;color:#fff}
.pg-body{padding:clamp(18px,4vw,36px)}
.pg-body h3{font-size:clamp(1.6rem,5vw,3rem);letter-spacing:-.05em;line-height:1;margin-bottom:10px}
.pg-body p{color:#55554f;max-width:30em}
.pg-cv{position:absolute;inset:0;display:grid;grid-template-columns:repeat(4,1fr);z-index:5;pointer-events:none}
.pg-cv i{background:#16161a;transform:scaleY(0);transform-origin:bottom;transition:transform .45s cubic-bezier(.7,0,.3,1)}
.pg-cv.in i{transform:scaleY(1)}
.pg-cv.out i{transform:scaleY(0);transform-origin:top}
.pg-cv i:nth-child(2){transition-delay:.06s}.pg-cv i:nth-child(3){transition-delay:.12s}.pg-cv i:nth-child(4){transition-delay:.18s}

/* 15 Formulario */
.fm{width:min(100%,380px);text-align:left}
.fm label{display:block;font-size:.85rem;color:#9a9a95;margin-bottom:8px}
.fm input{width:100%;padding:15px 18px;border-radius:14px;border:1.5px solid rgba(255,255,255,.2);background:#141418;color:#f4f4f1;font:inherit;outline:none;transition:border-color .25s,box-shadow .25s}
.fm input:focus{border-color:#4ad7f2;box-shadow:0 0 0 4px rgba(74,215,242,.18)}
.fm.err input{border-color:#ff5c6c;animation:shake .4s}
.fm.ok input{border-color:#5af0a0}
@keyframes shake{20%{transform:translateX(-8px)}40%{transform:translateX(8px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}
.fm-msg{min-height:1.4em;margin:8px 0 16px;font-size:.85rem;color:#ff5c6c;transition:opacity .2s}
.fm.ok .fm-msg{color:#5af0a0}
.fm-go{position:relative;height:52px;width:100%;border-radius:99px;border:0;background:#f4f4f1;color:#080808;font:inherit;font-weight:600;cursor:pointer;transition:width .45s cubic-bezier(.5,0,.2,1),background .3s;display:block;margin:0 auto}
.fm-go svg{position:absolute;inset:0;margin:auto;width:26px;height:26px;fill:none;stroke:#fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:30;stroke-dashoffset:30}
.fm-go.done{width:52px;background:#2fcf86;color:transparent}
.fm-go.done svg{stroke-dashoffset:0;transition:stroke-dashoffset .5s .3s}

/* 16 Carrito */
.cart-bar{position:absolute;top:14px;right:18px;z-index:3}
.cart-i{position:relative;width:44px;height:44px;border-radius:50%;background:#17171b;border:1px solid rgba(255,255,255,.14);display:grid;place-items:center}
.cart-i svg{width:22px;height:22px;fill:none;stroke:#f4f4f1;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.cart-n{position:absolute;top:-4px;right:-4px;min-width:20px;height:20px;border-radius:99px;background:#ff6f9a;color:#080808;font-size:.72rem;font-weight:700;display:grid;place-items:center;transform:scale(0);transition:transform .35s cubic-bezier(.3,1.8,.5,1)}
.cart-n.on{transform:scale(1)}.cart-n.bump{animation:bump .4s}
@keyframes bump{40%{transform:scale(1.5)}}
.prod{width:230px;border-radius:22px;background:#17171b;border:1px solid rgba(255,255,255,.1);padding:14px;text-align:left}
.prod-img{height:170px;border-radius:14px;background:linear-gradient(135deg,#ffb35c,#ff6f9a);display:grid;place-items:center}
.prod-img i{width:70px;height:70px;border-radius:50% 50% 46% 46%;background:#fff6ea}
.prod b{display:block;margin:14px 0 2px;font-size:1.1rem}
.prod span{color:#9a9a95;font-size:.9rem}
.prod .d-btn{width:100%;margin-top:14px;text-align:center;transition:background .3s,color .3s}
.prod .d-btn.added{background:#2fcf86;color:#04140c}
.toast{position:absolute;left:50%;bottom:22px;transform:translate(-50%,40px);background:#f4f4f1;color:#080808;padding:11px 20px;border-radius:99px;font-weight:600;font-size:.9rem;opacity:0;transition:transform .4s cubic-bezier(.3,1.4,.5,1),opacity .3s;z-index:4;white-space:nowrap}
.toast.on{transform:translate(-50%,0);opacity:1}
.fly{position:absolute;width:18px;height:18px;border-radius:50%;background:#ff6f9a;z-index:6;pointer-events:none}

@media(max-width:700px){.sp-grid{grid-template-columns:1fr 1fr}.gf-grid{grid-template-columns:repeat(2,1fr)}}
@media(prefers-reduced-motion:reduce){.mq-r,.ty-w{animation:none}.sr-item{opacity:1;transform:none;filter:none}}

/* Interruptor único del modo claro/oscuro */
.tt-sp{width:64px;height:34px}
.tt-sw{position:absolute;z-index:6;left:0;top:0;width:64px;height:34px;padding:0;border-radius:99px;border:2px solid currentColor;background:none;cursor:pointer;color:#f4f4f1;transition:color .5s .12s}
.tt-sw::after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:currentColor;transition:transform .55s cubic-bezier(.4,1.3,.5,1)}
.tt[data-t="light"] .tt-sw{color:#16161a}
.tt[data-t="light"] .tt-sw::after{transform:translateX(30px)}
/* Botones de las demos: centrados (el estilo global los alinea a la izquierda) */
.demo button{text-align:center}
.fm-go{text-align:center}
