/* base.css — design tokens, reset, body. Neutral monochrome gallery system:
   charcoal ground, off-white type, no hue anywhere. The photography
   is the only color on the site. */
:root{
  --ink:#0A0A0A;
  --bone:#F1F0ED;
  --ink-soft:#262626;

  /* neutral charcoal page backdrop (public) */
  --page-bg:#141414;
  --page-glow:rgba(255,255,255,.04);

  /* elevation — neutral surfaces on the dark ground */
  --surface:#1B1B1B;
  --surface-2:#212121;
  --line:#2E2E2E;

  /* hard offset shadows — quiet neutral depth, no color */
  --shadow-block:#0D0D0D;
  --ink-shadow:rgba(0,0,0,.3);

  /* focus — monochrome, maximum contrast */
  --focus:var(--bone);

  /* the one permitted color: sold state */
  --sold:#C0392B;

  /* neutral paper shades for photo stages/thumbs (light surfaces) */
  --paper-2:#E9E8E6;
  --paper-3:#D7D6D3;

  /* semantic text ladder — dark surfaces */
  --text-on-dark:rgba(241,240,237,.9);
  --text-on-dark-strong:var(--bone);
  --text-on-dark-muted:rgba(241,240,237,.62);
  --text-on-dark-faint:rgba(241,240,237,.52);
  --line-on-dark:rgba(241,240,237,.28);

  /* semantic text ladder — light surfaces (light cards, paper receipts) */
  --text-on-light:rgba(10,10,10,.85);
  --text-on-light-strong:var(--ink);
  --text-on-light-muted:rgba(10,10,10,.62);
  --text-on-light-faint:rgba(10,10,10,.45);
  --line-on-light:rgba(10,10,10,.2);

  /* card frame on dark backdrop */
  --card-border:#2A2A2A;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body.xr{
  background:var(--bone);
  color:var(--ink);
  font-family:'Fraunces',Georgia,serif;
  background-image:radial-gradient(rgba(0,0,0,.04) 1px,transparent 1px);
  background-size:3px 3px;
  line-height:1.5;
}
.xr-main{min-height:100vh}
h1,h2,h3,h4{font-weight:normal}
img{max-width:100%}
p{overflow-wrap:break-word}

/* ============================================================================
   TYPE & VISUAL SYSTEM — XEROX RIOT v1.0
   ============================================================================
   THE DISCIPLINE (craft brief §2.2 — one typographic discipline, applied
   ruthlessly; §2.3 — restraint as the luxury signal).

   The ransom-note chaos is the discipline. Chaotic on the surface, precise
   underneath — a Peter Saville / Jamie Reid record sleeve, not a MySpace page.

   ── FACE ROLES (never mixed) ────────────────────────────────────────────────
   ANTON        → SLABS. Headlines, page titles, big statements, mega-stamps.
                  One statement per surface. Weight is inherent (400).
   ARCHIVO BLACK → WORDMARK + STRONG CLAIMS. Brand name, card titles, stamps.
                  Spaced uppercase when used as a wordmark.
   SPACE MONO   → BODY + UI + META. Paragraphs, ledes, labels, prices, nav,
                  dates, form fields, footer. Tiny + letter-spaced when meta.

   ── TYPE RAMP (fluid) ──────────────────────────────────────────────────────
   --fs-2xs  ~12px   captions, stamps
   --fs-xs   ~13px   META (grey + letter-spaced, but readable)
   --fs-sm   ~15px   small body / UI text
   --fs-base ~16px   body  ← the readable floor
   --fs-md   ~19px   sub-headlines, card titles (Archivo)
   --fs-lg   ~24px   section heads
   --fs-xl   ~32px   page statements
   --fs-display 2.6rem→4.8rem  page titles (Anton)
   --fs-mega    2.2rem→3.6rem  mega stamps (SHOP CLOSED)

   ── ROTATION SCALE (deliberate, small, consistent — NEVER per-instance) ────
   Text:  -2° / -1° / 0° / +1° / +2°           (--rot-1 .. --rot-2)
   Stamps: -3° / -2° / +2° / +3°               (--rot-stamp-*)
   Decorative marks (skull, wordmark accent): -8° (one fixed value, always)
   Everything else sits straight. Rotation is earned, not ambient.

   ── RESTRAINT (§2.3) ───────────────────────────────────────────────────────
   One focal point per surface. Aggressive negative space. Tiny grey
   letter-spaced meta where the comps do it. Text-link CTAs (.txt-link) over
   shouty buttons unless the button is the ONE sale action. Cart, checkout and
   admin stay calm: punk-styled, never at the cost of selling.

   ── MOTION (§2.6) ──────────────────────────────────────────────────────────
   All interactions ≤ .35s, one easings per intent (snap = stamp thwack,
   lift = hover). Every animation dies under prefers-reduced-motion
   (see animations.css). Motion serves the sale or it doesn't happen.
   ============================================================================ */

/* ── the system tokens ──────────────────────────────────────────────────── */
:root{
  /* faces — one simple neutral sans everywhere; hierarchy comes from
     weight, size and tracking only. No display fonts, no mono. */
  --font-sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --font-slab:var(--font-sans);
  --font-black:var(--font-sans);
  --font-body:var(--font-sans);
  --font-meta:var(--font-sans);

  /* fluid type ramp */
  --fs-2xs:clamp(.72rem,.44rem+.8vw,.8rem);
  --fs-xs:clamp(.8rem,.52rem+.9vw,.88rem);
  --fs-sm:clamp(.9rem,.6rem+1vw,1rem);
  --fs-base:clamp(1rem,.7rem+1vw,1.1rem);
  --fs-md:clamp(1.15rem,.75rem+1.4vw,1.3rem);
  --fs-lg:clamp(1.4rem,.9rem+1.9vw,1.7rem);
  --fs-xl:clamp(1.8rem,1.1rem+2.6vw,2.6rem);
  --fs-display:clamp(2.6rem,1.3rem+4.8vw,4.8rem);
  --fs-mega:clamp(2.2rem,1.1rem+4.6vw,3.6rem);

  /* spacing rhythm — use these, not ad-hoc rems */
  --sp-1:.25rem; --sp-2:.5rem; --sp-3:.75rem; --sp-4:1rem;
  --sp-5:1.5rem; --sp-6:2rem; --sp-7:3rem; --sp-8:4.5rem;

  /* rotation scale — text */
  --rot-2:-2deg; --rot-1:-1deg; --rot-0:0deg; --rot-1p:1deg; --rot-2p:2deg;
  /* rotation scale — stamps */
  --rot-stamp-3:-3deg; --rot-stamp-2:-2deg; --rot-stamp-2p:2deg; --rot-stamp-3p:3deg;
  /* decorative marks (skull, wordmark accent) — one value, always */
  --rot-deco:-8deg;

  /* motion — §2.6: fast, one easing per intent */
  --motion-fast:.15s; --motion-base:.25s; --motion-snap:.3s; --motion-calm:.8s;
  --ease-snap:cubic-bezier(.34,1.56,.64,1);   /* thwack, press */
  --ease-lift:cubic-bezier(.16,.84,.44,1);    /* hover lift, entrance */

  /* meta ink — Anne Black's tiny grey secondary (12px, wide tracking) */
  --meta-ink:rgba(10,10,10,.62);
  --meta-bone:rgba(244,241,232,.66);

  /* focus — §2.7 accessibility is non-negotiable */
  --focus:var(--bone);
}

/* ── focus discipline (§2.7): visible, high-contrast, offset — everywhere ── */
:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
:focus:not(:focus-visible){outline:none}
button:disabled,input:disabled,select:disabled,textarea:disabled,[aria-disabled=true]{opacity:.55;cursor:not-allowed;filter:grayscale(.4)}

/* ── face role utilities ─────────────────────────────────────────────────── */
.type-slab{font-family:var(--font-slab);letter-spacing:.01em;text-transform:uppercase}
.type-black{font-family:var(--font-black);text-transform:uppercase}
.type-mono{font-family:var(--font-meta)}

/* ── META text — tiny, grey, wide-tracked, uppercase (the 'stamped' voice) ── */
.meta{
  font-family:var(--font-meta);font-weight:700;
  font-size:var(--fs-xs);letter-spacing:.16em;text-transform:uppercase;
  color:var(--meta-ink);
}

/* ── text-link CTA — the quiet, confident entry (§2.3) ───────────────────── */
.txt-link{
  font-family:var(--font-meta);font-weight:700;
  font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink);text-decoration:none;
  border-bottom:2px solid var(--ink);padding-bottom:2px;
  transition:color var(--motion-fast) ease,border-color var(--motion-fast) ease;
}
.txt-link:hover{color:var(--bone);border-color:var(--bone)}
.txt-link::after{content:' →';color:var(--bone)}

/* ── STAMP SYSTEM (screen-printed, reusable, never one-off) ──────────────── */
/* base stamp: Archivo Black, hard border, offset shadow, deliberate rotation,
   thwacks into place on load (scale-animated; rotation survives via `scale`). */
.stamp{
  display:inline-block;
  font-family:var(--font-black);
  font-size:var(--fs-2xs);letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink);background:var(--bone);
  border:2px solid var(--ink);padding:.16rem .5rem;
  box-shadow:2px 2px 0 var(--ink);
  --stamp-rot:var(--rot-stamp-2);           /* per-variant rotation */
  transform:var(--stamp-rot);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;
  animation-delay:.35s;
  transition:transform var(--motion-fast) var(--ease-snap),
             box-shadow var(--motion-fast) ease,
             text-shadow var(--motion-fast) ease;
}
/* screen-print registration: on hover the ink ghost shifts (misprint) */
.stamp:hover{
  transform:var(--stamp-rot) translate(-1px,-1px);
  box-shadow:3px 3px 0 var(--ink);
}
.stamp--blood{background:var(--ink);color:var(--bone);--stamp-rot:var(--rot-stamp-2p)}
.stamp--blood:hover{text-shadow:-1px 1px 0 rgba(244,241,232,.6)}
.stamp--acid{background:var(--bone);color:var(--ink);--stamp-rot:var(--rot-stamp-3)}
.stamp--ink{background:var(--ink);color:var(--bone);--stamp-rot:var(--rot-stamp-2)}
.stamp--ghost{background:transparent;color:var(--ink);border-style:dashed;box-shadow:none;--stamp-rot:var(--rot-stamp-2p)}
.stamp--big{
  font-family:var(--font-slab);font-size:var(--fs-mega);
  border-width:4px;padding:.25rem 1.1rem;box-shadow:8px 8px 0 var(--ink);
  --stamp-rot:var(--rot-stamp-3);letter-spacing:.04em;
}
.stamp--big:hover{box-shadow:10px 10px 0 var(--ink)}

@keyframes stamp-thwack{
  0%{opacity:0}
  100%{opacity:1}
}

/* ── SKULL MOTIFS — dividers + bullets (reusable) ────────────────────────── */
.skull-divider{
  display:flex;align-items:center;gap:.9rem;
  font-size:.8rem;color:var(--meta-ink);
}
.skull-divider::before,.skull-divider::after{
  content:'';flex:1;height:3px;
  background-image:repeating-linear-gradient(90deg,var(--ink) 0 5px,transparent 5px 9px);
  opacity:.28;
}
ul.skull-bullets{list-style:none;padding-left:0}
.skull-bullets li{position:relative;padding-left:1.5rem;margin:.35rem 0}
.skull-bullets li::before{
  content:'☠';position:absolute;left:0;top:0;
  font-size:.72rem;transform:rotate(-8deg);color:var(--bone);
}

/* ── HALFTONE texture blocks (outside photo frames only — never on the clay) */
.halftone{
  background-image:radial-gradient(var(--ink) 1px,transparent 1.2px);
  background-size:5px 5px;opacity:.2;
}
.halftone-rule{height:.45rem;border:0;background-image:radial-gradient(var(--ink) 1px,transparent 1.2px);background-size:5px 5px;opacity:.24;-webkit-mask-image:linear-gradient(90deg,transparent,var(--ink) 12%,var(--ink) 88%,transparent);mask-image:linear-gradient(90deg,transparent,var(--ink) 12%,var(--ink) 88%,transparent)}

/* ── align the existing stamp classes to the system ──────────────────────── */
/* (.stamp-1of1 lives in shop.css — transparent with blood border) */
.stamp-live{
  font-family:var(--font-black);font-size:.72rem;letter-spacing:.05em;text-transform:uppercase;
  background:var(--ink);color:var(--bone);border:2px solid var(--bone);
  padding:.1rem .45rem;--stamp-rot:var(--rot-stamp-2p);transform:var(--stamp-rot);
  box-shadow:2px 2px 0 var(--ink);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.5s;
  transition:transform var(--motion-fast) var(--ease-snap),box-shadow var(--motion-fast) ease,text-shadow var(--motion-fast) ease;
}
.stamp-live:hover{
  transform:var(--stamp-rot) translate(-1px,-1px);box-shadow:3px 3px 0 var(--ink);
  text-shadow:-1px 1px 0 rgba(244,241,232,.6);
}
.stamp-drop{
  position:absolute;top:.4rem;right:.4rem;z-index:2;max-width:62%;
  font-family:var(--font-black);font-size:.66rem;letter-spacing:.04em;text-transform:uppercase;
  background:var(--bone);color:var(--ink);border:2px solid var(--ink);
  padding:.12rem .45rem;text-align:center;
  --stamp-rot:var(--rot-stamp-3p);transform:var(--stamp-rot);
  box-shadow:3px 3px 0 var(--ink);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.4s;
  transition:transform var(--motion-fast) var(--ease-snap),box-shadow var(--motion-fast) ease,text-shadow var(--motion-fast) ease;
}
.stamp-drop:hover{
  transform:var(--stamp-rot) translate(-1px,-1px);box-shadow:4px 4px 0 var(--ink);
}
.stamp-closed{
  font-family:var(--font-slab);font-size:var(--fs-mega);letter-spacing:.04em;text-transform:uppercase;
  background:var(--ink);color:var(--bone);border:4px solid var(--bone);
  padding:.25rem 1.1rem;box-shadow:8px 8px 0 var(--ink);
  --stamp-rot:var(--rot-stamp-3);transform:var(--stamp-rot);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.3s;
  transition:transform var(--motion-fast) var(--ease-snap),box-shadow var(--motion-fast) ease,text-shadow var(--motion-fast) ease;
}
.stamp-closed:hover{
  transform:var(--stamp-rot) translate(-2px,-2px);box-shadow:11px 11px 0 var(--ink);
  text-shadow:-2px 2px 0 rgba(244,241,232,.55);
}
.stamp-freeship{
  display:inline-block;font-family:var(--font-black);font-size:.68rem;letter-spacing:.04em;text-transform:uppercase;
  background:var(--bone);color:var(--ink);border:2px solid var(--ink);
  padding:.16rem .5rem;--stamp-rot:var(--rot-stamp-2);transform:var(--stamp-rot);
  box-shadow:2px 2px 0 var(--ink);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.55s;
  transition:transform var(--motion-fast) var(--ease-snap),box-shadow var(--motion-fast) ease,text-shadow var(--motion-fast) ease;
}
.stamp-freeship:hover{
  transform:var(--stamp-rot) translate(-1px,-1px);box-shadow:3px 3px 0 var(--ink);
}
/* status stamps (SOLD etc.) — aligned, thwacking */
.status-stamp{
  font-family:var(--font-slab);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;
  padding:.14rem .4rem;border:2px solid var(--ink);
  --stamp-rot:var(--rot-stamp-3);transform:var(--stamp-rot);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.5s;
}
.status-stamp.status-sold{background:var(--ink);color:var(--bone)}
.status-stamp.status-sold:hover{text-shadow:-1px 1px 0 rgba(244,241,232,.6)}

/* stamp cascade inside grids — staggered thwack, not simultaneous */
.shop-card:nth-child(1) .stamp-drop,.shop-card:nth-child(1) .stamp-1of1{animation-delay:.35s}
.shop-card:nth-child(2) .stamp-drop,.shop-card:nth-child(2) .stamp-1of1{animation-delay:.4s}
.shop-card:nth-child(3) .stamp-drop,.shop-card:nth-child(3) .stamp-1of1{animation-delay:.45s}
.shop-card:nth-child(4) .stamp-drop,.shop-card:nth-child(4) .stamp-1of1{animation-delay:.5s}
.shop-card:nth-child(n+5) .stamp-drop,.shop-card:nth-child(n+5) .stamp-1of1{animation-delay:.55s}

.shop-card{position:relative}

/* ── meta alignment on existing selectors (tiny grey, wide track) ────────── */
.tag-chips-label{font-size:var(--fs-2xs);letter-spacing:.16em;opacity:.6;text-transform:uppercase}
.footer-copy{font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase;opacity:.55}
.ig-date,.event-date{font-size:var(--fs-2xs);letter-spacing:.14em}

/* home.css — the whole homepage is exactly the viewport: 3 equal image columns. */

.home{
  position:fixed;inset:0;
  display:grid;grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr auto;
  gap:4px;
  background:var(--ink);
}

.home-panel{
  position:relative;display:block;text-decoration:none;overflow:hidden;
  background:var(--ink);
}
.home-panel img{
  width:100%;height:100%;object-fit:cover;display:block;
  filter:brightness(.6) saturate(.8) contrast(1.02);
  transition:filter .4s ease;
}
.home-panel:hover img{
  filter:brightness(1) saturate(1.04) contrast(1.02);
}
.home-panel:active img,.home-panel:focus-visible img{
  filter:brightness(1) saturate(1.04) contrast(1.02);
}

.home-label{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  display:inline-block;margin:0;white-space:normal;width:max-content;max-width:96%;text-align:center;line-height:1.08;
  font-family:var(--font-meta);font-weight:800;
  font-size:clamp(1.9rem,3.7vw,3.8rem);line-height:1;
  font-weight:900;-webkit-text-stroke:.018em currentColor;
  color:var(--bone);text-transform:uppercase;letter-spacing:.06em;
  text-shadow:0 2px 18px rgba(0,0,0,.6);
  pointer-events:none;
  transition:transform .18s ease-out,background-color .18s ease-out;
}
/* hover: label straightens slightly and brightens its shadow — no slab, words float */
.home-panel:hover .home-label,.home-panel:focus-visible .home-label{
  transform:translate(-50%,-50%) scale(1.05);
  color:var(--bone);
  text-shadow:0 3px 26px rgba(0,0,0,.75);
}

.home-topbar{
  grid-column:1 / -1;
  display:flex;justify-content:flex-end;align-items:center;gap:.6rem;flex-wrap:wrap;
  padding:.3rem .9rem;background:#050505;
}
.home-topbar-links{display:flex;gap:.45rem;flex-wrap:wrap}
.home-topbar-links a{
  display:inline-block;font-family:var(--font-body);font-size:.9rem;font-weight:800;
  letter-spacing:.1em;color:var(--text-on-dark-muted);text-decoration:none;
  background:transparent;border:1px solid var(--line);
  padding:.4rem .9rem;
  transition:color .12s ease,border-color .12s ease;
}
.home-topbar-links a:hover,.home-topbar-links a:focus-visible{
  color:var(--bone);border-color:var(--text-on-dark-muted);
}

/* splash: black, logo fades in from blur, holds, fades out */
.home-splash{
  position:fixed;inset:0;z-index:200;pointer-events:none;
  background:#000;display:flex;align-items:center;justify-content:center;
  animation:splash-hide .7s ease 1.8s forwards;
}
.home-splash-logo{
  width:clamp(260px,42vw,560px);height:auto;
  opacity:0;filter:blur(22px);
  animation:splash-logo 2.5s ease forwards;
}
@keyframes splash-logo{
  0%{opacity:0;filter:blur(22px)}
  12%{opacity:0;filter:blur(22px)}
  40%{opacity:1;filter:blur(0)}
  100%{opacity:1;filter:blur(0)}
}
@keyframes splash-hide{
  from{opacity:1;visibility:visible}
  to{opacity:0;visibility:hidden}
}
@media (prefers-reduced-motion:reduce){
  .home-splash{display:none}
}
@media(max-width:1024px){
  .home{grid-template-columns:1fr;grid-template-rows:1.22fr 1fr 1fr auto;padding-top:0}
  .home-label{font-size:clamp(1.5rem,10vw,2.9rem)}
  .home-topbar{padding:.3rem .7rem;gap:.45rem;justify-content:center}
  .home-topbar-links a{font-size:.78rem;padding:.42rem .7rem;border-width:2px}
  .home-panel--shop .home-label{top:58%}
}

