/* ═══════════════════════════════════════════════════════════════════════
   BBA Peptides — design system (SPEC §3, redesign 2026-10). ONE source.
   docs/redesign-2026-10/DESIGN-SYSTEM.md documents every token and component.

   Three cascade layers + one unlayered shell:
     @layer bba-ds.tokens      — :root tokens + legacy aliases (every page). A page's
                                 own unlayered :root wins, so a not-yet-converted page
                                 keeps its look; a page that lacks a name gets the alias.
     @layer bba-ds.base        — reset + type, only under <html class="bba-ds">.
     @layer bba-ds.components  — .btn .chip .field .card-vial .shelf .badge-coa .price
                                 .drawer .sheet .toast …, only under html.bba-ds.
     shell (unlayered)         — .site-header / .site-footer / .site-drawer / .bba-skip,
                                 rendered by site-header.js + site-footer.js on EVERY
                                 page, so they are written to survive hostile host rules.
   A page opts into base + components with <html class="bba-ds">. Nothing here defines
   a color, size or radius outside :root (scripts/check_ds_tokens.mjs enforces it).
   ═══════════════════════════════════════════════════════════════════════ */
@layer bba-ds.tokens, bba-ds.base, bba-ds.components;

@layer bba-ds.tokens{
:root{
  /* color — exactly one red, one teal, one ink (+ one warning amber) */
  --c-canvas:#F2F1EE;
  --c-surface:rgb(255 255 255 / .74);
  --c-line:rgb(22 24 28 / .14);
  --c-ink:#16181C;
  --c-ink-2:#4E535C;
  --c-accent:#CD4642;
  --c-accent-hover:#B23C39;
  --c-signal:#0C6E78;
  --c-brand:#102A4A;
  --c-warn:#9A5B00;
  --c-on-accent:#FFFFFF;
  --c-surface-solid:#FFFFFF;
  --c-scrim:rgb(22 24 28 / .42);
  --c-signal-tint:rgb(12 110 120 / .10);
  --c-glass:rgb(242 241 238 / .88);
  /* type */
  --f-sans:'IBM Plex Sans',system-ui,-apple-system,'Segoe UI',sans-serif;
  --f-mono:'IBM Plex Mono',Consolas,'Courier New',monospace;
  --f-plate:'Doto','IBM Plex Mono',monospace;
  --t-xs:12px; --t-sm:14px; --t-body:17px; --lh-body:28px; --t-lg:21px; --t-h3:26px;
  --t-h2:clamp(28px,3vw,33px); --t-h1:clamp(34px,4.4vw,52px); --t-display:clamp(40px,6vw,72px);
  /* space (8px grid) */
  --s-1:4px; --s-2:8px; --s-3:16px; --s-4:24px; --s-5:32px; --s-6:48px; --s-7:64px; --s-8:96px; --s-9:128px;
  /* layout */
  --wrap:1200px; --gutter:clamp(16px,4vw,40px); --measure:680px;
  /* radius */
  --r-control:6px; --r-pill:999px; --r-surface:12px;
  /* chrome budget: 56 bar + 16 research line = 72 desktop; 56 mobile */
  --hdr-h:56px; --hdr-ruo:0px;
  /* motion: one motion */
  --ease:cubic-bezier(.2,.7,.2,1); --dur:320ms;
  /* vial geometry: the base of every BBA vial render sits at 86.5% of the frame */
  --vial-base:86.5%;
  /* ── legacy aliases — older markup keeps resolving to the new tokens ──
     store family (product/pricelist/cart.js/checkout):            --f-mono --f-text --f-display --body --ink --teal …
     editorial family (blog/coa/verify/bacwater):                   --mono --sans --serif --paper --line --teal-d
     shared-chrome family (site-header.css 2026-09, bba-system):   --bba-* */
  --f-text:var(--f-sans); --f-display:var(--f-sans);
  --mono:var(--f-mono); --sans:var(--f-sans); --serif:var(--f-sans);
  --body:var(--c-ink-2); --ink:var(--c-ink); --ink-soft:var(--c-ink-2); --text-hi:var(--c-ink);
  --teal:var(--c-signal); --teal-d:var(--c-signal); --di-teal:var(--c-signal); --teal-bright:var(--c-signal); --accent:var(--c-signal);
  --hairline:var(--c-line); --hair-1:var(--c-line); --hair-2:var(--c-line); --line:var(--c-line);
  --surface:var(--c-surface-solid); --surface-2:var(--c-surface); --cool-panel:var(--c-surface);
  --paper:var(--c-canvas); --canvas:var(--c-canvas);
  --clay:var(--c-warn); --navy:var(--c-brand); --navy-mid:var(--c-brand); --brand-red:var(--c-accent); --ring-color:var(--c-signal);
  --bba-navy:var(--c-brand); --bba-ink:var(--c-ink); --bba-teal:var(--c-signal); --bba-teal-bright:var(--c-signal); --bba-red:var(--c-accent);
  --bba-paper:var(--c-canvas); --bba-surface:var(--c-surface-solid); --bba-hair:var(--c-line); --bba-hair-soft:var(--c-line); --bba-hair-firm:var(--c-line);
  --bba-ring:var(--c-signal); --bba-mono:var(--f-mono); --bba-sans:var(--f-sans); --bba-serif:var(--f-sans);
  --bba-radius:var(--r-surface); --bba-control-radius:var(--r-control);
}
@media (min-width:1024px){ :root{ --hdr-ruo:16px; } }
}

