@property --accent{syntax:'<color>';inherits:true;initial-value:#e9a7c0}
@property --x{syntax:'<length>';inherits:true;initial-value:0px}
@property --y{syntax:'<length>';inherits:true;initial-value:0px}
@property --rx{syntax:'<length>';inherits:true;initial-value:100px}
@property --ry{syntax:'<length>';inherits:true;initial-value:100px}
:root{--accent:#e9a7c0;
  --bg:#0b0a0d; --ink:#f1ebe3; --mute:rgba(241,235,227,.55); --rose:#e9a7c0;
  --line:rgba(255,255,255,.12); --glass:rgba(20,18,24,.78);
  --ease:cubic-bezier(.65,.02,.15,1);
  --serif:"Cormorant Garamond",Georgia,serif; --sans:Inter,system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{background:var(--bg);color:var(--ink);font-family:var(--sans)}
body{overflow-x:hidden;min-height:100vh;transition:--accent .8s var(--ease)}
html.zoom,html.zoom body{overflow:hidden;touch-action:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}

/* basalt backdrop */
.rock{position:fixed;inset:0;z-index:0;background:#17161a url(assets/basalt.jpg) center/cover no-repeat}
.rock::after{content:"";position:absolute;inset:0;
  background:linear-gradient(rgba(8,7,12,.38),rgba(8,7,12,.38)),
             radial-gradient(120% 70% at 50% 30%,transparent 30%,rgba(0,0,0,.6) 100%),
             linear-gradient(to bottom,transparent 52%,#050407 92%)}

/* header */
.bar{position:fixed;top:0;left:0;right:0;z-index:30;display:flex;justify-content:space-between;align-items:center;
  padding:calc(env(safe-area-inset-top) + 18px) 18px 0}
.brand{text-decoration:none;color:var(--ink);display:flex;flex-direction:column;gap:6px}
.brand-name{font-family:var(--serif);font-size:30px;letter-spacing:.42em;font-weight:400}
.brand-sub{font-size:9px;letter-spacing:.38em;color:var(--mute)}
.pill{display:flex;align-items:center;gap:12px;padding:11px 16px;white-space:nowrap;flex-shrink:0;border-radius:999px;
  background:rgba(12,11,15,.72);border:1px solid var(--line);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  font-size:14px;letter-spacing:.06em;color:var(--mute)}
.pill i{width:4px;height:4px;border-radius:50%;background:var(--mute)}
.pill button{color:var(--ink);white-space:nowrap;display:inline-flex;align-items:center} 
.pill b{display:inline-grid;place-items:center;min-width:24px;height:24px;border-radius:12px;margin-left:4px;
  background:var(--accent);color:#120d10;font-weight:500;font-size:12px;transition:transform .3s}
.pill b.bump{transform:scale(1.4)}

/* stage + scene (the real photo) */
.hero{position:relative;height:175vh;height:175svh}
.stage{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;z-index:5}
.cam{position:absolute;inset:0;animation:push 1.6s var(--ease) both}
@keyframes push{from{transform:scale(1.08);opacity:0}to{transform:none;opacity:1}}
.scene{position:absolute;left:0;top:0;width:100px;height:100px;transform-origin:0 0;transition:transform 1.3s var(--ease);will-change:transform;
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 14%,#000 94%,transparent),linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);
  -webkit-mask-composite:source-in;mask-image:linear-gradient(to bottom,transparent,#000 14%,#000 94%,transparent),linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);mask-composite:intersect}
.scene img{position:absolute;inset:0;width:100%;height:100%;display:block;user-select:none}
.shade{position:absolute;inset:-50%;pointer-events:none;opacity:0;transition:opacity 1s var(--ease) .1s,--x 1.3s var(--ease),--y 1.3s var(--ease),--rx 1.3s var(--ease),--ry 1.3s var(--ease);
  background:radial-gradient(ellipse var(--rx) var(--ry) at var(--x) var(--y),transparent 55%,rgba(4,3,7,.92) 100%)}
body.zoom .shade{opacity:1}
.wall{position:absolute;inset:0}
.niche{position:absolute;left:var(--l);top:var(--t);width:var(--w);height:var(--h);cursor:pointer;border-radius:2px}
.niche::before{content:"";position:absolute;left:50%;top:1.2%;width:36%;aspect-ratio:1;transform:translate(-50%,-30%);border-radius:50%;
  background:radial-gradient(circle,rgba(255,244,225,.85),rgba(255,230,190,.25) 40%,transparent 70%);animation:glow 5s ease-in-out infinite;animation-delay:var(--d,0s);pointer-events:none}
@keyframes glow{0%,100%{opacity:.55;transform:translate(-50%,-30%) scale(.9)}50%{opacity:1;transform:translate(-50%,-30%) scale(1.15)}}
.niche::after{content:"";position:absolute;inset:0;border-radius:2px;background:rgba(255,255,255,0);transition:background .4s,box-shadow .4s}
.niche:hover::after,.niche:focus-visible::after{background:rgba(255,235,210,.07);box-shadow:inset 0 0 0 1px rgba(255,235,210,.35)}
.niche:focus-visible{outline:none}
.tag{position:absolute;left:50%;top:100%;margin-top:.5%;transform:translateX(-50%);padding:.25em .7em;border-radius:999px;
  font-family:var(--serif);font-size:calc(var(--sw,430px)*.034);letter-spacing:.08em;color:rgba(241,235,227,.85);
  background:rgba(8,7,11,.55);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border:1px solid var(--line);white-space:nowrap;transition:opacity .5s}
body.zoom .niche{cursor:default}
body.zoom .niche:not(.active){pointer-events:none}
body.zoom .niche:not(.active) .tag{opacity:0}
body.zoom .niche.active::before{opacity:1;animation:none;transform:translate(-50%,-30%);background:radial-gradient(circle,rgba(255,244,225,.9),color-mix(in srgb,var(--accent) 35%,transparent) 40%,transparent 70%)}
body.zoom .niche::after{display:none}
body.zoom .intro{opacity:0;transform:translateY(20px);pointer-events:none}

/* hero text: builds up as you scroll */
.herofade{position:absolute;left:0;right:0;bottom:0;height:62%;pointer-events:none;opacity:var(--p,0);
  background:linear-gradient(transparent,rgba(5,4,8,.88) 45%,rgba(5,4,8,.96))}
.intro{position:absolute;z-index:10;left:0;right:0;bottom:0;padding:0 28px calc(env(safe-area-inset-bottom) + 30px);
  pointer-events:none;transition:opacity .6s,transform .8s var(--ease)}
.eyebrow{font-size:11px;letter-spacing:.32em;text-transform:uppercase;color:var(--mute);margin-bottom:12px}
.intro h1{font-family:var(--serif);font-weight:400;font-size:clamp(46px,14vw,80px);line-height:1;letter-spacing:-.01em}
.intro h1 em{color:var(--rose);font-style:italic}
.lede{margin-top:16px;max-width:30ch;font-size:19px;line-height:1.55;color:var(--mute);font-weight:300}
.hint{margin-top:22px;font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:rgba(241,235,227,.4)}
.w,.sp{display:inline-block;opacity:0;transform:translateY(60%) rotateX(-40deg);filter:blur(10px);transform-origin:50% 100%;
  transition:opacity .9s var(--ease),transform 1s var(--ease),filter .9s var(--ease);transition-delay:calc(var(--i,0)*.12s + .1s)}
.intro .r1,.intro .r4{opacity:0;transform:translateY(14px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.intro .r4{transition-delay:1s}
.intro.in .w,.intro.in .sp{opacity:1;transform:none;filter:none}
.intro.in .r1,.intro.in .r4{opacity:1;transform:none}
.intro.in .r4{animation:pulse 2.6s 2s infinite}
@keyframes pulse{50%{opacity:.35}}
.cue{position:absolute;z-index:9;left:50%;bottom:calc(env(safe-area-inset-bottom) + 26px);transform:translateX(-50%);
  display:flex;flex-direction:column;align-items:center;gap:10px;font-size:10px;letter-spacing:.4em;text-transform:uppercase;color:rgba(241,235,227,.7);
  transition:opacity .5s;pointer-events:none;text-shadow:0 1px 8px #000}
.cue i{width:1px;height:38px;background:linear-gradient(rgba(241,235,227,.8),transparent);transform-origin:top;animation:drip 2s var(--ease) infinite}
@keyframes drip{0%{transform:scaleY(0)}60%{transform:scaleY(1);opacity:1}100%{transform:scaleY(1);opacity:0}}
.cue.gone{opacity:0}

/* immersive product view */
.detail{position:fixed;z-index:40;left:0;right:0;bottom:0;padding:70px 28px calc(env(safe-area-inset-bottom) + 16px);
  background:linear-gradient(transparent,rgba(5,4,8,.88) 26%,#050407 52%);
  opacity:0;transform:translateY(40px);pointer-events:none;transition:opacity .6s var(--ease),transform .9s var(--ease)}
body.zoom .detail{opacity:1;transform:none;pointer-events:auto;transition-delay:.45s}
.detail .eyebrow{font-size:11px;margin-bottom:6px}
.detail h2{font-family:var(--serif);font-weight:400;font-size:clamp(42px,12.5vw,66px);line-height:1;letter-spacing:-.01em}
.detail h2 em{color:var(--accent);font-style:italic}
.desc{margin-top:10px;font-size:15.5px;line-height:1.45;color:var(--mute);font-weight:300;min-height:2.9em;max-width:34ch}
.buyrow{display:flex;align-items:baseline;gap:16px;margin:10px 0 14px}
.price{font-family:var(--serif);font-size:34px}
.unit{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--mute)}
.swap{transition:opacity .28s,transform .28s var(--ease)}
.swap.out{opacity:0;transform:translateY(12px)}
.dots{display:flex;justify-content:center;gap:8px;margin-top:16px}
.dots i{width:6px;height:6px;border-radius:3px;background:rgba(255,255,255,.25);transition:width .5s var(--ease),background .5s}
.dots i.on{width:26px;background:var(--accent)}
.gesture{margin-top:10px;text-align:center;font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--mute);opacity:0;transition:opacity .8s}
.gesture.show{opacity:1}
.close{position:absolute;top:16px;right:16px;width:36px;height:36px;border-radius:50%;border:1px solid var(--line);font-size:22px;line-height:1;display:grid;place-items:center;transition:background .2s}
.close:hover{background:rgba(255,255,255,.08)}
.add{width:100%;display:flex;justify-content:center;align-items:center;gap:12px;padding:17px;border-radius:14px;
  background:var(--accent);color:#120d10;font-size:12px;letter-spacing:.28em;text-transform:uppercase;font-weight:500;
  box-shadow:0 10px 30px -10px var(--accent);transition:transform .2s,filter .2s}
.add:active{transform:scale(.98)}.add:hover{filter:brightness(1.08)}
.add i{font-style:normal;transition:transform .3s}.add:hover i{transform:translateX(4px)}
.add.done{filter:brightness(1.15)}
#checkoutBtn i{display:none}
@media (min-width:900px){.detail{right:auto;max-width:560px;padding-left:6vw;background:linear-gradient(90deg,#050407cc 60%,transparent);top:0;display:flex;flex-direction:column;justify-content:flex-end;padding-top:0}}

/* bag drawer */
.scrim{position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.6);opacity:0;pointer-events:none;transition:opacity .5s}
.drawer{position:fixed;z-index:60;top:0;right:0;bottom:0;width:min(420px,100%);padding:calc(env(safe-area-inset-top) + 22px) 22px 22px;
  background:#0f0e12;border-left:1px solid var(--line);display:flex;flex-direction:column;
  transform:translateX(100%);transition:transform .7s var(--ease)}
body.bag .drawer{transform:none}body.bag .scrim{opacity:1;pointer-events:auto}
.drawer-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}
.drawer-head h3{font-family:var(--serif);font-weight:400;font-size:30px}
.drawer .close{position:static}
#bagList{list-style:none;flex:1;overflow:auto}
#bagList li{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--line)}
#bagList .dot{width:34px;height:34px;border-radius:50%;background:var(--c);box-shadow:inset 0 0 0 1px rgba(255,255,255,.2)}
#bagList .t{flex:1}#bagList .t b{display:block;font-weight:400;font-size:16px}#bagList .t small{color:var(--mute)}
#bagList .rm{color:var(--mute);font-size:12px;letter-spacing:.14em;text-transform:uppercase}
.empty{color:var(--mute);margin:auto;display:none}.empty.show{display:block}
.drawer-foot{padding-top:16px}.total{display:flex;justify-content:space-between;margin-bottom:14px;font-size:18px}

.toast{position:fixed;z-index:70;left:50%;top:calc(env(safe-area-inset-top) + 96px);transform:translate(-50%,-20px);opacity:0;
  padding:12px 20px;border-radius:999px;background:#e8dcc7;color:#17130e;font-size:13px;pointer-events:none;transition:all .5s var(--ease)}
.toast.show{opacity:1;transform:translate(-50%,0)}

@media (min-width:900px){
  .brand-name{font-size:34px}
  .intro{padding-left:8vw}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition-duration:.01s!important}}

/* header turns solid once you leave the wall */
.bar{transition:background .5s,backdrop-filter .5s}
.bar.solid{background:linear-gradient(rgba(5,4,8,.92),rgba(5,4,8,.6) 70%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);padding-bottom:16px}

/* ---- sections below the wall ---- */
.after{position:relative;z-index:6;background:linear-gradient(rgba(5,4,8,.94),rgba(5,4,8,.94)),url(assets/basalt.jpg) center/cover fixed;overflow:hidden}
.after section,.foot{padding:0 24px}
.reveal{opacity:0;transform:translateY(34px);filter:blur(6px);transition:opacity 1s var(--ease),transform 1.1s var(--ease),filter 1s var(--ease);transition-delay:var(--d,0s)}
.reveal.in{opacity:1;transform:none;filter:none}

.story{padding-top:18vh!important;padding-bottom:16vh!important}
.statement{font-family:var(--serif);font-size:clamp(30px,8.6vw,64px);line-height:1.22;max-width:18em}
.sw{opacity:.14;transition:opacity .25s linear;display:inline}
.sw.on{opacity:1}

.five{padding-bottom:14vh!important}
.five h2{font-family:var(--serif);font-weight:400;font-size:clamp(38px,11vw,64px);line-height:1.05;margin-bottom:34px}
.five h2 em{color:var(--rose)}
.rows{list-style:none;display:grid;gap:14px}
.row{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:18px;padding:14px;border-radius:20px;cursor:pointer;
  background:rgba(255,255,255,.03);border:1px solid var(--line);
  opacity:0;transform:translateX(var(--dx,60px)) scale(.97);transition:opacity .9s var(--ease),transform 1s var(--ease),background .3s,border-color .3s;transition-delay:var(--d,0s)}
.row:nth-child(even){--dx:-60px}
.row.in{opacity:1;transform:none}
.row:hover,.row:active{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.28)}
.thumb{height:112px;border-radius:6px;background-image:url(assets/scene.webp);background-repeat:no-repeat;box-shadow:0 0 0 1px rgba(255,255,255,.1)}
.row .n{font-size:10px;letter-spacing:.3em;color:var(--mute)}
.row h3{font-family:var(--serif);font-weight:400;font-size:28px;margin:4px 0 6px}
.row h3 em{color:var(--c);font-style:italic}
.row p{font-size:13px;color:var(--mute);line-height:1.5}
.row .pr{font-family:var(--serif);font-size:22px;white-space:nowrap}

.facts{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding-bottom:12vh!important;text-align:center}
.fact b{display:block;font-family:var(--serif);font-weight:400;font-size:clamp(44px,14vw,80px);line-height:1;color:var(--rose)}
.fact span{display:block;margin-top:10px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mute);line-height:1.5}

.foot{text-align:center;padding-top:6vh!important;padding-bottom:calc(env(safe-area-inset-bottom) + 40px)!important;color:var(--mute);font-size:13px}
.foot .brand-name{color:var(--ink);font-size:32px;margin-bottom:8px}
.totop{margin:26px 0 34px;padding:14px 24px;border-radius:999px;border:1px solid var(--line);color:var(--ink);font-size:12px;letter-spacing:.2em;text-transform:uppercase}
.foot small{display:block;opacity:.5}

@media (min-width:900px){
  .after section,.foot{max-width:760px;margin:0 auto}
  .intro{left:6vw;right:auto;max-width:560px;padding-left:0}
}
@media (prefers-reduced-motion:reduce){.reveal,.row,.w,.sp{opacity:1!important;transform:none!important;filter:none!important}}

@media (max-width:440px){
  .bar{padding-left:16px;padding-right:14px}
  .brand-name{font-size:25px;letter-spacing:.34em}
  .brand-sub{font-size:8px;letter-spacing:.3em}
  .pill{font-size:13px;gap:10px;padding:10px 14px}
}
body.zoom .niche .tag{opacity:0}
html.zoom body{-webkit-user-select:none;user-select:none}
