/* STREETIX posters
   Design read: street-culture car poster shop for enthusiasts, dark and bold, native CSS (static site).
   Dials: VARIANCE 7 / MOTION 4 / DENSITY 4.
   Shape rule: containers 16px, controls 10px, filter chips full pill. */

@font-face{font-family:"Unbounded";src:url("fonts/unbounded.woff") format("woff");font-weight:200 900;font-display:swap}
@font-face{font-family:"Onest";src:url("fonts/onest.woff") format("woff");font-weight:100 900;font-display:swap}

:root{
  --bg:#0b0b0d; --bg2:#111114; --card:#141417; --border:#24242a; --border-strong:#34343c;
  --text:#f2f2f4; --muted:#9a9aa4;
  --accent:#ff4d42;          /* accent for text and lines on dark */
  --accent-fill:#d42a20;     /* button fill, white label passes AA */
  --on-accent:#fafafa;
  --navbg:rgba(11,11,13,.86);
  --post1:#1c1c22; --post2:#0e0e11;
  --shadow:0 14px 32px -14px rgba(0,0,0,.75);
  --shadow-float:0 8px 16px -6px rgba(0,0,0,.55);
  --r-lg:16px; --r-md:10px;
  --ease:cubic-bezier(.16,1,.3,1);
  --display:"Unbounded",system-ui,sans-serif;
  --body:"Onest",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:#f5f5f6; --bg2:#ffffff; --card:#ffffff; --border:#e2e2e7; --border-strong:#cfcfd6;
  --text:#141416; --muted:#5e5e68;
  --accent:#d42a20;
  --navbg:rgba(245,245,246,.88);
  --post1:#ececee; --post2:#dcdce1;
  --shadow:0 14px 30px -16px rgba(40,20,20,.28);
  --shadow-float:0 8px 16px -8px rgba(40,20,20,.2);
  color-scheme:light;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;scroll-padding-top:80px}
body{
  background:var(--bg);color:var(--text);font-family:var(--body);font-size:16px;line-height:1.5;
  padding-bottom:env(safe-area-inset-bottom,0);
  -webkit-font-smoothing:antialiased;transition:background-color .25s,color .25s;
}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
img{display:block;max-width:100%}
.wrap{max-width:1200px;margin:0 auto;padding:0 20px}
.i{width:20px;height:20px;flex:none;fill:currentColor}