/* ── base (html.bba-ds pages) ─────────────────────────────────────────── */
@layer bba-ds.base{
.bba-ds *,.bba-ds *::before,.bba-ds *::after{box-sizing:border-box}
.bba-ds [hidden]{display:none !important}
html.bba-ds{-webkit-text-size-adjust:100%;scroll-behavior:smooth;background:var(--c-canvas);accent-color:var(--c-signal)}
.bba-ds body{margin:0;background:var(--c-canvas);color:var(--c-ink);font:400 var(--t-body)/var(--lh-body) var(--f-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:clip}
.bba-ds img,.bba-ds svg{max-width:100%;height:auto}
.bba-ds h1,.bba-ds h2,.bba-ds h3,.bba-ds h4{margin:0;font-family:var(--f-sans);text-wrap:balance;letter-spacing:-.015em}
.bba-ds p{margin:0;text-wrap:pretty}
.bba-ds a{color:var(--c-signal)}
.bba-ds button{font:inherit;color:inherit}
.bba-ds :focus-visible{outline:2px solid var(--c-signal);outline-offset:3px}
.bba-ds [id]{scroll-margin-top:calc(var(--hdr-h) + var(--hdr-ruo) + var(--s-3))}
.bba-ds .wrap{max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter)}
.bba-ds .measure{max-width:var(--measure)}
.bba-ds .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}
.bba-ds .mono{font-family:var(--f-mono)}
.bba-ds .num,.bba-ds .price{font-variant-numeric:tabular-nums slashed-zero}
.bba-ds .eyebrow{font:500 var(--t-xs)/16px var(--f-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--c-signal);margin:0}
.bba-ds .h1{font-size:var(--t-h1);font-weight:600;line-height:1.06;letter-spacing:-.025em}
.bba-ds .h2{font-size:var(--t-h2);font-weight:600;line-height:1.15}
.bba-ds .h3{font-size:var(--t-h3);font-weight:600;line-height:1.2}
.bba-ds .lede{color:var(--c-ink-2);max-width:var(--measure)}
.bba-ds .meta{font:400 var(--t-sm)/1.5 var(--f-sans);color:var(--c-ink-2)}
.bba-ds .sect{padding:var(--s-6) 0}
.bba-ds .sect-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-3);flex-wrap:wrap;margin-bottom:var(--s-4)}
.bba-ds .sect-head .h2{margin:0}
.bba-ds .sect-link{font:500 var(--t-sm)/1 var(--f-sans);color:var(--c-signal);text-decoration:none;display:inline-flex;align-items:center;min-height:44px}
.bba-ds .sect-link:hover{text-decoration:underline;text-underline-offset:3px}
.bba-ds .sect-count{font:500 var(--t-sm)/1.3 var(--f-sans);color:var(--c-ink-2)}
.bba-ds .sect-count b{color:var(--c-ink);font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.bba-ds .prose{max-width:var(--measure)}
.bba-ds .prose p+p{margin-top:var(--s-3)}
.bba-ds .prose a{color:var(--c-signal);text-underline-offset:3px}
}