/* public.css — public site nav, shop, piece detail, gallery, events, contact, policies, footer */

/* ---- public layout (shared nav across public pages) ---- */
/* Warm clay-dark gallery backdrop — the ceramics are the light source. */
body.xr.pub{
  margin:0;
  background:
    radial-gradient(ellipse 90% 60% at 50% 0%, rgba(255,255,255,.05), transparent 55%),
    radial-gradient(ellipse 70% 50% at 85% 100%, rgba(255,255,255,.03), transparent 60%),
    #141414;
  color:var(--bone);
  background-attachment:fixed;
}
.pub-nav{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:1rem 1.4rem;border-bottom:3px solid var(--line-on-dark);background:#141414;position:sticky;top:0;z-index:10}
/* after clicking a link, focus falls back to <body> — the global
   :focus-visible outline then drew a 3px bone border around the whole
   viewport. Kill it on body only; tabbing still outlines real controls. */
body:focus-visible{outline:none}
.pub-brand{font-family:var(--font-meta);font-weight:800;font-size:1.3rem;letter-spacing:.06em;color:var(--bone);text-decoration:none;text-transform:uppercase;white-space:nowrap;margin-right:auto}
.pub-links{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center;order:1}
.pub-nav .cart-link{order:2;align-self:center}
.nav-toggle{order:3}
.nav-toggle{display:none;align-items:center;justify-content:center;width:44px;height:44px;padding:0;background:transparent;border:2px solid var(--line-on-dark);border-radius:0;color:var(--bone);cursor:pointer}
.nav-toggle-icon{width:22px;height:22px;display:block}
.nav-toggle .nav-toggle-close{display:none}
.nav-open .nav-toggle-bars{display:none}
.nav-open .nav-toggle-close{display:block}
/* menu-open: blur + lock the page behind the header */
.pub-main,.pub-footer{transition:filter .25s ease}
.nav-open ~ .pub-main,.nav-open ~ .pub-footer{filter:blur(6px) brightness(.7);pointer-events:none;user-select:none}
.pub-brand:hover{color:var(--bone)}
.brand-skull{display:inline-block;transform:rotate(-8deg);margin-right:.2rem}
.pub-links a{
  font-family:var(--font-meta);font-size:1rem;font-weight:700;letter-spacing:.1em;
  text-decoration:none;color:var(--text-on-dark-muted);text-transform:uppercase;
  background:transparent;border:1px solid var(--line);padding:.42rem .75rem;
  transition:color .15s ease,background-color .15s ease,border-color .15s ease;
}
.pub-links a:hover{color:var(--bone);border-color:var(--text-on-dark-muted)}
.pub-links a[aria-current]{color:var(--ink);background:var(--bone);border-color:var(--bone)}
/* shipping link lives only in the mobile hamburger panel (see responsive.css) */
.pub-links .pub-links-ship{display:none}
/* Desktop: brand left, page nav centered, cart right. Mobile keeps the flex/hamburger layout. */
@media (min-width:900px){
  .pub-nav{display:grid;grid-template-columns:1fr auto 1fr}  .pub-brand{margin-right:0;justify-self:start}
  .pub-links{order:0;justify-self:center;flex-wrap:nowrap}
  .pub-nav .cart-link{order:0;justify-self:end}
  .pub-nav .cart-mini-wrap{order:0;justify-self:end}
}
.pub-main{max-width:1400px;margin:0 auto;padding:2rem 1.4rem 4rem}

/* ---- shared content blocks ---- */
.pub-section{background:var(--ink);border:4px solid var(--bone);box-shadow:10px 10px 0 var(--shadow-block);padding:1.8rem;margin-bottom:2rem;position:relative}
.pub-section.gallery,.pub-section.events,.pub-section.contact,.pub-section.cart,.pub-section.mailing-list,.pub-section.piece,.pub-section.gift-cards,.pub-section.links-page{background:transparent;border:0;box-shadow:none}
.nf-actions{display:flex;gap:.8rem;margin-top:1.4rem;flex-wrap:wrap}
.nf-links{display:flex;gap:1.2rem;flex-wrap:wrap;margin-top:1.2rem;font-family:var(--font-meta);font-size:.78rem;letter-spacing:.08em}
.nf-links a{color:var(--bone);opacity:.75;text-decoration:none;border-bottom:1px solid currentColor;padding-bottom:.1rem}
.nf-links a:hover{opacity:1}
.pub-h1{
  font-family:var(--font-sans);font-size:clamp(2.4rem,1.2rem+4.8vw,4.5rem);
  line-height:.95;letter-spacing:.01em;margin:0 0 .4rem;text-transform:uppercase;
  color:var(--bone);
}
.pub-lede{font-family:var(--font-meta);font-size:var(--fs-sm);color:var(--text-on-dark-muted);line-height:1.6;margin:0 0 1.6rem;max-width:56ch}
.pub-lede + *{margin-top:0}
.back-link{
  display:inline-block;font-family:var(--font-meta);font-size:var(--fs-xs);font-weight:700;
  letter-spacing:.1em;text-decoration:none;color:var(--bone);text-transform:uppercase;
  background:var(--ink);border:2px solid var(--bone);padding:.3rem .6rem;margin-bottom:1.2rem;
  box-shadow:2px 2px 0 var(--bone);
  transition:transform .15s cubic-bezier(.34,1.56,.64,1),box-shadow .15s ease;
}
.back-link:hover{background:var(--bone);color:var(--ink);transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--shadow-block)}
.empty-stamp{display:inline-block;font-family:var(--font-meta);font-weight:700;letter-spacing:.1em;background:var(--ink);color:var(--bone);border:2px dashed var(--bone);padding:.4rem .7rem;text-transform:uppercase}

/* ---- links page ---- */
.links-page .pub-h1,.links-page .pub-lede{text-align:center}
.links-section{max-width:860px;margin:0 auto 2.6rem}
.links-section-title{
  font-family:var(--font-sans);font-size:1.1rem;font-weight:800;
  letter-spacing:.14em;text-transform:uppercase;color:var(--bone);
  margin:0 0 .8rem;padding-bottom:.4rem;border-bottom:3px solid var(--bone);
}
.links-rows{display:grid;grid-template-columns:1fr;gap:1rem}
.link-entry{
  position:relative;display:flex;flex-direction:column;gap:.5rem;
  background:var(--surface);border:3px solid var(--card-border);
  box-shadow:8px 8px 0 var(--shadow-block);
  padding:1.2rem 1.3rem 1.35rem;text-decoration:none;
  transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;
}
.link-entry:hover,.link-entry:focus-visible{
  transform:translate(-3px,-3px);box-shadow:13px 13px 0 var(--shadow-block);
  border-color:var(--bone);outline:none;
}
.link-entry-title{
  font-family:var(--font-sans);font-size:1.15rem;font-weight:800;
  color:var(--bone);line-height:1.15;
}
.link-entry-title::after{content:" ↗";font-size:.8em;color:var(--text-on-dark-muted)}
.link-entry:hover .link-entry-title::after{color:var(--bone)}
.link-entry-desc{font-family:var(--font-body);font-size:.92rem;line-height:1.55;color:var(--text-on-dark)}
.links-empty{padding:2rem 0;text-align:center}

/* admin links manager */
.link-add-section{display:flex;gap:.6rem;align-items:center;padding:.6rem 0 1rem}
.link-add-section input[type=text]{flex:1}
.link-section-block{border:1px solid var(--line);padding:.8rem;margin-bottom:1.2rem}
.link-section-rename{display:flex;gap:.6rem;align-items:center;flex:1;flex-wrap:wrap}
.link-section-rename input[type=text]{flex:1;min-width:180px}
.link-visible-label{display:flex;align-items:center;gap:.3rem;font-size:.85rem;color:var(--text-on-dark-muted)}
.link-admin-links{display:flex;flex-direction:column;gap:.45rem;padding:.6rem 0 0}
.link-admin-row{display:flex;flex-direction:column;gap:.35rem;border-bottom:1px dashed var(--line);padding-bottom:.5rem}
.link-admin-row.link-admin-hidden{opacity:.5}
.link-edit-form{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center}
.link-edit-form input[type=text]{flex:1;min-width:140px}
.drop-actions{display:flex;gap:.35rem;align-items:center;flex-wrap:wrap}
@media (max-width:720px){
  .link-section-rename,.link-edit-form{flex-direction:column;align-items:stretch}
  .link-edit-form input[type=text]{min-width:0}
}

/* ---- shop ---- */
/* closed banner: centered stamp-style card, matches drop-live voice */
.sandbox-banner{
  display:block;background:var(--bone);color:var(--ink);
  font-family:var(--font-meta);font-size:.95rem;font-weight:800;
  letter-spacing:.14em;text-transform:uppercase;text-align:center;
  padding:.6rem 1rem;margin:0 0 1.2rem;border:3px solid var(--ink);
}
@media (min-width:721px){
  .sb-no-sales::before{content:"\00b7\00a0\00a0"}
}
@media (max-width:720px){
  .sb-no-sales{display:block}
}
.shop-closed-banner{
  border:0;background:rgba(244,241,232,.06);
  box-shadow:none;
  padding:1.1rem 1.2rem;margin:0 0 1.4rem;text-align:center;
  display:flex;align-items:center;justify-content:center;gap:1.2rem;flex-wrap:wrap;
}
.shop-closed-banner .shop-closed-stamp{margin:0}
.shop-closed-banner .shop-closed-news-btn{flex:none;font-family:var(--font-sans);font-size:.78rem;font-weight:700;letter-spacing:.06em;color:var(--bone);background:transparent;border:1px solid var(--text-on-dark-muted);padding:.4rem .7rem;text-decoration:none;box-shadow:none;transform:none;min-height:0}
.shop-closed-banner .shop-closed-news-btn:hover,.shop-closed-banner .shop-closed-news-btn:focus-visible{color:var(--ink);background:var(--bone);border-color:var(--bone)}
.shop-closed-banner .shop-closed-note{flex-basis:100%;margin:0}
.shop-closed-stamp{
  display:inline-block;font-family:var(--font-meta);font-weight:700;
  font-size:var(--fs-sm);letter-spacing:.14em;text-transform:uppercase;
  color:var(--bone);--stamp-rot:var(--rot-stamp-2);transform:var(--stamp-rot);
}
.shop-closed-note{
  font-family:var(--font-body);font-size:1rem;color:rgba(244,241,232,.82);
  margin:.45rem 0 0;
}
.shop-closed-banner .brand-skull{color:var(--acid)}
.drop-live{
  display:inline-block;font-family:var(--font-meta);font-weight:700;
  font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;
  color:rgba(244,241,232,.78);margin:.2rem 0 .7rem;
  --stamp-rot:var(--rot-stamp-2);transform:var(--stamp-rot);
  box-shadow:none;
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.4s;
}
.drop-live .stamp-live{animation:none;transform:var(--rot-stamp-2p)}
.shop.pub-section{background:transparent;border:0;box-shadow:none;padding:.4rem 0 1.8rem}
.shop.pub-section::before{display:none}
.shop-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:2rem 1.8rem;align-items:start}
.shop-card{display:block;position:relative;color:var(--ink);background:var(--bone);border:3px solid var(--card-border);box-shadow:0 2px 4px rgba(0,0,0,.35),0 10px 22px rgba(0,0,0,.3);transition:transform .2s cubic-bezier(.16,.84,.44,1),box-shadow .2s cubic-bezier(.16,.84,.44,1)}
.shop-card-link{display:block;text-decoration:none;color:inherit}
/* listing cards: hover lifts the card; owner removed the tilt treatment */
.shop-card{display:block;position:relative;color:var(--text-on-dark);background:transparent;border:0;box-shadow:none;transition:transform .22s cubic-bezier(.22,.8,.35,1),filter .22s ease-out}
.shop-card-link{display:block;text-decoration:none;color:inherit}
.shop-card:hover{transform:translateY(-5px);filter:drop-shadow(0 8px 10px rgba(0,0,0,.28))}
/* owner: no white border on click */
.shop-card:focus-within{outline:none}
.shop-card-link:focus,.shop-card-link:focus-visible{outline:none}
.shop-thumb{position:relative;aspect-ratio:1/1;background:var(--surface-2);overflow:hidden}
/* photo-system.css paints .shop-thumb with a light bone gradient (later import
   wins) — intentional for the comp, but it flashes white while images load and
   shows through view-transition holes on the dark storefront. Beat it with
   specificity so import order can't resurrect it. */
.shop-card .shop-thumb{background:var(--ink-soft)}
.shop-card .shop-thumb img{background:var(--ink-soft)}
.shop-thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:opacity .15s ease}
.shop-meta{position:relative;padding:.7rem .15rem 0;border:0;display:grid;grid-template-columns:1fr auto;gap:.3rem .7rem;align-items:start}
.shop-title{grid-column:1;grid-row:1;display:block;font-family:var(--font-sans);font-size:var(--fs-md);font-weight:600;line-height:1.1;margin:0;text-transform:none;letter-spacing:0;color:var(--bone)}
.stamp-1of1{grid-column:2;grid-row:1;justify-self:end;align-self:start;font-family:var(--font-sans);font-size:.68rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;background:transparent;color:var(--text-on-dark-muted);border:1px solid var(--line-on-dark);padding:.12rem .4rem;transform:none;box-shadow:none}
.shop-spec{grid-column:1 / -1;font-family:var(--font-sans);font-size:.85rem;line-height:1.4;color:var(--text-on-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.shop-price-row{grid-column:1 / -1;display:grid;grid-template-columns:auto 1fr;align-items:baseline;gap:.55rem;border-top:0;padding-top:.1rem}
.shop-price{font-family:var(--font-sans);font-size:1.1rem;font-weight:700;color:var(--bone)}
.shop-form{justify-self:end;font-family:var(--font-sans);font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;opacity:.72}
.shop-form-sold{color:var(--bone);background:var(--sold);border:1px solid var(--sold);padding:.28rem .6rem}
.shop-form-add{color:var(--ink);background:var(--bone);border:1px solid var(--bone);padding:.28rem .6rem}
.shop-closed{display:flex;flex-direction:column;align-items:flex-start;gap:1.6rem}
/* SHOP CLOSED — mega stamp: the ONE focal point of the closed surface */
.stamp-closed{animation-delay:.25s}
.newsletter{background:var(--ink);color:var(--bone);border:3px solid var(--ink);padding:1rem 1.2rem;max-width:420px}
.newsletter p{font-family:var(--font-body);font-size:.85rem;margin:0 0 .6rem}
.newsletter form{display:flex;gap:.5rem;flex-wrap:wrap}
.newsletter input[type=email]{flex:1;min-width:180px;font-family:var(--font-body);font-size:.9rem;border:2px solid var(--bone);var(--ink);color:var(--bone);padding:.45rem .55rem}
.newsletter input[type=email]:focus{outline:none;border-color:var(--bone)}

/* ---- shop header (title row, filter row, quiet links) ---- */
.shop-head{margin:0 0 .65rem}
.shop-head-top{display:flex;align-items:baseline;justify-content:flex-start;gap:.9rem;flex-wrap:wrap}
.shop-head .pub-h1{margin:0;font-size:clamp(1.7rem,3vw,2.3rem)}
.shop-count{font-family:var(--font-sans);font-size:var(--fs-xs);font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--text-on-dark-muted);margin:0}
.drop-live{font-family:var(--font-sans);font-size:1.08rem;font-weight:700;letter-spacing:.04em;color:var(--bone);margin:.2rem 0 0;animation:none;transform:none;box-shadow:none}
.drop-live .stamp-live{display:none}
/* categories: own row under the title block, left-aligned */
.cat-pills{display:flex;flex-wrap:wrap;justify-content:center;gap:.6rem;margin:.35rem 0 1.3rem}
/* meta row under the title: drop line left, utility buttons right */
.shop-meta-row{display:flex;align-items:baseline;justify-content:center;text-align:center;gap:1rem 2rem;flex-wrap:wrap;margin:0}
.shop-meta-row .drop-live{margin:0}
.shop-meta-row .shop-tools{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.cat-pill{font-family:var(--font-sans);font-weight:600;font-size:var(--fs-sm);padding:.5rem 1.1rem;border:1px solid var(--line);background:transparent;color:var(--text-on-dark-muted);text-decoration:none;letter-spacing:.02em;transition:color .12s ease,border-color .12s ease,background-color .12s ease}
.cat-pill:hover{color:var(--bone);border-color:var(--text-on-dark-muted)}
.cat-pill:focus-visible,.shop-quick:focus-visible{outline:2px solid var(--focus);outline-offset:3px;color:var(--bone)}
.cat-pill-active{color:var(--ink);border-color:var(--bone);background:var(--bone)}
.cat-pill-active:hover{color:var(--ink);border-color:var(--bone)}
/* mobile category dropdown — same pill language, full-width bar + drop menu; hidden on desktop */
.cat-select{display:none;position:relative}
.cat-select-title{font-family:var(--font-sans);font-size:var(--fs-2xs);font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--text-on-dark-faint)}
.cat-select-btn{display:flex;align-items:center;justify-content:space-between;gap:.8rem;width:100%;min-height:48px;padding:.6rem 1rem;font-family:var(--font-sans);font-weight:600;font-size:var(--fs-sm);letter-spacing:.06em;text-transform:uppercase;color:var(--bone);background:transparent;border:1px solid rgba(241,240,237,.5);cursor:pointer;text-align:center}
.cat-select-btn:hover{background:rgba(241,240,237,.12);border-color:rgba(241,240,237,.85);color:var(--bone)}
.cat-select-btn:focus-visible{outline:2px solid var(--focus);outline-offset:3px;color:var(--bone)}
.cat-select-menu{position:absolute;left:0;right:0;top:calc(100% + .35rem);z-index:30;background:rgba(20,20,20,.97);border:1px solid rgba(241,240,237,.85);box-shadow:0 14px 30px rgba(0,0,0,.4);padding:.3rem}
.cat-select-item{display:flex;align-items:center;justify-content:center;text-align:center;min-height:44px;padding:.6rem 1rem;font-family:var(--font-sans);font-weight:600;font-size:var(--fs-sm);letter-spacing:.02em;color:var(--text-on-dark-muted);text-decoration:none;border:1px solid transparent}
.cat-select-item:hover{color:var(--bone);border-color:var(--text-on-dark-muted)}
.cat-select-item:focus-visible{outline:2px solid var(--focus);outline-offset:-2px;color:var(--bone)}
.cat-select-item-active{color:var(--ink);border-color:var(--bone);background:var(--bone)}
.cat-select-item-active:hover{color:var(--ink);border-color:var(--bone)}
.tag-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:.4rem .9rem;align-items:baseline;margin:.45rem 0 .45rem}
.tag-chips-label{font-family:var(--font-sans);font-size:var(--fs-2xs);font-weight:600;letter-spacing:.1em;text-transform:uppercase;margin-right:.1rem;color:var(--text-on-dark-faint)}
.tag-chip{font-family:var(--font-sans);font-size:var(--fs-xs);padding:0;border:0;background:transparent;color:var(--text-on-dark-muted);text-decoration:none;text-transform:lowercase}
.tag-chip:hover{color:var(--bone);text-decoration:underline;text-underline-offset:3px}
.tag-chip-active{color:var(--bone);font-weight:600;text-decoration:underline;text-underline-offset:3px}
/* gift cards + shipping & returns — real buttons, same language as filters */
.shop-quick{
  display:inline-block;font-family:var(--font-sans);font-weight:600;font-size:var(--fs-sm);
  padding:.5rem 1.1rem;border:1px solid var(--line);background:transparent;
  color:var(--text-on-dark-muted);text-decoration:none;white-space:nowrap;letter-spacing:.02em;
  transition:color .12s ease,border-color .12s ease;
}
.shop-quick:hover{color:var(--bone);border-color:var(--text-on-dark-muted)}
/* shipping lives in the footer + policies on large screens; small screens use the hamburger nav */
@media (min-width:900px){
  .shop-tools .shop-quick-ship{display:none}
}
.shop-tools{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.shop-tools .shop-quick + .shop-quick{margin-left:.6rem}

/* stamps + status badges — aligned with the stamp system in type-system.css */
.shop-empty{padding:3rem 0;text-align:center}
.shop-empty p{font-family:var(--font-body);font-size:var(--fs-xs);line-height:1.55;color:var(--text-on-dark-muted);max-width:46ch;margin:.9rem auto 0}

/* ---- shop header row (title + filters + quick links) ---- */
.shop-head{display:flex;align-items:flex-end;justify-content:center;flex-wrap:wrap;gap:1.2rem;margin:0 0 .65rem}
.shop-head-left{display:grid;grid-template-columns:auto 1fr;align-items:end;gap:.7rem 1.1rem;max-width:74ch}
.shop-head-right{display:flex;align-items:center;justify-content:flex-end;gap:.55rem .7rem;flex-wrap:wrap;max-width:44rem}
.shop-head .cat-pills{margin:0}
.shop-head .pub-h1{margin:0}
.shop-head .drop-live{margin:0 0 .18rem}
.shop-count{flex-basis:100%;font-family:var(--font-meta);font-size:var(--fs-2xs);font-weight:700;letter-spacing:.16em;text-transform:uppercase;text-align:right;color:var(--text-on-dark-muted);margin:0 0 .1rem}
/* quiet text-link quick links — no shouty buttons on the shop head (§2.3) */
.shop-quick{
  font-family:var(--font-body);font-size:var(--fs-2xs);font-weight:700;
  text-transform:uppercase;letter-spacing:.14em;text-decoration:none;color:var(--text-on-dark-muted);
  border-bottom:1px solid rgba(244,241,232,.4);padding-bottom:2px;white-space:nowrap;
  transition:color .15s ease,border-color .15s ease;
}
.shop-quick:hover{color:var(--bone);border-color:var(--bone)}
.shop-tools{display:flex;align-items:baseline;gap:.45rem .65rem;flex-wrap:wrap}
.shop-tools-label{font-family:var(--font-meta);font-size:.56rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--text-on-dark-faint)}

