/* ═══ V3.2 OPTIMIZED SHELL ═══ */
/* — THEME KILL — */
#masthead,#site-navigation,.site-header,.header-container,.header-actions,
#colophon,.site-footer,.site-info{display:none!important}
.page-title,.entry-title{display:none!important}
body,html{background:var(–obsidian,#0A0A0A)!important;color:var(–bone,#E8E4DF)!important;
margin:0!important;padding:0!important}
html{color-scheme:dark}
.entry-content,.page-content,.site-main,.content-area,.site-content,
.wp-site-blocks,.has-global-padding{padding:0!important;margin:0 auto!important;
max-width:none!important;width:100%!important;background:transparent!important}
.woocommerce-store-notice,.demo_store{display:none!important}
*{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important;box-sizing:border-box}
/* — VARIABLES — */
:root{
–void:#050505;–obsidian:#0A0A0A;–charcoal:#141414;–smoke:#1E1E1E;
–graphite:#2A2A2A;–ash:#7A7A7A;–slate:#7E7E7E;–mist:#888;–silver:#AAA;
–bone:#E8E4DF;–cream:#F5F0EB;–white:#FAFAFA;
–rose:#B76E79;–rose-dim:rgba(183,110,121,0.12);–rose-glow:rgba(183,110,121,0.35);
–blood:#8B0000;–blood-dim:rgba(139,0,0,0.12);
–gold:#D4AF37;–gold-dim:rgba(212,175,55,0.10);
–font-display:’Bebas Neue’,’Impact’,sans-serif;
–font-editorial:’Cormorant Garamond’,’Georgia’,serif;
–font-heading:’Playfair Display’,’Georgia’,serif;
–font-body:’Inter’,-apple-system,BlinkMacSystemFont,sans-serif;
–ease-expo:cubic-bezier(0.16,1,0.3,1);
–ease-smooth:cubic-bezier(0.25,0.1,0.25,1);
–ease-out-quint:cubic-bezier(0.22,1,0.36,1);
–nav-h:64px;
–container:min(90vw,1400px);
}
/* A11y: Focus visible */
a:focus-visible,button:focus-visible{outline:2px solid var(–rose);outline-offset:3px;border-radius:2px}
.skip-link:focus{position:fixed!important;top:10px;left:10px;z-index:999999;
background:var(–obsidian);color:var(–white);padding:12px 24px;
font-family:var(–font-body);font-size:14px;text-decoration:none;
border:2px solid var(–rose);border-radius:4px}
/* A11y: Reduced motion enhancement */
@media(prefers-reduced-motion:reduce){
*,*::before,*::after{animation-duration:0.01ms!important;animation-iteration-count:1!important;
transition-duration:0.01ms!important;scroll-behavior:auto!important}
}
/* — PAGE TRANSITION — */
.page-transition{position:fixed;inset:0;z-index:999999;pointer-events:none}
.page-transition .curtain{position:absolute;inset:0;background:var(–obsidian);
transform:scaleY(0);transform-origin:bottom;will-change:transform}
/* — LOADER — */
.page-loader{position:fixed;inset:0;z-index:99999;background:var(–void);
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;
transition:opacity .5s var(–ease-expo),visibility .5s}
.page-loader.loaded{opacity:0;visibility:hidden;pointer-events:none}
.loader-counter{font-family:var(–font-display);font-size:clamp(48px,12vw,80px);
letter-spacing:6px;color:var(–white);line-height:1}
.loader-line{width:min(200px,50vw);height:1px;background:var(–graphite);overflow:hidden;border-radius:1px}
.loader-line-fill{height:100%;width:0;background:linear-gradient(90deg,var(–rose),var(–gold));
transition:width .1s linear;border-radius:1px}
.loader-label{font-family:var(–font-editorial);font-size:11px;letter-spacing:5px;
text-transform:uppercase;color:var(–mist);margin-top:4px}
/* — CURSOR — */
.cursor-dot{position:fixed;width:6px;height:6px;background:var(–white);border-radius:50%;
pointer-events:none;z-index:10002;mix-blend-mode:difference;
transition:transform .15s var(–ease-expo),opacity .2s;will-change:transform;top:-3px;left:-3px}
.cursor-ring{position:fixed;width:36px;height:36px;border:1px solid rgba(255,255,255,.25);
border-radius:50%;pointer-events:none;z-index:10001;mix-blend-mode:difference;
transition:width .3s var(–ease-expo),height .3s var(–ease-expo),border-color .3s,opacity .2s;
will-change:transform;top:-18px;left:-18px;display:flex;align-items:center;justify-content:center}
.cursor-text{font-family:var(–font-body);font-size:8px;letter-spacing:2px;text-transform:uppercase;
color:var(–white);opacity:0;transition:opacity .2s;white-space:nowrap}
body.cursor-hover .cursor-ring{width:64px;height:64px;top:-32px;left:-32px;border-color:var(–rose)}
body.cursor-hover .cursor-dot{transform:scale(0)}
body.cursor-text-active .cursor-text{opacity:1}
body.cursor-text-active .cursor-ring{width:80px;height:80px;top:-40px;left:-40px;
background:rgba(10,10,10,.7);backdrop-filter:blur(4px);border-color:var(–rose)}
/* — NAV — */
.nav{position:fixed;top:0;left:0;right:0;z-index:10000;
display:flex;align-items:center;justify-content:space-between;
padding:0 clamp(20px,4vw,48px);height:var(–nav-h);
transition:background .4s var(–ease-expo),backdrop-filter .4s,box-shadow .4s}
.nav.scrolled{background:rgba(5,5,5,.8);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);
box-shadow:0 1px 0 rgba(255,255,255,.04)}
.nav-logo{font-family:var(–font-display);font-size:18px;letter-spacing:8px;
color:var(–white);text-decoration:none;transition:opacity .3s}
.nav-logo:hover{opacity:.7}
.nav-links{display:flex;gap:clamp(20px,3vw,40px);align-items:center}
.nav-links a{font-family:var(–font-body);font-size:11px;letter-spacing:3px;
text-transform:uppercase;color:var(–mist);text-decoration:none;
position:relative;padding:4px 0;transition:color .3s var(–ease-expo)}
.nav-links a::after{content:”;position:absolute;bottom:0;left:0;width:0;height:1px;
background:var(–rose);transition:width .4s var(–ease-expo)}
.nav-links a:hover{color:var(–white)}
.nav-links a:hover::after{width:100%}
.nav-links a.active{color:var(–rose)}
.nav-links a.active::after{width:100%;background:var(–rose)}
.nav-actions{display:flex;align-items:center;gap:16px}
.nav-cart{position:relative;color:var(–mist);transition:color .3s;display:flex;align-items:center}
.nav-cart:hover{color:var(–rose)}
.nav-toggle{display:none;width:24px;height:16px;flex-direction:column;justify-content:space-between;
background:none;border:none;cursor:pointer;padding:0;z-index:10001}
.nav-toggle span{display:block;height:1px;background:var(–white);
transition:transform .4s var(–ease-expo),opacity .3s}
.nav-toggle.open span:nth-child(1){transform:translateY(7.5px) rotate(45deg)}
.nav-toggle.open span:nth-child(2){opacity:0}
.nav-toggle.open span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}
/* — MOBILE DRAWER — */
.nav-drawer{position:fixed;inset:0;z-index:9998;background:rgba(5,5,5,.97);
backdrop-filter:blur(40px);-webkit-backdrop-filter:blur(40px);
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;
opacity:0;visibility:hidden;transition:opacity .5s var(–ease-expo),visibility .5s}
.nav-drawer.open{opacity:1;visibility:visible}
.nav-drawer a{font-family:var(–font-display);font-size:clamp(32px,8vw,56px);
letter-spacing:8px;color:var(–bone);text-transform:uppercase;text-decoration:none;
padding:12px 0;opacity:0;transform:translateY(20px);
transition:color .3s,opacity .5s var(–ease-expo),transform .5s var(–ease-expo)}
.nav-drawer.open a{opacity:1;transform:translateY(0)}
.nav-drawer a:nth-child(1){transition-delay:.05s}
.nav-drawer a:nth-child(2){transition-delay:.1s}
.nav-drawer a:nth-child(3){transition-delay:.15s}
.nav-drawer a:nth-child(4){transition-delay:.2s}
.nav-drawer a:nth-child(5){transition-delay:.25s}
.nav-drawer a:hover{color:var(–rose)}
.nav-drawer a.active{color:var(–rose)}
.nav-drawer .drawer-footer{position:absolute;bottom:clamp(24px,5vh,48px);
font-family:var(–font-editorial);font-size:11px;letter-spacing:4px;
text-transform:uppercase;color:var(–ash)}
/* — SCROLL PROGRESS — */
.scroll-progress{position:fixed;top:0;left:0;height:2px;width:0;
background:linear-gradient(90deg,var(–rose),var(–gold));z-index:10001;
will-change:width;transition:none}
/* — FILM GRAIN — */
.grain{position:fixed;inset:0;z-index:9990;pointer-events:none;opacity:.03;
background-image:url(“data:image/svg+xml,%3Csvg viewBox=’0 0 256 256′ xmlns=’
http://www.w3.org/2000/svg’%3E%3Cfilter id=’n’%3E%3CfeTurbulence type=’fractalNoise’ baseFrequency=’.85′ numOctaves=’4′ stitchTiles=’stitch’/%3E%3C/filter%3E%3Crect width=’100%25′ height=’100%25′ filter=’url(%23n)’/%3E%3C/svg%3E”)}
/* — SPOTLIGHT — */
.spotlight{position:fixed;inset:0;z-index:9989;pointer-events:none;
opacity:0;transition:opacity .6s}
body:not(.is-mobile) .spotlight{opacity:1}
/* — FOOTER — */
.footer{border-top:1px solid var(–graphite);padding:clamp(48px,8vw,96px) clamp(20px,4vw,48px) clamp(24px,4vw,48px);
margin-top:clamp(64px,10vw,120px)}
.footer-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:clamp(24px,4vw,48px);
max-width:var(–container);margin:0 auto}
.footer-brand-name{font-family:var(–font-display);font-size:clamp(16px,2vw,20px);
letter-spacing:6px;color:var(–white);margin-bottom:16px}
.footer-brand-desc{font-family:var(–font-editorial);font-size:14px;line-height:1.7;
color:var(–mist);font-style:italic;max-width:320px}
.footer-col-title{font-family:var(–font-body);font-size:10px;letter-spacing:4px;
text-transform:uppercase;color:var(–slate);margin-bottom:20px;font-weight:500}
.footer-link{display:block;font-family:var(–font-body);font-size:13px;color:var(–mist);
text-decoration:none;padding:6px 0;transition:color .3s,transform .3s var(–ease-expo)}
.footer-link:hover{color:var(–rose);transform:translateX(4px)}
.footer-bottom{display:flex;justify-content:space-between;align-items:center;
max-width:var(–container);margin:clamp(32px,5vw,64px) auto 0;
padding-top:clamp(20px,3vw,32px);border-top:1px solid var(–graphite)}
.footer-copy{font-size:11px;color:var(–ash);letter-spacing:1px}
.footer-badges{display:flex;gap:12px}
.footer-badge{font-size:10px;color:var(–ash);letter-spacing:2px;text-transform:uppercase;
padding:4px 10px;border:1px solid var(–graphite);border-radius:2px}
/* — BACK TO TOP — */
.back-to-top{position:fixed;bottom:clamp(20px,3vw,32px);right:clamp(20px,3vw,32px);
width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.04);
border:1px solid var(–graphite);display:flex;align-items:center;justify-content:center;
z-index:9995;opacity:0;visibility:hidden;transform:translateY(12px);cursor:pointer;
transition:all .4s var(–ease-expo)}
.back-to-top.visible{opacity:1;visibility:visible;transform:translateY(0)}
.back-to-top:hover{background:var(–rose);border-color:var(–rose)}
.back-to-top svg{width:16px;height:16px;stroke:var(–mist);stroke-width:1.5;fill:none;
transition:stroke .3s}
.back-to-top:hover svg{stroke:var(–white)}
/* — MAGNETIC BUTTONS — */
.magnetic{transition:transform .3s var(–ease-expo)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
font-family:var(–font-display);font-size:13px;letter-spacing:4px;text-transform:uppercase;
padding:16px 40px;border:none;cursor:pointer;text-decoration:none;
transition:all .4s var(–ease-expo);position:relative;overflow:hidden}
.btn::after{content:”;position:absolute;inset:0;background:linear-gradient(120deg,
transparent 30%,rgba(255,255,255,.08) 50%,transparent 70%);
transform:translateX(-100%);transition:transform .6s var(–ease-expo)}
.btn:hover::after{transform:translateX(100%)}
.btn-primary{background:var(–rose);color:var(–white);border-radius:2px}
.btn-primary:hover{background:#c4828c;transform:translateY(-2px);
box-shadow:0 8px 32px rgba(183,110,121,.25)}
.btn-outline{background:transparent;color:var(–bone);border:1px solid var(–ash);border-radius:2px}
.btn-outline:hover{border-color:var(–rose);color:var(–rose);transform:translateY(-2px)}
/* — SCROLL REVEALS — */
[data-reveal]{opacity:0;transform:translateY(24px);transition:opacity .7s var(–ease-expo),
transform .7s var(–ease-expo)}
[data-reveal].revealed{opacity:1;transform:translateY(0)}
[data-reveal=”left”]{transform:translateX(-24px)}
[data-reveal=”left”].revealed{transform:translateX(0)}
[data-reveal=”right”]{transform:translateX(24px)}
[data-reveal=”right”].revealed{transform:translateX(0)}
[data-reveal=”scale”]{transform:scale(.95);opacity:0}
[data-reveal=”scale”].revealed{transform:scale(1)}
/* — SECTION DIVIDER — */
.section-divider{width:48px;height:1px;background:linear-gradient(90deg,transparent,var(–ash),transparent);
margin:0 auto}
/* — SCROLLBAR — */
::-webkit-scrollbar{width:5px;background:var(–void)}
::-webkit-scrollbar-thumb{background:var(–graphite);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:var(–ash)}
/* — RESPONSIVE — */
@media(max-width:1024px){
.footer-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:768px){
body{cursor:auto!important;-webkit-text-size-adjust:100%!important;text-size-adjust:100%!important}
a,button{cursor:pointer!important}
*{-webkit-tap-highlight-color:transparent}
html,body{overflow-x:hidden!important;width:100%!important}
.nav{padding:0 16px;height:56px}
.nav-logo{font-size:15px;letter-spacing:6px}
.nav-links{display:none}
.nav-toggle{display:flex}
.cursor-dot,.cursor-ring,.spotlight{display:none!important}
.grain{opacity:.015}
input,select,textarea{font-size:16px!important}
.site-content,.entry-content{-webkit-overflow-scrolling:touch!important}
.footer-grid{grid-template-columns:1fr 1fr;gap:24px}
.footer-bottom{flex-direction:column;gap:16px;text-align:center}
}
@media(max-width:480px){
.nav-logo{font-size:13px;letter-spacing:4px}
.footer-grid{grid-template-columns:1fr}
.footer-brand-desc{max-width:none}
}
/* — REDUCED MOTION — */
@media(prefers-reduced-motion:reduce){
*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
transition-duration:.01ms!important;scroll-behavior:auto!important}
.grain,.spotlight,.cursor-dot,.cursor-ring,.page-transition{display:none!important}
[data-reveal]{opacity:1!important;transform:none!important}
}
.woocommerce-page .btn,.woocommerce-page button:not(.nav-toggle):not(.qty-btn):not(.accordion-toggle) {
font-family:var(–font-display)!important;letter-spacing:3px!important;
}
.btn::before {content:”;position:absolute;inset:0;transform:scaleX(0);transform-origin:left;transition:transform .5s var(–ease-expo);z-index:0}
.btn span {position:relative;z-index:1}
.btn:hover::before {transform:scaleX(1)}
.btn-primary {background:var(–rose);color:var(–void)}
.btn-primary::before {background:var(–white)}
.btn-primary:hover {color:var(–void)}
.btn-outline {border:1px solid rgba(255,255,255,.2);color:var(–bone)}
.btn-outline::before {background:rgba(255,255,255,.08)}
.btn-outline:hover {border-color:rgba(255,255,255,.5)}
.cart-page {padding:clamp(120px,14vw,160px) clamp(24px,5vw,80px) clamp(60px,8vw,100px);max-width:1400px;margin:0 auto}
.cart-header {margin-bottom:clamp(32px,4vw,48px)}
.cart-header h1 {font-family:var(–font-display);font-size:clamp(36px,6vw,64px);letter-spacing:3px;color:var(–white);text-transform:uppercase;line-height:.95}
.cart-header p {font-family:var(–font-editorial);font-size:14px;color:var(–mist);font-style:italic;margin-top:8px}
.cart-layout {display:grid;grid-template-columns:1fr 380px;gap:clamp(32px,4vw,60px)}
.cart-items {display:flex;flex-direction:column;gap:16px}
.empty-cart {text-align:center;padding:clamp(60px,10vw,120px) 24px}
.empty-cart svg {margin:0 auto 24px;color:var(–ash);opacity:.3}
.empty-cart h2 {font-family:var(–font-display);font-size:clamp(24px,4vw,36px);letter-spacing:3px;color:var(–white);text-transform:uppercase;margin-bottom:12px}
.empty-cart p {font-family:var(–font-editorial);font-size:15px;color:var(–mist);font-style:italic;margin-bottom:32px}
.order-summary {position:sticky;top:120px;padding:clamp(24px,3vw,32px);background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);align-self:start}
.order-summary h3 {font-family:var(–font-display);font-size:18px;letter-spacing:4px;color:var(–white);text-transform:uppercase;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.06)}
.summary-row {display:flex;justify-content:space-between;margin-bottom:12px;font-size:14px}
.summary-row span:first-child {color:var(–mist)}
.summary-row.total {font-size:16px;margin-top:20px;padding-top:20px;border-top:1px solid rgba(255,255,255,.06)}
.summary-row.total span:last-child {color:var(–rose);font-family:var(–font-display);letter-spacing:2px}
.promo-code {margin:24px 0}
.promo-code label {display:block;font-family:var(–font-display);font-size:10px;letter-spacing:4px;text-transform:uppercase;margin-bottom:10px;color:var(–mist)}
.promo-input {display:flex;gap:0}
.promo-input input {flex:1;padding:14px 16px;background:transparent;border:1px solid var(–graphite);color:var(–bone);font-family:var(–font-body);font-size:13px;outline:none;transition:border-color .4s}
.promo-input input:focus {border-color:var(–rose)}
.promo-input input::placeholder {color:var(–ash)}
.promo-input button {padding:14px 20px;background:transparent;border:1px solid var(–graphite);border-left:0;color:var(–bone);font-family:var(–font-display);font-size:11px;letter-spacing:3px;text-transform:uppercase;transition:background .3s,color .3s,border-color .3s}
.promo-input button:hover {background:var(–rose);color:var(–void);border-color:var(–rose)}
.cart-btn {display:block;width:100%;padding:16px;font-family:var(–font-display);font-size:13px;letter-spacing:4px;text-transform:uppercase;text-align:center;transition:background .3s,color .3s,border-color .3s,transform .3s var(–ease-expo);margin-bottom:10px}
.cart-btn-primary {background:var(–rose);color:var(–void)}
.cart-btn-primary:hover {background:var(–white)}
.cart-btn-outline {border:1px solid rgba(255,255,255,.12);color:var(–bone)}
.cart-btn-outline:hover {border-color:var(–rose);color:var(–rose)}
.summary-note {margin-top:16px;font-family:var(–font-editorial);font-size:13px;color:var(–ash);text-align:center;font-style:italic}
@media(max-width:1024px){
.cart-layout {grid-template-columns:1fr}
.order-summary {position:static}
}
0
The Skyy Rose Collection
document.addEventListener(‘DOMContentLoaded’,function(){
“use strict”;
/* ── Loader ── */
var loader=document.getElementById(‘pageLoader’),
counter=document.getElementById(‘loaderCounter’),
fill=document.getElementById(‘loaderFill’),
progress=0,loadDone=false;
function finishLoad(){
if(loadDone)return;loadDone=true;
if(counter)counter.textContent=’100′;
if(fill)fill.style.width=’100%’;
setTimeout(function(){if(loader)loader.classList.add(‘loaded’);initPage()},300);
}
if(loader){
var li=setInterval(function(){
progress+=Math.random()*18+7;
if(progress>=100){progress=100;clearInterval(li);finishLoad()}
if(counter)counter.textContent=Math.floor(progress);
if(fill)fill.style.width=progress+’%’;
},40);
setTimeout(finishLoad,2500);
}else{initPage()}
/* ── Mobile detect ── */
var isMobile=’ontouchstart’ in window||navigator.maxTouchPoints>1;
if(isMobile)document.body.classList.add(‘is-mobile’);
/* ── Cursor ── */
if(!isMobile){
var dot=document.getElementById(‘cursorDot’),ring=document.getElementById(‘cursorRing’),
ctxt=document.getElementById(‘cursorText’),mx=0,my=0,cx=0,cy=0,rx=0,ry=0;
document.addEventListener(‘mousemove’,function(e){mx=e.clientX;my=e.clientY},
{passive:true});
(function cursorLoop(){
cx+=(mx-cx)*.2;cy+=(my-cy)*.2;rx+=(mx-rx)*.08;ry+=(my-ry)*.08;
if(dot)dot.style.transform=’translate3d(‘+cx+’px,’+cy+’px,0)’;
if(ring)ring.style.transform=’translate3d(‘+rx+’px,’+ry+’px,0)’;
requestAnimationFrame(cursorLoop);
})();
document.querySelectorAll(‘[data-cursor]’).forEach(function(el){
el.addEventListener(‘mouseenter’,function(){
document.body.classList.add(‘cursor-hover’);
var t=el.getAttribute(‘data-cursor’);
if(t&&t!==’link’){document.body.classList.add(‘cursor-text-active’);if(ctxt)ctxt.textContent=t}
});
el.addEventListener(‘mouseleave’,function(){
document.body.classList.remove(‘cursor-hover’,’cursor-text-active’);
if(ctxt)ctxt.textContent=”;
});
});
}
/* ── Spotlight ── */
var spot=document.getElementById(‘spotlight’);
if(spot&&!isMobile){
document.addEventListener(‘mousemove’,function(e){
spot.style.background=’radial-gradient(500px circle at ‘+e.clientX+’px ‘+e.clientY+’px,’+
‘rgba(183,110,121,.04),transparent 70%)’;
},{passive:true});
}
/* ── Nav scroll ── */
var nav=document.getElementById(‘mainNav’),lastY=0;
window.addEventListener(‘scroll’,function(){
var y=window.scrollY;
if(nav){if(y>60)nav.classList.add(‘scrolled’);else nav.classList.remove(‘scrolled’)}
/* Scroll progress */
var sp=document.getElementById(‘scrollProgress’);
if(sp){var h=document.documentElement.scrollHeight-window.innerHeight;
sp.style.width=h>0?(y/h*100)+’%’:’0′}
/* Back to top */
var btt=document.getElementById(‘backToTop’);
if(btt){if(y>400)btt.classList.add(‘visible’);else btt.classList.remove(‘visible’)}
lastY=y;
},{passive:true});
/* ── Back to top ── */
var btt=document.getElementById(‘backToTop’);
if(btt)btt.addEventListener(‘click’,function(){window.scrollTo({top:0,behavior:’smooth’})});
/* ── Mobile drawer ── */
var nt=document.getElementById(‘navToggle’),nd=document.getElementById(‘navDrawer’);
if(nt&&nd){
nt.addEventListener(‘click’,function(){
nt.classList.toggle(‘open’);nd.classList.toggle(‘open’);nt.setAttribute(‘aria-expanded’,nd.classList.contains(‘open’));nd.setAttribute(‘aria-hidden’,!nd.classList.contains(‘open’));
document.body.style.overflow=nd.classList.contains(‘open’)?’hidden’:”;
});
nd.querySelectorAll(‘a’).forEach(function(a){
a.addEventListener(‘click’,function(){
nt.classList.remove(‘open’);nd.classList.remove(‘open’);
document.body.style.overflow=”;
});
});
}
/* ── Magnetic buttons ── */
if(!isMobile){
document.querySelectorAll(‘.magnetic,.btn’).forEach(function(el){
el.addEventListener(‘mousemove’,function(e){
var r=el.getBoundingClientRect(),
dx=e.clientX-r.left-r.width/2,
dy=e.clientY-r.top-r.height/2;
el.style.transform=’translate(‘+dx*.25+’px,’+dy*.25+’px)’;
});
el.addEventListener(‘mouseleave’,function(){el.style.transform=”});
});
}
/* ── Page transitions ── */
document.querySelectorAll(‘a[href^=”/”]’).forEach(function(a){
if(a.getAttribute(‘target’)===’_blank’)return;
a.addEventListener(‘click’,function(e){
var href=a.getAttribute(‘href’);
if(!href||href===’#’||href===window.location.pathname+window.location.search)return;
e.preventDefault();
var curtain=document.querySelector(‘.page-transition .curtain’);
if(curtain){
curtain.style.transition=’transform .4s ‘+getComputedStyle(document.documentElement).getPropertyValue(‘–ease-expo’);
curtain.style.transformOrigin=’bottom’;
curtain.style.transform=’scaleY(1)’;
setTimeout(function(){window.location.href=href},420);
}else{window.location.href=href}
});
});
/* ── Init page (called after loader) ── */
function initPage(){
/* Lenis */
if(typeof Lenis!==’undefined’){
var lenis=new Lenis({duration:1.0,easing:function(t){return Math.min(1,1.001-Math.pow(2,-10*t))},
smoothWheel:true,touchMultiplier:1.5});
function raf(time){lenis.raf(time);requestAnimationFrame(raf)}
requestAnimationFrame(raf);
if(typeof gsap!==’undefined’&&typeof ScrollTrigger!==’undefined’){
gsap.registerPlugin(ScrollTrigger);
lenis.on(‘scroll’,ScrollTrigger.update);
gsap.ticker.add(function(time){lenis.raf(time*1000)});
gsap.ticker.lagSmoothing(0);
}
}
/* Scroll reveals (IntersectionObserver) */
if(‘IntersectionObserver’ in window){
var ro=new IntersectionObserver(function(entries){
entries.forEach(function(e){
if(e.isIntersecting){e.target.classList.add(‘revealed’);ro.unobserve(e.target)}
});
},{threshold:0.1,rootMargin:’0px 0px -40px 0px’});
document.querySelectorAll(‘[data-reveal]’).forEach(function(el){ro.observe(el)});
}else{
document.querySelectorAll(‘[data-reveal]’).forEach(function(el){el.classList.add(‘revealed’)});
}
/* Emit custom event for page-specific JS */
window.dispatchEvent(new CustomEvent(‘v3ready’));
}
});
window.addEventListener(‘v3ready’, function() {
if(typeof gsap!==’undefined’){
gsap.registerPlugin(ScrollTrigger);
gsap.from(‘.cart-header’,{y:30,opacity:0,duration:0.7,ease:’power2.out’,delay:0.3});
gsap.from(‘.cart-items’,{y:20,opacity:0,duration:0.6,ease:’power2.out’,delay:0.5});
gsap.from(‘.order-summary’,{y:20,opacity:0,duration:0.6,ease:’power2.out’,delay:0.6});
}
});