/* focus */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* ---------- nav ---------- */
nav{position:sticky;top:0;z-index:50;background:var(--navbg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);padding-top:env(safe-area-inset-top,0)}
.nav-row{display:flex;align-items:center;justify-content:space-between;gap:20px;height:68px}
.logo{font-family:var(--display);font-weight:800;font-size:17px;letter-spacing:.02em;white-space:nowrap}
.logo span{color:var(--accent);font-weight:500}
nav .links{display:flex;gap:26px;font-size:14px;color:var(--muted);white-space:nowrap}
nav .links a{transition:color .2s}
nav .links a:hover{color:var(--text)}
.nav-actions{display:flex;align-items:center;gap:8px;position:relative}
.icon-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:var(--r-md);border:1px solid var(--border);background:var(--card);cursor:pointer;transition:border-color .2s,transform .15s}
.icon-btn:hover{border-color:var(--border-strong)}
.icon-btn:active{transform:scale(.96)}
#cartCount{position:absolute;top:-6px;right:-6px;min-width:19px;height:19px;padding:0 5px;border-radius:999px;background:var(--accent-fill);color:var(--on-accent);font-size:11px;font-weight:700;line-height:19px;text-align:center}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;padding:12px 20px;border-radius:var(--r-md);border:1px solid var(--border-strong);background:transparent;color:var(--text);font-size:15px;font-weight:600;cursor:pointer;transition:background-color .2s,border-color .2s,transform .15s}
.btn .i{width:18px;height:18px;transition:transform .25s var(--ease)}
.btn:hover .i{transform:translateX(3px)}
.btn.ghost:hover{border-color:var(--text)}
.btn.solid{background:var(--accent-fill);border-color:var(--accent-fill);color:var(--on-accent)}
.btn.solid:hover{background:#bd2319;border-color:#bd2319}
.btn:active{transform:translateY(1px) scale(.98)}
.btn.full{width:100%}
.nav-cta{padding:10px 16px;font-size:14px}

/* ---------- type ---------- */
h1,h2{font-family:var(--display);font-weight:800;letter-spacing:-.02em}
h1{font-size:clamp(28px,3.9vw,54px);line-height:1.08}
h2{font-size:clamp(24px,3vw,34px);line-height:1.15;margin-bottom:10px}
.sub{color:var(--muted);font-size:16px;max-width:60ch;margin-bottom:28px}

section{padding:88px 0}

/* ---------- hero ---------- */
.hero{padding:72px 0 88px}
.hero-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:48px;align-items:center}
.hero-sub{color:var(--muted);font-size:18px;max-width:44ch;margin-top:20px}
.hero-ctas{display:flex;gap:12px;flex-wrap:wrap;margin-top:32px}
.hero-art{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.hp{aspect-ratio:3/4;border-radius:var(--r-lg);overflow:hidden;background:linear-gradient(160deg,var(--post1),var(--post2));box-shadow:var(--shadow)}
.hp img{width:100%;height:100%;object-fit:cover}
.hp-b{margin-top:72px}

/* Hero copy: gentle one-time rise. */
.anim .hero-copy > *{animation:rise .8s var(--ease) both}
.anim .hero-copy > :nth-child(2){animation-delay:.08s}
.anim .hero-copy > :nth-child(3){animation-delay:.16s}
@keyframes rise{from{opacity:.35;transform:translateY(16px)}to{opacity:1;transform:none}}

/* Hero posters: an ink curtain with a red leading edge lifts off each poster,
   the print settles from grayscale and slight zoom into full color.
   Runs only when JS marks the page .anim and both images are decoded (.ready). */
.hp{position:relative}
.anim .hp::after{content:"";position:absolute;inset:0;background:var(--bg);border-bottom:3px solid var(--accent-fill);z-index:1;transform:translateY(0)}
.anim .hp img{transform:scale(1.14);filter:grayscale(1) contrast(1.15)}
.anim .hero-art.ready .hp::after{animation:curtain 1.15s cubic-bezier(.77,0,.18,1) forwards}
.anim .hero-art.ready .hp img{animation:settle 1.9s var(--ease) forwards}
.anim .hero-art.ready .hp-b::after,.anim .hero-art.ready .hp-b img{animation-delay:.22s}
@keyframes curtain{
  0%{transform:translateY(0)}
  88%{border-bottom-color:var(--accent-fill)}
  100%{transform:translateY(calc(-100% - 4px));border-bottom-color:transparent}
}
@keyframes settle{
  0%{transform:scale(1.14);filter:grayscale(1) contrast(1.15)}
  45%{filter:grayscale(1) contrast(1.15)}
  100%{transform:scale(1);filter:grayscale(0) contrast(1)}
}

/* ---------- stats ---------- */
.stats-strip{padding:0}
.stats{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.stats div{padding:26px 0}
.stats div + div{padding-left:28px;border-left:1px solid var(--border)}
.stats b{display:block;font-family:var(--display);font-size:clamp(20px,2.4vw,28px);font-weight:700;color:var(--text)}
.stats span{font-size:14px;color:var(--muted)}

/* ---------- catalog ---------- */
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:26px}
.chip{padding:9px 16px;border-radius:999px;border:1px solid var(--border);background:transparent;font-size:14px;font-weight:600;color:var(--muted);cursor:pointer;transition:color .2s,border-color .2s,background-color .2s}
.chip:hover{color:var(--text);border-color:var(--border-strong)}
.chip.active{background:var(--text);border-color:var(--text);color:var(--bg)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:20px}
.card{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;cursor:pointer;transition:transform .35s var(--ease),border-color .25s,box-shadow .35s var(--ease)}
.card:hover,.card:focus-visible{transform:translateY(-4px);border-color:var(--border-strong);box-shadow:var(--shadow-float)}
.card:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.poster{aspect-ratio:3/4;position:relative;overflow:hidden;background:linear-gradient(160deg,var(--post1),var(--post2));display:flex;align-items:center;justify-content:center}
.poster img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
.card:hover .poster img{transform:scale(1.03)}
.poster .service-icon{width:38%;height:auto;aspect-ratio:1;color:var(--accent);opacity:.9}
.poster .title{font-family:var(--display);font-size:20px;font-weight:800;padding:16px;text-align:center}
.card .meta{padding:14px 16px 16px;display:flex;flex-direction:column;gap:8px;flex:1}
.card .meta .row{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.card .meta .row b{flex:1;min-width:0;font-size:14px;font-weight:700;letter-spacing:.01em;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.price{color:var(--accent);font-weight:700;white-space:nowrap;font-size:15px}
.hit{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--accent);text-transform:uppercase}
.card .meta p{color:var(--muted);font-size:13px;line-height:1.4}
.addcart{margin-top:auto;width:100%;padding:10px;border-radius:var(--r-md);border:1px solid var(--border);background:var(--bg2);color:var(--text);font-size:13px;font-weight:600;cursor:pointer;transition:border-color .2s,background-color .2s,transform .15s}
.addcart:hover{border-color:var(--text)}
.addcart:active{transform:scale(.98)}
.addcart.added{border-color:var(--accent);color:var(--accent)}
.more-row{display:flex;justify-content:center;margin-top:32px}

/* ---------- constructor ---------- */
#constructor{background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.grid2{display:grid;grid-template-columns:1.1fr 1fr;gap:56px;align-items:start}
.steps{list-style:none;display:flex;flex-direction:column;gap:22px;counter-reset:s}
.steps li{display:flex;flex-direction:column;gap:4px;padding-left:18px;border-left:1px solid var(--border-strong)}
.steps li b{font-size:16px}
.steps li span{color:var(--muted);font-size:15px}
.price-line{margin-top:30px;color:var(--muted);font-size:14px}
.price-line b{font-family:var(--display);color:var(--text);font-size:22px;margin-right:6px}
form{background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:26px;display:flex;flex-direction:column;gap:16px}
form label{display:flex;flex-direction:column;gap:8px;font-size:13px;font-weight:600;color:var(--text)}
form label small{font-weight:400;color:var(--muted);font-size:12px}
form input,form select,form textarea,.field{background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--r-md);padding:12px 14px;color:var(--text);font:inherit;font-size:15px;font-weight:400;width:100%;transition:border-color .2s}
::placeholder{color:var(--muted);opacity:1}
form input:focus,form select:focus,form textarea:focus,.field:focus{outline:none;border-color:var(--accent)}
form textarea{min-height:90px;resize:vertical}
.form-note{font-size:13px;color:var(--muted)}

/* ---------- reviews (the one marquee on the page) ---------- */
.reviews-wrap{overflow:hidden;padding:14px 0 18px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.reviews{display:flex;width:max-content;will-change:transform}
.rcard{position:relative;width:300px;flex:none;margin-right:18px;background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:26px 24px 22px;display:flex;flex-direction:column;justify-content:space-between;gap:18px;transition:opacity .5s var(--ease),transform .5s var(--ease),border-color .4s}
.rcard::before{content:"\201C";position:absolute;top:6px;right:18px;font-family:var(--display);font-size:64px;line-height:1;color:var(--accent);opacity:.18;pointer-events:none}
.rcard blockquote{font-size:16px;line-height:1.5}
.rcard figcaption{font-size:13px;color:var(--muted)}
.reviews-wrap:hover .rcard{opacity:.5}
.reviews-wrap .rcard:hover{opacity:1;transform:translateY(-6px);border-color:var(--border-strong)}
@media (prefers-reduced-motion:reduce){.reviews-wrap{overflow-x:auto}}

/* ---------- contacts ---------- */
.contacts-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:56px;align-items:start}
.big-phone{display:inline-block;font-family:var(--display);font-size:clamp(22px,3vw,32px);font-weight:700;border-bottom:2px solid var(--accent);padding-bottom:4px;transition:color .2s}
.big-phone:hover{color:var(--accent)}
.clist{list-style:none;border-top:1px solid var(--border)}
.clist a{display:grid;grid-template-columns:24px 1fr 20px;align-items:center;gap:14px;padding:18px 4px;border-bottom:1px solid var(--border)}
.clist a .i{width:22px;height:22px;color:var(--muted);transition:color .2s}
.clist a div{display:flex;gap:14px;align-items:baseline;min-width:0}
.clist a b{width:120px;flex:none}
.clist a span{color:var(--muted);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.clist a .go{width:18px;height:18px}
.clist a div{transition:transform .3s var(--ease)}
.clist a:hover div{transform:translateX(6px)}
.clist a:hover .i{color:var(--accent)}

footer{border-top:1px solid var(--border);padding:28px 0;color:var(--muted);font-size:13px}

/* ---------- overlays ---------- */
#cartPanel,#assortModal,#productModal{position:fixed;z-index:70;display:none}
#cartPanel{top:0;right:0;bottom:0;width:340px;max-width:90vw;flex-direction:column;background:var(--card);box-shadow:var(--shadow-float);padding-top:env(safe-area-inset-top,0);padding-bottom:env(safe-area-inset-bottom,0)}
#cartPanel.open{display:flex}
#cartHead{padding:18px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;font-weight:700}
.close{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--r-md);background:none;border:1px solid transparent;color:var(--muted);cursor:pointer}
.close:hover{color:var(--text);border-color:var(--border)}
#cartItems{flex:1;overflow-y:auto;padding:14px 18px;display:flex;flex-direction:column;gap:12px}
.cart-empty{color:var(--muted);font-size:14px}
.citem{display:flex;align-items:center;gap:12px;font-size:13px;padding-bottom:12px;border-bottom:1px solid var(--border)}
.citem .cithumb{width:46px;height:58px;border-radius:8px;overflow:hidden;flex:none;background:linear-gradient(160deg,var(--post1),var(--post2));display:flex;align-items:center;justify-content:center;color:var(--accent)}
.citem .cithumb img{width:100%;height:100%;object-fit:cover}
.citem .cithumb .i{width:22px;height:22px}
.citem .cimeta{flex:1;min-width:0}
.citem .cimeta b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.citem .cimeta span{color:var(--accent);font-weight:700}
.citem button{background:none;border:none;color:var(--muted);cursor:pointer;display:inline-flex;padding:6px}
.citem button:hover{color:var(--text)}
.citem button .i{width:16px;height:16px}
#cartFoot{padding:18px;border-top:1px solid var(--border)}
#cartTotal{display:flex;justify-content:space-between;align-items:baseline;font-weight:700;margin-bottom:14px}
#cartTotalSum{font-family:var(--display);font-size:20px}

#assortModal,#productModal{inset:0;align-items:flex-start;justify-content:center;overflow-y:auto;padding:60px 16px;background:rgba(5,5,7,.72);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
#assortModal.open,#productModal.open{display:flex}
#assortModal .inner,#productModal .inner{background:var(--bg2);border-radius:var(--r-lg);padding:24px;max-width:1100px;width:100%;box-shadow:var(--shadow-float)}
#productModal .inner{max-width:480px}
.inner .row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}
.inner .row h2{margin:0;font-size:22px}
#assortSearch{margin-bottom:20px}
#pmImgWrap img{width:100%;border-radius:12px;margin-bottom:16px}
#pmImgWrap .pm-icon{background:linear-gradient(160deg,var(--post1),var(--post2));border-radius:12px;margin-bottom:16px;padding:40px;display:flex;justify-content:center;color:var(--accent)}
#pmImgWrap .pm-icon .i{width:30%;height:auto;aspect-ratio:1}
#pmAbout{color:var(--muted);font-size:15px;margin-bottom:16px}
#pmSpecs{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;font-size:14px;margin-bottom:20px;padding-top:14px;border-top:1px solid var(--border)}
#pmSpecs dt{color:var(--muted)}
.pm-foot{display:flex;justify-content:space-between;align-items:center;gap:12px}
.pm-foot .price{font-family:var(--display);font-size:22px}