/* right side of the filter row: piece count + utility buttons */
.shop-filter-right{display:flex;align-items:center;gap:1.2rem;margin-left:auto;flex-wrap:wrap}
.shop-filter-right .shop-count{margin:0}

/* ---- piece detail (2-column on desktop) ---- */
.piece.pub-section{padding:2rem 2.1rem 2.4rem}
.piece-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,.8fr);gap:clamp(2rem,3.6vw,3.6rem);align-items:start}
.piece-col-images{display:flex;flex-direction:column;gap:1rem}
.piece-col-details{display:flex;flex-direction:column;gap:0;max-width:56ch;padding-top:2.2rem}
@media (max-width:768px){
  .piece.pub-section{padding:1.1rem}
  .piece-cols{grid-template-columns:1fr;gap:1.4rem}
  .piece-col-images{position:static}
  .piece-col-details{max-width:none;padding-top:0}
}
/* hierarchy: title (slab) is the focal point; price is one calm line beneath */
.piece-kicker{font-family:var(--font-meta);font-size:var(--fs-2xs);font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--text-on-dark-muted);margin-bottom:.35rem}
.piece-head{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin:.75rem 0 .35rem}
.piece-add-form{margin:.9rem 0 .4rem}
.piece-add-form .btn-pin{
  font-size:1.15rem;
  font-family:var(--font-sans);
  letter-spacing:.05em;
  padding:.9rem 1.8rem;
  background:var(--bone);
  color:var(--ink);
  border:3px solid var(--ink);
  box-shadow:6px 6px 0 var(--shadow-block);
  transform:none;
  width:100%;
  max-width:340px;
}
.piece-add-form .btn-pin:hover{
  transform:translate(-2px,-2px);
  box-shadow:8px 8px 0 var(--shadow-block);
}
.piece-add-form .btn-pin:active{
  transform:translate(1px,1px);
  box-shadow:3px 3px 0 var(--shadow-block);
}
.piece-price{font-family:var(--font-sans);font-size:2rem;font-weight:400;line-height:1;letter-spacing:.02em;text-transform:uppercase;color:var(--bone)}
.piece-price small{font-family:var(--font-meta);font-size:1rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;opacity:.75;margin-left:.18rem;color:var(--text-on-dark)}
.piece-emotion{font-family:var(--font-body);font-size:.95rem;font-weight:700;line-height:1.55;color:rgba(244,241,232,.74);margin:.7rem 0 1.25rem;max-width:42ch;letter-spacing:.015em}
/* main image: square frame, image fills it completely */
.piece-gallery{display:flex;flex-direction:column;gap:.8rem}
.piece-feature{display:grid;grid-template-columns:1fr;gap:.85rem;align-items:stretch}
.piece-stage{ background:transparent;border:4px solid var(--ink);box-shadow:7px 7px 0 var(--shadow-block);aspect-ratio:1/1;width:100%;max-height:72vh}
.piece-main{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:cover;cursor:zoom-in;transition:opacity .32s ease;view-transition-class:rr-hero}

/* beats photo-system.css's light "studio field" (later import) — the stage
   must stay transparent so the view crossfade fades over the dark page,
   never over a white field */
.piece-gallery .piece-stage{
  background:transparent;
  border:4px solid var(--ink);
  box-shadow:7px 7px 0 var(--shadow-block);
  position:relative;
}
.piece-stage-top{position:absolute;top:.7rem;left:.7rem;right:.7rem;z-index:2;display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem;pointer-events:none;view-transition-class:rr-stage-top}
.piece-stage-top .back-link,.piece-stage-top .piece-quick{pointer-events:auto}
.piece-stage .back-link{
  margin:0;white-space:nowrap;
  font-size:var(--fs-2xs);font-weight:400;letter-spacing:.08em;
  color:var(--bone);background:rgba(10,10,10,.55);border:1px solid rgba(241,240,237,.45);
  padding:.28rem .55rem;box-shadow:none;backdrop-filter:blur(2px);
  animation:bl-appear .35s ease .8s backwards;
}
.piece-stage .back-link:hover{background:rgba(10,10,10,.78);color:var(--bone);transform:none;box-shadow:none}
@keyframes bl-appear{from{opacity:0}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.piece-stage .back-link{animation:none;opacity:1}}
.piece-quick{display:none}
.piece-quick-badge{font-family:var(--font-meta);font-size:var(--fs-2xs);letter-spacing:.08em;color:var(--bone);background:rgba(10,10,10,.55);border:1px solid rgba(241,240,237,.45);padding:.28rem .55rem;backdrop-filter:blur(2px);white-space:nowrap}
.piece-quick-add{font-family:var(--font-meta);font-weight:700;font-size:var(--fs-2xs);letter-spacing:.08em;text-transform:uppercase;color:var(--ink);background:var(--bone);border:2px solid var(--ink);padding:.62rem .95rem;min-height:44px;cursor:pointer;box-shadow:2px 2px 0 rgba(10,10,10,.55)}
.piece-quick-add:hover{transform:translate(-1px,-1px)}
@media (max-width:768px){
  .piece-quick{display:flex;flex-direction:column;align-items:flex-end;gap:.3rem;animation:bl-appear .35s ease .8s backwards}
}
@media (prefers-reduced-motion:reduce){.piece-quick{animation:none;opacity:1}}
/* MORE VIEWS strip: compact row of clickable angle thumbs (see .piece-sec-* below) */
.piece-thumbs{display:flex;flex-wrap:wrap;gap:.65rem;padding-left:.15rem}
.piece-thumb{width:72px;height:72px;padding:0;border:3px solid var(--ink);background:var(--ink);overflow:hidden;cursor:pointer;line-height:0;transition:transform .12s,box-shadow .12s,border-color .12s}
.piece-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.piece-thumb:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--shadow-block)}
.piece-thumb-active{border-color:var(--bone);box-shadow:4px 4px 0 var(--shadow-block)}
.piece-noimg{margin-bottom:1.4rem}

/* fullscreen lightbox — lives outside the sticky column; on top of everything */
.lightbox{position:fixed;inset:0;z-index:100000;background:rgba(0,0,0,.94);display:flex;align-items:center;justify-content:center;padding:3rem 1rem}
.lightbox[hidden]{display:none}
.lightbox .lb-img{max-width:92vw;max-height:86vh;object-fit:contain;display:block;border:4px solid var(--bone);box-shadow:0 0 0 4px var(--ink),10px 10px 0 var(--shadow-block)}
.lb-close,.lb-prev,.lb-next{position:absolute;display:flex;align-items:center;justify-content:center;font-family:var(--font-sans);line-height:1;cursor:pointer;background:var(--ink);color:var(--bone);border:3px solid var(--ink);transition:background .12s,color .12s,transform .12s}
.lb-close{top:1rem;right:1rem;width:44px;height:44px;font-size:1.6rem}
.lb-prev,.lb-next{top:50%;transform:translateY(-50%);width:52px;height:52px;font-size:2rem}
.lb-prev{left:1rem}.lb-next{right:1rem}
.lb-close:hover,.lb-prev:hover,.lb-next:hover{background:var(--ink)}
.lb-prev:hover,.lb-next:hover{transform:translateY(-50%) scale(1.06)}
.lb-count{position:absolute;bottom:1rem;left:50%;transform:translateX(-50%);font-family:var(--font-meta);font-size:.8rem;letter-spacing:.08em;color:var(--bone);background:var(--ink);border:2px solid var(--bone);padding:.2rem .6rem}
@media(max-width:768px){
  .piece.pub-section{padding:.5rem 0 1.4rem}
  .piece-gallery{gap:.55rem}
  .piece-stage{max-height:none}
  .lb-prev{left:.4rem}.lb-next{right:.4rem}.lb-close{top:.5rem;right:.5rem}
}
/* provenance block — the piece-details ::after skull-stamp comes from texture.css */
.piece-sold-badge{display:inline-block;font-family:var(--font-sans);font-weight:700;font-size:1rem;letter-spacing:.08em;color:var(--bone);background:var(--sold);padding:.7rem 1.6rem}
.piece-details{border-top:2px solid var(--line-on-dark);padding-top:.25rem;margin-top:1.2rem}
.piece-desc{font-family:var(--font-body);font-size:.92rem;line-height:1.6;max-width:60ch;white-space:pre-wrap;margin:0 0 1.2rem;color:var(--text-on-dark)}
.piece-sec{padding:1.15rem 0;border-bottom:1px solid var(--line-on-dark)}
.piece-sec h2{display:flex;align-items:center;gap:.55rem;font-family:var(--font-meta);font-size:.82rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;margin:0 0 .75rem;color:rgba(244,241,232,.74)}
.piece-sec h2::after{content:'';height:1px;flex:1;background:repeating-linear-gradient(90deg,var(--line-on-dark) 0 8px,transparent 8px 13px)}
.piece-blurb{font-family:var(--font-body);font-size:.9rem;line-height:1.7;margin:.55rem 0;color:var(--text-on-dark)}
.piece-meta{display:grid;grid-template-columns:minmax(8.5rem,max-content) 1fr;gap:.48rem 1.1rem;font-family:var(--font-body);font-size:.82rem;line-height:1.45}
.piece-meta dt{font-weight:700;letter-spacing:.13em;color:var(--bone);text-transform:uppercase;font-size:var(--fs-2xs);padding-top:.05rem}
.piece-meta dd{margin:0;padding-bottom:.45rem;border-bottom:1px dotted var(--line-on-dark);color:var(--text-on-dark)}

.piece-editorial{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.6rem;align-items:end;margin:2rem calc(50% - 50vw) 0;padding:clamp(2rem,6vw,5rem) clamp(1.4rem,7vw,6rem);background:linear-gradient(135deg,rgba(10,10,10,.92),var(--text-on-light)),radial-gradient(circle at 22% 35%,var(--shadow-block),transparent 32%);color:var(--bone);border-top:4px solid var(--ink);border-bottom:4px solid var(--ink);overflow:hidden}
.piece-editorial::before{content:'';position:absolute;inset:0;background-image:radial-gradient(rgba(242,238,228,.22) 1px,transparent 1.2px);background-size:7px 7px;opacity:.34;pointer-events:none}
.piece-editorial > *{position:relative;z-index:1}
.piece-editorial-copy{max-width:68ch}
.piece-editorial-kicker{font-family:var(--font-body);font-size:.72rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--bone);margin:0 0 .55rem}
.piece-editorial h2{font-family:var(--font-sans);font-size:clamp(2rem,6vw,5.6rem);line-height:.92;text-transform:uppercase;max-width:10ch;margin:0 0 .8rem;color:var(--bone)}
.piece-editorial p:not(.piece-editorial-kicker){font-family:var(--font-body);font-size:.95rem;line-height:1.7;margin:0;color:rgba(255,255,255,.78)}
.piece-editorial-links{display:flex;flex-direction:column;gap:.65rem;min-width:210px}
.piece-editorial-links a{font-family:var(--font-body);font-size:.78rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--bone);text-decoration:none;border-bottom:1px solid rgba(255,255,255,.45);padding-bottom:.12rem}
.piece-editorial-links a:hover,.piece-editorial-links a:focus-visible{color:var(--bone);border-color:var(--bone)}

.piece-sticky-cart{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:1.2rem;width:100%;padding:.78rem clamp(1.1rem,4vw,4.2rem) calc(.78rem + env(safe-area-inset-bottom,0px));background:rgba(10,10,10,.82);border-top:1px solid rgba(244,241,232,.34);box-shadow:0 -1px 0 rgba(0,0,0,.8) inset,0 -18px 52px rgba(0,0,0,.5),0 -2px 0 rgba(242,238,228,.38);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.piece-sticky-cart::before{content:'';position:absolute;left:0;right:0;top:0;height:1px;background:var(--line-on-dark);pointer-events:none}
.piece-sticky-meta{display:flex;align-items:baseline;gap:.8rem;min-width:0;font-family:var(--font-body)}
.piece-sticky-meta strong{font-family:var(--font-sans);font-size:1rem;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--bone)}
.piece-sticky-meta span{font-size:.74rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--text-on-dark-muted)}
.piece-sticky-cart form{margin:0;flex:0 0 auto}
.piece-sticky-cart .btn-pin{font-size:.86rem;white-space:nowrap}
.xr.pub:has(.piece-sticky-cart) .pub-footer{padding-bottom:calc(1.2rem + 74px + env(safe-area-inset-bottom,0px))}

@media(prefers-reduced-motion:reduce){
  .piece-sticky-cart{transition:none}
}

@media(max-width:768px){
  .piece-meta{grid-template-columns:1fr;gap:.12rem}
  .piece-meta dd{padding-bottom:.6rem}
  .piece-editorial{grid-template-columns:1fr;margin-top:1.2rem;padding:2rem 1.2rem 2.4rem}
  .piece-editorial-links{min-width:0}
  .piece-sticky-cart{gap:.65rem;padding:.58rem .7rem calc(.58rem + env(safe-area-inset-bottom,0px));box-shadow:0 -1px 0 rgba(255,255,255,.76) inset,0 -14px 38px var(--line-on-light),0 -2px 0 rgba(242,238,228,.36)}
  .piece-sticky-meta{display:flex;flex-direction:column;gap:.08rem;align-items:flex-start}
  .piece-sticky-meta strong{font-size:.78rem;max-width:50vw}
  .piece-sticky-meta span{font-size:.72rem;letter-spacing:.06em}
  .piece-sticky-cart .btn-pin{font-size:.75rem;padding:.55rem .62rem}
}

.piece-in-cart-badge{display:inline-block;font-family:var(--font-sans);font-weight:700;font-size:.95rem;letter-spacing:.06em;color:var(--bone);background:var(--surface);border:1px solid var(--bone);padding:.7rem 1.6rem}

/* secondary views strip — MORE VIEWS thumbs under the stage */
/* beats photo-system.css's framed-tray .piece-secondary (later import) via higher specificity */
.piece-secondary.piece-secondary{
  align-items:center!important;gap:.6rem!important;flex-wrap:wrap!important;
  margin-top:0!important;background:none!important;border:0!important;padding:0!important;
  min-height:0!important;box-shadow:none!important;cursor:default;
}
/* mobile: strip lives under the main image, above the title */
@media (max-width:768px){
  .piece-secondary--gallery{display:flex!important;margin-top:0!important}
  .piece-secondary--details{display:none!important}
}
@media (min-width:769px){
  .piece-secondary--gallery{display:none!important}
  .piece-secondary--details{display:flex!important}
}
.piece-secondary.piece-secondary:hover{box-shadow:none!important;transform:none!important}
.piece-secondary.piece-secondary img{object-position:center!important}
.piece-sec-thumb{width:78px;height:78px;padding:0;background:none;border:0;cursor:pointer;overflow:hidden;opacity:.85;transition:opacity .12s ease,transform .12s ease}
.piece-sec-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.piece-sec-thumb:hover{opacity:1;transform:translateY(-2px)}
.piece-sec-thumb.active{opacity:1;outline:2px solid var(--bone);outline-offset:2px}

/* FREE SHIP — the badge buyers scan for: light green, unmissable */
.piece-head .stamp-freeship{
  background:#bfe8c6;color:#14532d;border-color:#14532d;
  font-size:.85rem;padding:.3rem .7rem;letter-spacing:.08em;
  box-shadow:3px 3px 0 rgba(20,83,45,.35);
}

/* 1/1 sits inline after the title on product pages */
.piece-title-stamp{font-size:.72rem;vertical-align:middle;margin-left:0;transform:rotate(2deg)}

/* similar pieces — same category or tags */
.piece-similar.pub-section{background:transparent;border:0;box-shadow:none;padding:2.8rem 0 1.8rem;margin-top:1.6rem}
.piece-similar .checkout-section-h2{margin:0 0 1.1rem}
.piece-similar .shop-grid{margin-top:0}
.piece-similar-h2{
  font-family:var(--font-meta);font-weight:800;font-size:1.15rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--bone);margin:0 0 1.4rem;text-align:center;
  border-bottom:1px solid var(--line-on-dark);padding-bottom:.65rem;
}

/* ---- gallery ---- */
.ig-wrap{margin:1rem 0}
.ig-follow{display:inline-block;font-family:var(--font-body);font-weight:700;font-size:1rem;text-decoration:none;color:var(--bone);background:var(--ink);border:3px solid var(--ink);padding:.5rem 1rem;margin-top:1rem;box-shadow:4px 4px 0 var(--shadow-block)}
.ig-follow:hover{background:var(--ink);box-shadow:4px 4px 0 var(--bone)}
.ig-follow .ig-link{color:var(--bone);text-decoration:underline}
.ig-follow .ig-link:hover{color:var(--bone)}

/* gallery: scraped Instagram feed grid (ported from instagrampull plugin) */
.ig-header{display:flex;align-items:center;gap:.8rem;margin-bottom:1.5rem}
.ig-logo{flex-shrink:0;line-height:0}
.ig-header-text a{font-family:var(--font-sans);font-size:1.2rem;text-decoration:none;color:var(--bone)}
.ig-header-text a:hover{color:var(--bone)}
.ig-header-text p{font-family:var(--font-body);font-size:var(--fs-2xs);opacity:.6;margin:.15rem 0 0;text-transform:uppercase;letter-spacing:.16em}

.ig-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.5rem}
.ig-card{display:block;text-decoration:none;position:relative;border:4px solid var(--ink);background:var(--ink);box-shadow:6px 6px 0 var(--shadow-block);overflow:hidden;transition:transform .18s ease-out,box-shadow .18s ease-out}
.ig-card:hover,.ig-card:focus-visible{transform:translateY(-6px);box-shadow:10px 12px 0 var(--shadow-block)}
.ig-img-wrap{position:relative;aspect-ratio:1/1;overflow:hidden}
.ig-img-wrap img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .25s ease-out}
.ig-card:hover .ig-img-wrap img{transform:scale(1.06)}

