/* shop.css — collection, piece and bag pages. Tokens (--bg --ink --muted --accent --disp --sans) come from site.config.mjs via build-shop.mjs. */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--hair:color-mix(in oklch,var(--ink) 12%,transparent);--ease:cubic-bezier(0.4,0,0.6,1)}
html{scroll-behavior:smooth}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-weight:300;line-height:1.6;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none;transition:color .32s var(--ease),opacity .24s var(--ease)}
img{display:block;max-width:100%}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.wrap{max-width:1240px;margin:0 auto;padding:0 clamp(16px,4vw,56px)}
.k{font-size:11px;font-weight:500;letter-spacing:.28em;text-transform:uppercase;color:var(--accent)}
.muted{color:var(--muted)}

/* nav */
.snav{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;gap:16px;height:64px;padding:0 clamp(16px,4vw,56px);background:color-mix(in oklch,var(--bg) 86%,transparent);backdrop-filter:saturate(1.8) blur(18px);border-bottom:1px solid var(--hair)}
.snav .lmark{height:17px;width:auto}
.snav .links{display:flex;align-items:center;gap:28px;font-size:12px;font-weight:500;letter-spacing:.16em;text-transform:uppercase}
.snav .links a{color:color-mix(in oklch,var(--ink) 78%,transparent);min-height:44px;display:flex;align-items:center}
.snav .links a:hover,.snav .links a[aria-current]{color:var(--ink)}
.bagbtn{white-space:nowrap;font:inherit;letter-spacing:inherit;text-transform:inherit;color:var(--ink);background:none;border:1px solid var(--hair);border-radius:999px;min-height:44px;padding:0 18px;cursor:pointer;transition:border-color .32s var(--ease)}
.bagbtn:hover{border-color:var(--ink)}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:0 32px;border-radius:999px;border:1px solid transparent;font:500 13px/1 var(--sans);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;transition:opacity .24s var(--ease),background-color .32s var(--ease),color .32s var(--ease)}
.btn-primary{background:var(--accent);color:var(--bg)}
.btn-primary:hover{opacity:.88}
.btn-ghost{background:none;color:var(--ink);border-color:var(--hair)}
.btn-ghost:hover{border-color:var(--ink)}
.btn[disabled],.btn[aria-disabled=true]{background:none;color:var(--muted);border-color:var(--hair);cursor:not-allowed;opacity:1}

/* collection */
.chead{padding:clamp(56px,10vh,120px) 0 clamp(32px,5vh,56px)}
.chead h1{font-family:var(--disp);font-weight:400;font-size:clamp(44px,7vw,96px);line-height:.98;letter-spacing:-.02em;margin-top:14px}
.chead p{margin-top:18px;max-width:52ch;color:var(--muted)}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(16px,2.4vw,32px) clamp(16px,2vw,28px);padding-bottom:clamp(80px,12vh,160px)}
.tile{display:block}
.tile .ph{aspect-ratio:4/5;overflow:hidden;border-radius:14px;background:color-mix(in oklch,var(--ink) 4%,var(--bg))}
.tile .ph img{width:100%;height:100%;object-fit:cover;transition:opacity .24s var(--ease)}
.tile:hover .ph img{opacity:.86}
.tile .meta{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:16px 2px 0}
.tile h2{font-family:var(--disp);font-weight:400;font-size:22px;line-height:1.15}
.tile .price{font-size:13px;letter-spacing:.06em;color:var(--muted);white-space:nowrap}
.tile .sold{color:var(--muted);font-size:11px;letter-spacing:.22em;text-transform:uppercase}