/* ── components (html.bba-ds pages) ───────────────────────────────────── */
@layer bba-ds.components{
/* buttons: one component, variants by state */
.bba-ds .btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);min-height:48px;padding:0 var(--s-4);border-radius:var(--r-control);font:600 var(--t-sm)/1.2 var(--f-sans);text-decoration:none;cursor:pointer;border:.8px solid transparent;background:transparent;color:var(--c-ink);white-space:nowrap;transition:background var(--dur) var(--ease),color var(--dur) var(--ease),border-color var(--dur) var(--ease)}
.bba-ds .btn--primary{background:var(--c-accent);color:var(--c-on-accent);border-color:var(--c-accent)}
.bba-ds .btn--primary:hover{background:var(--c-accent-hover);border-color:var(--c-accent-hover)}
.bba-ds .btn--secondary{border-color:var(--c-ink);color:var(--c-ink)}
.bba-ds .btn--secondary:hover{background:var(--c-ink);color:var(--c-canvas)}
.bba-ds .btn--quiet{color:var(--c-signal);padding:0 var(--s-2)}
.bba-ds .btn--quiet:hover{text-decoration:underline;text-underline-offset:3px}
.bba-ds .btn--compact{min-height:40px;padding:0 var(--s-3)}
.bba-ds .btn--block{width:100%}
.bba-ds .btn[disabled],.bba-ds .btn[aria-disabled="true"]{opacity:.45;cursor:not-allowed}
/* chips: filter / strength pills */
.bba-ds .chip{position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:0 12px;border:.8px solid var(--c-line);border-radius:var(--r-pill);background:transparent;font:500 var(--t-xs)/1 var(--f-mono);letter-spacing:.02em;color:var(--c-ink);cursor:pointer;text-decoration:none;white-space:nowrap;transition:border-color var(--dur) var(--ease),color var(--dur) var(--ease),background var(--dur) var(--ease)}
.bba-ds .chip:hover{border-color:var(--c-ink)}
.bba-ds .chip[aria-pressed="true"],.bba-ds .chip.is-on{border-color:var(--c-signal);color:var(--c-signal);background:var(--c-signal-tint)}
.bba-ds .chip--static{cursor:default;color:var(--c-ink-2);white-space:normal;text-align:left;line-height:1.25;padding-block:6px;max-width:100%}
.bba-ds .chip--static:hover{border-color:var(--c-line)}
/* fields */
.bba-ds .field{width:100%;min-height:48px;padding:0 var(--s-3);border:.8px solid var(--c-line);border-radius:var(--r-control);background:var(--c-surface-solid);color:var(--c-ink);font:400 16px/1.3 var(--f-sans);appearance:none}
.bba-ds .field:focus{outline:none;border-color:var(--c-signal);box-shadow:0 0 0 3px var(--c-signal-tint)}
.bba-ds .field--compact{min-height:40px;font-size:var(--t-sm);padding:0 var(--s-2)}
.bba-ds select.field{padding-right:var(--s-5);background-image:linear-gradient(45deg,transparent 50%,var(--c-ink-2) 50%),linear-gradient(135deg,var(--c-ink-2) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.bba-ds .field-label{display:block;font:500 var(--t-sm)/1.2 var(--f-sans);margin-bottom:6px}
.bba-ds .field-hint{font:400 var(--t-xs)/16px var(--f-sans);color:var(--c-ink-2)}
.bba-ds .field-err{font:500 var(--t-xs)/16px var(--f-sans);color:var(--c-warn)}
.bba-ds .field-err[hidden]{display:none}
.bba-ds .field[aria-invalid="true"]{border-color:var(--c-warn)}
/* COA badge: small, teal, only where a certificate exists; the hit area is a 44px halo, not the pill */
.bba-ds .badge-coa{position:relative;display:inline-flex;align-items:center;gap:4px;min-height:24px;padding:0 8px;border:.8px solid var(--c-signal);border-radius:var(--r-pill);font:500 var(--t-xs)/1 var(--f-mono);letter-spacing:.06em;color:var(--c-signal);text-decoration:none;background:var(--c-surface-solid)}
.bba-ds .badge-coa::after{content:"";position:absolute;inset:-10px}
.bba-ds .badge-coa:hover{background:var(--c-signal);color:var(--c-on-accent)}
.bba-ds .price{font-family:var(--f-mono);font-weight:500;color:var(--c-ink)}
.bba-ds .price small{font:400 var(--t-xs)/1 var(--f-mono);color:var(--c-ink-2);margin-right:4px}
.bba-ds .dot-us{display:inline-flex;align-items:center;gap:6px;font:500 var(--t-xs)/1 var(--f-mono);letter-spacing:.04em;color:var(--c-ink-2);text-transform:uppercase}
.bba-ds .dot-us::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--c-signal)}
.bba-ds .dot-ov{display:inline-flex;align-items:center;gap:6px;font:500 var(--t-xs)/1 var(--f-mono);letter-spacing:.04em;color:var(--c-ink-2);text-transform:uppercase;white-space:nowrap}
/* kit-only card meta: origin on its own row, the members lock (+ COA) on the next — never a three-line wrap */
.bba-ds .card-vial.fc-row .cv-meta{flex-wrap:wrap;row-gap:var(--s-1)}
.bba-ds .card-vial.fc-row .cv-meta .dot-ov{flex:1 0 100%}
.bba-ds .cv-price .cv-form{display:block;font:400 var(--t-xs)/16px var(--f-mono);color:var(--c-ink-2);letter-spacing:0;margin-top:2px}
.bba-ds .dot-ov::before{content:"";width:7px;height:7px;border-radius:50%;box-sizing:border-box;border:1.5px solid var(--c-ink-2)}
/* switch (role=switch button) */
.bba-ds .switch{display:inline-flex;align-items:center;gap:10px;min-height:44px;border:0;background:transparent;padding:0;cursor:pointer;font:500 var(--t-sm)/1.2 var(--f-sans);color:var(--c-ink)}
.bba-ds .switch-track{width:40px;height:22px;border-radius:var(--r-pill);background:var(--c-line);position:relative;transition:background var(--dur) var(--ease);flex:none}
.bba-ds .switch-track::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:var(--c-surface-solid);transition:transform var(--dur) var(--ease)}
.bba-ds .switch[aria-checked="true"] .switch-track{background:var(--c-signal)}
.bba-ds .switch[aria-checked="true"] .switch-track::after{transform:translateX(18px)}
/* toast + sheet */
.bba-ds .toast{position:fixed;left:50%;bottom:var(--s-4);transform:translateX(-50%);background:var(--c-ink);color:var(--c-canvas);padding:var(--s-2) var(--s-3);border-radius:var(--r-control);font:400 var(--t-sm)/1.3 var(--f-sans);z-index:9000;max-width:calc(100vw - 2*var(--gutter))}
.bba-ds .sheet{position:fixed;inset:auto 0 0 0;max-height:92dvh;overflow:auto;margin:0 auto;width:100%;max-width:560px;background:var(--c-surface-solid);border:.8px solid var(--c-line);border-bottom:0;border-radius:var(--r-surface) var(--r-surface) 0 0;padding:var(--s-4) var(--gutter) calc(var(--s-4) + env(safe-area-inset-bottom));box-shadow:0 -12px 40px -24px var(--c-scrim)}
@media (min-width:720px){.bba-ds .sheet{inset:50% auto auto 50%;transform:translate(-50%,-50%);border-bottom:.8px solid var(--c-line);border-radius:var(--r-surface);padding:var(--s-5);max-height:90vh}}
.bba-ds .scrim{position:fixed;inset:0;background:var(--c-scrim);z-index:8000}
/* cart / menu drawer shell (inner markup + skin come from design/cart.js) */
.bba-ds .cart-drawer-root{position:fixed;inset:0;z-index:9990;pointer-events:none;overflow:hidden}
.bba-ds .cart-drawer-root.open{pointer-events:auto}
.bba-ds .cart-drawer-overlay{position:absolute;inset:0;background:var(--c-scrim);opacity:0;visibility:hidden;transition:opacity var(--dur) var(--ease),visibility 0s linear var(--dur)}
.bba-ds .cart-drawer-root.open .cart-drawer-overlay{opacity:1;visibility:visible;transition:opacity var(--dur) var(--ease)}
.bba-ds .cart-drawer-panel,.bba-ds .drawer{position:absolute;top:0;right:0;bottom:0;width:min(520px,100vw);background:var(--c-canvas);display:flex;flex-direction:column;transform:translateX(100%);visibility:hidden;transition:transform var(--dur) var(--ease),visibility 0s linear var(--dur)}
.bba-ds .cart-drawer-root.open .cart-drawer-panel,.bba-ds .cart-drawer-root.open .drawer{transform:none;visibility:visible;transition:transform var(--dur) var(--ease)}
.bba-ds .cart-drawer-head{display:flex;justify-content:flex-end;align-items:center;padding:var(--s-2) var(--s-3) 0;flex-shrink:0}
.bba-ds .cart-drawer-close{min-width:44px;min-height:44px;border:.8px solid var(--c-line);background:var(--c-surface-solid);border-radius:50%;font:400 var(--t-lg)/1 var(--f-sans);cursor:pointer;color:var(--c-ink)}
.bba-ds .cart-drawer-body{overflow-y:auto;padding:0 var(--s-4) var(--s-5);flex:1}
.bba-ds #cart-drawer-root #cart.cart-drawer-panel{background:var(--c-canvas) !important} /* cart.js injects its own ground; the drawer stands on the same paper */
.bba-ds #cart-drawer-root #cart.cart-drawer-panel .cart-section-title{font:600 var(--t-h3)/1.2 var(--f-sans) !important;letter-spacing:-.015em !important} /* the skin's serif title is retired */
/* ── the vial card (grid) ──────────────────────────────────────────────
   Every card has the same slots: fig · kicker · name · chips · row(price + ONE primary
   button) · meta. Kit-only compounds use the same slots; only the button's verb (Select)
   and the meta label change. */