.ig-overlay{position:absolute;bottom:0;left:0;right:0;padding:.7rem .9rem;background:rgba(0,0,0,.82);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.ig-caption{font-family:var(--font-body);font-size:.85rem;line-height:1.35;color:var(--bone);margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ig-date{font-family:var(--font-body);font-size:var(--fs-2xs);color:rgba(255,255,255,.7);margin-top:.3rem;display:block;letter-spacing:.14em;text-transform:uppercase}

.ig-video-badge{position:absolute;top:42%;left:50%;transform:translate(-50%,-50%);z-index:3;width:48px;height:48px;background:rgba(255,255,255,.18);backdrop-filter:blur(6px);border-radius:50%;display:flex;align-items:center;justify-content:center}
.ig-video-badge svg{width:22px;height:22px;fill:var(--bone);margin-left:3px}

.ig-error{font-family:var(--font-sans);font-size:1.2rem;text-align:center;background:var(--bone);border:3px solid var(--ink);padding:.8rem;margin:1rem 0;box-shadow:5px 5px 0 var(--ink)}
.ig-empty{font-family:var(--font-sans);font-size:1.4rem;text-align:center;color:var(--text-on-dark-muted);padding:2rem 0}

@media(max-width:600px){
  /* instagram-style profile grid: full-bleed, 3 square tiles per row, tight gaps */
  .pub-section.gallery{margin-left:-.8rem;margin-right:-.8rem;padding:1rem .0rem 2.5rem}
  .ig-grid{grid-template-columns:repeat(3,1fr);gap:3px;margin-bottom:1rem}
  .ig-card{border-width:0;box-shadow:none}
  .ig-card:hover,.ig-card:focus-visible{transform:none;box-shadow:none}
  .ig-overlay{display:none}
  .ig-header{padding:0 .8rem;margin-bottom:1rem}
  .ig-follow{margin:.8rem .8rem 0}
}


/* ---- lightbox: view the post first, Instagram second ---- */
.ig-lightbox{
  position:fixed;inset:0;z-index:80;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;
  background:rgba(10,10,10,.93);padding:1.2rem;
}
.ig-lightbox[hidden]{display:none}
.ig-lb-figure{margin:0;max-width:min(760px,94vw);display:flex;flex-direction:column;gap:.7rem}
.ig-lb-img{
  max-width:100%;max-height:68vh;object-fit:contain;display:block;
  border:3px solid var(--bone);box-shadow:10px 10px 0 var(--shadow-block);background:var(--ink);
}
.ig-lb-cap{display:flex;flex-direction:column;gap:.15rem}
.ig-lb-caption{font-family:var(--font-sans);font-size:.92rem;line-height:1.5;color:var(--bone)}
.ig-lb-date{font-family:var(--font-sans);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:var(--text-on-dark-muted)}
.ig-lb-ig{font-size:.95rem}
.ig-lb-close{
  position:absolute;top:.9rem;right:1rem;
  width:44px;height:44px;font-size:1.6rem;line-height:1;
  background:var(--bone);color:var(--ink);border:3px solid var(--ink);
  cursor:pointer;box-shadow:4px 4px 0 var(--shadow-block);
}
.ig-lb-close:hover{transform:rotate(4deg)}
@media (max-width:720px){
  .ig-lightbox{padding:.7rem}
  .ig-lb-img{max-height:56vh}
}
@media (prefers-reduced-motion:reduce){
  .ig-lightbox,.ig-lb-close{transition:none}
}

/* ---- events — vertical card list: media nested left, typographic stamp ---- */
.events-list{max-width:960px;margin:0 auto;display:flex;flex-direction:column;gap:2.2rem}
.events .pub-h1{text-align:center}
.events .pub-lede{text-align:center;margin-left:auto;margin-right:auto}

.event-card{
  position:relative;display:grid;grid-template-columns:280px minmax(0,1fr);
  background:var(--surface);border:3px solid var(--card-border);
  box-shadow:10px 10px 0 var(--shadow-block);
}
.event-media{position:relative;min-height:100%;overflow:hidden}
.event-media img{
  width:100%;height:100%;object-fit:cover;display:block;
  filter:brightness(.82) saturate(.85) contrast(1.02);
  transition:filter .25s ease;
}
.event-card:hover .event-media img{filter:brightness(1) saturate(1)}

/* stamp: the poster-sticker date, rotated in the site's stamp vocabulary */
.event-stamp{
  position:absolute;top:1rem;left:1rem;z-index:2;
  display:flex;flex-direction:column;align-items:center;gap:.05rem;
  background:var(--bone);color:var(--ink);
  border:3px solid var(--ink);box-shadow:5px 5px 0 rgba(0,0,0,.45);
  padding:.5rem .9rem;transform:rotate(-2.5deg);
}
.event-stamp-month{font-family:var(--font-sans);font-size:.72rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;line-height:1}
.event-stamp-days{font-family:var(--font-sans);font-size:1.7rem;font-weight:800;line-height:1}

.event-info{padding:1.6rem 1.8rem;min-width:0;display:flex;flex-direction:column;gap:.7rem}
.event-title{font-family:var(--font-sans);font-size:1.45rem;font-weight:800;margin:0 0 .2rem;line-height:1.1;letter-spacing:.02em;color:var(--bone);text-transform:uppercase}

/* essentials block: every when/where row shares one rhythm and scale */
.event-days,.event-meta{list-style:none;margin:0;padding:0}
.event-days li,.event-loc{
  display:flex;justify-content:space-between;align-items:center;gap:1rem;
  font-family:var(--font-sans);font-size:1rem;line-height:1.35;
  padding:.5rem 0;border-bottom:1px dashed var(--line-on-dark);
}
.event-days li:last-child{border-bottom:0}
.ed-day{font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--text-on-dark-strong);white-space:nowrap}
.ed-hours{color:var(--text-on-dark);text-align:right}
.event-loc{
  display:inline-flex;justify-content:flex-start;align-items:center;gap:.5rem;
  align-self:flex-start;
  font-family:var(--font-sans);font-size:1rem;line-height:1.35;font-weight:700;
  color:var(--bone);text-decoration:underline;text-underline-offset:.18em;text-decoration-thickness:1px;
  padding:.45rem .75rem;margin:.1rem 0;
  border:1px solid var(--text-on-dark-muted);
}
.event-loc:hover,.event-loc:focus-visible{color:var(--ink);background:var(--bone);border-color:var(--bone);text-decoration:none;outline:none}
.event-loc-pin{width:1.15em;height:1.15em;flex:0 0 auto;color:inherit}
.event-when-tbd{font-family:var(--font-sans);font-size:1rem;font-weight:700;letter-spacing:.12em;color:var(--text-on-dark-muted);margin:0;padding:.5rem 0;border-bottom:1px dashed var(--line-on-dark)}
.event-desc{font-family:var(--font-sans);font-size:.95rem;line-height:1.6;margin:.2rem 0 0;color:var(--text-on-dark)}

.events-empty{padding:2rem 0;text-align:center}
.empty-stamp{display:inline-block;font-family:var(--font-sans);font-size:1rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-on-dark-muted);border:2px dashed var(--line-on-dark);padding:.9rem 1.2rem}

@media (max-width:720px){
  .events-list{gap:1.6rem}
  .event-card{grid-template-columns:1fr}
  .event-media{aspect-ratio:16/9;min-height:0}
  .event-info{padding:1.2rem 1.1rem 1.4rem}
  .event-stamp{top:.7rem;left:.7rem;padding:.35rem .65rem}
  .event-stamp-days{font-size:1.35rem}
  .event-days li{flex-direction:column;align-items:flex-start;gap:.1rem;font-size:.95rem}
  .event-loc{flex-direction:row;align-items:center;font-size:.95rem}
  .ed-hours{text-align:left}
}

@media (prefers-reduced-motion:reduce){
  .event-media img{transition:none}
}

/* ---- contact — centered message form; newsletter opt-in via checkbox ---- */
.contact-grid{display:grid;grid-template-columns:1fr;gap:2rem;align-items:start;max-width:820px;margin:1.6rem auto 0}
.contact .pub-h1{text-align:center}
.contact .pub-lede{text-align:center;margin-left:auto;margin-right:auto}
.contact-card{background:transparent;border:0;box-shadow:none;padding:0}
.contact-card-h{font-family:var(--font-sans);font-size:1rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin:0 0 1.1rem;color:var(--bone)}
.contact .field{display:grid;gap:.45rem;margin:0 0 1.1rem;min-width:0}
.contact .field label{font-family:var(--font-sans);font-size:.8rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--bone)}
.contact .field input,.contact .field textarea{
  width:100%;font-family:var(--font-sans);font-size:.95rem;color:var(--bone);
  background:transparent;border:2px solid var(--line-on-dark);border-radius:0;
  padding:.7rem .8rem;transition:border-color .15s ease;
}
.contact .field textarea{resize:vertical;min-height:8.5rem;transform:rotate(-.35deg)}
.contact .field input:focus,.contact .field textarea:focus{outline:none;border-color:var(--bone)}
.contact .field input::placeholder,.contact .field textarea::placeholder{color:var(--text-on-dark-faint)}
.field-err{font-family:var(--font-sans);font-size:.8rem;font-weight:600;color:var(--bone);background:var(--ink-soft);border-left:3px solid var(--bone);padding:.3rem .5rem}
.contact .form-actions{display:flex;align-items:center;gap:1.2rem;flex-wrap:wrap;margin:.4rem 0 0}
.check-label{display:flex;align-items:center;gap:.55rem;cursor:pointer;font-family:var(--font-sans);font-size:.85rem;font-weight:600;letter-spacing:.02em;color:var(--text-on-dark-muted)}
.check-label input{width:1.05rem;height:1.05rem;margin:0;accent-color:var(--bone);cursor:pointer;flex:none}
.btn-primary{
  display:inline-block;font-family:var(--font-sans);font-weight:800;font-size:1.08rem;
  letter-spacing:.05em;color:var(--ink);background:var(--bone);border:3px solid var(--ink);
  border-radius:0;padding:1.05rem 2.2rem;cursor:pointer;text-decoration:none;text-transform:uppercase;
  box-shadow:0 10px 24px rgba(0,0,0,.35);
  transition:transform .15s ease,box-shadow .15s ease,background-color .15s ease;
}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(0,0,0,.42);background:#fff}
.btn-primary:active{transform:translateY(0);box-shadow:0 6px 16px rgba(0,0,0,.35)}
/* shared with /mailing-list */
.contact-newsletter{background:transparent;border:0;box-shadow:none;padding:0;margin:1.2rem 0 0}
.contact-newsletter form{display:flex;gap:.6rem;flex-wrap:wrap;max-width:560px}
.contact-newsletter input[type=email]{
  flex:1;min-width:170px;font-family:var(--font-sans);font-size:.95rem;color:var(--bone);
  background:transparent;border:2px solid var(--line-on-dark);border-radius:0;padding:.7rem .8rem;
}
.contact-newsletter input[type=email]:focus{outline:none;border-color:var(--bone)}
.ml-note{font-family:var(--font-sans);font-size:.78rem;margin:.8rem 0 0;color:var(--text-on-dark-faint)}
.contact-sent{background:transparent;border:0;box-shadow:none;padding:1.2rem 0;display:flex;align-items:center;gap:.9rem;max-width:640px;margin:0 auto}
.contact-sent .stamp-1of1{background:var(--bone);color:var(--ink);border:2px solid var(--bone);padding:.3rem .6rem;font-weight:700;transform:rotate(-3deg)}
.contact-sent p{font-family:var(--font-sans);font-weight:600;margin:0;color:var(--bone)}

/* ---- policies ---- */
.policy-toc{font-family:var(--font-body);font-size:.85rem;display:flex;gap:.8rem;flex-wrap:wrap;margin:0 0 1.6rem}
.policy-toc a{text-decoration:none;color:var(--text-on-dark);font-weight:700;border-bottom:2px solid rgba(244,241,232,.4)}
.policies a:not(.policy-toc a){color:var(--bone);text-decoration:underline;text-underline-offset:2px}
.policies a:not(.policy-toc a):hover{color:var(--bone)}
.policy-toc a:hover{color:var(--bone)}
.policy-block{margin-bottom:1.6rem}
.policy-h2{font-family:var(--font-sans);font-size:1.3rem;text-transform:uppercase;margin:0 0 .5rem;border-bottom:3px solid rgba(244,241,232,.4);padding-bottom:.2rem;color:var(--bone)}
.policy-block p,.policy-list li{font-family:var(--font-body);font-size:.9rem;line-height:1.55;color:var(--text-on-dark)}
.policy-note{color:var(--text-on-dark-muted)}
.policy-block p{margin:0 0 .6rem}
.policy-list{padding-left:1.2rem;margin:0}
.policy-list li{margin-bottom:.3rem}

/* ---- public footer ---- */
.pub-footer{border-top:3px solid var(--ink);padding:1.6rem 1rem 1.2rem;background:var(--ink);color:var(--bone);font-family:var(--font-body);font-size:.8rem}
.footer-social{display:flex;gap:.8rem;justify-content:center;margin:.4rem 0 1rem}
.footer-social a{
  font-family:var(--font-body);font-size:var(--fs-2xs);font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--bone);text-decoration:none;
  border-bottom:1px solid var(--line-on-dark);padding-bottom:2px;
  transition:color .15s ease,border-color .15s ease;
}
.footer-social a:hover{color:var(--bone);border-color:var(--bone)}
.footer-links{display:flex;gap:1.4rem;flex-wrap:wrap;justify-content:center;margin-bottom:.6rem}
.footer-links a{color:var(--bone);text-decoration:none;border-bottom:1px solid var(--line-on-dark);padding-bottom:1px;font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase}
.footer-links a:hover{color:var(--bone);border-color:var(--bone)}
.footer-copy{text-align:center;font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase;opacity:.55}

/* ---- gift cards page ---- */
.giftcard-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1.4rem;margin-top:1.4rem}
.giftcard-card{
  position:relative;display:flex;flex-direction:column;gap:1rem;
  background:var(--ink);color:var(--bone);border:4px solid var(--bone);border-radius:14px;
  box-shadow:7px 7px 0 var(--shadow-block);padding:1.3rem;
  transition:transform .2s cubic-bezier(.16,.84,.44,1),box-shadow .2s;
}
.giftcard-card:hover{transform:translate(-3px,-3px) rotate(-1deg);box-shadow:10px 10px 0 var(--shadow-block)}
.giftcard-top{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}
.giftcard-brand{font-family:var(--font-body);font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.85}
.giftcard-amount{font-family:var(--font-sans);font-size:2.6rem;line-height:1;color:var(--bone);text-shadow:3px 3px 0 var(--shadow-block);letter-spacing:.01em}
.giftcard-mid{display:flex;justify-content:space-between;align-items:center;gap:1rem}
.giftcard-label{font-family:var(--font-sans);font-size:1.8rem;letter-spacing:.06em;text-transform:uppercase;font-weight:400}
.giftcard-stamp{
  font-family:var(--font-sans);font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;
  background:var(--ink);color:var(--bone);border:2px solid var(--bone);
  padding:.15rem .4rem;white-space:nowrap;
  --stamp-rot:var(--rot-stamp-3p);transform:var(--stamp-rot);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.4s;
  transition:transform var(--motion-fast) var(--ease-snap),text-shadow var(--motion-fast) ease;
}
.giftcard-stamp:hover{transform:var(--stamp-rot) translate(-1px,-1px);text-shadow:-1px 1px 0 rgba(244,241,232,.6)}
.giftcard-fine{font-family:var(--font-body);font-size:.72rem;opacity:.7;margin:0}
.giftcard-buy{width:100%;text-align:center}

/* photo-system.css — F1: photography & image presentation.
   Owner: F1. Additive rules for the pottery-imaging layer only:
   warm-neutral staging for the clay, consistent card crops, East Fork-style
   hover-swap to an in-context second image, reverent PDP gallery, responsive
   delivery, descriptive alt text. Does NOT touch layout/type/animation systems.
    Punk stays: the zine surround lives in derived art/PDP, never over the clay. */

/* ============================================================
   1. Warm-neutral stage — the ceramic gets the reverent backdrop.
   The card + PDP surfaces sit the object on a warm bone/stone field
   (comp standard: NOT stark white), with a soft contact shadow that
   keeps the piece floating like a gallery object.
   ============================================================ */
.shop-thumb{
  /* stage + crop: consistent square-ish window for the object */
  background:
    linear-gradient(180deg, var(--paper-2) 0%, var(--bone) 34%, var(--paper-2) 100%); /* warm bone */
}
.shop-thumb img{
  object-fit:cover;
}

/* ============================================================
   2. Hover-swap (East Fork's signature card behavior).
   No-JS / first paint: primary image only. With JS the second,
   in-context image fades in over it (0.25s, restrained per §2.6).
   ============================================================ */
.js .shop-thumb{ position:relative }
.js .shop-thumb img{ transition:opacity .25s ease,transform .25s ease,filter .25s ease }
.js .shop-thumb img + img{ position:absolute;inset:0;opacity:0;pointer-events:none;border:0;box-shadow:none;transform:scale(1.01);filter:saturate(.96) contrast(.98);background:var(--bone) }
/* card hover/focus/tap → gentle lift; the pottery never disappears */
.js .shop-card:hover .shop-thumb img,
.js .shop-card:focus-within .shop-thumb img,
.js .shop-card:active .shop-thumb img{ opacity:1 }
.js .shop-card:hover .shop-thumb img + img,
.js .shop-card:focus-within .shop-thumb img + img,
.js .shop-card:active .shop-thumb img + img{ opacity:0 }
.js .shop-card:hover{ box-shadow:0 2px 5px rgba(0,0,0,.10),0 12px 22px rgba(0,0,0,.18) }
/* touch devices: the object shot stays put */
@media(hover:none){
  .js .shop-thumb img{opacity:1}
  .js .shop-thumb img + img{opacity:0}
}

/* piece missing a second image → the object shot is the hero, plus a quiet
   xerox "single photo" note so the card still reads as intentional */
.shop-thumb.only-one::after{
  content:'// one shot';
  position:absolute;right:.35rem;bottom:.35rem;
  font-family:var(--font-body);font-size:.55rem;letter-spacing:.14em;
  color:var(--bone);background:var(--ink);
  border:2px solid var(--ink);padding:.08rem .3rem;opacity:.85;
  transform:rotate(-2deg);pointer-events:none;
}
/* shop second shots are honest real-photo context crops, not framed zine art. */
.shop-thumb img + img{ object-fit:cover;object-position:center center }

/* ============================================================
   3. PDP gallery — object-first, no gimmick zoom.
   ============================================================ */
.piece-stage{
  /* warm neutral studio field matched to the optimized photo background so
     the main image reads as one seamless premium stage, not side gutters. */
  background:
    radial-gradient(120% 100% at 50% 0%, var(--paper-2) 0%, var(--paper-3) 62%, var(--paper-3) 100%);
  border:2px solid var(--line-on-light);
  box-shadow:0 22px 44px rgba(0,0,0,.18);
}
.piece-main{
  /* object sits on the field with a soft ground shadow */
  filter:drop-shadow(0 18px 24px rgba(0,0,0,.16));
  background:none;
}
.piece-secondary{
  background:
    linear-gradient(135deg, rgba(241,240,237,.18), rgba(0,0,0,.10) 42%, rgba(0,0,0,.16)),
    var(--bone);
  border:2px solid var(--text-on-light-faint);
  box-shadow:0 14px 30px rgba(0,0,0,.16), 5px 5px 0 rgba(0,0,0,.72);
}
.piece-secondary img{ object-position:center center }
.piece-secondary:hover{ box-shadow:0 16px 28px rgba(0,0,0,.16), 5px 6px 0 rgba(0,0,0,.58) }
/* thumbs: keep them on the same warm field so the whole gallery reads as
    one shoot (single-photographer cohesion) */
.piece-thumb{
  width:88px;
  height:88px;
  background:var(--paper-2);
  border-width:2px;
  box-shadow:0 6px 16px rgba(0,0,0,.14);
}
.piece-thumb img{ background:var(--paper-2) }
.piece-thumb-active{ box-shadow:0 8px 18px rgba(0,0,0,.16), 4px 4px 0 var(--shadow-block) }

/* ============================================================
   4. Shop-closed state — moody process photo as the stage for the
   CLOSED stamp (design-reference asset; shell only, per BRIEF.md).
   ============================================================ */
.shop-closed{
  position:relative;min-height:62vh;overflow:hidden;
  align-items:center;justify-content:center;text-align:center;
  padding:4rem 1.5rem;margin:0;
  background:var(--bone);
}
.shop-closed::before{
  content:'';position:absolute;inset:0;z-index:0;
  background-image:url('/static/img/optimized/shop-closed-raku.jpg');
  background-size:cover;background-position:center 38%;
  opacity:.42;
}
.shop-closed > *{ position:relative;z-index:1 }
.shop-closed .pub-lede{ background:var(--bone);padding:.6rem 1rem;box-shadow:6px 6px 0 var(--ink);border:3px solid var(--ink) }
.shop-closed .news-form{ background:var(--bone);border:3px solid var(--ink);box-shadow:6px 6px 0 var(--shadow-block);padding:1rem 1.2rem;max-width:430px;margin:0 auto }

