/* ============================================================
   HOSS AUTO — WordPress-only additions.

   theme.css is a byte-faithful copy of the approved design and is
   never edited. Anything WordPress needs that the static page did
   not have lives here: inner-page headers, the CTA band, form
   states, the blog, and admin-bar spacing.
   ============================================================ */

/* ---------- image aspect ratio ----------
   wp_get_attachment_image() adds width AND height attributes to every <img>.
   The design's global rule caps width with max-width:100% but never releases
   the height, so a constrained image keeps its full pixel height and stretches
   vertically. Letting height follow width restores the true aspect ratio.
   Specific rules (.hdr__logo img, .ftr img) set their own height and still win. */
img{height:auto}

/* ---------- "HOSSOME Cost Recovery" button in the utility bar ----------
   Replaces the old "Store" primary-nav item. Sits after the email in
   .util__right. Overrides the util bar's uppercase/mono/letter-spacing so it
   reads as a normal-case green pill (matching the store's forest green). */
.util__recovery{
  display:inline-flex;align-items:center;gap:7px;
  padding:5px 13px;border-radius:999px;
  background:var(--forest);color:#fff!important;
  font-family:var(--f-body);font-size:12.5px;font-weight:600;
  letter-spacing:.01em;text-transform:none;line-height:1;
  white-space:nowrap;transition:background .25s ease,color .25s ease;
}
.util__recovery svg{flex:none}
.util__recovery:hover{background:var(--brass);color:#fff!important}
@media(max-width:760px){
  .util .shell{gap:12px}
  .util__recovery{padding:5px 11px;font-size:12px}
}

/* ---------- header badge before the logo ---------- */
.hdr__logo{display:inline-flex;align-items:center;gap:14px}
.hdr__badge{width:auto;flex:none;filter:drop-shadow(0 4px 10px rgba(20,24,21,.18))}
@media(max-width:520px){.hdr__badge{height:46px!important}}

/* The wordmark is sized by its width (HOSS Settings -> Header -> Logo width).
   Release the design's fixed 46px height cap so widening it scales the whole
   logo proportionally instead of stretching it. Wins in the stuck state too. */
.hdr__logo .hdr__wordmark{height:auto}
.hdr.is-stuck .hdr__logo .hdr__wordmark{height:auto}
@media(max-width:520px){.hdr__wordmark{width:190px!important}}

/* The larger logo leaves the nav less room. Keep each menu item and the
   header button on a single line, and tighten spacing/typography so the seven
   items fit without wrapping. */
.hdr__logo{flex:none}
.hdr .shell{gap:16px}
.nav{gap:16px}
.nav a{white-space:nowrap;font-size:11px;letter-spacing:.1em}
.hdr__cta .btn{white-space:nowrap}
/* Below this width the full nav can't fit beside the logo, so collapse it to
   the menu button instead of crowding or wrapping. */
@media(max-width:1280px){
  .nav{display:none}
  .burger{display:flex}
  .hdr__cta .btn{display:none}
}

/* ---------- green header to match the logo lockup ----------
   The logo is used everywhere with its own green background (#205B41). Painting
   the header bar the exact same green lets the lockup sit seamlessly inside it
   instead of reading as a green card on a light bar. Nav, CTA and burger flip to
   light so they stay legible on the green. */
.hdr{background:#205B41;border-bottom-color:rgba(255,255,255,.14)}
.hdr.is-stuck{background:#205B41}
.hdr .nav a{color:#fff;opacity:.85}
.hdr .nav a:hover{opacity:1}
.hdr .nav a::after{background:#fff}
.hdr .burger{border-color:rgba(255,255,255,.4)}
.hdr .burger i{background:#fff}
/* A green button would vanish on the green bar — make the CTA a solid light one. */
.hdr .hdr__cta .btn{background:#fff;color:var(--forest);border-color:#fff}
.hdr .hdr__cta .btn::after{background:var(--brass)}
.hdr .hdr__cta .btn:hover{color:var(--forest-deep)}

/* Larger footer lockup. */
.ftr img{height:100px}

/* ---------- catalog drawer spacing ----------
   The design's .drawer__pad has padding-top:0, so an opened drawer's text
   hugs the header row. Add breathing room above the content. */
.drawer__pad{padding-top:22px}

/* ---------- catalog drawer columns ----------
   The design's .drawer__pad is a two-column grid (text | bins). With the real
   catalog categories most drawers have no bins, so the "View catalog pages"
   link used to fall into whichever column was free — column 2 (right) when
   there were no bins, but wrapping to column 1 (bottom-left) when bins existed.
   Wrapping the text+bins in one column and the link in its own keeps the link
   pinned to the right column in every drawer. */
.drawer__col{display:flex;flex-direction:column;gap:14px}
.drawer__aside{align-self:start}

/* ---------- catalog drawer PDF link ---------- */
.drawer__pdf{
  display:inline-flex;
  align-items:center;
  gap:6px;
  margin-top:0;
  font-family:var(--f-mono);
  font-size:11px;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--forest);
  text-decoration:none;
  border-bottom:1px solid transparent;
  transition:border-color .2s var(--ease),color .2s var(--ease);
}
.drawer__pdf:hover{color:var(--brass);border-bottom-color:var(--brass)}
.drawer__pdf span{transition:transform .2s var(--ease)}
.drawer__pdf:hover span{transform:translateX(3px)}

/* ---------- team member photos ---------- */
.member__photo{
  width:100%;
  aspect-ratio:3/4;
  object-fit:cover;
  object-position:center top;
  border-radius:var(--r);
  margin-bottom:16px;
  display:block;
  background:var(--concrete);
}
.member--photo{text-align:left}

/* ---------- video / image inside the hero frame ----------
   The feature video now sits in the hero frame (and the van image drops into
   the recognition section using the same frame). The .video block brings its
   own border/shadow/black background, which would double up the frame's matte,
   so strip it and let the frame provide the single outline. */
.hero__frame--video .video{border:0;box-shadow:none;background:transparent;border-radius:2px}
.hero__frame--video .video__frame,
.hero__frame--video .video video{border-radius:2px}

/* ---------- autoplay video mute/unmute toggle ----------
   The hero clip autoplays muted with no native controls, so this button is the
   only way to turn sound on. It sits in the corner over the video and swaps a
   speaker / muted-speaker icon. */
.video{position:relative}
.video__sound{
  position:absolute;
  right:12px;
  bottom:12px;
  z-index:2;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:38px;
  height:38px;
  padding:0;
  border:0;
  border-radius:50%;
  color:#fff;
  background:rgba(20,24,21,.55);
  backdrop-filter:blur(4px);
  cursor:pointer;
  transition:background .2s var(--ease),transform .2s var(--ease);
}
.video__sound:hover{background:rgba(20,24,21,.8);transform:translateY(-1px)}
.video__sound:focus-visible{outline:2px solid var(--brass);outline-offset:2px}
.video__sound .video__sound-off{display:none}
.video__sound.is-muted .video__sound-on{display:none}
.video__sound.is-muted .video__sound-off{display:inline-flex}

/* ---------- embedded video (Vidyard / YouTube / Vimeo) ---------- */
.video__frame{
  position:relative;
  width:100%;
  aspect-ratio:16/9;
  background:#000;
  border-radius:var(--r);
  overflow:hidden;
}
.video__frame iframe{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  border:0;
  display:block;
}

/* ---------- inner page header ---------- */
.pagehero{
  position:relative;
  background:var(--forest-deep);
  color:#fff;
  padding:clamp(70px,9vw,132px) 0 clamp(48px,6vw,86px);
  overflow:hidden;
}
.pagehero__bg{
  position:absolute;inset:0;
  background-size:cover;background-position:center;
  opacity:.16;
  pointer-events:none;
}
.pagehero__bg::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(15,51,39,.35),rgba(15,51,39,.9));
}
.pagehero .shell{position:relative;z-index:1}
.pagehero__inner{max-width:min(880px,100%)}
.pagehero .h-lg{color:#fff}
.pagehero .lede{color:rgba(255,255,255,.78);margin-top:20px}

/* ---------- closing call to action ---------- */
.ctaband__inner{
  display:grid;
  grid-template-columns:1.5fr auto;
  gap:32px;
  align-items:center;
}
.ctaband__acts{display:flex;gap:12px;flex-wrap:wrap}
@media (max-width:820px){
  .ctaband__inner{grid-template-columns:1fr}
}

/* ---------- form states ---------- */
.formnote{margin-top:16px}
.formnote--ok{color:var(--brass-soft)}
.formnote--bad{color:#FFC9BE}
/* display:none, not an off-screen box. Chrome will happily autofill an
   input that is merely positioned off-screen, and when it filled this one
   the submission was thrown away as spam — a real customer's request
   vanishing with a success message on screen. It skips display:none. */
.hoss-hp{display:none!important}
.field input[aria-invalid="true"],
.field textarea[aria-invalid="true"]{border-color:#FFC9BE}

/* ---------- blog ---------- */
.postgrid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:22px;
}
.postcard{
  background:#fff;
  border:1px solid var(--concrete-2);
  border-radius:var(--r);
  overflow:hidden;
  display:flex;flex-direction:column;
  transition:transform .35s var(--ease),box-shadow .35s var(--ease);
}
.postcard:hover{transform:translateY(-4px);box-shadow:0 18px 40px -22px rgba(20,24,21,.5)}
.postcard img{width:100%;height:200px;object-fit:cover}
.postcard__body{padding:22px;display:flex;flex-direction:column;gap:10px;flex:1}
.postcard__date{
  font-family:var(--f-mono);font-size:10.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--brass);
}
.postcard h3{
  font-family:var(--f-display);font-weight:800;text-transform:uppercase;
  font-size:1.5rem;line-height:1.05;margin:0;
}
.postcard p{margin:0;color:var(--zinc);font-size:15px}
.postcard a.more{
  margin-top:auto;font-family:var(--f-mono);font-size:11px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--forest);
  text-decoration:none;
}

.entry{max-width:72ch}
.entry h2,.entry h3,.entry h4{font-family:var(--f-display);text-transform:uppercase;line-height:1.05}
.entry h2{font-size:2rem;margin:34px 0 12px}
.entry h3{font-size:1.5rem;margin:28px 0 10px}
.entry p{margin:0 0 18px}
.entry img{border-radius:var(--r);margin:22px 0}
.entry blockquote{
  margin:26px 0;padding:4px 0 4px 22px;
  border-left:2px solid var(--brass);font-style:italic;
}
.entry ul,.entry ol{margin:0 0 18px;padding-left:22px}
.entry li{margin-bottom:8px}
.entry a{color:var(--forest);text-underline-offset:3px}
.entry code,.entry pre{font-family:var(--f-mono);font-size:14px}
.entry pre{background:var(--graphite);color:#fff;padding:18px;border-radius:var(--r);overflow-x:auto}

.pager{
  display:flex;gap:12px;justify-content:center;margin-top:40px;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;
}
.pager .page-numbers{
  padding:10px 15px;border:1px solid var(--concrete-2);
  border-radius:var(--r);text-decoration:none;
}
.pager .page-numbers.current{background:var(--forest);color:#fff;border-color:var(--forest)}

.searchform{display:flex;gap:10px;margin-top:24px;max-width:460px}
.searchform input[type="search"]{
  flex:1;padding:14px 16px;border:1px solid var(--concrete-2);
  border-radius:var(--r);font-family:var(--f-body);font-size:15px;background:#fff;
}

/* ============================================================
   STORE — category grid, product grid, product detail, cart.
   Mirrors the Ecwid store layout on the theme's design tokens.
   ============================================================ */

/* ---------- header shopping bag ---------- */
.hdr__bag{
  position:relative;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:40px;height:40px;
  color:#fff;
  border-radius:50%;
  border:1px solid rgba(255,255,255,.28);
  transition:background .2s var(--ease),transform .2s var(--ease);
}
.hdr__bag:hover{background:rgba(255,255,255,.12);transform:translateY(-1px)}
.hdr__bag-count{
  position:absolute;top:-4px;right:-4px;
  min-width:18px;height:18px;padding:0 4px;
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--f-mono);font-size:10px;font-weight:700;line-height:1;
  color:var(--forest-deep);background:#fff;
  border-radius:9px;
}
.hdr__bag.has-items .hdr__bag-count{background:var(--brass);color:#fff}

/* ---------- store page header (breadcrumb band) ---------- */
.pagehero--store{padding:30px 0 14px 0}

/* ---------- store breadcrumb ---------- */
.store-crumb{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(255,255,255,.72);margin-bottom:14px;
}
.pagehero--store .store-crumb a{color:rgba(255,255,255,.72)}
.store-crumb a{color:var(--zinc);text-decoration:none}
.store-crumb a:hover{color:var(--brass)}
.store-crumb span[aria-hidden]{opacity:.5}

/* ---------- store section heading ---------- */
.store-h{
  font-family:var(--f-display);font-weight:800;text-transform:uppercase;
  font-size:clamp(1.5rem,3vw,2rem);line-height:1;margin:0 0 22px;
}
.sec .store-h{margin-top:0}

/* ---------- category tiles (store landing) ---------- */
.cat-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
  gap:18px;
}
.cat-tile{
  display:flex;flex-direction:column;gap:12px;
  padding:14px;
  background:#fff;border:1px solid var(--concrete-2);border-radius:var(--r);
  text-decoration:none;color:var(--graphite);
  transition:transform .3s var(--ease),box-shadow .3s var(--ease),border-color .3s var(--ease);
}
.cat-tile:hover{transform:translateY(-3px);box-shadow:0 16px 34px -22px rgba(20,24,21,.5);border-color:var(--brass)}
.cat-tile__media{
  display:flex;align-items:center;justify-content:center;
  background:#fff;border-radius:calc(var(--r) - 4px);overflow:hidden;padding:12px;
}
.cat-tile__media img{width:100px;height:100px;object-fit:contain;background:#fff}
.cat-tile__text{display:flex;flex-direction:column;gap:4px}
.cat-tile__name{font-family:var(--f-display);font-weight:800;text-transform:uppercase;font-size:1.05rem;line-height:1.08}
.cat-tile__count{font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--zinc)}

/* ---------- product grid (category archive) ---------- */
.product-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(170px,1fr));
  gap:16px;
}
.product-card{
  position:relative;
  padding:14px;background:#fff;
  border:1px solid var(--concrete-2);border-radius:var(--r);
  transition:transform .3s var(--ease),box-shadow .3s var(--ease);
}
.product-card:hover{transform:translateY(-3px);box-shadow:0 16px 34px -22px rgba(20,24,21,.5)}
.product-card__link{display:flex;flex-direction:column;gap:10px;text-decoration:none;color:var(--graphite)}
/* favorite heart button on cards */
.fav-btn{
  position:absolute;top:8px;right:8px;z-index:2;
  width:30px;height:30px;padding:0;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--concrete-2);border-radius:50%;background:#fff;color:var(--zinc);
  cursor:pointer;transition:color .2s var(--ease),border-color .2s var(--ease),transform .2s var(--ease);
}
.fav-btn:hover{color:#B4432B;transform:scale(1.08)}
.fav-btn.is-fav{color:#B4432B;border-color:#B4432B}
.fav-btn.is-fav svg{fill:#B4432B}
.product-card__media{
  display:flex;align-items:center;justify-content:center;
  padding:10px;background:#f6f7f7;border-radius:calc(var(--r) - 4px);overflow:hidden;
}
.product-card__media img{width:100px;height:100px;object-fit:contain;mix-blend-mode:multiply}
.product-card__cap{
  text-align:center;font-family:var(--f-mono);font-size:12px;
  letter-spacing:.08em;color:var(--zinc);
}

/* ---------- product detail ---------- */
.product{
  display:grid;grid-template-columns:auto minmax(0,1fr) minmax(340px,400px);
  gap:clamp(20px,4vw,44px);align-items:start;
}
.product__media{
  background:#fff;border:1px solid var(--concrete-2);border-radius:var(--r);overflow:hidden;
  display:flex;align-items:center;justify-content:center;padding:14px;
}
.product__media img{width:70px;height:auto;object-fit:contain}
.product__details{max-width:520px}
.product__title{font-family:var(--f-display);font-weight:800;text-transform:uppercase;font-size:clamp(1.4rem,2.4vw,1.9rem);line-height:1.04;margin:0}
.product__sku{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--zinc);margin:6px 0 0}
.product__details-h{font-family:var(--f-display);font-weight:800;text-transform:uppercase;font-size:.95rem;letter-spacing:.03em;margin:20px 0 6px}
.product__desc{margin:0;color:var(--zinc);font-size:14px;line-height:1.55}

/* purchase panel (price + shipping + options) */
.product__purchase{
  background:#fff;border:1px solid var(--concrete-2);border-radius:var(--r);
  padding:22px;
}
.product__price{font-family:var(--f-display);font-weight:800;font-size:1.9rem;line-height:1;color:var(--forest);margin:0 0 14px}
.product__ship{display:flex;align-items:center;gap:8px;color:var(--forest);font-size:14px;font-weight:600;margin:0 0 18px}
.product__ship svg{flex:none}
.product__buy{margin-top:0;display:flex;flex-direction:column;gap:16px;align-items:stretch}
.product__field{display:flex;flex-direction:column;gap:6px;width:100%;max-width:none}
.product__field span{font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--forest)}
.product__option,.product__qty{
  padding:12px 14px;border:1px solid var(--concrete-2);border-radius:var(--r);
  font-family:var(--f-body);font-size:15px;background:#fff;color:var(--graphite);
}
.product__field--qty{max-width:120px}
.product__added{font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;color:var(--brass);min-height:1em}

/* ---------- store pagination + back link ---------- */
.store-back{margin-top:28px;font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase}
.store-back a{color:var(--forest);text-decoration:none}
.store-back a:hover{color:var(--brass)}

/* ---------- full-width button variant ---------- */
.btn--full{width:100%;max-width:320px;justify-content:center;text-align:center}

/* ---------- cart + checkout ---------- */
.sec--cart{padding-top:clamp(32px,5vw,60px)}
.cartlayout{
  display:grid;grid-template-columns:1.1fr 1fr;
  gap:clamp(28px,5vw,64px);align-items:start;
}
.cart__head{font-family:var(--f-display);font-weight:800;text-transform:uppercase;font-size:1.9rem;line-height:1;margin:0 0 14px}
.cart__list{list-style:none;margin:0;padding:0}
.cart__item{
  display:grid;grid-template-columns:64px 1fr auto auto;gap:14px;align-items:center;
  padding:16px 0;border-bottom:1px solid var(--concrete-2);
}
.cart__thumb{width:64px;height:64px;background:#f6f7f7;border-radius:calc(var(--r) - 4px);overflow:hidden;display:flex;align-items:center;justify-content:center}
.cart__thumb img{width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply}
.cart__meta{display:flex;flex-direction:column;gap:4px;min-width:0}
.cart__name{font-weight:700}
.cart__opt{font-family:var(--f-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--zinc)}
.cart__qty{font-size:13px;color:var(--zinc);display:flex;align-items:center;gap:8px}
.cart__qty input{width:60px;padding:6px 8px;border:1px solid var(--concrete-2);border-radius:6px;font-family:var(--f-body);font-size:14px}
.cart__price{font-weight:700;white-space:nowrap}
.cart__remove{
  border:0;background:transparent;cursor:pointer;
  font-size:22px;line-height:1;color:var(--zinc);padding:0 4px;
  transition:color .2s var(--ease);
}
.cart__remove:hover{color:#B4432B}
/* Spelled out, not a bare cross: it has to be found on a phone at the cabinet. */
.cart__remove{font-size:13px;font-weight:600;white-space:nowrap;padding:8px 4px}
.cart__totals{margin-top:18px}
.cart__row{display:flex;justify-content:space-between;padding:8px 0;color:var(--zinc)}
.cart__row--total{border-top:1px solid var(--concrete-2);margin-top:6px;padding-top:14px;color:var(--graphite);font-weight:800;font-size:1.15rem}
.cart__empty{padding:26px 0;color:var(--zinc)}
.cart__empty a{color:var(--forest)}
.cart__continue{margin-top:18px;font-size:14px}
.cart__continue a{color:var(--forest);text-decoration:none}
.cart__continue a:hover{color:var(--brass)}

.checkout__intro{color:var(--zinc);margin:0 0 18px}
#hoss-checkout-form{display:flex;flex-direction:column;gap:14px;align-items:stretch;max-width:420px}
.checkout__field input[type="email"]{
  width:100%;padding:14px 16px;border:1px solid var(--concrete-2);
  border-radius:var(--r);font-family:var(--f-body);font-size:15px;background:#fff;
}
#hoss-checkout-form .btn--full{max-width:none}
.checkout__note{font-size:12px;color:var(--zinc);margin:0}

/* Checkout messages sit on paper, not on the dark footer the base
   .formnote colours are made for. */
.cartlayout .formnote{
  font-family:var(--f-body);font-size:.94rem;letter-spacing:0;text-transform:none;
  margin:0 0 16px;padding:12px 14px;border:1px solid;border-radius:var(--r);
}
.cartlayout .formnote--bad{color:#8d2317;background:#fbeceb;border-color:var(--signal)}

/* Recovery and quantity, changed right in the bag. */
.cart__recov select{
  max-width:100%;padding:6px 30px 6px 10px;
  border:1px solid var(--concrete-2);border-radius:6px;background-color:#fff;
  font-family:var(--f-body);font-size:13px;color:var(--graphite);
}
.cart__qty input{text-align:center;-moz-appearance:textfield}
.cart__qty input::-webkit-inner-spin-button,
.cart__qty input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.cart__step{
  width:32px;height:32px;flex:none;
  display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--concrete-2);border-radius:6px;background:#fff;
  font-size:18px;line-height:1;color:var(--forest);cursor:pointer;
}
.cart__step:hover{border-color:var(--forest)}
.cart__step:disabled{color:var(--concrete-2);cursor:default;border-color:var(--concrete-2)}
.cart__qty{gap:6px}

/* ---------- an open ticket: the banner on the bag page ---------- */
.ticketbar{
  display:flex;gap:14px 20px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;
  margin:4px 0 18px;padding:14px 16px;
  background:#e9f2ec;border:1px solid var(--forest);border-radius:var(--r);color:var(--forest-deep);
}
.ticketbar[hidden]{display:none}
.ticketbar--bad{background:#fbeceb;border-color:var(--signal);color:#8d2317;display:block}
.ticketbar__text{display:flex;flex-direction:column;gap:5px;flex:1 1 260px;min-width:0;font-size:.94rem}
.ticketbar__head{font-family:var(--f-display);font-weight:800;text-transform:uppercase;font-size:1.25rem;line-height:1.05;letter-spacing:.01em}
.ticketbar__note{color:var(--graphite)}
.ticketbar__acts{display:flex;gap:8px;flex-wrap:wrap}
.ticketbar__btn{
  display:inline-flex;align-items:center;min-height:40px;padding:8px 16px;
  border:1px solid var(--forest);border-radius:6px;background:var(--forest);color:#fff;
  font:600 14px/1.2 var(--f-body);text-decoration:none;cursor:pointer;white-space:nowrap;
}
.ticketbar__btn--ghost{background:transparent;color:var(--forest)}
.ticketbar__btn:hover{background:var(--forest-deep);border-color:var(--forest-deep);color:#fff}

/* ---------- an open ticket: the strip on every other page ---------- */
.ticketstrip{
  position:fixed;left:0;right:0;bottom:0;z-index:90;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px clamp(16px,4vw,32px) calc(12px + env(safe-area-inset-bottom));
  background:var(--forest-deep);color:#fff;text-decoration:none;
  font-size:.95rem;box-shadow:0 -6px 20px rgba(20,24,21,.18);
}
.ticketstrip b{color:var(--brass-soft);white-space:nowrap}
.ticketstrip:hover b{text-decoration:underline}
body.has-ticketstrip{padding-bottom:64px}
@media print{ .ticketstrip{display:none} }

@media(max-width:1024px){
  .product{grid-template-columns:auto minmax(0,1fr)}
  .product__purchase{grid-column:1 / -1}
}
@media(max-width:600px){
  .product{grid-template-columns:1fr;gap:24px}
}
@media(max-width:900px){
  .cartlayout{grid-template-columns:1fr;gap:36px}
}
@media(max-width:520px){
  .product-grid{grid-template-columns:repeat(2,1fr)}
  .cart__item{grid-template-columns:52px 1fr auto}
  .cart__thumb{width:52px;height:52px}
  .cart__price{grid-column:2 / 4;grid-row:2;text-align:right}
  /* The remove cross stays beside its part, not stranded on a row of its own. */
  .cart__remove{grid-column:3;grid-row:1;align-self:start}
}

/* ---------- product page: save to favorites ---------- */
.product__fav{
  margin-top:16px;display:inline-flex;align-items:center;gap:8px;
  background:transparent;border:0;padding:0;cursor:pointer;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--zinc);
  transition:color .2s var(--ease);
}
.product__fav:hover{color:#B4432B}
.product__fav.is-fav{color:#B4432B}
.product__fav.is-fav svg{fill:#B4432B}

/* ---------- store toolbar ---------- */
.storebar{border-top:1px solid var(--concrete-2);background:var(--paper)}
.storebar__inner{display:flex;justify-content:center;gap:clamp(18px,5vw,64px);padding:26px 0}
.storebar__item{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  text-decoration:none;color:var(--zinc);
  font-family:var(--f-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;
  transition:color .2s var(--ease);
}
.storebar__item:hover{color:var(--forest)}
.storebar__icon{position:relative;display:inline-flex}
.storebar__count{
  position:absolute;top:-6px;right:-8px;min-width:16px;height:16px;padding:0 4px;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:9px;font-weight:700;line-height:1;color:#fff;background:var(--brass);border-radius:8px;
}
@media(max-width:600px){
  .storebar__inner{flex-wrap:wrap;gap:20px 26px}
  .storebar__label{font-size:10px}
}

/* ---------- account page ---------- */
.acct{display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,5vw,64px);align-items:start}
.acct__left{border-right:1px solid var(--concrete-2);padding-right:clamp(20px,4vw,44px)}
.acct__who{margin:0 0 8px;font-size:16px}
.acct__muted{color:var(--zinc)}
.acct__h{font-family:var(--f-display);font-weight:800;text-transform:uppercase;font-size:1.15rem;margin:24px 0 6px}
.acct__signlink{color:var(--forest);text-decoration:underline;text-underline-offset:3px}
.acct__form{display:flex;flex-direction:column;gap:14px;max-width:420px;margin-top:16px}
.acct__form input[type="email"],.acct__form input[type="text"]{
  width:100%;padding:14px 16px;border:1px solid var(--concrete-2);border-radius:var(--r);
  font-family:var(--f-body);font-size:15px;background:#fff;
}
.acct__form input[name="code"]{letter-spacing:.4em;font-family:var(--f-mono);text-align:center;font-size:20px}
@media(max-width:820px){
  .acct{grid-template-columns:1fr}
  .acct__left{border-right:0;padding-right:0;border-bottom:1px solid var(--concrete-2);padding-bottom:28px}
}

/* ---------- search page ---------- */
.search{display:grid;grid-template-columns:250px minmax(0,1fr);gap:clamp(24px,4vw,48px);align-items:start}
.search__filters{display:flex;flex-direction:column;gap:22px}
.search__group{display:flex;flex-direction:column;gap:10px}
.search__h{font-family:var(--f-display);font-weight:800;text-transform:uppercase;font-size:.95rem;letter-spacing:.03em;margin:0}
.search__filters input[type="search"],.search__filters input[type="number"],.search__filters select{
  padding:11px 12px;border:1px solid var(--concrete-2);border-radius:var(--r);
  font-family:var(--f-body);font-size:14px;background:#fff;width:100%;
}
.search__price{display:flex;align-items:center;gap:8px}
.search__price input{width:100%}
.search__cats{display:flex;flex-direction:column;gap:8px;max-height:280px;overflow:auto;padding-right:4px}
.search__cat{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--graphite);cursor:pointer}
.search__cat input{flex:none}
.search__cat span:first-of-type{flex:1}
.search__cat-n{font-family:var(--f-mono);font-size:11px;color:var(--zinc)}
.search__filters .btn--full{max-width:none;margin-top:4px}
@media(max-width:820px){ .search{grid-template-columns:1fr} }

/* ---------- track orders ---------- */
.orders{display:flex;flex-direction:column;gap:18px}
.order{border:1px solid var(--concrete-2);border-radius:var(--r);background:#fff;overflow:hidden}
.order__head{
  display:flex;flex-wrap:wrap;align-items:center;gap:14px;
  padding:14px 18px;background:var(--concrete);border-bottom:1px solid var(--concrete-2);
  font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;
}
.order__id{font-weight:700;color:var(--graphite)}
.order__date,.order__status{color:var(--zinc)}
.order__total{margin-left:auto;font-weight:700;color:var(--forest);font-size:14px}
.order__items{list-style:none;margin:0;padding:8px 18px 14px}
.order__items li{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--concrete-2);font-size:14px}
.order__items li:last-child{border-bottom:0}
.order__sku{font-weight:700;min-width:70px}
.order__opt{color:var(--zinc);font-size:13px}
.order__q{margin-left:auto;color:var(--zinc)}
.order__lp{font-weight:700;min-width:64px;text-align:right}

/* ---------- admin bar ---------- */
.admin-bar .hdr.is-stuck{top:32px}
@media screen and (max-width:782px){
  .admin-bar .hdr.is-stuck{top:46px}
}

/* ---------- sticky opt-out ---------- */
.hoss-no-sticky .hdr{position:static}

/* =====================================================================
   2026-08 revision round
   ===================================================================== */

/* ---------- ghosted van fleet behind every page ----------
   Fixed rather than scrolled, so it reads as a watermark printed on the
   page instead of a picture the content slides over. Sections paint their
   own backgrounds, so it shows through the ones left transparent. */
.ghostvans{
  position:fixed;
  inset:0;
  z-index:-1;
  background-repeat:no-repeat;
  background-position:center 62%;
  background-size:min(1400px,120vw) auto;
  pointer-events:none;
}
@media(max-width:760px){
  .ghostvans{background-size:190vw auto}
}
@media(prefers-reduced-motion:no-preference){
  .ghostvans{transition:opacity .6s var(--ease)}
}

/* ---------- catalog: table-of-contents drawers ----------
   Paired across two columns in the catalog's own order — 01 02 on the first
   row, 03 04 on the next — so the numbering stays scannable and a drawer can
   grow when it opens without dragging its neighbours around. Only the number
   and the category show on the face; opening one reveals nothing but the link
   to that section's pages. */
.rack--toc{
  border-top:0;
  display:grid;
  grid-template-columns:1fr 1fr;
  column-gap:clamp(24px,4vw,56px);
  align-items:start;
}
.rack--toc .drawer{border-top:1px solid rgba(20,24,21,.16);border-bottom:0}
.rack--toc .drawer__face{grid-template-columns:44px 1fr auto;gap:14px;padding:16px 2px}
.rack--toc .drawer__face:hover,
.rack--toc .drawer.is-open .drawer__face{padding-left:12px}
.rack--toc .drawer__name{font-size:clamp(1.15rem,1.7vw,1.6rem);letter-spacing:.01em}
.rack--toc .drawer__pull{width:40px;height:22px}
.rack--toc .drawer__pull::before{left:14px;top:10px}
.rack--toc .drawer__pull::after{left:20px;top:4px}
.rack--toc .drawer__pad{
  display:block;
  padding:2px 2px 22px 12px;
}
@media(max-width:820px){
  .rack--toc{grid-template-columns:1fr}
  .rack--toc .drawer__face{grid-template-columns:52px 1fr auto;gap:12px;padding:16px 2px}
}

/* The catalog link is the point of the drawer, so give it a button's
   weight rather than the quiet underline it had. */
.rack--toc .drawer__pdf{
  padding:12px 20px;
  font-size:12px;
  letter-spacing:.14em;
  color:#fff;
  background:var(--forest);
  border:1px solid var(--forest);
  border-radius:var(--r);
  border-bottom-color:var(--forest);
}
.rack--toc .drawer__pdf:hover{
  color:#fff;
  background:var(--forest-deep);
  border-color:var(--forest-deep);
}
.drawer__soon{
  margin:0;
  font-family:var(--f-mono);
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--zinc);
}

/* Flip-book button, above the drawers. It opens the whole catalog, so it
   carries more weight than a drawer's own link and sits centred over them. */
.rack__flip{
  margin:0 0 38px;
  display:flex;
  justify-content:center;
}
.rack__flip .btn{
  padding:16px 30px;
  font-size:13px;
  letter-spacing:.16em;
}

/* An embedded flip book sits above the drawers, full width of the shell. */
.rack__flipbook{margin:0 0 clamp(30px,4vw,48px)}
.rack__flipbook-head{
  font-family:var(--f-display);
  font-weight:700;
  text-transform:uppercase;
  font-size:clamp(1.3rem,2.4vw,1.8rem);
  line-height:1.05;
  margin:0 0 18px;
}
/* The plugin renders into a fixed-height box; keep it inside the column and
   give it a sensible height on small screens. */
.rack__flipbook .df-container,
.rack__flipbook .fb3d-container{max-width:100%}
@media(max-width:700px){
  .rack__flipbook .df-container,
  .rack__flipbook .fb3d-container{height:60vw;min-height:320px}
}

/* ---------- why HOSS: the comparison beside the headline ----------
   The two columns now sit in the right half of the split, with the token
   between them. On one column the divider turns into a horizontal rule. */
.compare{margin-top:0;position:relative}
.compare__vs{
  position:absolute;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%);
  z-index:2;
  display:grid;
  place-items:center;
  min-width:52px;
  height:52px;
  padding:0 10px;
  border-radius:999px;
  background:var(--graphite);
  color:#fff;
  font-family:var(--f-display);
  font-weight:700;
  text-transform:uppercase;
  font-size:1.05rem;
  letter-spacing:.02em;
  box-shadow:0 6px 20px rgba(20,24,21,.24);
}
@media(max-width:620px){
  .compare__vs{min-width:44px;height:44px;font-size:.95rem}
}

/* The marks stack under the copy now that the right half is the table. */
.hammer__media{
  min-height:0;
  margin-top:34px;
  gap:clamp(16px,3vw,34px);
  justify-content:flex-start;
  flex-wrap:wrap;
}
.hammer__media .bolt{
  width:min(300px,52%);
  height:auto;
  filter:drop-shadow(0 24px 34px rgba(20,24,21,.2));
}
.hammer__media .nh{width:min(210px,38%);animation:none}
/* The cookie badge was pinned to the corner of a tall media column. In the
   new row it sits in normal flow beside the other two marks. */
.hammer__media .lbl{
  position:static;
  width:min(150px,26%);
  transform:rotate(-4deg);
}
@media(max-width:900px){
  .hammer__media{justify-content:center}
}

/* ---------- staff: centred rows ----------
   The roster is grouped into rows of a set size (see the Row layout
   setting) so each row centres on its own rather than leaving a ragged
   edge in a fixed grid. */
.team--rows{display:block}
.team__row{
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  gap:14px;
}
.team__row + .team__row{margin-top:14px}
.team--rows .member{
  flex:0 1 240px;
  max-width:280px;
}
@media(max-width:560px){
  .team--rows .member{flex:0 1 100%;max-width:none}
}
/* Two links (phone and email) can now stack under a name. */
.member a + a{margin-top:4px}

/* ---------- cookies ---------- */
/* A bigger HOSS cookie mark inside the rotating seal. */
.seal{width:min(430px,88%)}
.seal__mark{width:52%}
.seal__disc{inset:8%}

.cookie__film{
  margin:clamp(34px,5vw,60px) 0 0;
  max-width:900px;
  margin-inline:auto;
}
.cookie__film video{
  display:block;
  width:100%;
  height:auto;
  border-radius:var(--r);
  border:1px solid rgba(20,24,21,.12);
  background:var(--graphite);
}
.cookie__film figcaption{
  margin-top:12px;
  font-family:var(--f-mono);
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--zinc);
  text-align:center;
}

/* ---------- contact: territory map ---------- */
.territory{margin:30px 0 0}
.territory img{
  display:block;
  width:100%;
  height:auto;
  border-radius:var(--r);
  border:1px solid rgba(255,255,255,.18);
  background:rgba(255,255,255,.04);
}
.territory figcaption{
  margin-top:10px;
  font-family:var(--f-mono);
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--brass-soft);
}

/* ---------- Cost Recovery: the guest-area gate ---------- */
.crgate__box{
  max-width:520px;
  margin:0 auto;
  padding:clamp(28px,4vw,44px);
  background:#fff;
  border:1px solid var(--concrete-2);
  border-radius:var(--r);
  text-align:center;
}
.crgate__form{margin-top:26px}
.crgate__field{display:block;text-align:left;margin-bottom:18px}
.crgate__field span{
  display:block;margin-bottom:8px;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--zinc);
}
.crgate__field input{
  width:100%;padding:14px 16px;font:inherit;
  border:1px solid var(--concrete-2);border-radius:var(--r);background:var(--paper);
}
.crgate__field input:focus{outline:2px solid var(--forest);outline-offset:1px}
.crgate__remember{
  display:flex;align-items:center;gap:9px;
  text-align:left;margin:0 0 22px;
  font-size:.94rem;color:var(--zinc);
}
.crgate__remember input{width:16px;height:16px;accent-color:var(--forest)}
.crgate__help{
  margin:26px 0 0;font-size:.9rem;color:var(--zinc);
}
/* Signing out lives with the other store tools rather than in the header. */
.storebar__item--out{margin-left:auto}

/* ---------- Cost Recovery: checkout and invoice ---------- */
.checkout__field span{
  display:block;margin-bottom:6px;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--zinc);
}
.checkout__field textarea{
  width:100%;padding:13px 15px;font:inherit;
  border:1px solid var(--concrete-2);border-radius:var(--r);background:#fff;
  resize:vertical;
}
.invoice-done__no{
  margin:14px 0 18px;
  font-family:var(--f-display);font-weight:700;text-transform:uppercase;
  font-size:1.8rem;line-height:1;color:var(--forest);
}

/* ---------- Cost Recovery: the thank-you page ----------
   Once the order exists the bag and the form are gone, so this stands alone:
   the thanks, the way to print, then what was ordered. */
.thanks{
  max-width:760px;
  margin-inline:auto;
  text-align:center;
  padding:clamp(10px,2vw,26px) 0 clamp(20px,4vw,44px);
}
.thanks .eyebrow{justify-content:center}
.thanks__head{
  font-family:var(--f-display);font-weight:800;text-transform:uppercase;
  font-size:clamp(2.8rem,8vw,5rem);line-height:.95;letter-spacing:.01em;
  margin:10px 0 0;color:var(--forest);
}
.thanks__lede{
  margin:16px auto 0;max-width:34em;
  font-size:1.05rem;line-height:1.6;color:var(--zinc);
}
.thanks__acts{
  display:flex;justify-content:center;flex-wrap:wrap;gap:12px;
  margin:26px 0 0;
}
.thanks__card{
  margin-top:clamp(28px,4vw,44px);
  text-align:left;
  border:1px solid var(--concrete-2);border-radius:var(--r);background:#fff;
  padding:clamp(20px,3vw,30px);
}
.thanks__no{
  display:flex;align-items:baseline;gap:10px;
  padding-bottom:16px;margin-bottom:18px;
  border-bottom:2px solid var(--ink,#141815);
}
.thanks__no span{
  font-family:var(--f-mono);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--zinc);
}
.thanks__no b{
  font-family:var(--f-display);font-weight:800;text-transform:uppercase;
  font-size:1.9rem;line-height:1;color:var(--forest);
}
.thanks__facts{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:16px 26px;margin:0 0 22px;
}
.thanks__facts dt{
  font-family:var(--f-mono);font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--zinc);margin-bottom:5px;
}
.thanks__facts dd{margin:0;line-height:1.5}
.thanks__items{width:100%;border-collapse:collapse}
.thanks__items th{
  text-align:left;padding:10px 12px;border-bottom:1px solid var(--concrete-2);
  font-family:var(--f-mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--zinc);font-weight:400;
}
.thanks__items td{padding:13px 12px;border-bottom:1px solid var(--concrete-2);vertical-align:top}
.thanks__items .num{text-align:right;white-space:nowrap}
.thanks__opt{display:block;margin-top:4px;font-size:.88rem;color:var(--zinc)}
.thanks__items tfoot td{
  border-bottom:0;padding-top:16px;
  font-family:var(--f-display);font-weight:700;text-transform:uppercase;font-size:1.2rem;
}
.thanks__note{margin:18px 0 0;font-size:.92rem;color:var(--zinc)}
@media(max-width:560px){
  .thanks__facts{grid-template-columns:1fr}
  .thanks__acts .btn{width:100%;justify-content:center}
}

/* ---------- Cost Recovery: landing video ---------- */
.cr__film{margin:0;max-width:900px;margin-inline:auto}
.cr__film video{
  display:block;width:100%;height:auto;
  border-radius:var(--r);border:1px solid rgba(20,24,21,.12);background:var(--graphite);
}
.cr__film figcaption{
  margin-top:12px;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--zinc);text-align:center;
}