.bba-ds .vial-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-3)}
@media (min-width:900px){.bba-ds .vial-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (min-width:1200px){.bba-ds .vial-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
.bba-ds .card-vial{position:relative;display:flex;flex-direction:column;gap:var(--s-2);min-width:0;padding:var(--s-3);background:var(--c-surface);border:.8px solid var(--c-line);border-radius:var(--r-surface);transition:border-color var(--dur) var(--ease)}
.bba-ds .card-vial:hover{border-color:var(--c-ink-2)}
.bba-ds .cv-fig{position:relative;margin:0;overflow:hidden;background:transparent}
.bba-ds .cv-fig img,.bba-ds .cv-fig svg{display:block;width:100%;height:100%;object-fit:cover;object-position:center;mix-blend-mode:multiply}
.bba-ds .cv-fig::after{content:"";position:absolute;left:calc(-1*var(--s-3));right:calc(-1*var(--s-3));top:var(--vial-base);height:1px;background:var(--c-line);pointer-events:none}
.bba-ds .cv-fig img.is-tinted{filter:brightness(1.07)} /* a few renders ship on an off-white ground; lifted to paper before the multiply */
.bba-ds .card-vial .cv-fig{aspect-ratio:20/17;margin:calc(-1*var(--s-3)) calc(-1*var(--s-3)) 0;border-radius:var(--r-surface) var(--r-surface) 0 0}
.bba-ds .card-vial .cv-fig::after{left:0;right:0;top:92.9%}
.bba-ds .card-vial .cv-fig img{cursor:pointer}
/* a compound with no product render yet stands on the shelf as its label plate (name + strength), never clip-art */
.bba-ds .vial-plate{position:absolute;left:50%;bottom:7.1%;transform:translateX(-50%);width:78%;max-height:86%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:var(--s-1);padding:var(--s-3) var(--s-2) var(--s-2);border:.8px solid var(--c-line);border-top:6px solid var(--c-ink);border-radius:var(--r-control);background:var(--c-surface-solid);text-align:center;overflow:hidden;hyphens:none}
.bba-ds .vp-brand{font:500 var(--t-xs)/1 var(--f-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--c-ink-2)}
.bba-ds .vp-name{font:600 var(--t-sm)/1.2 var(--f-sans);color:var(--c-ink);text-wrap:balance;overflow-wrap:anywhere}
.bba-ds .vp-dose{font:500 var(--t-xs)/1.3 var(--f-mono);color:var(--c-ink);font-variant-numeric:tabular-nums slashed-zero}
.bba-ds .cv-kicker{font:400 var(--t-xs)/16px var(--f-mono);color:var(--c-ink-2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;height:32px;margin-top:var(--s-1)}
.bba-ds .cv-name{font:600 var(--t-sm)/1.3 var(--f-sans);letter-spacing:-.005em;hyphens:none}
.bba-ds .cv-name a{color:inherit;text-decoration:none;display:flex;align-items:center;min-height:44px;padding-block:var(--s-1)}
.bba-ds .cv-name a span.cv-clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* VX-4 (final review 2026-10-11): at phone width a two-code title ("BBA-AMR1 + BBA-SEM-1 · Cagrilintide +
   Semaglutide") is wider than the card, and the nowrap code run was cut mid-glyph by the 2-line clamp.
   Under 480px the code run may wrap, nothing may overflow the card, and the clamp allows 3 lines. */
@media (max-width:480px){.bba-ds .cv-name a span.cv-clamp{-webkit-line-clamp:3;overflow-wrap:anywhere}.bba-ds .cv-name a span.cv-clamp .cv-code{white-space:normal}}
.bba-ds .cv-name a:hover{color:var(--c-signal)}
.bba-ds .cv-code{font-family:var(--f-mono);font-weight:500;white-space:nowrap}
.bba-ds .cv-sep{color:var(--c-ink-2);font-weight:400}
.bba-ds .cv-chips{display:flex;flex-wrap:wrap;gap:6px;min-width:0}
.bba-ds .cv-chips .chip{max-width:100%}
.bba-ds .cv-row{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2);margin-top:auto;padding-top:var(--s-1);flex-wrap:wrap}
@media (max-width:599px){.bba-ds .cv-row .btn{flex:1 1 100%}}
.bba-ds .cv-price{font-size:var(--t-lg);line-height:1.1;display:flex;flex-direction:column;min-width:0}
.bba-ds .cv-price .cv-from{font:400 var(--t-xs)/1 var(--f-mono);color:var(--c-ink-2);margin-right:4px}
.bba-ds .cv-price .cv-unit,.bba-ds .cv-price .unit-price{display:block;font:400 var(--t-xs)/16px var(--f-mono);color:var(--c-ink-2);letter-spacing:0;margin-top:2px}
.bba-ds .cv-meta{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2);min-height:24px}
/* the members lock is a quiet sans link (review V-11: the mono-caps phrase wrapped to three lines on a 2-up card) */
.bba-ds .cv-kit{font:400 var(--t-xs)/16px var(--f-sans);letter-spacing:0;color:var(--c-ink-2);text-transform:none;text-decoration:underline;text-underline-offset:3px;display:inline-flex;align-items:center;min-height:24px}
.bba-ds .cv-kit:hover{color:var(--c-signal)}
.bba-ds .card-vial.is-off,.bba-ds .card-vial.cs-hidden,.bba-ds .card-vial.fc-hidden{display:none}
/* ── the featured shelf ─────────────────────────────────────────────────
   Mobile: an obvious horizontal scroller — 66vw cards, snap, the next card peeks.
   ≥900px: five equal columns on one continuous hairline. */
.bba-ds .shelf{display:grid;grid-auto-flow:column;grid-auto-columns:min(66vw,250px);gap:var(--s-3);overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:var(--gutter);padding:0 var(--gutter) var(--s-3);margin:0 calc(-1*var(--gutter));scrollbar-width:none}
.bba-ds .shelf::-webkit-scrollbar{display:none}
.bba-ds .shelf-item{scroll-snap-align:start;display:flex;flex-direction:column;min-width:0;position:relative}
.bba-ds .shelf-item .cv-fig{aspect-ratio:4/5;max-height:264px}
.bba-ds .shelf-item .badge-coa{position:absolute;top:var(--s-2);right:0;z-index:1}
.bba-ds .shelf-item .cv-fig img{transition:transform var(--dur) var(--ease)}
.bba-ds .shelf-item:hover .cv-fig img{transform:translateY(-4px)}
.bba-ds .plate{margin:var(--s-3) 0 0;font:700 var(--t-sm)/1.1 var(--f-plate);letter-spacing:.14em;text-transform:uppercase;color:var(--c-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bba-ds .shelf-name{margin:0;font:600 var(--t-sm)/1.3 var(--f-sans)}
.bba-ds .shelf-name a{color:inherit;text-decoration:none;display:flex;flex-wrap:wrap;align-items:center;gap:.3em;min-height:44px;padding-block:var(--s-1)}
.bba-ds .shelf-name a:hover{color:var(--c-signal)}
.bba-ds .shelf-code{color:var(--c-ink-2);font-weight:400}
.bba-ds .shelf-range{margin:2px 0 0;font:400 var(--t-xs)/18px var(--f-mono);color:var(--c-ink-2);font-variant-numeric:tabular-nums}
.bba-ds .shelf-row{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2);margin-top:var(--s-2)}
.bba-ds .shelf-row .price{font-size:var(--t-lg)}
@media (min-width:900px){
  .bba-ds .shelf{grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;overflow:visible;margin:0;padding:0;scroll-snap-type:none}
  .bba-ds .shelf-item .cv-fig::after{left:calc(-1*var(--s-3)/2);right:calc(-1*var(--s-3)/2)}
  .bba-ds .shelf-item:first-child .cv-fig::after{left:0}
  .bba-ds .shelf-item:last-child .cv-fig::after{right:0}
}
/* scroll-driven settle: catalog only, compositor-only, transform-only (nothing is ever
   invisible: beyond-viewport captures, print and reduced motion all show every card) */
@supports (animation-timeline: view()){
  .bba-ds .card-vial{animation:settle var(--dur) var(--ease) both;animation-timeline:view();animation-range:entry 0% entry 22%}
}
/* reduced motion = full stop */
@media (prefers-reduced-motion:reduce){
  html.bba-ds{scroll-behavior:auto}
  .bba-ds *,.bba-ds *::before,.bba-ds *::after{animation:none !important;transition:none !important;animation-timeline:none !important}
  ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none !important}
  .bba-ds .shelf-item:hover .cv-fig img{transform:none}
}
}
@keyframes settle{from{transform:translateY(6px)}to{transform:none}}
@view-transition{navigation:auto}
::view-transition-old(root),::view-transition-new(root){animation-duration:var(--dur)}

/* ═══════════════════════════════════════════════════════════════════════
   SHELL — rendered by site-header.js / site-footer.js on every page. Unlayered and
   self-scoped so a host page's global a{} / button{} / *{box-sizing} rules never
   restyle it; every property the chrome needs is stated here.
   ═══════════════════════════════════════════════════════════════════════ */
.bba-skip{position:absolute;left:-9999px;top:0;z-index:1001;margin:0;background:var(--c-ink);color:var(--c-canvas);padding:10px 16px;border-radius:0 0 var(--r-control) 0;font:400 var(--t-sm)/1.2 var(--f-sans);text-decoration:none;display:inline-flex;align-items:center;min-height:44px}
.bba-skip:focus,.bba-skip:focus-visible{left:0;outline:2px solid var(--c-signal);outline-offset:2px}
#main-content,:target{scroll-margin-top:calc(var(--hdr-h) + var(--hdr-ruo) + var(--s-3))}
.site-header,.site-header *,.site-footer,.site-footer *,.site-drawer,.site-drawer *{box-sizing:border-box}
.site-header{position:sticky;top:0;z-index:100;margin:0;padding:0;width:auto;height:auto;background:var(--c-glass);-webkit-backdrop-filter:blur(14px) saturate(1.2);backdrop-filter:blur(14px) saturate(1.2);border:0;box-shadow:0 .8px 0 var(--c-line);transition:box-shadow var(--dur) var(--ease);color:var(--c-ink);font:400 var(--t-sm)/1.2 var(--f-sans);text-align:left;letter-spacing:0;text-transform:none}
.site-header.is-scrolled{box-shadow:0 .8px 0 var(--c-line),0 12px 32px -24px var(--c-scrim)}
.site-header .hdr-bar{display:flex;align-items:center;gap:var(--s-1);height:var(--hdr-h);max-width:var(--wrap);margin:0 auto;padding:0 var(--gutter);min-height:0}
.site-header .hdr-logo{display:inline-flex;align-items:center;margin:0 var(--s-2) 0 0;padding:0;min-height:44px;border:0;background:none;text-decoration:none;flex:none}
.site-header .hdr-logo img{display:block;width:96px;height:44px;max-width:none;margin:0;padding:0;border:0;object-fit:contain}
.site-header .hdr-nav{display:none;align-items:center;gap:0;margin:0;padding:0;list-style:none}
.site-header .hdr-nav a,.site-header .hdr-nav summary{display:inline-flex;align-items:center;min-height:44px;margin:0;padding:0 10px;border:0;border-radius:var(--r-control);background:transparent;font:500 var(--t-sm)/1 var(--f-sans);color:var(--c-ink);text-decoration:none;text-transform:none;letter-spacing:0;white-space:nowrap;cursor:pointer;list-style:none;box-shadow:none}
.site-header .hdr-nav summary::-webkit-details-marker{display:none}
.site-header .hdr-nav a:hover,.site-header .hdr-nav summary:hover{color:var(--c-signal);text-decoration:none;background:transparent}
.site-header .hdr-nav a[data-ext]::after{content:"↗";font-size:var(--t-xs);margin-left:3px;color:var(--c-ink-2)}
.site-header .hdr-nav a::before{content:none}
.site-header .hdr-earn{position:relative;margin:0;padding:0}
.site-header .hdr-earn summary::after{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);margin-left:7px}
.site-header .hdr-earn-menu{position:absolute;top:calc(100% + 2px);left:0;min-width:200px;margin:0;background:var(--c-surface-solid);border:.8px solid var(--c-line);border-radius:var(--r-surface);padding:var(--s-2);box-shadow:0 12px 32px -16px var(--c-scrim);display:flex;flex-direction:column;z-index:5}
.site-header .hdr-earn-menu a{min-height:44px}
.site-header .hdr-tools{margin:0 0 0 auto;padding:0;display:flex;align-items:center;gap:0}
.site-header .hdr-ico,.site-header .cart-btn,.site-header .hdr-menu{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:44px;min-height:44px;width:auto;height:auto;margin:0;padding:0 8px;border:0;background:transparent;border-radius:var(--r-control);color:var(--c-ink);cursor:pointer;text-decoration:none;font:500 var(--t-sm)/1 var(--f-sans);position:relative;text-transform:none;letter-spacing:0;box-shadow:none;line-height:1}
.site-header .hdr-ico:hover,.site-header .cart-btn:hover,.site-header .hdr-menu:hover{color:var(--c-signal);background:transparent;text-decoration:none}
.site-header .hdr-ico svg,.site-header .cart-btn svg,.site-header .hdr-menu svg{display:block;width:20px;height:20px;max-width:none;margin:0;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.site-header .hdr-account{display:none}
.site-header .cart-btn-text{display:none}
.site-header .cart-badge{position:absolute;top:3px;right:1px;min-width:19px;height:19px;margin:0;padding:0 5px;border-radius:var(--r-pill);background:var(--c-accent);color:var(--c-on-accent);font:600 var(--t-xs)/19px var(--f-mono);text-align:center;font-variant-numeric:tabular-nums;letter-spacing:0;text-transform:none}
.site-header .cart-badge.badge-pop,.site-header .cart-badge.bm-pop{animation:bba-pop var(--dur) var(--ease)}
@keyframes bba-pop{from{transform:scale(.6)}to{transform:scale(1)}}
.site-header .hdr-ruo{display:none;max-width:var(--wrap);margin:0 auto;padding:0 var(--gutter);height:var(--hdr-ruo);font:500 var(--t-xs)/16px var(--f-mono);letter-spacing:.07em;text-transform:uppercase;color:var(--c-ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:transparent;border:0;text-align:left}
@media (min-width:1024px){
  .site-header .hdr-nav{display:flex}
  .site-header .hdr-account{display:inline-flex}
  .site-header .hdr-menu{display:none}
  .site-header .cart-btn-text{display:inline}
  .site-header .cart-badge{position:static;margin-left:2px}
  .site-header .hdr-ruo{display:block}
}
/* menu drawer (<dialog>) */
.site-drawer{position:fixed;inset:0 0 0 auto;width:min(380px,92vw);height:100dvh;max-height:100dvh;max-width:none;margin:0;padding:0;border:0;border-left:.8px solid var(--c-line);border-radius:0;background:var(--c-canvas);color:var(--c-ink);overflow:auto;box-shadow:-24px 0 60px -30px var(--c-scrim);font:400 var(--t-sm)/1.3 var(--f-sans);text-align:left;z-index:200}
.site-drawer:not([open]){display:none}
.site-drawer::backdrop{background:var(--c-scrim)}
.site-drawer .drawer-head{display:flex;align-items:center;justify-content:space-between;margin:0;padding:var(--s-2) var(--s-3) var(--s-2) var(--s-4);border-bottom:.8px solid var(--c-line);min-height:var(--hdr-h)}
.site-drawer .drawer-eyebrow{margin:0;font:500 var(--t-xs)/16px var(--f-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--c-signal)}
.site-drawer .drawer-close{min-width:44px;min-height:44px;width:auto;height:auto;margin:0;padding:0;border:0;background:transparent;border-radius:var(--r-control);font:400 var(--t-h3)/1 var(--f-sans);color:var(--c-ink);cursor:pointer;box-shadow:none}
.site-drawer .drawer-list{list-style:none;margin:0;padding:var(--s-2) var(--s-3)}
.site-drawer .drawer-list li{margin:0;padding:0;border:0;background:none;list-style:none;font:inherit}
.site-drawer .drawer-list li a{display:flex;align-items:center;justify-content:space-between;min-height:48px;margin:0;padding:0 var(--s-2);border:0;border-radius:var(--r-control);background:transparent;color:var(--c-ink);text-decoration:none;font:500 16px/1.2 var(--f-sans);text-transform:none;letter-spacing:0}
.site-drawer .drawer-list li a:hover{background:var(--c-surface-solid);text-decoration:none;color:var(--c-ink)}
.site-drawer .drawer-list li a small{font:400 var(--t-xs)/1 var(--f-mono);color:var(--c-ink-2)}
.site-drawer .drawer-group{margin:var(--s-2) var(--s-2) var(--s-1);padding:0;font:500 var(--t-xs)/16px var(--f-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--c-ink-2)}
.site-drawer .drawer-ruo{margin:var(--s-3) var(--s-4) var(--s-5);padding:0;font:500 var(--t-xs)/18px var(--f-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--c-ink-2)}
/* footer */
.site-footer{display:block;margin:var(--s-7) 0 0;padding:var(--s-6) 0 var(--s-5);border:0;border-top:.8px solid var(--c-line);background:var(--c-canvas);color:var(--c-ink);font:400 var(--t-sm)/1.5 var(--f-sans);text-align:left;letter-spacing:0;text-transform:none}
.site-footer .foot-inner{max-width:var(--wrap);margin:0 auto;padding:0 var(--gutter)}
.site-footer .foot-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-4) var(--s-3);margin:0;padding:0}
@media (min-width:760px){.site-footer .foot-cols{grid-template-columns:repeat(4,minmax(0,1fr))}}
.site-footer .foot-col{margin:0;padding:0;border:0;background:none}
.site-footer .foot-col-label{margin:0 0 var(--s-2);padding:0;font:500 var(--t-xs)/16px var(--f-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--c-ink-2)}
.site-footer .foot-list{list-style:none;margin:0;padding:0}
.site-footer .foot-list li{margin:0;padding:0;border:0;background:none;list-style:none;font:inherit;color:inherit}
.site-footer .foot-list a{display:flex;align-items:center;min-height:32px;width:fit-content;margin:0;padding:0 var(--s-2) 0 0;border:0;background:none;color:var(--c-ink);text-decoration:none;font:400 var(--t-sm)/1.3 var(--f-sans);white-space:nowrap;text-transform:none;letter-spacing:0}
.site-footer .foot-list a:hover{color:var(--c-signal);text-decoration:none}
@media (pointer:coarse),(max-width:760px){.site-footer .foot-list a{min-height:44px;min-width:44px}}
.site-footer .foot-ruo{margin:var(--s-5) 0 0;padding:var(--s-3) 0 0;border:0;border-top:.8px solid var(--c-line);font:400 var(--t-xs)/18px var(--f-mono);color:var(--c-ink-2);max-width:var(--measure);text-transform:none;letter-spacing:0}
.site-footer .foot-ruo a{color:inherit;display:inline-flex;align-items:center;min-height:32px;text-decoration:underline;text-underline-offset:3px}
@media (pointer:coarse){.site-footer .foot-ruo a{min-height:44px}}
.site-footer .foot-bottom{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);flex-wrap:wrap;margin:var(--s-3) 0 0;padding:0;font:400 var(--t-xs)/18px var(--f-mono);color:var(--c-ink-2);letter-spacing:.04em}
.site-footer .foot-credit{display:inline-flex;align-items:center;gap:5px;min-height:32px;margin:0;padding:0;color:var(--c-ink-2);text-decoration:none;text-transform:lowercase;letter-spacing:.08em;font:400 var(--t-xs)/18px var(--f-mono)}
.site-footer .foot-credit:hover{color:var(--c-ink);text-decoration:none}
.site-footer .foot-credit .heart{color:var(--c-accent);font-style:normal}
@media (pointer:coarse){.site-footer .foot-credit{min-height:44px}}
@media print{
  .bba-skip,.site-header,.site-drawer,.site-footer .foot-cols{display:none !important}
  .site-footer{margin-top:14pt;border-top:1px solid #000;background:transparent;color:#000}
  .site-footer .foot-ruo,.site-footer .foot-bottom,.site-footer .foot-credit{color:#000}
}