/* ============================================================
   5. Delivery — intrinsic ratio + lazy loading keep the grid calm.
   width/height attrs are set in the templates; this preserves the
   ratio while the card crops via the stage's aspect-ratio.
   ============================================================ */
.shop-thumb img{ width:100%;height:100% }

/* ============================================================
   6. Archive cards share the shop-card system — inherit the stage.
   (Selectors below only restate for archive-page parity if the
   archive ships its own markup; safe no-ops otherwise.)
   ============================================================ */

/* commerce.css — cart, checkout, orders, drop admin, order status */

/* ---- cart + checkout ---- */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.cart{position:relative;overflow:hidden}
.cart > *{position:relative;z-index:1}
.cart-notice{font-family:var(--font-body);font-size:.85rem;font-weight:700;background:var(--ink);color:var(--bone);border:3px solid var(--bone);padding:.6rem .8rem;margin-bottom:1rem}
.cart-notice-err{background:var(--ink);color:var(--bone)}
.cart-empty{padding:clamp(2rem,8vw,5rem) 1rem;text-align:center;border:3px dashed var(--bone);background:var(--surface);box-shadow:8px 8px 0 var(--shadow-block);color:var(--text-on-dark)}
.cart-empty p{font-family:var(--font-body);margin:.9rem auto 0;max-width:54ch;line-height:1.55}
.cart-empty-recovery{display:flex;justify-content:center;align-items:center;gap:.8rem;flex-wrap:wrap;margin:1.2rem auto 0}
.cart-empty-link{display:inline-block;font-family:var(--font-sans);font-size:.95rem;letter-spacing:.04em;text-transform:uppercase;background:var(--ink);color:var(--bone);border:3px solid var(--ink);padding:.55rem .9rem;text-decoration:none;box-shadow:5px 5px 0 var(--shadow-block);transform:rotate(-1deg);transition:transform .08s,box-shadow .08s}
.cart-empty-link:hover{transform:rotate(1deg) translate(-2px,-2px);box-shadow:7px 7px 0 var(--shadow-block)}
.cart-empty-note{font-size:.85rem;color:var(--text-on-dark-muted)}
.cart .pub-h1{text-align:center;margin-bottom:.6rem}
.pub-section.cart{padding:0 1.8rem 1.8rem}
.cart-step{position:relative;margin:0 0 1.25rem;padding:1.05rem 1.15rem;background:var(--text-on-dark-muted);border:2px solid rgba(10,10,10,.86);box-shadow:4px 4px 0 rgba(10,10,10,.14);color:var(--ink)}
.cart-step-contact,.cart-step-totals{background:rgba(241,240,237,.86);border:1px solid var(--line-on-light);box-shadow:none;padding:clamp(1.15rem,2.6vw,1.8rem);color:var(--ink)}
.cart-step-contact{margin-top:.25rem}
.cart-step-head{display:grid;grid-template-columns:auto 1fr;gap:.15rem .7rem;align-items:baseline;margin-bottom:.85rem}
.cart-step-contact .cart-step-head,.cart-step-totals .cart-step-head{border-bottom:1px solid var(--line-on-light);padding-bottom:.78rem;margin-bottom:1rem}
.cart-step-head .checkout-section-h2{margin:0;border-bottom:0;padding-bottom:0}
.cart-step-head p{grid-column:2;font-family:var(--font-body);font-size:.85rem;line-height:1.45;margin:0;color:var(--text-on-light-muted)}
.cart-lines{display:flex;flex-direction:column;gap:0;margin-bottom:0}
.cart-line{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.95rem;padding:.85rem 0;border-bottom:1px solid rgba(10,10,10,.14);color:var(--ink)}
.cart-line-gone{opacity:.5}
.cart-line-media{grid-column:1;grid-row:1;position:relative}
.cart-line-thumb{width:64px;height:64px;border:2px solid var(--ink);background:var(--ink);overflow:hidden;box-shadow:3px 3px 0 var(--bone)}
.cart-line-thumb a{display:block;width:100%;height:100%;cursor:pointer}
.cart-line > *{grid-row:1}
/* the remove X: pinned to the last column, above any sibling overflow — a no-img
   placeholder or sticky-nav edge must never sit on top of it */
.cart-line-remove{grid-column:4;grid-row:1;justify-self:end;position:relative;z-index:2}
.cart-line-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.cart-line-thumb .thumb-empty{display:flex;align-items:center;justify-content:center;height:100%;font-family:var(--font-body);font-size:.55rem;color:var(--bone);pointer-events:none}
.cart-line-thumb{position:relative}
.cart-line-thumb .thumb-empty{position:absolute;inset:0;background:var(--bone);color:var(--ink);opacity:1;font-family:var(--font-meta);font-size:.66rem;letter-spacing:.12em}
.cart-line-qty-badge{position:absolute;top:-.55rem;right:-.55rem;z-index:2;min-width:1.25rem;height:1.25rem;line-height:1.25rem;padding:0 .3rem;border-radius:999px;background:var(--ink);color:var(--bone);border:1px solid var(--bone);font-family:var(--font-sans);font-size:.72rem;font-weight:700;text-align:center;box-sizing:border-box}
.cart-line-title{font-family:var(--font-sans);text-transform:uppercase;font-size:.95rem;display:flex;flex-direction:column;align-items:flex-start;gap:.3rem;min-width:0}
.cart-line-name{min-width:0;overflow-wrap:anywhere}
a.cart-line-name{color:inherit;text-decoration:none}
a.cart-line-name:hover{text-decoration:underline;text-underline-offset:.2em}
.cart-mini-wrap{position:relative}
.pub-nav .cart-mini-wrap{order:2;align-self:center}
.cart-mini-panel{position:absolute;top:calc(100% + .55rem);right:-.25rem;width:24rem;z-index:60;visibility:hidden;font-family:var(--font-body);background:#FBFAF7;color:var(--ink);box-shadow:8px 8px 0 rgba(0,0,0,.5);padding:1rem 1.1rem}
.cart-mini-wrap:hover .cart-mini-panel,.cart-mini-wrap:focus-within .cart-mini-panel{visibility:visible}
@media (hover:none){.cart-mini-panel{display:none}}
.cart-mini-line{display:grid;grid-template-columns:56px minmax(0,1fr) auto;grid-template-rows:auto auto;gap:.2rem .75rem;align-items:center;padding:.55rem 0}
.cart-mini-line + .cart-mini-line{border-top:1px solid rgba(241,240,237,.14)}
.cart-mini-thumb{width:56px;height:56px;grid-row:1 / span 2}
.cart-mini-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.cart-mini-name{grid-column:2;grid-row:1;font-size:.95rem;font-weight:600;line-height:1.2;color:var(--ink);overflow-wrap:anywhere}
.cart-mini-qty{grid-column:2;grid-row:2;font-family:var(--font-meta);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);opacity:.8}
.cart-mini-price{grid-column:3;grid-row:1 / span 2;justify-self:end;align-self:center;font-weight:700;font-size:.95rem;color:var(--ink)}
.cart-mini-empty{font-family:var(--font-meta);font-size:.7rem;letter-spacing:.12em;text-align:center;opacity:.7;margin:.15rem 0}
.cart-mini-empty{font-family:var(--font-meta);font-size:.7rem;letter-spacing:.12em;text-align:center;opacity:.7;margin:.15rem 0}
.cart-mini-subtotal{display:flex;justify-content:space-between;align-items:baseline;margin-top:.5rem;padding-top:.5rem;border-top:1px solid rgba(241,240,237,.35);font-size:.95rem;font-weight:700;letter-spacing:.04em}
.cart-mini-subtotal small{font-size:.6rem;opacity:.7;font-weight:400}
.cart-mini-view{display:block;width:100%;text-align:center;margin-top:.55rem;border-color:var(--bone);font-size:.78rem;padding:.5rem .7rem;min-height:0}
.cart-line-title .status-stamp{margin-left:0;font-size:.72rem}
.cart-line-meta{flex-basis:100%;font-family:var(--font-body);font-size:.8rem;letter-spacing:.03em;text-transform:none;color:var(--text-on-light-muted);font-weight:400}
.cart-line-price{display:flex;flex-direction:column;align-items:flex-end;gap:.15rem;font-family:var(--font-body);font-weight:700;font-size:.95rem;white-space:nowrap;text-align:right}
.cart-line-price small,.cart-line-price-ship{font-weight:400;font-size:.75rem;opacity:.85}
.cart-line-remove{display:inline}
.cart-line-x{width:30px;height:30px;padding:0;background:transparent;border:1px solid var(--line-on-light);color:var(--text-on-light-muted);font-family:var(--font-sans);font-size:.85rem;line-height:1;cursor:pointer;transition:border-color .15s ease,color .15s ease}
.cart-line-x:hover{border-color:var(--ink);color:var(--ink)}
.cart-line-x:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.cart-totals{border:2px solid var(--ink);padding:.9rem 1rem;margin:1rem 0 1.1rem;background:rgba(255,255,255,.74);box-shadow:4px 4px 0 rgba(241,240,237,.82);color:var(--ink)}
.cart-subtotal,.cart-ship,.cart-tax,.cart-total{display:flex;justify-content:space-between;gap:1rem;font-family:var(--font-body);font-size:.88rem;padding:.3rem 0;border-bottom:1px solid rgba(10,10,10,.2)}
.cart-subtotal{font-family:var(--font-sans);font-size:1.45rem;letter-spacing:.01em;border-bottom:2px solid var(--ink);margin:.1rem 0 .34rem}
.cart-total{font-family:var(--font-sans);font-size:1.8rem;color:var(--bone);border-bottom:0;border-top:2px solid var(--ink);margin-top:.45rem;padding-top:.45rem}
.cart-total-pending{color:var(--ink)}
.cart-pending span{color:var(--text-on-light-faint)}
.cart-subtotal small,.cart-total small,.cart-ship small,.cart-tax small{font-size:.7rem;font-family:var(--font-body);font-weight:400;opacity:.7;color:var(--ink)}
.cart-ship-hint{font-family:var(--font-body);font-size:.78rem;opacity:.75;margin-top:.45rem;line-height:1.45}
.checkout-form{display:flex;flex-direction:column;gap:0;border:0;background:transparent;padding:0;box-shadow:none}
.checkout-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(330px,.48fr);gap:1rem;align-items:start;margin-top:.25rem;padding:1rem;background:rgba(241,240,237,.72);border:1px solid rgba(10,10,10,.26);box-shadow:5px 5px 0 rgba(10,10,10,.08);color:var(--ink)}
.checkout-panel .cart-step-contact,.checkout-panel .cart-step-totals{margin:0;min-width:0;height:100%;padding:1.05rem 1.15rem;background:rgba(255,255,255,.42)}
.cart-grid{display:grid;grid-template-columns:minmax(440px,1fr) minmax(0,1.2fr);gap:0 2.4rem;align-items:stretch}
.cart-grid .cart-step{margin:0}
.cart-grid .cart-step-contact{margin-top:0}
.cart-summary{order:1;display:flex;flex-direction:column;gap:1.1rem;border-right:1px solid var(--line-on-light);padding-right:2.4rem}
.cart-grid .checkout-form{order:2}
.cart-summary-head{font-family:var(--font-body);font-size:1.3rem;font-weight:700;letter-spacing:.02em;text-transform:none;margin:0;color:var(--bone)}
.cart-summary-count{font-family:var(--font-body);font-size:.8rem;font-weight:400;letter-spacing:.02em;text-transform:none;opacity:.75;margin-left:.4rem}
.cart-summary .cart-step-items{padding:0}
.cart-summary .cart-totals{margin:0}
.cart-summary .checkout-trust-lines{margin:0}
.pub-section.cart .cart-totals{margin:0}
.pub-section.cart .cart-step-contact{padding-top:1rem;padding-bottom:1.4rem}
.cart-step-contact .checkout-subhead:first-of-type{margin-top:.3rem}
.checkout-panel .cart-step-totals{position:sticky;top:1rem;border-color:var(--line-on-light);box-shadow:inset 0 0 0 1px rgba(255,255,255,.58)}
.checkout-intro{font-family:var(--font-body);font-size:.9rem;line-height:1.55;max-width:48ch;margin:.15rem 0 1rem;color:rgba(10,10,10,.76);text-transform:lowercase}
.checkout-subhead{font-family:var(--font-body);font-weight:700;font-size:1.3rem;letter-spacing:.01em;margin:2.2rem 0 1.1rem;color:var(--ink)}
.cart .field label.field-title{display:block;font-size:1.3rem;font-weight:700;letter-spacing:.01em;margin:0 0 .8rem;color:rgba(10,10,10,.78)}
.cart-step-contact .checkout-fields + .field-full{margin-top:2.2rem}
.cart-adjustments{display:grid;grid-template-columns:1fr;gap:.7rem;margin:.15rem 0 .7rem}
.promo-row{margin:0;padding:0;border:1px solid var(--line-on-light);background:rgba(255,255,255,.38)}
.promo-row summary{cursor:pointer;list-style:none;font-family:var(--font-body);font-size:.78rem;font-weight:700;letter-spacing:.08em;padding:.62rem .7rem;display:flex;justify-content:space-between;gap:.6rem;align-items:center}
.promo-row summary::-webkit-details-marker{display:none}
.promo-row summary:after{content:"+";font-family:var(--font-sans);color:var(--bone);font-size:1.05rem;line-height:1}
.promo-row[open] summary{border-bottom:1px dashed var(--text-on-light-faint);background:rgba(241,240,237,.2)}
.promo-row[open] summary:after{content:"-"}
.promo-row summary span{font-size:.68rem;font-weight:400;letter-spacing:.04em;text-transform:none;color:var(--text-on-light-faint)}
.promo-input{display:flex;gap:.5rem;align-items:center}
.promo-row .promo-input{padding:.65rem .7rem .75rem}
.promo-input input[type=text]{font-family:var(--font-body);font-size:.9rem;border:2px solid var(--ink);padding:.5rem .6rem;background:var(--bone);flex:1;min-width:0}
.promo-input input[type=text]:focus{outline:none;border-color:var(--focus);box-shadow:0 0 0 3px var(--bone)}
.cart-giftbuy,.cart-giftcard,.cart-discount{display:flex;justify-content:space-between;font-family:var(--font-body);font-size:.82rem;padding:.15rem 0}
.cart-giftbuy{color:var(--text-on-light-strong)}
.cart-giftcard,.cart-discount{color:var(--ink)}
.checkout-section-h2{font-family:var(--font-sans);font-size:1.1rem;letter-spacing:.06em;text-transform:uppercase;border-bottom:2px solid var(--ink);padding-bottom:.2rem;margin:.4rem 0 .2rem}
.cart-step-contact .checkout-section-h2,.cart-step-totals .checkout-section-h2{font-family:var(--font-body);font-size:1.02rem;font-weight:700;letter-spacing:.14em;text-transform:lowercase;border-bottom:0;margin:0;color:var(--ink)}
.checkout-fields{display:grid;grid-template-columns:1fr;gap:.85rem 1rem;align-items:end}
.cart-step-contact .field-full{max-width:41rem}
.fulfillment-row{display:flex;gap:.55rem;flex-wrap:wrap}
.radio-pill{display:flex;align-items:center;gap:.5rem;font-family:var(--font-body);font-weight:700;font-size:.78rem;letter-spacing:.1em;border:1px solid var(--line-on-light);padding:.55rem .7rem;cursor:pointer;background:rgba(255,255,255,.54);transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease}
.radio-pill input{appearance:none;-webkit-appearance:none;flex:0 0 auto;width:1rem;height:1rem;margin:0;border:1px solid var(--text-on-dark-muted);border-radius:50%;background:transparent;cursor:pointer;transition:border-color .15s ease,background .15s ease}
.radio-pill:has(input:checked) input{border-color:var(--bone);background:radial-gradient(circle,var(--bone) 0 40%,transparent 46%)}
.radio-pill:has(input:checked){background:var(--ink);border-color:var(--ink);color:var(--bone);box-shadow:inset 0 -2px 0 var(--bone)}
.radio-pill:focus-within{outline:3px solid var(--focus);outline-offset:2px}
.pickup-card{margin-top:.75rem;border:2px solid var(--ink);background:linear-gradient(135deg,rgba(255,255,255,.78),rgba(241,240,237,.18));padding:.85rem .95rem;font-family:var(--font-body);display:grid;gap:.75rem;max-width:41rem;box-shadow:4px 4px 0 var(--shadow-block);color:var(--ink)}
.pickup-card[hidden]{display:none}
.cart .field[hidden],.cart .field-full[hidden]{display:none}
.pickup-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:.8rem;flex-wrap:wrap;border-bottom:2px dashed var(--ink);padding-bottom:.45rem}
.pickup-card strong{font-family:var(--font-sans);text-transform:uppercase;font-size:.95rem;letter-spacing:.04em;color:var(--ink)}
.pickup-card-head span{font-size:.75rem;line-height:1.45;color:rgba(10,10,10,.7)}
.pickup-trust-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem .85rem}
.pickup-trust-grid div{background:rgba(255,255,255,.58);border:1px dashed var(--text-on-light-faint);padding:.55rem .6rem;display:grid;gap:.18rem;min-height:4.3rem}
.pickup-trust-grid b{font-family:var(--font-sans);font-size:.68rem;letter-spacing:.1em;color:var(--text-on-light-strong)}
.pickup-trust-grid span{font-size:.78rem;line-height:1.45;color:var(--text-on-light)}
.cart .field label{font-family:var(--font-body);font-size:.8rem;letter-spacing:.05em;font-weight:600;color:rgba(10,10,10,.78)}
.cart .field label em{opacity:.75;font-weight:400;font-style:normal;text-transform:none;letter-spacing:.04em}
.cart .field .radio-pill{font-size:.78rem;letter-spacing:.1em;color:var(--ink)}
.cart .field .radio-pill:has(input:checked){color:var(--bone)}
.cart .field input,.cart .field select,.cart .field textarea{font-family:var(--font-body);font-size:.92rem;border:0;border-bottom:1px solid rgba(10,10,10,.76);background:rgba(255,255,255,.58);padding:.62rem .2rem .42rem;color:var(--ink);border-radius:0;box-shadow:none;width:100%;max-width:100%;box-sizing:border-box}
.cart .field input::placeholder,.cart .field textarea::placeholder{color:rgba(10,10,10,.45);opacity:1}
.cart-step-contact .field.field-full{margin-bottom:1.5rem}
.cart .field input:focus,.cart .field select:focus,.cart .field textarea:focus{outline:none;border-color:var(--focus);background:var(--bone);box-shadow:0 3px 0 var(--bone)}
.cart .form-actions{display:flex;flex-direction:column;gap:.42rem;margin-top:2.4rem;align-items:stretch}
.cart .checkout-note{font-family:var(--font-body);font-size:.9rem;line-height:1.45;margin:0;color:rgba(10,10,10,.75)}
.checkout-trust-lines{display:grid;grid-template-columns:1fr;gap:.45rem;margin:.9rem 0 .75rem;padding-top:.8rem;border-top:1px solid var(--line-on-light);text-align:center}
.checkout-trust-lines p{font-family:var(--font-body);font-size:.76rem;line-height:1.42;margin:0;color:var(--text-on-light-muted)}
.checkout-trust-lines strong{color:var(--ink);font-weight:700}
.cart .checkout-pay-button{background:var(--ink);color:var(--bone);border-color:var(--ink);box-shadow:none;transform:none;letter-spacing:.08em;text-transform:uppercase;font-weight:800;font-size:1.05rem;padding:.8rem 1.2rem;min-width:0;width:100%;text-align:center}
.cart .checkout-pay-button:hover{transform:none;box-shadow:inset 0 -4px 0 var(--bone);background:var(--ink);color:var(--bone)}
.add-to-cart{display:inline-block}
.add-to-cart .btn-pin{font-size:1rem}