/* ============================================================
   MEMBERSHIP — 2026-08
   The header sign-in control, the popup it opens, the shared
   auth forms, and the special-order fields on a product.
   ============================================================ */

/* ---------- header: sign in / dashboard ---------- */
/* Sits beside the bag on the dark header, so it borrows the bag's
   language: white on a translucent rule, not the page's light-mode ink.
   Fixed height and nowrap keep it from stretching or breaking "Sign in"
   across two lines when the row is tight. */
.hdr__acct{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  height:40px;padding:0 16px;
  font:inherit;font-size:.84rem;font-weight:600;line-height:1;
  white-space:nowrap;
  color:#fff;
  background:transparent;
  border:1px solid rgba(255,255,255,.28);
  border-radius:20px;
  cursor:pointer;
  text-decoration:none;
  transition:background .2s var(--ease),transform .2s var(--ease);
}
.hdr__acct:hover{background:rgba(255,255,255,.12);transform:translateY(-1px)}
.hdr__acct svg{flex:none;width:18px;height:18px}
/* Below the nav breakpoint the label is noise next to the burger, so the
   control shrinks to the same circle the bag uses. */
@media (max-width:900px){
  .hdr__acct span{display:none}
  .hdr__acct{width:40px;padding:0;border-radius:50%}
}