#searchBox{display:none;position:absolute;top:calc(100% + 10px);right:0;width:320px;max-width:84vw;background:var(--card);border-radius:14px;box-shadow:var(--shadow-float);padding:12px;z-index:80}
#searchBox.open{display:block}
#searchInput{width:100%;background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--r-md);padding:10px 12px;color:var(--text);font:inherit;font-size:14px}
#searchInput:focus{outline:none;border-color:var(--accent)}
#searchResults{max-height:300px;overflow-y:auto;margin-top:10px;display:flex;flex-direction:column;gap:4px}
#searchResults:empty{display:none}
.sres{display:flex;align-items:center;gap:10px;padding:6px;border-radius:8px;cursor:pointer}
.sres:hover{background:var(--bg2)}
.sres .sresthumb{width:34px;height:42px;border-radius:6px;overflow:hidden;flex:none;background:linear-gradient(160deg,var(--post1),var(--post2));display:flex;align-items:center;justify-content:center;color:var(--accent)}
.sres .sresthumb img{width:100%;height:100%;object-fit:cover}
.sres .sresthumb .i{width:16px;height:16px}
.sres span{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.muted-note{color:var(--muted);font-size:13px;padding:6px}

/* ---------- chat ---------- */
#chatBtn{position:fixed;bottom:calc(20px + env(safe-area-inset-bottom,0));right:20px;width:56px;height:56px;border-radius:50%;background:var(--accent-fill);border:none;color:var(--on-accent);display:flex;align-items:center;justify-content:center;box-shadow:0 10px 30px -10px rgba(0,0,0,.6);cursor:pointer;z-index:60;transition:transform .2s var(--ease)}
#chatBtn .i{width:26px;height:26px}
#chatBtn:hover{transform:translateY(-2px)}
#chatPanel{position:fixed;bottom:calc(88px + env(safe-area-inset-bottom,0));right:20px;width:340px;max-width:calc(100vw - 32px);height:440px;max-height:70vh;background:var(--card);border-radius:var(--r-lg);display:none;flex-direction:column;overflow:hidden;z-index:60;box-shadow:var(--shadow-float)}
#chatPanel.open{display:flex}
#chatHead{padding:14px 16px;border-bottom:1px solid var(--border);font-weight:700;font-size:14px;display:flex;justify-content:space-between;align-items:center;gap:10px}
#chatHead a{font-size:12px;font-weight:600;color:var(--accent)}
#chatMsgs{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:8px;font-size:14px}
#chatChips{display:flex;gap:6px;padding:0 14px 12px;flex-wrap:wrap}
#chatChips button{background:transparent;border:1px solid var(--border);color:var(--muted);font-size:12px;padding:6px 11px;border-radius:999px;cursor:pointer}
#chatChips button:hover{color:var(--text);border-color:var(--border-strong)}
.msg{padding:9px 12px;border-radius:12px;max-width:85%}
.msg.bot{background:var(--bg2);border:1px solid var(--border);align-self:flex-start}
.msg.user{background:var(--accent-fill);color:var(--on-accent);align-self:flex-end}
#chatInputRow{display:flex;border-top:1px solid var(--border)}
#chatInputRow input{flex:1;background:transparent;border:none;padding:14px;color:var(--text);font:inherit;font-size:14px}
#chatInputRow input:focus{outline:none}
#chatInputRow button{background:none;border:none;color:var(--accent);padding:0 16px;cursor:pointer;display:flex;align-items:center}

/* ---------- responsive ---------- */
@media (max-width:980px){
  nav .links{display:none}
  .menu-btn{display:inline-flex}
}
@media (max-width:767px){
  section{padding:64px 0}
  .nav-row{height:60px;gap:10px}
  .logo span{display:none}
  .nav-cta{display:none}
  .cart-label{display:none}
  .cart-btn{width:40px;padding:0}
  #chatBtn{width:50px;height:50px;right:14px;bottom:calc(14px + env(safe-area-inset-bottom,0))}
  #chatPanel{right:12px;left:12px;width:auto;max-width:none;bottom:calc(74px + env(safe-area-inset-bottom,0))}
  .icon-btn{width:40px;height:40px}
  .hero{padding:32px 0 48px}
  .hero-grid{grid-template-columns:1fr;gap:36px;min-height:0}
  .hero-sub{font-size:16px}
  .stats{grid-template-columns:1fr}
  .stats div + div{padding-left:0;border-left:none;border-top:1px solid var(--border)}
  .stats div{padding:18px 0}
  .hp-b{margin-top:36px}
  .grid{grid-template-columns:repeat(2,1fr);gap:12px}
  .card .meta{padding:12px}
  .card .meta p{display:none}
  .grid2,.contacts-grid{grid-template-columns:1fr;gap:36px}
  form{padding:20px}
  .clist a div{flex-direction:column;gap:2px}
}
@media (max-width:380px){
  .grid{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* ---------- additions: states, browser surfaces, mobile menu, cart qty ---------- */
::selection{background:var(--accent-fill);color:var(--on-accent)}
input,textarea{caret-color:var(--accent)}
html{scrollbar-color:var(--border-strong) var(--bg)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:var(--bg)}
::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:10px;border:2px solid var(--bg)}
a{text-underline-offset:3px}

.skip{position:absolute;left:12px;top:-60px;z-index:100;background:var(--accent-fill);color:var(--on-accent);padding:10px 14px;border-radius:var(--r-md);font-weight:600}
.skip:focus{top:12px}

.cart-btn{width:auto;padding:0 14px 0 12px;gap:8px;font-size:14px;font-weight:600}
.menu-btn{display:none}
#mobileMenu{position:fixed;inset:0;z-index:90;display:none;background:rgba(5,5,7,.6)}
#mobileMenu.open{display:block}
.mm-inner{position:absolute;top:0;left:0;right:0;background:var(--bg2);border-bottom:1px solid var(--border);padding:12px 20px 24px;padding-top:calc(12px + env(safe-area-inset-top,0));display:flex;flex-direction:column;box-shadow:var(--shadow-float)}
.mm-head{display:flex;justify-content:space-between;align-items:center;height:48px;margin-bottom:8px}
.mm-inner > a:not(.btn){font-family:var(--display);font-size:22px;font-weight:700;padding:14px 0;border-bottom:1px solid var(--border)}
.mm-inner .btn{margin-top:20px}
@media (prefers-reduced-motion:no-preference){.mm-inner{animation:drop .35s var(--ease) both}}
@keyframes drop{from{transform:translateY(-12px);opacity:.4}to{transform:none;opacity:1}}

.price-hint{font-size:13px;color:var(--muted);margin:-12px 0 20px}
.card .meta .price{padding-top:1px}

.field-error{color:var(--accent);font-size:13px;font-weight:600;min-height:0}
.field-error:empty{display:none}
form input[aria-invalid="true"]{border-color:var(--accent)}
.form-note{font-size:13px;color:var(--muted);line-height:1.45}
.form-note a{color:var(--accent);text-decoration:underline}
.form-note.ok{color:var(--text)}
.form-note.ok b{color:var(--accent)}
.btn[disabled]{opacity:.55;cursor:not-allowed}

.cart-note{font-size:12px;color:var(--muted);margin-top:10px;line-height:1.4}
.cart-note a{color:var(--accent);text-decoration:underline}
.qty{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--border);border-radius:8px;flex:none}
.qty button{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;color:var(--muted);cursor:pointer;padding:0}
.qty button:hover{color:var(--text)}
.qty button .i{width:14px;height:14px}
.qty output{min-width:18px;text-align:center;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.cart-empty{display:flex;flex-direction:column;gap:12px;align-items:flex-start}
.cart-empty .btn{padding:10px 14px;font-size:14px}

.pm-foot .pm-price-note{display:block;font-size:12px;color:var(--muted);margin-top:2px}

#toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0));transform:translate(-50%,20px);background:var(--text);color:var(--bg);padding:10px 16px;border-radius:var(--r-md);font-size:14px;font-weight:600;opacity:0;pointer-events:none;z-index:95;transition:opacity .2s,transform .3s var(--ease);max-width:calc(100vw - 32px)}
#toast.show{opacity:1;transform:translate(-50%,0)}
.msg.bot a{color:var(--accent);text-decoration:underline}
@media (max-width:767px){.cart-btn{width:40px;padding:0}}
button.poster{width:100%;border:none;padding:0;cursor:pointer;color:inherit;font:inherit;border-radius:0}
button.poster:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
button.sres{width:100%;background:none;border:none;text-align:left;color:inherit;font:inherit}
.citem .cimeta span{font-variant-numeric:tabular-nums}
.muted-note a{color:var(--accent);text-decoration:underline}
@media (max-width:980px){.menu-btn{display:inline-flex}}
@media (max-width:767px){.card .meta .row{flex-direction:column;gap:4px}.card .meta .row b{-webkit-line-clamp:3}}

/* ---------- hero BMW stage (bmw.js): blurred canvas behind the hero content ---------- */
.hero{position:relative;isolation:isolate;overflow:hidden}
#bmwStage{position:absolute;inset:0;width:100%;height:100%;z-index:-2;pointer-events:none;display:block;opacity:0;
  filter:blur(var(--bmw-blur,3px)) saturate(1.1);transition:opacity 1.2s var(--ease),filter .7s var(--ease)}
#bmwStage.on{opacity:1}
/* keeps the headline readable over the car and smoke, without hiding the car */
.hero{min-height:calc(100svh - 69px);display:flex;flex-direction:column;justify-content:flex-start;padding-top:clamp(28px,5vh,56px)}
.hero::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(60% 55% at 18% 42%,color-mix(in srgb,var(--bg) 62%,transparent),transparent 70%),
             linear-gradient(0deg,var(--bg) 0%,transparent 12%)}
