/** Shopify CDN: Minification failed

Line 2338:8 Unexpected "{"
Line 2338:17 Expected ":"
Line 2338:23 Unexpected ","

**/
/* ==========================================================================
   provis-all.css — Combined Provis custom styles
   Generated 2026-04-10. Source files preserved in assets/ for editing.
   ========================================================================== */

/* --- Global bulletproofing --- */
html { scroll-behavior: auto !important; overflow-x: hidden !important; }
body { overflow-x: hidden !important; }

/* --- Global centering: everything centered, no bleed --- */
section, .shopify-section, .shopify-section > div,
.shopify-section > section, [class*="provis-"] {
  box-sizing: border-box !important;
  max-width: 100% !important;
}
/* Kill 100vw hacks on provis sections only — not header/theme elements */
section[style*="100vw"],
div[class*="pv-"][style*="100vw"] {
  width: 100% !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
/* Force full-bleed sections to stay within viewport */
.pv-mq, .pv-cc, .pv-os, .pv-ctab, .pv-sub,
.pv-img-hero, .pv-page-hero, .pv-brand-story,
[class*="marquee"], [class*="cta-banner"],
[class*="subscribe-cta"], [class*="origins-strip"],
[class*="newsletter"], [class*="founder-note"],
[class*="brewing-today"], [class*="collection-hero"] {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  overflow-x: hidden !important;
}

/* ═══════════════════════════════════════════════════════════════
   MOBILE FIXES (max-width: 768px)
   ═══════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {

  /* --- Nothing under 12px on mobile — nuclear override --- */
  .pv-cc__card-origin,
  .pv-cc__card-badge,
  .pv-cc__card-flag,
  .pv-cc__card-add,
  .pv-cc__eyebrow,
  .pv-os__card-country,
  .pv-os__eyebrow,
  .pv-ph-scroll-text,
  .pv-img-hero__eyebrow,
  .pv-img-hero__eyebrow-text,
  .pv-img-hero__btn,
  .pv-img-hero__scroll-text,
  .pv-founder__eyebrow,
  .pv-sub__eyebrow,
  .pv-sub__btn,
  .pv-nl__eyebrow,
  .pv-sub-bag-num,
  .pv-rn__eyebrow,
  .cart-bubble__text,
  .cart-bubble__text-count,
  [class*="eyebrow"],
  [class*="badge"],
  [class*="fine"],
  [class*="small"],
  [class*="disclaimer"],
  [class*="bubble"],
  [class*="tag"],
  [class*="counter"],
  [class*="hint"],
  [class*="scroll-text"] {
    font-size: 12px !important;
  }
  /* Nuclear: override section-ID-scoped font sizes under 12px */
  [id*="shopify-section"] [class*="origin"],
  [id*="shopify-section"] [class*="eyebrow"],
  [id*="shopify-section"] [class*="scroll-text"],
  [id*="shopify-section"] [class*="fine"],
  [id*="shopify-section"] [class*="note"],
  [id*="shopify-section"] [class*="hint"],
  [id*="shopify-section"] [class*="disclaimer"],
  [id*="shopify-section"] [class*="count"],
  [id*="shopify-section"] [class*="label"]:not(label),
  [id*="shopify-section"] [class*="country"],
  [id*="shopify-section"] [class*="farm"],
  [id*="shopify-section"] [class*="num"],
  [id*="shopify-section"] [class*="stat"],
  [id*="shopify-section"] [class*="tag"]:not(main):not(body) {
    font-size: 12px !important;
  }
  /* Form elements */
  [id*="shopify-section"] input,
  [id*="shopify-section"] select,
  [id*="shopify-section"] textarea,
  [id*="shopify-section"] label {
    font-size: 16px !important;
  }

  /* --- Overflow containment: nothing wider than screen --- */
  .pv-mq, [class*="marquee"],
  .pv-img-hero, [class*="image-hero"],
  .pv-ctab, [class*="cta-banner"],
  section, .shopify-section {
    max-width: 100vw !important;
    overflow-x: hidden !important;
  }
  .pv-mq__track, [class*="marquee"] [class*="track"] {
    /* marquee tracks are intentionally wide — parent clips */
  }
  .pv-img-hero__bg, .pv-ph-bg,
  [class*="hero"] [class*="bg"],
  .pv-ctab-bg {
    width: 100% !important;
    max-width: 100% !important;
    overflow: hidden !important;
  }

  /* --- Header overlap fix --- */
  .shopify-section[id*="main"] .product-information {
    padding-block-start: 120px !important;
  }
  .provis-image-hero, .provis-page-hero,
  .provis-collection-hero, [class*="collection-hero"] {
    margin-top: 0 !important;
  }

  /* --- Carousel cards: bigger on mobile --- */
  .pv-cc__card {
    flex: 0 0 80% !important;
  }
  .pv-cc__track { gap: 16px !important; }
  .pv-cc__track-wrap { padding: 0 20px !important; }
  .pv-cc__card-name { font-size: 1.1rem !important; height: auto !important; }
  .pv-cc__card-notes { font-size: 0.9rem !important; height: auto !important; }
  .pv-cc__card-price { font-size: 1rem !important; }
  .pv-cc__card-add { padding: 10px 16px !important; }
  .pv-cc__all {
    flex: 0 0 80% !important;
    width: 80% !important;
    max-width: 80% !important;
    aspect-ratio: auto !important;
    margin: 0 !important;
  }
  .pv-cc { padding: 48px 0 !important; }
  .pv-cc__header { margin-bottom: 28px !important; padding: 0 20px !important; }
  .pv-cc__heading { font-size: 1.8rem !important; }
  .pv-cc__nav { margin-top: 24px !important; }

  /* --- Subscribe tiers: single column --- */
  .pv-sub-tiers-grid {
    grid-template-columns: 1fr !important;
    max-width: 100% !important;
  }

  /* --- Split story: single column --- */
  .pv-split-visual--logo {
    min-height: 280px !important;
    padding: 32px !important;
  }

  /* --- Origins strip: stack vertically --- */
  .pv-os__grid {
    grid-template-columns: 1fr !important;
    gap: 24px !important;
  }

  /* --- Hide sticky ATC --- */
  .provis-sticky-mobile-atc, .sticky-add-to-cart,
  sticky-add-to-cart {
    display: none !important;
  }

  /* --- About page: tighten all sections --- */
  [class*="pv-bs-"] {
    padding: 40px 20px !important;
    min-height: auto !important;
  }
  [class*="pv-bs-"] [class*="grid"] {
    grid-template-columns: 1fr !important;
    gap: 24px !important;
  }
  [class*="pv-bs-"] [class*="img"] {
    height: 220px !important;
    min-height: 0 !important;
    border-radius: 4px !important;
    overflow: hidden !important;
  }
  [class*="pv-bs-"] h2 {
    font-size: 1.6rem !important;
  }
  [class*="pv-split-story"] {
    padding: 32px 0 !important;
  }
  [class*="pv-split"] .pv-split {
    gap: 24px !important;
    padding: 0 20px !important;
  }
  .pv-split-img {
    height: 280px !important;
    border-radius: 4px !important;
  }
  .pv-split-visual--logo {
    min-height: 260px !important;
    padding: 28px !important;
    border-radius: 4px !important;
  }

  /* --- PDP: hide sticky bar + fix spacing --- */
  .sticky-add-to-cart, sticky-add-to-cart,
  [class*="sticky-add-to-cart"], [data-stuck] {
    display: none !important;
    height: 0 !important;
  }

  /* --- Producer cards: bigger on mobile --- */
  .pv-os__card {
    aspect-ratio: 4/5 !important;
    min-height: 300px !important;
  }

  /* --- Brewing today: tighter on mobile --- */
  [class*="pv-bt-"] {
    padding: 48px 20px !important;
  }
  [class*="pv-bt-"] [class*="media"] {
    aspect-ratio: 1/1 !important;
    max-height: 350px !important;
  }
  /* Hide ALL decorative pseudo-elements on mobile about page */
  .provis-values-grid::before,
  .provis-values-grid::after,
  .provis-brand-story::before,
  .provis-brand-story::after,
  [class*="split-story"]::before,
  [class*="split-story"]::after {
    display: none !important;
  }
  /* Kill all section gaps / margins on mobile about page */
  .provis-values-grid,
  .provis-brand-story,
  [class*="provis-split-story"] {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
  }
  /* Values grid: remove top decoration space */
  [class*="values-grid"] [class*="header"]::before,
  [class*="values-grid"] [class*="header"]::after {
    display: none !important;
  }
  /* Hide gold diamond ornaments on mobile */
  .pv-ornament, [class*="ornament"] {
    display: none !important;
  }
  /* Gold bleed on right edge — kill overflow */
  .provis-values-grid, [class*="values-grid"] {
    overflow: hidden !important;
  }

  /* --- CTA banner: contain width --- */
  .pv-ctab {
    width: 100% !important;
    margin-left: 0 !important;
  }

  /* --- Product page title --- */
  .shopify-section[id*="main"] h1 {
    font-size: 1.6rem !important;
  }

  /* --- Footer: readable text --- */
  .footer [class*="menu"] {
    font-size: 14px !important;
  }

  /* --- Cart bubble: ensure visible --- */
  .cart-bubble__text-count {
    font-size: 12px !important;
  }

  /* --- Cart discount code: stack on mobile --- */
  .cart-summary [class*="discount"] form,
  .cart-summary [class*="discount"] [class*="form"],
  [class*="discount-form"],
  [class*="cart"] [class*="discount"] [class*="row"],
  [class*="cart"] [class*="discount"] [class*="wrapper"] {
    flex-direction: column !important;
    gap: 8px !important;
  }
  .cart-summary [class*="discount"] input,
  [class*="discount-form"] input {
    width: 100% !important;
    min-width: 0 !important;
  }
  .cart-summary [class*="discount"] button,
  [class*="discount-form"] button {
    width: 100% !important;
  }

  /* --- Mobile header: force visible --- */
  .shopify-section[id*="header"],
  header-component, .header {
    z-index: 999 !important;
    width: 100% !important;
    max-width: 100% !important;
    min-height: 60px !important;
  }
  .header__drawer {
    display: flex !important;
    align-items: center !important;
  }
  .header__icon--menu,
  .menu-drawer-container > summary {
    display: flex !important;
    visibility: visible !important;
    opacity: 1 !important;
    z-index: 10 !important;
  }

  /* --- Mobile drawer menu: readable links --- */
  .menu-drawer a,
  .menu-drawer__menu-item,
  [class*="menu-drawer"] a {
    color: inherit !important;
    text-decoration: none !important;
    font-size: 16px !important;
    padding: 12px 0 !important;
  }

  /* --- Hide ALL sticky ATC bars on PDP --- */
  .sticky-add-to-cart, sticky-add-to-cart,
  [class*="sticky-add-to-cart"],
  .provis-sticky-mobile-atc,
  .sticky-add-to-cart__bar,
  [data-stuck] {
    display: none !important;
    height: 0 !important;
    overflow: hidden !important;
    visibility: hidden !important;
    pointer-events: none !important;
  }

  /* --- About page: collapse empty space from split sections --- */
  .pv-split-img {
    height: 300px !important;
    min-height: 0 !important;
  }
  .pv-split { gap: 24px !important; }
  .pv-split-story { padding: 40px 0 !important; }

  /* --- Subscribe CTA: no overlap --- */
  .pv-sub {
    min-height: auto !important;
  }
  .pv-sub__img {
    min-height: 250px !important;
    max-height: 300px !important;
  }

  /* --- Header icons: prevent overlap on mobile --- */
  .header-actions {
    gap: 8px !important;
    flex-wrap: nowrap !important;
  }
  .header-actions__action {
    min-width: 32px !important;
    min-height: 32px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    position: relative !important;
    z-index: 1 !important;
  }
  /* Ensure hamburger menu button is clickable above account link */
  .header__drawer button,
  [class*="header-drawer"] button,
  header button[aria-label] {
    position: relative !important;
    z-index: 10 !important;
  }

  /* --- Carousel section headings: bigger on mobile --- */
  .pv-cc__heading {
    font-size: clamp(1.6rem, 6vw, 2rem) !important;
  }
  .pv-cc__desc {
    font-size: 0.95rem !important;
    padding: 0 8px !important;
  }

  /* --- Brand story / values: readable on mobile --- */
  [class*="values-grid"] [class*="grid"] {
    grid-template-columns: 1fr !important;
  }

  /* --- CTA banner: fit on mobile --- */
  .pv-ctab {
    padding: 48px 24px !important;
  }
  .pv-ctab-body {
    font-size: 0.95rem !important;
  }

  /* --- Footer newsletter: stack on mobile --- */
  [class*="newsletter-inline"] [class*="inner"] {
    flex-direction: column !important;
  }
}

/* Single-card static grid: make the card wider so it doesn't look lost */
.pv-cc--static .pv-cc__track:has(.pv-cc__card:only-child) .pv-cc__card {
  max-width: 360px !important;
}

/* Kill all entrance animations sitewide — prevents layout shifts */
.pv-cc__eyebrow, .pv-cc__heading, .pv-cc__heading .pv-cc__word,
.pv-cc__desc, .pv-cc__line, .pv-cc__card, .pv-cc__all, .pv-cc__nav,
.pv-cc__intro-callout, [data-pv-reveal], .pv-kenburns,
.pv-words-reveal .pv-word {
  opacity: 1 !important;
  transform: none !important;
  transition: none !important;
  animation: none !important;
}

/* Hide video hero section on home page */
[id*="hero_video"] { display: none !important; }

/* Hide footer "Get First Access" email bar — using the big newsletter section instead */
[id*="footer_m9NzUG"] { display: none !important; }

/* Hide "Four steps. Worlds apart." process strip on reserve page */
[id*="process_strip"] { display: none !important; }

/* Hide first marquee on coffee page */
[id*="marquee_1"] { display: none !important; }

/* Hide sticky add-to-cart bar on product pages */
.sticky-add-to-cart,
sticky-add-to-cart,
[class*="sticky-add-to-cart"],
.provis-sticky-mobile-atc {
  display: none !important;
}

/* Hide Shop Pay / accelerated checkout sitewide */
.accelerated-checkout-block, .shopify-payment-button,
.shopify-payment-button__button, .dynamic-checkout__buttons,
shopify-accelerated-checkout, [class*="accelerated-checkout"],
[class*="additional-checkout"], [class*="shopify-payment-button"],
shopify-payment-terms, .shopify-payment-terms,
[class*="payment-terms"], more-payment-options-link,
.shopify-payment-button__more-options {
  display: none !important;
}

/* Hide Account text, show icon only */
shopify-account .account-button__text, .account-button__text,
[class*="account"] [class*="text-style"], .account-button--text {
  display: none !important;
}
shopify-account [class*="avatar-initial"] {
  display: none !important;
}

/* Cart bubble: white bg, navy text — override all Shopify defaults */
cart-bubble, .cart-bubble,
[class*="cart-bubble"],
[class*="cart-count"],
.header [class*="bubble"] {
  background: transparent !important;
  color: #FFFFFF !important;
  border: none !important;
  box-shadow: none !important;
}
.cart-bubble__background {
  background: #FFFFFF !important;
  opacity: 1 !important;
}
.cart-bubble__text,
.cart-bubble__text-count {
  color: #222432 !important;
}
/* Align header action icons evenly */
.header-actions {
  display: flex !important;
  align-items: center !important;
  gap: 20px !important;
}



/* ==========================================================================
   SOURCE: provis-brand.css
   ========================================================================== */

/* provis-brand.css — v2 (rewritten from spec, 2026-04-06)
   - Body type fixed: NO Tiller on body. Inter Tight workhorse.
   - Palette: oxblood + paper + ink (gold killed).
   - Two motions only: fade-up + hairline-draw.
   - Margin-note device baked in. */

@font-face {
  font-family: 'Tiller';
  src: url('Tiller-Regular.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'Tiller';
  src: url('Tiller-Medium.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
}
/* Tiller-Bold.woff2 fails OTS parsing in Chromium (corrupt file shipped in
   theme). Alias weight 700 to Tiller-Heavy.woff2 to eliminate console
   warnings + font-decode errors across every page. */
@font-face {
  font-family: 'Tiller';
  src: url('Tiller-Heavy.woff2') format('woff2');
  font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'Tiller';
  src: url('Tiller-Heavy.woff2') format('woff2');
  font-weight: 800; font-style: normal; font-display: swap;
}

:root {
  /* Round-6 palette restored */
  --provis-cream:        #F8FAEF;
  --provis-warm-beige:   #eef1ea;
  --provis-navy:         #222432;
  --provis-dark:         #222432;
  --provis-gold:         #B9A977;
  --provis-gold-hover:   #a89664;
  --provis-espresso:     #2d2418;
  --provis-roast:        #4a3223;
  --provis-muted:        #222432a0;
  --provis-light-muted:  #F8FAEFcc;
  --provis-soft-white:   #f2f4ec;
  --provis-border:       #2224320f;

  /* New palette aliased back to legacy values so any new section refs still resolve */
  --provis-paper:        #F8FAEF;
  --provis-paper-2:      #eef1ea;
  --provis-paper-rule:   rgba(34, 36, 50, 0.12);
  --provis-ink:          #222432;
  --provis-ink-2:        #2d2f44;
  --provis-ink-rule:     rgba(248, 250, 239, 0.14);
  --provis-oxblood:      #B9A977;
  --provis-oxblood-deep: #a89664;
  --provis-mute:         rgba(34, 36, 50, 0.62);
  --provis-mute-dark:    rgba(248, 250, 239, 0.62);

  /* Type */
  --provis-heading-font: 'Tiller', Georgia, serif;
  --provis-body-font:    'DM Sans', sans-serif;

  /* Spacing */
  --space-1:.25rem; --space-2:.5rem; --space-3:.75rem; --space-4:1rem;
  --space-5:1.5rem; --space-6:2rem; --space-7:3rem; --space-8:4rem;
  --space-9:6rem; --space-10:8rem; --space-11:10rem;

  /* Containers */
  --container-display: 1440px;
  --container-wide:    1240px;
  --container-text:    680px;
  --container-narrow:  520px;

  /* Section padding (the global rule) */
  --section-pad-y: clamp(6rem, 10vw, 10rem);
  --section-pad-x: clamp(1.5rem, 4vw, 4rem);

  /* Motion */
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
}

/* Round-6 body type — Tiller everywhere via heading-family override */
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
  font-family: var(--provis-heading-font) !important;
  letter-spacing: 0.02em;
}

body * {
  --font-heading-family: 'Tiller', Georgia, serif;
}

/* Force proper case on all headings site-wide */
h1, h2, h3, h4, .h1, .h2, .h3, .h4 {
  text-transform: none !important;
}

::selection { background: var(--provis-oxblood); color: var(--provis-paper); }

/* Eyebrow utility */
.pv-eyebrow {
  font-family: var(--provis-heading-font);
  font-weight: 500;
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--provis-ink);
  line-height: 1;
}
.pv-eyebrow--ox { color: var(--provis-oxblood); }
.pv-eyebrow--mute { color: var(--provis-mute); }
.pv-eyebrow--paper { color: var(--provis-paper); }

/* Drop cap (one per page max) */
.pv-drop-cap::first-letter {
  font-family: var(--provis-heading-font);
  font-weight: 700;
  font-size: 3.6em;
  line-height: 1;
  float: left;
  margin: 0.12em 0.12em -0.05em 0;
  padding: 0;
  color: var(--provis-oxblood);
  -webkit-initial-letter: 3;
  initial-letter: 3;
}

/* Hairline */
.pv-hairline {
  display: block; width: 96px; height: 1px;
  background: var(--provis-oxblood);
  margin: var(--space-5) 0;
}

/* Section wrapper */
.pv-section {
  padding: var(--section-pad-y) var(--section-pad-x);
  background: var(--provis-paper);
  color: var(--provis-ink);
}
.pv-section--ink { background: var(--provis-ink); color: var(--provis-paper); }
.pv-section--ink h1, .pv-section--ink h2, .pv-section--ink h3, .pv-section--ink h4 { color: var(--provis-paper); }
.pv-section__inner { max-width: var(--container-wide); margin: 0 auto; }
.pv-section__inner--text { max-width: var(--container-text); }
.pv-section__inner--display { max-width: var(--container-display); }

/* Margin-note grid (signature device) */
.pv-margin-grid {
  display: grid;
  grid-template-columns: clamp(80px, 18vw, 200px) 1fr;
  column-gap: clamp(1.5rem, 3vw, 3rem);
}
.pv-margin-col {
  display: flex; flex-direction: column; align-items: flex-start;
  gap: 1.25rem; padding-top: 0.6rem;
  border-right: 1px solid var(--provis-paper-rule);
  padding-right: clamp(1rem, 2vw, 2rem);
}
.pv-section--ink .pv-margin-col { border-right-color: var(--provis-ink-rule); }
.pv-margin-col__chapter {
  font-family: var(--provis-heading-font);
  font-weight: 700; font-size: 0.9375rem; letter-spacing: 0.04em;
  color: var(--provis-oxblood); line-height: 1;
}
.pv-margin-col__pilcrow {
  font-family: var(--provis-heading-font);
  font-size: 1.25rem; color: var(--provis-oxblood);
  margin-top: auto; opacity: 0.7;
}
@media (max-width: 749px) {
  .pv-margin-grid { grid-template-columns: 1fr; }
  .pv-margin-col {
    flex-direction: row; align-items: center; gap: 0.75rem;
    border-right: none; border-bottom: 1px solid var(--provis-paper-rule);
    padding: 0 0 1rem; margin-bottom: 1.5rem;
  }
  .pv-margin-col__pilcrow { margin-top: 0; margin-left: auto; }
}

/* Reveal — progressive enhancement. Content is visible by default so
   crawlers, static renderers, social preview bots, and no-JS users see
   everything. The fade-in is only armed once JS has marked the document
   as ready, at which point IntersectionObserver adds .pv-visible. */
[data-pv-reveal] {
  opacity: 1; transform: none;
  transition: opacity 900ms var(--ease-out), transform 900ms var(--ease-out);
}
html.pv-js-loaded [data-pv-reveal]:not(.pv-visible):not(.is-visible) {
  opacity: 0; transform: translateY(24px);
}
[data-pv-reveal].pv-visible,
[data-pv-reveal].is-visible { opacity: 1; transform: none; }

/* Always-visible safety nets for product grids */
.product-grid-container, .product-grid-container *,
.collection-wrapper, .collection-wrapper *,
results-list, results-list *,
product-card, product-card *,
.product-grid__item, .product-grid__item * {
  opacity: 1 !important;
  visibility: visible !important;
}

/* Image hover */
.pv-img-hover { overflow: hidden; }
.pv-img-hover img { transition: transform 600ms cubic-bezier(0.65, 0, 0.35, 1); }
.pv-img-hover:hover img { transform: scale(1.03); }

/* Image grading */
.pv-img-grade { filter: saturate(0.88) contrast(1.06) brightness(0.97) sepia(0.04); }

/* Buttons */
.pv-btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 18px 36px; border-radius: 2px;
  font-family: var(--provis-heading-font); font-weight: 500;
  font-size: 0.8125rem; letter-spacing: 0.16em; text-transform: uppercase;
  text-decoration: none; cursor: pointer; border: none;
  transition: background 240ms var(--ease-out), color 240ms var(--ease-out);
}
.pv-btn--primary { background: var(--provis-oxblood); color: var(--provis-paper); }
.pv-btn--primary:hover { background: var(--provis-oxblood-deep); }
.pv-btn--ghost {
  background: transparent; color: var(--provis-ink);
  border: 1px solid var(--provis-ink); padding: 17px 35px;
}
.pv-btn--ghost:hover { background: var(--provis-ink); color: var(--provis-paper); }
.pv-btn--ghost-paper {
  background: transparent; color: var(--provis-paper);
  border: 1px solid var(--provis-paper); padding: 17px 35px;
}
.pv-btn--ghost-paper:hover { background: var(--provis-paper); color: var(--provis-ink); }

/* Text link */
.pv-link {
  font-family: var(--provis-heading-font); font-weight: 500;
  font-size: 0.8125rem; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--provis-oxblood); text-decoration: none;
  border-bottom: 1px solid var(--provis-oxblood); padding-bottom: 2px;
}
.pv-link:hover { color: var(--provis-oxblood-deep); }

/* Form elements */
.pv-input, .pv-textarea, .pv-select {
  width: 100%; background: transparent;
  border: none; border-bottom: 1px solid var(--provis-paper-rule);
  padding: 12px 0; font-family: var(--provis-body-font);
  font-size: 1rem; color: var(--provis-ink);
  border-radius: 0; outline: none;
}
.pv-input:focus, .pv-textarea:focus, .pv-select:focus { border-bottom-color: var(--provis-oxblood); }
.pv-label {
  display: block; font-family: var(--provis-heading-font);
  font-weight: 500; font-size: 0.6875rem; letter-spacing: 0.22em;
  text-transform: uppercase; color: var(--provis-mute); margin-bottom: 6px;
}

/* Footer dark theme */
.footer-content,
[data-section-id*="footer"] {
  background: var(--provis-ink);
  color: var(--provis-mute-dark);
}
.footer-content h2 { color: var(--provis-paper); font-family: var(--provis-heading-font); }
.footer-content a:hover { color: var(--provis-oxblood); }

/* --------------------------------------------------------------------------
   Header logo (the seal)
   - Single source: badge-200.png
   - Lock visible container to --original (no theme swap)
   - On dark/transparent hero state: render badge as-is — light dog
     details show clearly on the dark video.
   - On scrolled WHITE nav state: add a navy radial-gradient backdrop
     behind the badge (sized to the seal's inner circle) so the cream
     dog highlights have something dark to contrast against.
   - Responsive sizing via clamp().
   -------------------------------------------------------------------------- */

.header-logo__image-container--original {
  display: block !important;
  position: relative;
  isolation: isolate;
}
.header-logo__image-container--inverse {
  display: none !important;
}
.header-logo:has(.header-logo__image-container--inverse) .header-logo__image-container--original {
  display: block !important;
}
.header-logo,
.header-logo * {
  opacity: 1 !important;
}
.header-logo img {
  opacity: 1 !important;
  filter: none !important;
  position: relative;
  z-index: 2;
}

/* Navy backdrop behind seal — only when header is in scrolled/sticky-active
   state (white nav background). Radial gradient sized to fit the seal's
   inner circle so it doesn't spill past the rim/cherries on the badge. */
.header-logo__image-container--original::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: radial-gradient(circle, #1a1b22 36%, rgba(26,27,34,0.85) 44%, transparent 50%);
  opacity: 0;
  transition: opacity 0.35s ease;
}
header-component[data-sticky-state="active"] .header-logo__image-container--original::before,
header-component:not([transparent]) .header-logo__image-container--original::before,
header-component[transparent="not-sticky"][data-sticky-state="active"] .header-logo__image-container--original::before {
  opacity: 1;
}

/* Responsive seal sizing — proportionate to viewport. */
.header-logo__image {
  height: clamp(44px, 5.5vw, 76px) !important;
  width: auto !important;
  max-width: clamp(44px, 5.5vw, 76px);
}
@media (max-width: 749px) {
  .header-logo__image {
    height: clamp(40px, 10vw, 56px) !important;
    max-width: clamp(40px, 10vw, 56px);
  }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
  [data-pv-reveal] { opacity: 1 !important; transform: none !important; }
}

html { scroll-behavior: smooth; }
body, html { overflow-x: hidden; }
a:focus-visible, button:focus-visible {
  outline: 2px solid var(--provis-oxblood); outline-offset: 3px;
}

/* Kill old gold accents from any leftover section CSS that referenced var(--provis-gold) */
/* (alias above already covers it; this is belt-and-suspenders for hard-coded #B9A977) */
[style*="#B9A977"], [style*="#b9a977"] { color: var(--provis-oxblood) !important; }

/* --------------------------------------------------------------------------
   Site-wide animation + overlay system
   - Subtle film grain overlay on every page (fixed, low opacity)
   - Auto-reveal motion on section headings, paragraphs, images
   - Smooth scroll behavior + scroll-triggered fade-in via IntersectionObserver
   -------------------------------------------------------------------------- */

/* Film grain overlay — sits above everything but pointer-events: none */
body::after {
  content: '';
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9998;
  opacity: 0.06;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  will-change: transform;
}

/* Subtle scroll-triggered reveals on common section elements
   (relies on the existing provis-scroll-reveal.js IntersectionObserver
   which adds .pv-visible to elements with data-pv-reveal). For sections
   that don't have data-pv-reveal yet, we provide a CSS-only fallback that
   gently fades in on initial paint. */
@media (prefers-reduced-motion: no-preference) {
  /* CSS-only initial paint reveal — applied to common section types
     so EVERY section animates in even without JS attributes */
  section[class*="provis-"], section[class*="pv-"], .shopify-section > section {
    animation: pvSectionFadeIn 1.2s cubic-bezier(0.22, 1, 0.36, 1) both;
    animation-delay: 0.05s;
  }
  @keyframes pvSectionFadeIn {
    from { opacity: 0.001; transform: translateY(12px); }
    to   { opacity: 1; transform: translateY(0); }
  }
  /* Reset reveals for elements that have their own data-pv-reveal */
  [data-pv-reveal] { animation: none !important; }
}

/* Image hover overlay — applied to non-carousel product images.
   Coffee carousel (.pv-cc__card-img) is excluded so its own gallery
   transition with rotate isn't overridden. */
.pv-img-hover img,
[class*="product-card"] img,
.product-grid__item img {
  transition: transform 0.7s cubic-bezier(0.16, 1, 0.3, 1),
              filter 0.5s ease !important;
}
.pv-img-hover:hover img,
[class*="product-card"]:hover img {
  filter: brightness(0.94) contrast(1.04);
}

/* Smooth scroll feel */
html { scroll-behavior: smooth; }

/* Subtle parallax-feel on hero sections via background-attachment */
@media (min-width: 900px) and (prefers-reduced-motion: no-preference) {
  [class*="provis-page-hero"] .pv-ph-bg,
  [class*="provis-image-hero"] .pv-img-hero__bg {
    will-change: transform;
  }
}

/* ══════════════════════════════════════════════════════════
   PRODUCT PAGE — Brand cohesion overrides
   Applied to Shopify's native product-information section so
   the page reads as Provis (Tiller, cream/navy/gold, locked
   button system) without rewriting the section.
   ══════════════════════════════════════════════════════════ */

/* Section-level: warm cream background on the entire main product block */
.shopify-section[id*="main"] .product-information,
.shopify-section[id*="main"] product-information,
.shopify-section[id*="main"] .product-details,
.shopify-section[id*="main"] .product-details-grid {
  background: #F8FAEF;
}

/* Product title — Tiller, dramatic */
.shopify-section[id*="main"] .product-title h1,
.shopify-section[id*="main"] .product-title,
.shopify-section[id*="main"] h1.product__title,
.shopify-section[id*="main"] h1 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(2.4rem, 4.4vw, 3.8rem) !important;
  line-height: 1.05 !important;
  letter-spacing: -0.01em !important;
  color: #222432 !important;
}

/* Price — bigger, Tiller, gold */
.shopify-section[id*="main"] .product-price,
.shopify-section[id*="main"] .price,
.shopify-section[id*="main"] [class*="price__regular"],
.shopify-section[id*="main"] .price-item--regular {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: 1.5rem !important;
  color: #B9A977 !important;
  letter-spacing: 0.01em !important;
}

/* Variant picker buttons — locked Provis style */
.shopify-section[id*="main"] variant-picker .variant-picker__option-values label,
.shopify-section[id*="main"] .variant-picker__option-values label,
.shopify-section[id*="main"] .product-form__input label,
.shopify-section[id*="main"] [class*="variant-picker"] label {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  border: 1px solid rgba(34,36,50,0.18) !important;
  border-radius: 1px !important;
  padding: 14px 22px !important;
  background: transparent !important;
  color: #222432 !important;
  transition: border-color 0.3s ease, background 0.3s ease, color 0.3s ease !important;
}
.shopify-section[id*="main"] variant-picker input:checked + label,
.shopify-section[id*="main"] .variant-picker__option-values input:checked + label,
.shopify-section[id*="main"] [class*="variant-picker"] input:checked + label {
  border-color: #222432 !important;
  background: #222432 !important;
  color: #F8FAEF !important;
}

/* Variant option group label (e.g., "Grind") */
.shopify-section[id*="main"] .variant-picker__option-label,
.shopify-section[id*="main"] .product-form__input-label,
.shopify-section[id*="main"] legend {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.32em !important;
  text-transform: uppercase !important;
  color: #B9A977 !important;
  margin-bottom: 12px !important;
}

/* Add to cart button — locked Provis style */
.shopify-section[id*="main"] .add-to-cart-button,
.shopify-section[id*="main"] button[name="add"],
.shopify-section[id*="main"] .product-form__submit,
.shopify-section[id*="main"] .button.add-to-cart-button {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  background: #222432 !important;
  color: #F8FAEF !important;
  border: 1px solid #222432 !important;
  border-radius: 1px !important;
  padding: 18px 36px !important;
  height: auto !important;
  min-height: 56px !important;
  transition: background 0.3s ease, border-color 0.3s ease, color 0.3s ease, transform 0.3s ease !important;
}
.shopify-section[id*="main"] .add-to-cart-button:hover,
.shopify-section[id*="main"] button[name="add"]:hover,
.shopify-section[id*="main"] .product-form__submit:hover {
  background: #B9A977 !important;
  border-color: #B9A977 !important;
  color: #222432 !important;
  transform: translateY(-2px) !important;
}

/* Quantity selector */
.shopify-section[id*="main"] quantity-input,
.shopify-section[id*="main"] .quantity,
.shopify-section[id*="main"] [class*="quantity"] {
  border: 1px solid rgba(34,36,50,0.18) !important;
  border-radius: 1px !important;
}

/* Description text — DM Sans body */
.shopify-section[id*="main"] .product-description,
.shopify-section[id*="main"] [class*="product-description"],
.shopify-section[id*="main"] .rte {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 1rem !important;
  line-height: 1.75 !important;
  color: rgba(34,36,50,0.82) !important;
}

/* Dividers — gold hairline instead of grey */
.shopify-section[id*="main"] hr,
.shopify-section[id*="main"] .product-divider,
.shopify-section[id*="main"] [class*="_divider"] {
  border: none !important;
  height: 1px !important;
  background: rgba(34,36,50,0.12) !important;
  margin: 24px 0 !important;
}

/* Product recommendations — match coffee carousel card aesthetic */
.shopify-section[id*="recommendations"] .product-recommendations,
.shopify-section[id*="recommendations"] product-recommendations {
  background: #F8FAEF !important;
  padding: clamp(80px, 11vh, 140px) 0 !important;
}
.shopify-section[id*="recommendations"] h3,
.shopify-section[id*="recommendations"] [class*="recommendations__heading"] {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(2rem, 4vw, 3rem) !important;
  color: #222432 !important;
  margin-bottom: clamp(32px, 5vh, 56px) !important;
  text-align: center !important;
}
.shopify-section[id*="recommendations"] [class*="product-card"] {
  border: none !important;
  border-radius: 6px !important;
  overflow: hidden !important;
  background: #222432 !important;
  transition: transform 0.5s ease, box-shadow 0.5s ease !important;
}
.shopify-section[id*="recommendations"] [class*="product-card"]:hover {
  transform: translateY(-6px) !important;
  box-shadow: 0 24px 60px rgba(34, 36, 50, 0.22) !important;
}
.shopify-section[id*="recommendations"] [class*="product-card"] [class*="product-title"],
.shopify-section[id*="recommendations"] [class*="product-card"] a {
  font-family: 'Tiller', Georgia, serif !important;
  color: #F8FAEF !important;
  text-decoration: none !important;
}
.shopify-section[id*="recommendations"] [class*="product-card"] [class*="price"] {
  color: #B9A977 !important;
  font-family: 'Tiller', Georgia, serif !important;
}

/* ══════════════════════════════════════════════════════════
   CART PAGE — Brand cohesion overrides
   ══════════════════════════════════════════════════════════ */
.shopify-section[id*="cart-section"] {
  background: #F8FAEF !important;
  padding: clamp(80px, 11vh, 140px) 0 !important;
}
.shopify-section[id*="cart-section"] .cart-page-title h1,
.shopify-section[id*="cart-section"] h1,
.shopify-section[id*="cart-section"] .cart__title {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(2.4rem, 4.4vw, 3.8rem) !important;
  line-height: 1.05 !important;
  letter-spacing: -0.01em !important;
  color: #222432 !important;
  margin-bottom: clamp(32px, 5vh, 56px) !important;
}
.shopify-section[id*="cart-section"] .cart-products,
.shopify-section[id*="cart-section"] [class*="cart-product"] {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  color: #222432 !important;
}
.shopify-section[id*="cart-section"] .cart-product__title,
.shopify-section[id*="cart-section"] [class*="cart-product__title"],
.shopify-section[id*="cart-section"] .cart-product a,
.shopify-section[id*="cart-section"] [class*="cart-products"] a {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: 1.15rem !important;
  color: #222432 !important;
  text-decoration: none !important;
}
.shopify-section[id*="cart-section"] .cart-product__price,
.shopify-section[id*="cart-section"] [class*="cart-product"] [class*="price"],
.shopify-section[id*="cart-section"] .price {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 600 !important;
  color: #B9A977 !important;
}
.shopify-section[id*="cart-section"] [class*="cart-summary"] {
  background: #fff !important;
  border: 1px solid rgba(34,36,50,0.10) !important;
  border-radius: 6px !important;
  padding: clamp(28px, 4vw, 44px) !important;
}
.shopify-section[id*="cart-section"] [class*="cart-summary"] h2,
.shopify-section[id*="cart-section"] [class*="cart-summary"] [class*="title"] {
  font-family: 'Tiller', Georgia, serif !important;
  color: #222432 !important;
}
.shopify-section[id*="cart-section"] .cart-summary__totals,
.shopify-section[id*="cart-section"] [class*="totals"] {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  color: #222432 !important;
}
/* Checkout button — locked Provis style */
.shopify-section[id*="cart-section"] [name="checkout"],
.shopify-section[id*="cart-section"] .cart__checkout-button,
.shopify-section[id*="cart-section"] button[type="submit"].button,
.shopify-section[id*="cart-section"] [class*="checkout"].button {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  background: #222432 !important;
  color: #F8FAEF !important;
  border: 1px solid #222432 !important;
  border-radius: 1px !important;
  padding: 18px 36px !important;
  min-height: 56px !important;
  width: 100% !important;
  transition: background 0.3s ease, border-color 0.3s ease, color 0.3s ease, transform 0.3s ease !important;
}
.shopify-section[id*="cart-section"] [name="checkout"]:hover,
.shopify-section[id*="cart-section"] .cart__checkout-button:hover {
  background: #B9A977 !important;
  border-color: #B9A977 !important;
  color: #222432 !important;
  transform: translateY(-2px) !important;
}
/* Quantity steppers */
.shopify-section[id*="cart-section"] quantity-input,
.shopify-section[id*="cart-section"] [class*="quantity"] {
  border: 1px solid rgba(34,36,50,0.18) !important;
  border-radius: 1px !important;
}

/* ══════════════════════════════════════════════════════════
   COLLECTION PAGE — Brand cohesion overrides
   ══════════════════════════════════════════════════════════ */
.shopify-section[id*="main-collection"],
.shopify-section[id*="main"] [class*="collection"] {
  background: #F8FAEF !important;
}
/* Filter / sort toolbar */
.shopify-section[id*="main"] [class*="facets"],
.shopify-section[id*="main"] [class*="collection-filters"],
.shopify-section[id*="main"] [class*="filters__header"] {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  color: #222432 !important;
}
.shopify-section[id*="main"] [class*="facets"] button,
.shopify-section[id*="main"] [class*="facets"] label,
.shopify-section[id*="main"] [class*="filter"] button,
.shopify-section[id*="main"] [class*="sort"] button,
.shopify-section[id*="main"] [class*="sort"] select {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  color: #222432 !important;
  border: 1px solid rgba(34,36,50,0.18) !important;
  border-radius: 1px !important;
  padding: 12px 18px !important;
  background: transparent !important;
  transition: border-color 0.3s ease, background 0.3s ease !important;
}
.shopify-section[id*="main"] [class*="facets"] button:hover,
.shopify-section[id*="main"] [class*="filter"] button:hover {
  border-color: #B9A977 !important;
}
/* Active filter */
.shopify-section[id*="main"] [class*="facets"] [aria-pressed="true"],
.shopify-section[id*="main"] [class*="facets"] [class*="active"] {
  background: #222432 !important;
  border-color: #222432 !important;
  color: #F8FAEF !important;
}
/* Collection product cards — match coffee carousel aesthetic */
.shopify-section[id*="main"] [class*="product-card"],
.shopify-section[id*="main-collection"] [class*="product-card"] {
  border: none !important;
  border-radius: 6px !important;
  overflow: hidden !important;
  background: transparent !important;
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.5s ease !important;
}
.shopify-section[id*="main"] [class*="product-card"]:hover,
.shopify-section[id*="main-collection"] [class*="product-card"]:hover {
  transform: translateY(-6px) !important;
  box-shadow: 0 24px 60px rgba(34, 36, 50, 0.18) !important;
}
.shopify-section[id*="main"] [class*="product-card"] [class*="product-title"],
.shopify-section[id*="main"] [class*="product-card"] a[class*="title"],
.shopify-section[id*="main-collection"] [class*="product-card"] a {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: 1.15rem !important;
  color: #222432 !important;
  text-decoration: none !important;
}
.shopify-section[id*="main"] [class*="product-card"] [class*="price"],
.shopify-section[id*="main-collection"] [class*="product-card"] [class*="price"] {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 600 !important;
  color: #B9A977 !important;
}
/* Collection title (the implicit one Shopify renders if you don't suppress it) */
.shopify-section[id*="main-collection"] h1,
.shopify-section[id*="main-collection"] [class*="collection-hero__title"] {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  color: #222432 !important;
}

/* ══════════════════════════════════════════════════════════
   404 PAGE + PRODUCT-LIST (used on cart/404) — cohesion
   ══════════════════════════════════════════════════════════ */
/* Note: the padding/background was previously on the outer wrapper which
   leaked cream above the dark hero. Move both to apply inside the inner
   .pv-404 (which already paints its own background) so the dark hero
   reaches the header edge. */
.shopify-section[id*="main-404"],
.shopify-section[id*="404"] {
  background: transparent !important;
  padding: 0 !important;
  text-align: center !important;
}
.shopify-section[id*="main-404"] h1,
.shopify-section[id*="404"] h1 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(2.4rem, 5vw, 4rem) !important;
  line-height: 1.1 !important;
  color: #222432 !important;
}
.shopify-section[id*="main-404"] p,
.shopify-section[id*="404"] p {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 1.05rem !important;
  color: rgba(34,36,50,0.72) !important;
  margin: 16px 0 32px !important;
}
.shopify-section[id*="main-404"] .button,
.shopify-section[id*="main-404"] a.button,
.shopify-section[id*="404"] .button {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  background: #222432 !important;
  color: #F8FAEF !important;
  border: 1px solid #222432 !important;
  border-radius: 1px !important;
  padding: 18px 36px !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 12px !important;
  text-decoration: none !important;
  transition: background 0.3s ease, border-color 0.3s ease, color 0.3s ease, transform 0.3s ease !important;
}
.shopify-section[id*="main-404"] .button:hover {
  background: #B9A977 !important;
  border-color: #B9A977 !important;
  color: #222432 !important;
  transform: translateY(-2px) !important;
}

/* product-list section (cart upsell + 404 upsell) */
.shopify-section[id*="product_list"],
.shopify-section[id*="product-list"] {
  background: #F8FAEF !important;
  padding: clamp(64px, 9vh, 96px) 0 !important;
}
.shopify-section[id*="product_list"] h3,
.shopify-section[id*="product-list"] h3,
.shopify-section[id*="product_list"] [class*="product-list-text"] h3 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(1.6rem, 3vw, 2.2rem) !important;
  color: #222432 !important;
}
.shopify-section[id*="product_list"] [class*="product-list-button"] a,
.shopify-section[id*="product_list"] a[class*="link"] {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  color: #B9A977 !important;
  text-decoration: none !important;
  border-bottom: 1px solid #B9A977 !important;
  padding-bottom: 4px !important;
  transition: color 0.3s ease, border-color 0.3s ease !important;
}
.shopify-section[id*="product_list"] [class*="product-list-button"] a:hover {
  color: #222432 !important;
  border-color: #222432 !important;
}

/* ══════════════════════════════════════════════════════════
   AESTHETIC BATCH A — FOUNDATION
   1. Header polish
   2. Footer build
   3. Section edge transitions (hairlines + ombre bleeds)
   4. Photo grade pass
   ══════════════════════════════════════════════════════════ */

/* ─── 1. HEADER ──────────────────────────────────────────── */
/* Make navy the default header background; cream when transparent over hero */
#header-component .header,
header.header,
.header {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  background: rgba(34,36,50,0.92) !important;
  backdrop-filter: blur(14px) saturate(140%) !important;
  -webkit-backdrop-filter: blur(14px) saturate(140%) !important;
  border-bottom: 1px solid rgba(248,250,239,0.08) !important;
  transition: background 0.4s ease, padding 0.4s ease, border-color 0.4s ease !important;
}
/* Transparent header over hero */
.header[data-transparent="always"]:not([data-stuck="true"]) {
  background: linear-gradient(180deg, rgba(34,36,50,0.55) 0%, rgba(34,36,50,0) 100%) !important;
  border-bottom-color: transparent !important;
  backdrop-filter: none !important;
}

/* Header logo / wordmark */
.header__logo a,
.header__logo,
[class*="header-logo"] a,
[class*="header__logo"] img {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  letter-spacing: 0.04em !important;
  color: #F8FAEF !important;
  text-decoration: none !important;
}

/* Nav menu links */
.header__menu a,
.header-menu a,
.header__navigation-bar-row a,
.header-row a:not([class*="logo"]):not([class*="cart"]):not([class*="search"]),
[class*="header-menu"] a {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  color: #F8FAEF !important;
  text-decoration: none !important;
  position: relative !important;
  padding: 8px 4px !important;
  transition: color 0.3s ease !important;
}
/* Animated underline on nav links */
.header__menu a::after,
.header-menu a::after,
[class*="header-menu"] a::after {
  content: '';
  position: absolute;
  left: 4px;
  right: 4px;
  bottom: 2px;
  height: 1px;
  background: #B9A977;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.45s cubic-bezier(0.22, 1, 0.36, 1);
}
.header__menu a:hover::after,
.header-menu a:hover::after,
[class*="header-menu"] a:hover::after {
  transform: scaleX(1);
}
.header__menu a:hover,
.header-menu a:hover,
[class*="header-menu"] a:hover {
  color: #B9A977 !important;
}

/* Cart count pill */
.header-actions [class*="cart"],
.header-actions__action[href*="cart"] {
  position: relative !important;
}
.header-actions [class*="cart-count"],
[class*="header-actions"] [class*="count"] {
  background: #B9A977 !important;
  color: #222432 !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-weight: 700 !important;
  font-size: 10px !important;
  border-radius: 999px !important;
  padding: 2px 7px !important;
  min-width: 18px !important;
  height: 18px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}

/* Header icons (search, cart, account)
   Use currentColor so icons inherit from the link/button color, which the
   header swaps between cream (transparent/hero state) and navy (scrolled
   state). Hardcoding cream here made icons invisible on white scrolled
   state. Hover stays gold. */
.header-actions svg,
.header-actions__action svg,
[class*="header-actions"] svg {
  stroke: currentColor !important;
  fill: none !important;
  transition: stroke 0.3s ease, color 0.3s ease !important;
}
.header-actions a,
.header-actions button,
.header-actions__action {
  color: #F8FAEF;
  transition: color 0.3s ease;
}
header-component[data-sticky-state='active'] .header-actions a,
header-component[data-sticky-state='active'] .header-actions button,
header-component[data-sticky-state='active'] .header-actions__action,
header-component:not([transparent='not-sticky']) .header-actions a,
header-component:not([transparent='not-sticky']) .header-actions button,
header-component:not([transparent='not-sticky']) .header-actions__action {
  color: #222432;
}
.header-actions a:hover,
.header-actions button:hover,
.header-actions__action:hover,
.header-actions a:hover svg,
.header-actions__action:hover svg {
  color: #B9A977 !important;
  stroke: #B9A977 !important;
}

/* ─── 2a. CART DRAWER — LIGHT & AIRY ──────────────────────
   Clean white drawer, navy text, gold accents.
   Feels like the Shopify checkout: white, spacious, calm.
   ──────────────────────────────────────────────────────── */
.cart-drawer__dialog,
.cart-drawer-component dialog,
dialog.cart-drawer__dialog {
  background: #FFFFFF !important;
  color: #222432 !important;
  border: 0 !important;
  border-left: 1px solid rgba(34, 36, 50, 0.08) !important;
  max-width: 480px !important;
  width: 92vw !important;
  padding: 0 !important;
  box-shadow: -8px 0 40px rgba(34, 36, 50, 0.10) !important;
}
.cart-drawer__dialog::backdrop {
  background: rgba(34, 36, 50, 0.28) !important;
  backdrop-filter: blur(2px) !important;
  -webkit-backdrop-filter: blur(2px) !important;
}
.cart-drawer__inner {
  background: #FFFFFF !important;
  color: #222432 !important;
  padding: 0 !important;
}
.cart-drawer__header {
  background: #FFFFFF !important;
  color: #222432 !important;
  border-bottom: 1px solid rgba(34, 36, 50, 0.08) !important;
  padding: 24px 28px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
}
.cart-drawer__heading,
.cart-drawer__heading--empty {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: 1.6rem !important;
  letter-spacing: -0.005em !important;
  color: #222432 !important;
  margin: 0 !important;
}
.cart-drawer__close-button {
  background: transparent !important;
  border: 1px solid rgba(34, 36, 50, 0.12) !important;
  border-radius: 50% !important;
  width: 44px !important;
  height: 44px !important;
  min-width: 44px !important;
  min-height: 44px !important;
  color: #B9A977 !important;
  cursor: pointer !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: background 0.25s ease, border-color 0.25s ease, color 0.25s ease, transform 0.2s ease !important;
}
.cart-drawer__close-button:hover {
  background: rgba(185, 169, 119, 0.10) !important;
  border-color: #B9A977 !important;
  color: #B9A977 !important;
  transform: scale(1.05) !important;
}
.cart-drawer__close-button:active {
  transform: scale(0.95) !important;
}
.cart-drawer__close-button svg { stroke: currentColor !important; fill: none !important; width: 18px !important; height: 18px !important; }

.cart-drawer__content,
.cart-drawer__items,
.cart-drawer__summary {
  background: #FFFFFF !important;
  color: #222432 !important;
}
.cart-drawer__items {
  padding: 8px 28px !important;
}
.cart-drawer__items [class*="cart-product"],
.cart-drawer__items [class*="line-item"] {
  border-bottom: 1px solid rgba(34, 36, 50, 0.08) !important;
  padding-block: 18px !important;
}
.cart-drawer__items [class*="cart-product"]:last-child {
  border-bottom: 0 !important;
}
.cart-drawer__items img,
.cart-drawer__items [class*="cart-product__image"] img {
  border-radius: 3px !important;
  border: 1px solid rgba(34, 36, 50, 0.06) !important;
}
.cart-drawer__items [class*="product-title"],
.cart-drawer__items [class*="cart-product__title"] {
  font-family: 'Tiller', Georgia, serif !important;
  font-size: 1.05rem !important;
  font-weight: 700 !important;
  color: #222432 !important;
}
.cart-drawer__items [class*="price"],
.cart-drawer__items [class*="cart-product__price"] {
  color: #222432 !important;
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 600 !important;
}
.cart-drawer__items [class*="quantity-selector"] button,
.cart-drawer__items [class*="quantity"] button {
  background: transparent !important;
  border: 1px solid rgba(34, 36, 50, 0.15) !important;
  color: #222432 !important;
  border-radius: 2px !important;
}
.cart-drawer__items [class*="quantity-selector"] button:hover,
.cart-drawer__items [class*="quantity"] button:hover {
  background: rgba(185, 169, 119, 0.10) !important;
  border-color: #B9A977 !important;
}
.cart-drawer__items [class*="quantity-selector"] input,
.cart-drawer__items [class*="quantity"] input {
  background: transparent !important;
  color: #222432 !important;
  border-color: rgba(34, 36, 50, 0.15) !important;
}
.cart-drawer__items [class*="remove"] {
  color: rgba(34, 36, 50, 0.45) !important;
  transition: color 0.25s ease !important;
}
.cart-drawer__items [class*="remove"]:hover {
  color: #B9A977 !important;
}

/* Cart drawer item titles — link color */
.cart-drawer__items a {
  color: #222432 !important;
  text-decoration: none !important;
}
.cart-drawer__items a:hover {
  color: #B9A977 !important;
}

/* Cart drawer variant/property text */
.cart-drawer__items [class*="variant"],
.cart-drawer__items [class*="property"],
.cart-drawer__items dd {
  color: rgba(34, 36, 50, 0.60) !important;
  font-family: 'DM Sans', sans-serif !important;
  font-size: 0.82rem !important;
}

.cart-drawer__summary {
  padding: 24px 28px 28px !important;
  border-top: 1px solid rgba(34, 36, 50, 0.08) !important;
  background: #FAFBF7 !important;
}
.cart-drawer__summary [class*="subtotal"],
.cart-drawer__summary [class*="total"] {
  font-family: 'Tiller', Georgia, serif !important;
  color: #222432 !important;
}
.cart-drawer__summary [class*="subtotal"] [class*="price"],
.cart-drawer__summary [class*="total"] [class*="price"] {
  color: #222432 !important;
  font-weight: 700 !important;
}
/* Tax/shipping note */
.cart-drawer__summary [class*="tax"],
.cart-drawer__summary small {
  color: rgba(34, 36, 50, 0.55) !important;
  font-family: 'DM Sans', sans-serif !important;
}
/* Continue Shopping link in drawer */
.cart-drawer__summary a[href*="collection"],
.cart-drawer a[href*="shop"],
.cart-drawer [class*="continue-shopping"],
.cart-drawer__content a:not([name="checkout"]) {
  color: #B9A977 !important;
  font-family: 'DM Sans', sans-serif !important;
  font-weight: 600 !important;
  text-decoration: underline !important;
  text-underline-offset: 3px !important;
}
.cart-drawer__summary button[type="submit"],
.cart-drawer__summary [name="checkout"],
.cart-drawer__summary [class*="checkout-button"] {
  background: #222432 !important;
  color: #F8FAEF !important;
  border: 0 !important;
  border-radius: 2px !important;
  padding: 18px 32px !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-weight: 700 !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  width: 100% !important;
  transition: background 0.3s ease, box-shadow 0.3s ease, transform 0.25s ease !important;
}
.cart-drawer__summary button[type="submit"]:hover,
.cart-drawer__summary [name="checkout"]:hover {
  background: #B9A977 !important;
  color: #222432 !important;
  box-shadow: 0 8px 24px rgba(34, 36, 50, 0.15) !important;
  transform: translateY(-1px) !important;
}

/* Empty state */
.cart-drawer--empty .cart-drawer__heading--empty {
  color: #222432 !important;
  text-align: center;
}
.cart-drawer--empty .cart-drawer__content {
  text-align: center;
  padding: 40px 28px !important;
  color: rgba(34, 36, 50, 0.65) !important;
}

/* Cart bubble in drawer heading */
.cart-drawer__heading .cart-bubble__background {
  background-color: rgba(34, 36, 50, 0.08) !important;
}
.cart-drawer__heading .cart-bubble__text {
  color: #222432 !important;
}

/* Border colors inside drawer */
.cart-drawer__dialog [class*="border"],
.cart-drawer__dialog .cart__summary-totals {
  border-color: rgba(34, 36, 50, 0.08) !important;
}

/* Free shipping progress bar inside the drawer */
.pv-cart-drawer-ship {
  padding: 20px 28px 16px;
  background: #F8FAEF;
  border-bottom: 1px solid rgba(34, 36, 50, 0.06);
}
.pv-cart-drawer-ship__msg {
  font-family: 'Tiller', Georgia, serif;
  font-size: 0.95rem;
  color: #222432;
  margin: 0 0 12px;
  text-align: center;
}
.pv-cart-drawer-ship__msg strong {
  color: #B9A977;
  font-weight: 700;
}
.pv-cart-drawer-ship__bar {
  position: relative;
  height: 5px;
  background: rgba(185, 169, 119, 0.15);
  border-radius: 999px;
  overflow: hidden;
}
.pv-cart-drawer-ship__bar-fill {
  position: absolute;
  inset: 0;
  width: 0%;
  background: linear-gradient(90deg, #B9A977 0%, #d4c08a 100%);
  border-radius: 999px;
  transition: width 0.8s cubic-bezier(0.16, 1, 0.3, 1);
  box-shadow: none;
}
.pv-cart-drawer-ship__bar-fill.is-full {
  background: linear-gradient(90deg, #B9A977 0%, #d4c08a 50%, #B9A977 100%);
  background-size: 200% 100%;
  animation: pv-drawer-ship-shimmer 3s ease-in-out infinite;
}
@keyframes pv-drawer-ship-shimmer {
  0%, 100% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
}

/* ─── 2. FOOTER ──────────────────────────────────────────── */
/* Footer-group is a single visual block. Each shopify-section inside
   it should NOT have its own background+padding+border or you get
   stacked horizontal lines and triple-padding between blocks. */
.shopify-section-group-footer-group {
  background: #0d0f18 !important;
  color: #F8FAEF !important;
  position: relative !important;
  padding: clamp(64px, 8vh, 110px) 0 clamp(28px, 4vh, 48px) !important;
}
/* Force EVERY descendant of the footer (ANY footer on ANY template,
   including /a/subscriptions and other account layouts that don't use
   .shopify-section-group-footer-group) to the dark blue. Horizon has
   multiple nested elements with their own color-scheme backgrounds
   (.section-background, .section, .footer-content, .footer-utilities,
   .footer-bottom, etc.) — one blanket rule is safer than chasing each
   specific selector. Form elements are excluded so newsletter input +
   submit button still render correctly. Also remove any border/shadow
   on the footer group so there's no visible "break" anywhere. */
.shopify-section-group-footer-group,
.shopify-section-group-footer-group *:not(input):not(textarea):not(button):not(select):not([class*="submit"]):not([class*="primary-button"]),
footer.shopify-section,
footer.shopify-section *:not(input):not(textarea):not(button):not(select):not([class*="submit"]):not([class*="primary-button"]),
.shopify-section[id*="footer"],
.shopify-section[id*="footer"] *:not(input):not(textarea):not(button):not(select):not([class*="submit"]):not([class*="primary-button"]),
.shopify-section-group-footer-group > footer,
.shopify-section-group-footer-group > footer * {
  background-color: #0d0f18 !important;
  box-shadow: none !important;
}
.shopify-section-group-footer-group,
.shopify-section-group-footer-group > *,
footer.shopify-section,
.shopify-section[id*="footer"] {
  border-top: none !important;
  border-bottom: none !important;
}

/* Global body background fallback — ensures any gap between content
   and the footer (or any wrapper Shopify inserts on customer account
   pages like /a/subscriptions) shows the same dark blue instead of a
   default lighter shade. Content sections have their own backgrounds
   so this only shows where nothing else paints. */
html, body {
  background-color: #0d0f18 !important;
}
/* Customer account pages (/a/subscriptions, /account, etc.) — force any
   wrapper div that Shopify injects below the main content area to the
   dark blue so there's no visible transition band.
   NOTE: removed `main + *` selectors — they were matching .pv-mobile-nav
   (which is a sibling of main in theme.liquid) and turning it from
   #222432 navy to #0d0f18 dark blue. */
.customer-account,
.shopify-account,
[class*="customer"][class*="subscription"],
body > footer,
body > .shopify-section-group-footer-group {
  background-color: #0d0f18 !important;
}
.shopify-section-group-footer-group .shopify-section[id*="footer"] {
  background: transparent !important;
  border: 0 !important;
  padding-block: 0 !important;
  position: relative;
}
.shopify-section-group-footer-group .shopify-section[id*="footer"] .section {
  background: transparent !important;
  border: 0 !important;
  padding-block-start: clamp(20px, 2.6vh, 36px) !important;
  padding-block-end: clamp(20px, 2.6vh, 36px) !important;
}
/* Single subtle gold rule at the very top of the footer-group */
.shopify-section-group-footer-group::after {
  content: '';
  position: absolute;
  left: 0; right: 0; top: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, rgba(185,169,119,0.55) 50%, transparent 100%);
  pointer-events: none;
}
/* Kill any per-section ::before pseudo-lines */
.shopify-section-group-footer-group .shopify-section[id*="footer"]::before,
.shopify-section-group-footer-group .shopify-section[id*="footer"] .section::before {
  content: none !important;
  display: none !important;
}
/* Grain overlay on footer */
.shopify-section[id*="footer"]::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.05;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}
/* Footer content layered above grain */
.shopify-section[id*="footer"] > * { position: relative; z-index: 1; }
/* Footer headings */
.shopify-section[id*="footer"] h2,
.shopify-section[id*="footer"] h3,
.shopify-section[id*="footer"] h4,
.shopify-section[id*="footer"] [class*="footer__title"],
.shopify-section[id*="footer"] [class*="footer-block__heading"] {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.32em !important;
  text-transform: uppercase !important;
  color: #B9A977 !important;
  margin-bottom: 20px !important;
}
/* Footer body text */
.shopify-section[id*="footer"] p,
.shopify-section[id*="footer"] li,
.shopify-section[id*="footer"] address {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 0.92rem !important;
  line-height: 1.75 !important;
  color: rgba(248,250,239,0.72) !important;
}
/* Footer links */
.shopify-section[id*="footer"] a {
  color: rgba(248,250,239,0.82) !important;
  text-decoration: none !important;
  transition: color 0.3s ease !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
}
.shopify-section[id*="footer"] a:hover {
  color: #B9A977 !important;
}
/* Footer logo / brand mark */
.shopify-section[id*="footer"] [class*="logo"] img,
.shopify-section[id*="footer"] .logo {
  filter: brightness(0) invert(0.94) !important;
  max-width: 220px !important;
}
/* Newsletter form in footer */
.shopify-section[id*="footer"] form input[type="email"] {
  background: transparent !important;
  border: 1px solid rgba(248,250,239,0.20) !important;
  border-radius: 1px !important;
  padding: 14px 18px !important;
  color: #F8FAEF !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 0.92rem !important;
}
.shopify-section[id*="footer"] form input[type="email"]::placeholder {
  color: rgba(248,250,239,0.45) !important;
}
.shopify-section[id*="footer"] form button[type="submit"],
.shopify-section[id*="footer"] form .button {
  background: #B9A977 !important;
  color: #222432 !important;
  border: 1px solid #B9A977 !important;
  border-radius: 1px !important;
  padding: 14px 28px !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  transition: background 0.3s ease, transform 0.3s ease !important;
}
.shopify-section[id*="footer"] form button[type="submit"]:hover {
  background: #c9b886 !important;
  transform: translateY(-2px) !important;
}
/* Social icons in footer — oval border removed per request */
.shopify-section[id*="footer"] [class*="social"] a,
.shopify-section[id*="footer"] [class*="social-icons"] a {
  width: 38px !important;
  height: 38px !important;
  border: none !important;
  border-radius: 0 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  margin-right: 12px !important;
  transition: color 0.3s ease, transform 0.3s ease !important;
}
.shopify-section[id*="footer"] [class*="social"] a:hover {
  color: #B9A977 !important;
  transform: translateY(-2px) !important;
}
/* Bottom copyright row — border-top removed to eliminate the visible
   "lighter break" in the footer. Spacing now relies on padding-top only. */
.shopify-section[id*="footer"] [class*="copyright"],
.shopify-section[id*="footer"] [class*="footer__bottom"],
.shopify-section[id*="footer"] [class*="footer-utilities"] {
  border-top: none !important;
  margin-top: clamp(40px, 6vh, 64px) !important;
  padding-top: clamp(24px, 4vh, 40px) !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.08em !important;
  color: rgba(248,250,239,0.50) !important;
}
.shopify-section[id*="footer"] [class*="payment"] svg,
.shopify-section[id*="footer"] [class*="payment-icons"] svg {
  filter: grayscale(1) brightness(2) opacity(0.55) !important;
  height: 22px !important;
  margin-right: 6px !important;
}

/* ─── 3. SECTION EDGE TRANSITIONS ────────────────────────── */
/* Add a 1px gold hairline between every section group on the home/page templates,
   and a soft 60px ombre bleed at the top of each section so contrasting cream/navy
   transitions feel intentional, not stacked. */
.shopify-section + .shopify-section {
  position: relative;
}
.shopify-section + .shopify-section::before {
  content: '';
  position: absolute;
  top: 0; left: 50%;
  transform: translateX(-50%);
  width: clamp(180px, 28vw, 320px);
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, rgba(185,169,119,0.55) 50%, transparent 100%);
  z-index: 5;
  pointer-events: none;
}
/* Suppress hairline between sections that share the same background (looks cleaner) */
.shopify-section[id*="header"] + .shopify-section::before,
.shopify-section + .shopify-section[id*="footer"]::before,
.shopify-section + .shopify-section[id*="header"]::before { display: none; }

/* ─── 4. PHOTOGRAPHY GRADE ───────────────────────────────── */
/* Apply a unified film grade to hero/editorial photos. EXCLUDES coffee
   carousel card images (.pv-cc__card-img) so per-product tile colors
   and bag mockups stay vibrant. */
.pv-img-hero__bg,
.pv-page-hero-bg,
.pv-ph-bg,
.pv-vc-img img,
.pv-sub__img img {
  filter: saturate(0.92) contrast(1.05) brightness(0.97) sepia(0.04) !important;
}
/* Hero/full-bleed images get a slightly warmer push */
.pv-img-hero__bg,
.pv-page-hero-bg,
[class*="page-hero"] img,
[class*="hero"] picture img {
  filter: saturate(0.88) contrast(1.06) brightness(0.96) sepia(0.06) !important;
}

/* ══════════════════════════════════════════════════════════
   AESTHETIC BATCH B — EDITORIAL FLOURISHES
   5. Pull quotes
   6. Drop caps
   7. Decorative section dividers
   9. Numbered figures
   13. Hairline rules
   20. Editorial title clusters
   ══════════════════════════════════════════════════════════ */

/* Pull quote — apply with class .pv-pullquote on any blockquote or div */
.pv-pullquote {
  font-family: 'Tiller', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.6rem, 3vw, 2.4rem);
  line-height: 1.35;
  color: #222432;
  text-align: center;
  max-width: 720px;
  margin: clamp(48px, 7vh, 96px) auto;
  padding: 0 clamp(24px, 4vw, 56px);
  position: relative;
}
.pv-pullquote::before,
.pv-pullquote::after {
  content: '';
  display: block;
  width: 48px;
  height: 1px;
  background: #B9A977;
  margin: 0 auto 24px;
}
.pv-pullquote::after {
  margin: 24px auto 0;
}
.pv-pullquote cite {
  display: block;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: #B9A977;
  font-style: normal;
  margin-top: 20px;
}

/* Drop caps — first letter on long-form .pv-editorial paragraphs */
.pv-editorial > p:first-of-type::first-letter,
[class*="provis-brand-story"] .pv-bs-body > p:first-of-type::first-letter,
[class*="provis-split-story"] [class*="body"] > p:first-of-type::first-letter,
[class*="provis-margin-note"] [class*="body"] > p:first-of-type::first-letter {
  font-family: 'Tiller', Georgia, serif;
  font-weight: 700;
  font-size: 3.6em;
  line-height: 1;
  float: left;
  margin: 0.12em 0.12em -0.05em 0;
  padding: 0;
  color: #B9A977;
  -webkit-initial-letter: 3;
  initial-letter: 3;
}

/* Decorative section ornaments — small centered marks between sections.
   Apply with <div class="pv-ornament"></div> in liquid templates. */
.pv-ornament {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin: clamp(48px, 7vh, 80px) auto;
  max-width: 280px;
}
.pv-ornament::before,
.pv-ornament::after {
  content: '';
  flex: 1;
  height: 1px;
  background: rgba(185,169,119,0.45);
}
.pv-ornament::before { background: linear-gradient(90deg, transparent, rgba(185,169,119,0.55)); }
.pv-ornament::after  { background: linear-gradient(90deg, rgba(185,169,119,0.55), transparent); }
.pv-ornament__mark {
  width: 12px;
  height: 12px;
  border: 1px solid #B9A977;
  transform: rotate(45deg);
  flex-shrink: 0;
}

/* Numbered figure caption */
.pv-figure {
  display: block;
  margin: 0;
}
.pv-figure img {
  display: block;
  width: 100%;
  height: auto;
}
.pv-figure figcaption {
  font-family: 'Tiller', Georgia, serif;
  font-style: italic;
  font-size: 0.82rem;
  color: rgba(34,36,50,0.62);
  margin-top: 14px;
  text-align: center;
  letter-spacing: 0.02em;
}
.pv-figure figcaption::before {
  content: 'Fig. ' attr(data-figure-num) ' — ';
  font-style: normal;
  font-weight: 600;
  color: #B9A977;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-size: 0.72rem;
  margin-right: 4px;
}

/* Editorial hairline rules — 1px gold hairline above any heading with .pv-rule-above */
.pv-rule-above {
  position: relative;
  padding-top: 28px;
}
.pv-rule-above::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 64px;
  height: 1px;
  background: #B9A977;
}

/* Editorial title cluster — for any heading wrapped in .pv-title-cluster */
.pv-title-cluster {
  text-align: center;
  margin-bottom: clamp(40px, 6vh, 64px);
}
.pv-title-cluster .eyebrow {
  display: inline-block;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: #B9A977;
  margin-bottom: 18px;
}
.pv-title-cluster .rule {
  display: block;
  width: 64px;
  height: 1px;
  background: #B9A977;
  margin: 0 auto 24px;
  opacity: 0.7;
}
.pv-title-cluster h1,
.pv-title-cluster h2 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700;
  font-size: clamp(2.4rem, 4.4vw, 3.8rem);
  line-height: 1.05;
  letter-spacing: -0.01em;
  margin: 0 0 18px;
  color: #222432;
}
.pv-title-cluster .subtitle {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif);
  font-size: 1.05rem;
  line-height: 1.75;
  color: rgba(34,36,50,0.72);
  max-width: 580px;
  margin: 0 auto;
}

/* ══════════════════════════════════════════════════════════
   AESTHETIC BATCH C — TEXTURE AND DEPTH
   10. Grain overlay everywhere
   11. Paper texture on cream
   12. Gradient navy
   19. Gold variation
   ══════════════════════════════════════════════════════════ */

/* Custom props for the gold family */
:root {
  --provis-gold-deep: #a89664;
  --provis-gold:      #B9A977;
  --provis-gold-soft: #d4c79a;
  --provis-navy-deep: #1c1e2a;
  --provis-navy:      #222432;
  --provis-navy-up:   #2d2f44;
}

/* Grain overlay — subtle, applied via ::after on any section that opts in
   via .pv-grain class, plus auto-applied to all provis sections */
section[class*="provis-"]::after,
.pv-grain::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  opacity: 0.045;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}
section[class*="provis-"] {
  position: relative;
}
/* Push real content above grain layer */
section[class*="provis-"] > *:not(::after) {
  position: relative;
  z-index: 1;
}

/* Paper texture on cream — subtle linen weave SVG */
section[class*="provis-"][style*="F8FAEF"],
[class*="bg-cream"],
[style*="background:#F8FAEF"],
[style*="background: #F8FAEF"] {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><defs><filter id='paper'><feTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='2' stitchTiles='stitch' seed='4'/><feColorMatrix values='0 0 0 0 0.13  0 0 0 0 0.14  0 0 0 0 0.20  0 0 0 0.035 0'/></filter></defs><rect width='100%25' height='100%25' filter='url(%23paper)'/></svg>"), #F8FAEF !important;
}

/* Gradient navy on dark sections */
[style*="background:#222432"],
[style*="background: #222432"],
[style*="background-color:#222432"],
[style*="background-color: #222432"] {
  background: linear-gradient(180deg, #2a2c40 0%, #222432 50%, #1c1e2a 100%) !important;
}

/* Gold variation — used for ornaments, button hovers, badge backgrounds */
.pv-gold-grad-bg {
  background: linear-gradient(135deg, var(--provis-gold-soft) 0%, var(--provis-gold) 50%, var(--provis-gold-deep) 100%);
}

/* ══════════════════════════════════════════════════════════
   AESTHETIC BATCH D — MOTION POLISH
   15. Page-load curtain
   17. Magnetic hover hint on primary buttons
   18. Image clip-path reveal
   ══════════════════════════════════════════════════════════ */

/* Page-load curtain — navy panel rises from bottom on first paint */
@keyframes pvCurtainRise {
  0%   { transform: translateY(0); }
  100% { transform: translateY(-100%); }
}
body::before {
  content: '';
  position: fixed;
  inset: 0;
  background: #1c1e2a;
  z-index: 9998;
  pointer-events: none;
  animation: pvCurtainRise 1.4s cubic-bezier(0.76, 0, 0.24, 1) 0.15s forwards;
}
@media (prefers-reduced-motion: reduce) {
  body::before { display: none; }
}
/* Hide curtain on subsequent navigation (only first paint) */
body.pv-loaded::before { display: none; }

/* Magnetic-hint scale on primary buttons (subtle, no JS needed for the hint) */
.pv-btn-gold,
.pv-cta-buttons a,
.pv-sub__btn,
.ct-submit,
.pv-sub-tier-btn {
  will-change: transform;
}

/* Image clip-path reveal — applied via [data-pv-reveal="clip-up"] */
[data-pv-reveal="clip-up"] {
  clip-path: inset(100% 0 0 0);
  transition: clip-path 1.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
}
[data-pv-reveal="clip-up"].pv-visible {
  clip-path: inset(0 0 0 0);
}

/* Smooth fade for everything that opts in */
[data-pv-reveal="fade-up"] {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.9s cubic-bezier(0.22, 1, 0.36, 1), transform 0.9s cubic-bezier(0.22, 1, 0.36, 1) !important;
}
[data-pv-reveal="fade-up"].pv-visible {
  opacity: 1;
  transform: translateY(0);
}
[data-pv-reveal="fade-up"][data-pv-delay="1"].pv-visible { transition-delay: 0.10s; }
[data-pv-reveal="fade-up"][data-pv-delay="2"].pv-visible { transition-delay: 0.20s; }
[data-pv-reveal="fade-up"][data-pv-delay="3"].pv-visible { transition-delay: 0.30s; }
[data-pv-reveal="fade-up"][data-pv-delay="4"].pv-visible { transition-delay: 0.40s; }
[data-pv-reveal="fade-up"][data-pv-delay="5"].pv-visible { transition-delay: 0.50s; }

/* ══════════════════════════════════════════════════════════
   GLOBAL TIGHTEN PASS — Reduce vertical rhythm site-wide
   Sections were clamp(80px, 11vh, 140px). Tightened ~30%.
   ══════════════════════════════════════════════════════════ */
/* v2026-04-08c design audit bump forcecachebust — Target the INNER <section> Provis blocks only — never
   the outer .shopify-section wrapper (which inherits the page background
   and would otherwise leak cream above full-bleed dark heroes). */
section[class*="provis-"]:not(.shopify-section):not([class*="image-hero"]):not([class*="provis-hero"]):not([class*="page-hero"]):not([class*="freshness"]) {
  padding-top: clamp(56px, 7.5vh, 96px) !important;
  padding-bottom: clamp(56px, 7.5vh, 96px) !important;
}
/* And explicitly flatten the wrapper so no stray vertical padding bleeds
   through between the header and a full-bleed dark hero. */
.shopify-section[class*="provis-"] {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}
/* Carousel inner padding too */
.pv-cc {
  padding: clamp(56px, 7.5vh, 96px) 0 !important;
}
/* Subscribe-cta two-column padding */
.pv-sub__content {
  padding: clamp(56px, 7vh, 88px) clamp(40px, 6vw, 80px) !important;
}
/* CTA banner inner */
[class*="pv-cta-banner"] [class*="pv-cta-inner"] {
  padding: clamp(64px, 9vh, 100px) clamp(24px, 5vw, 48px) !important;
}
/* Trust strip — keep slim */
[class*="pv-freshness"] {
  padding: clamp(48px, 6vh, 76px) 24px !important;
}
/* Visit cafe */
.pv-vc-{{ section.id }},
[class*="pv-vc-"] {
  padding: clamp(64px, 8vh, 100px) clamp(24px, 4vw, 56px) !important;
}
/* Why provis split-story */
[class*="provis-split-story"] {
  padding: clamp(64px, 8vh, 100px) 0 !important;
}

/* ══════════════════════════════════════════════════════════
   DYNAMIC SCROLL — gentle scroll-snap on the home page so each
   section locks into view as you scroll. Uses proximity (not
   mandatory) so scrolling never fights the user.
   ══════════════════════════════════════════════════════════ */
@media (min-width: 900px) and (prefers-reduced-motion: no-preference) {
  html { scroll-snap-type: y proximity; }
  body > main > section,
  #MainContent > section,
  .shopify-section[id*="image_hero"],
  .shopify-section[id*="trust_strip"],
  .shopify-section[id*="coffee_lineup"],
  .shopify-section[id*="why_provis"],
  .shopify-section[id*="reserve_spotlight"],
  .shopify-section[id*="subscribe_save"],
  .shopify-section[id*="visit_cafe"],
  .shopify-section[id*="hero_video"] {
    scroll-snap-align: start;
    scroll-snap-stop: normal;
  }
}

/* ══════════════════════════════════════════════════════════
   FOOTER TIGHTEN — Override the heavy padding from Batch A.
   The footer is composed of 3 sections; only the first should
   carry generous top padding, the rest tight, and the bottom
   sits flush.
   ══════════════════════════════════════════════════════════ */
.shopify-section-group-footer-group,
.shopify-section[id*="footer"] {
  padding: 0 !important;
  background: #1c1e2a !important;
}
/* The first footer section (newsletter) gets the gentle top padding */
.shopify-section-group-footer-group > .shopify-section:first-child,
.shopify-section[id*="footer"]:first-of-type {
  padding-top: clamp(48px, 6vh, 80px) !important;
  padding-bottom: clamp(20px, 3vh, 32px) !important;
}
/* Middle footer sections — tight */
.shopify-section-group-footer-group > .shopify-section:not(:first-child):not(:last-child),
.shopify-section[id*="footer"]:not(:first-of-type):not(:last-of-type) {
  padding: clamp(20px, 3vh, 32px) 0 !important;
}
/* Last footer section (utilities/copyright) — slim bottom */
.shopify-section-group-footer-group > .shopify-section:last-child,
.shopify-section[id*="footer"]:last-of-type {
  padding-top: clamp(20px, 3vh, 32px) !important;
  padding-bottom: clamp(24px, 3.5vh, 40px) !important;
}

/* Newsletter signup container — kill the bloat. The email-signup
   block in Horizon has its own internal padding wrapper that we need
   to neutralize. */
.shopify-section[id*="footer"] [class*="email-signup"],
.shopify-section[id*="footer"] email-signup,
.shopify-section[id*="footer"] form[class*="email"] {
  padding: 0 !important;
  margin: 0 !important;
  background: transparent !important;
  border: none !important;
}
.shopify-section[id*="footer"] [class*="email-signup__input-wrapper"],
.shopify-section[id*="footer"] [class*="email-signup__field"],
.shopify-section[id*="footer"] [class*="newsletter__form"] {
  background: transparent !important;
  border: 1px solid rgba(248,250,239,0.20) !important;
  border-radius: 999px !important;
  padding: 4px 4px 4px 24px !important;
  display: flex !important;
  align-items: center !important;
  gap: 12px !important;
  max-width: 520px !important;
  height: 56px !important;
}
.shopify-section[id*="footer"] [class*="email-signup__input-wrapper"] input[type="email"],
.shopify-section[id*="footer"] [class*="newsletter__form"] input[type="email"] {
  border: none !important;
  background: transparent !important;
  flex: 1 !important;
  height: 100% !important;
  padding: 0 !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  color: #F8FAEF !important;
  outline: none !important;
}
.shopify-section[id*="footer"] [class*="email-signup__input-wrapper"] button,
.shopify-section[id*="footer"] [class*="newsletter__form"] button {
  width: 44px !important;
  height: 44px !important;
  border-radius: 999px !important;
  border: none !important;
  background: #B9A977 !important;
  color: #222432 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex-shrink: 0 !important;
  cursor: pointer !important;
  transition: background 0.3s ease, transform 0.3s ease !important;
}
.shopify-section[id*="footer"] [class*="email-signup__input-wrapper"] button:hover {
  background: #c9b886 !important;
  transform: translateY(-1px) !important;
}

/* Group containing the heading + body copy left of the input — tighten */
.shopify-section[id*="footer"] [class*="group"] h2,
.shopify-section[id*="footer"] [class*="group"] h3 {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.32em !important;
  text-transform: uppercase !important;
  color: #B9A977 !important;
  margin: 0 0 12px !important;
}
.shopify-section[id*="footer"] [class*="group"] p {
  font-size: 0.95rem !important;
  line-height: 1.6 !important;
  color: rgba(248,250,239,0.78) !important;
  margin: 0 !important;
  max-width: 480px !important;
}

/* Footer link columns — tighten the row of menus */
.shopify-section[id*="footer_links"],
.shopify-section[id*="footer-links"] {
  padding: clamp(32px, 5vh, 56px) 0 !important;
}
.shopify-section[id*="footer_links"] [class*="menu"] h2,
.shopify-section[id*="footer_links"] [class*="menu"] h6 {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.32em !important;
  text-transform: uppercase !important;
  color: #B9A977 !important;
  margin-bottom: 16px !important;
}

/* Reduce gaps between the 3 footer sections too — they sit on the same dark bg */
.shopify-section[id*="footer"] + .shopify-section[id*="footer"]::before {
  display: none !important;
}

/* ══════════════════════════════════════════════════════════
   GLOBAL TYPE + BUTTON SCALE DOWN
   Reduce overall sizing ~18% — text and buttons were oversized.
   ══════════════════════════════════════════════════════════ */

/* Display headings (hero, page titles) */
.pv-img-hero__display {
  font-size: clamp(2.0rem, 4.6vw, 4.0rem) !important;
}
.pv-img-hero__tagline {
  font-size: clamp(0.92rem, 1.2vw, 1.15rem) !important;
}
.pv-img-hero__logo {
  width: clamp(100px, 12vw, 200px) !important;
}

/* Section H2 headings (carousels, page heroes, cta-banner, subscribe-cta, etc) */
.pv-cc__heading,
[class*="pv-page-hero"] h1,
[class*="pv-cta-banner"] h2,
[class*="pv-sub__title"],
[class*="pv-vc-h2"],
[class*="pv-ws-form"] h2,
[class*="pv-now"] h2,
.pv-title-cluster h1,
.pv-title-cluster h2 {
  font-size: clamp(1.9rem, 3.4vw, 3.0rem) !important;
}

/* Carousel eyebrow + section eyebrows already at 11px — leave alone */
.pv-cc__eyebrow {
  font-size: 11px !important;
  letter-spacing: 0.32em !important;
}

/* Carousel description / body text */
.pv-cc__desc,
[class*="pv-page-hero"] p,
[class*="pv-cta-body"],
.pv-sub__body,
.pv-vc-body,
[class*="pv-ws-form-desc"] {
  font-size: clamp(0.92rem, 1vw, 1.0rem) !important;
  line-height: 1.65 !important;
}

/* Coffee card name + price */
.pv-cc__card-name {
  font-size: 1.15rem !important;
}
.pv-cc__card-price {
  font-size: 0.92rem !important;
}
.pv-cc__card-notes {
  font-size: 0.82rem !important;
}
.pv-cc__card-origin {
  font-size: 0.62rem !important;
}
.pv-cc__card-badge {
  font-size: 0.6rem !important;
  padding: 6px 12px !important;
}

/* All-tile shop-all */
.pv-cc__all-text {
  font-size: 1.25rem !important;
}
.pv-cc__all-icon {
  width: 40px !important;
  height: 40px !important;
  font-size: 17px !important;
  margin-bottom: 16px !important;
}
.pv-cc__all-btn {
  font-size: 0.7rem !important;
}

/* Carousel arrows */
.pv-cc__arrow {
  width: 44px !important;
  height: 44px !important;
  font-size: 18px !important;
}

/* ── BUTTONS — globally tighter ── */
.pv-btn-gold,
.pv-cta-buttons a,
.pv-sub__btn,
.ct-submit,
.pv-sub-tier-btn,
.pv-img-hero__btn,
.pv-ws-form-buttons a,
[class*="add-to-cart-button"],
button[name="add"],
.shopify-section[id*="cart-section"] [name="checkout"],
.shopify-section[id*="main-404"] .button {
  font-size: 10px !important;
  letter-spacing: 0.20em !important;
  padding: 14px 28px !important;
  min-height: 44px !important;
}

/* Hero buttons specifically */
.pv-img-hero__btn {
  padding: 13px 26px !important;
  font-size: clamp(10px, 0.9vw, 12px) !important;
}

/* Eyebrows — keep small but consistent */
[class*="eyebrow"]:not(.pv-cc__eyebrow) {
  font-size: 10px !important;
  letter-spacing: 0.30em !important;
}
.pv-img-hero__eyebrow-text {
  font-size: 10px !important;
}

/* Hero coming-soon eyebrow rules a bit shorter */
.pv-img-hero__eyebrow-rule {
  width: 28px !important;
}

/* ══════════════════════════════════════════════════════════
   FINAL SIZING CONSOLIDATION
   Bring native Shopify page overrides down to the same scale
   as the rest of the site. Earlier batches left these at larger
   sizes than the newer Provis section scale-down.
   ══════════════════════════════════════════════════════════ */

/* Native Shopify h1s (product page, cart, 404, collection) — match Provis scale */
.shopify-section[id*="main"] .product-title h1,
.shopify-section[id*="main"] .product-title,
.shopify-section[id*="main"] h1.product__title,
.shopify-section[id*="main"] h1,
.shopify-section[id*="cart-section"] .cart-page-title h1,
.shopify-section[id*="cart-section"] h1,
.shopify-section[id*="cart-section"] .cart__title,
.shopify-section[id*="main-404"] h1,
.shopify-section[id*="404"] h1,
.shopify-section[id*="main-collection"] h1,
.shopify-section[id*="main-collection"] [class*="collection-hero__title"] {
  font-size: clamp(1.9rem, 3.4vw, 3.0rem) !important;
  line-height: 1.06 !important;
}

/* Product price */
.shopify-section[id*="main"] .product-price,
.shopify-section[id*="main"] .price,
.shopify-section[id*="main"] [class*="price__regular"],
.shopify-section[id*="main"] .price-item--regular {
  font-size: 1.25rem !important;
}

/* Variant picker buttons + labels */
.shopify-section[id*="main"] variant-picker .variant-picker__option-values label,
.shopify-section[id*="main"] .variant-picker__option-values label,
.shopify-section[id*="main"] .product-form__input label,
.shopify-section[id*="main"] [class*="variant-picker"] label {
  font-size: 10px !important;
  letter-spacing: 0.20em !important;
  padding: 11px 18px !important;
}

/* All buttons site-wide — locked to 14px × 28px / 44px min-height */
.shopify-section[id*="main"] .add-to-cart-button,
.shopify-section[id*="main"] button[name="add"],
.shopify-section[id*="main"] .product-form__submit,
.shopify-section[id*="main"] .button.add-to-cart-button,
.shopify-section[id*="cart-section"] [name="checkout"],
.shopify-section[id*="cart-section"] .cart__checkout-button,
.shopify-section[id*="cart-section"] button[type="submit"].button,
.shopify-section[id*="cart-section"] [class*="checkout"].button,
.shopify-section[id*="main-404"] .button,
.shopify-section[id*="main-404"] a.button,
.shopify-section[id*="404"] .button {
  font-size: 10px !important;
  letter-spacing: 0.20em !important;
  padding: 14px 28px !important;
  min-height: 44px !important;
}

/* Native Shopify product card titles + prices on cart upsell, recs, collection */
.shopify-section[id*="recommendations"] [class*="product-card"] [class*="product-title"],
.shopify-section[id*="recommendations"] [class*="product-card"] a,
.shopify-section[id*="main"] [class*="product-card"] [class*="product-title"],
.shopify-section[id*="main"] [class*="product-card"] a[class*="title"],
.shopify-section[id*="main-collection"] [class*="product-card"] a,
.shopify-section[id*="cart-section"] .cart-product__title,
.shopify-section[id*="cart-section"] [class*="cart-product__title"],
.shopify-section[id*="cart-section"] .cart-product a {
  font-size: 1.0rem !important;
}
.shopify-section[id*="recommendations"] [class*="product-card"] [class*="price"],
.shopify-section[id*="main"] [class*="product-card"] [class*="price"],
.shopify-section[id*="main-collection"] [class*="product-card"] [class*="price"],
.shopify-section[id*="cart-section"] .cart-product__price,
.shopify-section[id*="cart-section"] [class*="cart-product"] [class*="price"] {
  font-size: 0.92rem !important;
}

/* Cart, collection, 404, product-list section padding — match Provis tighten */
.shopify-section[id*="cart-section"] {
  padding: clamp(56px, 7.5vh, 96px) 0 !important;
}
.shopify-section[id*="main-404"],
.shopify-section[id*="404"] {
  padding: 0 !important;
}
.shopify-section[id*="recommendations"] .product-recommendations,
.shopify-section[id*="recommendations"] product-recommendations,
.shopify-section[id*="product_list"],
.shopify-section[id*="product-list"] {
  padding: clamp(56px, 7.5vh, 96px) 0 !important;
}
.shopify-section[id*="recommendations"] h3,
.shopify-section[id*="recommendations"] [class*="recommendations__heading"],
.shopify-section[id*="product_list"] h3 {
  font-size: clamp(1.4rem, 2.4vw, 1.9rem) !important;
}

/* Filter/sort buttons on collection */
.shopify-section[id*="main"] [class*="facets"] button,
.shopify-section[id*="main"] [class*="facets"] label,
.shopify-section[id*="main"] [class*="filter"] button,
.shopify-section[id*="main"] [class*="sort"] button,
.shopify-section[id*="main"] [class*="sort"] select {
  font-size: 10px !important;
  letter-spacing: 0.20em !important;
  padding: 10px 16px !important;
}

/* Cart summary card */
.shopify-section[id*="cart-section"] [class*="cart-summary"] {
  padding: clamp(24px, 3vw, 36px) !important;
}

/* Header nav links — also bring to 10px to match */
.header__menu a,
.header-menu a,
.header__navigation-bar-row a,
.header-row a:not([class*="logo"]):not([class*="cart"]):not([class*="search"]),
[class*="header-menu"] a {
  font-size: 10px !important;
  letter-spacing: 0.20em !important;
}

/* Footer eyebrow headings — already 11px, bring to 10 */
.shopify-section[id*="footer"] h2,
.shopify-section[id*="footer"] h3,
.shopify-section[id*="footer"] h4,
.shopify-section[id*="footer"] [class*="footer__title"],
.shopify-section[id*="footer"] [class*="footer-block__heading"] {
  font-size: 10px !important;
  letter-spacing: 0.30em !important;
}
.shopify-section[id*="footer"] form button[type="submit"],
.shopify-section[id*="footer"] form .button {
  font-size: 10px !important;
  letter-spacing: 0.20em !important;
  padding: 12px 24px !important;
}

/* ══════════════════════════════════════════════════════════
   AUDIT FIXES — Tier 1+2
   ══════════════════════════════════════════════════════════ */

/* Mobile: keep "Add to cart" text visible on small screens.
   Horizon's default hides text below 749px, leaving icon-only.
   Provis voice: text always wins. */
@media (max-width: 749px) {
  .add-to-cart-text__content,
  .sticky-add-to-cart__bar .add-to-cart-text__content {
    display: inline !important;
  }
}

/* Coffee carousel — make card price always visible (no hover required).
   Position it above the bottom info gradient as a small Tiller serif tag. */
.pv-cc__card-price-static {
  position: absolute;
  top: 18px;
  right: 18px;
  z-index: 4;
  font-family: 'Tiller', Georgia, serif;
  font-weight: 700;
  font-size: 0.85rem;
  color: #F8FAEF;
  background: rgba(34,36,50,0.78);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  padding: 6px 12px;
  border-radius: 3px;
  letter-spacing: 0.02em;
  text-shadow: 0 1px 4px rgba(0,0,0,0.5);
}

/* If a flag exists (New / Best Seller), the flag stays top-right and the
   price drops below it so they don't collide */
.pv-cc__card:has(.pv-cc__card-flag) .pv-cc__card-price-static {
  top: 56px;
}

/* Hide the in-info-strip price duplicate when the static one renders */
.pv-cc__card:has(.pv-cc__card-price-static) .pv-cc__card-info .pv-cc__card-price {
  display: none;
}

/* ══════════════════════════════════════════════════════════
   POLISH PASS — 2026-04-06
   Senior product designer pass. Additive only. Aim: elevate
   from "polished" to "world class" within the locked structure.
   ══════════════════════════════════════════════════════════ */

/* ── 1. CINEMATIC HERO BOTTOM BLEED ─────────────────────────
   The image-hero currently butts hard against the carousel
   (cream). Add a soft, deliberate ombre at the bottom of the
   hero so the transition into the carousel feels intentional
   instead of stacked. */
.pv-img-hero::before {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 28%;
  background: linear-gradient(
    to bottom,
    rgba(34,36,50,0) 0%,
    rgba(34,36,50,0.25) 55%,
    rgba(34,36,50,0.55) 100%
  );
  z-index: 1;
  pointer-events: none;
}

/* ── 2. HERO SCROLL CUE — gentler, slower, more confident ─── */
.pv-img-hero__scroll {
  gap: 12px !important;
}
.pv-img-hero__scroll-text {
  opacity: 0.62;
  transition: opacity 0.5s ease, transform 0.6s var(--ease-out);
}
.pv-img-hero:hover .pv-img-hero__scroll-text {
  opacity: 0.95;
  transform: translateY(-2px);
}
@keyframes pvBounceSoft {
  0%, 100% { transform: rotate(45deg) translate(0, 0); }
  50%      { transform: rotate(45deg) translate(3px, 3px); }
}
.pv-img-hero__scroll-arrow {
  animation: pvBounceSoft 3.2s var(--ease-out) infinite 2.8s !important;
}

/* ── 3. PRIMARY HERO BUTTON — softer lift + shadow on hover ─ */
.pv-img-hero__btn {
  border-radius: 2px !important;
  transition: background 0.4s var(--ease-out),
              color 0.4s var(--ease-out),
              border-color 0.4s var(--ease-out),
              box-shadow 0.5s var(--ease-out),
              transform 0.5s var(--ease-out) !important;
  will-change: transform;
}
.pv-img-hero__btn--primary:hover {
  box-shadow: 0 14px 38px rgba(185,169,119,0.32),
              inset 0 0 0 1px rgba(185,169,119,0.95) !important;
  transform: translateY(-2px);
}
.pv-img-hero__btn--secondary:hover {
  box-shadow: 0 14px 34px rgba(0,0,0,0.28) !important;
  transform: translateY(-2px);
}
.pv-img-hero__btn:active {
  transform: translateY(0) !important;
  transition-duration: 0.12s !important;
}

/* ── 4. CAROUSEL CARDS — refined depth, easier easing, sharper
   focus state, and a hairline gold border on hover so the card
   feels like it's "lighting up" rather than just rising. ─── */
/* ── Carousel card hover overrides REMOVED ──
   The new gallery card style (in sections/provis-coffee-carousel.liquid)
   handles its own card hover, image scale+rotate, and info animations.
   The old !important overrides here were fighting the gallery card and
   killing the per-product tile background colors + rotate animation. */

/* ── 7. CAROUSEL HEADER — tighten breathing, add a subtle
   serif italic tone to the description and longer hairline. ── */
.pv-cc__line {
  height: 1px !important;
  width: 56px !important;
  opacity: 0 !important;
}
.pv-cc--visible .pv-cc__line {
  opacity: 0.55 !important;
}
.pv-cc__desc {
  font-style: italic;
}

/* ── 8. CAROUSEL ARROWS — softer, paper-feel default; gold
   on hover. Removes the heavy 60px solid pill. ─────────── */
.pv-cc__arrow {
  background: transparent !important;
  color: var(--pv-cc-text) !important;
  border: 1px solid var(--pv-cc-text)28 !important;
  box-shadow: none !important;
  transition: background 0.4s var(--ease-out),
              border-color 0.4s var(--ease-out),
              color 0.4s var(--ease-out),
              transform 0.4s var(--ease-out),
              box-shadow 0.5s var(--ease-out) !important;
}
.pv-cc__arrow:hover {
  background: var(--pv-cc-accent) !important;
  border-color: var(--pv-cc-accent) !important;
  color: var(--pv-cc-bg) !important;
  transform: translateY(-2px) scale(1.04) !important;
  box-shadow: 0 12px 28px rgba(34,36,50,0.18) !important;
}

/* ── 9. SHOP-ALL TILE — feels more like a "card" sibling now;
   swaps the heavy 2px border for a 1px hairline + paper fill. */
.pv-cc__all {
  border: 1px solid var(--pv-cc-accent)55 !important;
  background: transparent !important;
  transition: border-color 0.5s var(--ease-out),
              transform 0.5s cubic-bezier(0.16, 1, 0.3, 1),
              box-shadow 0.6s var(--ease-out) !important;
}
.pv-cc__all:hover {
  border-color: var(--pv-cc-accent) !important;
  transform: translateY(-10px) !important;
  box-shadow: 0 24px 60px rgba(34,36,50,0.14) !important;
}
.pv-cc__all-icon {
  border-width: 1px !important;
  transition: transform 0.5s var(--ease-out),
              background 0.5s var(--ease-out),
              color 0.5s var(--ease-out) !important;
}
.pv-cc__all:hover .pv-cc__all-icon {
  background: var(--pv-cc-accent) !important;
  color: var(--pv-cc-bg) !important;
  transform: scale(1.12) rotate(-3deg) !important;
}

/* ── 10. SUBSCRIBE-CTA — image gets a longer pull and a soft
   inside vignette for editorial depth. The benefit checks
   become more refined. ─────────────────────────────────── */
.pv-sub__img::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(ellipse 75% 60% at 50% 50%, transparent 0%, rgba(34,36,50,0.18) 100%),
    linear-gradient(90deg, rgba(248,250,239,0.10) 0%, transparent 18%);
  z-index: 2;
}
.pv-sub__img img {
  transition: transform 12s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
}
.pv-sub__benefits li::before {
  box-shadow: 0 4px 12px rgba(185,169,119,0.30);
  transition: transform 0.4s var(--ease-out), box-shadow 0.4s var(--ease-out);
}
.pv-sub__benefits li:hover::before {
  transform: scale(1.08);
  box-shadow: 0 6px 16px rgba(185,169,119,0.45);
}
.pv-sub__btn {
  border-radius: 2px !important;
  transition: opacity 0.6s ease 0.55s,
              transform 0.5s var(--ease-out),
              background 0.4s var(--ease-out),
              color 0.4s var(--ease-out),
              border-color 0.4s var(--ease-out),
              box-shadow 0.5s var(--ease-out) !important;
}
.pv-sub__btn:hover {
  box-shadow: 0 14px 34px rgba(185,169,119,0.30) !important;
  transform: translateY(-2px) !important;
}

/* ── 11. GLOBAL BUTTON POLISH — tactile press states + softer
   easing on every Provis button so feedback feels consistent. */
.pv-btn,
.pv-btn-gold,
.pv-cta-buttons a,
.pv-sub__btn,
.ct-submit,
.pv-sub-tier-btn,
.pv-img-hero__btn,
.pv-ws-form-buttons a {
  transition: background 0.4s var(--ease-out),
              color 0.4s var(--ease-out),
              border-color 0.4s var(--ease-out),
              box-shadow 0.5s var(--ease-out),
              transform 0.45s var(--ease-out) !important;
}
.pv-btn:active,
.pv-btn-gold:active,
.pv-cta-buttons a:active,
.pv-sub__btn:active,
.pv-sub-tier-btn:active,
.pv-img-hero__btn:active,
.pv-ws-form-buttons a:active {
  transform: translateY(0) scale(0.985) !important;
  transition-duration: 0.12s !important;
}

/* ── 12. NAV UNDERLINE — a touch finer + more confident easing */
.header__menu a::after,
.header-menu a::after,
[class*="header-menu"] a::after {
  height: 1px !important;
  background: linear-gradient(90deg, transparent 0%, #B9A977 18%, #B9A977 82%, transparent 100%) !important;
  transition: transform 0.55s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

/* ── 13. FOCUS STATES — visible, on-brand, never default blue. */
a:focus-visible,
button:focus-visible,
.pv-cc__card:focus-visible,
.pv-cc__all:focus-visible,
.pv-img-hero__btn:focus-visible,
.pv-sub__btn:focus-visible {
  outline: none !important;
  box-shadow:
    0 0 0 2px var(--provis-paper),
    0 0 0 4px var(--provis-oxblood) !important;
  border-radius: 2px;
}

/* ── 14. FORM INPUT POLISH — refined focus + animated underline */
.pv-input,
.pv-textarea,
.pv-select,
input[type="email"]:not([class*="email-signup"] input),
input[type="text"]:not([class*="email-signup"] input) {
  transition: border-color 0.4s var(--ease-out),
              box-shadow 0.4s var(--ease-out) !important;
}

/* ── 15. SECTION EDGE HAIRLINE — slightly more confident,
   slower fade. Pull it inward so it doesn't sit on a hard edge. */
.shopify-section + .shopify-section::before {
  width: clamp(120px, 22vw, 260px) !important;
  height: 1px !important;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(185,169,119,0.45) 35%,
    rgba(185,169,119,0.65) 50%,
    rgba(185,169,119,0.45) 65%,
    transparent 100%) !important;
  top: 0 !important;
}
/* Suppress the hairline above the image-hero (it sits beneath nav) */
.shopify-section:has(.pv-img-hero)::before { display: none !important; }

/* ── 16. CARD REVEAL STAGGER — extend to 8 cards (carousel can
   render up to 8). The current rule only goes to 6. ───── */
.pv-cc--visible .pv-cc__card:nth-child(7) { transition-delay: 0.75s; }
.pv-cc--visible .pv-cc__card:nth-child(8) { transition-delay: 0.85s; }

/* ── 17. SCROLL-SNAP REFINEMENT — proximity is OK but on
   shorter sections it can fight scroll. Disable on touch. */
@media (hover: none) and (pointer: coarse) {
  html { scroll-snap-type: none !important; }
}

/* ── 18. CURSOR HINT — pointer on every interactive card  */
.pv-cc__card,
.pv-cc__all,
.pv-sub__btn,
.pv-img-hero__btn { cursor: pointer; }

/* ── 19. REDUCED-MOTION SAFETY — make sure cards still appear */
@media (prefers-reduced-motion: reduce) {
  .pv-cc__card,
  .pv-cc__all,
  .pv-sub__title,
  .pv-sub__body,
  .pv-sub__benefits,
  .pv-sub__btn,
  .pv-cc__eyebrow,
  .pv-cc__heading,
  .pv-cc__desc {
    opacity: 1 !important;
    transform: none !important;
  }
  .pv-img-hero__bg { animation: none !important; }
}


/* ==========================================================================
   SOURCE: provis-polish-system.css
   ========================================================================== */

/* =============================================================
   PROVIS — CROSS-CUTTING POLISH SYSTEM
   assets/provis-polish-system.css
   -------------------------------------------------------------
   A design-system polish layer that sits ON TOP of
   provis-brand.css. It introduces refined tokens, utilities,
   and micro-interactions without touching markup, copy, or
   section schema. Everything here is opt-in via class, or
   applies through low-specificity, non-destructive selectors.

   Tokens namespace: --pv-*  (additive; existing --provis-*
   tokens from provis-brand.css remain authoritative)

   Brand:
     Tiller serif  — headings
     DM Sans       — body
     #222432 navy  — ink
     #F8FAEF cream — paper
     #B9A977 gold  — accent
============================================================= */


/* =============================================================
   1. TOKENS — scale, motion, elevation, tonal variations
============================================================= */
:root {
  /* ---------- Modular type scale (1.250 — minor third) ----- */
  /* Base 16px body. Scale steps tuned for editorial coffee site. */
  --pv-fs-0:   0.75rem;    /* 12px — micro / legal */
  --pv-fs-1:   0.8125rem;  /* 13px — eyebrow */
  --pv-fs-2:   0.9375rem;  /* 15px — caption */
  --pv-fs-3:   1rem;       /* 16px — body */
  --pv-fs-4:   1.125rem;   /* 18px — lede */
  --pv-fs-5:   1.375rem;   /* 22px — h5 */
  --pv-fs-6:   1.6875rem;  /* 27px — h4 */
  --pv-fs-7:   2.0625rem;  /* 33px — h3 */
  --pv-fs-8:   2.5625rem;  /* 41px — h2 */
  --pv-fs-9:   3.1875rem;  /* 51px — h1 */
  --pv-fs-10:  4rem;       /* 64px — display sm */
  --pv-fs-11:  5rem;       /* 80px — display md */
  --pv-fs-12:  clamp(3.5rem, 8vw, 7rem); /* display lg fluid */

  /* ---------- Line-heights (tight for display, loose for body) */
  --pv-lh-display:   1.02;
  --pv-lh-heading:   1.12;
  --pv-lh-subhead:   1.28;
  --pv-lh-body:      1.68;
  --pv-lh-body-long: 1.75;
  --pv-lh-tight:     1.0;

  /* ---------- Letter-spacing per level ---------------------- */
  --pv-ls-display:   -0.012em;
  --pv-ls-h1:        -0.008em;
  --pv-ls-h2:        0em;
  --pv-ls-h3:         0.004em;
  --pv-ls-h4:         0.008em;
  --pv-ls-eyebrow:    0.32em;
  --pv-ls-caps:       0.12em;

  /* ---------- Measure --------------------------------------- */
  --pv-measure:      65ch;
  --pv-measure-tight: 52ch;
  --pv-measure-wide:  78ch;

  /* ---------- Tonal palette — gold ------------------------- */
  --pv-gold-deepest: #8f7e4f;
  --pv-gold-deep:    #a89664;
  --pv-gold:         #b9a977;
  --pv-gold-soft:    #d4c79a;
  --pv-gold-mist:    #e8dfbf;
  --pv-gold-ghost:   rgba(185, 169, 119, 0.14);
  --pv-gold-line:    rgba(185, 169, 119, 0.42);

  /* ---------- Tonal palette — navy ------------------------- */
  --pv-navy-deepest: #14151d;
  --pv-navy-deep:    #1c1e2a;
  --pv-navy:         #222432;
  --pv-navy-2:       #2d2f44;
  --pv-navy-3:       #3a3c55;
  --pv-navy-ghost:   rgba(34, 36, 50, 0.08);
  --pv-navy-line:    rgba(34, 36, 50, 0.14);

  /* ---------- Tonal palette — cream / paper ---------------- */
  --pv-cream:        #f8faef;
  --pv-cream-2:      #f2f4ec;
  --pv-paper:        #eef1ea;
  --pv-paper-2:      #e6e9df;
  --pv-paper-rule:   rgba(34, 36, 50, 0.12);

  /* ---------- Elevation (4 levels) ------------------------- */
  --pv-shadow-sm:
    0 1px 2px rgba(20, 21, 29, 0.04),
    0 1px 3px rgba(20, 21, 29, 0.06);
  --pv-shadow-md:
    0 4px 10px rgba(20, 21, 29, 0.05),
    0 8px 20px rgba(20, 21, 29, 0.07);
  --pv-shadow-lg:
    0 10px 24px rgba(20, 21, 29, 0.08),
    0 20px 48px rgba(20, 21, 29, 0.10);
  --pv-shadow-xl:
    0 18px 44px rgba(20, 21, 29, 0.10),
    0 40px 90px rgba(20, 21, 29, 0.14);
  --pv-shadow-inset:
    inset 0 1px 0 rgba(248, 250, 239, 0.06),
    inset 0 -1px 0 rgba(20, 21, 29, 0.08);

  /* ---------- Border-radius scale --------------------------- */
  --pv-radius-sharp: 1px;
  --pv-radius-soft:  3px;
  --pv-radius-card:  6px;
  --pv-radius-lg:    12px;
  --pv-radius-pill:  999px;

  /* ---------- Easing curves --------------------------------- */
  --pv-ease-out:    cubic-bezier(0.22, 1, 0.36, 1);
  --pv-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --pv-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
  --pv-ease-soft:   cubic-bezier(0.4, 0.0, 0.2, 1);
  --pv-ease-editorial: cubic-bezier(0.2, 0.8, 0.2, 1);

  /* ---------- Duration scale -------------------------------- */
  --pv-t-fast:       160ms;
  --pv-t-base:       280ms;
  --pv-t-slow:       520ms;
  --pv-t-deliberate: 900ms;
  --pv-t-curtain:    1400ms;

  /* ---------- Focus ring ------------------------------------ */
  --pv-focus-ring:
    0 0 0 2px var(--pv-cream),
    0 0 0 4px var(--pv-gold);
  --pv-focus-ring-inverse:
    0 0 0 2px var(--pv-navy),
    0 0 0 4px var(--pv-gold);
}


/* =============================================================
   2. TYPE SCALE APPLICATION
   Low-specificity refinements that only reinforce existing
   provis-brand.css rules. No markup touched.
============================================================= */

/* 2.1 Display headings — hero-level h1 feel */
.pv-display,
.pv-hero h1,
.page-hero h1 {
  font-size: clamp(var(--pv-fs-9), 7vw, var(--pv-fs-12));
  line-height: var(--pv-lh-display);
  letter-spacing: var(--pv-ls-display);
  font-feature-settings: "ss01", "liga", "dlig";
}

/* 2.2 H1 tuning */
.pv-h1 {
  font-size: clamp(var(--pv-fs-8), 4.6vw, var(--pv-fs-10));
  line-height: var(--pv-lh-heading);
  letter-spacing: var(--pv-ls-h1);
}

/* 2.3 H2 tuning */
.pv-h2 {
  font-size: clamp(var(--pv-fs-7), 3.6vw, var(--pv-fs-9));
  line-height: var(--pv-lh-heading);
  letter-spacing: var(--pv-ls-h2);
}

/* 2.4 H3 tuning */
.pv-h3 {
  font-size: clamp(var(--pv-fs-6), 2.6vw, var(--pv-fs-8));
  line-height: var(--pv-lh-subhead);
  letter-spacing: var(--pv-ls-h3);
}

/* 2.5 H4 tuning */
.pv-h4 {
  font-size: var(--pv-fs-5);
  line-height: var(--pv-lh-subhead);
  letter-spacing: var(--pv-ls-h4);
}

/* 2.6 Eyebrow refinement — consistent tracking */
.pv-eyebrow {
  letter-spacing: var(--pv-ls-eyebrow);
  font-feature-settings: "tnum";
}

/* 2.7 Lede paragraph — comfortable reading for intros */
.pv-lede {
  font-size: var(--pv-fs-4);
  line-height: var(--pv-lh-body);
  max-width: var(--pv-measure);
}

/* 2.8 Body rhythm — readable measure + line-height */
.pv-body,
.pv-prose p {
  font-size: var(--pv-fs-3);
  line-height: var(--pv-lh-body);
  max-width: var(--pv-measure);
}

/* 2.9 Long-form prose variant */
.pv-prose--long p {
  line-height: var(--pv-lh-body-long);
  margin-bottom: 1.15em;
}

/* 2.10 Caption / meta text */
.pv-caption {
  font-size: var(--pv-fs-2);
  line-height: 1.55;
  letter-spacing: 0.005em;
  color: var(--provis-mute);
}


/* =============================================================
   3. LINK STYLES — editorial underlines w/ hover reveal
============================================================= */

/* 3.1 Refined inline link — animated underline thickness */
.pv-link-x {
  color: currentColor;
  text-decoration: none;
  background-image: linear-gradient(var(--pv-gold), var(--pv-gold));
  background-size: 100% 1px;
  background-repeat: no-repeat;
  background-position: 0 100%;
  transition: background-size var(--pv-t-base) var(--pv-ease-out),
              color var(--pv-t-base) var(--pv-ease-out);
  padding-bottom: 0.12em;
}
.pv-link-x:hover {
  background-size: 100% 2px;
  color: var(--pv-gold-deep);
}

/* 3.2 Reveal-on-hover link (underline grows from left) */
.pv-link-reveal {
  position: relative;
  text-decoration: none;
  color: currentColor;
}
.pv-link-reveal::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: -3px;
  height: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform var(--pv-t-base) var(--pv-ease-out);
}
.pv-link-reveal:hover::after { transform: scaleX(1); }


/* =============================================================
   4. GRADIENTS — subtle brand washes
============================================================= */

/* 4.1 Paper gradient — warm cream to paper */
.pv-grad-paper {
  background-image:
    linear-gradient(180deg, var(--pv-cream) 0%, var(--pv-paper) 100%);
}

/* 4.2 Navy gradient — deep to navy-2 */
.pv-grad-navy {
  background-image:
    linear-gradient(180deg, var(--pv-navy-deep) 0%, var(--pv-navy-2) 100%);
}

/* 4.3 Gold gradient — soft to deep */
.pv-grad-gold {
  background-image:
    linear-gradient(135deg, var(--pv-gold-soft) 0%, var(--pv-gold) 50%, var(--pv-gold-deep) 100%);
}

/* 4.4 Radial warm-light spotlight */
.pv-grad-spotlight {
  background-image:
    radial-gradient(ellipse at 50% 10%, rgba(185, 169, 119, 0.22), transparent 60%),
    linear-gradient(180deg, var(--pv-cream), var(--pv-paper));
}

/* 4.5 Vignette wash for image overlays */
.pv-grad-vignette::after {
  content: "";
  position: absolute; inset: 0;
  background: radial-gradient(ellipse at center,
              transparent 40%, rgba(20, 21, 29, 0.45) 100%);
  pointer-events: none;
}


/* =============================================================
   5. SHADOW ELEVATION UTILITIES
============================================================= */
.pv-elev-sm { box-shadow: var(--pv-shadow-sm); }
.pv-elev-md { box-shadow: var(--pv-shadow-md); }
.pv-elev-lg { box-shadow: var(--pv-shadow-lg); }
.pv-elev-xl { box-shadow: var(--pv-shadow-xl); }
.pv-elev-inset { box-shadow: var(--pv-shadow-inset); }


/* =============================================================
   6. BORDER-RADIUS UTILITIES
============================================================= */
.pv-r-sharp { border-radius: var(--pv-radius-sharp); }
.pv-r-soft  { border-radius: var(--pv-radius-soft); }
.pv-r-card  { border-radius: var(--pv-radius-card); }
.pv-r-lg    { border-radius: var(--pv-radius-lg); }
.pv-r-pill  { border-radius: var(--pv-radius-pill); }


/* =============================================================
   7. FOCUS RING — brand-cohesive double ring
   Gentle, non-destructive. Only affects keyboard focus.
============================================================= */
.pv-focusable:focus-visible,
.pv-btn:focus-visible,
.pv-btn-gold:focus-visible,
.pv-link-x:focus-visible,
.pv-link-reveal:focus-visible {
  outline: none;
  box-shadow: var(--pv-focus-ring);
  border-radius: var(--pv-radius-soft);
}

.pv-section--ink .pv-focusable:focus-visible,
.pv-section--ink .pv-btn:focus-visible {
  box-shadow: var(--pv-focus-ring-inverse);
}


/* =============================================================
   8. SCROLL-REVEAL MOTION — refined variants
   Hooks into provis-scroll-reveal.js:
     - .is-visible is added by the class observer
     - .pv-visible is added by the data-pv-reveal observer
============================================================= */

/* 8.1 Fade-up (default editorial reveal) */
.pv-rv-fade-up {
  opacity: 0;
  transform: translate3d(0, 24px, 0);
  transition: opacity var(--pv-t-deliberate) var(--pv-ease-editorial),
              transform var(--pv-t-deliberate) var(--pv-ease-editorial);
  will-change: opacity, transform;
}
.pv-rv-fade-up.is-visible,
.pv-rv-fade-up.pv-visible { opacity: 1; transform: none; }

/* 8.2 Clip-up — wipe from bottom */
.pv-rv-clip-up {
  clip-path: inset(0 0 100% 0);
  transition: clip-path var(--pv-t-deliberate) var(--pv-ease-editorial);
}
.pv-rv-clip-up.is-visible,
.pv-rv-clip-up.pv-visible { clip-path: inset(0 0 0 0); }

/* 8.3 Scale-in */
.pv-rv-scale {
  opacity: 0; transform: scale(0.96);
  transition: opacity var(--pv-t-slow) var(--pv-ease-spring),
              transform var(--pv-t-slow) var(--pv-ease-spring);
}
.pv-rv-scale.is-visible,
.pv-rv-scale.pv-visible { opacity: 1; transform: none; }

/* 8.4 Hairline draw — horizontal rule that draws in */
.pv-rv-hairline {
  transform: scaleX(0); transform-origin: left center;
  transition: transform var(--pv-t-deliberate) var(--pv-ease-editorial);
}
.pv-rv-hairline.is-visible,
.pv-rv-hairline.pv-visible { transform: scaleX(1); }

/* 8.5 Stagger delays (use alongside reveal classes) */
.pv-rv-d1 { transition-delay: 80ms; }
.pv-rv-d2 { transition-delay: 160ms; }
.pv-rv-d3 { transition-delay: 240ms; }
.pv-rv-d4 { transition-delay: 320ms; }
.pv-rv-d5 { transition-delay: 400ms; }


/* =============================================================
   9. IMAGE GRADE UTILITY — editorial photographic treatment
============================================================= */
.pv-img-grade img,
img.pv-img-grade {
  filter: saturate(0.92) contrast(1.04) sepia(0.06);
  transition: filter var(--pv-t-slow) var(--pv-ease-out),
              transform var(--pv-t-slow) var(--pv-ease-out);
}
.pv-img-grade:hover img,
img.pv-img-grade:hover {
  filter: saturate(1) contrast(1.06) sepia(0.02);
}

/* 9.1 Mono grade — duotone-ish navy wash */
.pv-img-mono img,
img.pv-img-mono {
  filter: grayscale(0.85) contrast(1.06) brightness(0.98);
}


/* =============================================================
   10. GRAIN OVERLAY — analog film grain
============================================================= */
.pv-grain {
  position: relative;
  isolation: isolate;
}
.pv-grain::after {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  opacity: 0.06;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  background-size: 160px 160px;
  z-index: 1;
}

/* 10.1 Section-level grain wash (subtle, 3%) */
.pv-section-grain {
  position: relative;
}
.pv-section-grain::before {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  opacity: 0.03;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  z-index: 0;
}


/* =============================================================
   11. PAPER TEXTURE UTILITY
============================================================= */
.pv-paper-tex {
  background-color: var(--pv-cream);
  background-image:
    radial-gradient(rgba(34, 36, 50, 0.035) 1px, transparent 1px),
    radial-gradient(rgba(34, 36, 50, 0.025) 1px, transparent 1px);
  background-size: 18px 18px, 32px 32px;
  background-position: 0 0, 9px 9px;
}


/* =============================================================
   12. HAIRLINE DIVIDER — universal gold gradient rule
============================================================= */
.pv-hairline {
  display: block;
  width: 100%;
  height: 1px;
  border: 0;
  background-image: linear-gradient(90deg,
    transparent 0%,
    var(--pv-gold-line) 20%,
    var(--pv-gold) 50%,
    var(--pv-gold-line) 80%,
    transparent 100%);
}

.pv-hairline--short {
  width: 72px;
  height: 1px;
  background: var(--pv-gold);
}

.pv-hairline--vert {
  width: 1px;
  height: 100%;
  background-image: linear-gradient(180deg,
    transparent, var(--pv-gold-line), transparent);
}


/* =============================================================
   13. DROP CAP — editorial first letter
============================================================= */
.pv-dropcap::first-letter,
.pv-dropcap > p:first-of-type::first-letter {
  font-family: var(--provis-heading-font);
  font-size: 3.6em;
  float: left;
  line-height: 1;
  margin: 0.12em 0.12em -0.05em 0;
  padding: 0;
  color: var(--pv-gold-deep);
  font-weight: 500;
  -webkit-initial-letter: 3;
  initial-letter: 3;
}


/* =============================================================
   14. PULL QUOTE — editorial blockquote utility
============================================================= */
.pv-pullquote {
  font-family: var(--provis-heading-font);
  font-size: clamp(var(--pv-fs-6), 3vw, var(--pv-fs-8));
  line-height: 1.22;
  letter-spacing: var(--pv-ls-h3);
  color: var(--pv-navy);
  max-width: var(--pv-measure-tight);
  margin: var(--space-7, 3rem) auto;
  padding: 0 var(--space-6, 2rem);
  border-left: 2px solid var(--pv-gold);
  font-style: italic;
}
.pv-pullquote cite {
  display: block;
  margin-top: 0.8em;
  font-family: var(--provis-body-font);
  font-size: var(--pv-fs-2);
  font-style: normal;
  letter-spacing: var(--pv-ls-eyebrow);
  text-transform: uppercase;
  color: var(--provis-mute);
}


/* =============================================================
   15. NUMBERED FIGURE — "Nº 01" style numeral label
============================================================= */
.pv-figno {
  display: inline-flex;
  align-items: baseline;
  gap: 0.35em;
  font-family: var(--provis-heading-font);
  font-size: var(--pv-fs-2);
  letter-spacing: var(--pv-ls-eyebrow);
  text-transform: uppercase;
  color: var(--pv-gold-deep);
}
.pv-figno::before { content: "N\00BA"; opacity: 0.7; }


/* =============================================================
   16. CARET / ARROW MICRO-ICONS — pure CSS
============================================================= */
.pv-caret {
  display: inline-block;
  width: 0.55em; height: 0.55em;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: rotate(-45deg);
  transition: transform var(--pv-t-base) var(--pv-ease-out);
  vertical-align: middle;
}
.pv-caret--down  { transform: rotate(45deg); }
.pv-caret--up    { transform: rotate(-135deg); }
.pv-caret--left  { transform: rotate(135deg); }

.pv-arrow {
  display: inline-block;
  width: 1.2em;
  height: 1px;
  background: currentColor;
  position: relative;
  vertical-align: middle;
  transition: width var(--pv-t-base) var(--pv-ease-out);
}
.pv-arrow::after {
  content: "";
  position: absolute;
  right: 0; top: 50%;
  width: 0.5em; height: 0.5em;
  border-right: 1px solid currentColor;
  border-top: 1px solid currentColor;
  transform: translateY(-50%) rotate(45deg);
}
a:hover > .pv-arrow,
button:hover > .pv-arrow { width: 1.6em; }


/* =============================================================
   17. LOADING SKELETON SHIMMER
============================================================= */
@keyframes pvShimmer {
  0%   { background-position: -400px 0; }
  100% { background-position: 400px 0; }
}
.pv-skeleton {
  display: block;
  background-color: var(--pv-paper);
  background-image: linear-gradient(90deg,
    var(--pv-paper) 0%,
    var(--pv-cream-2) 40%,
    var(--pv-paper) 80%);
  background-size: 400px 100%;
  background-repeat: no-repeat;
  animation: pvShimmer 1.6s var(--pv-ease-in-out) infinite;
  border-radius: var(--pv-radius-soft);
  min-height: 1em;
  color: transparent;
}


/* =============================================================
   18. TOAST / NOTIFICATION SHELL — disabled (Apr 2026)
============================================================= */
#pv-toast, .pv-toast { display: none !important; }
.pv-toast {
  position: fixed;
  left: 50%;
  bottom: 2rem;
  transform: translateX(-50%) translateY(20px);
  background: var(--pv-navy);
  color: var(--pv-cream);
  font-family: var(--provis-body-font);
  font-size: var(--pv-fs-3);
  padding: 0.9rem 1.4rem;
  border-radius: var(--pv-radius-card);
  box-shadow: var(--pv-shadow-lg);
  border: 1px solid var(--pv-gold-line);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--pv-t-base) var(--pv-ease-out),
              transform var(--pv-t-base) var(--pv-ease-out);
  z-index: 9000;
}
.pv-toast.is-visible {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
  pointer-events: auto;
}
.pv-toast--success { border-left: 3px solid var(--pv-gold); }
.pv-toast--error   { border-left: 3px solid #c75a4a; }


/* =============================================================
   19. TOOLTIP SHELL
============================================================= */
.pv-tip { position: relative; }
.pv-tip[data-tip]::after {
  content: attr(data-tip);
  position: absolute;
  left: 50%; bottom: calc(100% + 8px);
  transform: translate(-50%, 4px);
  background: var(--pv-navy);
  color: var(--pv-cream);
  font-family: var(--provis-body-font);
  font-size: var(--pv-fs-1);
  letter-spacing: 0.01em;
  padding: 0.45rem 0.7rem;
  border-radius: var(--pv-radius-soft);
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--pv-t-fast) var(--pv-ease-out),
              transform var(--pv-t-fast) var(--pv-ease-out);
  box-shadow: var(--pv-shadow-md);
  z-index: 50;
}
.pv-tip:hover::after,
.pv-tip:focus-visible::after {
  opacity: 1;
  transform: translate(-50%, 0);
}


/* =============================================================
   20. TAG / CHIP / PILL COMPONENTS
============================================================= */
.pv-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
  font-family: var(--provis-body-font);
  font-size: var(--pv-fs-1);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 0.35em 0.85em;
  border-radius: var(--pv-radius-pill);
  background: var(--pv-navy-ghost);
  color: var(--pv-navy);
  border: 1px solid var(--pv-navy-line);
  transition: background var(--pv-t-base) var(--pv-ease-out),
              color var(--pv-t-base) var(--pv-ease-out);
}
.pv-chip:hover { background: var(--pv-navy); color: var(--pv-cream); }

.pv-chip--gold {
  background: var(--pv-gold-ghost);
  border-color: var(--pv-gold-line);
  color: var(--pv-gold-deep);
}
.pv-chip--gold:hover { background: var(--pv-gold); color: var(--pv-navy); }

.pv-chip--solid {
  background: var(--pv-navy);
  color: var(--pv-cream);
  border-color: transparent;
}


/* =============================================================
   21. AVATAR / CIRCLE FRAME
============================================================= */
.pv-avatar {
  display: inline-block;
  width: 48px; height: 48px;
  border-radius: var(--pv-radius-pill);
  overflow: hidden;
  border: 1px solid var(--pv-gold-line);
  box-shadow: var(--pv-shadow-sm);
  background: var(--pv-paper);
}
.pv-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pv-avatar--sm { width: 32px; height: 32px; }
.pv-avatar--lg { width: 72px; height: 72px; }
.pv-avatar--xl { width: 112px; height: 112px; }


/* =============================================================
   22. ASPECT-RATIO UTILITIES
============================================================= */
.pv-ar-square   { aspect-ratio: 1 / 1; }
.pv-ar-portrait { aspect-ratio: 4 / 5; }
.pv-ar-landscape{ aspect-ratio: 16 / 9; }
.pv-ar-golden   { aspect-ratio: 1.618 / 1; }
.pv-ar-cinema   { aspect-ratio: 2.39 / 1; }
.pv-ar-35       { aspect-ratio: 3 / 5; }

.pv-ar-square > img,
.pv-ar-portrait > img,
.pv-ar-landscape > img,
.pv-ar-golden > img,
.pv-ar-cinema > img,
.pv-ar-35 > img {
  width: 100%; height: 100%; object-fit: cover; display: block;
}


/* =============================================================
   23. SELECTION COLOR — brand-aware, per-context
============================================================= */
::selection {
  background: var(--pv-gold);
  color: var(--pv-navy);
}
.pv-section--ink ::selection,
.pv-grad-navy ::selection {
  background: var(--pv-cream);
  color: var(--pv-navy);
}


/* =============================================================
   24. CUSTOM SCROLLBAR — subtle, brand-cohesive
============================================================= */
@supports selector(::-webkit-scrollbar) {
  html {
    scrollbar-color: var(--pv-gold-deep) var(--pv-paper);
    scrollbar-width: thin;
  }
  ::-webkit-scrollbar { width: 10px; height: 10px; }
  ::-webkit-scrollbar-track {
    background: var(--pv-paper);
  }
  ::-webkit-scrollbar-thumb {
    background: var(--pv-gold-deep);
    border: 2px solid var(--pv-paper);
    border-radius: var(--pv-radius-pill);
  }
  ::-webkit-scrollbar-thumb:hover { background: var(--pv-navy); }
}


/* =============================================================
   25. PRINT STYLESHEET BASICS
============================================================= */
@media print {
  :root { --pv-cream: #fff; --pv-navy: #000; }
  body, .pv-section, .pv-section--ink {
    background: #fff !important;
    color: #000 !important;
  }
  .pv-btn, .pv-btn-gold, nav, header, footer,
  .pv-grain, .pv-section-grain,
  .pv-toast, .pv-tip::after { display: none !important; }
  h1, h2, h3, h4 { color: #000 !important; page-break-after: avoid; }
  p, li, blockquote { orphans: 3; widows: 3; }
  a[href]::after { content: " (" attr(href) ")"; font-size: 0.85em; color: #555; }
  img { max-width: 100% !important; page-break-inside: avoid; }
  .pv-pullquote { border-left-color: #999 !important; color: #000 !important; }
}


/* =============================================================
   26. REDUCED-MOTION SAFETY NET
============================================================= */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .pv-rv-fade-up,
  .pv-rv-clip-up,
  .pv-rv-scale,
  .pv-rv-hairline {
    opacity: 1 !important;
    transform: none !important;
    clip-path: none !important;
  }
  .pv-skeleton { animation: none !important; }
}


/* =============================================================
   27. RTL SUPPORT HOOKS (light)
============================================================= */
[dir="rtl"] .pv-link-reveal::after { transform-origin: right center; }
[dir="rtl"] .pv-rv-hairline { transform-origin: right center; }
[dir="rtl"] .pv-dropcap::first-letter,
[dir="rtl"] .pv-dropcap > p:first-of-type::first-letter {
  float: right;
  padding: 0.08em 0 0 0.12em;
}
[dir="rtl"] .pv-pullquote {
  border-left: none;
  border-right: 2px solid var(--pv-gold);
}
[dir="rtl"] .pv-caret       { transform: rotate(135deg); }
[dir="rtl"] .pv-caret--left { transform: rotate(-45deg); }
[dir="rtl"] .pv-toast       { /* keep centered */ }


/* =============================================================
   28. MEASURE & FLOW UTILITIES
============================================================= */
.pv-measure        { max-width: var(--pv-measure); }
.pv-measure-tight  { max-width: var(--pv-measure-tight); }
.pv-measure-wide   { max-width: var(--pv-measure-wide); }
.pv-center-x       { margin-left: auto; margin-right: auto; }
.pv-flow > * + *   { margin-top: 1em; }
.pv-flow-lg > * + *{ margin-top: 1.6em; }


/* =============================================================
   29. DIVIDER SPACING RHYTHM
============================================================= */
.pv-divider-y-sm { padding-top: var(--space-6, 2rem); padding-bottom: var(--space-6, 2rem); }
.pv-divider-y    { padding-top: var(--space-8, 4rem); padding-bottom: var(--space-8, 4rem); }
.pv-divider-y-lg { padding-top: var(--space-10, 8rem); padding-bottom: var(--space-10, 8rem); }


/* =============================================================
   30. IMAGE FRAME — editorial bordered image container
============================================================= */
.pv-frame {
  position: relative;
  padding: 6px;
  background: var(--pv-cream);
  border: 1px solid var(--pv-gold-line);
  box-shadow: var(--pv-shadow-md);
}
.pv-frame::after {
  content: "";
  position: absolute; inset: 0;
  border: 1px solid var(--pv-gold-line);
  pointer-events: none;
  transform: scale(0.985);
}


/* =============================================================
   31. BUTTON REFINEMENTS (non-destructive polish on .pv-btn)
   Adds subtle easing + focus harmony without touching
   existing provis-brand.css button selectors.
============================================================= */
.pv-btn,
.pv-btn-gold {
  transition: background var(--pv-t-base) var(--pv-ease-out),
              color var(--pv-t-base) var(--pv-ease-out),
              border-color var(--pv-t-base) var(--pv-ease-out),
              box-shadow var(--pv-t-slow) var(--pv-ease-out),
              transform var(--pv-t-slow) var(--pv-ease-spring);
}
.pv-btn:active,
.pv-btn-gold:active { transform: translateY(1px) scale(0.995); }


/* =============================================================
   32. KEYFRAMES — shared micro-interaction library
============================================================= */
@keyframes pvFadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes pvRise {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: none; }
}
@keyframes pvDraw {
  from { stroke-dashoffset: 100%; }
  to   { stroke-dashoffset: 0; }
}
@keyframes pvPulseGold {
  0%, 100% { box-shadow: 0 0 0 0 rgba(185, 169, 119, 0.45); }
  50%      { box-shadow: 0 0 0 10px rgba(185, 169, 119, 0); }
}
.pv-anim-pulse-gold { animation: pvPulseGold 2.4s var(--pv-ease-out) infinite; }
.pv-anim-fade-in    { animation: pvFadeIn var(--pv-t-slow) var(--pv-ease-out) both; }
.pv-anim-rise       { animation: pvRise var(--pv-t-slow) var(--pv-ease-editorial) both; }


/* =============================================================
   33. HOVER LIFT — universal card hover polish
============================================================= */
.pv-lift {
  transition: transform var(--pv-t-slow) var(--pv-ease-spring),
              box-shadow var(--pv-t-slow) var(--pv-ease-out);
}
.pv-lift:hover {
  transform: translateY(-3px);
  box-shadow: var(--pv-shadow-lg);
}


/* =============================================================
   34. SECTION-LEVEL AMBIENCE
   Adds an opt-in 3% grain to any section without markup edits.
============================================================= */
.pv-ambient {
  position: relative;
  isolation: isolate;
}
.pv-ambient::before {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  z-index: 0;
  opacity: 0.04;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}
.pv-ambient > * { position: relative; z-index: 1; }


/* =============================================================
   35. TEXT BALANCE & WRAP
============================================================= */
.pv-balance { text-wrap: balance; }
.pv-pretty  { text-wrap: pretty; }
.pv-nowrap  { white-space: nowrap; }


/* =============================================================
   36. NUMERIC STYLING — tabular figures for prices/stats
============================================================= */
.pv-tnum { font-variant-numeric: tabular-nums; font-feature-settings: "tnum"; }
.pv-onum { font-variant-numeric: oldstyle-nums; font-feature-settings: "onum"; }


/* =============================================================
   37. SMALL-CAPS UTILITY
============================================================= */
.pv-smallcaps {
  font-variant-caps: all-small-caps;
  letter-spacing: var(--pv-ls-caps);
}


/* =============================================================
   38. BACKDROP BLUR PANEL — glassy overlay
============================================================= */
.pv-glass {
  background: rgba(248, 250, 239, 0.72);
  backdrop-filter: blur(14px) saturate(1.1);
  -webkit-backdrop-filter: blur(14px) saturate(1.1);
  border: 1px solid var(--pv-gold-line);
}
.pv-glass--ink {
  background: rgba(20, 21, 29, 0.6);
  color: var(--pv-cream);
  backdrop-filter: blur(14px) saturate(1.1);
  -webkit-backdrop-filter: blur(14px) saturate(1.1);
  border: 1px solid rgba(185, 169, 119, 0.28);
}


/* =============================================================
   39. KEYLINE BORDER — double hairline brand frame
============================================================= */
.pv-keyline {
  border: 1px solid var(--pv-gold-line);
  box-shadow:
    inset 0 0 0 3px var(--pv-cream),
    inset 0 0 0 4px var(--pv-gold-line);
}


/* =============================================================
   40. ORNAMENT — centered gold dot separator
============================================================= */
.pv-ornament {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  color: var(--pv-gold-deep);
}
.pv-ornament::before,
.pv-ornament::after {
  content: "";
  flex: 0 0 48px;
  height: 1px;
  background: var(--pv-gold-line);
}
.pv-ornament > span::before { content: "\25C6"; /* diamond */ }


/* =============================================================
   END — provis-polish-system.css
============================================================= */


/* ==========================================================================
   SOURCE: provis-polish-global.css
   ========================================================================== */

/* cache-bust: nav-fix 2026-04-08 */
/* ============================================================
   provis-polish-global.css
   Global-elements polish pass for Provis Coffee (Shopify Horizon)
   ------------------------------------------------------------
   Scope: header, announcement bar, nav/mega menu, mobile drawer,
          search modal, cart icon/badge, account link, localization,
          footer (brand, columns, newsletter, socials, copyright),
          skip-link, page-transition, scroll progress.

   Rules of engagement:
   - Additive CSS only. No markup/copy/schema changes.
   - Uses existing Provis tokens from provis-brand.css where possible
     (--provis-navy, --provis-cream, --provis-paper, --provis-gold).
   - Respects reduced-motion.
   - Never touches templates/.
   ============================================================ */

/* ------------------------------------------------------------
   Local tokens — scoped, non-destructive. Fall back to brand
   tokens defined in provis-brand.css.
   ------------------------------------------------------------ */
:root {
  --pg-navy:        var(--provis-navy,  #222432);
  --pg-navy-deep:   #1a1c28;
  --pg-cream:       var(--provis-cream, #F8FAEF);
  --pg-paper:       var(--provis-paper, #F8FAEF);
  --pg-gold:        var(--provis-gold,  #B9A977);
  --pg-gold-soft:   rgba(185, 169, 119, 0.35);
  --pg-hairline:    rgba(248, 250, 239, 0.12);
  --pg-hairline-strong: rgba(248, 250, 239, 0.22);
  --pg-shadow-lg:   0 24px 60px -20px rgba(10, 12, 22, 0.45);
  --pg-shadow-md:   0 12px 28px -12px rgba(10, 12, 22, 0.35);
  --pg-ease:        cubic-bezier(0.2, 0.65, 0.25, 1);
  --pg-ease-out:    cubic-bezier(0.16, 1, 0.3, 1);
  --pg-dur-fast:    160ms;
  --pg-dur:         260ms;
  --pg-dur-slow:    420ms;
}

/* ============================================================
   1. HEADER BACKGROUND STATES
   Change: Give the header a subtle glassy veil when scrolled
   and a crisp hairline that fades in with stuck-state.
   Rationale: The current header snaps hard between transparent
   and solid. A 260ms cross-fade on backdrop-filter + border
   reads as premium without masking the navy.
   ============================================================ */
header-component .header,
header.header,
.header {
  transition:
    background-color var(--pg-dur) var(--pg-ease),
    box-shadow       var(--pg-dur) var(--pg-ease),
    border-color     var(--pg-dur) var(--pg-ease),
    backdrop-filter  var(--pg-dur) var(--pg-ease);
  will-change: background-color, box-shadow;
  border-bottom: 1px solid transparent;
}

/* 2. Scrolled / sticky-active state — soft navy glass + hairline */
header-component[data-sticky-state="active"] .header,
header-component:not([transparent]) .header,
.header[data-stuck="true"] {
  background-color: rgba(34, 36, 50, 0.92);
  backdrop-filter: saturate(140%) blur(10px);
  -webkit-backdrop-filter: saturate(140%) blur(10px);
  border-bottom-color: var(--pg-hairline);
  box-shadow: 0 10px 30px -18px rgba(10, 12, 22, 0.55);
}

/* 2b. Force cream text inside the forced-navy header.
   Subpage templates (page/*, 404, etc.) don't get the transparent header,
   so header-component has no color-scheme class and the inner rows keep
   their .color-scheme-1 (cream-bg/dark-text) treatment. Rule #2 above
   overrides the *background* to navy, but without also overriding the
   color the logo, header-actions (search, currency, account, cart), and
   any non-menu-link element inherit a dark navy color from color-scheme-1
   and become invisible on the now-navy background.

   Scope to non-transparent headers so the transparent-over-hero case on
   home/product/collection is untouched. Note: header-component itself
   carries the `.header` class, so rule #2 above matches it directly —
   there is no `.header` descendant to traverse into. We target descendants
   from header-component with a descendant combinator. */
header-component:not([transparent]),
header-component:not([transparent]) .header__row,
header-component:not([transparent]) .header__row--top,
header-component:not([transparent]) .header__row--bottom,
header-component:not([transparent]) .header__navigation-bar-row,
header-component:not([transparent]) .header-logo,
header-component:not([transparent]) .header__logo,
header-component:not([transparent]) .header-logo *,
header-component:not([transparent]) [class*="header-actions"],
header-component:not([transparent]) [class*="header-actions"] *,
header-component:not([transparent]) .dropdown-localization,
header-component:not([transparent]) .dropdown-localization *,
header-component:not([transparent]) search-button,
header-component:not([transparent]) search-button *,
header-component:not([transparent]) shopify-account,
header-component:not([transparent]) shopify-account *,
header-component:not([transparent]) .cart-bubble,
header-component:not([transparent]) .cart-bubble *,
header-component:not([transparent]) .account-button,
header-component:not([transparent]) .account-button * {
  color: var(--pg-cream, #F8FAEF) !important;
}
/* SVG icons inside the header — force stroke + fill to currentColor so
   they track the cream text color we just set above. */
header-component:not([transparent]) [class*="header-actions"] svg,
header-component:not([transparent]) [class*="header-actions"] svg *,
header-component:not([transparent]) .dropdown-localization svg,
header-component:not([transparent]) .dropdown-localization svg *,
header-component:not([transparent]) search-button svg,
header-component:not([transparent]) search-button svg *,
header-component:not([transparent]) .icon-caret svg,
header-component:not([transparent]) .icon-caret svg * {
  stroke: currentColor !important;
}
/* Exception: the orange "Account" pill button — it has its own background
   and text color, leave it alone. */
header-component:not([transparent]) .account-button--signed-in,
header-component:not([transparent]) .account-button--signed-in * {
  color: inherit !important;
}

/* 3. Transparent-over-hero state — ensure nav links have a
   readable soft shadow so they float on light imagery. */
header-component[transparent]:not([data-sticky-state="active"]) .header a,
.header[data-transparent="always"]:not([data-stuck="true"]) a {
  text-shadow: 0 1px 18px rgba(10, 12, 22, 0.35);
}

/* ============================================================
   4. HEADER LOGO — hover lift + crisper focus ring
   Rationale: Seal treatment already handled in brand.css; here
   we add a gentle scale on hover + accessible focus ring.
   ============================================================ */
.header-logo,
.header__logo a,
[class*="header-logo"] a {
  transition: transform var(--pg-dur) var(--pg-ease-out), filter var(--pg-dur) var(--pg-ease);
}
.header-logo:hover,
.header__logo a:hover,
[class*="header-logo"] a:hover {
  transform: translateY(-1px) scale(1.012);
  filter: brightness(1.04);
}
.header-logo:focus-visible,
.header__logo a:focus-visible {
  outline: 2px solid var(--pg-gold);
  outline-offset: 6px;
  border-radius: 999px;
}

/* ============================================================
   5. NAV MENU LINKS — refined rhythm + underline animation
   Rationale: provis-brand.css has a basic underline; we sharpen
   the ease, thin the stroke, and anchor it from center for
   a more editorial feel.
   ============================================================ */
.header__menu a,
.header-menu a,
[class*="header-menu"] a {
  letter-spacing: 0.04em;
  font-feature-settings: "ss01", "ss02", "liga";
  transition:
    color var(--pg-dur-fast) var(--pg-ease),
    opacity var(--pg-dur-fast) var(--pg-ease);
}

/* 6. Nav link gap rhythm — add a touch more breathing room */
.header__menu,
.header-menu,
[class*="header-menu"] > ul,
[class*="header-menu"] > li {
  column-gap: clamp(1.25rem, 2vw, 2.25rem);
}

/* ============================================================
   HOVER PREVIEW CARD — quick info popper on product card hover
   Shows tasting notes / brew tip / roast info on hover for cards
   in the carousel. Uses CSS only — no JS needed.
   ============================================================ */
.pv-cc__card {
  /* Make sure the card is positioned for the absolute child preview */
  position: relative;
}
.pv-cc__card .pv-cc__card-notes {
  /* The notes line is now also used as the hover badge content */
  transition: opacity 0.4s ease, transform 0.4s ease;
}
.pv-cc__card-info {
  transform: translateY(0);
  transition: transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
}
.pv-cc__card:hover .pv-cc__card-info {
  transform: translateY(-6px);
}
/* Add a "View Coffee →" CTA chip on hover for non-featured cards */
.pv-cc__card .pv-cc__card-view {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 10px;
  padding: 8px 14px;
  background: rgba(185, 169, 119, 0.18);
  border: 1px solid rgba(185, 169, 119, 0.45);
  border-radius: 2px;
  color: var(--pv-cc-accent, #B9A977);
  font-family: var(--provis-body-font, 'DM Sans', sans-serif);
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 0.35s ease, transform 0.4s cubic-bezier(0.16,1,0.3,1), background 0.3s ease;
  align-self: flex-start;
  width: max-content;
}
.pv-cc__card:hover .pv-cc__card-view {
  opacity: 1;
  transform: translateY(0);
  background: rgba(185, 169, 119, 0.28);
}
.pv-cc__card-view__arrow {
  display: inline-block;
  transition: transform 0.4s cubic-bezier(0.16,1,0.3,1);
}
.pv-cc__card:hover .pv-cc__card-view__arrow {
  transform: translateX(4px);
}

/* ============================================================
   HOVER POLISH — site-wide micro-interactions that give the
   site life. Apply to buttons, links, product cards, etc.
   ============================================================ */

/* All buttons get a subtle lift + brightness on hover */
.button:not(.button-unstyled):not(.cart-bubble),
button.button:not(.button-unstyled):not(.cart-bubble),
.shopify-payment-button__button,
[type="submit"]:not(.button-unstyled),
.pv-btn,
.pv-btn-gold,
.pv-btn-outline {
  transition:
    transform 0.32s cubic-bezier(0.16, 1, 0.3, 1),
    box-shadow 0.32s cubic-bezier(0.16, 1, 0.3, 1),
    background-color 0.32s ease,
    border-color 0.32s ease,
    color 0.32s ease !important;
}
.button:not(.button-unstyled):not(.cart-bubble):hover,
button.button:not(.button-unstyled):not(.cart-bubble):hover,
.shopify-payment-button__button:hover,
[type="submit"]:not(.button-unstyled):hover,
.pv-btn:hover,
.pv-btn-gold:hover,
.pv-btn-outline:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 28px rgba(34, 36, 50, 0.18);
}
.button:not(.button-unstyled):not(.cart-bubble):active,
button.button:not(.button-unstyled):not(.cart-bubble):active {
  transform: translateY(0);
  transition-duration: 0.05s;
}

/* Inline links inside body copy get a gold underline-grow on hover */
.rte a:not([class]),
.pv-body a:not([class]),
[class*="text-block"] a:not([class]) {
  position: relative;
  text-decoration: none;
  color: inherit;
  font-weight: 600;
  background-image: linear-gradient(180deg, transparent 92%, var(--pg-gold, #B9A977) 92%, var(--pg-gold, #B9A977) 100%);
  background-size: 100% 100%;
  background-position: 0 100%;
  background-repeat: no-repeat;
  transition: background-size 0.3s ease, color 0.3s ease;
}
.rte a:not([class]):hover,
.pv-body a:not([class]):hover,
[class*="text-block"] a:not([class]):hover {
  color: var(--pg-gold, #B9A977);
}

/* Native Shopify product cards on collection pages get the same lift treatment */
product-card {
  transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
product-card:hover {
  transform: translateY(-6px);
}
product-card [class*="product-card__image"],
product-card [class*="product-card-gallery"] img {
  transition: transform 1.0s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
product-card:hover [class*="product-card__image"] img,
product-card:hover [class*="product-card-gallery"] img {
  transform: scale(1.04);
}
product-card [class*="product-title"],
product-card .product-title {
  transition: color 0.3s ease;
}
product-card:hover [class*="product-title"],
product-card:hover .product-title {
  color: var(--pg-gold, #B9A977) !important;
}

/* Hide Contact from main nav (desktop + mobile drawer) — moved to footer
   This is a belt-and-braces CSS rule on top of the Liquid filter in
   blocks/_header-menu.liquid + snippets/header-drawer.liquid because
   Shopify's HEAD/section cache can lag the Liquid render by 5-10 minutes. */
.header__menu li:has(> a[href="/pages/contact"]),
.menu-list__list-item:has(> a[href="/pages/contact"]),
.menu-drawer__list-item--flat:has(> a[href="/pages/contact"]),
.menu-drawer__list-item--deep:has(> a[href="/pages/contact"]),
li:has(> a#HeaderDrawer-contact),
li:has(> a[id^="HeaderDrawer-contact"]),
.menu-list__list-item:has(> a[id^="header-menu-contact"]),
a[href="/pages/contact"].menu-list__link,
a#HeaderDrawer-contact {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
}

/* 7. Nav underline — anchored to the inner text span (not the padded link)
   The <a class="menu-list__link"> stretches to the full header row height
   so positioning ::after on the link drifted below the text. The inner
   <span class="menu-list__link-title"> hugs the text exactly, so we put
   the underline there instead and it tracks perfectly. */
.menu-list__link {
  position: relative;
}
.menu-list__link-title,
.header__menu a > span,
.header-menu a > span {
  position: relative;
  display: inline-block;
}
.menu-list__link-title::after,
.header__menu a > span::after,
.header-menu a > span::after {
  content: '';
  position: absolute;
  left: 50%;
  right: auto;
  bottom: -8px;
  width: 0;
  height: 2px;
  background: var(--pg-gold, #B9A977);
  transform: translateX(-50%);
  transition: width 220ms cubic-bezier(0.22,1,0.36,1);
  pointer-events: none;
  border-radius: 1px;
}
.menu-list__link:hover .menu-list__link-title::after,
.menu-list__list-item:hover .menu-list__link-title::after,
.menu-list__link[aria-current] .menu-list__link-title::after,
.menu-list__link[aria-current="page"] .menu-list__link-title::after,
.menu-list__link--active .menu-list__link-title::after,
.header__menu a:hover > span::after,
.header__menu a[aria-current] > span::after,
.header-menu a:hover > span::after {
  width: 100%;
}
/* Suppress the legacy ::after on the link itself so it doesn't double-render */
.header__menu a::after,
.header-menu a::after,
[class*="header-menu"] a::after,
.menu-list__link::after {
  display: none !important;
}

/* 8. Current page gets a gold dot eyebrow marker */
.header__menu a[aria-current="page"],
.header-menu a[aria-current="page"] {
  color: var(--pg-gold);
}

/* ============================================================
   9. MEGA MENU DROPDOWN — panel treatment + entrance
   Rationale: Give the dropdown a Provis paper-on-navy look
   with a soft top hairline and a vertical slide-in.
   ============================================================ */
.mega-menu,
[class*="mega-menu"][class*="panel"],
.header .mega-menu__content,
.mega-menu__list {
  --mega-offset: 10px;
}
.header .mega-menu,
.header [class*="mega-menu__panel"],
.header dialog.mega-menu,
.mega-menu[open],
.mega-menu__content {
  background-color: var(--pg-cream);
  color: var(--pg-navy);
  border-top: 1px solid var(--pg-gold-soft);
  box-shadow: var(--pg-shadow-lg);
  border-radius: 0 0 6px 6px;
}

/* 10. Mega-menu entrance — fade + slight drop */
.mega-menu,
.header .mega-menu__content,
[class*="mega-menu__panel"] {
  transition:
    opacity var(--pg-dur) var(--pg-ease-out),
    transform var(--pg-dur) var(--pg-ease-out),
    visibility var(--pg-dur) var(--pg-ease-out);
}
.mega-menu:not([open]),
[class*="mega-menu"][aria-hidden="true"] {
  opacity: 0;
  transform: translateY(-6px);
}
.mega-menu[open],
[class*="mega-menu"][aria-hidden="false"] {
  opacity: 1;
  transform: translateY(0);
}

/* 11. Mega-menu columns — tighten vertical rhythm */
.mega-menu__column {
  padding-block: 1.25rem;
}
.mega-menu__column + .mega-menu__column {
  border-left: 1px solid rgba(34, 36, 50, 0.08);
  padding-left: 1.5rem;
}

/* 12. Mega-menu column headings — gold eyebrow */
.mega-menu__link--parent,
.mega-menu__column > .mega-menu__link:first-child {
  font-family: var(--provis-heading-font, "Tiller", serif);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--pg-gold);
  padding-bottom: 0.5rem;
  border-bottom: 1px solid rgba(185, 169, 119, 0.28);
  margin-bottom: 0.75rem;
}

/* 13. Mega-menu child links — quiet hover */
.mega-menu__link {
  transition: color var(--pg-dur-fast) var(--pg-ease), transform var(--pg-dur-fast) var(--pg-ease);
}
.mega-menu__link:hover {
  color: var(--pg-navy);
  transform: translateX(2px);
}

/* 14. Featured product card inside mega menu */
.mega-menu__content-list--products .mega-menu__content-list-item,
.mega-menu__content-list--collections .mega-menu__content-list-item {
  border-radius: 4px;
  overflow: hidden;
  transition: transform var(--pg-dur) var(--pg-ease-out), box-shadow var(--pg-dur) var(--pg-ease-out);
}
.mega-menu__content-list--products .mega-menu__content-list-item:hover,
.mega-menu__content-list--collections .mega-menu__content-list-item:hover {
  transform: translateY(-2px);
  box-shadow: var(--pg-shadow-md);
}

/* ============================================================
   15. MOBILE HAMBURGER — color-aware + crisp
   Rationale: Force cream strokes when header is transparent,
   navy when over paper mega/scrolled state.
   ============================================================ */
.header__icon--menu,
.header-drawer-icon {
  transition: color var(--pg-dur-fast) var(--pg-ease),
              transform var(--pg-dur) var(--pg-ease-out),
              opacity var(--pg-dur-fast) var(--pg-ease);
}
.header__icon--menu:hover {
  color: var(--pg-gold);
}

/* 16. Open-vs-close icon cross-fade */
details[open] .header-drawer-icon--open,
.menu-drawer[open] .header-drawer-icon--open {
  opacity: 0;
  transform: rotate(-45deg) scale(0.85);
}
details[open] .header-drawer-icon--close,
.menu-drawer[open] .header-drawer-icon--close {
  opacity: 1;
  transform: rotate(0deg) scale(1);
}

/* ============================================================
   17. MOBILE DRAWER — overlay + slide-in polish
   Rationale: The default drawer is functional; we add a darker
   overlay, a rightward slide, and typographic rhythm inside.
   ============================================================ */
.menu-drawer-container,
.header-drawer [class*="drawer"],
.menu-drawer {
  transition:
    transform var(--pg-dur-slow) var(--pg-ease-out),
    opacity   var(--pg-dur) var(--pg-ease-out);
}

/* 18. Drawer backdrop */
.header__underlay,
.header__underlay-open {
  background: rgba(10, 12, 22, 0.55) !important;
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
  transition: opacity var(--pg-dur) var(--pg-ease);
}

/* 19. Drawer inner surface — navy with paper lists */
.menu-drawer__navigation,
.menu-drawer {
  background-color: var(--pg-navy);
  color: var(--pg-cream);
}

/* 20. Drawer main list items — editorial scale + hairlines */
.menu-drawer__menu-item--mainlist {
  font-family: var(--provis-heading-font, "Tiller", serif);
  font-size: 1.35rem;
  letter-spacing: 0.01em;
  padding-block: 1rem;
  border-bottom: 1px solid var(--pg-hairline);
  transition: color var(--pg-dur-fast) var(--pg-ease), padding-left var(--pg-dur) var(--pg-ease);
}
.menu-drawer__menu-item--mainlist:hover {
  color: var(--pg-gold);
  padding-left: 6px;
}

/* 21. Drawer child links */
.menu-drawer__menu-item--child,
.menu-drawer__menu-item--parent {
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-size: 0.95rem;
  letter-spacing: 0.02em;
  color: rgba(248, 250, 239, 0.82);
  transition: color var(--pg-dur-fast) var(--pg-ease);
}
.menu-drawer__menu-item--child:hover,
.menu-drawer__menu-item--parent:hover {
  color: var(--pg-gold);
}

/* 22. Drawer accordion caret animation */
.menu-drawer details[open] .icon-plus,
.menu-drawer details[open] .icon-caret {
  transform: rotate(45deg);
}
.menu-drawer .icon-plus,
.menu-drawer .icon-caret {
  transition: transform var(--pg-dur) var(--pg-ease-out);
}

/* 23. Drawer close button — circular, gold on hover */
.menu-drawer__close-button,
.cart-drawer__close-button {
  border-radius: 999px;
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background-color var(--pg-dur-fast) var(--pg-ease), color var(--pg-dur-fast) var(--pg-ease), transform var(--pg-dur) var(--pg-ease-out);
}
.menu-drawer__close-button:hover,
.cart-drawer__close-button:hover {
  background-color: rgba(185, 169, 119, 0.15);
  color: var(--pg-gold);
  transform: rotate(90deg);
}

/* 24. Drawer utility links — small caps, hairline divider above */
.menu-drawer__utility-links {
  border-top: 1px solid var(--pg-hairline);
  padding-top: 1rem;
  margin-top: 1rem;
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(248, 250, 239, 0.7);
}

/* ============================================================
   25. SEARCH BUTTON — icon hover
   ============================================================ */
.header-actions [href*="search"],
[class*="header-actions"] [aria-label*="earch"],
[class*="search"] button.header-actions__action {
  transition: color var(--pg-dur-fast) var(--pg-ease), transform var(--pg-dur) var(--pg-ease-out);
}
.header-actions [href*="search"]:hover svg,
[class*="search"] button.header-actions__action:hover svg {
  transform: scale(1.08);
  color: var(--pg-gold);
}

/* ============================================================
   26. SEARCH MODAL — paper surface, editorial input
   Rationale: Let the search feel like opening a page rather
   than a browser modal. Big serif input, gold caret.
   ============================================================ */
.search-modal,
.search-modal__content {
  background-color: rgba(10, 12, 22, 0.72);
  backdrop-filter: blur(14px) saturate(130%);
  -webkit-backdrop-filter: blur(14px) saturate(130%);
}

.predictive-search {
  background-color: var(--pg-cream);
  border-radius: 6px;
  box-shadow: var(--pg-shadow-lg);
  border-top: 2px solid var(--pg-gold);
}

/* 27. Search input — serif display */
.predictive-search .search-input,
.predictive-search-form input[type="search"] {
  font-family: var(--provis-heading-font, "Tiller", serif);
  font-size: clamp(1.25rem, 2.4vw, 1.75rem);
  letter-spacing: 0.005em;
  color: var(--pg-navy);
  caret-color: var(--pg-gold);
  border: none;
  background: transparent;
  padding-block: 1rem;
}
.predictive-search .search-input::placeholder {
  color: rgba(34, 36, 50, 0.4);
  font-style: italic;
}

/* 28. Search input focus ring — gold underline only */
.predictive-search-form__header,
.predictive-search-form__header-inner {
  border-bottom: 1px solid rgba(34, 36, 50, 0.12);
  transition: border-color var(--pg-dur) var(--pg-ease);
}
.predictive-search-form:focus-within .predictive-search-form__header,
.predictive-search-form:focus-within .predictive-search-form__header-inner {
  border-bottom-color: var(--pg-gold);
}

/* 29. Search icon + reset button hover */
.predictive-search__icon,
.predictive-search__reset-button {
  color: rgba(34, 36, 50, 0.5);
  transition: color var(--pg-dur-fast) var(--pg-ease), transform var(--pg-dur-fast) var(--pg-ease);
}
.predictive-search__reset-button:hover {
  color: var(--pg-navy);
  transform: rotate(90deg);
}

/* 30. Predictive result rows */
.predictive-search-form__content a,
.predictive-search-form__content [class*="result"] {
  transition: background-color var(--pg-dur-fast) var(--pg-ease), padding-left var(--pg-dur) var(--pg-ease);
}
.predictive-search-form__content a:hover,
.predictive-search-form__content [class*="result"]:hover {
  background-color: rgba(185, 169, 119, 0.08);
  padding-left: 0.5rem;
}

/* 31. Close modal button */
.predictive-search__close-modal-button {
  transition: transform var(--pg-dur) var(--pg-ease-out), color var(--pg-dur-fast) var(--pg-ease);
}
.predictive-search__close-modal-button:hover {
  transform: rotate(90deg);
  color: var(--pg-gold);
}

/* ============================================================
   32. CART ICON + COUNT BADGE
   Rationale: Badge becomes a gold pill, pops on add.
   ============================================================ */
.header-actions__cart-icon,
.action__cart,
[class*="header-actions"] [href*="cart"] {
  position: relative;
  transition: transform var(--pg-dur) var(--pg-ease-out);
}
.header-actions__cart-icon:hover,
.action__cart:hover {
  transform: translateY(-1px);
}

/* 33. Badge redesign */
.header-actions [class*="cart-count"],
[class*="header-actions"] [class*="count"],
cart-bubble,
[class*="cart-bubble"] {
  background-color: var(--pg-gold) !important;
  color: var(--pg-navy) !important;
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-weight: 700;
  font-size: 0.68rem;
  letter-spacing: 0;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  box-shadow: 0 0 0 2px var(--pg-navy);
  transition: transform var(--pg-dur) var(--pg-ease-out);
}

/* 34. Bounce on cart count increment (uses :has if available) */
@keyframes pg-cart-pop {
  0%   { transform: scale(1); }
  40%  { transform: scale(1.35); }
  70%  { transform: scale(0.92); }
  100% { transform: scale(1); }
}
.header-actions__cart-icon--has-cart [class*="count"],
.header-actions__cart-icon--has-cart cart-bubble {
  animation: pg-cart-pop var(--pg-dur-slow) var(--pg-ease-out);
}

/* ============================================================
   35. ACCOUNT / LOGIN LINK
   ============================================================ */
.account-button,
.account-button__icon {
  transition: color var(--pg-dur-fast) var(--pg-ease), transform var(--pg-dur) var(--pg-ease-out);
}
.account-button:hover .account-button__icon,
.account-button:hover svg {
  color: var(--pg-gold);
  transform: translateY(-1px);
}
.account-button__fallback {
  border: 1px solid var(--pg-hairline-strong);
  transition: border-color var(--pg-dur-fast) var(--pg-ease);
}
.account-button:hover .account-button__fallback {
  border-color: var(--pg-gold);
}

/* ============================================================
   36. LOCALIZATION SELECTOR
   ============================================================ */
.dropdown-localization__button,
.localization-selector {
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  transition: color var(--pg-dur-fast) var(--pg-ease);
}
.dropdown-localization__button:hover,
.localization-selector:hover {
  color: var(--pg-gold);
}
.localization-wrapper {
  border-radius: 4px;
  box-shadow: var(--pg-shadow-md);
  border-top: 1px solid var(--pg-gold-soft);
}
.dropdown-localization .icon-caret {
  transition: transform var(--pg-dur) var(--pg-ease-out);
}
.dropdown-localization[open] .icon-caret,
.dropdown-localization[aria-expanded="true"] .icon-caret {
  transform: rotate(180deg);
}

/* ============================================================
   37. ANNOUNCEMENT BAR
   Rationale: Thinner, more editorial type; gold hairline under;
   dismiss button circular.
   ============================================================ */
.announcement-bar {
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-size: 0.76rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  border-bottom: 1px solid rgba(185, 169, 119, 0.25);
}
.announcement-bar a {
  border-bottom: 1px solid rgba(185, 169, 119, 0.6);
  padding-bottom: 1px;
  transition: border-color var(--pg-dur-fast) var(--pg-ease), color var(--pg-dur-fast) var(--pg-ease);
}
.announcement-bar a:hover {
  border-bottom-color: var(--pg-gold);
  color: var(--pg-gold);
}

/* 38. Announcement slider — smoother ease */
.announcement-bar__slider,
.announcement-bar__slides {
  transition: transform var(--pg-dur-slow) var(--pg-ease-out);
}

/* 39. Announcement dismiss/close button */
.announcement-bar [class*="close"],
.announcement-bar button[aria-label*="lose"] {
  border-radius: 999px;
  width: 28px;
  height: 28px;
  transition: background-color var(--pg-dur-fast) var(--pg-ease), transform var(--pg-dur) var(--pg-ease-out);
}
.announcement-bar [class*="close"]:hover {
  background-color: rgba(248, 250, 239, 0.12);
  transform: rotate(90deg);
}

/* ============================================================
   40. FOOTER BACKGROUND — depth + subtle grain
   Rationale: Add a very low-opacity radial vignette so the
   footer feels grounded; no image asset required.
   ============================================================ */
.shopify-section-group-footer-group,
[data-section-id*="footer"] {
  position: relative;
  background-color: var(--pg-navy);
  background-image:
    radial-gradient(ellipse at top, rgba(185, 169, 119, 0.06), transparent 60%),
    linear-gradient(180deg, rgba(26, 28, 40, 0) 0%, rgba(26, 28, 40, 0.55) 100%);
}

/* 41. Grain veil via inline SVG noise */
.shopify-section-group-footer-group::before,
[data-section-id*="footer"]::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.035;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}

/* ============================================================
   42. FOOTER COLUMN HEADINGS — eyebrow treatment
   No underline rule (was creating extra horizontal lines).
   ============================================================ */
.footer-content h2,
.footer-content h3,
.footer-content h4,
.footer-content h6,
[data-section-id*="footer"] .linklist__title,
[data-section-id*="footer"] h3,
[data-section-id*="footer"] h6 {
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--pg-gold);
  padding-bottom: 0;
  border-bottom: 0;
  margin-bottom: 0.85rem;
}

/* ============================================================
   43. FOOTER LINK LISTS — typography + hover
   ============================================================ */
.footer-content a,
[data-section-id*="footer"] a {
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-size: 0.92rem;
  letter-spacing: 0.015em;
  color: rgba(248, 250, 239, 0.78);
  transition: color var(--pg-dur-fast) var(--pg-ease), padding-left var(--pg-dur) var(--pg-ease);
  text-decoration: none;
}
.footer-content a:hover,
[data-section-id*="footer"] a:hover {
  color: var(--pg-cream);
  padding-left: 3px;
}

/* 44. Link list vertical rhythm */
[data-section-id*="footer"] .linklist li,
[data-section-id*="footer"] ul li {
  padding-block: 0.35rem;
}

/* ============================================================
   45. FOOTER BRAND / LOGO TREATMENT
   ============================================================ */
[data-section-id*="footer"] [class*="logo"] img,
.footer-content [class*="logo"] img {
  filter: brightness(1.02) contrast(0.98);
  opacity: 0.95;
  transition: opacity var(--pg-dur) var(--pg-ease), transform var(--pg-dur) var(--pg-ease-out);
}
[data-section-id*="footer"] [class*="logo"]:hover img {
  opacity: 1;
  transform: translateY(-1px);
}

/* ============================================================
   46. FOOTER NEWSLETTER FORM
   Rationale: Flat input with gold underline focus; gold pill button.
   ============================================================ */
[data-section-id*="footer"] form input[type="email"],
[data-section-id*="footer"] .newsletter input[type="email"],
.footer-content input[type="email"] {
  background: transparent;
  border: none;
  border-bottom: 1px solid rgba(248, 250, 239, 0.3);
  border-radius: 0;
  color: var(--pg-cream);
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  letter-spacing: 0.02em;
  padding: 0.75rem 0;
  transition: border-color var(--pg-dur) var(--pg-ease), color var(--pg-dur) var(--pg-ease);
}
[data-section-id*="footer"] form input[type="email"]::placeholder,
.footer-content input[type="email"]::placeholder {
  color: rgba(248, 250, 239, 0.5);
  font-style: italic;
}
[data-section-id*="footer"] form input[type="email"]:focus,
.footer-content input[type="email"]:focus {
  outline: none;
  border-bottom-color: var(--pg-gold);
  color: var(--pg-cream);
}

/* 47. Newsletter submit button */
[data-section-id*="footer"] form button[type="submit"],
[data-section-id*="footer"] .newsletter button,
.footer-content form button[type="submit"] {
  background-color: var(--pg-gold);
  color: var(--pg-navy);
  border: 1px solid var(--pg-gold);
  border-radius: 999px;
  padding: 0.6rem 1.4rem;
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  transition: background-color var(--pg-dur-fast) var(--pg-ease), color var(--pg-dur-fast) var(--pg-ease), transform var(--pg-dur) var(--pg-ease-out);
}
[data-section-id*="footer"] form button[type="submit"]:hover {
  background-color: transparent;
  color: var(--pg-gold);
  transform: translateY(-1px);
}

/* 48. Newsletter success state */
[data-section-id*="footer"] form [class*="success"],
[data-section-id*="footer"] form [class*="--success"] {
  color: var(--pg-gold);
  font-style: italic;
}

/* ============================================================
   49. SOCIAL ICONS — circle outline, gold hover
   ============================================================ */
[data-section-id*="footer"] [class*="social"] a,
[data-section-id*="footer"] .social-media a,
.footer-content [class*="social"] a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 999px;
  border: 1px solid var(--pg-hairline-strong);
  color: var(--pg-cream);
  transition: border-color var(--pg-dur) var(--pg-ease), background-color var(--pg-dur) var(--pg-ease), color var(--pg-dur) var(--pg-ease), transform var(--pg-dur) var(--pg-ease-out);
}
[data-section-id*="footer"] [class*="social"] a:hover,
.footer-content [class*="social"] a:hover {
  border-color: var(--pg-gold);
  background-color: rgba(185, 169, 119, 0.12);
  color: var(--pg-gold);
  transform: translateY(-2px);
  padding-left: 0;  /* neutralize global link hover nudge */
}

/* ============================================================
   50. FOOTER COPYRIGHT ROW
   ============================================================ */
[data-section-id*="footer"] [class*="copyright"],
[data-section-id*="footer"] [class*="bottom-bar"],
.footer-content [class*="copyright"] {
  border-top: 1px solid var(--pg-hairline);
  padding-top: 1.25rem;
  margin-top: 2rem;
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(248, 250, 239, 0.55);
}

/* 51. Payment icons — monochrome, gentle */
[data-section-id*="footer"] [class*="payment"] img,
[data-section-id*="footer"] [class*="payment"] svg {
  filter: grayscale(100%) brightness(1.4) opacity(0.6);
  transition: filter var(--pg-dur) var(--pg-ease);
}
[data-section-id*="footer"] [class*="payment"]:hover img,
[data-section-id*="footer"] [class*="payment"]:hover svg {
  filter: grayscale(0%) brightness(1) opacity(1);
}

/* ============================================================
   52. FOOTER MOBILE ACCORDION — caret + hairlines
   ============================================================ */
@media (max-width: 749px) {
  [data-section-id*="footer"] details {
    border-bottom: 1px solid var(--pg-hairline);
  }
  [data-section-id*="footer"] details summary {
    padding-block: 1rem;
    position: relative;
    list-style: none;
    cursor: pointer;
  }
  [data-section-id*="footer"] details summary::-webkit-details-marker {
    display: none;
  }
  [data-section-id*="footer"] details summary::after {
    content: "+";
    position: absolute;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
    color: var(--pg-gold);
    font-size: 1.2rem;
    transition: transform var(--pg-dur) var(--pg-ease-out), content var(--pg-dur) var(--pg-ease);
  }
  [data-section-id*="footer"] details[open] summary::after {
    transform: translateY(-50%) rotate(45deg);
  }
}

/* ============================================================
   53. MOBILE STICKY BOTTOM NAV (if present)
   ============================================================ */
[class*="sticky-bottom-nav"],
[class*="mobile-bottom-bar"] {
  background-color: rgba(34, 36, 50, 0.94);
  backdrop-filter: blur(10px) saturate(130%);
  -webkit-backdrop-filter: blur(10px) saturate(130%);
  border-top: 1px solid var(--pg-hairline);
  box-shadow: 0 -8px 24px -12px rgba(10, 12, 22, 0.5);
}
[class*="sticky-bottom-nav"] a,
[class*="mobile-bottom-bar"] a {
  transition: color var(--pg-dur-fast) var(--pg-ease);
}
[class*="sticky-bottom-nav"] a:hover,
[class*="mobile-bottom-bar"] a:hover {
  color: var(--pg-gold);
}

/* ============================================================
   54. SKIP-TO-CONTENT LINK
   ============================================================ */
.skip-to-content-link,
[class*="skip-to-content"] {
  background-color: var(--pg-cream);
  color: var(--pg-navy);
  border: 1px solid var(--pg-gold);
  border-radius: 4px;
  padding: 0.6rem 1rem;
  font-family: var(--provis-body-font, "DM Sans", sans-serif);
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  box-shadow: var(--pg-shadow-md);
}
.skip-to-content-link:focus,
[class*="skip-to-content"]:focus {
  outline: 2px solid var(--pg-gold);
  outline-offset: 3px;
}

/* ============================================================
   55. PAGE TRANSITION FADE
   Rationale: Subtle fade-in on each page load so navigations
   feel softer. Pure CSS keyframe triggered by body.
   ============================================================ */
@keyframes pg-page-fade-in {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0); }
}
main,
[role="main"],
#MainContent {
  animation: pg-page-fade-in 360ms var(--pg-ease-out) both;
}

/* ============================================================
   56. SCROLL PROGRESS INDICATOR (if theme exposes one)
   ============================================================ */
[class*="scroll-progress"],
progress[class*="scroll"],
[data-scroll-progress] {
  height: 2px;
  background: transparent;
  accent-color: var(--pg-gold);
}
[class*="scroll-progress"]::-webkit-progress-bar,
progress[class*="scroll"]::-webkit-progress-bar {
  background: transparent;
}
[class*="scroll-progress"]::-webkit-progress-value,
progress[class*="scroll"]::-webkit-progress-value {
  background: linear-gradient(90deg, var(--pg-gold-soft), var(--pg-gold));
}
[class*="scroll-progress"]::-moz-progress-bar,
progress[class*="scroll"]::-moz-progress-bar {
  background: var(--pg-gold);
}

/* ============================================================
   57. FOCUS RINGS — brand-consistent across globals
   Rationale: Replace default browser focus with a gold ring
   scoped to header/footer so keyboard users see Provis color.
   ============================================================ */
.header a:focus-visible,
.header button:focus-visible,
.menu-drawer a:focus-visible,
.menu-drawer button:focus-visible,
[data-section-id*="footer"] a:focus-visible,
[data-section-id*="footer"] button:focus-visible,
.search-modal a:focus-visible,
.search-modal button:focus-visible {
  outline: 2px solid var(--pg-gold);
  outline-offset: 3px;
  border-radius: 2px;
}

/* ============================================================
   58. SELECTION COLOR inside header/footer
   ============================================================ */
.header ::selection,
[data-section-id*="footer"] ::selection,
.search-modal ::selection {
  background: var(--pg-gold);
  color: var(--pg-navy);
}

/* ============================================================
   59. REDUCED MOTION — respect user prefs
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .header,
  .header *,
  .menu-drawer,
  .menu-drawer *,
  .mega-menu,
  .mega-menu *,
  .search-modal,
  .search-modal *,
  [data-section-id*="footer"] *,
  main,
  [role="main"],
  #MainContent {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  main,
  [role="main"],
  #MainContent {
    animation: none !important;
  }
}

/* ============================================================
   60. PRINT — hide sticky/overlay globals, clean footer
   ============================================================ */
@media print {
  header-component,
  .header,
  .announcement-bar,
  [class*="sticky-bottom-nav"],
  .search-modal,
  .menu-drawer {
    display: none !important;
  }
  [data-section-id*="footer"] {
    background: none !important;
    color: #000 !important;
  }
  [data-section-id*="footer"] a {
    color: #000 !important;
  }
}

/* ============================================================
   61. UX AUDIT 2026-04-08 — tap target minimums, dead-space fixes
   Reason: Audit found multiple interactive elements under the
   44x44 WCAG 2.5.5 / AAA minimum on mobile, plus layout-shift
   dead space on PDP recommendations. Surgical fixes only.
   ============================================================ */

/* --- ADD buttons on coffee carousel: give them breathing room
       at all breakpoints (were 65x27 — too cramped even on desktop).
       Raised specificity via body: section inline styles load after
       this file so single-class selectors lose. */
body .pv-cc .pv-cc__card-add,
body .pv-cc--compact .pv-cc__card-add {
  min-height: 38px !important;
  padding: 10px 16px !important;
  font-size: 0.68rem !important;
}
@media (max-width: 749px) {
  body .pv-cc .pv-cc__card-add,
  body .pv-cc--compact .pv-cc__card-add {
    min-height: 44px !important;
    min-width: 88px !important;
    padding: 12px 18px !important;
  }
}

/* --- Tap targets: product card ADD buttons were 65x27 on mobile */
@media (max-width: 749px) {
  .pv-cc__card-add,
  .pv-cc__card-foot .button,
  .pv-cc__card-foot button,
  .product-card .button,
  .product-card button,
  .product-card a.button,
  [class*="product-card"] .button--primary,
  [class*="product-card"] button[type="submit"],
  [class*="product-card"] [class*="add-to-cart"],
  .resource-list__item .button,
  .resource-list__item button[type="submit"] {
    min-height: 44px !important;
    min-width: 44px !important;
    padding-block: 10px !important;
    padding-inline: 14px !important;
  }

  /* PDP quantity stepper buttons were 42x42 */
  body .shopify-section button.quantity-minus,
  body .shopify-section button.quantity-plus,
  body quantity-selector button,
  body .quantity-selector button,
  body [class*="quantity"] button[name="minus"],
  body [class*="quantity"] button[name="plus"] {
    min-height: 44px !important;
    min-width: 44px !important;
  }

  /* Dialog / overlay close buttons were 40x40 */
  button[aria-label="Close"],
  button.dialog__close,
  button.modal__close,
  .dialog button[data-close],
  [role="dialog"] button[aria-label*="lose"] {
    min-height: 44px !important;
    min-width: 44px !important;
  }
}

/* --- PDP product recommendations: kill the 948px stuck-skeleton
       dead-space. The skeleton is pre-rendered server-side for 3-4
       cards at ~240px each + padding. On slow networks users saw
       a full blank cream band; on page-unload screenshots it looked
       broken. Collapse skeleton height and hide if empty.           */
product-recommendations .product-recommendations__skeleton-item {
  min-height: 0 !important;
  aspect-ratio: auto !important;
  height: 180px !important;
}
product-recommendations.hidden,
product-recommendations[data-has-recommendations="false"],
.shopify-section:has(product-recommendations.hidden),
.shopify-section:has(product-recommendations[data-has-recommendations="false"]) {
  display: none !important;
}
/* If the recommendations element errors out and gets .hidden, also
   collapse its parent section's padding so no ghost band remains. */
.shopify-section:has(product-recommendations.hidden) {
  padding: 0 !important;
  margin: 0 !important;
}

/* --- PDP purchase buttons: ensure visible gap between Add to Cart
       and Buy It Now stacked CTAs on mobile (was touching on 375w). */
@media (max-width: 749px) {
  .shopify-section[id*="main"] .product-form,
  .shopify-section[id*="main"] product-form {
    row-gap: 12px !important;
  }
  .shopify-section[id*="main"] .product-form > *,
  .shopify-section[id*="main"] product-form > * {
    margin-block: 6px !important;
  }
  .shopify-section[id*="main"] [name="add"] + *,
  .shopify-section[id*="main"] .shopify-payment-button {
    margin-top: 10px !important;
  }
}

/* --- Collection-grid ADD hover: give ADD button a visible hover
       affordance (currently invisible on keyboard focus on desktop). */
@media (hover: hover) and (min-width: 750px) {
  .product-card .button:hover,
  .product-card button:hover,
  .resource-list__item .button:hover {
    transform: translateY(-1px);
    transition: transform 120ms ease-out, box-shadow 120ms ease-out;
    box-shadow: 0 4px 14px rgba(185, 169, 119, 0.28) !important;
  }
  .product-card .button:focus-visible,
  .product-card button:focus-visible,
  .resource-list__item .button:focus-visible {
    outline: 2px solid #B9A977 !important;
    outline-offset: 2px !important;
  }
}


/* ==========================================================================
   SOURCE: provis-polish-product.css
   ========================================================================== */

/* ══════════════════════════════════════════════════════════════════
   PROVIS — PRODUCT PAGE POLISH  (v3 — clean & simple)
   ------------------------------------------------------------------
   Clean, simple product page. No tile colors behind bags — just
   show the product photos. Hide Shop Pay. Fix nav/header spacing.

   Design: Tiller serif + DM Sans, Navy #222432, Cream #F8FAEF, Gold #B9A977
   ══════════════════════════════════════════════════════════════════ */


/* --- Page background ---
   Was #F8FAEF (cream) but that showed through on customer account
   pages (/a/subscriptions) between the main content and the footer,
   producing visible lighter-blue bands. Set to dark blue to match
   the footer; every Provis section has its own background so this
   only paints where nothing else does. */
body {
  background-color: #0d0f18 !important;
}
/* Main content area gets cream bg so pages without custom Provis
   sections (policies, contact, generic pages) are readable against
   a light background. The dark body bg only shows in the footer
   zone and any uncovered wrapper gaps. */
main, #MainContent, .content-for-layout {
  background-color: #F8FAEF !important;
}
/* Policy pages: hide the redundant auto-generated page title
   (Shopify renders both a template title AND the policy's own h1). */
.policy-header__title,
.shopify-policy__title:first-child {
  display: none !important;
}

/* --- Fix scroll jumping ---
   1. Disable smooth scroll (causes janky jumps during load)
   2. Kill all entrance animations on carousel elements
      (opacity:0 → 1 transitions cause layout shifts) */
html {
  scroll-behavior: auto !important;
}

/* Make all carousel elements visible immediately — no stagger reveal */
.pv-cc__eyebrow,
.pv-cc__heading,
.pv-cc__heading .pv-cc__word,
.pv-cc__desc,
.pv-cc__line,
.pv-cc__card,
.pv-cc__all,
.pv-cc__nav,
.pv-cc__intro-callout,
[data-pv-reveal] {
  opacity: 1 !important;
  transform: none !important;
  transition: none !important;
  animation: none !important;
}

/* Kill Ken Burns drift on hero images — causes repaint jank */
.pv-kenburns {
  animation: none !important;
  transform: none !important;
}

/* Kill word-reveal stagger animations */
.pv-words-reveal .pv-word {
  opacity: 1 !important;
  transform: none !important;
  transition: none !important;
}


/* --- Top clearance for sticky header + announcement bar --- */
.shopify-section[id*="main"] .product-information {
  padding-block-start: 260px !important;
  padding-block-end: 80px !important;
  max-width: 1200px !important;
  margin: 0 auto !important;
}
@media screen and (max-width: 749px) {
  .shopify-section[id*="main"] .product-information {
    padding-block-start: 160px !important;
    padding-block-end: 48px !important;
  }
}

/* --- Breathing room between product details blocks --- */
.shopify-section[id*="main"] .product-information .layout-panel-flex--column {
  gap: 28px !important;
}

/* --- Even columns with generous gap --- */
.shopify-section[id*="main"] .product-information__columns {
  gap: clamp(40px, 6vw, 80px) !important;
  align-items: center !important;
}

/* --- Center the product image vertically in its column --- */
.shopify-section[id*="main"] .product-information__media {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
}


/* --- Media gallery: clean white/cream background, no tile color --- */
.shopify-section[id*="main"] .product-media-gallery,
.shopify-section[id*="main"] [class*="product-media-gallery"],
.shopify-section[id*="main"] .product-media-container,
.shopify-section[id*="main"] .product-media {
  background: #F8FAEF !important;
}
.shopify-section[id*="main"] .product-media-container .product-media img,
.shopify-section[id*="main"] .product-media img,
.shopify-section[id*="main"] .product-media__image {
  object-fit: contain !important;
  padding: clamp(12px, 2vw, 28px);
  mix-blend-mode: normal !important;
  filter: none !important;
  background: transparent !important;
}


/* --- Thumbnail refinement --- */
.shopify-section[id*="main"] [class*="thumbnail"] button,
.shopify-section[id*="main"] .product-media-gallery__thumbnail {
  border: 1px solid rgba(34, 36, 50, 0.10) !important;
  border-radius: 2px !important;
  overflow: hidden;
  transition: border-color 0.25s ease !important;
  opacity: 0.75;
}
.shopify-section[id*="main"] [class*="thumbnail"] button:hover,
.shopify-section[id*="main"] .product-media-gallery__thumbnail:hover {
  opacity: 1;
  border-color: rgba(34, 36, 50, 0.3) !important;
}
.shopify-section[id*="main"] [class*="thumbnail"][aria-current="true"],
.shopify-section[id*="main"] [class*="thumbnail"] [aria-current="true"] {
  border-color: #B9A977 !important;
  opacity: 1;
}


/* --- Product title --- */
.shopify-section[id*="main"] h1 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 800 !important;
  font-size: clamp(1.8rem, 3vw, 2.6rem) !important;
  line-height: 1.08 !important;
  letter-spacing: -0.02em !important;
  color: #222432 !important;
  margin: 0 0 4px !important;
}


/* --- Price --- */
.shopify-section[id*="main"] .price [class*="compare"],
.shopify-section[id*="main"] .price s,
.shopify-section[id*="main"] .price del {
  color: rgba(34, 36, 50, 0.4) !important;
  text-decoration: line-through !important;
  margin-right: 8px !important;
}


/* --- Variant picker --- */
.shopify-section[id*="main"] variant-picker label:hover,
.shopify-section[id*="main"] [class*="variant-picker"] label:hover {
  border-color: #222432 !important;
  background: rgba(34, 36, 50, 0.03) !important;
}
.shopify-section[id*="main"] variant-picker label,
.shopify-section[id*="main"] [class*="variant-picker"] label {
  min-width: 68px !important;
  text-align: center !important;
}
.shopify-section[id*="main"] variant-picker fieldset,
.shopify-section[id*="main"] [class*="variant-picker__option"] {
  margin-bottom: 20px !important;
}
.shopify-section[id*="main"] variant-picker input:disabled + label,
.shopify-section[id*="main"] [class*="variant-picker"] input:disabled + label {
  color: rgba(34, 36, 50, 0.25) !important;
  border-color: rgba(34, 36, 50, 0.06) !important;
  cursor: not-allowed !important;
}


/* --- Quantity selector --- */
.shopify-section[id*="main"] quantity-input,
.shopify-section[id*="main"] [class*="quantity-selector"] {
  min-height: 52px !important;
}


/* --- Add-to-cart press state --- */
.shopify-section[id*="main"] .add-to-cart-button:active,
.shopify-section[id*="main"] button[name="add"]:active {
  transform: translateY(0) !important;
  box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.12) !important;
}


/* --- HIDE SHOP PAY + ACCELERATED CHECKOUT ---
   Payments not configured yet. The purple Shop Pay button clashes. */
.accelerated-checkout-block,
.shopify-payment-button,
.shopify-payment-button__button,
.dynamic-checkout__buttons,
shopify-accelerated-checkout,
[class*="accelerated-checkout"],
[class*="additional-checkout"],
[class*="shopify-payment-button"] {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
  overflow: hidden !important;
  margin: 0 !important;
  padding: 0 !important;
}


/* --- HIDE PAYMENT TERMS ("View payment details") --- */
shopify-payment-terms,
.shopify-payment-terms,
[class*="payment-terms"],
more-payment-options-link,
.shopify-payment-button__more-options {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}


/* --- Product description: format the TASTING NOTES / ORIGIN / DETAILS --- */
.shopify-section[id*="main"] .rte p,
.shopify-section[id*="main"] [class*="product-description"] p {
  margin: 0 0 1em !important;
}
.shopify-section[id*="main"] .rte a {
  color: #222432 !important;
  text-decoration: none !important;
  border-bottom: 1px solid #B9A977;
  transition: color 0.2s ease !important;
}
.shopify-section[id*="main"] .rte a:hover {
  color: #B9A977 !important;
}


/* --- Shipping note --- */
.shopify-section[id*="main"] .rte + .rte,
.shopify-section[id*="main"] [class*="block__text"]:last-child .rte {
  color: rgba(34, 36, 50, 0.55) !important;
}


/* --- "You Might Also Like" now uses provis-coffee-carousel tiles ---
   No extra CSS needed — carousel handles its own styling. */


/* --- Hide Account text globally, show only icon --- */
shopify-account .account-button__text,
.account-button__text,
[class*="account"] [class*="text-style"],
.account-button--text {
  display: none !important;
}
/* Style the account icon to match nav */
.account-button {
  font-size: 0 !important;
}
.account-button svg,
.account-button .svg-wrapper {
  font-size: initial !important;
  width: 22px !important;
  height: 22px !important;
}
/* Hide the "A" circle avatar Shopify renders and show just the SVG */
shopify-account [class*="avatar-initial"] {
  display: none !important;
}


/* --- Remove tile-color override on PDP ---
   The carousel uses tile colors behind bag images, but the PDP
   should just show the bag photo on a clean cream background. */
.shopify-section[id*="main"] .product-information__media {
  --pv-tile-bg: #F8FAEF !important;
}


/* ==========================================================================
   SOURCE: provis-polish-cart.css
   ========================================================================== */

/* ═══════════════════════════════════════════════════════════════
   PROVIS — CART PAGE
   Light, clean, minimal. Don't fight the native table layout.
   ═══════════════════════════════════════════════════════════════ */

/* --- White canvas --- */
.shopify-section[id*="cart"] .section-background,
.shopify-section[id*="cart"] .section {
  background: #FFFFFF !important;
}

/* --- Header clearance --- */
.shopify-section[id*="cart"] .cart-page {
  padding-top: 60px !important;
}
@media (max-width: 749px) {
  .shopify-section[id*="cart"] .cart-page {
    padding-top: 40px !important;
  }
}

/* --- Title: hide the count bubble icon --- */
.shopify-section[id*="cart"] .cart-title {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 800 !important;
  color: #222432 !important;
}
.shopify-section[id*="cart"] .cart-title .cart-count,
.shopify-section[id*="cart"] .cart-title [class*="bubble"],
.shopify-section[id*="cart"] .cart-title cart-bubble {
  display: none !important;
}

/* --- Row dividers: light --- */
.shopify-section[id*="cart"] .cart-items--dividers .cart-items__table-row {
  border-color: rgba(34, 36, 50, 0.07) !important;
}

/* --- Product title --- */
.shopify-section[id*="cart"] .cart-items__title {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  color: #222432 !important;
  text-decoration: none !important;
}

/* --- Image container --- */
.shopify-section[id*="cart"] .cart-items__media-container {
  background: #F8FAEF !important;
  border-radius: 4px !important;
}

/* --- Price --- */
.shopify-section[id*="cart"] .cart-items__price {
  font-family: 'Tiller', Georgia, serif !important;
  color: #222432 !important;
}

/* --- Quantity stepper --- */
.shopify-section[id*="cart"] .quantity-selector {
  border-color: rgba(34, 36, 50, 0.12) !important;
  border-radius: 4px !important;
}

/* --- Remove button --- */
.shopify-section[id*="cart"] .cart-items__remove {
  color: rgba(34, 36, 50, 0.35) !important;
}
.shopify-section[id*="cart"] .cart-items__remove:hover {
  color: #c44 !important;
}

/* --- Summary card --- */
.shopify-section[id*="cart"] .cart-summary {
  background: #F8F6F0 !important;
  border: 1px solid rgba(34, 36, 50, 0.06) !important;
  border-radius: 8px !important;
}

/* --- Checkout button --- */
.shopify-section[id*="cart"] [name="checkout"] {
  background: #222432 !important;
  color: #F8FAEF !important;
  border: none !important;
  border-radius: 4px !important;
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  letter-spacing: 0.12em !important;
  text-transform: uppercase !important;
}
.shopify-section[id*="cart"] [name="checkout"]:hover {
  background: #B9A977 !important;
  color: #222432 !important;
}

/* --- Hide Shop Pay --- */
.shopify-section[id*="cart"] [class*="accelerated-checkout"],
.shopify-section[id*="cart"] .shopify-payment-button,
.shopify-section[id*="cart"] shopify-accelerated-checkout,
.shopify-section[id*="cart"] [class*="additional-checkout"],
.shopify-section[id*="cart"] shopify-payment-terms {
  display: none !important;
}

/* --- Empty state --- */
.shopify-section[id*="cart"] .cart-page--empty {
  padding-top: 220px !important;
  text-align: center !important;
}


/* ==========================================================================
   SOURCE: provis-polish-collection.css
   ========================================================================== */

/* ============================================================
   PROVIS — COLLECTION + BROWSE POLISH PASS
   ------------------------------------------------------------
   Additive-only CSS layer for collection pages.
   DO NOT edit templates, liquid, or copy. Load AFTER provis-brand.css.

   Brand tokens:
     --pv-navy:  #222432
     --pv-cream: #F8FAEF
     --pv-gold:  #B9A977
     Fonts: Tiller (headings), DM Sans (body)

   Scoped to:
     - Horizon native: .shopify-section[id*="main-collection"]
     - Provis custom:  .provis-collection-hero,
                       .provis-shop-by-profile,
                       .provis-reserve-spotlight,
                       .provis-producer-spotlight,
                       .provis-process-steps
   ============================================================ */

:root {
  --pv-navy: #222432;
  --pv-cream: #F8FAEF;
  --pv-gold: #B9A977;
  --pv-gold-soft: rgba(185, 169, 119, 0.14);
  --pv-navy-hairline: rgba(34, 36, 50, 0.12);
  --pv-cream-hairline: rgba(248, 250, 239, 0.14);
  --pv-ease: cubic-bezier(0.22, 1, 0.36, 1);
}

/* ============================================================
   1. COLLECTION HERO — image treatment, rhythm, badges
   ============================================================ */

/* 1a. Softer film-grain vignette over hero image for depth */
.provis-collection-hero [class*="pv-ch-bg"]::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse at center, transparent 40%, rgba(0, 0, 0, 0.28) 100%),
    linear-gradient(180deg, rgba(34, 36, 50, 0.15) 0%, transparent 25%);
  pointer-events: none;
  z-index: 1;
  mix-blend-mode: multiply;
}

/* 1b. Eyebrow: tighter tracking rhythm, subtle gold underline flourish */
.provis-collection-hero [class*="pv-ch-eyebrow"] {
  font-feature-settings: "ss01", "liga";
  opacity: 0.95;
}
.provis-collection-hero [class*="pv-ch-eyebrow"]::before,
.provis-collection-hero [class*="pv-ch-eyebrow"]::after {
  content: "";
  display: inline-block;
  width: 28px;
  height: 1px;
  background: var(--pv-gold);
  opacity: 0.55;
  vertical-align: middle;
}

/* 1c. H1 refinement — softer optical letter-spacing on large sizes */
.provis-collection-hero h1 {
  text-wrap: balance;
  text-shadow: 0 2px 24px rgba(0, 0, 0, 0.25);
}

/* 1d. Description — literary voice, slightly warmer text tone */
.provis-collection-hero [class*="pv-ch-description"] {
  font-feature-settings: "ss01", "liga", "kern";
  text-wrap: pretty;
}

/* 1e. Badge row — hairline chip style, hover lift */
.provis-collection-hero [class*="pv-ch-badge"] {
  padding: 8px 14px;
  border: 1px solid rgba(185, 169, 119, 0.32);
  border-radius: 999px;
  background: rgba(248, 250, 239, 0.04);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  transition: border-color 0.35s var(--pv-ease), background 0.35s var(--pv-ease), transform 0.35s var(--pv-ease);
}
.provis-collection-hero [class*="pv-ch-badge"]:hover {
  border-color: var(--pv-gold);
  background: rgba(185, 169, 119, 0.12);
  transform: translateY(-1px);
}

/* 1f. Gold divider — subtle shimmer animation on enter */
.provis-collection-hero [class*="pv-ch-divider"] {
  background: linear-gradient(90deg, transparent, var(--pv-gold) 50%, transparent);
  box-shadow: 0 0 12px rgba(185, 169, 119, 0.4);
}

/* ============================================================
   2. SHOP-BY-PROFILE PILLS — rhythm, hierarchy, hover
   ============================================================ */

/* 2a. Section rhythm — add more breathing room between group label and pills */
.provis-shop-by-profile [class*="pv-shopby-group"] h3 {
  position: relative;
  padding-bottom: 10px;
  margin-bottom: 14px;
}
.provis-shop-by-profile [class*="pv-shopby-group"] h3::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 24px;
  height: 1px;
  background: var(--pv-gold);
  opacity: 0.4;
}

/* 2b. Pills — refined typography, serif-inflected feel */
.provis-shop-by-profile [class*="pv-shopby-pill"] {
  font-family: "DM Sans", -apple-system, sans-serif;
  letter-spacing: 0.02em;
  font-weight: 500;
  transition:
    background 0.28s var(--pv-ease),
    border-color 0.28s var(--pv-ease),
    color 0.28s var(--pv-ease),
    transform 0.28s var(--pv-ease),
    box-shadow 0.28s var(--pv-ease);
}

/* 2c. Pill hover — gold fill + soft shadow */
.provis-shop-by-profile [class*="pv-shopby-pill"]:hover {
  box-shadow: 0 6px 18px -8px rgba(185, 169, 119, 0.45);
}

/* 2d. Pill focus state — accessibility polish */
.provis-shop-by-profile [class*="pv-shopby-pill"]:focus-visible {
  outline: 2px solid var(--pv-gold);
  outline-offset: 2px;
}

/* 2e. Group gap rhythm — tighten on narrow screens for cleaner row wraps */
@media (min-width: 721px) and (max-width: 1100px) {
  .provis-shop-by-profile [class*="pv-shopby-row"] {
    gap: 24px 36px;
  }
}

/* ============================================================
   3. FILTER SIDEBAR / FACETS (Horizon native)
   ============================================================ */

/* 3a. Facet group headings — Tiller serif, uppercase rhythm */
.shopify-section[id*="main-collection"] [class*="facets"] summary,
.shopify-section[id*="main-collection"] [class*="facets"] legend,
.shopify-section[id*="main-collection"] [class*="facets"] h3,
.shopify-section[id*="main-collection"] [class*="filters__header"] {
  font-family: "Tiller", Georgia, serif !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  font-size: 0.78rem !important;
  font-weight: 600 !important;
  color: var(--pv-navy) !important;
}

/* 3b. Filter chips (checkbox / label rows) — hairline rule hover */
.shopify-section[id*="main-collection"] [class*="facets"] label,
.shopify-section[id*="main-collection"] [class*="filter"] label {
  transition: color 0.2s var(--pv-ease), background 0.2s var(--pv-ease);
  border-radius: 4px;
}
.shopify-section[id*="main-collection"] [class*="facets"] label:hover,
.shopify-section[id*="main-collection"] [class*="filter"] label:hover {
  background: var(--pv-gold-soft);
  color: var(--pv-navy) !important;
}

/* 3c. Facet count badges — muted, tabular numerals */
.shopify-section[id*="main-collection"] [class*="facets"] [class*="count"],
.shopify-section[id*="main-collection"] [class*="facets"] small {
  font-variant-numeric: tabular-nums;
  color: rgba(34, 36, 50, 0.5) !important;
  font-size: 0.72rem !important;
  letter-spacing: 0.02em;
}

/* 3d. Active filter state — gold pill */
.shopify-section[id*="main-collection"] [class*="facets"] [aria-pressed="true"],
.shopify-section[id*="main-collection"] [class*="facets"] [class*="active-facet"],
.shopify-section[id*="main-collection"] [class*="facets"] input:checked + label {
  background: var(--pv-gold) !important;
  color: var(--pv-navy) !important;
  border-color: var(--pv-gold) !important;
}

/* 3e. Active filter chips row (removable) */
.shopify-section[id*="main-collection"] [class*="active-facets"] a,
.shopify-section[id*="main-collection"] [class*="active-facets"] button {
  border: 1px solid var(--pv-gold) !important;
  background: rgba(185, 169, 119, 0.1) !important;
  color: var(--pv-navy) !important;
  border-radius: 999px !important;
  padding: 6px 12px !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.02em !important;
  transition: all 0.25s var(--pv-ease);
}
.shopify-section[id*="main-collection"] [class*="active-facets"] a:hover,
.shopify-section[id*="main-collection"] [class*="active-facets"] button:hover {
  background: var(--pv-gold) !important;
  color: var(--pv-navy) !important;
}

/* ============================================================
   4. SORT DROPDOWN
   ============================================================ */

/* 4a. Sort select — refined border, serif label rhythm */
.shopify-section[id*="main-collection"] [class*="sort"] select,
.shopify-section[id*="main-collection"] select[name*="sort"] {
  font-family: "DM Sans", sans-serif !important;
  font-size: 0.85rem !important;
  letter-spacing: 0.02em !important;
  padding: 10px 36px 10px 14px !important;
  border: 1px solid var(--pv-navy-hairline) !important;
  border-radius: 2px !important;
  background-color: transparent !important;
  color: var(--pv-navy) !important;
  transition: border-color 0.25s var(--pv-ease);
  cursor: pointer;
}
.shopify-section[id*="main-collection"] [class*="sort"] select:hover,
.shopify-section[id*="main-collection"] select[name*="sort"]:hover {
  border-color: var(--pv-gold) !important;
}
.shopify-section[id*="main-collection"] [class*="sort"] select:focus-visible {
  outline: 2px solid var(--pv-gold);
  outline-offset: 2px;
  border-color: var(--pv-gold) !important;
}

/* 4b. Sort label — tiller uppercase micro-label */
.shopify-section[id*="main-collection"] [class*="sort"] label,
.shopify-section[id*="main-collection"] label[for*="sort"] {
  font-family: "Tiller", Georgia, serif !important;
  font-size: 0.72rem !important;
  text-transform: uppercase !important;
  letter-spacing: 0.18em !important;
  color: rgba(34, 36, 50, 0.6) !important;
}

/* ============================================================
   5. VIEW TOGGLES (grid / list / density)
   ============================================================ */

.shopify-section[id*="main-collection"] [class*="grid-density"] button,
.shopify-section[id*="main-collection"] [class*="view-toggle"] button {
  border: 1px solid var(--pv-navy-hairline) !important;
  background: transparent !important;
  color: rgba(34, 36, 50, 0.55) !important;
  transition: all 0.22s var(--pv-ease);
  border-radius: 2px !important;
}
.shopify-section[id*="main-collection"] [class*="grid-density"] button:hover,
.shopify-section[id*="main-collection"] [class*="view-toggle"] button:hover {
  color: var(--pv-navy) !important;
  border-color: var(--pv-gold) !important;
}
.shopify-section[id*="main-collection"] [class*="grid-density"] button[aria-pressed="true"],
.shopify-section[id*="main-collection"] [class*="view-toggle"] button[aria-pressed="true"],
.shopify-section[id*="main-collection"] [class*="grid-density"] button.is-active {
  color: var(--pv-navy) !important;
  border-color: var(--pv-gold) !important;
  background: var(--pv-gold-soft) !important;
}

/* ============================================================
   6. PRODUCT CARDS IN COLLECTION GRID — Horizon native
   ============================================================ */

/* 6a. Card container — hairline frame, soft entrance */
.shopify-section[id*="main-collection"] product-card {
  position: relative;
  transition: transform 0.5s var(--pv-ease), box-shadow 0.5s var(--pv-ease);
}

/* 6b. Hover lift — subtle navy-tinted shadow */
.shopify-section[id*="main-collection"] product-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 20px 40px -24px rgba(34, 36, 50, 0.22);
}

/* 6c. Card image — consistent ratio, warm brand grade */
.shopify-section[id*="main-collection"] product-card [class*="product-card__image"],
.shopify-section[id*="main-collection"] product-card [class*="media"] img {
  transition:
    transform 0.9s var(--pv-ease),
    filter 0.6s var(--pv-ease) !important;
}
.shopify-section[id*="main-collection"] product-card:hover [class*="product-card__image"],
.shopify-section[id*="main-collection"] product-card:hover [class*="media"] img {
  transform: scale(1.035);
  filter: brightness(0.96) contrast(1.04) saturate(0.98);
}

/* 6d. Second-image swap on hover — fade in softly where supported */
.shopify-section[id*="main-collection"] product-card [class*="product-card__image"]:nth-of-type(2),
.shopify-section[id*="main-collection"] product-card [class*="secondary-image"] {
  opacity: 0;
  transition: opacity 0.6s var(--pv-ease);
}
.shopify-section[id*="main-collection"] product-card:hover [class*="product-card__image"]:nth-of-type(2),
.shopify-section[id*="main-collection"] product-card:hover [class*="secondary-image"] {
  opacity: 1;
}

/* 6e. Product title — Tiller serif, tightened leading */
.shopify-section[id*="main-collection"] product-card [class*="product-title"],
.shopify-section[id*="main-collection"] product-card a[class*="title"] {
  font-family: "Tiller", Georgia, serif !important;
  letter-spacing: -0.005em !important;
  line-height: 1.25 !important;
  text-wrap: balance;
  transition: color 0.3s var(--pv-ease);
}
.shopify-section[id*="main-collection"] product-card:hover [class*="product-title"],
.shopify-section[id*="main-collection"] product-card:hover a[class*="title"] {
  color: var(--pv-gold);
}

/* 6f. Price — tabular nums, subdued */
.shopify-section[id*="main-collection"] product-card [class*="price"] {
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.01em;
}

/* 6g. Product card badges (sale / new / sold out) — hairline gold chip */
.shopify-section[id*="main-collection"] product-card [class*="badge"],
.shopify-section[id*="main-collection"] product-card [class*="product-card__badge"] {
  font-family: "Tiller", Georgia, serif !important;
  font-size: 0.66rem !important;
  letter-spacing: 0.18em !important;
  text-transform: uppercase !important;
  padding: 5px 10px !important;
  border-radius: 2px !important;
  background: var(--pv-cream) !important;
  color: var(--pv-navy) !important;
  border: 1px solid var(--pv-gold) !important;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}

/* ============================================================
   7. QUICK-ADD BUTTON (cards) — appear on hover
   ============================================================ */

/* Compact icon-only quick-add button on tiles — sits in corner of card */
.shopify-section[id*="main-collection"] product-card [class*="quick-add"] {
  width: auto !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  position: absolute !important;
  bottom: 12px !important;
  right: 12px !important;
  z-index: 4;
  pointer-events: auto;
}
.shopify-section[id*="main-collection"] product-card [class*="quick-add"] button,
.shopify-section[id*="main-collection"] product-card quick-add-modal button {
  width: 36px !important;
  height: 36px !important;
  min-width: 36px !important;
  min-height: 36px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 0 !important;
  font-size: 0 !important;
  border: 1px solid rgba(34,36,50,0.18) !important;
  background: rgba(248,250,239,0.96) !important;
  color: var(--pv-navy) !important;
  border-radius: 50% !important;
  padding: 0 !important;
  box-shadow: 0 4px 12px rgba(34,36,50,0.18) !important;
  backdrop-filter: blur(6px) !important;
  -webkit-backdrop-filter: blur(6px) !important;
  transition: all 0.25s var(--pv-ease);
}
.shopify-section[id*="main-collection"] product-card [class*="quick-add"] button:hover,
.shopify-section[id*="main-collection"] product-card quick-add-modal button:hover {
  background: var(--pv-gold, #B9A977) !important;
  border-color: var(--pv-gold, #B9A977) !important;
  transform: scale(1.08);
}
.shopify-section[id*="main-collection"] product-card [class*="quick-add"] button svg,
.shopify-section[id*="main-collection"] product-card quick-add-modal button svg {
  width: 16px !important;
  height: 16px !important;
  display: block !important;
}
/* Hide any text label inside the icon button */
.shopify-section[id*="main-collection"] product-card [class*="quick-add"] button > span:not([class*="visually-hidden"]) {
  display: none !important;
}
/* Make sure the parent product card has position relative so absolute child positions correctly */
.shopify-section[id*="main-collection"] product-card,
.shopify-section[id*="main-collection"] product-card [class*="product-card"] {
  position: relative !important;
}
.shopify-section[id*="main-collection"] product-card [class*="quick-add"] button:hover,
.shopify-section[id*="main-collection"] product-card quick-add-modal button:hover {
  background: var(--pv-navy) !important;
  color: var(--pv-cream) !important;
  border-color: var(--pv-navy) !important;
}

/* 7a. On desktop, only reveal quick-add on card hover */
@media (hover: hover) and (min-width: 750px) {
  .shopify-section[id*="main-collection"] product-card [class*="quick-add"] {
    opacity: 0;
    transform: translateY(6px);
    transition: opacity 0.35s var(--pv-ease), transform 0.35s var(--pv-ease);
  }
  .shopify-section[id*="main-collection"] product-card:hover [class*="quick-add"],
  .shopify-section[id*="main-collection"] product-card:focus-within [class*="quick-add"] {
    opacity: 1;
    transform: translateY(0);
  }
}

/* ============================================================
   8. COLOR / VARIANT SWATCHES ON CARDS (if present)
   ============================================================ */

.shopify-section[id*="main-collection"] product-card [class*="swatch"] {
  border: 1px solid var(--pv-navy-hairline) !important;
  transition: transform 0.25s var(--pv-ease), border-color 0.25s var(--pv-ease),
    box-shadow 0.25s var(--pv-ease);
}
.shopify-section[id*="main-collection"] product-card [class*="swatch"]:hover {
  transform: scale(1.08);
  border-color: var(--pv-gold) !important;
}
.shopify-section[id*="main-collection"] product-card [class*="swatch"][aria-checked="true"],
.shopify-section[id*="main-collection"] product-card [class*="swatch"].is-selected {
  border-color: var(--pv-gold) !important;
  box-shadow: 0 0 0 2px var(--pv-cream), 0 0 0 3px var(--pv-gold);
}

/* ============================================================
   9. PAGINATION CONTROLS
   ============================================================ */

.shopify-section[id*="main-collection"] [class*="pagination"] {
  font-family: "Tiller", Georgia, serif;
  letter-spacing: 0.04em;
}
.shopify-section[id*="main-collection"] [class*="pagination"] a,
.shopify-section[id*="main-collection"] [class*="pagination"] span,
.shopify-section[id*="main-collection"] [class*="pagination"] button {
  font-variant-numeric: tabular-nums;
  min-width: 40px;
  min-height: 40px;
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  border-radius: 2px;
  transition: all 0.22s var(--pv-ease);
  color: var(--pv-navy);
}
.shopify-section[id*="main-collection"] [class*="pagination"] a:hover,
.shopify-section[id*="main-collection"] [class*="pagination"] button:hover {
  background: var(--pv-gold-soft);
  color: var(--pv-navy);
}
.shopify-section[id*="main-collection"] [class*="pagination"] [aria-current="page"],
.shopify-section[id*="main-collection"] [class*="pagination"] .is-active {
  background: var(--pv-navy) !important;
  color: var(--pv-cream) !important;
  border: 1px solid var(--pv-navy) !important;
}

/* 9a. Prev / next arrows — hairline circle */
.shopify-section[id*="main-collection"] [class*="pagination"] [rel="prev"],
.shopify-section[id*="main-collection"] [class*="pagination"] [rel="next"] {
  border: 1px solid var(--pv-navy-hairline);
}
.shopify-section[id*="main-collection"] [class*="pagination"] [rel="prev"]:hover,
.shopify-section[id*="main-collection"] [class*="pagination"] [rel="next"]:hover {
  border-color: var(--pv-gold);
  background: var(--pv-gold-soft);
}

/* ============================================================
   10. LOAD MORE BUTTON (if present)
   ============================================================ */

.shopify-section[id*="main-collection"] [class*="load-more"] button,
.shopify-section[id*="main-collection"] button[class*="load-more"] {
  font-family: "Tiller", Georgia, serif !important;
  font-size: 0.8rem !important;
  letter-spacing: 0.2em !important;
  text-transform: uppercase !important;
  border: 1.5px solid var(--pv-navy) !important;
  background: transparent !important;
  color: var(--pv-navy) !important;
  padding: 16px 40px !important;
  border-radius: 2px !important;
  transition: all 0.35s var(--pv-ease);
}
.shopify-section[id*="main-collection"] [class*="load-more"] button:hover,
.shopify-section[id*="main-collection"] button[class*="load-more"]:hover {
  background: var(--pv-navy) !important;
  color: var(--pv-cream) !important;
}
.shopify-section[id*="main-collection"] [class*="load-more"] button[aria-busy="true"],
.shopify-section[id*="main-collection"] [class*="load-more"] button.is-loading {
  opacity: 0.7;
  position: relative;
}

/* ============================================================
   11. EMPTY RESULTS STATE
   ============================================================ */

.shopify-section[id*="main-collection"] [class*="empty"],
.shopify-section[id*="main-collection"] [class*="no-results"] {
  text-align: center;
  padding: 80px 24px;
}
.shopify-section[id*="main-collection"] [class*="empty"] h2,
.shopify-section[id*="main-collection"] [class*="empty"] h3,
.shopify-section[id*="main-collection"] [class*="no-results"] h2 {
  font-family: "Tiller", Georgia, serif !important;
  font-size: clamp(1.4rem, 2.4vw, 1.9rem) !important;
  color: var(--pv-navy) !important;
  margin-bottom: 16px !important;
}
.shopify-section[id*="main-collection"] [class*="empty"] p,
.shopify-section[id*="main-collection"] [class*="no-results"] p {
  color: rgba(34, 36, 50, 0.6) !important;
  max-width: 480px;
  margin: 0 auto 24px !important;
  line-height: 1.7;
}
.shopify-section[id*="main-collection"] [class*="empty"] a,
.shopify-section[id*="main-collection"] [class*="empty"] button {
  border: 1.5px solid var(--pv-gold) !important;
  color: var(--pv-navy) !important;
  padding: 14px 32px !important;
  font-family: "Tiller", Georgia, serif !important;
  text-transform: uppercase !important;
  letter-spacing: 0.18em !important;
  font-size: 0.78rem !important;
  transition: all 0.3s var(--pv-ease);
}
.shopify-section[id*="main-collection"] [class*="empty"] a:hover,
.shopify-section[id*="main-collection"] [class*="empty"] button:hover {
  background: var(--pv-gold) !important;
  color: var(--pv-navy) !important;
}

/* ============================================================
   12. RESERVE COLLECTION — premium gold treatment overrides
   ============================================================ */

/* 12a. When on the reserve collection template, tint product cards warmer */
body.template-collection [class*="collection--reserve"] product-card,
.shopify-section[id*="main-collection"] [data-collection-handle="reserve"] product-card {
  background: transparent;
}

/* 12b. Reserve spotlight — deeper glow + gold border emphasis */
.provis-reserve-spotlight .pv-reserve__card-img-wrap {
  box-shadow: 0 10px 50px -10px rgba(0, 0, 0, 0.45);
}
.provis-reserve-spotlight .pv-reserve__card:hover .pv-reserve__card-img-wrap {
  box-shadow: 0 20px 70px -10px rgba(185, 169, 119, 0.32);
}

/* 12c. Reserve eyebrow — letter-spacing polish */
.provis-reserve-spotlight .pv-reserve__eyebrow {
  font-feature-settings: "ss01", "liga";
}

/* 12d. Reserve card price — tabular alignment */
.provis-reserve-spotlight .pv-reserve__price {
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.03em;
}

/* 12e. Reserve stock chip — refined pulse on low stock */
.provis-reserve-spotlight .pv-reserve__stock--low {
  animation: pv-reserve-pulse 3.2s var(--pv-ease) infinite;
}
@keyframes pv-reserve-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.65; }
}

/* ============================================================
   13. PRODUCER SPOTLIGHT — hairline rules, hierarchy
   ============================================================ */

/* 13a. Producer image — subtle duotone warm grade */
.provis-producer-spotlight .pv-producer-img img {
  filter: saturate(0.92) contrast(1.04) brightness(0.98);
  transition: transform 1.2s var(--pv-ease), filter 0.6s var(--pv-ease);
}
.provis-producer-spotlight .pv-producer-img:hover img {
  transform: scale(1.03);
  filter: saturate(1) contrast(1.05) brightness(1);
}

/* 13b. Producer image — top + bottom hairline accents */
.provis-producer-spotlight .pv-producer-img {
  position: relative;
}
.provis-producer-spotlight .pv-producer-img::before,
.provis-producer-spotlight .pv-producer-img::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  height: 1px;
  background: var(--pv-gold);
  opacity: 0.5;
  z-index: 2;
}
.provis-producer-spotlight .pv-producer-img::before { top: 0; }
.provis-producer-spotlight .pv-producer-img::after { bottom: 0; }

/* 13c. Producer heading — Tiller italic accent on em */
.provis-producer-spotlight h2 {
  font-family: "Tiller", Georgia, serif;
  text-wrap: balance;
  letter-spacing: -0.01em;
}

/* 13d. Producer location — add leading pin glyph */
.provis-producer-spotlight .pv-producer-location::before {
  content: "◆ ";
  color: var(--pv-gold);
  margin-right: 6px;
  opacity: 0.7;
}

/* ============================================================
   14. PROCESS STEPS — number design, dividers, hover
   ============================================================ */

/* 14a. Step number — gradient gold, thin underline */
.provis-process-steps .pv-step-num {
  background: linear-gradient(180deg, var(--pv-gold) 0%, rgba(185, 169, 119, 0.75) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  position: relative;
  display: inline-block;
  padding-bottom: 12px;
}
.provis-process-steps .pv-step-num::after {
  display: none;
}

/* 14b. Step hover — subtle lift + gold shift on title */
.provis-process-steps .pv-step {
  transition: transform 0.5s var(--pv-ease);
}
.provis-process-steps .pv-step:hover {
  transform: translateY(-4px);
}
.provis-process-steps .pv-step h3 {
  transition: color 0.3s var(--pv-ease);
}
.provis-process-steps .pv-step:hover h3 {
  color: var(--pv-gold);
}

/* 14c. Step dividers — vertical hairlines between steps on desktop */
@media (min-width: 769px) {
  .provis-process-steps .pv-process-steps {
    position: relative;
  }
  .provis-process-steps .pv-step + .pv-step {
    position: relative;
  }
  .provis-process-steps .pv-step + .pv-step::before {
    content: "";
    position: absolute;
    top: 8px;
    bottom: 8px;
    left: -24px;
    width: 1px;
    background: currentColor;
    opacity: 0.1;
  }
}

/* ============================================================
   15. COLLECTION FOOTER CTA BANNER refinements
   ============================================================ */

.shopify-section[id*="main-collection"] [class*="cta-banner"],
.shopify-section[id*="main-collection"] [class*="collection-footer"] {
  position: relative;
}
.shopify-section[id*="main-collection"] [class*="cta-banner"]::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: 48px;
  height: 2px;
  background: var(--pv-gold);
  opacity: 0.8;
}

/* ============================================================
   16. "SHOWING X OF Y" COUNT TEXT
   ============================================================ */

.shopify-section[id*="main-collection"] [class*="product-count"],
.shopify-section[id*="main-collection"] [class*="results-count"],
.shopify-section[id*="main-collection"] [class*="collection__count"] {
  font-family: "Tiller", Georgia, serif !important;
  font-size: 0.74rem !important;
  text-transform: uppercase !important;
  letter-spacing: 0.22em !important;
  color: rgba(34, 36, 50, 0.55) !important;
  font-variant-numeric: tabular-nums;
}

/* ============================================================
   17. WISHLIST / FAVORITE ICON (if present)
   ============================================================ */

.shopify-section[id*="main-collection"] product-card [class*="wishlist"],
.shopify-section[id*="main-collection"] product-card [class*="favorite"] {
  transition: transform 0.3s var(--pv-ease), color 0.3s var(--pv-ease);
  color: rgba(34, 36, 50, 0.55);
}
.shopify-section[id*="main-collection"] product-card [class*="wishlist"]:hover,
.shopify-section[id*="main-collection"] product-card [class*="favorite"]:hover {
  color: var(--pv-gold);
  transform: scale(1.1);
}
.shopify-section[id*="main-collection"] product-card [class*="wishlist"][aria-pressed="true"],
.shopify-section[id*="main-collection"] product-card [class*="favorite"].is-active {
  color: var(--pv-gold);
}

/* ============================================================
   18. MOBILE FILTER DRAWER
   ============================================================ */

@media (max-width: 749px) {
  /* 18a. Mobile drawer shell — cream panel, gold top bar */
  .shopify-section[id*="main-collection"] [class*="facets__drawer"],
  .shopify-section[id*="main-collection"] [class*="filter-drawer"],
  .shopify-section[id*="main-collection"] dialog[class*="facets"] {
    background: var(--pv-cream) !important;
    border-top: 2px solid var(--pv-gold) !important;
  }

  /* 18b. Drawer heading */
  .shopify-section[id*="main-collection"] [class*="facets__drawer"] h2,
  .shopify-section[id*="main-collection"] [class*="filter-drawer"] h2 {
    font-family: "Tiller", Georgia, serif !important;
    font-size: 1.1rem !important;
    letter-spacing: 0.02em !important;
    color: var(--pv-navy) !important;
  }

  /* 18c. Drawer apply / clear buttons */
  .shopify-section[id*="main-collection"] [class*="facets__footer"] button,
  .shopify-section[id*="main-collection"] [class*="filter-drawer__footer"] button {
    font-family: "Tiller", Georgia, serif !important;
    text-transform: uppercase !important;
    letter-spacing: 0.18em !important;
    font-size: 0.78rem !important;
    padding: 14px 24px !important;
    border-radius: 2px !important;
  }
}

/* ============================================================
   19. MOBILE SORT + FILTER BAR
   ============================================================ */

@media (max-width: 749px) {
  .shopify-section[id*="main-collection"] [class*="toolbar"],
  .shopify-section[id*="main-collection"] [class*="collection__toolbar"] {
    border-top: 1px solid var(--pv-navy-hairline);
    border-bottom: 1px solid var(--pv-navy-hairline);
    padding: 12px 16px !important;
    position: sticky;
    top: 0;
    z-index: 5;
    background: var(--pv-cream);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
  }
  .shopify-section[id*="main-collection"] [class*="toolbar"] button {
    font-family: "Tiller", Georgia, serif !important;
    font-size: 0.78rem !important;
    text-transform: uppercase !important;
    letter-spacing: 0.16em !important;
    color: var(--pv-navy) !important;
  }
}

/* ============================================================
   20. GRID GUTTER + RHYTHM polish
   ============================================================ */

/* 20a. Give the product grid slightly more vertical breathing room  */
.shopify-section[id*="main-collection"] [class*="product-grid"],
.shopify-section[id*="main-collection"] product-grid {
  row-gap: clamp(32px, 4vw, 56px) !important;
}

/* 20b. On ultra-wide, keep cards from stretching uncomfortably large */
@media (min-width: 1600px) {
  .shopify-section[id*="main-collection"] [class*="product-grid"] {
    max-width: 1520px;
    margin-left: auto;
    margin-right: auto;
  }
}

/* ============================================================
   21. COLLECTION HERO — responsive rhythm
   ============================================================ */

@media (max-width: 749px) {
  .provis-collection-hero [class*="pv-ch-eyebrow"]::before,
  .provis-collection-hero [class*="pv-ch-eyebrow"]::after {
    width: 18px;
  }
  .provis-collection-hero [class*="pv-ch-badges"] {
    gap: 12px 18px !important;
    margin-top: 28px !important;
  }
  .provis-collection-hero [class*="pv-ch-badge"] {
    padding: 6px 12px;
    font-size: 11px !important;
  }
}

/* ============================================================
   22. MOTION — respect reduced-motion
   ============================================================ */

@media (prefers-reduced-motion: reduce) {
  .provis-collection-hero *,
  .provis-shop-by-profile *,
  .provis-reserve-spotlight *,
  .provis-producer-spotlight *,
  .provis-process-steps *,
  .shopify-section[id*="main-collection"] * {
    animation: none !important;
    transition: none !important;
  }
  .shopify-section[id*="main-collection"] product-card:hover {
    transform: none !important;
  }
}

/* ============================================================
   END — Provis Collection Polish
   ============================================================ */


/* ==========================================================================
   SOURCE: provis-polish-about-wholesale.css
   ========================================================================== */

/* =========================================================================
   PROVIS — ABOUT + WHOLESALE POLISH PASS
   Senior design polish. CSS-only, additive, non-destructive.
   Targets sections used on page.about and page.wholesale.
   Palette: navy #222432 / cream #F8FAEF / gold #B9A977
   Type: 'Tiller' serif (headings), DM Sans (body)
   =========================================================================
   Section classes targeted (schema "class" values):
     .provis-page-hero          — hero banner
     .provis-split-story        — split story sections
     .provis-wholesale-tiers    — tier cards
     .provis-wholesale-benefits — accordion
     .provis-wholesale-form     — inquiry CTA
   Brand-story + values + process use per-section id selectors — we scope via
   section ancestors (.shopify-section, body) and widely applicable tokens.
   ========================================================================= */

/* -------------------------------------------------------------------------
   00 · TOKENS — shared, locally scoped to avoid leaking into unrelated pages
   ------------------------------------------------------------------------- */
.provis-page-hero,
.provis-split-story,
.provis-values-grid,
.provis-process-steps,
.provis-wholesale-tiers,
.provis-wholesale-benefits,
.provis-wholesale-form {
  --pv-navy: #222432;
  --pv-cream: #F8FAEF;
  --pv-gold: #B9A977;
  --pv-gold-soft: rgba(185, 169, 119, 0.22);
  --pv-ink-60: rgba(34, 36, 50, 0.62);
  --pv-ink-45: rgba(34, 36, 50, 0.45);
  --pv-cream-60: rgba(248, 250, 239, 0.62);
  --pv-cream-75: rgba(248, 250, 239, 0.78);
  --pv-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --pv-shadow-1: 0 1px 2px rgba(34, 36, 50, 0.04), 0 6px 18px rgba(34, 36, 50, 0.06);
  --pv-shadow-2: 0 2px 4px rgba(34, 36, 50, 0.06), 0 18px 42px rgba(34, 36, 50, 0.10);
}

/* =========================================================================
   01 · PAGE HERO
   ========================================================================= */

/* 01.01 — Eyebrow rule treatment
   Rationale: the rules that flank the eyebrow feel timid. Lengthen them on
   desktop, add a tiny center dot, and raise contrast so the cluster reads as
   a deliberate ornament rather than an afterthought. */
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-eyebrow {
  gap: 18px;
  letter-spacing: 0.34em;
  font-size: 10.5px;
}
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-eyebrow::before,
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-eyebrow::after {
  width: 44px;
  opacity: 0.75;
}
@media (max-width: 749px) {
  .provis-page-hero [class*="pv-page-hero-"] .pv-ph-eyebrow::before,
  .provis-page-hero [class*="pv-page-hero-"] .pv-ph-eyebrow::after {
    width: 24px;
  }
}

/* 01.02 — H1 balance + wrap
   Rationale: serif headlines read much better with balanced line breaks.
   text-wrap: balance avoids orphans; a measured max-width tightens the
   ragged edge without forcing hard breaks. */
.provis-page-hero [class*="pv-page-hero-"] h1 {
  max-width: 14ch;
  margin-left: auto;
  margin-right: auto;
  text-wrap: balance;
}

/* 01.03 — Subtitle wrap
   Rationale: pretty wrapping for body prose keeps tail lines from being too
   short. Slightly reduces max-width so measure feels intentional. */
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-sub {
  max-width: 54ch;
  text-wrap: pretty;
}

/* 01.04 — Background overlay refinement
   Rationale: the stock linear gradient reads a touch muddy. Feather the top
   so the masthead lifts off, deepen the bottom so the scroll cue and rule
   sit on solid ground. Uses a second inline layer via box-shadow inset on a
   pseudo would be ideal — instead we tune the existing ::before alpha via
   a stacked gradient on ::after which is behind the grain. */
.provis-page-hero [class*="pv-page-hero-"]::after {
  background:
    radial-gradient(ellipse 70% 55% at 50% 42%, transparent 0%, rgba(34, 36, 50, 0.28) 70%, rgba(34, 36, 50, 0.52) 100%),
    linear-gradient(180deg, rgba(34, 36, 50, 0.12) 0%, transparent 18%, transparent 72%, rgba(34, 36, 50, 0.35) 100%);
}

/* 01.05 — Scroll cue refinement
   Rationale: the bouncing chevron was slightly too energetic and the label
   gap was cramped. Dial down intensity, increase tracking, widen the click
   hotspot for accessibility. */
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-scroll {
  gap: 14px;
  padding: 8px 14px;
}
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-scroll-text {
  letter-spacing: 0.34em;
  opacity: 0.72;
}

/* 01.06 — Drawn rule refinement
   Rationale: a 64px hairline can feel stubby under a 5.6rem serif — widen
   slightly and add a subtle gold glow so it registers as an ornament. */
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-rule {
  box-shadow: 0 0 0 0.5px rgba(185, 169, 119, 0.3);
}
@keyframes pvPolishRuleGrow { to { width: 84px; } }
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-rule {
  animation: pvPolishRuleGrow 1.6s var(--pv-ease) 1.1s forwards;
}

/* =========================================================================
   02 · SPLIT STORY
   ========================================================================= */

/* 02.01 — Image frame + crop ratio
   Rationale: a fixed 540px height breaks on short viewports and fights the
   text column. Switch to an aspect-ratio so the image scales gracefully,
   and add a hairline gold corner frame that echoes brand ornaments. */
.provis-split-story [class*="pv-split-story-"] .pv-split-img {
  height: auto;
  aspect-ratio: 4 / 5;
  max-height: 620px;
  border-radius: 2px;
  box-shadow: var(--pv-shadow-1);
  transition: transform 0.9s var(--pv-ease), filter 0.9s var(--pv-ease), box-shadow 0.6s var(--pv-ease);
}

/* 02.02 — Image hover state
   Rationale: the previous card had no hover affordance. A slow, cinematic
   scale + warmth lift rewards curiosity without shouting. */
.provis-split-story [class*="pv-split-story-"] .pv-split-visual {
  overflow: hidden;
  border-radius: 2px;
  position: relative;
}
.provis-split-story [class*="pv-split-story-"] .pv-split-visual:hover .pv-split-img {
  transform: scale(1.024);
  filter: saturate(1.05) contrast(1.02);
  box-shadow: var(--pv-shadow-2);
}

/* 02.03 — Gold rule frame around image
   Rationale: a single top-left gold corner rule adds a literary/book-plate
   feel that fits the Dickens voice. Additive, non-destructive. */
.provis-split-story [class*="pv-split-story-"] .pv-split-visual::before {
  content: '';
  position: absolute;
  top: -10px;
  left: -10px;
  width: 44px;
  height: 44px;
  border-top: 1px solid var(--pv-gold);
  border-left: 1px solid var(--pv-gold);
  opacity: 0.55;
  pointer-events: none;
  z-index: 2;
}
.provis-split-story [class*="pv-split-story-"] .pv-split-visual::after {
  content: '';
  position: absolute;
  bottom: -10px;
  right: -10px;
  width: 44px;
  height: 44px;
  border-bottom: 1px solid var(--pv-gold);
  border-right: 1px solid var(--pv-gold);
  opacity: 0.55;
  pointer-events: none;
  z-index: 2;
}

/* 02.04 — Two-column rhythm
   Rationale: gap 64 reads cramped at wide breakpoints once the image frame
   borrows some gutter. Widen the gap and give the text column a comfortable
   measure. */
@media (min-width: 900px) {
  .provis-split-story [class*="pv-split-story-"] .pv-split {
    gap: 88px;
    grid-template-columns: 1.05fr 1fr;
  }
}
.provis-split-story [class*="pv-split-story-"] .pv-split-body {
  max-width: 58ch;
}

/* 02.05 — Body prose rhythm
   Rationale: line-height 1.78 is good but paragraph spacing was tight.
   Adds a touch more air between paragraphs for editorial cadence. */
.provis-split-story [class*="pv-split-story-"] .pv-split-body p {
  margin-bottom: 20px;
  text-wrap: pretty;
}
.provis-split-story [class*="pv-split-story-"] .pv-split-body p:last-child {
  margin-bottom: 0;
}

/* 02.06 — Drop cap on the first paragraph
   Rationale: echoes the literary voice (Dickens/Great Expectations) with a
   Tiller serif drop cap. Only first paragraph, only on desktop where it
   won't fight narrow columns. */
@media (min-width: 900px) {
  .provis-split-story [class*="pv-split-story-"] .pv-split-body > p:first-child::first-letter {
    font-family: 'Tiller', Georgia, serif;
    font-size: 3.4em;
    line-height: 1;
    float: left;
    margin: 0.12em 0.12em -0.05em 0;
    padding: 0;
    color: var(--pv-gold);
    font-weight: 700;
    -webkit-initial-letter: 3;
    initial-letter: 3;
  }
}

/* 02.07 — Closing line emphasis
   Rationale: the italic closing had no visual separation from body. Add a
   hair-rule above it and a small gold mark to signal chapter-end. */
.provis-split-story [class*="pv-split-story-"] .pv-split-closing {
  position: relative;
  padding-top: 22px;
  margin-top: 18px;
  font-size: 1.18rem;
  line-height: 1.55;
}
.provis-split-story [class*="pv-split-story-"] .pv-split-closing::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 36px;
  height: 1px;
  background: var(--pv-gold);
  opacity: 0.75;
}

/* 02.08 — Eyebrow on split-story
   Rationale: match the hero eyebrow tracking for cross-section consistency. */
.provis-split-story [class*="pv-split-story-"] .pv-split-eyebrow {
  letter-spacing: 0.34em;
  font-weight: 600;
}

/* =========================================================================
   03 · BRAND STORY (provis-brand-story.liquid)
   ========================================================================= */

/* 03.01 — Image warmth grade
   Rationale: the library photo on about reads a touch flat at the default
   sepia. Add a subtle vignette overlay via box-shadow inset on the wrapper
   so the image feels like an archival plate. */
.shopify-section [class*="pv-split"].pv-split--reverse .pv-split__img {
  position: relative;
  box-shadow: inset 0 0 120px rgba(34, 36, 50, 0.35);
}

/* 03.02 — Image hover lift
   Rationale: match the other image treatments site-wide. */
.shopify-section [class*="pv-split"].pv-split--reverse .pv-split__img img {
  transition: transform 1s var(--pv-ease), filter 1s var(--pv-ease) !important;
}
.shopify-section [class*="pv-split"].pv-split--reverse .pv-split__img:hover img {
  transform: scale(1.03);
  filter: sepia(0.08) brightness(1.02) !important;
}

/* 03.03 — Closing italic treatment
   Rationale: give the closing italic more breathing room and a subtle lead-in
   gold mark. Scoped to dark sections so it doesn't leak. */
.pv-section-dark .pv-story__closing {
  position: relative;
  padding-left: 18px;
  margin-top: 28px;
  margin-bottom: 36px;
}
.pv-section-dark .pv-story__closing::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.55em;
  width: 10px;
  height: 1px;
  background: var(--pv-gold);
}

/* 03.04 — CTA rhythm
   Rationale: .pv-btn placement is generally fine but the stacked cluster
   (closing -> btn) needs a little more air. */
.pv-section-dark .pv-split__content .pv-btn {
  margin-top: 8px;
}

/* =========================================================================
   04 · VALUES GRID
   ========================================================================= */

/* 04.01 — Card hover state
   Rationale: each value is a static card with no affordance. Add a warm
   gold accent that slides in under the title on hover, reinforcing that
   these are "pillars." */
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item {
  position: relative;
  padding-top: 28px;
  transition: transform 0.45s var(--pv-ease), border-color 0.45s var(--pv-ease);
}
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item::before {
  content: '';
  position: absolute;
  top: -2px;
  left: 0;
  height: 2px;
  width: 0;
  background: var(--pv-navy);
  transition: width 0.55s var(--pv-ease);
}
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item:hover {
  transform: translateY(-3px);
}
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item:hover::before {
  width: 100%;
}

/* 04.02 — Numeric index (pseudo, additive)
   Rationale: tiny roman/arabic numeral counters give the grid an editorial
   feel without changing markup. Uses CSS counters on the grid container. */
.provis-values-grid [class*="pv-values-grid-"] .pv-values-items {
  counter-reset: pv-value;
}
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item {
  counter-increment: pv-value;
}
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item::after {
  content: counter(pv-value, decimal-leading-zero);
  position: absolute;
  top: 10px;
  right: 0;
  font-family: 'Tiller', Georgia, serif;
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  color: var(--pv-gold);
  opacity: 0.7;
}

/* 04.03 — Title rhythm
   Rationale: slightly tighter leading and a touch more space under the title
   separates the headline from the description. */
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item h3 {
  line-height: 1.22;
  margin-bottom: 14px;
  letter-spacing: -0.005em;
}

/* 04.04 — Description measure
   Rationale: improves legibility with pretty-wrap to avoid short tail lines. */
.provis-values-grid [class*="pv-values-grid-"] .pv-value-item p {
  text-wrap: pretty;
  max-width: 32ch;
}

/* 04.05 — Gap rhythm
   Rationale: 36px feels tight on wide screens; 44 gives the cards more breathing
   room while still grouping as a single quartet. */
@media (min-width: 1024px) {
  .provis-values-grid [class*="pv-values-grid-"] .pv-values-items {
    gap: 44px;
  }
}

/* 04.06 — Section top ornament
   Rationale: a tiny centered gold diamond above the heading ties the values
   grid visually to the rest of the about page ornaments. */
.provis-values-grid [class*="pv-values-grid-"] .pv-values-header {
  position: relative;
}
.provis-values-grid [class*="pv-values-grid-"] .pv-values-header::before {
  content: '';
  display: block;
  width: 6px;
  height: 6px;
  margin: 0 auto 18px;
  background: var(--pv-gold);
  transform: rotate(45deg);
  opacity: 0.75;
}

/* =========================================================================
   05 · PROCESS STEPS
   ========================================================================= */

/* 05.01 — Hairline connectors between steps
   Rationale: 3 numbered steps with no visual link miss an opportunity to
   tell a sequence. Add a 1px hairline running between numerals on desktop. */
@media (min-width: 769px) {
  .provis-process-steps [class*="pv-process-"] .pv-process-steps {
    position: relative;
  }
  .provis-process-steps [class*="pv-process-"] .pv-step {
    position: relative;
  }
  .provis-process-steps [class*="pv-process-"] .pv-step + .pv-step::before {
    content: '';
    position: absolute;
    top: 1.5rem; /* align with numeral midline */
    left: -24px;
    width: 48px;
    height: 1px;
    background: var(--pv-gold);
    opacity: 0.35;
  }
}

/* 05.02 — Number callout refinement
   Rationale: pull the numerals forward with a thin underline, a touch more
   weight, and a slight indent so they feel typeset rather than floating. */
.provis-process-steps [class*="pv-process-"] .pv-step-num {
  position: relative;
  padding-bottom: 10px;
  margin-bottom: 20px;
  letter-spacing: -0.01em;
}
.provis-process-steps [class*="pv-process-"] .pv-step-num::after {
  display: none;
}

/* 05.03 — Step hover
   Rationale: subtle lift + number brightening to reward hover. */
.provis-process-steps [class*="pv-process-"] .pv-step {
  transition: transform 0.45s var(--pv-ease);
}
.provis-process-steps [class*="pv-process-"] .pv-step:hover {
  transform: translateY(-3px);
}
.provis-process-steps [class*="pv-process-"] .pv-step:hover .pv-step-num::after {
  display: none;
}

/* 05.04 — Step title rhythm
   Rationale: tighter leading on the step headlines so they sit closer to the
   numeral cluster. */
.provis-process-steps [class*="pv-process-"] .pv-step h3 {
  line-height: 1.22;
  letter-spacing: -0.005em;
  max-width: 22ch;
}
.provis-process-steps [class*="pv-process-"] .pv-step p {
  max-width: 34ch;
  text-wrap: pretty;
}

/* =========================================================================
   06 · WHOLESALE TIERS
   ========================================================================= */

/* 06.01 — Tier card depth + border
   Rationale: 1px border at 10% alpha almost vanishes on cream. Add a soft
   multi-layer shadow and a slightly warmer border for definition. */
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-card {
  border-color: rgba(34, 36, 50, 0.08);
  box-shadow: var(--pv-shadow-1);
  transition: transform 0.5s var(--pv-ease), box-shadow 0.5s var(--pv-ease), border-color 0.5s var(--pv-ease);
}

/* 06.02 — Tier card hover
   Rationale: unify the lift across cards and warm the border to gold on
   hover for a more confident state. */
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--pv-shadow-2);
  border-color: rgba(185, 169, 119, 0.55);
}

/* 06.03 — Icon refinement
   Rationale: the circle around each icon is barely visible. Thicken the
   ring slightly, add a soft inner glow on hover to echo a lit bulb. */
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-icon {
  border-color: rgba(185, 169, 119, 0.55);
  box-shadow: inset 0 0 0 0 rgba(185, 169, 119, 0);
  transition: box-shadow 0.5s var(--pv-ease), transform 0.5s var(--pv-ease);
}
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-card:hover .pv-ws-tier-icon {
  box-shadow: inset 0 0 0 18px rgba(185, 169, 119, 0.08);
  transform: scale(1.05);
}

/* 06.04 — Gap rhythm
   Rationale: tier cards look crowded at 28px on a 1100 container. Widen gap
   slightly at desktop, and stack spacing at mobile. */
@media (min-width: 1025px) {
  .provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tiers-grid {
    gap: 32px;
  }
}
@media (max-width: 768px) {
  .provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tiers-grid {
    gap: 18px;
  }
}

/* 06.05 — Card title and copy rhythm
   Rationale: slightly tighter title and a pretty-wrapped body for legibility. */
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-card h3 {
  letter-spacing: -0.005em;
  margin-bottom: 10px;
}
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-card p {
  text-wrap: pretty;
}

/* =========================================================================
   07 · WHOLESALE BENEFITS ACCORDION
   ========================================================================= */

/* 07.01 — Summary hover refinement
   Rationale: the padding-left shift is charming but also slightly jittery on
   long labels. Keep the shift but add a subtle gold left-rail that fades in. */
.provis-wholesale-benefits [class*="pv-wsb-"] details {
  position: relative;
}
.provis-wholesale-benefits [class*="pv-wsb-"] details::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 2px;
  background: var(--pv-gold);
  transform: scaleY(0);
  transform-origin: top;
  transition: transform 0.5s var(--pv-ease);
}
.provis-wholesale-benefits [class*="pv-wsb-"] details:hover::before,
.provis-wholesale-benefits [class*="pv-wsb-"] details[open]::before {
  transform: scaleY(1);
}
.provis-wholesale-benefits [class*="pv-wsb-"] details[data-featured="true"]::before {
  transform: scaleY(1); /* always on for featured */
}

/* 07.02 — Featured tier glow
   Rationale: featured detail is tagged "Founding Partners." Give it a soft
   gold radial glow at the top corner so the eye lands there. */
.provis-wholesale-benefits [class*="pv-wsb-"] details[data-featured="true"] {
  background:
    radial-gradient(ellipse 60% 60% at 0% 0%, rgba(185, 169, 119, 0.14) 0%, transparent 60%),
    rgba(185, 169, 119, 0.08);
}

/* 07.03 — Expanded state color shift
   Rationale: the open background (#2a2c3e) is fine but the content area
   benefits from a left-side gradient so bullets feel anchored. */
.provis-wholesale-benefits [class*="pv-wsb-"] details[open] .pv-wsb-details {
  background: linear-gradient(90deg, rgba(185, 169, 119, 0.06) 0%, transparent 30%);
  border-radius: 0 0 3px 3px;
}

/* 07.04 — Toggle icon refinement
   Rationale: serif "+" at 1.6rem felt thin. Slightly bolder, and rotate with
   easing we already use. */
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-toggle {
  font-weight: 600;
  opacity: 0.85;
}
.provis-wholesale-benefits [class*="pv-wsb-"] details[open] .pv-wsb-toggle {
  opacity: 1;
}

/* 07.05 — Bullet tightening
   Rationale: line-height 1.55 for the one-liner summary was tight; 1.6 reads
   cleaner and prevents descender clash with the row below. */
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-bullet {
  line-height: 1.62;
  max-width: 56ch;
}

/* 07.06 — Details list dot refinement
   Rationale: the custom bullet glyph is a serif "·" positioned with absolute —
   sits one pixel high. Nudge baseline so it visually centers with the first
   line of each li. */
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-details li::before {
  top: 10px;
  font-size: 1.2rem;
}

/* 07.07 — Details paragraph rhythm */
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-details p {
  margin-bottom: 14px;
  text-wrap: pretty;
  max-width: 64ch;
}

/* 07.08 — Transition easing uplift
   Rationale: background transition was ease/0.3s (stock). Make it unified with
   the rest of the page's cubic-bezier. */
.provis-wholesale-benefits [class*="pv-wsb-"] details {
  transition: background 0.5s var(--pv-ease);
}

/* =========================================================================
   08 · WHOLESALE FORM / CTA
   ========================================================================= */

/* 08.01 — Badge image treatment
   Rationale: the 72px badge is handsome but sits flat against cream. Add a
   subtle golden halo and a slow rotation on hover. */
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-badge {
  position: relative;
  transition: transform 0.9s var(--pv-ease);
}
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-badge::before {
  content: '';
  position: absolute;
  inset: -10px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(185, 169, 119, 0.22) 0%, transparent 70%);
  z-index: -1;
  opacity: 0;
  transition: opacity 0.6s var(--pv-ease);
}
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-badge:hover::before {
  opacity: 1;
}
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-badge:hover {
  transform: rotate(-3deg);
}

/* 08.02 — Divider refinement
   Rationale: grow the divider slightly on scroll reveal and add a tiny
   gold dot at its center for a chapter-break feel. */
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-divider {
  position: relative;
  width: 68px;
}
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-divider::after {
  content: '';
  position: absolute;
  top: -2px;
  left: 50%;
  width: 5px;
  height: 5px;
  background: var(--pv-gold);
  border-radius: 50%;
  transform: translateX(-50%);
}

/* 08.03 — Heading rhythm
   Rationale: serif h2 at 3.8rem is bold but margin-bottom 16px was tight.
   Give it a measured drop and a touch of balance. */
.provis-wholesale-form [class*="pv-ws-form-"] h2 {
  margin-bottom: 22px;
  text-wrap: balance;
  max-width: 14ch;
  margin-left: auto;
  margin-right: auto;
}

/* 08.04 — Description measure
   Rationale: constrain to a comfortable measure and pretty wrap. */
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-desc {
  max-width: 54ch;
  margin-left: auto;
  margin-right: auto;
  text-wrap: pretty;
  margin-bottom: 42px;
}

/* 08.05 — Button polish
   Rationale: baseline padding 18x36 is fine, but bring it to the 14x28 house
   standard for consistency with site buttons, add proper focus ring, and
   unify easing. */
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-buttons a {
  border-radius: 1px;
  padding: 16px 30px;
  transition: background 0.45s var(--pv-ease), border-color 0.45s var(--pv-ease),
              color 0.45s var(--pv-ease), transform 0.45s var(--pv-ease),
              box-shadow 0.45s var(--pv-ease);
}
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-buttons a.primary:hover {
  box-shadow: 0 12px 28px rgba(185, 169, 119, 0.28);
}
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-buttons a:focus-visible {
  outline: 2px solid var(--pv-gold);
  outline-offset: 3px;
}

/* 08.06 — Note treatment
   Rationale: the reassurance note sat flat. Add a subtle top rule so it
   reads as a post-script, not an afterthought. */
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-note {
  position: relative;
  margin-top: 28px;
  padding-top: 18px;
  font-style: italic;
}
.provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-note::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 24px;
  height: 1px;
  background: rgba(34, 36, 50, 0.25);
}

/* =========================================================================
   09 · SECTION TRANSITIONS & PAGE-LEVEL RHYTHM
   ========================================================================= */

/* 09.01 — Smooth hand-off between light/dark sections
   Rationale: going cream -> navy -> cream can feel abrupt. Add a 1px gold
   hairline at the very top of adjacent dark sections to suggest a seam. */
.pv-section-dark {
  position: relative;
}
.pv-section-dark::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 120px;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(185, 169, 119, 0.5), transparent);
}

/* 09.02 — Anti-stacking overflow guard
   Rationale: adjacent sections with pseudo elements can clip. Keep isolation
   so our ornaments never bleed across section boundaries. */
.provis-split-story,
.provis-values-grid,
.provis-process-steps,
.provis-wholesale-tiers,
.provis-wholesale-benefits,
.provis-wholesale-form {
  isolation: isolate;
}

/* =========================================================================
   10 · IMAGE GRADES — unified filter language
   ========================================================================= */

/* 10.01 — Gentle saturation for split-story photos
   Rationale: the splash photos read a touch desaturated on some displays.
   Apply a nudge of saturation; hover states already add more. */
.provis-split-story [class*="pv-split-story-"] .pv-split-img {
  filter: saturate(1.02) contrast(1.02);
}

/* 10.02 — Hero background slight warmth
   Rationale: the hero has a linear + vignette but no warmth. Add a tiny
   warmth nudge via filter so the photography feels "Provis." */
.provis-page-hero [class*="pv-page-hero-"] .pv-ph-bg {
  filter: saturate(1.04) contrast(1.04);
}

/* =========================================================================
   11 · MOBILE POLISH
   ========================================================================= */

/* 11.01 — Wholesale tier cards stack spacing
   Rationale: stacked cards at 24px gutter feel claustrophobic on mobile. */
@media (max-width: 600px) {
  .provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-card {
    padding: 34px 24px;
  }
  .provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tier-icon {
    width: 50px;
    height: 50px;
    margin-bottom: 16px;
  }
}

/* 11.02 — Accordion touch targets
   Rationale: on mobile the caret is hard to reach with a thumb. Ensure each
   summary row is at least 56px tall. */
@media (max-width: 600px) {
  .provis-wholesale-benefits [class*="pv-wsb-"] summary {
    min-height: 56px;
  }
  .provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-toggle {
    font-size: 1.8rem;
  }
}

/* 11.03 — Inquiry form button full-width on narrow screens
   Rationale: side-by-side buttons wrap awkwardly on 360 viewports; stacking
   at full width keeps tap targets generous and legible. */
@media (max-width: 520px) {
  .provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-buttons {
    flex-direction: column;
    align-items: stretch;
    gap: 12px;
  }
  .provis-wholesale-form [class*="pv-ws-form-"] .pv-ws-form-buttons a {
    width: 100%;
    justify-content: center;
  }
}

/* 11.04 — Hero min-height on very short phones
   Rationale: 560px hero on a 640px viewport leaves almost nothing else
   visible. Slightly reduce. */
@media (max-width: 480px) and (max-height: 720px) {
  .provis-page-hero [class*="pv-page-hero-"] {
    min-height: 520px;
  }
  .provis-page-hero [class*="pv-page-hero-"] .pv-ph-inner {
    padding: 100px 22px 80px;
  }
}

/* 11.05 — Split story mobile image frame
   Rationale: on mobile let the image go a touch taller and remove the
   decorative corners (they look cramped at narrow widths). */
@media (max-width: 768px) {
  .provis-split-story [class*="pv-split-story-"] .pv-split-img {
    aspect-ratio: 4 / 3;
    max-height: 420px;
  }
  .provis-split-story [class*="pv-split-story-"] .pv-split-visual::before,
  .provis-split-story [class*="pv-split-story-"] .pv-split-visual::after {
    display: none;
  }
}

/* =========================================================================
   12 · TYPOGRAPHY RHYTHM — global for these pages
   ========================================================================= */

/* 12.01 — Optical letter-spacing on large serif headings
   Rationale: Tiller at display sizes wants slightly negative tracking for
   that tight "book title" feel. */
.provis-split-story [class*="pv-split-story-"] h2,
.provis-values-grid [class*="pv-values-grid-"] .pv-values-header h2,
.provis-process-steps [class*="pv-process-"] .pv-process-header h2,
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tiers-header h2,
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-header h2,
.provis-wholesale-form [class*="pv-ws-form-"] h2 {
  letter-spacing: -0.012em;
  text-wrap: balance;
}

/* 12.02 — Consistent eyebrow treatment
   Rationale: unify all "eyebrow" elements across the two pages to the same
   10.5px / 0.34em tracking so the rhythm between sections is consistent. */
.provis-split-story [class*="pv-split-story-"] .pv-split-eyebrow,
.provis-values-grid [class*="pv-values-grid-"] .pv-values-eyebrow,
.provis-process-steps [class*="pv-process-"] .pv-process-eyebrow,
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tiers-eyebrow,
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-eyebrow {
  font-size: 10.5px;
  letter-spacing: 0.34em;
  font-weight: 600;
}

/* 12.03 — Section header cluster rhythm
   Rationale: eyebrow -> heading spacing was inconsistent across sections.
   Normalize to 18px from eyebrow to heading baseline. */
.provis-values-grid [class*="pv-values-grid-"] .pv-values-eyebrow,
.provis-process-steps [class*="pv-process-"] .pv-process-eyebrow,
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tiers-eyebrow,
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-eyebrow {
  margin-bottom: 18px;
}

/* =========================================================================
   13 · HAIRLINE ORNAMENTS BETWEEN SECTIONS
   ========================================================================= */

/* 13.01 — Section header trailing rule
   Rationale: under each major section heading, render a subtle 1px gold
   rule to echo the hero drawn-rule. Centered, 48px wide. */
.provis-values-grid [class*="pv-values-grid-"] .pv-values-header::after,
.provis-process-steps [class*="pv-process-"] .pv-process-header::after,
.provis-wholesale-tiers [class*="pv-ws-tiers-"] .pv-ws-tiers-header::after,
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-header::after {
  content: '';
  display: block;
  width: 48px;
  height: 1px;
  background: var(--pv-gold);
  margin: 22px auto 0;
  opacity: 0.65;
}

/* =========================================================================
   14 · LINK HOVER STATES
   ========================================================================= */

/* 14.01 — Accordion inline links
   Rationale: the benefits accordion has inline <a> styled with underline.
   Refine the underline offset and add a color shift on hover. */
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-details a {
  transition: color 0.3s var(--pv-ease), text-underline-offset 0.3s var(--pv-ease);
}
.provis-wholesale-benefits [class*="pv-wsb-"] .pv-wsb-details a:hover {
  color: #d4c99a;
  text-underline-offset: 5px;
}

/* 14.02 — Split story CTA link polish
   Rationale: the gold CTA block's hover color is a fine lift but lacks a
   focus ring and a tiny shadow for depth. */
.provis-split-story [class*="pv-split-story-"] .pv-split-cta {
  transition: background 0.4s var(--pv-ease), transform 0.4s var(--pv-ease), box-shadow 0.4s var(--pv-ease);
}
.provis-split-story [class*="pv-split-story-"] .pv-split-cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 26px rgba(185, 169, 119, 0.26);
}
.provis-split-story [class*="pv-split-story-"] .pv-split-cta:focus-visible {
  outline: 2px solid var(--pv-navy);
  outline-offset: 3px;
}

/* =========================================================================
   15 · EYEBROW + HEADING + BODY CLUSTER SPACING
   ========================================================================= */

/* 15.01 — Brand-story cluster
   Rationale: the stacked [eyebrow -> mega-title -> body -> closing -> CTA]
   rhythm feels uneven because each element has its own default margin.
   Normalize with targeted overrides in the dark section. */
.pv-section-dark .pv-split__content .pv-eyebrow {
  margin-bottom: 18px;
  letter-spacing: 0.34em;
  font-size: 10.5px;
}
.pv-section-dark .pv-split__content .pv-mega-title {
  margin-bottom: 24px;
  letter-spacing: -0.012em;
  text-wrap: balance;
}
.pv-section-dark .pv-split__content .pv-body p {
  line-height: 1.78;
  margin-bottom: 18px;
  text-wrap: pretty;
  max-width: 56ch;
}

/* =========================================================================
   16 · SHADOWS & DEPTH LAYERING
   ========================================================================= */

/* 16.01 — Unify shadow stack across cards
   Rationale: tier cards and any image-framed element now share the same
   multi-layer shadow tokens (var --pv-shadow-1 / --pv-shadow-2) defined up
   top, producing a single depth language across both pages. */

/* Already applied in 02.01, 02.02, 06.01, 06.02 — this block is the
   documented locator in case future edits want to tune the tokens. */

/* 16.02 — Featured benefit outer lift (subtle)
   Rationale: the featured benefit should feel slightly elevated relative
   to its siblings without breaking row alignment. */
.provis-wholesale-benefits [class*="pv-wsb-"] details[data-featured="true"] {
  box-shadow: inset 3px 0 0 var(--pv-gold), 0 1px 0 rgba(185, 169, 119, 0.12);
}

/* =========================================================================
   END — PROVIS ABOUT + WHOLESALE POLISH
   ========================================================================= */


/* ==========================================================================
   SOURCE: provis-polish-info-pages.css
   ========================================================================== */

/* ============================================================
   PROVIS — INFO PAGES POLISH PASS
   (Subscribe / FAQ / Contact)
   ------------------------------------------------------------
   Additive-only CSS layer for the three "info" pages. This
   file NEVER edits templates, liquid, copy, markup, blocks,
   schema, or functionality. Load AFTER provis-brand.css and
   AFTER any inline <style> blocks in the targeted sections.

   Brand tokens:
     --pv-navy:       #222432
     --pv-cream:      #F8FAEF
     --pv-gold:       #B9A977
     --pv-gold-warm:  #c9b886
     Fonts: Tiller (headings), DM Sans (body)
     Voice: literary, warm, confident

   Scoped to the following Provis sections (by section class
   emitted from {% schema %} "class"):
     .provis-subscription-tiers
     .provis-faq
     .provis-contact-form
     .provis-page-hero         (scoped to info pages)
     .provis-visit-cafe        (contact page only)
     .provis-cta-banner        (closer on all three)

   All selectors use attribute matching ([class*="..."]) so they
   latch onto the section-id-suffixed inline classes (e.g.
   .pv-sub-tier-btn) without depending on a particular id.
   ============================================================ */

/* Remove ALL entrance animations on the subscription block */
.provis-subscription-tiers,
.provis-subscription-tiers > section,
.provis-subscription-tiers [class*="pv-sub-tiers-"] {
  animation: none !important;
  opacity: 1 !important;
  transform: none !important;
}

:root {
  --pvi-navy: #222432;
  --pvi-cream: #F8FAEF;
  --pvi-gold: #B9A977;
  --pvi-gold-warm: #c9b886;
  --pvi-gold-soft: rgba(185, 169, 119, 0.14);
  --pvi-navy-hairline: rgba(34, 36, 50, 0.10);
  --pvi-navy-hairline-soft: rgba(34, 36, 50, 0.06);
  --pvi-navy-70: rgba(34, 36, 50, 0.70);
  --pvi-navy-55: rgba(34, 36, 50, 0.55);
  --pvi-cream-hairline: rgba(248, 250, 239, 0.16);
  --pvi-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --pvi-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
}

/* ============================================================
   1. SUBSCRIPTION TIER CARDS — card architecture
   ============================================================ */

/* 1a. Lift tier cards into a softer, deeper card shell.
   Reason: existing shell uses a 1px 15% border that reads flat
   against cream. A layered hairline + subtle top-sheen gives
   the card a printed-card feel without changing markup. */
.provis-subscription-tiers [class*="pv-sub-tier"][class*="pv-sub-tier"]:not([class*="badge"]):not([class*="btn"]):not([class*="price"]):not([class*="features"]):not([class*="subtitle"]):not([class*="header"]):not([class*="eyebrow"]):not([class*="grid"]):not([class*="inner"]) {
  /* targets the outer .pv-sub-tier card only */
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 1px 2px rgba(34,36,50,0.04);
  transition:
    box-shadow 0.5s var(--pvi-ease),
    transform 0.5s var(--pvi-ease),
    border-color 0.5s var(--pvi-ease);
}

/* 1b. Card hover lift — taller, softer shadow + 2px rise.
   Reason: existing hover only changes box-shadow. Add a true
   lift and a warmer gold hairline on hover so featured + base
   cards both feel interactive. */
.provis-subscription-tiers [class*="pv-sub-tiers-"] [class*="pv-sub-tier"]:hover {
  transform: translateY(-4px);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 18px 44px -20px rgba(34,36,50,0.18),
    0 6px 16px -8px rgba(34,36,50,0.10);
  border-color: rgba(185,169,119,0.45);
}

/* 1c. Featured tier — stronger gold frame + gold-tinted glow.
   Reason: a 2px gold border is visible but the card doesn't
   feel "chosen". Tint the shadow gold and slightly raise the
   resting state so featured sits half a step above siblings. */
.provis-subscription-tiers [class*="pv-sub-tiers-"] [class*="pv-sub-tier"].featured {
  transform: translateY(-2px);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 22px 48px -24px rgba(185,169,119,0.35),
    0 8px 20px -10px rgba(34,36,50,0.10);
}
.provis-subscription-tiers [class*="pv-sub-tiers-"] [class*="pv-sub-tier"].featured:hover {
  transform: translateY(-6px);
}

/* 1d. Badge ribbon — tighter type, true pill, soft gold halo.
   Reason: existing badge is a plain gold chip. Refine the
   letterspacing, add a subtle gold outer glow so it reads as
   an applied ribbon, not a button. */
.provis-subscription-tiers [class*="pv-sub-tier-badge"] {
  letter-spacing: 0.18em !important;
  padding: 7px 22px !important;
  box-shadow:
    0 2px 8px rgba(185,169,119,0.35),
    0 0 0 4px rgba(248,250,239,1);
  font-family: var(--provis-body-font, 'DM Sans', sans-serif);
}

/* 1e. Tier name — Tiller serif, tighter tracking.
   Reason: h3 inherits the site default font stack. Nudge to
   Tiller to match the rest of the info-page hierarchy. */
.provis-subscription-tiers [class*="pv-sub-tiers-"] [class*="pv-sub-tier"] h3 {
  font-family: 'Tiller', Georgia, serif;
  letter-spacing: -0.005em;
  margin-top: 4px;
}

/* 1f. Price hierarchy — bigger, tighter, Tiller for gravitas.
   Reason: $XX / week should feel like the hero of the card.
   Scale up, tighten line-height, switch to Tiller. */
.provis-subscription-tiers [class*="pv-sub-tier-price"] {
  font-family: 'Tiller', Georgia, serif;
  font-size: clamp(2.4rem, 3.6vw, 2.8rem) !important;
  line-height: 1.0 !important;
  letter-spacing: -0.015em !important;
  margin-top: 6px !important;
  margin-bottom: 6px !important;
}

/* 1g. Price subtitle — italic serif, muted navy.
   Reason: reads as a caption under the price rather than a
   second body line. */
.provis-subscription-tiers [class*="pv-sub-tier-subtitle"] {
  font-family: 'Tiller', Georgia, serif;
  font-style: italic;
  font-weight: 400;
  color: var(--pvi-navy-55) !important;
  margin-bottom: 32px !important;
}

/* 1h. Tier feature list — lighter hairlines, better rhythm,
       custom checkmark using a vector pseudo instead of Unicode.
   Reason: Unicode checkmarks render inconsistently. Replace the
   pseudo glyph with a rotated underscore stroke for a tighter
   serif-friendly tick, and soften the dividers. */
.provis-subscription-tiers [class*="pv-sub-tier-features"] li {
  padding: 12px 0 !important;
  border-bottom: 1px solid var(--pvi-navy-hairline-soft) !important;
  color: var(--pvi-navy-70) !important;
  font-size: 0.95rem;
  letter-spacing: 0.002em;
}
.provis-subscription-tiers [class*="pv-sub-tier-features"] li:last-child {
  border-bottom: none !important;
}

/* 1i. Tier button — refined resting + pressed state.
   Reason: existing button has hover only. Add a pressed/active
   state for tactile feedback, plus a 1px inner highlight on
   the featured button so it reads as a raised gold tab. */
.provis-subscription-tiers [class*="pv-sub-tier-btn"] {
  letter-spacing: 0.24em !important;
  cursor: pointer;
  will-change: auto;
}
.provis-subscription-tiers [class*="pv-sub-tier-btn"]:active {
  transform: translateY(0) !important;
  filter: brightness(0.96);
}
.provis-subscription-tiers [class*="pv-sub-tier-btn"]:focus-visible {
  outline: 2px solid var(--pvi-gold);
  outline-offset: 3px;
}
.provis-subscription-tiers [class*="pv-sub-tier"].featured [class*="pv-sub-tier-btn"] {
  box-shadow: 0 1px 0 rgba(255,255,255,0.4) inset, 0 4px 14px -6px rgba(185,169,119,0.55);
}

/* Kill all independent child animations inside tier cards on hover.
   The card itself lifts — nothing inside should move separately. */
.provis-subscription-tiers [class*="pv-sub-tier"] h3,
.provis-subscription-tiers [class*="pv-sub-tier-price"],
.provis-subscription-tiers [class*="pv-sub-tier-subtitle"],
.provis-subscription-tiers [class*="pv-sub-tier-features"],
.provis-subscription-tiers [class*="pv-sub-tier-btn"],
.provis-subscription-tiers [class*="pv-sub-tier-badge"] {
  transition: background 0.3s ease, border-color 0.3s ease, color 0.3s ease !important;
  transform: none !important;
  animation: none !important;
}
.provis-subscription-tiers [class*="pv-sub-tier-btn"]:hover {
  transform: none !important;
}

/* ============================================================
   2. TIER GRID RHYTHM — gaps, alignment, mobile stack
   ============================================================ */

/* 2a. Tier grid gap + vertical breathing room.
   Reason: 32px gap is tight at desktop; give the featured halo
   room to land without clipping siblings. */
.provis-subscription-tiers [class*="pv-sub-tiers-grid"] {
  gap: 36px !important;
  padding-top: 16px;
  padding-bottom: 8px;
}

/* 2b. Header margin + eyebrow rule underline.
   Reason: header block needs a drawn rule to echo the page
   hero ornament. Uses ::after so it doesn't replace content. */
.provis-subscription-tiers [class*="pv-sub-tiers-header"] {
  position: relative;
  padding-bottom: 24px;
  margin-bottom: 72px !important;
}
.provis-subscription-tiers [class*="pv-sub-tiers-header"]::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: 56px;
  height: 1px;
  background: var(--pvi-gold);
  opacity: 0.7;
}

/* 2c. Mobile tier stack — tighter gap, more horizontal air.
   Reason: 1-col stack at 32px leaves cards hugging the edges. */
@media (max-width: 768px) {
  .provis-subscription-tiers [class*="pv-sub-tiers-grid"] {
    gap: 24px !important;
    padding: 0 4px;
  }
  .provis-subscription-tiers [class*="pv-sub-tiers-"] [class*="pv-sub-tier"] {
    padding: 40px 28px !important;
  }
  .provis-subscription-tiers [class*="pv-sub-tier-price"] {
    font-size: 2.2rem !important;
  }
}

/* ============================================================
   3. FAQ ACCORDION — summary, hover, open state, +/- glyph
   ============================================================ */

/* 3a. Accordion item hairline — softer, with a hover wash.
   Reason: the 10% navy line is crisp but a little harsh on
   cream. Soften it and add a gold wash on hover over the
   entire row so the whole summary feels tappable. */
.provis-faq [class*="pv-faq-item"] {
  border-bottom: 1px solid var(--pvi-navy-hairline-soft) !important;
  transition: background 0.35s var(--pvi-ease);
}
.provis-faq [class*="pv-faq-item"]:hover {
  background: linear-gradient(90deg, transparent 0%, rgba(185,169,119,0.06) 30%, rgba(185,169,119,0.06) 70%, transparent 100%);
}

/* 3b. Summary typography — slightly larger, tighter tracking.
   Reason: 1.1rem Tiller is a bit small for a question. Grow
   and tighten so it carries weight against the gold glyph. */
.provis-faq [class*="pv-faq-item"] summary {
  font-size: clamp(1.12rem, 1.4vw, 1.22rem) !important;
  letter-spacing: -0.005em;
  padding: 26px 4px !important;
  transition: color 0.25s var(--pvi-ease);
}
.provis-faq [class*="pv-faq-item"] summary:hover {
  color: var(--pvi-navy) !important;
}

/* 3c. +/- glyph — circular gold target, animated transform.
   Reason: current + turns to − via content swap which causes
   a flicker. Draw a circle around the glyph and rotate it
   45deg when open so + becomes × smoothly. */
.provis-faq [class*="pv-faq-item"] summary::after {
  width: 32px;
  height: 32px;
  border: 1px solid rgba(185,169,119,0.35);
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  font-size: 20px !important;
  transition:
    transform 0.35s var(--pvi-ease),
    border-color 0.35s var(--pvi-ease),
    background 0.35s var(--pvi-ease) !important;
}
.provis-faq [class*="pv-faq-item"] summary:hover::after {
  border-color: var(--pvi-gold);
  background: var(--pvi-gold-soft);
}
.provis-faq [class*="pv-faq-item"][open] summary::after {
  transform: rotate(45deg);
  border-color: var(--pvi-gold);
  background: var(--pvi-gold-soft);
}

/* 3d. Open state — subtle left marker + answer fade-in.
   Reason: currently an opened FAQ blends into its neighbors.
   Add a 2px gold bar on the left and animate the answer. */
.provis-faq [class*="pv-faq-item"][open] {
  background: rgba(185,169,119,0.04);
  box-shadow: inset 2px 0 0 var(--pvi-gold);
}
.provis-faq [class*="pv-faq-item"][open] summary {
  color: var(--pvi-navy) !important;
}
.provis-faq [class*="pv-faq-item"][open] [class*="pv-faq-answer"] {
  animation: pviFaqOpen 0.45s var(--pvi-ease-out);
}
@keyframes pviFaqOpen {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* 3e. Answer body — tighter right padding on mobile, better
       link styling within rich text. */
.provis-faq [class*="pv-faq-answer"] {
  padding-left: 4px;
  padding-right: 12px !important;
}
.provis-faq [class*="pv-faq-answer"] a {
  color: var(--pvi-navy);
  text-decoration: none;
  border-bottom: 1px solid rgba(185,169,119,0.5);
  transition: border-color 0.25s var(--pvi-ease);
}
.provis-faq [class*="pv-faq-answer"] a:hover {
  border-color: var(--pvi-gold);
}

/* ============================================================
   4. FAQ CATEGORY TRANSITIONS — rhythm + label treatment
   ============================================================ */

/* 4a. Category spacing — more air between groups.
   Reason: 56px between categories is borderline claustrophobic
   on desktop where the column is narrow. */
.provis-faq [class*="pv-faq-category"] {
  margin-bottom: 72px !important;
  position: relative;
}

/* 4b. Category label — add a short gold rule to the right.
   Reason: the label currently sits alone in letterspaced gold.
   A trailing rule gives it a title-card feel. */
.provis-faq [class*="pv-faq-category-title"] {
  display: flex !important;
  align-items: center;
  gap: 16px;
  margin-bottom: 20px !important;
}
.provis-faq [class*="pv-faq-category-title"]::after {
  content: "";
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, rgba(185,169,119,0.45), rgba(185,169,119,0));
}

/* 4c. FAQ page header rule — echo the hero ornament.
   Reason: adds the same 56px gold rule used in section headers
   for visual continuity across the page. */
.provis-faq [class*="pv-faq-header"] {
  position: relative;
  padding-bottom: 22px;
  margin-bottom: 64px !important;
}
.provis-faq [class*="pv-faq-header"]::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: 56px;
  height: 1px;
  background: var(--pvi-gold);
  opacity: 0.7;
}

/* ============================================================
   5. CONTACT FORM FIELDS — inputs, labels, focus, errors
   ============================================================ */

/* 5a. Field label — Tiller italic caption, warmer weight.
   Reason: all-caps DM Sans labels read like a corporate form.
   A Tiller italic caption keeps the tone literary. */
.provis-contact-form [class*="ct-field"] label {
  font-family: var(--provis-body-font, 'DM Sans', sans-serif);
  font-size: 10px !important;
  letter-spacing: 0.22em !important;
  color: var(--pvi-navy-70) !important;
  font-weight: 600;
  margin-bottom: 9px !important;
}

/* 5b. Field shell — 2px bottom-weight, cream-tinted fill,
       refined focus ring.
   Reason: current inputs have a uniform 1px border that feels
   generic. Give them a taller bottom-border accent so focus
   travels downward (newsprint form feel). */
.provis-contact-form [class*="ct-field"] input,
.provis-contact-form [class*="ct-field"] select,
.provis-contact-form [class*="ct-field"] textarea {
  padding: 14px 16px !important;
  background: #ffffff !important;
  border: 1px solid var(--pvi-navy-hairline) !important;
  border-bottom-width: 1.5px !important;
  border-radius: 3px !important;
  color: var(--pvi-navy) !important;
  font-family: var(--provis-body-font, 'DM Sans', sans-serif) !important;
  font-size: 0.98rem !important;
  transition:
    border-color 0.3s var(--pvi-ease),
    box-shadow 0.3s var(--pvi-ease),
    background 0.3s var(--pvi-ease) !important;
}

/* 5c. Placeholder — italic Tiller, muted navy.
   Reason: placeholder should whisper, not shout. Italic serif
   differentiates it from the user's own input. */
.provis-contact-form [class*="ct-field"] input::placeholder,
.provis-contact-form [class*="ct-field"] textarea::placeholder {
  font-family: 'Tiller', Georgia, serif;
  font-style: italic;
  color: var(--pvi-navy-55);
  opacity: 1;
}

/* 5d. Focus state — gold border + gold-soft glow ring.
   Reason: existing focus only changes border color. Add a
   3px gold-soft outer glow so the active field reads from
   across the page. */
.provis-contact-form [class*="ct-field"] input:focus,
.provis-contact-form [class*="ct-field"] select:focus,
.provis-contact-form [class*="ct-field"] textarea:focus {
  border-color: var(--pvi-gold) !important;
  box-shadow: 0 0 0 3px var(--pvi-gold-soft) !important;
  background: #fffdf7 !important;
  outline: none !important;
}

/* 5e. Select caret — custom gold chevron, no native arrow.
   Reason: native select arrows break the brand. Replace with
   a gold chevron svg and keep the field in the same rhythm. */
.provis-contact-form [class*="ct-field"] select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  padding-right: 44px !important;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1.5L6 6.5L11 1.5' stroke='%23B9A977' stroke-width='1.5' fill='none' stroke-linecap='round'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: right 18px center !important;
  cursor: pointer;
}

/* 5f. Textarea — min-height + comfortable resize.
   Reason: the 140px default is a little cramped. Raise to
   160px, lock the horizontal resize, and hint a softer corner. */
.provis-contact-form [class*="ct-field"] textarea {
  min-height: 164px !important;
  line-height: 1.65 !important;
  resize: vertical !important;
}

/* 5g. Validation — replace browser red with brand navy + gold.
   Reason: default :invalid red clashes with the palette. Use
   a navy border + gold inner glow instead. */
.provis-contact-form [class*="ct-field"] input:not(:focus):not(:placeholder-shown):invalid,
.provis-contact-form [class*="ct-field"] textarea:not(:focus):not(:placeholder-shown):invalid {
  border-color: var(--pvi-navy) !important;
  box-shadow: inset 0 0 0 1px rgba(185,169,119,0.25) !important;
}

/* 5h. Success banner — upgrade to a framed notice with rule.
   Reason: current success is a gold-tinted block. Add a left
   rule + tiny eyebrow so it reads as a deliberate confirmation. */
.provis-contact-form [class*="ct-success"] {
  border-left: 2px solid var(--pvi-gold);
  padding: 20px 22px !important;
  background: rgba(185,169,119,0.08) !important;
  border-radius: 2px !important;
  font-family: 'Tiller', Georgia, serif;
  font-style: italic;
  color: var(--pvi-navy) !important;
  font-size: 1rem !important;
  letter-spacing: 0.002em;
}

/* 5i. Form heading — Tiller rule ornament.
   Reason: "Send Us a Message" needs the same 40px gold rule
   underneath that the other section titles use. */
.provis-contact-form [class*="ct-form"] h2 {
  font-size: clamp(1.6rem, 2vw, 1.8rem) !important;
  position: relative;
  padding-bottom: 18px;
  margin-bottom: 32px !important;
}
.provis-contact-form [class*="ct-form"] h2::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 40px;
  height: 1px;
  background: var(--pvi-gold);
}

/* ============================================================
   6. CONTACT SUBMIT BUTTON — state transitions
   ============================================================ */

/* 6a. Submit — pressed + focus-visible + loading affordance.
   Reason: the button only has hover. Add a tactile pressed
   state, a keyboard focus ring, and a disabled/loading look
   so Shopify's native form lifecycle communicates clearly. */
.provis-contact-form [class*="ct-submit"] {
  letter-spacing: 0.24em !important;
  cursor: pointer;
  will-change: transform;
  min-width: 220px;
  justify-content: center;
}
.provis-contact-form [class*="ct-submit"]::after {
  content: "→";
  display: inline-block;
  transition: transform 0.3s var(--pvi-ease);
}
.provis-contact-form [class*="ct-submit"]:hover::after {
  transform: translateX(4px);
}
.provis-contact-form [class*="ct-submit"]:active {
  transform: translateY(0) !important;
  filter: brightness(0.96);
}
.provis-contact-form [class*="ct-submit"]:focus-visible {
  outline: 2px solid var(--pvi-gold);
  outline-offset: 3px;
}
.provis-contact-form [class*="ct-submit"][disabled],
.provis-contact-form [class*="ct-submit"].is-loading {
  opacity: 0.6;
  cursor: wait;
  transform: none !important;
}

/* ============================================================
   7. CONTACT INFO CARDS — address, hours, email, instagram
   ============================================================ */

/* 7a. Info card shell — softer hairline, inner highlight.
   Reason: match the subscription card treatment so both
   cards on the contact page feel part of the same family. */
.provis-contact-form [class*="ct-info-card"] {
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 1px 2px rgba(34,36,50,0.03) !important;
  border-radius: 4px !important;
}
.provis-contact-form [class*="ct-info-card"]:hover {
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 14px 36px -18px rgba(34,36,50,0.16),
    0 4px 12px -6px rgba(34,36,50,0.08) !important;
  border-color: rgba(185,169,119,0.4) !important;
}

/* 7b. Card eyebrow — tighter, with a 24px gold lead rule.
   Reason: "VISIT US / HOURS / EMAIL / INSTAGRAM" currently
   float on their own. Add a small gold rule before the label. */
.provis-contact-form [class*="ct-info-card"] h3 {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  letter-spacing: 0.28em !important;
  font-size: 10px !important;
  margin-bottom: 14px !important;
}
.provis-contact-form [class*="ct-info-card"] h3::before {
  content: "";
  display: block;
  width: 24px;
  height: 1px;
  background: var(--pvi-gold);
  opacity: 0.7;
}

/* 7c. Highlighted body — Tiller serif for address + hours.
   Reason: the ".highlight" line is the card's actual payload.
   Upgrade it to serif so it reads as a quoted detail. */
.provis-contact-form [class*="ct-info-card"] p.highlight,
.provis-contact-form [class*="ct-info-card"] .highlight {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 500 !important;
  font-size: 1.05rem !important;
  line-height: 1.55 !important;
  color: var(--pvi-navy) !important;
}

/* 7d. Card note — italic, lighter caption voice. */
.provis-contact-form [class*="ct-info-card"] [class*="ct-note"] {
  font-family: 'Tiller', Georgia, serif;
  font-style: italic;
  color: var(--pvi-navy-55) !important;
  font-size: 0.86rem !important;
  margin-top: 10px !important;
}

/* 7e. Card link underline — animated gold reveal.
   Reason: existing underline is a static 44% gold line.
   Replace with a gradient underline that travels on hover. */
.provis-contact-form [class*="ct-info-card"] a:not([class*="ct-social"] a) {
  background-image: linear-gradient(var(--pvi-gold), var(--pvi-gold));
  background-repeat: no-repeat;
  background-size: 0% 1px;
  background-position: 0 100%;
  border-bottom: 1px solid rgba(185,169,119,0.28) !important;
  transition: background-size 0.45s var(--pvi-ease), color 0.25s var(--pvi-ease) !important;
}
.provis-contact-form [class*="ct-info-card"] a:hover {
  background-size: 100% 1px;
  color: var(--pvi-navy) !important;
}

/* 7f. Social icon — bigger target, filled hover with gold.
   Reason: 38px is below Apple's 44px touch guideline. Bump
   size, add a fill-swap on hover rather than just color. */
.provis-contact-form [class*="ct-social"] a {
  width: 44px !important;
  height: 44px !important;
  transition:
    background 0.3s var(--pvi-ease),
    border-color 0.3s var(--pvi-ease),
    color 0.3s var(--pvi-ease),
    transform 0.3s var(--pvi-ease) !important;
}
.provis-contact-form [class*="ct-social"] a:hover {
  background: var(--pvi-gold) !important;
  border-color: var(--pvi-gold) !important;
  color: var(--pvi-navy) !important;
  transform: translateY(-2px);
}
.provis-contact-form [class*="ct-social"] a:focus-visible {
  outline: 2px solid var(--pvi-gold);
  outline-offset: 3px;
}

/* ============================================================
   8. PAGE HERO — scoped to info pages
   ============================================================ */

/* 8a. Slightly tighter min-height on info pages.
   Reason: the story/about hero is ~820px; subscribe/faq/
   contact should feel a touch shorter so the content below
   is visible above the fold on laptop. Scoped via body class
   fallback AND via template-class selectors Horizon emits. */
body.template-page .provis-page-hero [class*="pv-page-hero-"] {
  min-height: clamp(560px, 68vh, 720px);
}

/* 8b. Slightly warmer gradient — more cream at the bottom.
   Reason: darken the top (drama) and warm the bottom edge so
   the hand-off to the cream section below feels intentional. */
body.template-page .provis-page-hero [class*="pv-page-hero-"]::before {
  background: linear-gradient(180deg,
    rgba(34,36,50,0.82) 0%,
    rgba(34,36,50,0.60) 42%,
    rgba(34,36,50,0.90) 100%) !important;
}

/* 8c. Eyebrow rule — give the short gold dashes a bit more
       length + spacing for a classier telegram feel. */
body.template-page .provis-page-hero [class*="pv-ph-eyebrow"] {
  gap: 18px !important;
  letter-spacing: 0.34em !important;
}
body.template-page .provis-page-hero [class*="pv-ph-eyebrow"]::before,
body.template-page .provis-page-hero [class*="pv-ph-eyebrow"]::after {
  width: 36px !important;
  opacity: 0.72 !important;
}

/* 8d. Subtitle — a touch more max-width + italic Tiller lead.
   Reason: the first line of the subtitle should feel like a
   pull quote. Style the first-letter as a discreet gold cap. */
body.template-page .provis-page-hero [class*="pv-ph-sub"] {
  max-width: 640px !important;
  font-size: clamp(1.02rem, 1.25vw, 1.2rem) !important;
  line-height: 1.82 !important;
}

/* 8e. Scroll cue — softer, slower bounce, less shouty.
   Reason: current cue bounces on a 2.5s loop. Slow down and
   dim so it's more "discreet arrow" than "insistent blink". */
body.template-page .provis-page-hero [class*="pv-ph-scroll"] {
  opacity: 0.85;
}
body.template-page .provis-page-hero [class*="pv-ph-scroll-text"] {
  letter-spacing: 0.32em !important;
  opacity: 0.55 !important;
}
body.template-page .provis-page-hero [class*="pv-ph-scroll-arrow"] {
  animation-duration: 3.2s !important;
  opacity: 0.72;
}

/* ============================================================
   9. VISIT CAFE SECTION (contact page)
   ============================================================ */

/* 9a. Image treatment — warmer tone, tighter aspect on mobile.
   Reason: existing filter already tones; push a little warmer
   so the navy section doesn't feel cold against the photo. */
.provis-visit-cafe [class*="pv-vc-img"] img {
  filter: saturate(0.82) contrast(1.08) brightness(0.95) sepia(0.07) !important;
  transition: transform 1.2s var(--pvi-ease), filter 0.6s var(--pvi-ease);
}
.provis-visit-cafe [class*="pv-vc-img"]:hover img {
  transform: scale(1.03);
  filter: saturate(0.9) contrast(1.08) brightness(0.98) sepia(0.05) !important;
}
.provis-visit-cafe [class*="pv-vc-img"] {
  position: relative;
  overflow: hidden;
  box-shadow: 0 30px 80px -40px rgba(0,0,0,0.6);
}

/* 9b. Eyebrow rule — add the short gold dash ornament that
       other section eyebrows have. */
.provis-visit-cafe [class*="pv-vc-eyebrow"] {
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.provis-visit-cafe [class*="pv-vc-eyebrow"]::before {
  content: "";
  display: block;
  width: 28px;
  height: 1px;
  background: var(--pvi-gold);
  opacity: 0.7;
}

/* 9c. CTA link — animated underline travel on hover.
   Reason: current underline is static. Animate to mirror the
   contact-card link behaviour for cross-section consistency. */
.provis-visit-cafe [class*="pv-vc-link"] {
  position: relative;
  border-bottom-color: rgba(185,169,119,0.5) !important;
  transition: color 0.3s var(--pvi-ease), letter-spacing 0.3s var(--pvi-ease);
}
.provis-visit-cafe [class*="pv-vc-link"]::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -2px;
  height: 1px;
  background: var(--pvi-gold);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.5s var(--pvi-ease);
}
.provis-visit-cafe [class*="pv-vc-link"]:hover::after {
  transform: scaleX(1);
}
.provis-visit-cafe [class*="pv-vc-link"]:hover {
  letter-spacing: 0.18em;
}

/* 9d. Two-column rhythm — more text-side air, image-side
       pull so content doesn't feel crammed. */
@media (min-width: 900px) {
  .provis-visit-cafe [class*="pv-vc-inner"] {
    gap: clamp(3rem, 6vw, 6rem) !important;
  }
}

/* ============================================================
   10. CTA BANNER — closer on subscribe / faq / contact
   ============================================================ */

/* 10a. Gold button hover — warmer tint + deeper shadow.
   Reason: the current c9b886 hover is fine but the button
   doesn't feel raised. Add a gold-tinted drop shadow. */
.provis-cta-banner [class*="pv-btn-gold"] {
  letter-spacing: 0.24em !important;
  box-shadow: 0 4px 14px -6px rgba(185,169,119,0.45);
  will-change: transform;
}
.provis-cta-banner [class*="pv-btn-gold"]:hover {
  box-shadow: 0 18px 36px -16px rgba(185,169,119,0.55);
}
.provis-cta-banner [class*="pv-btn-gold"]:active {
  transform: translateY(0) !important;
  filter: brightness(0.96);
}
.provis-cta-banner [class*="pv-btn-gold"]:focus-visible {
  outline: 2px solid var(--pvi-gold);
  outline-offset: 4px;
}

/* 10b. Outline button — refined border, cleaner hover fill.
   Reason: 55 alpha looks greyish. Lift to 70% + add a subtle
   cream fill on hover so the outline feels deliberate. */
.provis-cta-banner [class*="pv-btn-outline"] {
  border-color: rgba(248,250,239,0.65) !important;
  letter-spacing: 0.24em !important;
}
.provis-cta-banner [class*="pv-btn-outline"]:hover {
  background: rgba(185,169,119,0.08) !important;
  border-color: var(--pvi-gold) !important;
  transform: translateY(-2px);
}
.provis-cta-banner [class*="pv-btn-outline"]:focus-visible {
  outline: 2px solid var(--pvi-gold);
  outline-offset: 4px;
}

/* 10c. CTA body — tighter max-width, italic Tiller first letter.
   Reason: the body copy wraps awkwardly on 540px. Narrow to
   500px so lines break on natural caesurae. */
.provis-cta-banner [class*="pv-cta-body"] {
  max-width: 500px !important;
  font-size: clamp(1rem, 1.15vw, 1.14rem) !important;
}

/* 10d. Eyebrow dashes — match the page hero ornament length. */
.provis-cta-banner [class*="pv-cta-eyebrow"] {
  gap: 18px !important;
  letter-spacing: 0.34em !important;
}
.provis-cta-banner [class*="pv-cta-eyebrow"]::before,
.provis-cta-banner [class*="pv-cta-eyebrow"]::after {
  width: 32px !important;
  opacity: 0.72 !important;
}

/* 10e. CTA heading em accent — italic serif already set;
       ensure italic reads as slightly larger optical weight. */
.provis-cta-banner h2 em {
  font-weight: 400 !important;
  letter-spacing: 0.005em;
}

/* ============================================================
   11. GLOBAL CURSOR STATES (info pages only)
   ============================================================ */

/* 11a. All interactive elements on these pages get pointer. */
.provis-subscription-tiers a,
.provis-subscription-tiers button,
.provis-faq summary,
.provis-contact-form a,
.provis-contact-form button,
.provis-contact-form [type="submit"],
.provis-visit-cafe a,
.provis-cta-banner a {
  cursor: pointer;
}

/* 11b. Disabled submit → not-allowed. */
.provis-contact-form [class*="ct-submit"]:disabled {
  cursor: not-allowed;
}

/* ============================================================
   12. SECTION PADDING RHYTHM — info pages
   ============================================================ */

/* 12a. Subscription tiers section — slightly tighter top so
       it hugs the hero, looser bottom so the CTA has air. */
body.template-page .provis-subscription-tiers [class*="pv-sub-tiers-"][class*="pv-sub-tiers-"] {
  padding-top: 96px !important;
  padding-bottom: 108px !important;
}

/* 12b. FAQ section — more vertical room between header and
       first category, larger max-width on wider screens for
       readability. */
@media (min-width: 900px) {
  .provis-faq [class*="pv-faq-"][class*="pv-faq-"] {
    max-width: 820px !important;
  }
}

/* 12c. Contact form — extra breathing at the bottom before
       the visit-cafe tile. */
body.template-page .provis-contact-form [class*="pv-contact-"] {
  padding-bottom: 96px !important;
}

/* ============================================================
   13. MOBILE RESPONSIVE — touch targets + spacing
   ============================================================ */

@media (max-width: 749px) {
  /* 13a. FAQ summary — 56px touch target. */
  .provis-faq [class*="pv-faq-item"] summary {
    padding: 22px 4px !important;
    min-height: 56px;
  }
  /* 13b. FAQ +/- glyph — bigger, easier to tap. */
  .provis-faq [class*="pv-faq-item"] summary::after {
    width: 36px;
    height: 36px;
  }
  /* 13c. Contact fields — 16px font to prevent iOS zoom. */
  .provis-contact-form [class*="ct-field"] input,
  .provis-contact-form [class*="ct-field"] select,
  .provis-contact-form [class*="ct-field"] textarea {
    font-size: 16px !important;
    padding: 15px 14px !important;
  }
  /* 13d. Submit — full width on mobile. */
  .provis-contact-form [class*="ct-submit"] {
    width: 100%;
    justify-content: center;
  }
  /* 13e. Contact inner padding — more generous edge gutter. */
  .provis-contact-form [class*="pv-contact-inner"] {
    padding: 0 20px !important;
    gap: 32px !important;
  }
  /* 13f. Info card hover lift off on touch. */
  .provis-contact-form [class*="ct-info-card"]:hover {
    transform: none !important;
  }
  /* 13g. CTA buttons — stack full-width. */
  .provis-cta-banner [class*="pv-cta-buttons"] {
    flex-direction: column;
    gap: 12px !important;
  }
  .provis-cta-banner [class*="pv-cta-buttons"] a {
    width: 100%;
    justify-content: center;
  }
}

/* ============================================================
   14. REDUCED MOTION — respect user preference
   ============================================================ */

@media (prefers-reduced-motion: reduce) {
  .provis-subscription-tiers [class*="pv-sub-tier"],
  .provis-subscription-tiers [class*="pv-sub-tier-btn"],
  .provis-faq [class*="pv-faq-item"],
  .provis-faq [class*="pv-faq-item"] summary::after,
  .provis-contact-form [class*="ct-info-card"],
  .provis-contact-form [class*="ct-social"] a,
  .provis-contact-form [class*="ct-submit"],
  .provis-contact-form [class*="ct-field"] input,
  .provis-contact-form [class*="ct-field"] select,
  .provis-contact-form [class*="ct-field"] textarea,
  .provis-visit-cafe [class*="pv-vc-img"] img,
  .provis-visit-cafe [class*="pv-vc-link"]::after,
  .provis-cta-banner [class*="pv-btn-gold"],
  .provis-cta-banner [class*="pv-btn-outline"] {
    transition: none !important;
    animation: none !important;
  }
  .provis-subscription-tiers [class*="pv-sub-tier"]:hover,
  .provis-contact-form [class*="ct-info-card"]:hover,
  .provis-cta-banner [class*="pv-btn-gold"]:hover,
  .provis-cta-banner [class*="pv-btn-outline"]:hover {
    transform: none !important;
  }
}

/* ───────────────────────────────────────────────────────────────────────
   RAW PAGE BODY — TYPOGRAPHIC RHYTHM
   Reason: some info pages (FAQ, policies, fallback page.json) render the
   page body as raw RTE HTML without a provis-page-hero. Give that content
   a real editorial rhythm: Tiller H1 with gold rule, clearly stepped H2
   dividers, smaller H3 questions, readable body measure.
   ───────────────────────────────────────────────────────────────────── */
body.template-page main .main-page,
body.template-page main .page-width-content .rte,
body.template-page main article.rte {
  max-width: 760px;
  margin-inline: auto;
  padding-block: clamp(56px, 8vh, 96px);
}
body.template-page main .rte h1,
body.template-page main .page-content > h1,
body.template-page main .main-page h1 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(2.5rem, 5vw, 4rem) !important;
  line-height: 1.02 !important;
  letter-spacing: -0.015em !important;
  color: #222432 !important;
  text-align: center;
  margin: 0 0 0.35em !important;
}
body.template-page main .rte h1 + *,
body.template-page main .page-content > h1 + * {
  margin-top: 0;
}
/* Gold hairline rule under the page title */
body.template-page main .rte > h1::after,
body.template-page main .main-page > h1::after {
  content: "";
  display: block;
  width: 72px;
  height: 1px;
  background: #B9A977;
  margin: 1.25rem auto 2.5rem;
}
/* Section headings (H2) — real break, serif, with top rule */
body.template-page main .rte h2,
body.template-page main .main-page h2 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(1.625rem, 2.5vw, 2.125rem) !important;
  line-height: 1.12 !important;
  letter-spacing: -0.005em !important;
  color: #222432 !important;
  margin: 3rem 0 0.35em !important;
  padding-top: 2.25rem;
  border-top: 1px solid rgba(34, 36, 50, 0.12);
}
body.template-page main .rte h2:first-child,
body.template-page main .main-page h2:first-child {
  border-top: 0;
  padding-top: 0;
  margin-top: 0;
}
/* Question headings (H3) — sans-serif eyebrow-feel, tighter */
body.template-page main .rte h3,
body.template-page main .main-page h3 {
  font-family: 'Tiller', Georgia, serif !important;
  font-weight: 600 !important;
  font-size: clamp(1.125rem, 1.4vw, 1.25rem) !important;
  line-height: 1.3 !important;
  color: #222432 !important;
  margin: 1.75rem 0 0.5rem !important;
}
body.template-page main .rte p,
body.template-page main .main-page p {
  font-family: 'DM Sans', sans-serif;
  font-size: 1rem;
  line-height: 1.65;
  color: rgba(34, 36, 50, 0.82);
  margin: 0 0 1rem;
  max-width: 68ch;
}
body.template-page main .rte a,
body.template-page main .main-page a {
  color: #B9A977;
  text-decoration: underline;
  text-underline-offset: 3px;
}
body.template-page main .rte a:hover,
body.template-page main .main-page a:hover {
  color: #222432;
}

/* ============================================================
   END — PROVIS INFO PAGES POLISH
   ============================================================ */


/* ==========================================================================
   SOURCE: provis-polish-a11y.css
   ========================================================================== */

/* ==========================================================================
   provis-polish-a11y.css
   Provis Coffee - Accessibility, Edge States, Empty/Error/Loading Polish
   --------------------------------------------------------------------------
   Scope: CSS-only. No template changes, no markup changes, no copy changes.
   Palette: navy #222432 / cream #F8FAEF / gold #B9A977
   Fonts:   Tiller (headings) + DM Sans (body)
   Load order: after provis-brand.css so tokens (--provis-*) are available.
   Fallback values are provided everywhere in case this file loads in
   isolation (e.g., print preview, email client).
   ========================================================================== */

/* ---- Local token fallbacks (mirror provis-brand.css) ------------------- */
:root {
  --pa-navy:        var(--provis-navy, #222432);
  --pa-cream:       var(--provis-cream, #F8FAEF);
  --pa-gold:        var(--provis-gold, #B9A977);
  --pa-gold-hover:  var(--provis-gold-hover, #a89664);
  --pa-beige:       var(--provis-warm-beige, #eef1ea);
  --pa-rule:        rgba(34, 36, 50, 0.14);
  --pa-rule-strong: rgba(34, 36, 50, 0.32);
  --pa-mute:        rgba(34, 36, 50, 0.62);
  --pa-scrim:       rgba(34, 36, 50, 0.56);
  --pa-heading:     var(--provis-heading-font, 'Tiller', Georgia, serif);
  --pa-body:        var(--provis-body-font, 'DM Sans', sans-serif);
  --pa-focus-ring:  0 0 0 2px var(--pa-gold), 0 0 0 3px var(--pa-cream), 0 0 0 5px var(--pa-navy);
  --pa-radius:      2px;
  --pa-ease:        cubic-bezier(.2, .7, .2, 1);
}

/* ==========================================================================
   1. FOCUS-VISIBLE RINGS
   --------------------------------------------------------------------------
   Rationale: WCAG 2.4.7 + 2.4.11. Every interactive surface must show a
   clearly visible focus indicator. We use a double-ring (gold inner, cream
   separator, navy outer) so the ring reads on BOTH light cream and dark
   navy sections without additional per-section rules. 2px offset gives the
   ring breathing room around tight buttons/icons.
   ========================================================================== */
a:focus-visible,
button:focus-visible,
[role="button"]:focus-visible,
[role="link"]:focus-visible,
[role="tab"]:focus-visible,
[role="menuitem"]:focus-visible,
[role="option"]:focus-visible,
[tabindex]:not([tabindex="-1"]):focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
details[open] > summary:focus-visible,
.pv-btn:focus-visible,
.pv-link:focus-visible,
.button:focus-visible,
.link:focus-visible {
  outline: 2px solid var(--pa-gold) !important;
  outline-offset: 3px !important;
  box-shadow:
    0 0 0 1px var(--pa-cream),
    0 0 0 4px var(--pa-navy),
    0 0 0 5px var(--pa-gold) !important;
  border-radius: var(--pa-radius);
  transition: box-shadow 120ms var(--pa-ease);
}

/* Remove the legacy dotted outline when we provide our own ring */
a:focus:not(:focus-visible),
button:focus:not(:focus-visible),
summary:focus:not(:focus-visible) {
  outline: none;
}

/* Dark-surface override: on ink sections, invert the separator color */
.pv-section--ink a:focus-visible,
.pv-section--ink button:focus-visible,
.pv-section--ink .pv-btn:focus-visible,
[data-theme="dark"] :focus-visible {
  box-shadow:
    0 0 0 1px var(--pa-navy),
    0 0 0 4px var(--pa-cream),
    0 0 0 5px var(--pa-gold) !important;
}

/* ==========================================================================
   2. SKIP-TO-CONTENT LINK
   --------------------------------------------------------------------------
   Rationale: WCAG 2.4.1 bypass blocks. The link exists in layout/theme.liquid
   but is typically hidden off-canvas. On focus it should slide in from top,
   render as a navy panel with gold text, and be unmistakably tappable.
   ========================================================================== */
.skip-to-content-link {
  position: fixed !important;
  top: -100px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10000;
  padding: 14px 28px;
  background: var(--pa-navy) !important;
  color: var(--pa-gold) !important;
  font-family: var(--pa-heading);
  font-size: 0.95rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  text-decoration: none;
  border: 1px solid var(--pa-gold);
  border-top: none;
  border-radius: 0 0 4px 4px;
  box-shadow: 0 4px 18px rgba(34, 36, 50, 0.35);
  transition: top 220ms var(--pa-ease);
}
.skip-to-content-link:focus,
.skip-to-content-link:focus-visible {
  top: 0 !important;
  outline: none !important;
}

/* ==========================================================================
   3. .sr-only / VISUALLY-HIDDEN UTILITY
   --------------------------------------------------------------------------
   Rationale: display:none removes from a11y tree. Proper clip technique
   keeps text readable by screen readers while hiding visually. Applied to
   both our class and Shopify's default `visually-hidden`.
   ========================================================================== */
.sr-only,
.visually-hidden,
.pv-sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
}
/* Allow focusable sr-only elements to reveal themselves on focus */
.sr-only-focusable:focus,
.sr-only-focusable:focus-visible {
  position: static !important;
  width: auto !important;
  height: auto !important;
  clip: auto !important;
  clip-path: none !important;
  white-space: normal !important;
}

/* ==========================================================================
   4. REDUCED MOTION
   --------------------------------------------------------------------------
   Rationale: WCAG 2.3.3. Users with vestibular disorders opt-out of motion.
   We kill transforms, animations, scroll behavior, and any parallax, and
   replace them with quick opacity fades so state changes are still legible.
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 120ms !important;
    transition-property: opacity, color, background-color, border-color !important;
    scroll-behavior: auto !important;
  }
  /* Nullify transforms that cause motion sickness */
  [class*="parallax"],
  [class*="marquee"],
  [data-parallax],
  .pv-marquee,
  .pv-ticker,
  .pv-hero__bg,
  .pv-hero__media {
    transform: none !important;
    animation: none !important;
  }
  /* Preserve crucial focus ring transition */
  :focus-visible {
    transition: none !important;
  }
}

/* ==========================================================================
   5. FORCED COLORS / HIGH CONTRAST MODE
   --------------------------------------------------------------------------
   Rationale: Windows High Contrast / forced-colors should keep borders and
   focus visible. Use CanvasText and Highlight system colors.
   ========================================================================== */
@media (forced-colors: active) {
  .pv-btn,
  .button,
  button,
  input,
  select,
  textarea,
  .pv-card,
  .card {
    border: 1px solid CanvasText !important;
    forced-color-adjust: none;
  }
  :focus-visible {
    outline: 3px solid Highlight !important;
    outline-offset: 2px !important;
    box-shadow: none !important;
  }
  .skip-to-content-link {
    background: Canvas !important;
    color: LinkText !important;
    border-color: CanvasText !important;
  }
  img,
  svg {
    forced-color-adjust: auto;
  }
}

/* ==========================================================================
   6. KEYBOARD TAB-ORDER DEBUG HELPER (off by default)
   --------------------------------------------------------------------------
   Rationale: Add `data-a11y-debug` to <html> in devtools to visualize the
   tab order with a numbered gold outline. Never ships to users.
   ========================================================================== */
html[data-a11y-debug] a,
html[data-a11y-debug] button,
html[data-a11y-debug] input,
html[data-a11y-debug] select,
html[data-a11y-debug] textarea,
html[data-a11y-debug] [tabindex]:not([tabindex="-1"]) {
  outline: 1px dashed var(--pa-gold) !important;
  outline-offset: 2px !important;
  position: relative;
}
html[data-a11y-debug] *:focus-visible::after {
  content: "FOCUS";
  position: absolute;
  top: -18px;
  left: 0;
  font-size: 10px;
  font-family: var(--pa-body);
  color: var(--pa-navy);
  background: var(--pa-gold);
  padding: 2px 5px;
  border-radius: 2px;
}

/* ==========================================================================
   7. LOADING SKELETON SHIMMER
   --------------------------------------------------------------------------
   Rationale: Product cards, heroes, and carousel cards briefly show as
   skeletons while images/JSON load. We use a cream-to-beige gradient
   sweeping at a subtle angle. Honors reduced-motion (no sweep).
   ========================================================================== */
@keyframes pa-shimmer {
  0%   { background-position: -400px 0; }
  100% { background-position: 400px 0; }
}
.pa-skeleton,
.product-card--loading,
.product-recommendations__skeleton-item,
[data-loading="true"] .pv-card__media,
[data-loading="true"] .card__media {
  background: linear-gradient(
    100deg,
    var(--pa-beige) 0%,
    var(--pa-cream) 45%,
    var(--pa-beige) 90%
  );
  background-size: 800px 100%;
  animation: pa-shimmer 1400ms linear infinite;
  color: transparent !important;
  border-radius: var(--pa-radius);
  min-height: 1em;
}
@media (prefers-reduced-motion: reduce) {
  .pa-skeleton,
  .product-card--loading,
  .product-recommendations__skeleton-item {
    animation: none;
    background: var(--pa-beige);
  }
}

/* ==========================================================================
   8. EMPTY CART STATE
   --------------------------------------------------------------------------
   Rationale: cart-page--empty exists in main-cart.liquid. Give it an
   editorial center-stage treatment with generous whitespace, a gold thin
   rule above the CTA, and Tiller heading weight.
   ========================================================================== */
.cart-page--empty,
.cart-drawer--empty,
.cart__empty-state {
  text-align: center;
  padding: clamp(48px, 8vw, 120px) 24px;
  background: var(--pa-cream);
  color: var(--pa-navy);
}
.cart-page--empty h1,
.cart-page--empty h2,
.cart-drawer--empty h2 {
  font-family: var(--pa-heading);
  font-size: clamp(1.75rem, 4vw, 2.75rem);
  letter-spacing: -0.01em;
  margin-bottom: 0.5em;
}
.cart-page--empty p,
.cart-drawer--empty p {
  font-family: var(--pa-body);
  color: var(--pa-mute);
  max-width: 42ch;
  margin: 0 auto 2rem;
  line-height: 1.6;
}
.cart-page--empty::before,
.cart-drawer--empty::before {
  content: "";
  display: block;
  width: 48px;
  height: 1px;
  background: var(--pa-gold);
  margin: 0 auto 2rem;
}
.cart-page--empty a,
.cart-page--empty .button,
.cart-drawer--empty a,
.cart-drawer--empty .button {
  display: inline-block;
  margin-top: 1rem;
}

/* ==========================================================================
   9. EMPTY SEARCH RESULTS
   --------------------------------------------------------------------------
   Rationale: Mirror the empty-cart editorial voice so empty states feel
   like one family, not stock Shopify leftovers.
   ========================================================================== */
.template-search--empty,
.search-results--empty,
.facets-no-results,
.search__empty {
  text-align: center;
  padding: clamp(48px, 8vw, 120px) 24px;
}
.template-search--empty::before,
.search-results--empty::before,
.facets-no-results::before {
  content: "";
  display: block;
  width: 48px;
  height: 1px;
  background: var(--pa-gold);
  margin: 0 auto 1.5rem;
}

/* ==========================================================================
   10. EMPTY COLLECTION (no products)
   ========================================================================== */
.collection--empty,
.collection-listing--empty,
.pv-pg-empty {
  text-align: center;
  padding: clamp(48px, 8vw, 120px) 24px;
  font-family: var(--pa-heading);
  font-size: 1.5rem;
  color: var(--pa-navy);
  background: var(--pa-cream);
}
.pv-pg-empty::after {
  content: "";
  display: block;
  width: 48px;
  height: 1px;
  background: var(--pa-gold);
  margin: 1.25rem auto 0;
}

/* ==========================================================================
   11. FORM VALIDATION - ERROR STATES
   --------------------------------------------------------------------------
   Rationale: Avoid red (off-brand). Use navy 2px border + gold underline
   accent + small italic gold message. Error state is still unambiguous
   because the underline is 3px of solid gold.
   ========================================================================== */
input[aria-invalid="true"],
select[aria-invalid="true"],
textarea[aria-invalid="true"],
.field--error input,
.field--error select,
.field--error textarea,
.form__field--error input {
  border: 2px solid var(--pa-navy) !important;
  border-bottom: 3px solid var(--pa-gold) !important;
  background: var(--pa-cream) !important;
  color: var(--pa-navy);
}
.field__error,
.form__message--error,
.errors,
[role="alert"].form-error {
  color: var(--pa-gold-hover) !important;
  font-family: var(--pa-body);
  font-style: italic;
  font-size: 0.85rem;
  margin-top: 0.35rem;
  display: block;
  letter-spacing: 0.01em;
}
.field__error::before,
.form__message--error::before {
  content: "— ";
  color: var(--pa-gold);
  font-style: normal;
}

/* ==========================================================================
   12. FORM VALIDATION - SUCCESS
   --------------------------------------------------------------------------
   Rationale: Positive confirmation using gold checkmark + short italic line,
   no green. Uses CSS content for the checkmark glyph.
   ========================================================================== */
.field--success input,
.form__field--success input,
input[aria-invalid="false"][data-validated] {
  border-bottom: 3px solid var(--pa-gold) !important;
}
.form__message--success,
.field__success {
  color: var(--pa-navy);
  font-family: var(--pa-body);
  font-style: italic;
  font-size: 0.85rem;
  margin-top: 0.35rem;
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}
.form__message--success::before,
.field__success::before {
  content: "✓";
  display: inline-block;
  width: 1.1em;
  height: 1.1em;
  line-height: 1.1em;
  text-align: center;
  color: var(--pa-cream);
  background: var(--pa-gold);
  border-radius: 50%;
  font-style: normal;
  font-size: 0.72em;
  font-weight: 700;
}

/* ==========================================================================
   13. REQUIRED FIELD MARKER
   --------------------------------------------------------------------------
   Rationale: Small gold asterisk after required labels. Uses ARIA required
   and the .required class for maximum coverage without altering markup.
   ========================================================================== */
label.required::after,
label[data-required]::after,
.form-field--required > label::after,
label:has(+ input[required])::after,
label:has(+ textarea[required])::after,
label:has(+ select[required])::after {
  content: " *";
  color: var(--pa-gold);
  font-family: var(--pa-body);
  font-weight: 600;
  margin-left: 0.15rem;
}

/* ==========================================================================
   14. DISABLED BUTTON STATE
   --------------------------------------------------------------------------
   Rationale: Shopify often dims to 0.5 opacity which causes contrast fails.
   Use a soft cream-grey fill with navy 30% text, and remove hover effects.
   ========================================================================== */
button[disabled],
button[aria-disabled="true"],
.button[disabled],
.pv-btn[disabled],
.pv-btn.is-disabled,
input[type="submit"][disabled] {
  background: var(--pa-beige) !important;
  color: rgba(34, 36, 50, 0.45) !important;
  border-color: rgba(34, 36, 50, 0.18) !important;
  cursor: not-allowed !important;
  box-shadow: none !important;
  transform: none !important;
  opacity: 1 !important; /* override default .5 opacity from base */
}
button[disabled]:hover,
.pv-btn[disabled]:hover {
  background: var(--pa-beige) !important;
  color: rgba(34, 36, 50, 0.45) !important;
}

/* ==========================================================================
   15. DISABLED INPUT STATE
   ========================================================================== */
input[disabled],
select[disabled],
textarea[disabled],
.field--disabled input {
  background: var(--pa-beige) !important;
  color: rgba(34, 36, 50, 0.45) !important;
  border-color: rgba(34, 36, 50, 0.18) !important;
  cursor: not-allowed;
}

/* ==========================================================================
   16. SOLD-OUT PRODUCT STATE
   --------------------------------------------------------------------------
   Rationale: On product cards, add a subtle diagonal slash across the image
   and a navy "Sold Out" pill. Achieved via pseudo-elements so no markup
   change is needed. Uses [data-sold-out] hook if present; falls back to
   .product-card--sold-out / .card--sold-out conventional classes.
   ========================================================================== */
.product-card--sold-out .card__media,
.card--sold-out .card__media,
[data-sold-out="true"] .card__media,
.product-item--sold-out .product-item__image-wrapper {
  position: relative;
  overflow: hidden;
}
.product-card--sold-out .card__media::before,
.card--sold-out .card__media::before,
[data-sold-out="true"] .card__media::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to bottom right,
    transparent 0%,
    transparent calc(50% - 1px),
    var(--pa-gold) 50%,
    transparent calc(50% + 1px),
    transparent 100%
  );
  opacity: 0.55;
  pointer-events: none;
  z-index: 2;
}
.product-card--sold-out .card__media::after,
.card--sold-out .card__media::after,
[data-sold-out="true"] .card__media::after {
  content: "Sold Out";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: var(--pa-navy);
  color: var(--pa-cream);
  font-family: var(--pa-heading);
  font-size: 0.9rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 8px 16px;
  border: 1px solid var(--pa-gold);
  z-index: 3;
}

/* ==========================================================================
   17. LOADING BUTTON STATE
   --------------------------------------------------------------------------
   Rationale: [aria-busy] or .is-loading triggers a subtle shimmer sweep
   across the button + a gold spinner on the right edge. Text stays visible
   to avoid layout shift.
   ========================================================================== */
@keyframes pa-spin { to { transform: rotate(360deg); } }
@keyframes pa-btn-shimmer {
  0%   { background-position: -200px 0; }
  100% { background-position: 200px 0; }
}
button[aria-busy="true"],
.pv-btn.is-loading,
.button.loading,
[data-loading="true"].button {
  position: relative;
  color: var(--pa-cream) !important;
  background-image: linear-gradient(
    100deg,
    var(--pa-navy) 0%,
    rgba(185, 169, 119, 0.28) 45%,
    var(--pa-navy) 90%
  );
  background-size: 400px 100%;
  animation: pa-btn-shimmer 1300ms linear infinite;
  pointer-events: none;
  padding-right: 3.25em !important;
}
button[aria-busy="true"]::after,
.pv-btn.is-loading::after,
.button.loading::after {
  content: "";
  position: absolute;
  right: 1em;
  top: 50%;
  width: 14px;
  height: 14px;
  margin-top: -7px;
  border: 2px solid var(--pa-gold);
  border-top-color: transparent;
  border-radius: 50%;
  animation: pa-spin 700ms linear infinite;
}
@media (prefers-reduced-motion: reduce) {
  button[aria-busy="true"],
  .pv-btn.is-loading {
    animation: none;
    background: var(--pa-navy);
  }
  button[aria-busy="true"]::after {
    animation: none;
    border-top-color: var(--pa-gold);
  }
}

/* ==========================================================================
   18. NETWORK ERROR TOAST / BANNER
   --------------------------------------------------------------------------
   Rationale: Global [role="status"] / .pa-toast container for error banners
   injected by JS. Navy background, gold rule, slides in from top.
   ========================================================================== */
@keyframes pa-toast-in {
  from { opacity: 0; transform: translate(-50%, -12px); }
  to   { opacity: 1; transform: translate(-50%, 0); }
}
.pa-toast,
.network-error-banner,
[role="status"].toast--error,
[role="alert"].toast {
  position: fixed;
  top: 24px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 9500;
  background: var(--pa-navy);
  color: var(--pa-cream);
  border: 1px solid var(--pa-gold);
  border-top: 3px solid var(--pa-gold);
  padding: 14px 22px;
  font-family: var(--pa-body);
  font-size: 0.9rem;
  letter-spacing: 0.01em;
  box-shadow: 0 12px 40px rgba(34, 36, 50, 0.35);
  max-width: min(560px, calc(100vw - 32px));
  animation: pa-toast-in 260ms var(--pa-ease);
}
.pa-toast strong,
.network-error-banner strong {
  font-family: var(--pa-heading);
  color: var(--pa-gold);
  margin-right: 0.5em;
}

/* ==========================================================================
   19. 404 PAGE POLISH
   --------------------------------------------------------------------------
   Rationale: Editorial treatment for the 404 template. Big Tiller numeral
   via pseudo-element (no copy change), generous airy layout, gold divider.
   ========================================================================== */
.template-404 main,
.shopify-section--404,
.page-404 {
  background: var(--pa-cream);
  color: var(--pa-navy);
  text-align: center;
  padding: clamp(56px, 10vw, 160px) 24px;
}
.template-404 h1,
.page-404 h1 {
  font-family: var(--pa-heading);
  font-size: clamp(2rem, 5vw, 3.5rem);
  letter-spacing: -0.01em;
  margin-bottom: 0.75rem;
}
.template-404 h1::after,
.page-404 h1::after {
  content: "";
  display: block;
  width: 64px;
  height: 1px;
  background: var(--pa-gold);
  margin: 1.25rem auto;
}
.template-404 .button,
.page-404 .button {
  margin-top: 1.5rem;
}

/* ==========================================================================
   20. PRINT STYLESHEET
   --------------------------------------------------------------------------
   Rationale: Receipts, order confirmations, and recipe pages should print
   cleanly — no nav, no hero media, no dark fills, consistent 11pt serif,
   full URLs expanded next to links for paper reading.
   ========================================================================== */
@media print {
  *,
  *::before,
  *::after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
    filter: none !important;
  }
  html, body {
    font-family: Georgia, 'Tiller', serif;
    font-size: 11pt;
    line-height: 1.5;
  }
  header,
  nav,
  .header,
  .site-header,
  .pv-header,
  footer,
  .footer,
  .site-footer,
  .pv-footer,
  .announcement-bar,
  .cart-drawer,
  .drawer,
  .modal,
  [role="banner"],
  [role="navigation"],
  [role="complementary"],
  .skip-to-content-link,
  video,
  iframe,
  .pv-marquee,
  .pv-ticker,
  .pa-toast {
    display: none !important;
  }
  main { padding: 0 !important; }
  h1, h2, h3 { page-break-after: avoid; }
  img { max-width: 100% !important; page-break-inside: avoid; }
  a[href]::after {
    content: " (" attr(href) ")";
    font-size: 9pt;
    color: #555 !important;
  }
  a[href^="#"]::after,
  a[href^="javascript:"]::after {
    content: "";
  }
  table, blockquote { page-break-inside: avoid; }
  tr, img, figure { page-break-inside: avoid; }
}

/* ==========================================================================
   21. FORCED COLOR MODE TEST HELPERS
   --------------------------------------------------------------------------
   Rationale: Make sure iconography that relies on background-image gets a
   visible border fallback, and ensure our brand rules resolve to system
   colors when forced-colors is active.
   ========================================================================== */
@media (forced-colors: active) {
  .pv-divider,
  hr,
  .pv-rule {
    background: CanvasText !important;
    height: 1px;
  }
  .pa-skeleton {
    background: Canvas !important;
    border: 1px dashed CanvasText;
    animation: none;
  }
  .product-card--sold-out .card__media::after {
    background: Canvas !important;
    color: CanvasText !important;
    border: 2px solid CanvasText !important;
  }
}

/* ==========================================================================
   22. FOCUS TRAP STYLING FOR MODALS
   --------------------------------------------------------------------------
   Rationale: When a modal/dialog is open, dim + block the underlying page.
   The first focusable element inside gets an elevated ring so testers can
   see the trap is working.
   ========================================================================== */
dialog[open],
[role="dialog"][aria-modal="true"],
.modal.is-open {
  outline: none;
}
dialog[open]::backdrop,
[role="dialog"][aria-modal="true"] ~ .modal-backdrop,
.modal.is-open .modal__backdrop {
  background: var(--pa-scrim) !important;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
body:has(dialog[open]),
body:has([role="dialog"][aria-modal="true"]),
body.modal-open {
  overflow: hidden;
}
dialog[open] :focus-visible,
[role="dialog"][aria-modal="true"] :focus-visible {
  box-shadow:
    0 0 0 2px var(--pa-cream),
    0 0 0 5px var(--pa-gold) !important;
}

/* ==========================================================================
   23. SCROLL-POSITION INDICATOR
   --------------------------------------------------------------------------
   Rationale: Thin gold progress bar at the top of the page, CSS-only via
   scroll-driven animations (progressive enhancement — silently ignored on
   older browsers). Useful on long article/recipe pages.
   ========================================================================== */
@supports (animation-timeline: scroll()) {
  .pa-scroll-progress,
  body::before {
    content: "";
    position: fixed;
    top: 0;
    left: 0;
    height: 2px;
    width: 100%;
    background: var(--pa-gold);
    transform-origin: 0 50%;
    transform: scaleX(0);
    z-index: 9999;
    animation: pa-scroll-progress linear;
    animation-timeline: scroll(root);
    pointer-events: none;
  }
  @keyframes pa-scroll-progress {
    to { transform: scaleX(1); }
  }
  /* Opt-out: sites can add .no-scroll-progress to <body> */
  body.no-scroll-progress::before { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  body::before { display: none; }
}

/* ==========================================================================
   24. COOKIE / CONSENT NOTICE
   --------------------------------------------------------------------------
   Rationale: Shopify injects a consent banner via #shopify-pc__banner. Style
   it to match brand: cream card with gold rule, navy body text. Stays
   pinned to bottom with safe-area padding for iPhone notch.
   ========================================================================== */
#shopify-pc__banner,
.pa-consent-banner,
.cookie-banner {
  background: var(--pa-cream) !important;
  color: var(--pa-navy) !important;
  font-family: var(--pa-body);
  border-top: 2px solid var(--pa-gold) !important;
  box-shadow: 0 -8px 30px rgba(34, 36, 50, 0.12);
  padding: 16px 20px calc(16px + env(safe-area-inset-bottom)) !important;
}
#shopify-pc__banner__body,
.cookie-banner__body {
  color: var(--pa-navy) !important;
  font-size: 0.9rem;
  line-height: 1.5;
}
#shopify-pc__banner button,
.cookie-banner button {
  font-family: var(--pa-heading);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  border: 1px solid var(--pa-navy);
}
#shopify-pc__banner button[data-pc-accept],
.cookie-banner__accept {
  background: var(--pa-navy) !important;
  color: var(--pa-gold) !important;
  border-color: var(--pa-navy) !important;
}

/* ==========================================================================
   25. ADDRESS AUTOCOMPLETE DROPDOWN
   --------------------------------------------------------------------------
   Rationale: Google Places / Shopify address lookup lists should match
   brand. Cream panel, gold hover, navy text, Tiller headings if any.
   ========================================================================== */
.pac-container,
.address-autocomplete,
.address-lookup__results,
ul[role="listbox"].address-suggestions {
  background: var(--pa-cream) !important;
  border: 1px solid var(--pa-rule-strong) !important;
  border-top: 2px solid var(--pa-gold) !important;
  font-family: var(--pa-body) !important;
  box-shadow: 0 12px 30px rgba(34, 36, 50, 0.18) !important;
  border-radius: 0 !important;
}
.pac-item,
.address-autocomplete li,
.address-lookup__results li {
  color: var(--pa-navy) !important;
  border-top: 1px solid var(--pa-rule) !important;
  padding: 10px 14px !important;
  cursor: pointer;
}
.pac-item:hover,
.pac-item-selected,
.address-autocomplete li[aria-selected="true"],
.address-autocomplete li:hover {
  background: var(--pa-beige) !important;
  color: var(--pa-navy) !important;
  border-left: 3px solid var(--pa-gold) !important;
  padding-left: 11px !important;
}

/* ==========================================================================
   26. COUNTRY / LOCALIZATION DROPDOWN
   --------------------------------------------------------------------------
   Rationale: Localization form lists country + currency. Give flags a
   consistent size, hover state, and ensure the focused option is obvious.
   ========================================================================== */
.localization-form__select,
.disclosure__list--countries,
.country-selector__list,
localization-form ul {
  background: var(--pa-cream);
  border: 1px solid var(--pa-rule-strong);
  border-top: 2px solid var(--pa-gold);
  max-height: 360px;
  overflow-y: auto;
  font-family: var(--pa-body);
}
.disclosure__list--countries li,
.country-selector__list li,
localization-form li {
  padding: 10px 14px;
  color: var(--pa-navy);
  display: flex;
  align-items: center;
  gap: 10px;
  border-top: 1px solid var(--pa-rule);
}
.disclosure__list--countries li img,
.country-selector__list li img,
localization-form li img {
  width: 20px;
  height: auto;
  flex: 0 0 20px;
  border: 1px solid var(--pa-rule);
}
.disclosure__list--countries li:hover,
.disclosure__list--countries li[aria-current="true"],
.country-selector__list li:hover {
  background: var(--pa-beige);
  border-left: 3px solid var(--pa-gold);
  padding-left: 11px;
}

/* ==========================================================================
   27. TOOLTIP FOR ICON-ONLY BUTTONS
   --------------------------------------------------------------------------
   Rationale: Buttons with only an SVG icon need label-on-hover. We show a
   tiny navy tooltip populated from the `aria-label` attribute. Delayed 400ms
   to avoid flicker. Hidden at reduced motion per user preference only for
   entrance animation, tooltip still appears.
   ========================================================================== */
button[aria-label]:not([aria-label=""]):hover::after,
button[aria-label]:not([aria-label=""]):focus-visible::after,
a[aria-label]:not([aria-label=""])[class*="icon"]:hover::after,
a[aria-label]:not([aria-label=""])[class*="icon"]:focus-visible::after {
  content: attr(aria-label);
  position: absolute;
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%);
  background: var(--pa-navy);
  color: var(--pa-cream);
  font-family: var(--pa-body);
  font-size: 11px;
  letter-spacing: 0.04em;
  text-transform: none;
  padding: 5px 9px;
  border: 1px solid var(--pa-gold);
  white-space: nowrap;
  pointer-events: none;
  z-index: 9000;
  opacity: 0;
  animation: pa-tooltip-in 160ms var(--pa-ease) 400ms forwards;
}
@keyframes pa-tooltip-in {
  to { opacity: 1; }
}
/* Only apply tooltip pattern where the button is an icon-only positional */
button[aria-label]:hover,
a[aria-label][class*="icon"]:hover {
  position: relative;
}
/* Suppress tooltip where text label is already visible */
button[aria-label] span:not(.sr-only):not(.visually-hidden) ~ *::after {
  display: none;
}

/* ==========================================================================
   28. ARIA LIVE REGION STYLING
   --------------------------------------------------------------------------
   Rationale: [aria-live] status regions should be visually hidden but
   reachable by assistive tech. Separate class from sr-only in case we
   later want to visually reveal for debugging.
   ========================================================================== */
[aria-live="polite"]:empty,
[aria-live="assertive"]:empty,
[role="status"]:empty:not(.pa-toast):not(.network-error-banner) {
  position: absolute !important;
  width: 1px; height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
  padding: 0; margin: -1px;
}

/* ==========================================================================
   29. MODAL / DIALOG OVERLAY DESIGN
   --------------------------------------------------------------------------
   Rationale: Unified modal card: cream body, gold top rule, navy heading,
   thin close button in top right, backdrop blur. Applied to <dialog>,
   [role="dialog"], and the theme's .modal pattern.
   ========================================================================== */
dialog,
[role="dialog"][aria-modal="true"] > .dialog,
.modal__content,
.modal__dialog {
  background: var(--pa-cream);
  color: var(--pa-navy);
  border: none;
  border-top: 3px solid var(--pa-gold);
  border-radius: 2px;
  padding: clamp(24px, 4vw, 48px);
  max-width: min(640px, 92vw);
  box-shadow: 0 30px 90px rgba(34, 36, 50, 0.35);
  font-family: var(--pa-body);
}
dialog h1, dialog h2, dialog h3,
.modal__content h1, .modal__content h2, .modal__content h3 {
  font-family: var(--pa-heading);
  color: var(--pa-navy);
  margin-top: 0;
}
dialog .close,
dialog [aria-label="Close"],
.modal__close,
.modal__content button[aria-label*="lose"] {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 36px;
  height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  color: var(--pa-navy);
  border: 1px solid var(--pa-rule);
  border-radius: 50%;
  cursor: pointer;
  transition: background 160ms var(--pa-ease), border-color 160ms var(--pa-ease);
}
dialog .close:hover,
.modal__close:hover {
  background: var(--pa-navy);
  color: var(--pa-cream);
  border-color: var(--pa-gold);
}

/* ==========================================================================
   30. DRAWER / OFFCANVAS DESIGN
   --------------------------------------------------------------------------
   Rationale: Cart drawer, menu drawer, filter drawer. Slide in from edge,
   cream panel, gold rule, scrim with blur. Close button mirrors modal.
   ========================================================================== */
.drawer,
.cart-drawer__content,
.menu-drawer,
[data-drawer] {
  background: var(--pa-cream) !important;
  color: var(--pa-navy);
  border-left: 3px solid var(--pa-gold);
  box-shadow: -20px 0 60px rgba(34, 36, 50, 0.35);
  font-family: var(--pa-body);
}
.drawer.is-open::before,
.cart-drawer[open]::before,
[data-drawer][aria-hidden="false"]::before {
  content: "";
  position: fixed;
  inset: 0;
  background: var(--pa-scrim);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  z-index: -1;
  animation: pa-fade-in 200ms var(--pa-ease);
}
@keyframes pa-fade-in { from { opacity: 0; } to { opacity: 1; } }
.drawer__close,
.cart-drawer__close,
.menu-drawer__close {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 36px;
  height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  color: var(--pa-navy);
  border: 1px solid var(--pa-rule);
  border-radius: 50%;
}
.drawer__close:hover,
.cart-drawer__close:hover,
.menu-drawer__close:hover {
  background: var(--pa-navy);
  color: var(--pa-cream);
  border-color: var(--pa-gold);
}
.drawer h2,
.cart-drawer__heading,
.menu-drawer h2 {
  font-family: var(--pa-heading);
  color: var(--pa-navy);
  border-bottom: 1px solid var(--pa-rule);
  padding-bottom: 0.75rem;
  margin-bottom: 1rem;
}

/* ==========================================================================
   31. CARET / CHEVRON ROTATION FOR ACCORDIONS
   --------------------------------------------------------------------------
   Rationale: Accordions (<details>/<summary>) need a visible affordance.
   Rotate any chevron inside the summary when [open]. Reduced-motion safe.
   ========================================================================== */
details > summary {
  cursor: pointer;
  list-style: none;
  position: relative;
}
details > summary::-webkit-details-marker { display: none; }
details > summary .chevron,
details > summary svg[class*="chevron"],
details > summary svg[class*="caret"] {
  transition: transform 240ms var(--pa-ease);
}
details[open] > summary .chevron,
details[open] > summary svg[class*="chevron"],
details[open] > summary svg[class*="caret"] {
  transform: rotate(180deg);
}
@media (prefers-reduced-motion: reduce) {
  details > summary .chevron,
  details > summary svg[class*="chevron"] { transition: none; }
}

/* ==========================================================================
   32. SELECTION COLORS
   --------------------------------------------------------------------------
   Rationale: Reinforce brand on text selection. Provis-brand already sets
   this but we harden for dark-section surfaces too.
   ========================================================================== */
::selection {
  background: var(--pa-gold);
  color: var(--pa-navy);
}
.pv-section--ink ::selection,
[data-theme="dark"] ::selection {
  background: var(--pa-gold);
  color: var(--pa-navy);
}

/* ==========================================================================
   33. TARGET HIGHLIGHT (anchor links)
   --------------------------------------------------------------------------
   Rationale: When user lands on an in-page anchor, briefly highlight the
   target so the eye can find it. Pure CSS, no JS.
   ========================================================================== */
:target {
  scroll-margin-top: 96px; /* avoid being hidden under sticky header */
}
:target > :first-child,
section:target h1,
section:target h2,
section:target h3 {
  animation: pa-target-flash 1800ms var(--pa-ease);
}
@keyframes pa-target-flash {
  0%   { background: rgba(185, 169, 119, 0.0); }
  20%  { background: rgba(185, 169, 119, 0.35); }
  100% { background: rgba(185, 169, 119, 0.0); }
}
@media (prefers-reduced-motion: reduce) {
  :target > :first-child { animation: none; }
}

/* ==========================================================================
   34. MINIMUM TAP TARGET (WCAG 2.5.5 AAA / 2.5.8 AA)
   --------------------------------------------------------------------------
   Rationale: Ensure interactive elements have a minimum 24x24 hit area.
   Applied via min-height only on small icon controls to avoid layout shift
   on already-large buttons.
   ========================================================================== */
button[class*="icon"],
a[class*="icon-only"],
.icon-button,
.pv-icon-btn {
  min-width: 44px;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* ==========================================================================
   35. CARET COLOR IN INPUTS
   --------------------------------------------------------------------------
   Rationale: Default caret color on cream fields is hard to see; force the
   text cursor to gold for better visibility.
   ========================================================================== */
input,
textarea,
[contenteditable="true"] {
  caret-color: var(--pa-gold);
}

/* ==========================================================================
   36. LINK UNDERLINE OFFSET
   --------------------------------------------------------------------------
   Rationale: Underlines touching glyph descenders hurt legibility. Push the
   underline down and thicken slightly. Only body links, not navigation.
   ========================================================================== */
main a:not(.button):not(.pv-btn):not([class*="nav"]):not([class*="menu"]) {
  text-underline-offset: 0.22em;
  text-decoration-thickness: 1px;
  text-decoration-color: var(--pa-gold);
}
main a:not(.button):not(.pv-btn):hover {
  text-decoration-color: var(--pa-navy);
}

/* ==========================================================================
   APPENDIX A — axe-core remediation pass (2026-04-08)
   --------------------------------------------------------------------------
   Targeted CSS-only fixes for violations found by @axe-core/playwright on
   the live storefront. Each rule references the axe rule id it addresses.
   Where markup can't be changed (sections owned by other agents, or core
   Shopify web components), we use high-specificity overrides.
   ========================================================================== */

/* ---- Strong gold body text: deepen for AA contrast (4.5:1) -------------
   color-contrast: #B9A977 (gold) on #F8FAEF (cream) is 2.21:1 — fail.
   New token --pa-gold-strong = #8b7c4a = 4.54:1 on cream.
   We only apply this to body-sized gold TEXT, never to backgrounds/borders. */
:root {
  --pa-gold-strong: #7a6b3c;  /* 4.98:1 on cream, AA body */
  --pa-gold-strong-lg: #a08a52; /* 3.1:1 on cream, AA large-text only */
  --pa-ink-muted-aa: #5a5c64; /* replaces any #787a7e muted gray on cream */
}

/* Product/blend card titles rendered as <strong> in gold on cream.
   Force deeper gold with high specificity (.pv-cc__intro-callout has 0,1,1
   so we use an ID + class chain to exceed it). */
html body #MainContent .pv-cc__intro-callout a strong,
html body #MainContent .pv-cc__intro-callout strong,
html body #MainContent .pv-cc a strong,
html body #MainContent .pv-cc strong,
html body main a > strong,
html body main a strong,
html body main strong,
html body .pv-blend-card strong,
html body .pv-featured-blend strong,
html body [class*="blends"] a strong,
html body [class*="home"] a strong {
  color: var(--pa-gold-strong, #7a6b3c) !important;
}

/* Wholesale inquiry eyebrow + em accent (owned by other agent, overridden) */
html body .pv-wi__eyebrow,
html body [class*="pv-wi-"] .pv-wi__eyebrow {
  color: var(--pa-gold-strong) !important;
}
html body .pv-wi__heading em,
html body .pv-wi__heading > em,
html body [class*="pv-wi-"] .pv-wi__heading em {
  color: var(--pa-gold-strong) !important;
}
html body .pv-wi__note,
html body [class*="pv-wi-"] .pv-wi__note {
  color: var(--pa-ink-muted-aa, #5a5c64) !important;
}

/* Shipping progress hint line — need to win over .pv-sp-<id> .pv-sp__hint.
   NOTE: the upstream rule uses opacity: 0.6 which kills contrast; override. */
html body .pv-sp__hint,
html body [class*="pv-sp-"] .pv-sp__hint,
html body section[class*="pv-sp"] .pv-sp__hint {
  color: var(--pa-ink-muted-aa, #5a5c64) !important;
  opacity: 1 !important;
}

/* Subscription tiers eyebrow text (wrapped in forbidden section, override) */
body [class*="pv-sub-tiers-eyebrow"],
body .pv-sub-tier-eyebrow,
body .pv-sub-tiers-eyebrow {
  color: var(--pa-gold-strong) !important;
}

/* Merch-story + collection-hero + origins-strip eyebrows (gold on cream) */
body .pv-merch-story-eyebrow,
body [class*="collection-hero"] [class*="eyebrow"],
body [class*="origins-strip"] [class*="eyebrow"] {
  color: var(--pa-gold-strong) !important;
}

/* Any loose muted gray p on cream in cart / info pages */
body .cart-items__wrapper p,
body .cart-items__wrapper p a,
body .pv-pop p.pv-pop__hint,
body .pv-info-muted,
body p[class*="muted"],
body .text-block p {
  color: var(--pa-ink-muted-aa) !important;
}

/* Cart totals large gold <strong> (e.g., "$50") — deepen to large-text AA */
body .totals__subtotal-value,
body .cart__ctas strong,
body [data-cart-summary] strong {
  color: var(--pa-navy) !important;
}

/* Shopify localization currency code on navy footer — was #222432 on #1c1e29 */
body [data-testid="localization-currency-code"],
body .localization-selector [data-testid="localization-currency-code"],
body footer [data-testid="localization-currency-code"] {
  color: #e8eae1 !important;
}

/* Shopify password-gate footer (gold on cream fails) */
html body .password-footer__button,
html body .password-footer a,
html body .password-footer [href*="admin"] {
  color: var(--pa-gold-strong, #8b7c4a) !important;
}

/* ---- aria-hidden-focus: Shopify product-title duplicate link -----------
   Shopify's product-card ships a duplicate <a aria-hidden="true"> inside
   <product-title> for click-area expansion. It's focusable (has href) which
   violates the rule. Removing it from tab order via CSS isn't possible, but
   we can use pointer-events guard + the companion JS in provis-aesthetic.js
   will set tabindex=-1. The CSS here just makes it non-interactive visually. */
product-title a[aria-hidden="true"],
.card-gallery a[aria-hidden="true"][ref="productTitleLink"] {
  pointer-events: none;
}

/* ---- landmark-unique: duplicate announcement-bar / nav landmarks --------
   Shopify renders <aside class="announcement-bar"> possibly twice and
   accordion menus emit <nav> landmarks without labels. CSS can't add
   aria attributes, so JS in provis-aesthetic.js labels them. This rule
   ensures they're still visible. */

/* ---- list: <ul part="list"> with role=presentation children -----------
   Shopify's <overflow-list> emits <li role="presentation"> items. Addressed
   in JS (provis-aesthetic.js) by removing the role=presentation attribute. */

/* ---- aria-allowed-role: button[role="listitem"] "More" overflow item ---
   Shopify emits <button role="listitem"> in header menu overflow.
   Fixed in JS (provis-aesthetic.js) by removing the invalid role. */

/* ---- heading-order fallback: style h3-as-h2 so visual hierarchy OK -----
   Can't change markup in owned sections, so JS promotes specific offending
   h3s to h2 when they are the first heading in their block. */

/* ==========================================================================
   37. MOBILE BREAKPOINT FIXES (<=767px)
   --------------------------------------------------------------------------
   Rationale: Mobile QA audit (2026-04-08) surfaced five top issues at
   iPhone-13 viewport (375x812). All fixes are CSS-only, mobile-scoped, and
   do not touch any in-flight sections. See /tmp/audit-mobile/REPORT.md for
   the full before/after.
   ==========================================================================

   Issue 1 — iOS input zoom: form inputs under 16px cause iOS Safari to
             zoom in on focus. Bump all real inputs to 16px on mobile. */
@media (max-width: 767px) {
  input[type="text"],
  input[type="email"],
  input[type="search"],
  input[type="tel"],
  input[type="url"],
  input[type="password"],
  input[type="number"],
  input:not([type]),
  textarea,
  select {
    font-size: 16px !important;
  }
}

/* Issue 2 — Footer/menu list links render at 10–12.48px, well under the
             13px legibility floor for running text on mobile. Bump to 14px
             and tighten letter-spacing so lines don't re-wrap. Applies to
             footer utility row, mega-menu list columns, and the
             menu-drawer list items.

             NOTE: provis-brand.css has a 5-selector rule with !important
             targeting .header__menu a, .header-menu a, etc. at 10px. We
             must over-specify here to win the cascade. The easiest path
             is to chain html+body+the original selector so our specificity
             strictly exceeds the existing rule. */
@media (max-width: 767px) {
  html body .footer-utilities__text,
  html body .footer-utilities a,
  html body .menu-list__link,
  html body .menu-list__link-title,
  html body .menu__heading__default,
  html body .menu-drawer .menu__item,
  html body .menu-drawer__menu a,
  html body .menu-drawer__menu-item,
  html body .header__menu .menu-list__link,
  html body .header-menu .menu-list__link,
  html body .header__navigation-bar-row .menu-list__link,
  html body .header-row .menu-list__link,
  html body [class*="header-menu"] .menu-list__link {
    font-size: 14px !important;
    line-height: 1.35 !important;
    letter-spacing: 0.04em !important;
  }
}

/* Issue 3 — Touch targets under 44x44 in the menu drawer and cart UI.
             Bump min-height on drawer list rows and cart action buttons.
             Icon-only buttons already have a 44x44 rule above; this
             extends coverage to text links rendered as list rows and to
             tiny cart "add-to-cart-text" control labels. */
@media (max-width: 767px) {
  .menu-drawer .menu__item,
  .menu-drawer__menu a,
  .menu-list__link,
  .menu-drawer__menu-item > a,
  .footer-utilities a {
    min-height: 44px;
    display: flex;
    align-items: center;
  }
  .menu-drawer .menu__item {
    padding-block: 10px;
  }
  /* Cart drawer / cart page add/remove labels */
  .add-to-cart-text,
  .add-to-cart-text__content {
    font-size: 12px !important;
    line-height: 1.3 !important;
  }
  /* Close buttons sitting at 40x40 — round up the last 4px */
  .close-button,
  button.close-button {
    min-width: 44px !important;
    min-height: 44px !important;
  }
}

/* Issue 4 — Localization form (country/currency selector) list items render
             at 12.48px in a long 28-row popover. On mobile this is fiddly
             to tap and hard to read. Bump font and row height. The list is
             hidden inside a details/popover so the layout cost is zero. */
@media (max-width: 767px) {
  .localization-form__list-item,
  .localization-form__list-item .country,
  .localization-form__list-item .localization-form__currency,
  .country-filter__input {
    font-size: 15px !important;
    line-height: 1.4 !important;
  }
  .localization-form__list-item {
    min-height: 44px;
    padding-block: 10px;
  }
}

/* Issue 5 — iPhone notch / home-indicator safe area. Sticky bottom bars
             (cart drawer footer, subscribe CTA, etc.) need bottom padding
             that respects env(safe-area-inset-bottom). Apply to common
             sticky footer containers without touching owned sections.
             Also ensure the document viewport does not horizontally scroll
             under any circumstance — a belt-and-braces clamp. */
@media (max-width: 767px) {
  html, body {
    overflow-x: hidden;
    max-width: 100vw;
  }
  .cart-drawer__footer,
  .drawer__footer,
  .sticky-bottom-bar,
  [data-sticky-bottom],
  .pv-sticky-cta {
    padding-bottom: calc(16px + env(safe-area-inset-bottom)) !important;
  }
}

/* Disable sticky :hover states on touch devices so buttons don't look
   "stuck" after a tap. Uses (hover: none) rather than max-width so it's
   triggered by capability, not viewport. */
@media (hover: none) {
  a:hover,
  button:hover,
  .button:hover,
  .pv-btn:hover {
    /* Reset the hover-state transform/opacity; real :active still fires. */
    transform: none !important;
    opacity: 1 !important;
  }
}

/* ==========================================================================
   SECTION 38 — MOBILE WORLD-CLASS OVERHAUL (2026-04-08)
   Full-page audit at 375px viewport. Desktop unaffected.
   Scope: @media (max-width: 767px) only.
   ========================================================================== */
@media (max-width: 767px) {

  /* -- 38.1 Hero cap tighter — prior was 70svh, still too tall on small
        phones combined with announcement bar + header. Pull to 62svh with
        a hard 560px ceiling so the section beneath is always hinted. --- */
  .pv-hero,
  .pv-img-hero {
    min-height: 62svh !important;
    height: auto !important;
    max-height: 560px !important;
  }

  /* -- 38.2 Collection hero (All Coffee, Reserve, etc) — trim padding
        and headline so product grid enters first viewport. ---------- */
  [class*="pv-collection-hero"] .pv-collection-hero__inner,
  .pv-collection-hero__inner,
  .pv-coll-hero__inner {
    padding-top: 44px !important;
    padding-bottom: 32px !important;
  }
  .pv-collection-hero__title,
  .pv-coll-hero__title {
    font-size: clamp(2rem, 9vw, 2.6rem) !important;
    line-height: 1.05 !important;
  }
  .pv-collection-hero__lead,
  .pv-coll-hero__lead {
    font-size: 0.96rem !important;
    line-height: 1.55 !important;
  }

  /* -- 38.3 Generic section vertical padding — most Provis sections
        inherit 90-110px top/bottom on desktop. Trim ~35% on mobile. - */
  .shopify-section {
    --pv-section-pad-y: 56px;
  }
  .shopify-section > section,
  .shopify-section > .pv-section,
  .shopify-section > div[class*="pv-"] {
    /* don't override sections that explicitly set their own mobile padding */
  }
  [class*="pv-values-"] .pv-values-inner,
  [class*="pv-process-"] .pv-process-inner,
  [class*="pv-producer-"] .pv-producer-inner,
  [class*="pv-story-"] .pv-story-inner,
  [class*="pv-brew-"] .pv-brew-inner,
  [class*="pv-origins-"] .pv-origins-inner,
  [class*="pv-recipe-"] .pv-recipe-inner,
  [class*="pv-cta-banner-"] .pv-cta-banner-inner {
    padding-top: 44px !important;
    padding-bottom: 44px !important;
  }

  /* -- 38.4 Primary CTAs full-width on mobile, 48px min tap target. - */
  .pv-btn,
  .button,
  .shopify-payment-button__button,
  .pv-wi__submit,
  .pv-newsletter__submit,
  .pv-cta,
  a.pv-btn,
  button.pv-btn {
    min-height: 48px !important;
  }
  /* Stand-alone CTAs inside standard content blocks go full-width */
  .pv-hero__cta-row .pv-btn,
  .pv-img-hero__cta .pv-btn,
  .pv-cta-banner .pv-btn,
  .pv-wi__submit,
  .pv-story-cta .pv-btn,
  .pv-bt__cta,
  .pv-sub__cta {
    width: 100% !important;
    max-width: 360px !important;
    text-align: center !important;
    justify-content: center !important;
  }

  /* -- 38.5 Form inputs — 16px minimum font-size prevents iOS auto-zoom.
        Also ensure tap-target height ≥ 44px. --------------------------- */
  input[type="text"],
  input[type="email"],
  input[type="tel"],
  input[type="url"],
  input[type="number"],
  input[type="search"],
  input[type="password"],
  select,
  textarea,
  .field__input {
    font-size: 16px !important;
    min-height: 44px !important;
  }
  textarea,
  .field__input[is="textarea"] {
    min-height: 88px !important;
  }

  /* -- 38.6 Announcement bar — slim down on mobile. ----------------- */
  .announcement-bar,
  .pv-announcement,
  .utility-bar {
    font-size: 11px !important;
    letter-spacing: 0.04em !important;
    padding-top: 6px !important;
    padding-bottom: 6px !important;
  }
  .announcement-bar__message,
  .pv-announcement__text {
    padding-top: 4px !important;
    padding-bottom: 4px !important;
  }

  /* -- 38.7 Header — keep compact, no oversize logo eating the bar. - */
  .header,
  .pv-header {
    padding-top: 8px !important;
    padding-bottom: 8px !important;
  }
  .header__heading-logo,
  .pv-header__logo img {
    max-height: 36px !important;
    width: auto !important;
  }

  /* -- 38.8 PDP — space under the main buy block so sticky bar doesn't
        obscure the last action row while the user is still above it. - */
  body[data-template*="product"] main {
    padding-bottom: 84px !important;
  }
  /* Hide the empty product-recommendations skeleton on mobile — it
     renders ~400px of blank tiles when there are no recs. */
  body[data-template*="product"] product-recommendations:empty,
  body[data-template*="product"] .product-recommendations:empty,
  body[data-template*="product"] .product-recommendations__heading:only-child {
    display: none !important;
  }
  /* Tighten PDP title + price block vertical spacing. */
  .product__title,
  .product-title,
  .pv-pdp__title {
    font-size: clamp(1.9rem, 8vw, 2.4rem) !important;
    line-height: 1.08 !important;
    margin-bottom: 8px !important;
  }
  .product__info-wrapper,
  .product__info-container {
    padding-top: 20px !important;
  }

  /* -- 38.9 Cart empty state — trim the massive vertical gap. ----- */
  .cart__empty-text,
  .cart-empty,
  .cart__empty {
    padding-top: 48px !important;
    padding-bottom: 48px !important;
  }
  .cart__empty-text h1,
  .cart__empty h1,
  .cart-empty h1 {
    font-size: clamp(2rem, 9vw, 2.6rem) !important;
    margin-bottom: 12px !important;
  }

  /* -- 38.10 Product grid — force 2-up with tight gap on collection
        pages. Some templates still ship 1-up on phone. ------------- */
  .product-grid,
  .collection .grid--2-col-tablet-down,
  .collection-listing__grid,
  .pv-coll__grid,
  ul.product-grid {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 12px !important;
  }
  .product-grid > li,
  .collection-listing__grid > li,
  .pv-coll__grid > * {
    width: auto !important;
    max-width: 100% !important;
  }
  .card__heading,
  .product-card__title {
    font-size: 0.95rem !important;
    line-height: 1.2 !important;
  }

  /* -- 38.11 Newsletter / footer forms — stack input+button cleanly. */
  .pv-newsletter__form,
  .newsletter-form__field-wrapper,
  .footer__newsletter form {
    flex-direction: column !important;
    gap: 10px !important;
  }
  .pv-newsletter__input,
  .pv-newsletter__submit,
  .newsletter-form__field,
  .newsletter-form__button {
    width: 100% !important;
  }

  /* -- 38.12 Footer accordions — ensure 48px tappable row. --------- */
  .footer-block__details-content,
  .footer-block__heading,
  summary.footer__heading,
  .footer__accordion-summary {
    min-height: 48px !important;
    padding-top: 12px !important;
    padding-bottom: 12px !important;
  }
  .footer .disclosure__button,
  .footer a {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }

  /* -- 38.13 Image blocks — cap ratio so single-image sections don't
        take a full viewport. -------------------------------------- */
  .pv-split-img,
  .pv-bs__img,
  .pv-sub__img,
  .pv-bt__media,
  .pv-story__media {
    max-height: 48vh !important;
    object-fit: cover;
  }

  /* -- 38.14 Typography — trim eyebrow / lead paragraphs so they
        don't hog the first viewport. ------------------------------ */
  .pv-eyebrow,
  .pv-section__eyebrow,
  [class*="pv-"] .eyebrow {
    font-size: 10px !important;
    letter-spacing: 0.18em !important;
    margin-bottom: 10px !important;
  }
  h1, .h1 { line-height: 1.06 !important; }
  h2, .h2 { line-height: 1.1 !important; }
  p { font-size: 0.96rem; line-height: 1.55; }

  /* -- 38.15 Modal / drawer — max-height and safe-area aware. ----- */
  .cart-drawer,
  .pv-cart-drawer {
    max-height: 92svh !important;
  }
  .cart-drawer__footer,
  .pv-cart-drawer__footer {
    padding-bottom: calc(16px + env(safe-area-inset-bottom)) !important;
  }

  /* -- 38.16 Wholesale form — reduce padding, full-width submit. -- */
  [class*="pv-wi-"] .pv-wi__form {
    padding: 20px !important;
  }
  [class*="pv-wi-"] .pv-wi__submit {
    width: 100% !important;
    min-height: 48px !important;
  }
  [class*="pv-wi-"] .pv-wi__field {
    margin-bottom: 14px !important;
  }

  /* -- 38.17 Coffee carousel cards — tighten card internals so a
        2-up grid doesn't look too chatty. ------------------------- */
  .pv-cc__card {
    padding: 10px !important;
  }
  .pv-cc__card-media {
    aspect-ratio: 1/1 !important;
    margin-bottom: 10px !important;
  }

} /* end Section 38 @media (max-width: 767px) */

/* ==========================================================================
   SECTION 39 — CROSS-PLATFORM COMPATIBILITY (Mac / Win / iOS / Android)
   Added 2026-04-08. Pure CSS compat fixes. No copy / layout changes.
   ========================================================================== */

/* -- 39.1 iOS Safari dynamic viewport — the URL bar animates so any
      element sized to 100vh briefly overflows / reflows. Swap to
      100svh (small) as the floor and 100dvh (dynamic) as the runtime.
      Progressive enhancement: older browsers keep 100vh.                 */
@supports (height: 100svh) {
  .pv-img-hero,
  .pv-image-hero {
    height: 100svh;
    height: 100dvh;
  }
}

/* -- 39.2 iOS Safari — ensure every text-accepting input is >= 16px so
      focus doesn't trigger the auto-zoom. Defensive selector covers
      wholesale / subscribe / contact / newsletter / search / cart.     */
@media (hover: none) and (pointer: coarse),
       (max-width: 767px) {
  input[type="text"],
  input[type="email"],
  input[type="tel"],
  input[type="url"],
  input[type="number"],
  input[type="password"],
  input[type="search"],
  input[type="date"],
  input[type="time"],
  input:not([type]),
  textarea,
  select {
    font-size: 16px !important;
  }
}

/* -- 39.3 Horizontal scroll regions — contain overscroll so the Mac
      swipe-back gesture and Chrome pull-to-refresh don't hijack the
      carousel / quick-nav rails. CSS fallback for the JS binding
      already in provis-coffee-carousel.liquid.                         */
.pv-cc__track,
.pv-cc__track-wrap,
.pv-quick-nav__scroll,
[class*="carousel"] [class*="track"],
.pv-reviews__scroll,
.pv-shop__rail,
.pv-chips,
.pv-chip-row {
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
}

/* -- 39.4 Android Chrome — tap highlight. Default is ugly blue rect.
      Replace with a subtle brand-toned highlight.                     */
html {
  -webkit-tap-highlight-color: rgba(189, 122, 74, 0.18);
}
a, button, summary, [role="button"], label, input, textarea, select {
  -webkit-tap-highlight-color: rgba(189, 122, 74, 0.22);
}

/* -- 39.5 Windows Chrome — scrollbar width eats into 100vw math.
      Any full-bleed element using 100vw gets a small right-side gap
      or overflows. Prefer dvw where supported, clip overflow.        */
@supports (width: 100dvw) {
  .pv-img-hero,
  [class*="full-bleed"] {
    width: 100dvw;
    max-width: 100dvw;
  }
}
html, body { overflow-x: clip; }

/* -- 39.6 sticky + flex parent — Safari <16 ignored sticky inside
      flex containers unless the child had explicit align-self.       */
.pv-sticky,
[class*="pv-sticky"] {
  align-self: flex-start;
}

/* -- 39.7 backdrop-filter fallback — every existing rule already
      has -webkit- prefix. Add solid-color fallback so old Android
      WebView / Firefox don't render fully transparent glass panels. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  [class*="pv-glass"],
  .cart-drawer,
  .pv-cart-drawer,
  .pv-popup {
    background-color: rgba(20, 22, 30, 0.94) !important;
  }
}

/* -- 39.8 -webkit-text-size-adjust — prevent iOS Safari from bumping
      body copy up in landscape orientation.                          */
html {
  -webkit-text-size-adjust: 100%;
  -moz-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

/* -- 39.9 Mobile drawers — safe-area + dynamic viewport so the cart
      drawer and mobile menu drawer don't get clipped by the iOS home
      indicator or the Android gesture bar. Respects existing 38.15. */
.cart-drawer,
.pv-cart-drawer,
.menu-drawer,
.pv-menu-drawer,
[class*="drawer"][aria-modal] {
  max-height: 100svh;
  max-height: 100dvh;
  padding-bottom: env(safe-area-inset-bottom);
}

/* -- 39.10 Fixed header on Android — when the soft keyboard opens,
      the viewport resizes and `position: fixed` headers jump. GPU
      promotion stabilizes rendering.                                 */
@media (hover: none) and (pointer: coarse) {
  .pv-header,
  header.header {
    transform: translateZ(0);
  }
}

/* -- 39.11 :focus-visible — Safari 15.4+ supports it but older iOS
      falls back to :focus which draws a ring on click.               */
:focus:not(:focus-visible) {
  outline: none;
}

/* -- 39.12 touch-action — let the browser do native horizontal
      panning on carousels without falling back to JS wheel handling. */
.pv-cc__track,
.pv-cc__track-wrap,
.pv-quick-nav__scroll,
.pv-reviews__scroll,
.pv-shop__rail {
  touch-action: pan-x pan-y;
}

/* -- 39.13 iOS Safari — momentum scroll for any long vertical pane. */
.pv-wi__form,
.cart-drawer__body,
.pv-cart-drawer__body,
.menu-drawer__navigation {
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-y: contain;
}

/* -- 39.14 Disallow drag on decorative media only.                   */
.pv-img-hero__media,
.pv-img-hero video,
.pv-hero video {
  -webkit-user-drag: none;
  -webkit-touch-callout: none;
}

/* ==========================================================================
   End of SECTION 39 — CROSS-PLATFORM COMPATIBILITY
   ========================================================================== */

/* ==========================================================================
   End of provis-polish-a11y.css
   ========================================================================== */

/* cache bust 17757260800408 */


/* ==========================================================================
   SOURCE: provis-audit-fixes.css
   ========================================================================== */

/* ═══════════════════════════════════════════════════════════════════════
   PROVIS AUDIT FIXES — 2026-04-08
   Senior visual design audit pass. Surgical fixes pulled out of
   provis-brand.css / provis-polish-cart.css / provis-polish-info-pages.css
   into their own file because the asset version hash on those larger
   files was pinned by Shopify's CDN and would not cache-bust.
   ═══════════════════════════════════════════════════════════════════════ */

/* ───────────────────────────────────────────────────────────────────
   FIX 1 — Remove the cream strip that leaks above full-bleed dark
   hero sections. The outer .shopify-section wrapper was inheriting
   a `padding-block: clamp(56px, 7.5vh, 96px)` rule intended for the
   INNER <section> element, creating a 56–96px cream gap between the
   header and any dark full-bleed hero (merch, contact, faq, wholesale).
   ─────────────────────────────────────────────────────────────────── */
.shopify-section[class*="provis-"] {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}
/* 404 wrappers: the old rules painted cream on the OUTER .shopify-section
   and added 72–180px block padding, which showed cream above the dark
   inner .pv-404 hero. Flatten them; let the inner section own its bg. */
.shopify-section[id*="main-404"],
.shopify-section[id*="404"] {
  background: transparent !important;
  padding: 0 !important;
}

/* ───────────────────────────────────────────────────────────────────
   FIX 2 — Progressive-enhancement reveal animations. Previously
   [data-pv-reveal] defaulted to opacity:0, which meant crawlers, OG
   preview bots, RSS/sharing tools, slow-JS users, and full-page
   screenshots all saw an empty page below the first viewport. Now
   content is visible by default; the fade-in is only armed after JS
   marks the document ready.
   ─────────────────────────────────────────────────────────────────── */
[data-pv-reveal] {
  opacity: 1 !important;
  transform: none !important;
}
html.pv-js-loaded [data-pv-reveal]:not(.pv-visible):not(.is-visible) {
  opacity: 0 !important;
  transform: translateY(24px) !important;
}
html.pv-js-loaded [data-pv-reveal].pv-visible,
html.pv-js-loaded [data-pv-reveal].is-visible {
  opacity: 1 !important;
  transform: none !important;
}

/* ───────────────────────────────────────────────────────────────────
   FIX 3 — Empty cart state: centered, editorial. The theme's
   cart-title block outputs `class="text-left"` on its container, which
   was overriding the `text-align: center` attempt in main-cart's own
   stylesheet. The heading, helper text, and button ended up stacked
   against the left edge with no visual anchor.
   ─────────────────────────────────────────────────────────────────── */
.shopify-section[id*="cart-section"] .cart-page--empty {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: clamp(420px, 58vh, 620px) !important;
  padding-block: clamp(56px, 8vh, 96px) !important;
  text-align: center !important;
}
.shopify-section[id*="cart-section"] .cart-page--empty::before {
  content: "YOUR CART";
  display: block;
  font-family: "DM Sans", sans-serif;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: #B9A977;
  margin-bottom: 1.25rem;
}
.shopify-section[id*="cart-section"] .cart-page--empty .cart-page__title,
.shopify-section[id*="cart-section"] .cart-page--empty .cart-page__items {
  width: 100% !important;
  max-width: 560px !important;
  margin-inline: auto !important;
  text-align: center !important;
  grid-column: 1 / -1 !important;
}
.shopify-section[id*="cart-section"] .cart-page--empty .cart-title {
  text-align: center !important;
  width: 100% !important;
  display: block !important;
}
.shopify-section[id*="cart-section"] .cart-page--empty .cart-title h1 {
  display: block !important;
  font-family: "Tiller", Georgia, serif !important;
  font-size: clamp(2rem, 3.6vw, 3rem) !important;
  line-height: 1.05 !important;
  letter-spacing: -0.01em !important;
  color: #222432 !important;
  text-align: center !important;
  margin: 0 auto !important;
}
.shopify-section[id*="cart-section"] .cart-page--empty .cart-title::after {
  content: "";
  display: block;
  width: 72px;
  height: 1px;
  background: #B9A977;
  margin: 20px auto 0;
}
.shopify-section[id*="cart-section"] .cart-page--empty .cart-items__wrapper {
  max-width: 520px !important;
  margin: 24px auto 0 !important;
  gap: 20px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  text-align: center !important;
}
.shopify-section[id*="cart-section"] .cart-page--empty .cart-items__wrapper p {
  font-family: "DM Sans", sans-serif !important;
  font-size: 0.9375rem !important;
  line-height: 1.55 !important;
  color: rgba(34, 36, 50, 0.7) !important;
  margin: 0 !important;
}
.shopify-section[id*="cart-section"] .cart-page--empty .cart-items__wrapper p a {
  color: #B9A977 !important;
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ───────────────────────────────────────────────────────────────────
   FIX 4 — Raw-page typographic rhythm. Several info pages (notably
   the live FAQ) render their body as raw RTE HTML without a
   provis-page-hero, because the custom page template isn't assigned
   to the page in admin. Previously the result was a cramped Word-doc
   of tight H1/H2/H3 with almost identical weights and sizes. Give that
   content real editorial rhythm.
   ─────────────────────────────────────────────────────────────────── */
body.template-page main .rte,
body.template-page main .main-page,
body.template-page main .page-width-content .rte {
  max-width: 760px;
  margin-inline: auto;
  padding-block: clamp(56px, 8vh, 96px);
}
body.template-page main .rte h1,
body.template-page main .main-page h1,
body.template-page main .page-content > h1 {
  font-family: "Tiller", Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(2.5rem, 5vw, 4rem) !important;
  line-height: 1.02 !important;
  letter-spacing: -0.015em !important;
  color: #222432 !important;
  text-align: center;
  margin: 0 0 0.35em !important;
}
body.template-page main .rte > h1::after,
body.template-page main .main-page > h1::after {
  content: "";
  display: block;
  width: 72px;
  height: 1px;
  background: #B9A977;
  margin: 1.25rem auto 2.5rem;
}
body.template-page main .rte h2,
body.template-page main .main-page h2 {
  font-family: "Tiller", Georgia, serif !important;
  font-weight: 700 !important;
  font-size: clamp(1.625rem, 2.5vw, 2.125rem) !important;
  line-height: 1.12 !important;
  letter-spacing: -0.005em !important;
  color: #222432 !important;
  margin: 3rem 0 0.35em !important;
  padding-top: 2.25rem;
  border-top: 1px solid rgba(34, 36, 50, 0.12);
}
body.template-page main .rte h2:first-child,
body.template-page main .main-page h2:first-child {
  border-top: 0;
  padding-top: 0;
  margin-top: 0;
}
body.template-page main .rte h3,
body.template-page main .main-page h3 {
  font-family: "Tiller", Georgia, serif !important;
  font-weight: 600 !important;
  font-size: clamp(1.125rem, 1.4vw, 1.25rem) !important;
  line-height: 1.3 !important;
  color: #222432 !important;
  margin: 1.75rem 0 0.5rem !important;
}
body.template-page main .rte p,
body.template-page main .main-page p {
  font-family: "DM Sans", sans-serif;
  font-size: 1rem;
  line-height: 1.65;
  color: rgba(34, 36, 50, 0.82);
  margin: 0 0 1rem;
  max-width: 68ch;
}
body.template-page main .rte a,
body.template-page main .main-page a {
  color: #B9A977;
  text-decoration: underline;
  text-underline-offset: 3px;
}
body.template-page main .rte a:hover,
body.template-page main .main-page a:hover {
  color: #222432;
}

/* ───────────────────────────────────────────────────────────────────
   FIX 5 — Section-padding rule scoping. Make sure the sitewide rule
   that adds vertical padding to Provis inner sections does NOT match
   the outer .shopify-section wrapper. Chain off the same rule family
   via a higher-specificity reset to defend against any future edit
   that re-introduces the bleed. (Paired with FIX 1.)
   ─────────────────────────────────────────────────────────────────── */
section.shopify-section {
  /* never paint a vertical gap on the outer wrapper */
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}
/* But keep room around the cart page wrapper (which uses the same
   wrapper but has no inner hero to fill the gap). */
section.shopify-section[id*="cart-section"] {
  padding-top: clamp(56px, 7.5vh, 96px) !important;
  padding-bottom: clamp(56px, 7.5vh, 96px) !important;
}

/* ═══════════════════════════════════════════════════════════════════════
   END — PROVIS AUDIT FIXES
   ═══════════════════════════════════════════════════════════════════════ */


/* ==========================================================================
   SOURCE: provis-a11y-fixes.css
   ========================================================================== */

/* ==========================================================================
   provis-a11y-fixes.css  (2026-04-08)
   --------------------------------------------------------------------------
   Targeted WCAG 2.1 AA fixes uncovered by axe-core deep audit.
   Loaded AFTER provis-polish-a11y.css so these win on conflicts.

   Scope: contrast remediation, sticky/edge cases, motion safety,
          focus-visible reinforcement on Horizon web components.
   No markup changes — pure CSS overrides.
   ========================================================================== */

/* Local accessible-gold token. The brand gold #B9A977 fails 4.5:1 on cream
   #F8FAEF (it sits at ~2.21:1). For BODY copy and small text we use a
   deeper variant that still reads as Provis gold but clears WCAG AA. */
:root {
  --pa-gold-accessible: #7a6a3a;       /* AA on cream for body text */
  --pa-gold-accessible-strong: #6b5d31; /* AAA on cream for tiny text */
  --pa-mute-accessible: #555861;        /* AA on cream for muted text */
  --pa-mute-accessible-strong: #44464f; /* AAA on cream */
}

/* ==========================================================================
   1. CURRENCY CODE STRIP (header / localization picker)
   --------------------------------------------------------------------------
   Axe: <span class="currency-code"> showed #222432 on #1c1e29 (1.07:1).
   Force navy bg + cream text everywhere this strip renders.
   ========================================================================== */
.currency-code,
[data-testid="localization-currency-code"],
span[data-testid="localization-currency-code"] {
  color: #f8faef !important;
  background-color: transparent !important;
}
.localization-selector .currency-code,
.localization-form .currency-code,
header .currency-code {
  color: #f8faef !important;
}
/* If the parent strip is dark, give the code a subtle outline so the
   numeric text never blends. */
[data-testid="localization-currency-code"] {
  font-weight: 600 !important;
  letter-spacing: 0.02em;
}

/* ==========================================================================
   2. PRODUCT-CARD TITLES & UTILITY GOLD TEXT — contrast fix
   --------------------------------------------------------------------------
   Cart drawer ships product titles styled with gold #B9A977 on cream.
   That fails 4.5:1. We deepen them globally where the cream surface
   appears, while keeping the rich gold heading look on navy surfaces.
   ========================================================================== */
.text-block p,
.cart-items .text-block p,
cart-items .text-block p {
  color: #2a2c38 !important;          /* near-navy */
}

/* Generic: gold text used as body/inline copy on cream */
.pv-section--cream .text-block p,
.cart-page-wrapper .text-block p,
cart-drawer .text-block p {
  color: #2a2c38 !important;
}

/* Cart drawer "Log in to check out faster" link — was #b9a977 (2.21:1) */
.cart-items__wrapper p,
.cart-items__wrapper p a,
.cart-page-wrapper p a {
  color: #2a2c38 !important;
}
.cart-items__wrapper p a {
  text-decoration: underline;
  text-decoration-color: var(--pa-gold-accessible);
  text-decoration-thickness: 2px;
  text-underline-offset: 3px;
}
.cart-items__wrapper p a:hover {
  color: var(--pa-gold-accessible) !important;
}

/* "Have an account?" / muted helper text on cream */
.cart-items__wrapper > p {
  color: #2a2c38 !important;
}

/* Big gold price strong on cream — keep gold but deepen it */
.cart-page-wrapper strong,
.cart-page strong,
.cart-items strong,
cart-items strong {
  color: var(--pa-gold-accessible) !important;
}

/* ==========================================================================
   3. SHIPPING-PROGRESS HINT TEXT
   --------------------------------------------------------------------------
   .pv-sp__hint was #787a7e on cream (4.07:1) — fails AA for small text.
   ========================================================================== */
.pv-sp__hint,
p.pv-sp__hint {
  color: var(--pa-mute-accessible) !important;
  font-weight: 500;
}

/* ==========================================================================
   4. WHOLESALE INQUIRY — eyebrows, italic heading, helper note
   --------------------------------------------------------------------------
   .pv-wi__eyebrow (10px gold)        — was 2.21:1
   .pv-wi__heading > em (gold italic) — was 2.21:1, large text
   .pv-wi__note (12.8px grey)         — was 3.58:1
   ========================================================================== */
.pv-wi__eyebrow {
  color: var(--pa-gold-accessible-strong) !important;
  font-weight: 700;
  letter-spacing: 0.18em;
}
.pv-wi__heading em {
  /* Large display headline — only needs 3:1 but raise to 4.5:1 for safety */
  color: var(--pa-gold-accessible) !important;
}
.pv-wi__note,
p.pv-wi__note {
  color: var(--pa-mute-accessible) !important;
}

/* ==========================================================================
   5. ANY GOLD INLINE TEXT ON CREAM — global guardrail
   --------------------------------------------------------------------------
   Wherever a gold-coded body element sits inside a cream / white section,
   substitute the accessible gold. We keep the brand gold for HEADINGS
   (h1-h3) since they pass 3:1 large-text rule.
   ========================================================================== */
.pv-section--cream p[style*="b9a977" i],
.pv-section--cream p[style*="B9A977"],
.pv-text--gold,
small.pv-text--gold,
.pv-eyebrow--gold {
  color: var(--pa-gold-accessible) !important;
}

/* ==========================================================================
   6. SLIDESHOW SLIDES — focusable scrollable region
   --------------------------------------------------------------------------
   Horizon's <slideshow-slides> is scrollable but tabindex="-1". Axe (and
   WCAG 2.1.1) flags this. Runtime JS sets tabindex="0", but we also give
   it a visible focus ring so the keyboard user knows it's reachable.
   ========================================================================== */
slideshow-slides:focus-visible {
  outline: 3px solid var(--pa-gold, #B9A977) !important;
  outline-offset: 4px !important;
  border-radius: 4px;
}
slideshow-slides[tabindex="0"] {
  scroll-snap-type: x mandatory;
}

/* ==========================================================================
   7. OVERFLOW LIST CHILDREN — list-element rule
   --------------------------------------------------------------------------
   <ul part="list"> ships with non-<li> children (accordion-custom,
   role=presentation wrappers). Tag the wrapping ul as role="none"
   so axe stops treating it as a list — semantically correct since it's
   a layout container, not real list content.
   ========================================================================== */
ul[part="list"] {
  list-style: none;
}

/* ==========================================================================
   8. REDUCED MOTION — global hard kill of autoplay/parallax/scroll-jack
   --------------------------------------------------------------------------
   Already partially handled in provis-polish-a11y.css. Add catch-alls for
   slideshow autoplay and any element with [data-autoplay] or animation.
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  slideshow-component[autoplay],
  slideshow-component[infinite],
  [data-autoplay="true"] {
    /* let JS read this and skip starting the timer */
    --pv-autoplay: 0;
  }
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  /* Marquee */
  .pv-marquee__track,
  marquee-text {
    animation: none !important;
    transform: none !important;
  }
}

/* ==========================================================================
   9. FORMS — required marker visibility + error association
   --------------------------------------------------------------------------
   Required-field asterisks were the same dark navy on dark navy in some
   newsletter blocks; brighten them and increase size for AA visibility.
   ========================================================================== */
label .required,
label[data-required] .required-asterisk,
.required-asterisk,
abbr[title="required"] {
  color: #c44747 !important;             /* AA red on cream + on navy */
  font-weight: 700;
  text-decoration: none;
  margin-inline-start: 0.15em;
}
.pv-section--ink label .required,
.pv-section--ink .required-asterisk {
  color: #ff8a8a !important;             /* lift on dark surface */
}
input[aria-invalid="true"],
textarea[aria-invalid="true"],
select[aria-invalid="true"] {
  border-color: #c44747 !important;
  outline: 2px solid #c44747 !important;
  outline-offset: 2px;
}
.form__error,
.form-message--error,
[role="alert"].form-error {
  color: #c44747;
  font-weight: 600;
}

/* ==========================================================================
   10. FOCUS-VISIBLE on Horizon web components & icon-only buttons
   --------------------------------------------------------------------------
   Several custom elements (<menu-drawer>, <cart-drawer>, <localization-form>,
   <accordion-custom>) host their own focusables but the existing focus ring
   gets clipped by overflow:hidden. Lift the ring outside.
   ========================================================================== */
menu-drawer button:focus-visible,
cart-drawer button:focus-visible,
accordion-custom summary:focus-visible,
localization-form button:focus-visible,
header-drawer button:focus-visible {
  outline: 3px solid var(--pa-gold, #B9A977) !important;
  outline-offset: 3px !important;
  z-index: 2;
  position: relative;
}

/* ==========================================================================
   11. ARIA-HIDDEN FOCUSABLE GUARDRAIL
   --------------------------------------------------------------------------
   Cosmetic: any element marked aria-hidden but containing focusables — we
   visually neutralize it so screen-reader users and keyboard users get the
   same affordance. Runtime JS sets tabindex=-1 on the children.
   ========================================================================== */
[aria-hidden="true"] a,
[aria-hidden="true"] button,
[aria-hidden="true"] [tabindex="0"] {
  pointer-events: none;
}

/* ==========================================================================
   12. SKIP-LINK reinforcement
   --------------------------------------------------------------------------
   The link exists; ensure the focus state ALWAYS slides into view, beats
   sticky header z-index, and has AA contrast.
   ========================================================================== */
.skip-to-content-link:focus,
.skip-to-content-link:focus-visible {
  top: 12px !important;
  z-index: 2147483647 !important;
  background: #222432 !important;
  color: #f8faef !important;
  outline: 3px solid #B9A977 !important;
  outline-offset: 3px !important;
}

/* ==========================================================================
   13. TOUCH TARGETS — final guardrail (≥44×44 mobile)
   ========================================================================== */
@media (max-width: 768px) {
  header button,
  header a,
  cart-drawer button,
  menu-drawer button,
  .product-card a.contents {
    min-height: 44px;
    min-width: 44px;
  }
  .quantity-input button,
  .quantity-selector button {
    min-width: 44px;
    min-height: 44px;
  }
}

/* ==========================================================================
   14. LOG-IN LINK in cart specifically — explicit override
   ========================================================================== */
.cart-items__wrapper > p > a[href*="customer_authentication"] {
  color: #2a2c38 !important;
  text-decoration: underline;
  text-decoration-color: var(--pa-gold-accessible);
  text-underline-offset: 3px;
  text-decoration-thickness: 2px;
  font-weight: 600;
}

/* ==========================================================================
   15. SCREEN-READER-ONLY utility (canonical sr-only)
   ========================================================================== */
.sr-only,
.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}


/* ==========================================================================
   22. FOOTER ZONE — force ALL sections in the footer area to #0d0f18
   Catches the CTA banner above the footer, the footer-group wrapper
   sections, and any transition gaps between them.
   ========================================================================== */
.shopify-section-group-footer-group,
.shopify-section-group-footer-group .shopify-section,
.shopify-section-group-footer-group > * {
  background: #0d0f18 !important;
  background-color: #0d0f18 !important;
}