/* ---------- the popup ---------- */
.authmodal{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:20px}
.authmodal[hidden]{display:none}
.authmodal__veil{position:absolute;inset:0;background:rgba(15,51,39,.62);backdrop-filter:blur(2px)}
.authmodal__box{
  position:relative;
  width:min(560px,100%);
  max-height:calc(100vh - 40px);
  overflow-y:auto;
  padding:clamp(26px,4vw,40px);
  background:#fff;
  border-radius:var(--r);
  box-shadow:0 30px 80px -30px rgba(15,51,39,.7);
}
.authmodal__title{font-family:var(--f-display);font-size:clamp(28px,4vw,38px);line-height:1.02;margin:0 0 6px;text-transform:uppercase}
.authmodal__x{
  position:absolute;top:10px;right:14px;
  width:36px;height:36px;line-height:1;
  font-size:26px;color:var(--zinc);
  background:none;border:0;border-radius:var(--r);cursor:pointer;
}
.authmodal__x:hover{color:var(--graphite);background:var(--concrete)}
body.has-modal{overflow:hidden}

/* ---------- the forms, shared by popup, gate and dashboard ---------- */
.auth{text-align:left}
.auth__tabs{display:flex;gap:4px;margin:18px 0 20px;border-bottom:1px solid var(--concrete-2)}
.auth__tab{
  flex:1 1 0;
  padding:11px 8px;
  font:inherit;font-size:.86rem;font-weight:600;
  color:var(--zinc);background:none;border:0;
  border-bottom:2px solid transparent;
  margin-bottom:-1px;
  cursor:pointer;
}
.auth__tab[aria-selected="true"]{color:var(--forest);border-bottom-color:var(--forest)}
.auth__lede{margin:0 0 20px;font-size:.94rem;line-height:1.55;color:var(--zinc)}
.auth__row{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@media (max-width:560px){ .auth__row{grid-template-columns:1fr} }
.auth__field{display:block;margin-bottom:16px}
.auth__field span{
  display:block;margin-bottom:7px;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--zinc);
}
.auth__field input,.auth__field textarea{
  width:100%;padding:13px 15px;font:inherit;
  border:1px solid var(--concrete-2);border-radius:var(--r);background:var(--paper);
  color:var(--graphite);
}
.auth__field textarea{resize:vertical}
.auth__field input:focus,.auth__field textarea:focus{outline:2px solid var(--forest);outline-offset:1px}
.auth__check{display:flex;align-items:center;gap:9px;margin:0 0 20px;font-size:.9rem;color:var(--zinc)}
.auth__check input{width:16px;height:16px;accent-color:var(--forest);flex:none}
.auth__small{margin:14px 0 0;font-size:.86rem;color:var(--zinc)}
.auth__note{
  margin:0 0 18px;padding:12px 14px;
  border-radius:var(--r);font-size:.9rem;line-height:1.5;
  border-left:3px solid;
}
.auth__note--ok{background:#e9f2ec;border-color:var(--forest);color:var(--forest-deep)}
.auth__note--bad{background:#fbeceb;border-color:var(--signal);color:#8d2317}

/* The gate reuses the crgate box, which centres its text; the forms inside
   it must not inherit that or every label ends up mid-line. */
.crgate__box .auth{text-align:left}
.crgate__acts{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:26px}

/* ---------- product: special order entry ---------- */
.product__sonote{
  margin:0 0 18px;padding:12px 14px;
  background:#fdf6e6;border-left:3px solid var(--brass);
  border-radius:var(--r);
  font-size:.88rem;line-height:1.5;color:#6b5417;
}
.product__money{display:flex;align-items:center;gap:8px}
.product__money>span{font-weight:700;color:var(--zinc)}
.product__so,.product__sodesc{
  width:100%;padding:12px 14px;font:inherit;
  border:1px solid var(--concrete-2);border-radius:var(--r);background:var(--paper);
}
.product__sodesc{resize:vertical}
.product__so:focus,.product__sodesc:focus{outline:2px solid var(--forest);outline-offset:1px}

/* ---------- checkout: the invoice date hint ---------- */
.checkout__field small{
  display:block;margin-top:6px;
  font-size:.8rem;line-height:1.4;color:var(--zinc);
  text-transform:none;letter-spacing:0;
}

/* ============================================================
   BARCODE SCANNING
   The scan page, and the way in from the Cost Recovery landing
   page and a scanned product.
   ============================================================ */

/* ---------- the way in ---------- */
.scanbar{
  display:flex;align-items:center;gap:18px;
  margin:0 0 30px;padding:18px 22px;
  background:var(--forest-deep);color:#fff;
  border-radius:var(--r);
  text-decoration:none;
  transition:transform .2s var(--ease),box-shadow .2s var(--ease);
}
.scanbar:hover{transform:translateY(-2px);box-shadow:0 16px 34px -18px rgba(15,51,39,.7)}
.scanbar__icon{flex:none;color:var(--brass-soft);display:flex}
.scanbar__text{display:flex;flex-direction:column;gap:3px;min-width:0}
.scanbar__text b{font-family:var(--f-display);font-size:22px;line-height:1;letter-spacing:.01em;text-transform:uppercase}
.scanbar__text span{font-size:.9rem;color:rgba(255,255,255,.78);line-height:1.4}
.scanbar__arw{margin-left:auto;flex:none;font-size:20px;color:var(--brass-soft)}
@media (max-width:560px){
  .scanbar__arw{display:none}
  .scanbar{padding:16px 18px;gap:14px}
}

/* ---------- the scan page ---------- */
.scan{max-width:680px;margin:0 auto}
.scan__head{text-align:center;margin-bottom:24px}
.scan__head .eyebrow{justify-content:center}
.scan__status{
  min-height:1.5em;margin:0 0 18px;
  text-align:center;font-size:.95rem;line-height:1.5;color:var(--zinc);
}
.scan__status--ok{color:var(--forest);font-weight:600}
.scan__status--bad{
  color:#8d2317;background:#fbeceb;
  padding:12px 16px;border-radius:var(--r);border-left:3px solid var(--signal);
  text-align:left;
}

.scan__cam{display:flex;flex-direction:column;align-items:center;gap:16px}
.scan__cam .btn{min-width:220px;justify-content:center}

.scan__stage{
  position:relative;width:100%;
  background:#000;border-radius:var(--r);overflow:hidden;
  /* Replaced with the camera's own aspect as soon as it is known, so the
     picture is never cropped and the guide box stays honest. */
  aspect-ratio:4/3;
}
.scan__stage video{width:100%;height:100%;object-fit:contain;display:block}

/* The band the decoder actually reads, drawn so the tech knows where to
   hold the label rather than guessing. */
/* Drawn to match BAND in scanner.js: the box promises exactly the strip
   the decoder reads. Change one and change the other. */
.scan__guide{
  position:absolute;left:4%;right:4%;top:27.5%;height:45%;
  border:2px solid rgba(255,255,255,.9);
  border-radius:4px;
  box-shadow:0 0 0 100vmax rgba(0,0,0,.35);
  pointer-events:none;
}
.scan__guide::after{
  content:"";position:absolute;left:8px;right:8px;top:50%;
  border-top:2px solid var(--signal);opacity:.85;
}

#hoss-scan-canvas{display:none}

.scan__manual{
  margin-top:34px;padding-top:26px;
  border-top:1px solid var(--concrete-2);
  text-align:center;
}
.scan__h2{
  font-family:var(--f-display);font-size:24px;line-height:1;
  text-transform:uppercase;margin:0 0 8px;
}
.scan__note{margin:8px 0 0;font-size:.88rem;color:var(--zinc)}
.scan__form{display:flex;gap:10px;justify-content:center;margin:18px 0 0;flex-wrap:wrap}
.scan__form input{
  flex:1 1 220px;max-width:320px;
  padding:13px 15px;font:inherit;
  text-transform:uppercase;letter-spacing:.04em;
  border:1px solid var(--concrete-2);border-radius:var(--r);background:var(--paper);
}
.scan__form input:focus{outline:2px solid var(--forest);outline-offset:1px}

.product__scanagain{margin:14px 0 0}

/* Getting close enough is most of a successful scan, so it is said on the
   page and not only in the status line after somebody has struggled. */
.scan__tip{
  max-width:52ch;margin:12px auto 0;
  font-size:.88rem;line-height:1.5;color:var(--zinc);
}

/* The scanner's own read-out. Folded away by default — it exists for the
   moment somebody says "nothing is happening", and turns that into a
   measurement. */
.scan__diag{
  width:100%;margin-top:6px;
  font-size:.82rem;color:var(--zinc);
}
.scan__diag summary{cursor:pointer;padding:6px 0;text-align:center}
.scan__diag pre{
  margin:6px 0 0;padding:12px 14px;
  background:var(--paper);border:1px solid var(--concrete-2);border-radius:var(--r);
  font-family:var(--f-mono);font-size:.78rem;line-height:1.6;
  white-space:pre-wrap;word-break:break-word;text-align:left;
}

/* ============================================================
   MOBILE REPAIRS
   Two rules in the "New Custom CSS" block at the end of
   theme.css cause trouble on a phone: the utility bar is given
   a fixed 1280px width, and every page header a 500px minimum
   height. Both use !important, so both are answered here rather
   than edited there — that block is the client's own.
   ============================================================ */

/* Nothing should ever push the page sideways. The utility bar did, and the
   symptom was a header that looked broken rather than a bar that was too
   wide. */
html{overflow-x:hidden}

@media (max-width:900px){
  /* The bar wraps onto as many lines as it needs instead of running off the
     side of the screen. */
  .util .shell{
    width:var(--shell);
    max-width:100%;
    height:auto;
    min-height:38px;
    padding-top:8px;
    padding-bottom:8px;
    flex-wrap:wrap;
    justify-content:center;
    gap:8px 16px;
  }
  .util__right{
    flex-wrap:wrap;
    justify-content:center;
    gap:8px 16px;
    min-width:0;
  }
  /* A phone number broken across two lines reads as two numbers. */
  .util__right > a{white-space:nowrap}
}

@media (max-width:520px){
  /* On the narrowest phones the address is the first thing to go: it is the
     longest, and it is a tap away in the footer and on Contact. The number
     stays, because a phone is the one device where it dials. */
  .util__right a[href^="mailto"]{display:none}
}

/* The breadcrumb strip above a product or the scanner is a strip, not a
   hero, and 500px of empty green pushes the actual page off the screen. */
.pagehero--store{
  min-height:0!important;
  padding:26px 0 16px!important;
  display:block!important;
}

@media (max-width:760px){
  /* Full-height page headers are still generous on a phone, but not half a
     screen of nothing before the content starts. */
  .pagehero{
    min-height:0!important;
    padding-top:clamp(44px,11vw,80px)!important;
    padding-bottom:clamp(32px,8vw,80px)!important;
  }
}

/* ---------- the scanner, on a phone ---------- */
@media (max-width:560px){
  .scan__cam .btn{min-width:0;width:100%;max-width:320px}
  .scan__form{gap:10px}
  .scan__form input{flex:1 1 100%;max-width:none}
  .scan__form .btn{width:100%;justify-content:center}
  /* The camera picture is the point of the page, so it gets the full width
     of the shell rather than sitting inside the text column. */
  .scan__stage{border-radius:0;margin-left:calc(50% - 50vw);width:100vw}
  .scan__guide{left:5%;right:5%}
}

/* ============================================================
   COST RECOVERY MENU, ABOUT PAGE, LARGER NAVIGATION — 2026-09
   ============================================================ */

/* ---------- the Cost Recovery button and its menu ----------
   The pill in the utility bar is now two parts sharing one background: the
   link, which still goes straight to Cost Recovery, and a caret. A mouse
   opens the menu by hovering anywhere on the pill; a touch screen or a
   keyboard uses the caret, which is a real button. */
.crmenu{
  position:relative;
  display:inline-flex;align-items:center;
  background:var(--forest);
  border-radius:999px;
  z-index:70; /* above the sticky header, which the menu hangs over */
  transition:background .25s ease;
}
.crmenu .util__recovery{background:transparent;padding-right:4px}
.crmenu .util__recovery:hover{background:transparent}
.crmenu:hover,.crmenu.is-open{background:var(--brass)}

.crmenu__toggle{
  display:inline-flex;align-items:center;justify-content:center;
  width:24px;height:24px;margin-right:3px;padding:0;
  color:#fff;background:transparent;border:0;border-radius:50%;
  cursor:pointer;
}
.crmenu__toggle:focus-visible{outline:2px solid #fff;outline-offset:1px}
.crmenu__toggle svg{transition:transform .2s var(--ease)}
.crmenu.is-open .crmenu__toggle svg{transform:rotate(180deg)}
@media (hover:hover){ .crmenu:hover .crmenu__toggle svg{transform:rotate(180deg)} }

.crmenu__list{
  position:absolute;top:calc(100% + 10px);right:0;
  min-width:232px;margin:0;padding:4px 0;list-style:none;
  background:#fff;
  border:1px solid var(--concrete-2);border-radius:var(--r);
  box-shadow:0 18px 40px -16px rgba(15,51,39,.45);
  font-family:var(--f-mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .18s var(--ease),transform .18s var(--ease),visibility 0s linear .18s;
}
/* A bridge across the gap under the pill, so the pointer can travel down to
   the menu without leaving the hover and closing it on the way. */
.crmenu__list::before{content:"";position:absolute;left:0;right:0;top:-12px;height:12px}
/* The notch pointing back up at the button. */
.crmenu__list::after{
  content:"";position:absolute;top:-6px;right:14px;width:10px;height:10px;
  background:#fff;border-left:1px solid var(--concrete-2);border-top:1px solid var(--concrete-2);
  transform:rotate(45deg);
}
@media (hover:hover){
  .crmenu:hover .crmenu__list{opacity:1;visibility:visible;transform:none;transition-delay:0s}
}
.crmenu.is-open .crmenu__list{opacity:1;visibility:visible;transform:none;transition-delay:0s}

.crmenu__list li + li{border-top:1px solid var(--concrete-2)}
.crmenu__list a{
  display:block;padding:13px 18px;
  color:var(--forest-deep);text-decoration:none;white-space:nowrap;
  transition:background .15s ease,color .15s ease;
}
.util .crmenu__list a:hover,.crmenu__list a:focus-visible{background:var(--concrete);color:var(--forest);outline:0}

/* On a phone the utility bar is centred, so the menu is too: hung from the
   right edge of a centred pill it could run off the left of the screen. */
@media (max-width:900px){
  .crmenu__list{right:auto;left:50%;transform:translate(-50%,-6px)}
  .crmenu.is-open .crmenu__list{transform:translate(-50%,0)}
  .crmenu__list::after{right:auto;left:calc(50% - 5px)}
}

/* ---------- About Cost Recovery ---------- */
.cra__intro{
  max-width:38ch;margin:0 0 clamp(36px,5vw,56px);
  font-size:clamp(21px,2.3vw,27px);line-height:1.42;color:var(--graphite);
}
.cra__h{
  margin:0 0 20px;
  font-family:var(--f-display);font-size:clamp(26px,3vw,34px);line-height:1;
  text-transform:uppercase;
}
.cra__features{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:18px;
  margin:0;padding:0;list-style:none;
}
.cra__feature{
  display:flex;flex-direction:column;gap:8px;
  padding:26px 24px;
  background:#fff;border:1px solid var(--concrete-2);border-radius:var(--r);
}
.cra__icon{
  display:flex;align-items:center;justify-content:center;
  width:56px;height:56px;margin-bottom:8px;
  color:var(--forest);background:var(--concrete);border-radius:50%;
}
.cra__ftitle{font-size:1.08rem;line-height:1.3}
.cra__ftext{color:var(--zinc);line-height:1.55}

.cra__more{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:30px 0 0}
.cra__pdf{
  padding:3px 7px;
  font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;color:var(--zinc);
  border:1px solid var(--concrete-2);border-radius:3px;
}

.cra__cta{
  display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;
  margin-top:clamp(40px,6vw,64px);padding:clamp(24px,4vw,38px);
  color:#fff;background:var(--forest-deep);border-radius:var(--r);
}
.cra__ctatext{display:flex;flex-direction:column;gap:6px;max-width:54ch}
.cra__ctatitle{font-family:var(--f-display);font-size:clamp(24px,2.6vw,31px);line-height:1.05;text-transform:uppercase}
.cra__ctatext span{color:rgba(255,255,255,.78);line-height:1.5}
.cra__ctaacts{display:flex;gap:12px;flex-wrap:wrap}
.cra__contact{margin:22px 0 0;font-size:.95rem;color:var(--zinc)}
.cra__contact a{color:var(--forest);font-weight:600;text-decoration:none}
.cra__contact a:hover{text-decoration:underline}
@media (max-width:560px){
  .cra__ctaacts,.cra__ctaacts .btn{width:100%}
  .cra__ctaacts .btn{justify-content:center}
}

/* ---------- larger navigation ----------
   The client asked for a bigger menu. 11px became 13px, with the tracking
   eased from .1em to .06em: the larger letters need less air, and it keeps
   the line about as long as it was. */
.nav a{font-size:13px;letter-spacing:.06em}
.mobnav a{font-size:14px;letter-spacing:.12em}

/* The header could not hold the larger menu beside everything else, and it
   was already over-full: its buttons ran past the edge of the content
   column at every desktop width. Three things make it fit, all measured in
   a real browser rather than estimated:

   1. The account control is an icon, like the bag beside it, with its
      label kept for screen readers and as a tooltip. Signing in is also
      in the Cost Recovery menu now.
   2. The header row may use up to 1440px on wide screens instead of 1240.
   3. Below 1480px the "Book a shop visit" button steps aside. Contact is
      in the menu, and the button is back as soon as there is room. */
.hdr__acct{width:40px;padding:0;border-radius:50%}
.hdr__acct span{
  position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;
}
@media (min-width:1281px){ .hdr .shell{width:min(1440px,94vw)} }
@media (max-width:1479px){ .hdr__cta .btn{display:none} }

/* With the header wider, the utility bar above it follows on wide screens,
   so the two rows line up. Below this it keeps the width it had. */
@media (min-width:1481px){ .util .shell{width:min(1440px,94vw)} }

/* The footer never stacked on a phone. footer.php sets its column widths in
   an inline style, so the design's own "one column below 860px" rule lost to
   it and three columns were squeezed into a phone's width. */
@media (max-width:860px){ .ftr__top{grid-template-columns:1fr!important} }

/* A button given the hidden attribute stayed on screen: .btn sets its own
   display, which outranks the browser's rule for [hidden]. On the scanner
   that meant Start camera and Stop camera showing together the whole time. */
.btn[hidden]{display:none!important}