/* ---- nav cart badge + toast ---- */
.pub-nav .cart-link{display:inline-flex;align-items:center;gap:.35rem;border:none;padding:.3rem .35rem;background:transparent;color:var(--text-on-dark-muted)}
.pub-nav .cart-link:hover{background:transparent;color:var(--bone)}
.pub-nav .cart-link[aria-current]{background:transparent;border:none;color:var(--bone);box-shadow:0 3px 0 var(--bone)}
.cart-icon{width:1.5rem;height:1.5rem;display:block;flex:none}
.cart-count{display:inline-block;font-family:var(--font-sans);font-size:.8rem;background:var(--bone);color:var(--ink);border:2px solid var(--bone);min-width:1.2rem;height:1.2rem;line-height:1rem;text-align:center;padding:0 .25rem;border-radius:999px}
.cart-count[hidden]{display:none}
.toast{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) translateY(1rem);background:var(--ink);color:var(--bone);font-family:var(--font-body);font-weight:700;font-size:1rem;letter-spacing:.02em;border:3px solid var(--bone);box-shadow:6px 6px 0 rgba(0,0,0,.55);padding:.95rem 1.5rem;z-index:9999;opacity:0;transition:opacity .2s,transform .2s;pointer-events:none;width:max-content;max-width:min(92vw,30rem);text-align:center}
.toast.toast-show{opacity:1;transform:translate(-50%,-50%) translateY(0)}
.toast-good{border-color:#bfe8c6}
.toast-bad{border-color:var(--blood)}

/* ---- checkout success + public order tracking ---- */
/* These are light paper surfaces on the dark site — everything on them is ink. */
.receipt-surface{position:relative;text-align:left;background:linear-gradient(180deg,rgba(241,240,237,.96),rgba(255,255,255,.7));max-width:1120px;color:var(--ink)}
.receipt-surface .pub-h1{color:var(--ink)}
.receipt-surface .pub-lede{color:var(--text-on-light-muted)}
.receipt-surface .back-link{background:var(--ink);color:var(--bone);border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink)}
.receipt-surface .back-link:hover{background:var(--bone);color:var(--ink);box-shadow:4px 4px 0 var(--shadow-block)}
.order-status .pub-h1{color:var(--ink)}
.order-status .pub-lede{color:var(--text-on-light-muted)}
.receipt-surface:after{content:"";position:absolute;inset:1.2rem 1.2rem auto auto;width:7.8rem;height:7.8rem;border:2px dashed var(--line-on-light);border-radius:50%;background:radial-gradient(circle,rgba(0,0,0,.14),transparent 62%);transform:rotate(9deg);pointer-events:none}
.success-stamp{
  display:inline-block;font-family:var(--font-sans);
  font-size:clamp(1.6rem,1rem+2.6vw,2.6rem);letter-spacing:.04em;text-transform:uppercase;
  background:var(--bone);color:var(--ink);border:4px solid var(--ink);
  padding:.25rem 1rem;box-shadow:7px 7px 0 var(--shadow-block);margin-bottom:1rem;
  --stamp-rot:var(--rot-stamp-3);transform:var(--stamp-rot);
  animation:stamp-thwack var(--motion-snap) var(--ease-snap) both;animation-delay:.3s;
}
.receipt-hero,.status-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.2rem;align-items:end;margin-bottom:1rem;position:relative;z-index:1}
.receipt-kicker{font-family:var(--font-body);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--text-on-light-muted);margin:0 0 .25rem}
.receipt-number-card{align-self:stretch;min-width:210px;background:var(--ink);color:var(--bone);border:3px solid var(--ink);box-shadow:6px 6px 0 var(--bone);padding:.85rem 1rem;display:flex;flex-direction:column;justify-content:center;gap:.2rem;font-family:var(--font-body)}
.receipt-number-card span{font-size:.72rem;letter-spacing:.14em;color:var(--text-on-dark-muted);font-weight:700}
.receipt-number-card strong{font-family:var(--font-sans);font-size:clamp(1.45rem,1rem + 1.6vw,2.45rem);line-height:.95;color:var(--bone);word-break:break-word}
.order-meta{background:var(--ink);color:var(--bone);border:3px solid var(--ink);padding:.8rem 1rem;margin:1rem 0}
.order-num{font-family:var(--font-sans);letter-spacing:.04em}
.order-num strong{color:var(--bone)}
.order-email{font-family:var(--font-body);font-size:.8rem;margin-top:.2rem}
.order-items{display:flex;flex-direction:column;gap:.4rem;margin:1rem 0}
.order-item{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.8rem;font-family:var(--font-body);font-size:.95rem;border-bottom:1px solid var(--ink);padding:.2rem 0 .55rem}
.order-item-title{min-width:0;overflow-wrap:anywhere}
.order-item-title b{display:block;font-family:var(--font-sans);text-transform:uppercase;font-size:.95rem;letter-spacing:.02em}
.order-item-title small{display:block;font-size:.72rem;color:var(--text-on-light-faint);margin-top:.12rem}
.order-item-price{font-weight:700;white-space:nowrap}
.receipt-thumb{width:58px;height:58px;display:grid;place-items:center;background:linear-gradient(135deg,var(--bone),rgba(241,240,237,.75));border:2px solid var(--ink);box-shadow:4px 4px 0 var(--shadow-block);font-size:1.35rem;color:var(--ink);overflow:hidden;flex:0 0 auto}
.receipt-thumb-proof{width:88px;height:88px;background:var(--bone);padding:3px;transform:rotate(-1deg)}
.receipt-thumb-proof img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(1.02) contrast(1.03)}
.order-totals{display:grid;grid-template-columns:max-content 1fr;gap:.3rem 1rem;font-family:var(--font-body);font-size:.9rem;margin:1rem 0;border-top:3px solid var(--ink);padding-top:.6rem}
.order-totals dt{font-weight:700;letter-spacing:.06em}
.order-totals dd{margin:0;text-align:right}
.order-total{font-family:var(--font-sans);font-size:1.4rem;color:var(--ink)}
.order-note{margin-top:1rem}
.receipt-card{position:relative;z-index:1;background:rgba(255,255,255,.72);border:2px solid var(--ink);box-shadow:5px 5px 0 rgba(10,10,10,.16);padding:1rem 1.05rem;margin:1rem 0}
.receipt-card-head{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;border-bottom:2px dashed var(--text-on-light-faint);padding-bottom:.45rem;margin-bottom:.75rem}
.receipt-card h2,.receipt-card-head h2{font-family:var(--font-sans);font-size:.86rem;letter-spacing:.09em;text-transform:uppercase;margin:0;color:var(--ink)}
.receipt-card-head span{font-family:var(--font-body);font-size:.72rem;color:var(--text-on-light-muted);text-align:right}
.receipt-items{margin:.2rem 0 0}
.receipt-totals{background:rgba(241,240,237,.78);border:2px solid var(--ink);border-top:5px solid var(--ink);box-shadow:5px 5px 0 rgba(0,0,0,.32);padding:.85rem 1rem;margin:1rem 0 1.3rem;max-width:520px;margin-left:auto}
.receipt-next-grid,.status-info-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem;align-items:start}
.receipt-letter{background:linear-gradient(135deg,rgba(241,240,237,.2),rgba(255,255,255,.76))}
.receipt-letter p{font-family:var(--font-body);font-size:.9rem;line-height:1.55;margin:.65rem 0 0;max-width:62ch}
.receipt-steps ol{list-style:none;display:grid;gap:.65rem;margin:.7rem 0 0;padding:0}
.receipt-steps li{display:grid;grid-template-columns:6.2rem 1fr;gap:.75rem;align-items:start;font-family:var(--font-body);border-top:1px dashed var(--line-on-light);padding-top:.6rem}
.receipt-steps li:first-child{border-top:0;padding-top:0}
.receipt-steps strong{font-family:var(--font-sans);text-transform:uppercase;font-size:.78rem;color:var(--ink);letter-spacing:.07em}
.receipt-steps span{font-size:.84rem;line-height:1.45;color:rgba(10,10,10,.78)}
.receipt-actions{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:1.2rem}

/* ---- drop admin ---- */
.status-open{background:var(--bone);color:var(--ink)}
.status-closed{background:var(--ink);color:var(--bone)}
.drops-list{display:flex;flex-direction:column;gap:.6rem;margin-top:1rem}
.drop-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;background:var(--bone);border:3px solid var(--ink);padding:.7rem .9rem;box-shadow:5px 5px 0 var(--shadow-block);flex-wrap:wrap}
.drop-info{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.drop-name{font-family:var(--font-sans);text-transform:uppercase}
.drop-ts{font-family:var(--font-body);font-size:.8rem;opacity:.85}
.drop-actions{display:flex;gap:.5rem}
.drop-actions form{display:inline}

/* ---- checkout return (confirming) ---- */
.checkout-return{max-width:720px;min-height:52vh;display:flex;flex-direction:column;justify-content:center}
.return-card{margin:1.4rem 0 1rem;padding:clamp(1.2rem,3vw,2rem);border:1px solid var(--line-on-light);background:rgba(241,240,237,.9);box-shadow:inset 0 0 0 1px rgba(255,255,255,.72);color:var(--ink)}
.return-stamp{margin:0 0 1.2rem}
.return-msg{font-family:var(--font-body);font-size:.92rem;line-height:1.55;max-width:58ch;margin:.6rem 0;text-transform:lowercase;color:var(--ink)}
.return-small{font-family:var(--font-body);font-size:.74rem;letter-spacing:.12em;text-transform:lowercase;color:var(--text-on-light-faint);margin:.85rem 0 0;padding-top:.85rem;border-top:1px solid var(--line-on-light)}
.return-fallback{font-size:.82rem;color:var(--text-on-light-muted)}
.return-msg a{color:var(--bone);font-weight:700}

/* ---- admin orders ---- */
.orders-list{display:flex;flex-direction:column;gap:.6rem;margin-top:1.2rem}
.order-row{display:grid;grid-template-columns:auto auto 1fr auto auto auto;align-items:center;gap:.8rem;text-decoration:none;color:var(--ink);background:var(--bone);border:3px solid var(--ink);padding:.6rem .8rem;box-shadow:5px 5px 0 var(--shadow-block);font-family:var(--font-body);font-size:.85rem}
.order-row:hover{transform:translate(-2px,-2px);box-shadow:7px 7px 0 var(--shadow-block)}
.order-row .order-num{font-family:var(--font-sans);letter-spacing:.02em}
.order-row .order-total{font-weight:700}
.order-row .order-date{opacity:.65;font-size:.78rem}
.order-items-count{font-size:.78rem;opacity:.8}
.order-detail{max-width:720px}
.order-detail-head{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin-bottom:1rem}
.order-detail .order-meta{display:grid;grid-template-columns:max-content 1fr;gap:.3rem 1rem;font-family:var(--font-body);font-size:.88rem;border-top:3px dashed var(--ink);border-bottom:3px dashed var(--ink);padding:.8rem 0;margin-bottom:1.2rem}
.order-detail .order-meta dt{font-weight:700;letter-spacing:.08em;color:var(--bone)}
.order-detail .order-meta dd{margin:0;word-break:break-all}
.order-detail .order-items h2{font-family:var(--font-sans);font-size:1rem;letter-spacing:.04em;margin:0 0 .5rem}
.order-actions{margin-top:1.6rem;border:3px dashed var(--bone);padding:1rem 1.2rem}
.order-actions h2{font-family:var(--font-sans);font-size:1rem;margin:0 0 .8rem}
.order-actions form{display:inline-flex;align-items:center;gap:.5rem;margin:0 .8rem .6rem 0;flex-wrap:wrap}
.ship-form input[type=text]{font-family:var(--font-body);font-size:.9rem;border:2px solid var(--ink);background:var(--bone);padding:.4rem .5rem;min-width:180px}
.ship-form input[type=text]:focus{outline:none;border-color:var(--focus);box-shadow:0 0 0 3px var(--bone)}
.refund-relist{font-family:var(--font-body);font-size:.8rem;display:inline-flex;align-items:center;gap:.3rem}
.order-receipt{font-family:var(--font-body);font-size:.8rem;margin-top:1.4rem;word-break:break-all}
.order-receipt a{color:var(--bone);font-weight:700}

/* order-status stamp variants (shared admin+public) */
.status-pending{background:var(--bone);color:var(--ink);border-style:dashed}
.status-paid{background:var(--bone);color:var(--ink)}
.status-packed{background:var(--bone);color:var(--ink)}
.status-shipped{background:var(--ink);color:var(--bone)}
.status-cancelled{background:var(--ink);color:var(--bone)}
.status-refunded{background:var(--ink);color:var(--bone);text-decoration:line-through}

/* ---- public order status page ---- */
.order-status .status-stamp{justify-self:end;align-self:center;font-size:1rem;box-shadow:5px 5px 0 var(--shadow-block);border-width:3px}
.status-card{box-shadow:6px 6px 0 var(--shadow-block)}
.status-timeline{list-style:none;margin:.9rem 0 0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;font-family:var(--font-body);counter-reset:status-step}
.status-timeline li{position:relative;min-height:6.8rem;border:2px dashed rgba(10,10,10,.4);background:var(--text-on-dark-muted);padding:.75rem .7rem .65rem;display:flex;flex-direction:column;gap:.4rem}
.status-timeline li:before{counter-increment:status-step;content:counter(status-step);width:1.55rem;height:1.55rem;display:grid;place-items:center;background:var(--bone);border:2px solid var(--ink);font-family:var(--font-sans);margin-bottom:.2rem}
.status-timeline li.is-done{border-style:solid;background:rgba(241,240,237,.26)}
.status-timeline li.is-done:before{content:"✓";background:var(--bone)}
.status-timeline li.is-current{border-style:solid;background:rgba(241,240,237,.26);box-shadow:4px 4px 0 rgba(241,240,237,.6)}
.status-timeline li.is-current:before{content:"✓";background:var(--bone)}
.status-timeline strong{font-family:var(--font-sans);text-transform:uppercase;font-size:.78rem;letter-spacing:.08em;color:var(--ink)}
.status-timeline span{font-size:.74rem;line-height:1.4;color:rgba(10,10,10,.7)}
.order-status .order-status-meta{display:grid;grid-template-columns:max-content 1fr;gap:.3rem 1rem;font-family:var(--font-body);font-size:.88rem;border-top:3px dashed var(--ink);border-bottom:3px dashed var(--ink);padding:.8rem 0;margin:.75rem 0 0}
.order-status .order-status-meta dt{font-weight:700;letter-spacing:.08em;color:var(--bone)}
.order-status .order-status-meta dd{margin:0;overflow-wrap:anywhere}
.order-status .order-items h2{font-family:var(--font-sans);font-size:1rem;margin:0 0 .5rem}
.order-status .order-totals{max-width:520px;margin-top:1rem}
.order-status .receipt-totals{display:block;margin-left:auto}
.order-status .order-totals-row{display:flex;justify-content:space-between;gap:1rem;font-family:var(--font-body);font-size:.9rem;padding:.22rem 0;border-bottom:1px solid rgba(10,10,10,.16)}
.order-status .order-totals-row:last-child{border-bottom:0;border-top:3px solid var(--ink);margin-top:.35rem;padding-top:.45rem}
.order-status .order-totals-row.order-total{font-family:var(--font-sans);font-size:1.45rem;color:var(--bone);line-height:1}
.order-status .order-note{font-family:var(--font-body);font-size:.9rem;margin-top:1rem}

/* ---- tax line in order totals ---- */
.cart-tax,.order-tax{display:flex;justify-content:space-between;font-family:var(--font-body)}
.order-discount{color:var(--bone);font-size:.82rem}
.order-address{margin-top:1rem;padding:1rem;border:2px solid var(--ink)}
.order-address h2{font-family:var(--font-sans);font-size:.86rem;letter-spacing:.09em;text-transform:uppercase;margin:0 0 .65rem}
.order-address p{font-family:var(--font-body);font-size:.86rem;line-height:1.5;margin:.25rem 0;color:rgba(10,10,10,.78)}
.address-reveal{margin:.3rem 0 0}
.address-reveal summary{cursor:pointer;font-family:var(--font-body);font-size:.8rem;font-weight:700;color:var(--ink);border-bottom:1px dashed rgba(10,10,10,.4);display:inline-block;padding-bottom:.1rem}
.address-reveal summary:hover{color:var(--bone)}
.address-reveal-note{font-weight:400;font-size:.72rem;color:var(--text-on-light-faint)}
.address-reveal[open] summary{margin-bottom:.4rem}
.order-address .address-note{font-weight:700;color:var(--bone);letter-spacing:.04em;text-transform:uppercase;font-size:.72rem}
.shipping-address-lines{font-family:var(--font-body);font-style:normal;font-size:.9rem;line-height:1.55;background:rgba(241,240,237,.78);border:1px dashed var(--line-on-light);padding:.65rem;margin:.45rem 0 0;color:var(--text-on-light)}
.shipping-address-lines span{display:block}
.status-note{margin-top:1.2rem}

@media (max-width:700px){
  .cart-grid{display:flex;flex-direction:column;gap:1.5rem}
  .cart-summary{display:contents}
  .checkout-fields{grid-template-columns:1fr;gap:.85rem}
  .cart-step-contact .field-full,.pickup-card{max-width:none}
  .cart-adjustments{grid-template-columns:1fr}
  .checkout-trust-lines{grid-template-columns:1fr}
  .receipt-surface{padding-inline:1rem}
  .receipt-surface:after{display:none}
  .receipt-hero,.status-hero,.receipt-next-grid,.status-info-grid{grid-template-columns:1fr}
  .receipt-number-card{min-width:0;align-self:auto}
  .receipt-card-head{display:block}
  .receipt-card-head span{display:block;text-align:left;margin-top:.25rem}
  .receipt-totals{max-width:none;margin-left:0}
  .receipt-steps li{grid-template-columns:1fr;gap:.2rem}
  .status-timeline{grid-template-columns:1fr}
  .status-timeline li{min-height:0}
  .order-item{grid-template-columns:1fr;align-items:start}
  .order-item-price{grid-column:1;justify-self:start}
  .order-item-title b{font-size:.82rem;line-height:1.1}
  .order-item-title small{font-size:.66rem;line-height:1.25}
  .receipt-thumb{width:48px;height:48px}
  .receipt-thumb-proof{width:76px;height:76px}
  .order-status .order-item{grid-template-columns:86px minmax(0,1fr);column-gap:.9rem}
  .order-status .order-item-price{grid-column:2;justify-self:start}
  .receipt-actions .back-link{width:100%;text-align:center;box-sizing:border-box}
}

@media (min-width:701px) and (max-width:1100px){
  .cart-grid{display:flex;flex-direction:column;gap:1.5rem}
  .cart-summary{display:contents}
}

/* ---- shared button base (public) ---- */
.btn-pin{display:inline-block;font-family:var(--font-sans);font-size:1rem;letter-spacing:.04em;text-decoration:none;color:var(--bone);background:var(--ink);border:3px solid var(--ink);padding:.55rem .9rem;box-shadow:5px 5px 0 var(--shadow-block);transform:rotate(-1deg);transition:transform .08s,box-shadow .08s;cursor:pointer}
.btn-pin:hover{transform:rotate(1deg) translate(-2px,-2px);box-shadow:7px 7px 0 var(--shadow-block)}
.btn-pin-acid{background:var(--bone);color:var(--ink);border-color:var(--ink);box-shadow:5px 5px 0 var(--ink)}
.btn-pin-acid:hover{box-shadow:7px 7px 0 var(--shadow-block)}
.btn-pin-sold{background:var(--ink);color:var(--bone);border-color:var(--bone);box-shadow:5px 5px 0 var(--ink)}
.btn-pin-sold:hover{box-shadow:7px 7px 0 var(--bone)}
.btn-pin-danger{background:var(--ink);color:var(--bone);border-color:var(--bone);box-shadow:5px 5px 0 var(--shadow-block);transform:rotate(1deg)}
.btn-pin-danger:hover{transform:rotate(-1deg) translate(-2px,-2px);box-shadow:7px 7px 0 var(--shadow-block)}
.thumb-empty{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--font-body);font-size:.7rem;color:var(--bone);opacity:.5;letter-spacing:.1em}
.shop-thumb .thumb-empty{color:var(--ink);opacity:.6}

/* lightbox preview for cart/checkout line images */
.cart-lightbox{position:fixed;inset:0;background:rgba(0,0,0,.92);display:grid;place-items:center;z-index:9999;cursor:zoom-out}
.cart-lightbox img{max-width:92vw;max-height:92vh;border:2px solid var(--bone)}

/* ---- checkout surfaces: SOLID paper + ink text (override pass) ----
   The cart/checkout flow renders on solid light paper with ink type;
   no translucent fills, no bone-on-paper text. */