.hero h1,.hero-sub{text-shadow:0 2px 24px color-mix(in srgb,var(--bg) 85%,transparent)}
@media (max-width:767px){.hero{min-height:0}.hero::before{background:linear-gradient(0deg,var(--bg) 0%,transparent 18%),color-mix(in srgb,var(--bg) 30%,transparent)}}

/* ---------- motion layer (fx.js) ---------- */
#scrollBar{position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--accent-fill);transform:scaleX(0);transform-origin:0 50%;pointer-events:none}
.eyebrow{font-family:var(--display);font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);margin-bottom:14px}

/* 3D poster ring: pinned while the section scrolls past, scroll and drag spin it */
.showcase{height:300vh;padding:0;position:relative}
.sc-sticky{position:sticky;top:69px;height:calc(100vh - 69px);height:calc(100svh - 69px);overflow:hidden;display:flex;flex-direction:column;padding-top:clamp(24px,6vh,64px)}
.sc-head{width:100%;position:relative;z-index:2;pointer-events:none}
.sc-head .sub{margin-bottom:0}
.sc-stage{position:relative;flex:1;perspective:1600px;perspective-origin:50% 35%;cursor:grab;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.sc-stage.grabbing{cursor:grabbing}
.sc-ring{position:absolute;left:50%;top:48%;width:0;height:0;transform-style:preserve-3d;--r:600px}
.sc-item{--pw:clamp(140px,17vw,260px);position:absolute;width:var(--pw);aspect-ratio:3/4;left:calc(var(--pw) / -2);top:calc(var(--pw) * -.667);padding:0;border:0;border-radius:14px;overflow:hidden;background:var(--card);cursor:inherit;
  transform:rotateY(var(--a)) translateZ(var(--r));box-shadow:0 30px 60px -28px rgba(0,0,0,.85)}
.sc-item img{width:100%;height:100%;object-fit:cover;pointer-events:none;transition:opacity .45s ease,transform .45s ease,filter .45s ease}
.sc-item.swapping img{opacity:0;transform:scale(1.08);filter:blur(6px)}
@media (prefers-reduced-motion:reduce){.sc-item img{transition:none}}
.sc-item::after{content:"";position:absolute;inset:0;background:#000;opacity:var(--shade,0);pointer-events:none}
.sc-item:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.sc-floor{position:absolute;left:50%;bottom:2%;width:min(1100px,110%);height:140px;transform:translateX(-50%);background:radial-gradient(closest-side,color-mix(in srgb,var(--accent-fill) 34%,transparent),transparent);filter:blur(12px);opacity:.5;pointer-events:none}
@media (max-width:767px){.showcase{height:220vh}.sc-sticky{top:61px;height:calc(100svh - 61px)}}
@media (prefers-reduced-motion:reduce){.showcase{height:auto}.sc-sticky{position:relative;top:0;height:640px}}

/* street bands */
.bands{position:relative;height:clamp(150px,18vw,220px);overflow:hidden}
.band{position:absolute;left:-5%;width:110%;top:50%;padding:16px 0;white-space:nowrap;overflow:hidden;transform:translateY(-50%) rotate(var(--rot)) skewX(var(--skew,0deg));transition:transform .35s var(--ease)}
.band-a{--rot:-3deg;background:var(--accent-fill);color:#fff;z-index:2;box-shadow:0 18px 40px -20px rgba(0,0,0,.7)}
.band-b{--rot:2.5deg;background:var(--bg2);border-block:1px solid var(--border);color:transparent;-webkit-text-stroke:1px var(--muted)}
.band-track{display:flex;width:max-content;animation:band 30s linear infinite;font-family:var(--display);font-weight:800;font-size:clamp(20px,3.2vw,42px);letter-spacing:.02em;line-height:1.1}
.band-b .band-track{animation-direction:reverse;animation-duration:36s}
@keyframes band{to{transform:translateX(-50%)}}

/* reveals */
.anim .rv{opacity:0;transform:translateY(26px);transition:opacity .9s var(--ease),transform .9s var(--ease);transition-delay:var(--d,0s)}
.anim .rv.in{opacity:1;transform:none}
.split .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.1em;margin-bottom:-.1em}
.anim .split .w>span{display:inline-block;transform:translateY(108%);transition:transform 1s var(--ease)}
.anim .split.in .w>span{transform:none}

/* catalog cards: 3D tilt with a glare that follows the pointer */
.card{position:relative}
.card::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:radial-gradient(380px circle at var(--gx,50%) var(--gy,0%),rgba(255,255,255,.13),transparent 45%);opacity:0;transition:opacity .3s}
.card.tilting{transition:transform .12s linear,border-color .25s,box-shadow .35s var(--ease);box-shadow:0 30px 50px -24px rgba(0,0,0,.8)}
.card.tilting::after{opacity:1}

/* hero posters float in 3D, only after the reveal has finished (fx.js adds .settled):
   a filled filter animation inside a 3D context makes Chrome drop the image paint */
.anim .hero-art.ready.settled .hp img{animation:none;filter:none;transform:none}
.anim .hero-art.ready.settled .hp::after{display:none}
.hero-art.settled{transform-style:preserve-3d}
.hero-art.settled .hp-a{transform:translateZ(30px)}
.hero-art.settled .hp-b{transform:translateZ(80px)}


/* chat: typing indicator while the AI answers */
.msg.typing{display:inline-flex;gap:4px;align-items:center;padding:12px 14px}
.msg.typing i{width:6px;height:6px;border-radius:50%;background:var(--muted);animation:typing 1s infinite ease-in-out}
.msg.typing i:nth-child(2){animation-delay:.15s}.msg.typing i:nth-child(3){animation-delay:.3s}
@keyframes typing{0%,80%,100%{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
#chatMsgs .msg{white-space:pre-line}
.msg.typing[data-note]::after{content:attr(data-note);margin-left:8px;font-size:12px;color:var(--muted)}

/* random poster swaps (grid cards, hero prints) */
.card .poster img,.card .meta{transition:opacity .4s ease,transform .6s var(--ease),filter .4s ease}
.card.swapping .poster img{opacity:0;filter:blur(6px)}
.card.swapping .meta{opacity:0}
.hero-art .hp img{transition:opacity .6s ease,filter .6s ease}
.hero-art .hp.swapping img{opacity:0;filter:blur(8px)}
/* 3D ring: the poster under the pointer rises as if picked, and keeps orbiting */
.sc-item{transition:transform .35s cubic-bezier(.2,.8,.2,1),box-shadow .35s ease}
@media (hover:hover) and (pointer:fine){
  .sc-item:hover{transform:rotateY(var(--a)) translateZ(var(--r)) translateY(-34px) scale(1.06);box-shadow:0 46px 70px -26px rgba(0,0,0,.9)}
  .sc-item:hover::after{opacity:0}
}
@media (prefers-reduced-motion:reduce){.card .poster img,.card .meta,.hero-art .hp img,.sc-item{transition:none}}