/* piece */
.piece{display:grid;grid-template-columns:1.15fr 1fr;gap:clamp(28px,5vw,88px);align-items:start;padding:clamp(28px,5vh,64px) 0 clamp(80px,12vh,160px)}
.piece .ph{aspect-ratio:4/5;overflow:hidden;border-radius:14px}
.piece .ph img{width:100%;height:100%;object-fit:cover}
.piece figcaption{margin-top:12px;font-size:12px;color:var(--muted)}
.pinfo{position:sticky;top:96px}
.pinfo h1{font-family:var(--disp);font-weight:400;font-size:clamp(40px,5vw,72px);line-height:1;letter-spacing:-.015em;margin-top:14px}
.pinfo .price{margin-top:18px;font-size:17px;letter-spacing:.04em}
.pinfo .desc{margin-top:22px;color:var(--muted);max-width:44ch;font-size:16.5px}
.pinfo .actions{margin-top:32px;display:flex;flex-direction:column;gap:12px;max-width:380px}
.pinfo .actions .btn{width:100%}
.specs{margin-top:40px;border-top:1px solid var(--hair);max-width:460px}
.specs div{display:grid;grid-template-columns:140px 1fr;gap:16px;padding:14px 0;border-bottom:1px solid var(--hair);font-size:14px}
.specs dt{color:var(--muted);letter-spacing:.12em;text-transform:uppercase;font-size:11px;padding-top:3px}
.back{display:inline-flex;align-items:center;min-height:44px;margin-top:20px;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.back:hover{color:var(--ink)}
.toast{margin-top:14px;font-size:14px;color:var(--ink);min-height:22px}

/* bag (native dialog: focus trap and Esc for free) */
dialog.bag{margin:0 0 0 auto;height:100dvh;max-height:none;width:min(440px,100vw);border:0;border-left:1px solid var(--hair);background:var(--bg);color:var(--ink);padding:0}
dialog.bag::backdrop{background:color-mix(in oklch,var(--bg) 60%,transparent);backdrop-filter:blur(4px)}
.bag .in{display:flex;flex-direction:column;height:100%}
.bag header{display:flex;justify-content:space-between;align-items:center;height:64px;padding:0 24px;border-bottom:1px solid var(--hair)}
.bag header h2{font-size:12px;font-weight:500;letter-spacing:.2em;text-transform:uppercase}
.xbtn{background:none;border:0;color:var(--ink);font:inherit;font-size:12px;letter-spacing:.16em;text-transform:uppercase;min-height:44px;min-width:44px;cursor:pointer}
.bag .lines{flex:1;overflow:auto;padding:8px 24px}
.bag .empty{padding:56px 0;text-align:center}
.bag .empty p{font-family:var(--disp);font-size:28px;margin-bottom:20px}
.line{display:grid;grid-template-columns:84px 1fr;gap:16px;padding:18px 0;border-bottom:1px solid var(--hair)}
.line img{width:84px;height:105px;object-fit:cover;border-radius:8px}
.line h3{font-family:var(--disp);font-weight:400;font-size:19px;line-height:1.2}
.line .lp{font-size:13px;color:var(--muted);margin-top:4px}
.qty{display:flex;align-items:center;gap:4px;margin-top:10px}
.qty button{width:44px;height:44px;border:1px solid var(--hair);border-radius:999px;background:none;color:var(--ink);font-size:16px;cursor:pointer}
.qty button:hover{border-color:var(--ink)}
.qty output{min-width:28px;text-align:center;font-size:14px}
.qty .rm{width:auto;border:0;padding:0 8px;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.bag footer{padding:20px 24px 24px;border-top:1px solid var(--hair)}
.bag .sum{display:flex;justify-content:space-between;font-size:14px;margin-bottom:6px}
.bag .note{font-size:12px;color:var(--muted);margin-bottom:16px}
.bag footer .btn{width:100%}
.bag .status{margin-top:12px;font-size:13px;line-height:1.5;min-height:20px}
.bag .status.err{color:oklch(0.78 0.12 30)}

/* footer */
.sfoot{border-top:1px solid var(--hair);padding:40px 0;font-size:13px;color:var(--muted)}
.sfoot .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:14px 32px}
.sfoot a:hover{color:var(--ink)}
.sfoot .lmark{height:14px;width:auto;opacity:.9}
.draft{font-size:12px;color:var(--muted)}

@media(max-width:900px){.grid{grid-template-columns:repeat(2,1fr)}.piece{grid-template-columns:1fr}.pinfo{position:static}}
@media(max-width:560px){
  .grid{grid-template-columns:1fr}
  .snav .links .hide-s{display:none}
  .snav .lmark{height:13px}
  .snav .links{gap:14px}
  .bagbtn{padding:0 14px}
  .pinfo .actions{max-width:none}
  .specs div{grid-template-columns:110px 1fr}
}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