.cart-step{background:#FCFBF8;border:1px solid var(--ink);box-shadow:4px 4px 0 var(--shadow-block);color:var(--ink)}
.cart-step-contact,.cart-step-totals{background:#FCFBF8}
.cart-lines{background:transparent}
.cart-line{background:#fff;border:1px solid var(--ink);box-shadow:3px 3px 0 var(--shadow-block)}
.cart-line:hover{transform:none;box-shadow:5px 5px 0 var(--shadow-block)}
.cart-line-title,.cart-line-name{color:var(--ink)}
.cart-line-meta{color:var(--text-on-light-muted)}
.cart-line-price,.cart-line-price small{color:var(--ink)}
.checkout-section-h2{color:var(--ink)}
.cart .field label{color:var(--text-on-light)}
.cart .field input,.cart .field select,.cart .field textarea{background:#fff;border-bottom:1px solid var(--ink);color:var(--ink)}
.cart .field input:focus,.cart .field select:focus,.cart .field textarea:focus{border-bottom-color:var(--ink);box-shadow:0 2px 0 var(--ink)}
.checkout-panel{background:#F1F0ED;border:1px solid var(--ink);box-shadow:5px 5px 0 var(--shadow-block)}
.checkout-panel .cart-step-contact,.checkout-panel .cart-step-totals{background:#FCFBF8}
.cart-totals{background:#fff;box-shadow:4px 4px 0 var(--shadow-block)}
.cart-subtotal,.cart-total{color:var(--ink)}
.cart .checkout-pay-button{background:var(--ink);color:var(--bone);border:1px solid var(--ink)}
.cart .checkout-pay-button:hover{box-shadow:inset 0 -4px 0 var(--bone)}
.radio-pill{display:flex;align-items:center;gap:.55rem;background:#fff;border:1px solid var(--ink);color:var(--ink)}
.radio-pill:hover{border-color:var(--text-on-light-strong)}
.radio-pill input{appearance:none;-webkit-appearance:none;margin:0;width:1.05rem;height:1.05rem;border:2px solid var(--ink);border-radius:50%;background:#fff;display:grid;place-items:center;flex:0 0 auto}
.radio-pill input:checked::before{content:"";width:.5rem;height:.5rem;border-radius:50%;background:var(--ink)}
.radio-pill:has(input:checked){background:var(--ink);color:var(--bone);border-color:var(--ink)}
.radio-pill:has(input:checked) input{border-color:var(--bone);background:var(--ink)}
.radio-pill:has(input:checked) input::before{background:var(--bone)}
.promo-row,.radio-pill{background:#fff}
.promo-row[open] summary{background:var(--paper-2)}
.cart .checkout-note,.checkout-intro{color:var(--text-on-light)}
.pickup-card{background:#fff;box-shadow:4px 4px 0 var(--shadow-block)}

/* fulfillment selector — self-contained component (no legacy cascade) */
.cart .fulfillment-row .fulfill-pill{display:inline-flex;align-items:center;gap:.55rem;background:#fff;border:1px solid var(--ink);padding:.6rem .95rem;cursor:pointer;font-family:var(--font-sans);font-size:.9rem;font-weight:600;color:var(--ink)}
.cart .fulfillment-row .fulfill-pill:hover{border-color:var(--text-on-light-strong)}
.cart .fulfillment-row .fulfill-pill{position:relative}
.cart .fulfillment-row .fulfill-pill input{position:absolute;opacity:0;width:1px;height:1px;margin:0;padding:0;pointer-events:none}
.cart .fulfillment-row .fulfill-pill .fulfill-dot{flex:0 0 auto;width:1rem;height:1rem;box-sizing:border-box;border:2px solid var(--ink);border-radius:50%;background:#fff;transition:background .12s ease}
.cart .fulfillment-row .fulfill-pill input:checked + .fulfill-dot{background:var(--ink)}
.cart .fulfillment-row .fulfill-pill input:focus-visible + .fulfill-dot{outline:2px solid var(--ink);outline-offset:2px}
.cart .fulfillment-row .fulfill-pill:has(input:checked) input::before{background:#fff}

.cart-lightbox-close{position:absolute;top:1rem;right:1rem;width:44px;height:44px;display:flex;align-items:center;justify-content:center;font-family:var(--font-sans);font-size:1.6rem;line-height:1;color:var(--bone);background:var(--ink);border:3px solid var(--ink);cursor:pointer;transition:background .12s,color .12s,transform .12s}
.cart-lightbox-close:hover{color:var(--acid);border-color:var(--bone)}

/* line remove — quiet square X */

/* spacing: shipping country sits too close to the fulfillment pills */
#ship-country{margin-top:1.2rem}


/* ---- admin login: bone paper slab, site discipline (renders via base.html) ---- */
.login-card{
  background:var(--bone) !important;
  border:4px solid var(--ink) !important;
  border-radius:0 !important;
  box-shadow:12px 14px 0 rgba(10,10,10,.85) !important;
  max-width:420px !important;
  margin:14vh auto 0 !important;
  padding:2.6rem 2.4rem 2.2rem !important;
  transform:rotate(-.8deg);
  position:relative;
}
.login-card::before{
  content:'RESTRICTED';
  position:absolute;top:-14px;right:18px;
  font-family:var(--font-meta);font-size:.66rem;font-weight:700;letter-spacing:.22em;
  color:var(--bone);background:var(--sold,#b33327);border:2px solid var(--ink);
  padding:.18rem .55rem;transform:rotate(3deg);
}
.login-kicker{
  font-family:var(--font-meta);font-size:.7rem;font-weight:700;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ink);opacity:.62;margin:0 0 .5rem;
}
.login-title{
  font-family:var(--font-meta);font-weight:800;
  font-size:2.1rem !important;line-height:1;letter-spacing:.02em;
  color:var(--ink) !important;margin:0 0 1.6rem !important;
  text-transform:uppercase;text-align:left;transform:none !important;
}
.login-title::after{content:none !important}
.login-form{display:flex;flex-direction:column;gap:.9rem}
.login-form input{
  font-family:var(--font-meta);font-size:1rem;color:var(--ink);
  background:#fff;border:3px solid var(--ink);border-radius:0;
  padding:.8rem 1rem;outline:none;
}
.login-form input:focus{border-color:#4a6785}
.login-form button{
  font-family:var(--font-meta);font-weight:800;font-size:1.02rem;letter-spacing:.08em;
  color:var(--ink);background:#bfe8c6;border:3px solid var(--ink);
  padding:.85rem 1rem;cursor:pointer;text-transform:uppercase;
  transition:transform .12s ease,background-color .12s ease;
}
.login-form button:hover{transform:translateY(-2px);background:#cdf0d3}
.login-form button:active{transform:translateY(1px)}
.login-err{
  color:var(--sold,#b33327) !important;font-family:var(--font-meta) !important;
  font-size:.82rem !important;font-weight:700;margin:.9rem 0 0 !important;
  border-left:3px solid var(--sold,#b33327);padding-left:.55rem;
}

/* ---- cart page dark theme (matches the rest of the site) ---- */
.pub-section.cart .cart-step{background:rgba(17,17,17,.92);border-color:rgba(241,240,237,.3);color:var(--bone);box-shadow:none}
.pub-section.cart .cart-step-contact{background:transparent;border:0;box-shadow:none;padding:0}
.pub-section.cart .cart-step-head{border-bottom-color:rgba(241,240,237,.25)}
.pub-section.cart .cart-step-head p{color:rgba(241,240,237,.6)}
.pub-section.cart .checkout-section-h2,.pub-section.cart .checkout-subhead{color:var(--bone)}
.pub-section.cart .field label{color:rgba(241,240,237,.85)}
.pub-section.cart .field label.field-title{color:var(--bone)}
.pub-section.cart .field label em{opacity:.6}
.pub-section.cart .field input,.pub-section.cart .field select,.pub-section.cart .field textarea{color:var(--bone);background:transparent;border:2px solid var(--line-on-dark);padding:.7rem .8rem}
.pub-section.cart .field input::placeholder{color:rgba(241,240,237,.45);opacity:1}
.pub-section.cart .field select{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' fill='none' stroke='%23f1f0ed' stroke-width='1.6'/></svg>");background-repeat:no-repeat;background-position:right .8rem center;padding-right:2.5rem}
.pub-section.cart .field input:focus,.pub-section.cart .field select:focus,.pub-section.cart .field textarea:focus{background:transparent;border-color:var(--bone);box-shadow:none}
.pub-section.cart .radio-pill{background:rgba(241,240,237,.05);border-color:rgba(241,240,237,.45);color:var(--bone)}
.pub-section.cart .radio-pill input{border-color:rgba(241,240,237,.6)}
.pub-section.cart .radio-pill:has(input:checked){background:var(--bone);border-color:var(--bone);color:var(--ink);box-shadow:inset 0 -2px 0 var(--ink)}
.pub-section.cart .radio-pill:has(input:checked) input{border-color:var(--ink);background:radial-gradient(circle,var(--ink) 0 40%,transparent 46%)}
.pub-section.cart .pickup-card{background:rgba(241,240,237,.05);border-color:rgba(241,240,237,.4);color:var(--bone);box-shadow:4px 4px 0 rgba(0,0,0,.4)}
.pub-section.cart .pickup-card-head{border-bottom-color:rgba(241,240,237,.4)}
.pub-section.cart .pickup-card strong{color:var(--bone)}
.pub-section.cart .pickup-card-head span{color:rgba(241,240,237,.65)}
.pub-section.cart .pickup-trust-grid div{background:rgba(241,240,237,.05);border-color:rgba(241,240,237,.3)}
.pub-section.cart .pickup-trust-grid b{color:rgba(241,240,237,.75)}
.pub-section.cart .pickup-trust-grid span{color:rgba(241,240,237,.85)}
.pub-section.cart .checkout-trust-lines{border-top-color:rgba(241,240,237,.25)}
.pub-section.cart .checkout-trust-lines p{color:rgba(241,240,237,.7)}
.pub-section.cart .checkout-trust-lines strong{color:var(--bone)}
.pub-section.cart .checkout-note{color:rgba(241,240,237,.75)}
.pub-section.cart .checkout-pay-button{background:var(--bone);color:var(--ink);border-color:var(--bone)}
.pub-section.cart .checkout-pay-button:hover{background:var(--bone);color:var(--ink);box-shadow:inset 0 -4px 0 var(--ink)}
.pub-section.cart .cart-line{background:var(--ink);border-color:transparent;color:var(--bone);box-shadow:none}
.pub-section.cart .cart-line-thumb{border-color:rgba(241,240,237,.4);box-shadow:3px 3px 0 rgba(0,0,0,.5)}
.pub-section.cart .cart-line-qty-badge{background:var(--bone);color:var(--ink);border-color:var(--ink)}
.pub-section.cart .cart-line-x{border-color:rgba(241,240,237,.35);color:rgba(241,240,237,.7)}
.pub-section.cart .cart-line-x:hover{border-color:var(--bone);color:var(--bone)}
.pub-section.cart .promo-row{border-color:rgba(241,240,237,.35);background:rgba(241,240,237,.04)}
.pub-section.cart .promo-row summary{color:var(--bone)}
.pub-section.cart .promo-row summary:after{color:var(--bone)}
.pub-section.cart .promo-row[open] summary{border-bottom-color:rgba(241,240,237,.3);background:rgba(241,240,237,.06)}
.pub-section.cart .promo-row summary span{color:rgba(241,240,237,.5)}
.pub-section.cart .promo-input input[type=text]{border-color:rgba(241,240,237,.5);background:rgba(241,240,237,.06);color:var(--bone)}
.pub-section.cart .cart-totals{background:transparent;border:0;color:var(--bone);box-shadow:none}
.pub-section.cart .cart-subtotal,.pub-section.cart .cart-ship,.pub-section.cart .cart-tax,.pub-section.cart .cart-total{border-bottom-color:rgba(241,240,237,.25);color:var(--bone)}
.pub-section.cart .cart-subtotal{border-bottom-color:var(--bone)}
.pub-section.cart .cart-total{border-top:2px solid var(--bone);border-top-color:var(--bone)}
.pub-section.cart .cart-giftbuy,.pub-section.cart .cart-giftcard,.pub-section.cart .cart-discount{color:var(--bone)}
.pub-section.cart .cart-subtotal small,.pub-section.cart .cart-total small,.pub-section.cart .cart-ship small,.pub-section.cart .cart-tax small{color:var(--bone)}

.pub-section.cart .checkout-panel{background:transparent;border:0;box-shadow:none;padding:0}
.pub-section.cart .cart-summary{border-right-color:rgba(241,240,237,.3)}
.pub-section.cart .cart-line-title,.pub-section.cart .cart-line-name{color:var(--bone)}
.pub-section.cart .cart-line-price,.pub-section.cart .cart-line-price small{color:var(--bone)}
.pub-section.cart .cart-notice{background:rgba(241,240,237,.08);border:0;color:var(--bone)}
.pub-section.cart .fulfillment-row .fulfill-pill{background:rgba(241,240,237,.06);border-color:rgba(241,240,237,.5);color:var(--bone)}
.pub-section.cart .fulfillment-row .fulfill-pill:hover{border-color:var(--bone)}
.pub-section.cart .fulfillment-row .fulfill-pill .fulfill-dot{border-color:rgba(241,240,237,.8);background:transparent}
.pub-section.cart .fulfillment-row .fulfill-pill input:checked + .fulfill-dot{background:var(--bone)}
.pub-section.cart .fulfillment-row .fulfill-pill input:focus-visible + .fulfill-dot{outline-color:var(--bone)}
.pub-section.cart .fulfillment-row .fulfill-pill:has(input:checked){background:var(--bone);border-color:var(--bone);color:var(--ink)}
.pub-section.cart .fulfillment-row .fulfill-pill:has(input:checked) .fulfill-dot{border-color:var(--ink);background:var(--ink)}
.pub-section.cart .fulfillment-row .fulfill-pill:has(input:checked):hover{border-color:var(--bone)}
.pub-section.cart .form-actions{background:linear-gradient(180deg,rgba(17,17,17,.55),rgba(17,17,17,.96));border-top-color:rgba(241,240,237,.3)}
.pub-section.cart .cart-step-items{background:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}
.pub-section.cart .cart-step-contact .field-full{max-width:none}
.pub-section.cart .pickup-card{max-width:none}

/* ---- order tracking + checkout return: dark theme ---- */
.pub-section.order-status,.pub-section.checkout-return{color:var(--bone)}
.pub-section.order-status .pub-h1,.pub-section.checkout-return .pub-h1{color:var(--bone)}
.pub-section.order-status .pub-lede,.pub-section.checkout-return .pub-lede{color:rgba(241,240,237,.7)}
.pub-section.order-status.receipt-surface{background:transparent;box-shadow:none;border:0;max-width:none;color:var(--bone)}
.pub-section.order-status .receipt-surface{color:var(--bone)}
.pub-section.order-status .receipt-card{background:rgba(241,240,237,.06);border:1px solid rgba(241,240,237,.3);box-shadow:none;color:var(--bone)}
.pub-section.order-status .receipt-card h2{color:var(--bone)}
.pub-section.order-status .receipt-card-head-note{color:rgba(241,240,237,.55)}
.pub-section.order-status .receipt-kicker{color:rgba(241,240,237,.55)}
.pub-section.order-status .status-stamp{border-color:var(--bone)}
.pub-section.order-status .status-timeline li{border:1px dashed rgba(241,240,237,.35);background:rgba(241,240,237,.05);color:var(--bone)}
.pub-section.order-status .status-timeline li:before{content:"";background:transparent;border:2px dashed rgba(241,240,237,.45)}
.pub-section.order-status .status-timeline li.is-done,
.pub-section.order-status .status-timeline li.is-current{border-style:solid;border-color:rgba(241,240,237,.6);background:rgba(241,240,237,.1)}
.pub-section.order-status .status-timeline li.is-done:before,
.pub-section.order-status .status-timeline li.is-current:before{content:"\2713";color:var(--ink);background:var(--bone);border-color:var(--bone)}
.pub-section.order-status .status-timeline li strong{color:var(--bone)}
.pub-section.order-status .status-timeline li span{color:rgba(241,240,237,.75)}
.pub-section.order-status .piece-meta dt{color:rgba(241,240,237,.6)}
.pub-section.order-status .piece-meta dd{color:var(--bone)}
.pub-section.order-status .order-items{background:transparent;border:0}
.pub-section.order-status .order-item-title{color:var(--bone)}
.pub-section.order-status .order-item-title small{color:rgba(241,240,237,.55)}
.pub-section.order-status .order-item-price{color:var(--bone)}
.pub-section.order-status .receipt-thumb{border-color:rgba(241,240,237,.4);box-shadow:none}
.pub-section.order-status .thumb-empty{color:rgba(241,240,237,.5)}
.pub-section.order-status .order-totals{background:rgba(241,240,237,.05);border:1px solid rgba(241,240,237,.3);box-shadow:none;color:var(--bone)}
.pub-section.order-status .order-totals-row{border-bottom-color:rgba(241,240,237,.2);color:var(--bone)}
.pub-section.order-status .order-totals-row.order-total{color:var(--bone)}
.pub-section.order-status .receipt-letter{background:rgba(241,240,237,.05);border:1px solid rgba(241,240,237,.25);color:var(--bone)}
.pub-section.order-status .order-receipt{color:rgba(241,240,237,.6)}
.pub-section.order-status .order-receipt a{color:var(--bone)}
.pub-section.checkout-return .return-card{background:rgba(241,240,237,.06);border:1px solid rgba(241,240,237,.35);box-shadow:none;color:var(--bone)}
.pub-section.checkout-return .return-msg{color:var(--bone)}
.pub-section.checkout-return .return-fallback{color:rgba(241,240,237,.65)}
.pub-section.checkout-return .return-msg a{color:var(--bone);text-decoration:underline}
.pub-section.order-status .order-address{border-color:rgba(241,240,237,.4)}
.pub-section.order-status .order-address p{color:rgba(241,240,237,.8)}
.pub-section.order-status .address-reveal summary{color:var(--bone);border-bottom-color:rgba(241,240,237,.4)}
.pub-section.order-status .address-reveal-note{color:rgba(241,240,237,.55)}

/* ---- cart items: dark grey slabs, detached (owner: light was too jarring, slabs were connected) ---- */

.pub-section.cart .cart-step-items{background:transparent;border:0;box-shadow:none;padding-left:0;padding-right:0}
.pub-section.cart .cart-line{background:#242424;border:1px solid rgba(241,240,237,.3);color:var(--bone);box-shadow:none;margin-bottom:.7rem;padding:.6rem .8rem}
.pub-section.cart .cart-line:last-child{margin-bottom:0}
.pub-section.cart .cart-line-thumb{border-color:rgba(241,240,237,.4);box-shadow:3px 3px 0 rgba(0,0,0,.5)}
.pub-section.cart .cart-line-meta{color:rgba(241,240,237,.65)}
.pub-section.cart .cart-line-qty{border-color:rgba(241,240,237,.5);background:rgba(241,240,237,.08);color:var(--bone)}
.pub-section.cart .cart-line-x{border-color:rgba(241,240,237,.4);color:rgba(241,240,237,.8)}
.pub-section.cart .cart-line-x:hover{border-color:var(--bone);color:var(--bone)}
.pub-section.cart .cart-line-title,.pub-section.cart .cart-line-name,.pub-section.cart .cart-line-name a{color:var(--bone)}
.pub-section.cart .cart-line-price,.pub-section.cart .cart-line-price small{color:var(--bone)}


/* animations.css — entrance reveals, staggered cascades, hover timing */
/* scrollbar-gutter stable: category filters change page height (All -> Bowls
   drops the scrollbar); without a reserved gutter the whole page shifts one
   scrollbar-width mid-transition = the "slight flicker". */
html{scroll-behavior:smooth;scrollbar-gutter:stable}

/* Entrance reveals are FADE-ONLY — no directional movement (no translate,
   no scale). The one motion exception on the site is the view-transition
   image morph (shop thumb -> piece hero), which lives in transitions.css. */
.pub-section,.shop-card,.ig-card,.event-card,.piece-shot,.contact-form,.events-grid>*{
  animation:fadeIn .6s ease backwards;
}
@keyframes fadeIn{
  from{opacity:0}
  to{opacity:1}
}

/* staggered cascade — fade rhythm only, no movement */
.shop-grid>*{animation:fadeIn .6s ease both}
.shop-grid>*:nth-child(1){animation-delay:.06s}
.shop-grid>*:nth-child(2){animation-delay:.12s}
.shop-grid>*:nth-child(3){animation-delay:.18s}
.shop-grid>*:nth-child(4){animation-delay:.24s}
.shop-grid>*:nth-child(5){animation-delay:.30s}
.shop-grid>*:nth-child(6){animation-delay:.36s}
.shop-grid>*:nth-child(n+7){animation-delay:.42s}

.ig-grid>*{animation:fadeIn .6s ease both}
.ig-grid>*:nth-child(1){animation-delay:.06s}
.ig-grid>*:nth-child(2){animation-delay:.14s}
.ig-grid>*:nth-child(3){animation-delay:.22s}
.ig-grid>*:nth-child(4){animation-delay:.30s}
.ig-grid>*:nth-child(n+5){animation-delay:.38s}

/* piece detail gallery — sequential fade */
.piece-shot{animation:fadeIn .7s ease both}
.piece-shot:nth-child(1){animation-delay:.12s}
.piece-shot:nth-child(2){animation-delay:.26s}
.piece-shot:nth-child(3){animation-delay:.40s}
.piece-shot:nth-child(n+4){animation-delay:.54s}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* SAFE-FLICKER RULE: a page revealed by a cross-document view transition must
   render FULLY OPAQUE at first paint. The VT freezes the new page as a bitmap
   at first paint and holds it ~0.35s; any entrance animation running during
   that window shows the old page through transparent content and pops when the
   overlay lifts (the ghost-flicker). The VT itself — and the piece-image
   morph — is the entrance. Interaction feedback re-allowed below.
   Never use animation:none on ::view-transition-* pseudos (see transitions.css
   teardown rules) — this rule targets real elements only. */
html.vt-revealed *,
html.vt-revealed *::before,
html.vt-revealed *::after{animation:none!important}
html.vt-revealed .cart-count.cart-pop{animation:badge-pop .3s ease-out!important}
/* The home splash is a hard-load intro; a navigated reveal must not strand
   the logo mid-blur (its reveal animation is suppressed above). */
html.vt-revealed .home-splash{display:none}

/* nav active page indicator (styled in layout.css) */

/* shop card: press-down on click (fast, physical) */
.shop-card:active{transform:translate(1px,1px)!important;box-shadow:2px 4px 10px rgba(0,0,0,.18)!important;transition:transform .06s,box-shadow .06s}

/* cart badge pop */
.cart-count{animation:none}
.cart-count.cart-pop{animation:badge-pop .3s ease-out}
@keyframes badge-pop{0%{transform:scale(1)}50%{transform:scale(1.4)}100%{transform:scale(1)}}

/* gallery cards: deeper shadow, slower lift */
.ig-card{transition:transform .25s cubic-bezier(.16,.84,.44,1),box-shadow .25s cubic-bezier(.16,.84,.44,1)}
.ig-card:hover{transform:translate(-4px,-4px);box-shadow:10px 10px 0 var(--shadow-block)}

/* event cards: stamp-date treatment */
.event-card{position:relative;transition:transform .2s cubic-bezier(.16,.84,.44,1)}
.event-card:hover{transform:translate(-2px,-2px)}

/* contact form: deliberate, slower focus */
.field input,.field select,.field textarea{transition:border-color .2s,box-shadow .2s}

/* slab buttons: press-down feel */
.btn-pin:active{transform:translate(1px,1px)!important;box-shadow:4px 4px 0 var(--ink)!important}

/* texture.css — paper grain, halftone overlays stamp motifs, stamp motifs */

/* richer paper grain: dots + faint scanline + subtle ink mottle */
body.xr{
  background-image:
    radial-gradient(rgba(0,0,0,.05) 1px,transparent 1px),
    repeating-linear-gradient(0deg,transparent 0 2px,rgba(0,0,0,.015) 2px 4px),
    radial-gradient(ellipse at 20% 30%,rgba(241,240,237,.02) 0%,transparent 50%),
    radial-gradient(ellipse at 80% 70%,rgba(0,0,0,.015) 0%,transparent 50%);
  background-size:3px 3px,100% 4px,100% 100%,100% 100%;
}

/* halftone dot overlay on section headers (zine-print feel) */
.pub-h1{position:relative}
.pub-h1::after{
  content:'';position:absolute;left:0;bottom:-.3rem;width:100%;height:.5rem;
  background-image:radial-gradient(var(--ink) 1px,transparent 1.2px);
  background-size:5px 5px;opacity:.25;
  -webkit-mask-image:linear-gradient(90deg,var(--ink),transparent);
  mask-image:linear-gradient(90deg,var(--ink),transparent);
}


/* gallery-grade piece detail */
.piece-shot{position:relative;overflow:hidden}
.piece-shot img{transition:transform .6s cubic-bezier(.16,.84,.44,1)}
.piece-shot:hover img{transform:scale(1.03)}
.piece-gallery{gap:1rem}
.piece-col-details{gap:0}
.piece-head{margin:.55rem 0 .2rem}
.piece-details{margin-top:1.2rem;padding-top:.25rem;position:relative}

/* signature stamp on piece detail */
.piece-details::after{
  content:'RR';position:absolute;right:0;bottom:-.5rem;
  font-family:var(--font-sans);font-size:.78rem;color:var(--bone);
  border:2px solid var(--bone);padding:.15rem .4rem;transform:rotate(-8deg);
  opacity:.55;letter-spacing:.08em;text-transform:uppercase;
}

/* shop card price-tag treatment */
.shop-meta{position:relative}
.shop-price::before{
  content:'';display:inline-block;width:6px;height:6px;border-radius:50%;
  background:var(--ink);margin-right:.4rem;vertical-align:middle;
}
/* 1/1 stamp is defined by the stamp system in type-system.css */

/* event card star motif */
.event-card::before{
  content:'✦';position:absolute;top:.5rem;right:.7rem;font-size:1rem;color:var(--bone);
  text-shadow:1px 1px 0 var(--ink);opacity:.7
}

/* footer: stamp-seal motifs */
.pub-footer{position:relative;overflow:hidden}
.pub-footer::before{
  content:'☠';position:absolute;right:1.5rem;top:50%;transform:translateY(-50%) rotate(-8deg);
  font-size:3rem;opacity:.08;
}
.pub-footer::after{
  content:'MADE BY HAND';position:absolute;left:50%;bottom:.3rem;transform:translateX(-50%);
  font-family:var(--font-sans);font-size:.5rem;letter-spacing:.3em;
  color:var(--bone);opacity:.3
}

/* smooth font rendering */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
a,button,[role=button],input,select,textarea,summary{touch-action:manipulation}
body.xr{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}

/* responsive.css — mobile breakpoints, safe-area, touch optimization */

/* Safe-area insets for notched phones (iPhone X+) */
@supports(padding:max(0px)){
  .pub-nav{padding-left:max(.9rem,env(safe-area-inset-left));padding-right:max(1.4rem,env(safe-area-inset-right))}
  .pub-footer{padding-left:max(1rem,env(safe-area-inset-left));padding-right:max(1rem,env(safe-area-inset-right))}
  .pub-main{padding-left:max(1.4rem,env(safe-area-inset-left));padding-right:max(1.4rem,env(safe-area-inset-right))}
}

/* Touch-friendly: all buttons ≥44px height, active feedback on tap */
@media(hover:none) and (pointer:coarse){
  .btn-pin{min-height:44px}
  .pub-links a{min-height:36px;display:inline-flex;align-items:center}
  .triptych-panel{min-height:120px}
  .shop-card:active,.btn-pin:active,.ig-card:active,.event-card:active,.triptych-panel:active{
    transform:scale(.97)!important;transition:transform .06s
  }
}

/* shop grid: 2-col on tablet + phone (1-per-row is too big) */
@media(max-width:640px){
  .shop-grid{grid-template-columns:1fr 1fr!important;gap:.7rem}
  .shop-card{display:block;max-width:100%}
  .shop-card .shop-thumb{aspect-ratio:1/1}
  .shop-card .shop-meta{padding:.62rem .58rem .68rem;min-height:7rem;gap:.36rem .45rem}
  .shop-card .shop-title{font-size:.9rem;line-height:1.05}
  .shop-card .shop-price{font-size:1rem}
  .shop-card .shop-price::before{display:none}
  .shop-card .shop-price-row{grid-template-columns:1fr;gap:.18rem;align-items:start}
  .shop-card .shop-form{font-size:.6rem;white-space:normal}
  .shop-card .shop-spec{font-size:.62rem;white-space:normal;overflow:visible;text-overflow:clip}
}

/* cart lines: stack cleanly on mobile */
@media(max-width:640px){
  .cart:before{opacity:.32;transform:rotate(-4deg);left:1rem;top:1.1rem}
  .cart-kicker{margin:.1rem 0 1rem;font-size:.76rem}
  .pub-section.cart{padding-left:0;padding-right:0}
  .cart-step-head{gap:.1rem .55rem;margin-bottom:.7rem}
  .cart-step-contact .cart-step-head,.cart-step-totals .cart-step-head{margin-bottom:.85rem;padding-bottom:.65rem}
  .cart-step-head p{font-size:.7rem;line-height:1.4}
  .cart-line{padding:.6rem .7rem}
  .cart-adjustments{grid-template-columns:1fr;gap:.45rem}
  .promo-row{border-color:rgba(10,10,10,.28)}
  .promo-row summary{padding:.55rem .6rem;font-size:.72rem}
  .promo-row .promo-input{padding:.6rem}
  .promo-input{flex-direction:column;align-items:stretch}
  .promo-input .btn-pin{width:100%;text-align:center}
  .cart-totals{padding:.78rem .72rem}
  .cart-subtotal{font-size:1.18rem;border-bottom-width:2px}
  .cart-total{font-size:1.45rem;border-top-width:2px}
  .cart-subtotal,.cart-ship,.cart-tax,.cart-total{align-items:flex-start}
}

/* piece page: tighten SIMILAR ITEMS top gap on phones; cart: trim dead band above footer on desktop */
@media(max-width:768px){
  .piece-similar.pub-section{padding:1.9rem 0 1.2rem;margin-top:1rem}
}
@media(min-width:641px){
  .pub-section.cart{margin-bottom:1.1rem}
}

/* checkout form: single column on mobile */
@media(max-width:640px){
  .checkout-form{padding:0}
  .checkout-intro{font-size:.78rem;line-height:1.55;margin-bottom:1rem}
  .checkout-fields{grid-template-columns:1fr!important}
  .contact-form{grid-template-columns:1fr!important}
  .radio-pill{flex:1;text-align:center;min-height:44px;display:flex;align-items:center;justify-content:center;gap:.35rem}
  .radio-pill input{margin-right:0}
  .fulfillment-row{display:grid;grid-template-columns:1fr 1fr;gap:.4rem}
  .cart .fulfillment-row .fulfill-pill{justify-content:center;min-height:44px}
  .pickup-card{border-width:1px;box-shadow:0 1px 0 rgba(10,10,10,.18);padding:.72rem}
  .pickup-card-head{border-bottom-width:1px}
  .pickup-trust-grid{grid-template-columns:1fr;gap:.42rem}
  .pickup-trust-grid div{min-height:0}
  .field input,.field select,.field textarea{font-size:16px;padding:.7rem .6rem}
  .promo-input input[type=text],.ship-form input[type=text],.newsletter input[type=email]{font-size:16px}
  .checkout-trust-lines{grid-template-columns:1fr;gap:.48rem;margin:.9rem 0 .75rem;padding-top:.75rem}
  .cart .form-actions{position:sticky;bottom:0;background:linear-gradient(180deg,rgba(244,241,232,.92),var(--bone));padding:.8rem 0 .2rem;z-index:5;border-top:1px solid rgba(10,10,10,.38)}
  .cart .form-actions .btn-pin{width:100%;text-align:center;font-size:1.2rem;padding:.8rem}
}

@media(max-width:480px){
  .cart-empty{padding:2rem .75rem;border-width:2px;box-shadow:4px 4px 0 var(--shadow-block)}
  .cart-empty-recovery{align-items:stretch;flex-direction:column;gap:.55rem;max-width:18rem}
  .cart-empty-recovery .btn-pin,.cart-empty-link{width:100%;box-sizing:border-box;text-align:center}
}

/* piece detail: fixed sticky cart is handled by piece.css */
@media(max-width:768px){
  .piece-primary-cart .btn-pin{width:100%;text-align:center;font-size:1.05rem;padding:.7rem}
}

/* gallery grid: 1-col on very narrow */
@media(max-width:420px){
  .ig-grid{grid-template-columns:1fr}
}

/* order totals: clean stacking */
@media(max-width:480px){
  .order-totals{font-size:.85rem}
  .order-total{font-size:1.1rem}
  .order-item{flex-direction:column;align-items:flex-start;gap:.2rem}
}

/* events: single column on phone */
@media(max-width:480px){
  .events-grid{grid-template-columns:1fr}
}

/* newsletter: full width on mobile */
@media(max-width:480px){
  .newsletter{max-width:100%}
  .newsletter form{flex-direction:column}
  .newsletter input[type=email]{width:100%}
  .news-form{flex-direction:column;align-items:stretch}
  .news-input{width:100%}
}

/* homepage: smaller triptych on phone */
@media(max-width:480px){
  .hero-logo{width:clamp(200px,80vw,350px)}
}

/* disable hover-only effects on touch */
@media(hover:none){
  .shop-card:hover{transform:none;box-shadow:7px 7px 0 var(--shadow-block)}
  .ig-card:hover{transform:none;box-shadow:6px 6px 0 var(--shadow-block)}
  .triptych-panel:hover{flex:1}
  .triptych-panel:hover img{transform:none;filter:grayscale(20%) contrast(1.1) brightness(.8)}
}

/* larger tap targets for remove/status buttons */
.img-del{min-height:44px;min-width:44px}

/* better mobile nav: hamburger toggle + expanding panel */
@media(max-width:768px){
  .pub-nav{padding:.55rem .8rem;gap:.6rem}
  .pub-brand{font-size:1.15rem}
  .nav-toggle{display:inline-flex}
  .js .pub-links{
    display:flex;flex-direction:column;align-items:stretch;gap:.4rem;
    order:0;min-width:0;flex-basis:0;flex-grow:0;overflow:hidden;max-height:0;opacity:0;transform:translateY(-8px);
    padding:0;border-top:0 solid var(--line-on-dark);
    transition:max-height .28s ease,opacity .18s ease,transform .28s ease,padding .28s ease,border-top-width 0s linear .28s;
  }
  .pub-nav.nav-open .pub-links{
    flex-basis:100%;
    max-height:40rem;opacity:1;transform:none;padding:.7rem 0 .3rem;border-top-width:2px;margin-top:.55rem;
    transition:max-height .28s ease,opacity .22s ease .08s,transform .28s ease,padding .28s ease,border-top-width 0s;
  }
  .pub-links a{font-size:.95rem;padding:.8rem .85rem;min-height:48px;display:flex;align-items:center;box-shadow:none;width:100%;justify-content:center}
  .pub-nav .cart-link{padding:.55rem .45rem;min-width:44px;min-height:44px}
  .pub-main{padding:1rem .8rem 3rem}
  .pub-h1{font-size:clamp(1.8rem,9vw,3rem)}
  .pub-section{padding:1.2rem;box-shadow:6px 6px 0 var(--shadow-block)}

  /* shop head + filters: drop line leads, quiet utility links, category dropdown;
     one consistent ~1rem rhythm, all left-aligned */
  .pub-section.shop{padding-top:1rem;padding-bottom:1.4rem}
  .shop-head{justify-content:center;text-align:center;margin:0 0 1rem}
  .shop-meta-row{flex-direction:column;align-items:center;text-align:center;gap:.55rem;margin:0}
  .shop-meta-row .drop-live{order:-1;margin:0;text-align:center}
  .shop-tools{flex-wrap:nowrap;justify-content:center;gap:1.2rem;border-left:0;padding-left:0}
  .shop-tools .shop-quick{font-size:.78rem;padding:.5rem .8rem;min-height:44px;display:inline-flex;align-items:center}
  .shop-tools .shop-quick + .shop-quick{margin-left:0}
  /* shipping lives in the hamburger panel on small screens */
  .shop-tools .shop-quick-ship{display:none}
  .pub-links .pub-links-ship{display:flex}
  .cat-pills{display:none}
  .cat-select{display:flex;margin:0 0 .9rem}
  .tag-chips{justify-content:center;gap:.5rem .6rem;margin:0 0 .85rem}
  .tag-chip{padding:.75rem .4rem;margin:-.75rem -.4rem}
  .shop-form{justify-self:start}
}

/* transitions.css — View Transitions API (cross-document, progressive enhancement).
   Opt-in is CSS-only (the <meta name="view-transition"> opt-in is deprecated).
   Unsupported browsers (Firefox, older Safari) just navigate normally — no downside. */

/* Enable a smooth transition on every same-origin navigation. Both pages share
   this stylesheet via public_layout, so both opt in (required by the spec).
   Guarded so users who prefer reduced motion get normal instant navigation.
   NOTE: the whole-page directional slide animations were removed — they read
   as flicker/layout shift. The image morph (below) is what should animate. */
/* Cross-document view transitions: shop thumb morphs into the piece hero.
   SAFE-TEARDOWN RULES (the old wedge): never use animation:none on the root
   snapshots — the transition must have a real animation to finish, or Chrome
   can leave the frozen overlay up and eat every click. htmx swaps do NOT
   start transitions (globalViewTransitions:false), so only real navigations
   animate, and they always complete. */
@media (prefers-reduced-motion: no-preference){
  @view-transition{ navigation:auto; }
}

/* Named image morphs (e.g. shop card thumbnail -> piece detail hero) are
   snapshotted as flat bitmaps and stretch like taffy by default. Crop instead. */
::view-transition-old(*),
::view-transition-new(*){ object-fit:cover; overflow:hidden; background:transparent; }

/* Give element morphs a slightly more deliberate pace than the default. */
::view-transition-group(*){ animation-duration:.35s; }

/* The hero morph must paint above every shop-card group it shrinks into —
   cards carry their own transition names, and without this lift the flying
   image slides UNDER the grid during piece -> shop navigation. */
::view-transition-group(.rr-hero){ z-index:1 }

/* Category filter swaps (shop.html tags them with data-vt-filter and names
   #shop-browser): the grid crossfades as its own named group while the rest
   of the page HOLDS at opacity 1 — an alpha crossfade over identical whole-
   page pixels still dims them (~70% at midpoint), which read as a slight
   whole-page flicker. vt-hold is a real animation, so the teardown rule
   holds. Page NAVIGATIONS keep the full dip above; only filters are scoped. */
:root[data-vt-filter]::view-transition-old(root),
:root[data-vt-filter]::view-transition-new(root){ animation:vt-hold .3s ease both; }

/* EVERY layer gets the same dip timing. Named elements (shop thumbs, piece
   hero) are cut OUT of the root bitmap and would otherwise pop in at full
   opacity at t=0 while the page fades around them. Old layers fade OUT, new
   layers fade IN; morphs glide via their group while bitmaps crossfade. */
@keyframes vt-hold{ from{opacity:1} to{opacity:1} }
@keyframes vt-out{ from{opacity:1} to{opacity:0} }
@keyframes vt-in{ from{opacity:0} to{opacity:1} }
::view-transition-old(*),
::view-transition-new(*){ animation:vt-hold .18s ease both; }
::view-transition-old(*){ animation:vt-out .25s ease both; }
::view-transition-new(*){ animation:vt-in .3s ease both; }

/* The stage-top row (back-link + quick add) overlays the hero img; as a plain
   part of the root bitmap it would sit UNDER the hero's named layer until
   cleanup and snap on top at the end. Its own group + z lift keeps it above
   the hero and lets it fade with the page. */
::view-transition-group(.rr-stage-top){ z-index:2 }

:root:active-view-transition-type(home-to-shop)::view-transition-old(root),
:root:active-view-transition-type(home-to-events)::view-transition-old(root),
:root:active-view-transition-type(home-to-gallery)::view-transition-old(root),
:root:active-view-transition-type(shop-to-home)::view-transition-old(root),
:root:active-view-transition-type(events-to-home)::view-transition-old(root),
:root:active-view-transition-type(gallery-to-home)::view-transition-old(root){ animation:vt-fade .3s ease both }

@keyframes vt-fade{ from{opacity:1} to{opacity:0} }

