/* ==========================================================================
   OXIAN LABS STOREFRONT - SOFT SYSTEM
   One stylesheet. Both "Additional CSS" boxes are intentionally empty:
   if you need to change something, change it here.

   Radius scale (one rule, applied everywhere):
     panels and cards .... 20px   (--ox-r)
     media and insets .... 16px   (--ox-r-media)
     buttons ............. pill   (999px)
     inputs and chips .... 12px   (--ox-r-input)

   Colour: surfaces are tints of the two brand colours, so the page reads
   colourful while staying Oxian. Green acts, blue points.
   ========================================================================== */

.oxian {
  --ox-green:#1E5A34;
  --ox-green-deep:#123A22;
  --ox-green-mid:#2F7A4B;
  --ox-blue:#1F56A6;
  --ox-blue-lo:#5C8FD6;
  --ox-ink:#131A16;
  --ox-ink-soft:#4A5751;
  --ox-graphite:#7A857F;
  --ox-paper:#F7F8F6;
  --ox-white:#FFFFFF;
  --ox-sage:#E4EFE7;
  --ox-sage-deep:#CFE3D5;
  --ox-sky:#E5EDF8;
  --ox-sky-deep:#CFDEF2;
  --ox-line:rgba(19,26,22,.10);
  --ox-line-hi:rgba(19,26,22,.18);

  --ox-sans:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  --ox-mono:"IBM Plex Mono",ui-monospace,Consolas,monospace;

  --ox-gut:clamp(20px,5vw,56px);
  --ox-r:20px;
  --ox-r-media:16px;
  --ox-r-input:12px;

  background:var(--ox-paper);
  color:var(--ox-ink);
  font-family:var(--ox-sans);
  font-size:17px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  display:block;
}

.oxian *, .oxian *::before, .oxian *::after { box-sizing:border-box; }
.oxian p { margin:0; }
.oxian img { max-width:100%; display:block; }

/* ---------- full bleed: break out of the block theme content cap ---------- */

.is-layout-constrained > .oxian,
.is-layout-flow > .oxian,
.entry-content > .oxian,
.wp-block-post-content > .oxian {
  /* WordPress core's constrained-layout rule sets margin-left/right to
     auto !important on direct children, so breaking out of the content
     cap needs !important to win. This is the one place in this file
     where that is justified; do not copy the pattern elsewhere. */
  max-width:none !important;
  width:auto !important;
  margin-left:calc(50% - 50vw) !important;
  margin-right:calc(50% - 50vw) !important;
}

/* The homepage renders its own hero, so the template's page title
   ("Oxian Labs - Home") is duplicate furniture above it. Hidden on the
   front page only; every other page keeps its title. */
body.home .wp-block-post-title,
body.home .entry-content > .wp-block-post-title { display:none; }
body.home main.wp-block-group,
body.home .wp-block-post-content { padding-top:0; }

/* The theme adds block spacing above main and the content wrapper. On the
   homepage the hero should meet the header, so that spacing is removed. */
body.home main.wp-block-group { margin-top:0; }
body.home .wp-block-post-content,
body.home .entry-content { margin-top:0; }

/* Page ground matches the storefront surface so there is no white strip
   above or below the sections on any page. */
body { background:#F7F8F6; }
html, body { overflow-x:clip; }

.oxian-wrap {
  max-width:1200px;
  margin:0 auto;
  padding-left:var(--ox-gut);
  padding-right:var(--ox-gut);
}

/* ---------- typography ---------- */

.oxian h1, .oxian h2, .oxian h3 {
  margin:0; font-weight:600; letter-spacing:-.025em; line-height:1.05;
  text-transform:none; font-family:var(--ox-sans);
}
.oxian .oxian-h1 {
  font-size:clamp(44px,6.6vw,86px);
  letter-spacing:-.035em; line-height:1.02;
  text-transform:none; margin:0 0 20px; color:var(--ox-ink);
}
.oxian .oxian-h1 em { font-style:normal; color:var(--ox-green-mid); display:block; }
.oxian .oxian-h2 {
  font-size:clamp(30px,3.8vw,50px);
  letter-spacing:-.028em; text-transform:none; margin:0; color:var(--ox-ink);
}
.oxian .oxian-lede {
  font-size:clamp(17px,1.5vw,20px); color:var(--ox-ink-soft); max-width:46ch;
}
.oxian .oxian-eyebrow {
  font-family:var(--ox-mono); font-size:11px; font-weight:500;
  letter-spacing:.14em; text-transform:uppercase; color:var(--ox-graphite); margin:0;
}

/* ---------- theme header and footer harmony ---------- */

header.wp-block-template-part {
  background:var(--ox-paper);
  border-bottom:1px solid rgba(19,26,22,.10);
}
footer.wp-block-template-part {
  background:#CFE3D5; color:#4A5751;
}
header.wp-block-template-part a,
header.wp-block-template-part .wp-block-navigation-item__content {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:15px; letter-spacing:0; text-transform:none;
  color:#4A5751; text-decoration:none;
}
header.wp-block-template-part a:hover { color:#131A16; }
footer.wp-block-template-part a {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:15px; letter-spacing:0; text-transform:none;
  color:#4A5751; text-decoration:none;
}
footer.wp-block-template-part a:hover { color:#131A16; }
header.wp-block-template-part img,
footer.wp-block-template-part img { height:auto; width:auto; max-height:44px; }
/* WP core's default Site Logo block style (.wp-block-site-logo.is-default-size img)
   sets a fixed width:120px which beats the rule above on specificity (2 classes vs 1),
   while our max-height still clamps the height -- that mismatch is what stretches the
   footer mark. Out-specificity it here and pin both dimensions to auto so the image
   keeps its real proportions. */
footer.wp-block-template-part .wp-block-site-logo img {
  width:auto !important;
  height:auto !important;
  max-height:44px;
}

/* ---------- brand mark ---------- */

.oxian .oxian-mark { display:inline-flex; align-items:center; gap:10px; text-decoration:none; }
.oxian .oxian-mark img { display:block; max-height:44px; width:auto; height:auto; }
.oxian .oxian-mark-name {
  font-family:var(--ox-sans); font-weight:600; font-size:20px;
  letter-spacing:-.02em; text-transform:none; color:var(--ox-ink);
}
.oxian .oxian-mark.is-light .oxian-mark-name { color:#fff; }

/* ---------- buttons: pill ---------- */

.oxian .oxian-btn {
  font-family:var(--ox-sans); font-size:16px; font-weight:500;
  letter-spacing:0; text-transform:none; text-decoration:none;
  padding:14px 28px; display:inline-block;
  border:1px solid transparent; border-radius:999px; cursor:pointer;
  white-space:nowrap;
  transition:background .18s, color .18s, border-color .18s, transform .08s;
}
.oxian .oxian-btn:active { transform:translateY(1px); }
.oxian .oxian-btn-solid { background:var(--ox-green); border-color:var(--ox-green); color:#fff; }
.oxian .oxian-btn-solid:hover,
.oxian .oxian-btn-solid:focus { background:var(--ox-green-deep); border-color:var(--ox-green-deep); color:#fff; }
.oxian .oxian-btn-ghost { background:transparent; color:var(--ox-ink); border-color:rgba(19,26,22,.22); }
.oxian .oxian-btn-ghost:hover,
.oxian .oxian-btn-ghost:focus { background:rgba(19,26,22,.05); color:var(--ox-ink); }
.oxian .oxian-btn-invert { background:#fff; border-color:#fff; color:var(--ox-ink); margin-top:24px; }
.oxian .oxian-btn-invert:hover,
.oxian .oxian-btn-invert:focus { background:var(--ox-sage); border-color:var(--ox-sage); color:var(--ox-ink); }

/* ---------- hero: single column, type led. Plot removed. ---------- */

.oxian-hero {
  border-bottom:0;
  padding:clamp(52px,7vw,104px) 0 clamp(40px,5vw,64px);
}
.oxian-hero-grid { display:block; }
.oxian-hero-copy { max-width:none; }
.oxian .oxian-chroma, .oxian figure.oxian-chroma { display:none; }
.oxian-actions { display:flex; flex-wrap:wrap; gap:12px; margin-top:32px; }
.oxian-hero .oxian-lede { margin-top:22px; }

/* ---------- ticker ---------- */

.oxian-ticker { background:var(--ox-green-deep); color:#EAF2EC; overflow:hidden; }
.oxian-ticker-track {
  display:flex; gap:44px; padding:13px 0; white-space:nowrap;
  animation:oxian-slide 44s linear infinite; width:max-content;
}
.oxian-ticker-track span {
  font-family:var(--ox-mono); font-size:11.5px; letter-spacing:.14em;
  text-transform:uppercase; opacity:.85;
}
.oxian-ticker-track span::before {
  content:""; display:inline-block; width:5px; height:5px; border-radius:999px;
  background:var(--ox-blue-lo); margin-right:12px; vertical-align:middle;
}
@keyframes oxian-slide { from { transform:translateX(0);} to { transform:translateX(-50%);} }

/* ---------- section shell ---------- */

.oxian-sec { padding:clamp(52px,6.5vw,92px) 0; border-bottom:0; }
.oxian-sec.oxian-sec-flush { padding-bottom:0; }
.oxian-sec-head {
  display:flex; justify-content:space-between; align-items:flex-end;
  gap:20px; margin-bottom:34px; flex-wrap:wrap;
}
.oxian .oxian-sec-link {
  font-family:var(--ox-sans); font-size:16px; font-weight:500;
  letter-spacing:0; text-transform:none; color:var(--ox-blue);
  text-decoration:none; border-bottom:0; padding-bottom:0;
}
.oxian .oxian-sec-link:hover { color:var(--ox-green-mid); border-bottom-color:transparent; }
.oxian .oxian-sec-link::after { content:" \2192"; }

/* ---------- catalog: soft cards, real gaps ---------- */

.oxian-cat {
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
  gap:14px;
  background:transparent;
  border:0;
  justify-content:start;
}
.oxian-cat.oxian-cols-1,
.oxian-cat.oxian-cols-2,
.oxian-cat.oxian-cols-3,
.oxian-cat.oxian-cols-4 {
  grid-template-columns:repeat(auto-fit,minmax(280px,360px));
}
.oxian .oxian-card {
  background:var(--ox-white);
  border:1px solid var(--ox-line);
  border-radius:var(--ox-r);
  padding:26px;
  margin:0;
  display:flex; flex-direction:column; gap:14px;
  list-style:none; min-height:300px;
  transition:transform .22s cubic-bezier(.16,1,.3,1), box-shadow .22s;
}
.oxian .oxian-card:hover {
  background:var(--ox-white);
  transform:translateY(-3px);
  box-shadow:0 10px 30px rgba(19,26,22,.07);
}
.oxian .oxian-card::before, .oxian .oxian-card::after { display:none; }

.oxian .oxian-card-img {
  display:block; overflow:hidden;
  background:var(--ox-sage);
  border-radius:var(--ox-r-media);
}
.oxian .oxian-card-img img {
  display:block; width:100%; height:auto; aspect-ratio:4/3;
  object-fit:cover; border-radius:var(--ox-r-media);
  transition:transform .4s ease;
}
.oxian .oxian-card:hover .oxian-card-img img { transform:scale(1.03); }

.oxian-card-top { display:flex; justify-content:space-between; align-items:flex-start; gap:10px; }
.oxian .oxian-card-name {
  font-family:var(--ox-sans); font-weight:600; font-size:26px;
  letter-spacing:-.022em; line-height:1.1; text-transform:none;
  color:var(--ox-ink); text-decoration:none; transition:color .18s;
}
.oxian .oxian-card-name:hover,
.oxian .oxian-card-name:focus { color:var(--ox-green-mid); }

.oxian .oxian-pill {
  font-family:var(--ox-mono); font-size:10px; letter-spacing:.1em;
  text-transform:uppercase; border:0; border-radius:999px;
  background:var(--ox-sage); color:var(--ox-green);
  padding:6px 12px; white-space:nowrap;
}
.oxian .oxian-pill.is-out { background:rgba(19,26,22,.06); color:var(--ox-graphite); }

.oxian .oxian-card-desc { font-size:15.5px; color:var(--ox-ink-soft); line-height:1.55; }
.oxian .oxian-card-desc p { margin:0 0 6px; }
.oxian .oxian-card-desc p:last-child { margin-bottom:0; }

.oxian .oxian-spec {
  border-top:1px solid var(--ox-line);
  margin:auto 0 0; padding-top:14px;
  display:grid; gap:6px;
}
.oxian .oxian-spec > div { display:flex; justify-content:space-between; gap:12px; }
.oxian .oxian-spec dt {
  font-family:var(--ox-mono); font-size:11px; letter-spacing:.1em;
  color:var(--ox-graphite); text-transform:uppercase; margin:0;
}
.oxian .oxian-spec dd {
  font-family:var(--ox-sans); font-size:14.5px; font-weight:500;
  margin:0; text-align:right; color:var(--ox-ink);
}

.oxian .oxian-coa {
  font-family:var(--ox-sans); font-size:14.5px; font-weight:500;
  letter-spacing:0; text-transform:none; color:var(--ox-blue);
  text-decoration:none; border-bottom:0; align-self:flex-start; padding-bottom:0;
}
.oxian .oxian-coa:hover { border-bottom-color:transparent; color:var(--ox-green-mid); }
.oxian .oxian-coa::after { content:" \2192"; }

.oxian-card-buy {
  display:flex; justify-content:space-between; align-items:center;
  gap:12px; border-top:1px solid var(--ox-line); padding-top:14px; flex-wrap:wrap;
}
.oxian .oxian-price {
  font-family:var(--ox-sans); font-weight:600; font-size:22px;
  letter-spacing:-.02em; color:var(--ox-ink);
}
.oxian .oxian-price del { opacity:.45; font-size:.7em; margin-right:6px; }
.oxian .oxian-price ins { text-decoration:none; }

/* WooCommerce add to cart inside cards */
.oxian .oxian-card a.button,
.oxian .oxian-card button.button,
.oxian .oxian-card .added_to_cart {
  font-family:var(--ox-sans); font-size:14.5px; font-weight:500;
  letter-spacing:0; text-transform:none;
  background:var(--ox-green); color:#fff;
  padding:11px 20px; border:0; border-radius:999px; line-height:1.2;
  text-decoration:none; display:inline-block; transition:background .18s;
}
.oxian .oxian-card a.button:hover,
.oxian .oxian-card button.button:hover,
.oxian .oxian-card .added_to_cart:hover { background:var(--ox-green-deep); color:#fff; }
.oxian .oxian-card .added_to_cart { background:var(--ox-blue); margin-left:8px; }
.oxian .oxian-card a.button.loading { opacity:.7; }

/* ---------- process: soft tinted tiles ---------- */

.oxian-proc {
  /* Four steps, so the column count must divide four: 4 / 2 / 1.
     auto-fit orphans the fourth tile at mid widths. */
  display:grid; grid-template-columns:repeat(4,1fr);
  gap:14px; background:transparent; border:0;
}
.oxian-step {
  background:var(--ox-white); border:1px solid var(--ox-line);
  border-radius:var(--ox-r); padding:26px 24px 28px;
}
.oxian-step:nth-child(2) { background:var(--ox-sage); border-color:transparent; }
.oxian-step:nth-child(3) { background:var(--ox-sky); border-color:transparent; }
.oxian .oxian-step-n {
  font-family:var(--ox-mono); font-size:11px; letter-spacing:.14em;
  color:var(--ox-graphite); margin-bottom:14px; text-transform:uppercase;
}
.oxian .oxian-step h3 {
  font-family:var(--ox-sans); font-weight:600; font-size:21px;
  text-transform:none; letter-spacing:-.02em; margin:0 0 9px; color:var(--ox-ink);
}
.oxian .oxian-step p { font-size:15.5px; color:var(--ox-ink-soft); }

/* ---------- wholesale: rounded panel, not full bleed band ---------- */

.oxian-whole {
  background:transparent; color:inherit; border-bottom:0;
  padding:0 0 clamp(52px,6.5vw,92px);
}
.oxian-whole { padding-left:var(--ox-gut); padding-right:var(--ox-gut); }
.oxian-whole .oxian-wrap { padding-left:0; padding-right:0; }
.oxian-whole-grid {
  background:var(--ox-sage); color:var(--ox-ink);
  border:1px solid var(--ox-line-hi);
  border-radius:var(--ox-r);
  max-width:1200px; margin-inline:auto;
  padding:clamp(32px,4.5vw,58px);
  display:grid; grid-template-columns:1.1fr 1fr;
  gap:clamp(28px,4vw,56px); align-items:center;
}
.oxian-whole .oxian-h2 { color:var(--ox-ink); margin:0 0 16px; }
.oxian-whole .oxian-h2-lg { font-size:clamp(30px,4vw,50px); }
.oxian-whole .oxian-h2 em { font-style:normal; color:var(--ox-green-mid); }
.oxian-whole .oxian-eyebrow { color:var(--ox-graphite); }
.oxian .oxian-whole-body { color:var(--ox-ink-soft); max-width:46ch; font-size:17px; }

.oxian-tiers { display:grid; gap:10px; background:transparent; border:0; }
.oxian-tier {
  background:var(--ox-white); border:1px solid var(--ox-line);
  border-radius:var(--ox-r-input);
  padding:15px 20px; display:flex; justify-content:space-between;
  align-items:center; gap:14px;
}
.oxian .oxian-tier b {
  font-family:var(--ox-sans); font-size:16px; letter-spacing:0;
  text-transform:none; font-weight:500; color:var(--ox-ink);
}
.oxian .oxian-tier span {
  font-family:var(--ox-sans); font-weight:600; font-size:21px;
  letter-spacing:-.02em; color:var(--ox-green);
}

/* ---------- compliance ---------- */

.oxian-legal {
  background:var(--ox-white); border-top:1px solid var(--ox-line);
  padding:clamp(32px,4vw,52px) 0; margin-bottom:0;
}
.oxian-legal-in {
  display:grid; grid-template-columns:auto 1fr; gap:20px;
  align-items:start; max-width:980px;
}
.oxian .oxian-legal-badge {
  font-family:var(--ox-mono); font-size:10.5px; letter-spacing:.12em;
  text-transform:uppercase; border:0; border-radius:999px;
  background:var(--ox-sage); color:var(--ox-green);
  padding:8px 16px; white-space:nowrap;
}
.oxian .oxian-legal p { font-size:14.5px; color:var(--ox-ink-soft); line-height:1.6; }
.oxian .oxian-legal p + p { margin-top:10px; }

/* ==========================================================================
   WOOCOMMERCE PAGES
   The plugin does not render these, so they are styled to match here:
   product, shop, cart, checkout, account.
   ========================================================================== */

.woocommerce, .woocommerce-page {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  color:#131A16;
}
.woocommerce h1, .woocommerce h2, .woocommerce h3,
.woocommerce-page h1, .woocommerce-page h2,
.product_title, .woocommerce-loop-product__title {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-weight:600; letter-spacing:-.028em; text-transform:none; color:#131A16;
}
.product_title { font-size:clamp(30px,3.8vw,50px); line-height:1.05; }

.woocommerce div.product .price,
.woocommerce ul.products li.product .price {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-weight:600; color:#131A16; letter-spacing:-.02em;
}

/* buttons everywhere in Woo */
.woocommerce a.button, .woocommerce button.button,
.woocommerce input.button, .woocommerce #respond input#submit,
.woocommerce a.button.alt, .woocommerce button.button.alt,
.woocommerce input.button.alt, .wc-block-components-button {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:16px; font-weight:500; letter-spacing:0; text-transform:none;
  background:#1E5A34; color:#fff;
  border:0; border-radius:999px; padding:14px 28px; line-height:1.2;
  transition:background .18s, transform .08s;
}
.woocommerce a.button:hover, .woocommerce button.button:hover,
.woocommerce input.button:hover, .woocommerce a.button.alt:hover,
.woocommerce button.button.alt:hover, .wc-block-components-button:hover {
  background:#123A22; color:#fff;
}
.woocommerce a.button:active, .woocommerce button.button:active { transform:translateY(1px); }
.woocommerce a.button.disabled, .woocommerce button.button:disabled,
.woocommerce button.button.disabled { opacity:.45; }

/* product gallery */
.woocommerce div.product div.images img,
.woocommerce ul.products li.product img {
  border-radius:16px;
}
.woocommerce div.product div.images .woocommerce-product-gallery__image { border-radius:16px; overflow:hidden; }
.woocommerce-product-gallery__trigger { border-radius:999px; }

/* variation form: the buy box, previously unstyled */
.woocommerce div.product form.cart .variations { margin-bottom:18px; border:0; }
.woocommerce div.product form.cart .variations td,
.woocommerce div.product form.cart .variations th {
  border:0; padding:0 0 12px; vertical-align:middle;
}
.woocommerce div.product form.cart .variations label {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:15px; font-weight:500; text-transform:capitalize;
  color:#131A16; letter-spacing:0; margin:0; padding-right:16px;
}
.woocommerce div.product form.cart .variations select,
.woocommerce .quantity .qty,
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row select,
.woocommerce form .form-row textarea,
.wc-block-components-text-input input {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:16px; color:#131A16; background:#fff;
  border:1px solid rgba(19,26,22,.20); border-radius:12px;
  padding:13px 16px; line-height:1.3; min-height:0;
}
.woocommerce div.product form.cart .variations select { min-width:210px; }
.woocommerce .quantity .qty { width:78px; text-align:center; }
.woocommerce .quantity { margin-right:12px; }
.woocommerce div.product form.cart div.quantity { float:none; display:inline-block; vertical-align:middle; }
.woocommerce div.product form.cart .button { vertical-align:middle; }
.woocommerce .reset_variations {
  font-size:14px; color:#7A857F; text-decoration:none; margin-left:10px;
}
.woocommerce-variation-price { margin-bottom:12px; }

/* focus */
.oxian a:focus-visible, .oxian button:focus-visible,
.woocommerce a:focus-visible, .woocommerce button:focus-visible,
.woocommerce select:focus-visible, .woocommerce input:focus-visible {
  outline:2px solid #1F56A6; outline-offset:3px;
}

/* notices */
.woocommerce .woocommerce-message,
.woocommerce .woocommerce-info,
.woocommerce .woocommerce-error,
.wc-block-components-notice-banner {
  border-radius:16px; border:1px solid rgba(19,26,22,.10);
  border-top:1px solid rgba(19,26,22,.10);
  background:#E4EFE7; color:#131A16;
  font-family:"IBM Plex Sans",system-ui,sans-serif;
}
.woocommerce .woocommerce-message::before,
.woocommerce .woocommerce-info::before { color:#1E5A34; }
.woocommerce .woocommerce-error { background:#FBEAEA; }

/* cart and checkout surfaces */
.woocommerce table.shop_table,
.woocommerce-checkout .woocommerce-checkout-review-order-table,
.wc-block-components-sidebar {
  border-radius:20px; border:1px solid rgba(19,26,22,.10);
  background:#fff; border-collapse:separate; border-spacing:0;
}
.woocommerce table.shop_table td, .woocommerce table.shop_table th {
  border-top:1px solid rgba(19,26,22,.08);
}
.woocommerce-checkout #payment,
.woocommerce-checkout .wc-block-checkout__payment-method {
  background:#F7F8F6; border-radius:20px;
}
.woocommerce-checkout #payment div.payment_box { background:#E5EDF8; border-radius:12px; }
.woocommerce-checkout #payment div.payment_box::before { border-bottom-color:#E5EDF8; }
.woocommerce form.checkout_coupon,
.woocommerce form.login, .woocommerce form.register {
  border-radius:20px; border:1px solid rgba(19,26,22,.10); background:#fff;
}

/* ==========================================================================
   LOT PANEL (oxian-lot-panel plugin) and compliance notice
   ========================================================================== */

.oxian-lot { margin:0 0 20px; }
body .oxian-lot__grid {
  /* The summary column is narrow, so two cells only fit above ~400px.
     Below that they stack rather than squeezing the values onto three lines.
     Body prefix so this beats the lot plugin's own two-column rule. */
  display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  gap:10px; background:transparent; border:0;
}
/* The oxian-lot-panel plugin ships its own dark styling on a separate
   handle that loads after this file, so these need a body prefix to win
   on specificity rather than on load order. */
body .oxian-lot__cell {
  background:#fff; border:1px solid rgba(19,26,22,.10);
  border-radius:12px; padding:16px 18px;
}
body .oxian-lot__k { color:#7A857F; }
body .oxian-lot__v { color:#131A16; }
body .oxian-lot__n { color:#7A857F; }
body .oxian-lot__grid { background:transparent; border:0; }
.oxian-lot__k {
  font-family:"IBM Plex Mono",ui-monospace,monospace;
  font-size:10px; letter-spacing:.14em; text-transform:uppercase;
  color:#7A857F; margin-bottom:6px;
}
.oxian-lot__v {
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:21px; font-weight:600; letter-spacing:-.02em; line-height:1; color:#131A16;
}
.oxian-lot__n {
  font-family:"IBM Plex Mono",ui-monospace,monospace;
  font-size:10.5px; color:#7A857F; margin-top:5px;
}

.oxian-lot__coa, a.oxian-lot__coa,
body .oxian-lot__coa,
.oxian-coa-link, a.oxian-coa-link {
  display:flex; justify-content:space-between; align-items:center; gap:14px;
  background:#E5EDF8; border:0; border-radius:12px;
  padding:15px 20px; text-decoration:none; color:#1F56A6;
  font-family:"IBM Plex Sans",system-ui,sans-serif; font-weight:500; font-size:15px;
  margin-bottom:20px;
}
.oxian-coa-link:hover, body .oxian-lot__coa:hover { background:#CFDEF2; }
/* the lot plugin sets these small and uppercase; the link is a real action */
body .oxian-lot__coa {
  font-family:"IBM Plex Sans",system-ui,sans-serif !important;
  font-size:15px !important; text-transform:none !important;
  letter-spacing:0 !important;
}

.oxian-ruo {
  margin-top:20px; padding:16px 18px;
  background:#fff;
  border:1px solid rgba(19,26,22,.10);
  border-left:3px solid #2F7A4B;
  border-radius:12px;
  font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:14.5px; line-height:1.6; letter-spacing:0;
  color:#4A5751; opacity:1;
}
.oxian-ruo strong { letter-spacing:0; color:#131A16; font-weight:600; }

/* mini cart badge */
.wc-block-mini-cart__badge { border-radius:999px; }

/* hide the zero-review tab and the duplicate spec tab */
/* A zero-review counter reads as unproven on a lab supplier, and product
   reviews on research chemicals invite dosing questions. The additional
   information tab duplicates the lot panel above it. */
.woocommerce div.product .woocommerce-tabs ul.tabs li.reviews_tab,
.woocommerce div.product .woocommerce-tabs ul.tabs li.additional_information_tab,
.woocommerce-tabs li.reviews_tab,
.woocommerce-tabs li.additional_information_tab { display:none !important; }
.woocommerce div.product .woocommerce-tabs ul.tabs::before { border-color:rgba(19,26,22,.10); }
.woocommerce div.product .woocommerce-tabs ul.tabs li {
  border-radius:12px 12px 0 0; background:#fff; border-color:rgba(19,26,22,.10);
}
.woocommerce .posted_in { font-size:14.5px; color:#7A857F; }
.woocommerce .posted_in a { color:#1F56A6; text-decoration:none; }

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

@media (max-width:980px) {
  .oxian-whole-grid { grid-template-columns:1fr; }
  .oxian-proc { grid-template-columns:repeat(2,1fr); }
}

@media (max-width:780px) {
  .oxian-sec { padding:clamp(40px,7vw,60px) 0; }
  .oxian-hero { padding:clamp(36px,7vw,56px) 0 clamp(28px,5vw,44px); }
  .oxian .oxian-h1 { font-size:clamp(38px,10vw,56px); }
  .oxian .oxian-card { padding:22px; min-height:0; }
  .oxian .oxian-btn,
  .oxian .oxian-card a.button,
  /* Woo renders the add-to-cart row as a grid whose column is content
     sized, so the button cannot stretch until the container is a block. */
  div.product .woocommerce-variation-add-to-cart { display:block; }
  .woocommerce div.product form.cart .button,
  div.product form.cart .button { width:100%; text-align:center; }
  .oxian-actions { flex-direction:column; align-items:stretch; }
  .oxian-legal-in { grid-template-columns:1fr; }
  .oxian-proc { grid-template-columns:1fr; }
  .woocommerce div.product form.cart .variations select { min-width:0; width:100%; }
  .woocommerce div.product form.cart div.quantity { display:block; margin:0 0 12px; }
  .woocommerce .quantity .qty { width:100%; }
}

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


/* ==========================================================================
   Researcher verification gate
   Markup injected via wp_body_open() in oxian-labs-storefront.php.
   Shown once per browser (localStorage oxian_verified_v1); dismissed by
   the inline script enqueued alongside this stylesheet.
   ========================================================================== */

html.ox-gate-lock{ overflow:hidden; }

.ox-gate{
	position:fixed; inset:0; z-index:99999;
	min-height:100vh; min-height:100dvh;
	display:grid; grid-template-columns:1fr;
	background:var(--ox-paper); color:var(--ox-ink);
	overflow-y:auto;
	font-family:var(--ox-sans);
}
@media(min-width:960px){
	.ox-gate{ grid-template-columns:1.05fr 1fr; }
}

.ox-gate-form{
	display:flex; align-items:center; justify-content:center;
	padding:clamp(28px,5vw,64px) clamp(22px,5vw,64px);
}
.ox-gate-in{ width:100%; max-width:480px; }

.ox-gate-mark{
	display:flex; align-items:center; gap:14px;
	text-decoration:none; color:var(--ox-ink);
	margin-bottom:clamp(44px,7vw,72px);
}
img.ox-gate-icon{ height:52px; width:auto; display:block; flex:0 0 auto; }
.ox-gate-word{ font-weight:700; font-size:34px; letter-spacing:-.03em; color:var(--ox-ink); }

.ox-gate-kicker{
	display:inline-block; font-family:var(--ox-mono); font-size:11px;
	letter-spacing:.14em; text-transform:uppercase; color:var(--ox-graphite);
	margin:0 0 14px;
}
.ox-gate-h1{
	margin:0 0 16px; font-weight:600; letter-spacing:-.03em; line-height:1.05;
	font-size:clamp(34px,5vw,48px);
}
.ox-gate-h1 em{ font-style:normal; color:var(--ox-green-mid); }
.ox-gate-lede{ margin:0 0 28px; color:var(--ox-ink-soft); font-size:16.5px; max-width:44ch; line-height:1.6; }

.ox-gate-checks{ display:flex; flex-direction:column; gap:10px; margin-bottom:22px; }
.ox-gate-chk{
	display:flex; align-items:flex-start; gap:12px;
	border:1px solid var(--ox-line); border-radius:var(--ox-r-input);
	padding:16px 18px; cursor:pointer;
	transition:background .15s,border-color .15s;
}
.ox-gate-chk:has(input:checked){ background:var(--ox-sage); border-color:var(--ox-line-hi); }
.ox-gate-chk input{
	appearance:none; width:20px; height:20px; flex:0 0 20px;
	border:1.5px solid var(--ox-line-hi); border-radius:6px; margin:1px 0 0;
	display:grid; place-items:center; cursor:pointer; background:var(--ox-white);
}
.ox-gate-chk input:checked{ background:var(--ox-green); border-color:var(--ox-green); }
.ox-gate-chk input:checked::after{
	content:""; width:11px; height:8px;
	border-left:2px solid #fff; border-bottom:2px solid #fff;
	transform:rotate(-45deg) translate(1px,-1px);
}
.ox-gate-chk span{ font-size:15px; color:var(--ox-ink); }
.ox-gate-chk b{ font-weight:600; }

button.ox-gate-enter{
	width:100%; font-family:var(--ox-sans); font-size:16px; font-weight:600;
	display:flex; align-items:center; justify-content:center; gap:8px;
	padding:16px 24px; border-radius:999px; border:none; cursor:not-allowed;
	background:var(--ox-sage-deep); color:var(--ox-graphite);
	transition:background .18s,color .18s;
}
button.ox-gate-enter.is-active{ cursor:pointer; background:var(--ox-green); color:#fff; }
button.ox-gate-enter.is-active:hover{ background:var(--ox-green-deep); }
button.ox-gate-enter svg{ width:16px; height:16px; }

.ox-gate-fine{ margin:18px 0 0; font-size:13px; line-height:1.6; color:var(--ox-graphite); }
.ox-gate-exit{ margin-top:20px; font-size:14px; color:var(--ox-ink-soft); }
.ox-gate-exit a{ color:var(--ox-ink); text-decoration:underline; text-underline-offset:2px; }

/* side panel -- brand pattern, no stock photography */
.ox-gate-side{
	position:relative; overflow:hidden; background:var(--ox-sage);
	min-height:280px; display:flex; align-items:center; justify-content:center;
}
.ox-gate-wm{ position:absolute; opacity:.14; width:120%; height:auto; left:-10%; }
.ox-gate-badges{ position:relative; display:flex; flex-direction:column; gap:14px; padding:40px; width:100%; }
.ox-gate-badge{
	display:flex; align-items:center; gap:12px;
	background:rgba(255,255,255,.72); backdrop-filter:blur(6px);
	border:1px solid var(--ox-line); border-radius:var(--ox-r-input);
	padding:14px 18px; font-size:14px; color:var(--ox-ink-soft);
}
.ox-gate-badge b{ color:var(--ox-ink); font-weight:600; }
.ox-gate-badge svg{ width:18px; height:18px; flex:0 0 18px; color:var(--ox-green); }

@media(max-width:959px){
	.ox-gate-side{ min-height:200px; }
}

/* ==========================================================================
   FAQ page (/faqs/) — brand-styled accordion, matches the rest of the site.
   Wrap the page's content in <div class="oxian oxian-faq-page"> so the
   --ox-* tokens resolve, and structure each Q&A as native <details>/
   <summary> (no JS needed, no WAF risk, fully accessible/keyboard-native).
   ========================================================================== */

.oxian-faq-page{ background:var(--ox-paper); }
.oxian-faq-page .oxian-wrap{ padding-top:clamp(48px,7vw,84px); padding-bottom:clamp(48px,7vw,84px); }

.oxian-faq-head{ max-width:640px; margin-bottom:clamp(40px,5vw,64px); }
.oxian-faq-head .oxian-eyebrow{ margin-bottom:14px; }
.oxian-faq-head .oxian-h1{ font-size:clamp(38px,5vw,58px); margin-bottom:14px; }
.oxian-faq-head .oxian-lede a{ color:var(--ox-green); text-decoration:underline; text-underline-offset:2px; }

.oxian-faq-group{ max-width:820px; }
.oxian-faq-group + .oxian-faq-group{ margin-top:clamp(40px,5vw,60px); }

.oxian-faq-cat{
	font-family:var(--ox-sans); font-weight:600; font-size:clamp(20px,2.2vw,26px);
	letter-spacing:-.02em; color:var(--ox-ink); margin:0 0 6px;
}

.oxian-faq-list{ border-top:1px solid var(--ox-line); }

.oxian-faq-item{ border-bottom:1px solid var(--ox-line); }

.oxian-faq-item summary{
	display:flex; align-items:center; justify-content:space-between; gap:16px;
	padding:20px 2px; cursor:pointer; list-style:none;
	font-family:var(--ox-sans); font-weight:600; font-size:16.5px;
	color:var(--ox-ink); -webkit-tap-highlight-color:transparent;
}
.oxian-faq-item summary::-webkit-details-marker{ display:none; }
.oxian-faq-item summary::marker{ content:""; }

.oxian-faq-item summary:hover{ color:var(--ox-green); }

.oxian-faq-item .oxian-faq-chev{
	flex:0 0 auto; width:18px; height:18px; color:var(--ox-graphite);
	transition:transform .2s ease;
}
.oxian-faq-item[open] .oxian-faq-chev{ transform:rotate(180deg); color:var(--ox-green); }

.oxian-faq-item .oxian-faq-a{
	padding:0 2px clamp(18px,2vw,22px);
	color:var(--ox-ink-soft); font-size:15.5px; line-height:1.65; max-width:68ch;
}
.oxian-faq-item .oxian-faq-a p{ margin:0; }
.oxian-faq-item .oxian-faq-a a{ color:var(--ox-green); text-decoration:underline; text-underline-offset:2px; }

@media(max-width:640px){
	.oxian-faq-item summary{ font-size:15.5px; padding:16px 2px; }
}

/* Hide the theme's default page-title block on the FAQ page --
   the oxian-faq-page header block supplies its own heading. */
body.page-id-77 .wp-block-post-title{ display:none; }

/* ==========================================================================
   Footer -- grouped link columns with brand block, inspired by the
   refinedbiolabs.com pattern (bold uppercase column headers, hairline
   above the copyright row) adapted to Oxian's light/sage footer.
   ========================================================================== */

.oxian-footer{ padding:clamp(48px,6vw,72px) 0 28px; }

.oxian-footer-top{
	display:grid; grid-template-columns:1.3fr repeat(4,1fr);
	gap:clamp(28px,4vw,56px); align-items:start;
}
@media(max-width:900px){
	.oxian-footer-top{ grid-template-columns:1fr 1fr; }
	.oxian-footer-brand{ grid-column:1 / -1; margin-bottom:8px; }
}
@media(max-width:560px){
	.oxian-footer-top{ grid-template-columns:1fr; }
	.oxian-footer-brand{ grid-column:auto; margin-bottom:0; }
}

.oxian-footer-brand{ max-width:300px; }
.oxian-footer-mark{ display:flex; align-items:center; gap:10px; margin-bottom:14px; text-decoration:none; }
.oxian-footer-mark img{ height:26px; width:auto; max-height:26px; display:block; }
.oxian-footer-word{ font-family:var(--ox-sans); font-weight:700; font-size:17px; letter-spacing:-.01em; color:var(--ox-ink); }
.oxian-footer-tagline{ font-size:14.5px; line-height:1.6; margin:0; }

.oxian-footer-col-title{
	font-family:var(--ox-mono); font-size:11px; font-weight:500;
	letter-spacing:.14em; text-transform:uppercase; color:var(--ox-graphite);
	margin:0 0 14px;
}
.oxian-footer-links{ display:flex; flex-direction:column; gap:10px; list-style:none; margin:0; padding:0; }
.oxian-footer-links a{ font-size:14.5px; }

.oxian-footer-bottom{
	border-top:1px solid var(--ox-line-hi);
	margin-top:clamp(36px,5vw,52px); padding-top:22px;
	display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px 24px;
}
.oxian-footer-bottom p{ margin:0; font-size:13px; }

/* ===== OXIAN 2026 REFRESH :: START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 1
   Structural fixes, dark hero band, WooCommerce block-grid alignment.
   Appended at the end so it wins on cascade order without editing the rules
   above it. Everything here is scoped.
   ========================================================================== */

/* ---------- 1. dead space above the content -------------------------------
   The theme puts a fluid margin on <main> and a matching fluid padding on the
   content wrapper inside it. Stacked with the hero's own padding that was
   201px of nothing between the header and the first word on the homepage. */

main.wp-block-group { margin-block-start:0 !important; }

main > .wp-block-group.alignfull.has-global-padding,
main > .wp-block-group.has-global-padding {
	padding-top:clamp(24px,3vw,40px) !important;
}
body.home main > .wp-block-group.alignfull.has-global-padding,
body.home main > .wp-block-group.has-global-padding {
	padding-top:0 !important;
}

/* ---------- 2. sticky header ---------------------------------------------- */

header.wp-block-template-part {
	position:sticky; top:0; z-index:100;
	background:rgba(247,248,246,.86);
	-webkit-backdrop-filter:saturate(180%) blur(14px);
	backdrop-filter:saturate(180%) blur(14px);
	border-bottom:1px solid rgba(19,26,22,.08);
}
.admin-bar header.wp-block-template-part { top:32px; }
@media screen and (max-width:782px){
	.admin-bar header.wp-block-template-part { top:46px; }
}
@media (prefers-reduced-transparency: reduce){
	header.wp-block-template-part { background:#F7F8F6; backdrop-filter:none; }
}

/* ---------- 3. hero: one dark band ----------------------------------------
   The page is light. This is the single deliberate colour block, and the
   ticker sits inside it so there is one dark region, not two. */

.oxian.oxian-hero {
	background:radial-gradient(120% 150% at 10% -10%, #1E5A34 0%, #16482A 42%, #0F3220 78%, #0D2C1C 100%);
	color:#fff;
	padding:clamp(52px,5.6vw,88px) 0 clamp(48px,5.2vw,76px);
	position:relative; overflow:hidden;
}
.oxian.oxian-hero::before {
	content:""; position:absolute; inset:0; pointer-events:none;
	background-image:
		linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px),
		linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px);
	background-size:64px 64px;
	-webkit-mask-image:radial-gradient(80% 90% at 70% 30%, #000 0%, transparent 72%);
	mask-image:radial-gradient(80% 90% at 70% 30%, #000 0%, transparent 72%);
}

.oxian-hero-grid {
	position:relative; z-index:1;
	display:grid; grid-template-columns:1.02fr .98fr;
	gap:clamp(32px,4vw,60px); align-items:center;
}
@media (max-width:900px){
	.oxian-hero-grid { grid-template-columns:1fr; gap:32px; }
}

.oxian-hero .oxian-h1 { color:#fff; }
.oxian-hero .oxian-h1 em { color:#6FD39B; }
.oxian-hero .oxian-eyebrow { color:rgba(207,227,213,.82); }
.oxian-hero .oxian-lede { color:rgba(233,242,236,.86); max-width:40ch; }

.oxian-hero .oxian-btn-solid { background:#fff; border-color:#fff; color:#0F3220; font-weight:600; }
.oxian-hero .oxian-btn-solid:hover,
.oxian-hero .oxian-btn-solid:focus { background:#E4EFE7; border-color:#E4EFE7; color:#0D2C1C; }
.oxian-hero .oxian-btn-ghost { color:#fff; border-color:rgba(255,255,255,.34); }
.oxian-hero .oxian-btn-ghost:hover,
.oxian-hero .oxian-btn-ghost:focus { background:rgba(255,255,255,.10); color:#fff; border-color:rgba(255,255,255,.5); }

.oxian-hero a:focus-visible,
.oxian-hero button:focus-visible,
.oxian-ticker a:focus-visible { outline:2px solid #9FE3BC; outline-offset:3px; }

/* ---------- 4. the chromatogram, restored ---------------------------------
   This markup was already in the hero and was being hidden. It is the real
   proof of the headline: the actual lot trace, not stock photography. */

.oxian .oxian-chroma,
.oxian figure.oxian-chroma {
	display:block; margin:0;
	background:rgba(255,255,255,.045);
	border:1px solid rgba(255,255,255,.14);
	border-radius:var(--ox-r);
	padding:clamp(18px,2vw,24px);
	box-shadow:inset 0 1px 0 rgba(255,255,255,.10);
}
.oxian-chroma-head {
	display:flex; justify-content:space-between; align-items:baseline;
	gap:16px; flex-wrap:wrap; margin-bottom:18px;
}
.oxian-chroma .oxian-eyebrow { color:rgba(207,227,213,.66); }
.oxian-chroma svg { display:block; width:100%; height:auto; overflow:visible; }

.oxian-gridl { stroke:rgba(255,255,255,.09); stroke-width:1; }
.oxian-axis  { stroke:rgba(255,255,255,.26); stroke-width:1; }
.oxian-trace { fill:none; stroke-linejoin:round; stroke-linecap:round; }
.oxian-trace-ref  { stroke:rgba(159,199,174,.40); stroke-width:1.5; stroke-dasharray:4 5; }
.oxian-trace-main { stroke:#6FD39B; stroke-width:2.4; }
.oxian-trace-fill { fill:rgba(111,211,155,.14); stroke:none; }
.oxian-peakline { stroke:rgba(255,255,255,.34); stroke-width:1; stroke-dasharray:2 3; }
.oxian-peaklab { fill:#fff; font-family:var(--ox-mono); font-size:21px; font-weight:600; letter-spacing:-.02em; }
.oxian-peaksub { fill:rgba(207,227,213,.70); font-family:var(--ox-mono); font-size:10px; letter-spacing:.14em; }

.oxian-chroma-foot {
	display:flex; flex-wrap:wrap; gap:10px 26px;
	margin-top:18px; padding-top:15px;
	border-top:1px solid rgba(255,255,255,.12);
	font-family:var(--ox-mono); font-size:10.5px; letter-spacing:.12em;
	text-transform:uppercase; color:rgba(207,227,213,.60);
}
.oxian-chroma-foot b { color:#fff; font-weight:600; letter-spacing:.06em; }

@media (prefers-reduced-motion: no-preference){
	.oxian-trace-main { stroke-dasharray:1; stroke-dashoffset:1; animation:oxian-draw 1.5s cubic-bezier(.16,1,.3,1) .2s forwards; }
	.oxian-trace-fill { opacity:0; animation:oxian-fade .7s ease 1.1s forwards; }
}
@keyframes oxian-draw { to { stroke-dashoffset:0; } }
@keyframes oxian-fade { to { opacity:1; } }

/* ---------- 5. ticker joins the dark band --------------------------------- */

.oxian.oxian-ticker { background:#0D2C1C; border-top:1px solid rgba(255,255,255,.10); }
.oxian-ticker-track span { opacity:.78; }

/* ---------- 6. section rhythm ---------------------------------------------
   Four eyebrows across five sections is the templated look. The headings
   already say "Catalog" and "Buying at volume". Kept: the hero compliance
   line and "Chain of custody". */

.oxian-sec .oxian-sec-head > div > .oxian-eyebrow,
.oxian-whole-grid .oxian-eyebrow { display:none; }
.oxian-sec-flush .oxian-sec-head > div > .oxian-eyebrow { display:block; }

/* ---------- 7. catalog grid fills its row ---------------------------------
   The 360px column cap left a dead strip on the right at every width above
   two columns. Cards now flex to fill and the buy row pins to the bottom. */

.oxian-cat,
.oxian-cat.oxian-cols-1,
.oxian-cat.oxian-cols-2,
.oxian-cat.oxian-cols-3,
.oxian-cat.oxian-cols-4 {
	grid-template-columns:repeat(auto-fill,minmax(268px,1fr));
	gap:16px;
}
.oxian .oxian-card { min-height:0; }
.oxian .oxian-card-buy { margin-top:auto; }
.oxian .oxian-spec { margin:0; }
.oxian .oxian-card-img img { aspect-ratio:1/1; }

.oxian .oxian-card:has(.oxian-pill.is-out) a.button {
	background:transparent; color:var(--ox-ink);
	border:1px solid rgba(19,26,22,.22);
}
.oxian .oxian-card:has(.oxian-pill.is-out) a.button:hover {
	background:rgba(19,26,22,.05); color:var(--ox-ink);
}

/* ---------- 8. process grid stays inside the page gutter ------------------
   It was a direct child of the full-bleed section, so it ran edge to edge
   while its own heading sat on the 1200px grid. */

.oxian-sec > .oxian-proc {
	max-width:1200px; margin-inline:auto; padding-inline:var(--ox-gut);
}

/* ---------- 9. WooCommerce block buttons ----------------------------------
   The shop and product blocks render wp-element-button, which oxian.css
   never matched, so they fell through to the theme's near-black. */

.wp-block-woocommerce-product-button .wp-element-button,
.wc-block-components-product-button .wp-element-button,
.wc-block-components-product-button__button,
.wc-block-cart .wc-block-components-button,
.wc-block-checkout .wc-block-components-button,
.wp-block-woocommerce-cart .wc-block-components-button {
	background-color:#1E5A34; background:#1E5A34; color:#fff;
	border:0; border-radius:999px;
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-weight:500; letter-spacing:0; text-transform:none;
}
.wp-block-woocommerce-product-button .wp-element-button:hover,
.wc-block-components-product-button__button:hover,
.wc-block-cart .wc-block-components-button:hover,
.wc-block-checkout .wc-block-components-button:hover {
	background-color:#123A22; background:#123A22; color:#fff;
}

li.wc-block-product:not(.purchasable) .wc-block-components-product-button__button,
li.product:not(.purchasable) .wc-block-components-product-button__button {
	background:transparent; background-color:transparent; color:#131A16;
	border:1px solid rgba(19,26,22,.22);
}
li.wc-block-product:not(.purchasable) .wc-block-components-product-button__button:hover,
li.product:not(.purchasable) .wc-block-components-product-button__button:hover {
	background:rgba(19,26,22,.05); background-color:rgba(19,26,22,.05); color:#131A16;
}

/* ---------- 10. shop archive becomes real cards ---------------------------
   The Product Collection block ships a bare centred list. Same card language
   as the homepage catalog so the two pages read as one storefront. */

.wp-block-woocommerce-product-template,
ul.wc-block-product-template {
	display:grid !important;
	grid-template-columns:repeat(auto-fill,minmax(268px,1fr));
	gap:16px; margin:0; padding:0; list-style:none;
}
li.wc-block-product {
	background:#fff; border:1px solid rgba(19,26,22,.10);
	border-radius:20px; padding:22px; margin:0;
	display:flex; flex-direction:column; gap:14px;
	width:auto !important; max-width:none !important; float:none !important;
	transition:transform .22s cubic-bezier(.16,1,.3,1), box-shadow .22s;
}
li.wc-block-product:hover { transform:translateY(-3px); box-shadow:0 10px 30px rgba(19,26,22,.07); }

li.wc-block-product h2,
li.wc-block-product .wc-block-components-product-price,
li.wc-block-product .has-text-align-center { text-align:left !important; }

li.wc-block-product .wc-block-components-product-image {
	margin:0; background:#E4EFE7; border-radius:16px; overflow:hidden;
}
li.wc-block-product .wc-block-components-product-image img {
	display:block; width:100%; height:auto; aspect-ratio:1/1;
	object-fit:cover; border-radius:16px; transition:transform .4s ease;
}
li.wc-block-product:hover .wc-block-components-product-image img { transform:scale(1.03); }

li.wc-block-product h2.wp-block-post-title {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:22px !important; font-weight:600;
	letter-spacing:-.022em; line-height:1.15; margin:0;
}
li.wc-block-product h2.wp-block-post-title a { color:#131A16; text-decoration:none; transition:color .18s; }
li.wc-block-product h2.wp-block-post-title a:hover { color:#2F7A4B; }

li.wc-block-product .wc-block-components-product-price {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:19px; font-weight:600; letter-spacing:-.02em; color:#131A16; margin:0;
}
li.wc-block-product .wp-block-woocommerce-product-button,
li.wc-block-product .wc-block-components-product-button { margin:auto 0 0; width:100%; }
li.wc-block-product .wc-block-components-product-button__button {
	width:100%; text-align:center; padding:12px 20px; font-size:15px;
}

.woocommerce-result-count {
	font-family:"IBM Plex Mono",ui-monospace,monospace;
	font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:#7A857F;
}
.woocommerce-ordering select,
.wp-block-woocommerce-catalog-sorting select,
.wc-block-catalog-sorting select {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:15px; color:#131A16; background-color:#fff;
	border:1px solid rgba(19,26,22,.20); border-radius:12px;
	padding:11px 16px; line-height:1.3;
}

.woocommerce-breadcrumb, .wc-block-breadcrumbs { font-size:14px; color:#7A857F; }
.woocommerce-breadcrumb a, .wc-block-breadcrumbs a { color:#1F56A6; text-decoration:none; }
.woocommerce-breadcrumb a:hover, .wc-block-breadcrumbs a:hover { color:#2F7A4B; }

/* ---------- 11. mobile button rule, corrected -----------------------------
   The rule this replaces had a comment spliced into the middle of its
   selector list, so card buttons fell into display:block and the price row
   broke onto two lines. */

@media (max-width:780px){
	.oxian .oxian-btn { display:block; width:100%; text-align:center; }
	.oxian .oxian-card a.button,
	.oxian .oxian-card button.button,
	.oxian .oxian-card .added_to_cart { display:inline-block; width:auto; }
	.oxian-chroma-head { gap:6px; }
}

/* ===== OXIAN 2026 REFRESH :: END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 2 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 2
   Interior pages, COA library, product page. Brings the two remaining design
   systems onto the one the homepage uses.
   ========================================================================== */

/* ---------- 12. corrections to stage 1 ------------------------------------ */

/* the theme's block gap put a 19px white sliver between the hero and the
   ticker, splitting the dark band into two pieces */
.entry-content > .oxian + .oxian,
.wp-block-post-content > .oxian + .oxian { margin-block-start:0 !important; }

/* the potency figure is already stated in the panel footer, and at the size
   the SVG renders it collided with the purity label */
.oxian-peaksub { display:none; }
.oxian-peaklab { font-size:24px; }

/* shop card buttons stretch to the card width */
li.wc-block-product .wp-block-button,
li.wc-block-product .wp-block-button.align-center { width:100%; align-self:stretch; }
li.wc-block-product .wp-block-button__link { display:block; width:100%; }

/* WooCommerce keeps .purchasable on out-of-stock products, so the stock class
   is what distinguishes a real buy button from a details link */
li.wc-block-product.outofstock .wc-block-components-product-button__button {
	background:transparent; background-color:transparent; color:#131A16;
	border:1px solid rgba(19,26,22,.22);
}
li.wc-block-product.outofstock .wc-block-components-product-button__button:hover {
	background:rgba(19,26,22,.05); background-color:rgba(19,26,22,.05); color:#131A16;
}

/* ---------- 13. interior pages ---------------------------------------------
   About, FAQs, Contact, Shipping, Terms and Privacy shipped with a second
   design language: a blue-to-green gradient panel, centred white type and a
   badge pill, plus blue headings that appear nowhere else. Retired here in
   favour of the same left-ranged, paper-ground language the homepage uses.
   These rules live in the plugin sheet, which loads after Global Styles, so
   they win without editing the site's Additional CSS. */

.oxb-hero {
	background:none !important;
	background-color:transparent !important;
	background-image:none !important;
	border-radius:0 !important;
	box-shadow:none !important;
	color:#131A16 !important;
	text-align:left !important;
	padding:0 44px clamp(28px,3.4vw,44px) !important;
	margin:0 0 clamp(34px,4vw,52px) !important;
	border-bottom:1px solid rgba(19,26,22,.10) !important;
}
.oxb-hero h1 {
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
	color:#131A16 !important;
	font-size:clamp(36px,4.6vw,58px) !important;
	font-weight:600 !important;
	letter-spacing:-.032em !important;
	line-height:1.04 !important;
	text-align:left !important;
	margin:0 0 16px !important;
	max-width:20ch;
}
.oxb-hero p {
	color:#4A5751 !important;
	text-align:left !important;
	font-size:clamp(16.5px,1.4vw,19px) !important;
	line-height:1.6 !important;
	max-width:54ch !important;
	margin:0 !important;
}
.oxb-badge {
	background:#E4EFE7 !important;
	background-color:#E4EFE7 !important;
	color:#1E5A34 !important;
	border:0 !important;
	border-radius:999px !important;
	font-family:"IBM Plex Mono",ui-monospace,monospace !important;
	font-size:10.5px !important;
	font-weight:500 !important;
	letter-spacing:.12em !important;
	text-transform:uppercase !important;
	padding:8px 15px !important;
	margin:0 0 20px !important;
	display:inline-flex !important;
	align-items:center;
	gap:8px;
}
.oxb-badge svg { width:13px; height:13px; opacity:.7; }

.oxb-section h2 {
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
	color:#131A16 !important;
	font-size:clamp(23px,2.5vw,30px) !important;
	font-weight:600 !important;
	letter-spacing:-.025em !important;
	line-height:1.15 !important;
}
.oxb-section h3 {
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
	color:#131A16 !important;
	font-size:18.5px !important;
	font-weight:600 !important;
	letter-spacing:-.015em !important;
}
.oxb-section p,
.oxb-section li,
.oxb-intro {
	font-size:16.5px !important;
	line-height:1.7 !important;
	color:#4A5751 !important;
}
.oxb-section a,
.oxb-intro a { color:#1E5A34 !important; text-underline-offset:2px; }
.oxb-section a:hover { color:#123A22 !important; }

.oxb-toc {
	background:#fff !important;
	border:1px solid rgba(19,26,22,.10) !important;
	border-radius:20px !important;
	padding:22px 24px !important;
}
.oxb-toc-title {
	font-family:"IBM Plex Mono",ui-monospace,monospace !important;
	font-size:11px !important; letter-spacing:.14em !important;
	text-transform:uppercase !important; color:#7A857F !important;
}
.oxb-toc a { color:#1F56A6 !important; font-size:15px !important; }
.oxb-toc a:hover { color:#1E5A34 !important; }

.oxb-cards { gap:14px !important; }
.oxb-card {
	background:#fff !important;
	border:1px solid rgba(19,26,22,.10) !important;
	border-radius:20px !important;
	padding:22px !important;
	box-shadow:none !important;
}
.oxb-card-label {
	font-family:"IBM Plex Mono",ui-monospace,monospace !important;
	font-size:10.5px !important; letter-spacing:.12em !important;
	text-transform:uppercase !important; color:#7A857F !important;
}
.oxb-card-value {
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
	font-size:19px !important; font-weight:600 !important;
	letter-spacing:-.02em !important; color:#131A16 !important;
}
.oxb-card-icon svg { color:#1E5A34 !important; }

.oxb-note {
	background:#fff !important;
	border:1px solid rgba(19,26,22,.10) !important;
	border-left:3px solid #2F7A4B !important;
	border-radius:12px !important;
	color:#4A5751 !important;
	font-size:15px !important;
}
.oxb-compliance {
	background:#fff !important;
	border:1px solid rgba(19,26,22,.10) !important;
	border-radius:20px !important;
	padding:24px !important;
}
.oxb-compliance p { font-size:14.5px !important; color:#4A5751 !important; line-height:1.65 !important; }
.oxb-meta {
	font-family:"IBM Plex Mono",ui-monospace,monospace !important;
	font-size:11px !important; letter-spacing:.12em !important;
	text-transform:uppercase !important; color:#7A857F !important;
}

.oxb-faq-kicker {
	font-family:"IBM Plex Mono",ui-monospace,monospace !important;
	font-size:11px !important; letter-spacing:.14em !important;
	text-transform:uppercase !important; color:#7A857F !important;
}
.oxb-faq summary {
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
	font-size:16.5px !important; font-weight:600 !important;
	color:#131A16 !important; letter-spacing:-.01em !important;
}
.oxb-faq summary:hover { color:#1E5A34 !important; }
.oxb-faq p { font-size:15.5px !important; line-height:1.65 !important; color:#4A5751 !important; }

/* ---------- 14. COA library ------------------------------------------------
   One of two links in the main navigation, and it shipped as raw theme
   defaults with a table that overflowed its own container. */

body.page-id-64 .entry-content { font-size:16.5px; line-height:1.7; color:#4A5751; }

body.page-id-64 .wp-block-post-title {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:clamp(36px,4.6vw,58px);
	font-weight:600; letter-spacing:-.032em; line-height:1.04;
	color:#131A16; margin-bottom:10px;
}
body.page-id-64 .entry-content > h2 {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:clamp(21px,2.2vw,26px); font-weight:600;
	letter-spacing:-.022em; color:#131A16;
	margin:0 0 10px;
}
body.page-id-64 .entry-content > h3 {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:18.5px; font-weight:600; letter-spacing:-.015em;
	color:#131A16; margin:clamp(34px,4vw,48px) 0 10px;
}
body.page-id-64 .entry-content > p,
body.page-id-64 .entry-content > ul { font-size:16.5px; line-height:1.7; color:#4A5751; }
body.page-id-64 .entry-content a { color:#1E5A34; text-underline-offset:2px; }
body.page-id-64 .wp-block-separator { border:0; border-top:1px solid rgba(19,26,22,.10); margin:clamp(34px,4vw,48px) 0; }

/* the lot table: a card that scrolls inside itself instead of pushing the
   page sideways, with the identification column no longer clipped */
body.page-id-64 figure.wp-block-table {
	background:#fff;
	border:1px solid rgba(19,26,22,.10);
	border-radius:20px;
	padding:6px 6px 0;
	overflow-x:auto;
	-webkit-overflow-scrolling:touch;
	margin:0 0 8px;
}
body.page-id-64 figure.wp-block-table table {
	border-collapse:collapse; border:0; width:100%; min-width:640px;
	font-size:15px;
}
body.page-id-64 figure.wp-block-table th {
	font-family:"IBM Plex Mono",ui-monospace,monospace;
	font-size:10.5px; font-weight:500; letter-spacing:.12em;
	text-transform:uppercase; color:#7A857F;
	text-align:left; padding:14px 16px; border:0;
	border-bottom:1px solid rgba(19,26,22,.12); white-space:nowrap;
}
body.page-id-64 figure.wp-block-table td {
	padding:16px; border:0; color:#131A16;
	border-bottom:1px solid rgba(19,26,22,.07); vertical-align:middle;
}
body.page-id-64 figure.wp-block-table tr:last-child td { border-bottom:0; }
body.page-id-64 figure.wp-block-table td:nth-child(2) {
	font-family:"IBM Plex Mono",ui-monospace,monospace; font-size:13.5px; white-space:nowrap;
}
body.page-id-64 figure.wp-block-table figcaption {
	font-family:"IBM Plex Mono",ui-monospace,monospace;
	font-size:10.5px; letter-spacing:.1em; text-transform:uppercase;
	color:#7A857F; text-align:left; padding:0 2px; margin-top:12px;
}

/* ---------- 15. product page ----------------------------------------------
   The spec panel was setting whole sentences in mono at 10.5px, and the
   gallery put a small washed-out vial in a very large empty box. */

body .oxian-lot__n {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:13.5px; line-height:1.5; letter-spacing:0;
	color:#7A857F; text-transform:none;
}
.woocommerce div.product div.images .woocommerce-product-gallery__image {
	background:#E4EFE7;
	border-radius:16px;
}
.woocommerce div.product div.images .woocommerce-product-gallery__image img {
	border-radius:16px; aspect-ratio:1/1; object-fit:cover;
}
.woocommerce div.product div.images .flex-control-thumbs { gap:10px; display:flex; margin-top:10px; }
.woocommerce div.product div.images .flex-control-thumbs li { width:88px; margin:0; float:none; }
.woocommerce div.product div.images .flex-control-thumbs img {
	border-radius:12px; background:#E4EFE7; aspect-ratio:1/1; object-fit:cover;
	opacity:.85; transition:opacity .18s;
}
.woocommerce div.product div.images .flex-control-thumbs img:hover,
.woocommerce div.product div.images .flex-control-thumbs img.flex-active { opacity:1; }
.woocommerce div.product .product_title { margin-bottom:10px; }
.woocommerce div.product p.price { margin-bottom:22px; }


/* the COA page body copy still fell back to the theme face */
body.page-id-64 .entry-content,
body.page-id-64 .entry-content p,
body.page-id-64 .entry-content li,
body.page-id-64 .wp-block-post-title {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
}
/* tables anywhere on the site read as a card, and scroll inside themselves
   rather than pushing the page sideways */
figure.wp-block-table { overflow-x:auto; -webkit-overflow-scrolling:touch; }
figure.wp-block-table table { border-collapse:collapse; border:0; }
figure.wp-block-table td, figure.wp-block-table th { border-left:0; border-right:0; }

/* ===== OXIAN 2026 REFRESH :: STAGE 2 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 3 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 3
   ========================================================================== */

/* ---------- 16. lot table fits without sideways scrolling -----------------
   Six columns at the theme's 650px content width forced a horizontal
   scrollbar and clipped the identification column. Tighter cells and a
   wider container let the whole row read at once. */

body.page-id-64 .entry-content > figure.wp-block-table {
	max-width:none;
	width:auto;
	margin-inline:calc(-1 * clamp(0px, 4vw, 90px));
	padding:6px 10px 0;
}
body.page-id-64 figure.wp-block-table table { min-width:0; font-size:14px; table-layout:auto; }
body.page-id-64 figure.wp-block-table th {
	padding:13px 10px; font-size:9.5px; letter-spacing:.1em; white-space:normal;
}
body.page-id-64 figure.wp-block-table td { padding:14px 10px; }
body.page-id-64 figure.wp-block-table td:nth-child(2) { font-size:12.5px; }
body.page-id-64 figure.wp-block-table figcaption { padding-left:10px; margin-bottom:4px; }

@media (max-width:640px){
	body.page-id-64 .entry-content > figure.wp-block-table { margin-inline:0; overflow-x:auto; }
	body.page-id-64 figure.wp-block-table table { min-width:560px; }
}

/* ---------- 17. cart, checkout and account -------------------------------
   These inherit the theme otherwise, and they are the last three screens a
   buyer sees. */

.woocommerce-cart .entry-content,
.woocommerce-checkout .entry-content,
.woocommerce-account .entry-content,
.wp-block-woocommerce-cart,
.wp-block-woocommerce-checkout {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
}
.wc-block-components-title,
.wp-block-woocommerce-cart h1,
.wp-block-woocommerce-checkout h1,
.woocommerce-account h1,
.woocommerce-cart h1 {
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
	letter-spacing:-.028em !important;
	color:#131A16 !important;
}
.wc-block-components-text-input input,
.wc-block-components-select select,
.wc-block-components-textarea {
	border-radius:12px !important;
	border:1px solid rgba(19,26,22,.20) !important;
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
}
.wc-block-components-panel,
.wc-block-components-sidebar-layout .wc-block-components-sidebar {
	border-radius:20px;
}
.wc-block-cart-item__image img,
.wc-block-components-order-summary-item__image img {
	border-radius:12px; background:#E4EFE7;
}
.wc-block-components-totals-item__value,
.wc-block-components-formatted-money-amount {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	letter-spacing:-.01em;
}

/* ---------- 18. product gallery thumbnails -------------------------------- */

.woocommerce div.product div.images .flex-control-thumbs {
	display:grid !important;
	grid-template-columns:repeat(auto-fill,minmax(84px,1fr));
	gap:10px; margin-top:10px; padding:0; list-style:none;
}
.woocommerce div.product div.images .flex-control-thumbs li { width:auto !important; margin:0 !important; }

/* ===== OXIAN 2026 REFRESH :: STAGE 3 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 4 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 4
   ========================================================================== */

/* ---------- 19. shop card button fills the card ---------------------------
   The product-button block is a flex container, so width:100% on the link
   was not enough; it needed to grow rather than size to its text. */

li.wc-block-product .wp-block-button,
li.wc-block-product .wc-block-components-product-button { display:flex; width:100%; }
li.wc-block-product .wc-block-components-product-button__button {
	flex:1 1 100%;
	width:100%;
	justify-content:center;
}

/* ---------- 20. classic cart ----------------------------------------------
   Column headers now speak the same mono label language as the spec blocks,
   the remove control stops shouting in pure red, and thumbnails match the
   card media treatment. */

.woocommerce table.shop_table th {
	font-family:"IBM Plex Mono",ui-monospace,monospace;
	font-size:10.5px; font-weight:500; letter-spacing:.12em;
	text-transform:uppercase; color:#7A857F;
	padding:16px; border-bottom:1px solid rgba(19,26,22,.12);
}
.woocommerce table.shop_table td { padding:16px; }
.woocommerce table.shop_table img {
	border-radius:12px; background:#E4EFE7; width:72px; height:auto;
}
.woocommerce table.shop_table td.product-name a {
	color:#131A16; text-decoration:none; font-weight:500;
}
.woocommerce table.shop_table td.product-name a:hover { color:#2F7A4B; }
.woocommerce a.remove {
	color:#7A857F !important;
	font-weight:400;
	border-radius:999px;
}
.woocommerce a.remove:hover {
	color:#B3261E !important;
	background:rgba(179,38,30,.08) !important;
}
.woocommerce-cart .cart_totals h2,
.woocommerce-checkout h3 {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:19px; font-weight:600; letter-spacing:-.02em; color:#131A16;
}
.woocommerce-cart .wc-proceed-to-checkout a.checkout-button {
	padding:16px 28px; font-size:16px; font-weight:600;
}
.woocommerce .quantity .qty {
	border-radius:12px; border:1px solid rgba(19,26,22,.20);
}
.woocommerce #coupon_code { min-width:180px; }

/* ---------- 21. account pages --------------------------------------------- */

.woocommerce-account .woocommerce-MyAccount-navigation ul {
	list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:2px;
}
.woocommerce-account .woocommerce-MyAccount-navigation li a {
	display:block; padding:11px 14px; border-radius:12px;
	color:#4A5751; text-decoration:none; font-size:15px;
}
.woocommerce-account .woocommerce-MyAccount-navigation li a:hover { background:#E4EFE7; color:#131A16; }
.woocommerce-account .woocommerce-MyAccount-navigation li.is-active a {
	background:#E4EFE7; color:#1E5A34; font-weight:600;
}

/* ===== OXIAN 2026 REFRESH :: STAGE 4 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 5 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 5
   Two specificity corrections. Both targets are set by rules that carry more
   classes than my earlier selectors did, so the fix is reach, not force.
   ========================================================================== */

/* WooCommerce sets width:auto with three classes; this needs four to win */
li.wc-block-product .wp-block-button.wc-block-components-product-button .wp-block-button__link,
li.wc-block-product .wp-block-button.wc-block-components-product-button .wc-block-components-product-button__button {
	width:100%;
	flex:1 1 100%;
	justify-content:center;
}

/* the cart remove control ships as pure red with !important */
.woocommerce table.shop_table td.product-remove a.remove,
.woocommerce-cart table.cart td.product-remove a.remove {
	color:#7A857F !important;
	background:transparent !important;
	font-weight:400;
}
.woocommerce table.shop_table td.product-remove a.remove:hover,
.woocommerce-cart table.cart td.product-remove a.remove:hover {
	color:#B3261E !important;
	background:rgba(179,38,30,.08) !important;
}

/* ===== OXIAN 2026 REFRESH :: STAGE 5 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 6 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 6
   Product media panel.

   Six of the seven product images are 1024px transparent PNG cut-outs with
   the vial at 38% width and 85% height. GHK-Cu is an opaque photograph on a
   cream studio backdrop. The sage panel behind them made that difference
   loud: six vials floated on green, one sat in a cream rectangle.

   A near-paper panel makes the cut-outs read as clean product tiles and puts
   GHK-Cu's cream backdrop within a few values of the panel, so the seam
   nearly disappears. The real fix is still a transparent GHK-Cu render at the
   same spec as the other six.
   ========================================================================== */

.oxian .oxian-card-img,
li.wc-block-product .wc-block-components-product-image,
.woocommerce div.product div.images .woocommerce-product-gallery__image,
.woocommerce div.product div.images .flex-control-thumbs img,
.woocommerce table.shop_table img,
.wc-block-cart-item__image img,
.wc-block-components-order-summary-item__image img {
	background:#F0F1ED;
}

/* the cut-outs already carry their own generous padding, so contain rather
   than cover keeps every vial whole at any card width */
.oxian .oxian-card-img img,
li.wc-block-product .wc-block-components-product-image img {
	object-fit:contain;
}

/* ===== OXIAN 2026 REFRESH :: STAGE 6 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 7 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 7 - last details
   ========================================================================== */

/* the account menu inherited the theme's body line-height, which spread six
   links over most of the viewport */
.woocommerce-account .woocommerce-MyAccount-navigation ul li {
	line-height:1.3;
	margin:0;
	padding:0;
}
.woocommerce-account .woocommerce-MyAccount-navigation ul li a { line-height:1.3; }
.woocommerce-account .woocommerce-MyAccount-navigation ul li.is-active a { text-decoration:none; }
.woocommerce-account .woocommerce-MyAccount-content { font-size:16.5px; line-height:1.7; }
.woocommerce-account .woocommerce-MyAccount-content a { color:#1E5A34; text-underline-offset:2px; }

/* ===== OXIAN 2026 REFRESH :: STAGE 7 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 8 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 8
   Research-use strip. Rendered on wp_body_open so it sits above the header
   on every page and scrolls away while the header stays put.
   ========================================================================== */

.ox-ruo-bar {
	background:#0D2C1C;
	color:rgba(207,227,213,.86);
	font-family:"IBM Plex Mono",ui-monospace,Consolas,monospace;
	font-size:10.5px;
	font-weight:500;
	letter-spacing:.14em;
	text-transform:uppercase;
	text-align:center;
	line-height:1.5;
	padding:10px 20px;
	margin:0;
}
@media (max-width:560px){
	.ox-ruo-bar { font-size:9.5px; letter-spacing:.1em; padding:9px 14px; }
}

/* ===== OXIAN 2026 REFRESH :: STAGE 8 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 9 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 9
   The wholesale panel had no horizontal padding at any width, and no gutter
   at all below 780px, so on a phone the sage panel and the tier rows inside
   it both ran edge to edge with only the panel's 1px border between them.

   Two separate rules were cancelling it, both by accident:

   1. The panel element carries BOTH .oxian-wrap and .oxian-whole-grid. The
      rule ".oxian-whole .oxian-wrap { padding-left:0; padding-right:0 }"
      exists to stop the wrap doubling the section gutter, but at two classes
      it also out-specifies ".oxian-whole-grid { padding: ... }" at one class,
      so the panel lost its own padding everywhere.

   2. .oxian-whole is also .oxian-sec, and the small-screen rule
      ".oxian-sec { padding: clamp(40px,7vw,60px) 0 }" is a shorthand, so
      below 780px it reset the left and right padding that .oxian-whole sets
      to var(--ox-gut) and the whole panel went full bleed.

   Both fixes win on specificity rather than on !important.
   ========================================================================== */

.oxian-whole .oxian-wrap.oxian-whole-grid {
	padding: clamp(22px, 4.5vw, 58px);
}

@media (max-width: 780px) {
	.oxian.oxian-whole {
		padding-left: var(--ox-gut);
		padding-right: var(--ox-gut);
	}
	.oxian-whole .oxian-wrap.oxian-whole-grid { gap: 24px; }
	.oxian .oxian-tier { padding: 14px 16px; gap: 10px; }
	.oxian .oxian-tier b { font-size: 15px; }
	.oxian .oxian-tier span { font-size: 19px; }
}

/* grid and flex children default to min-width:auto, so a row whose content
   will not shrink can push past its track. Not what bit here, but it is the
   next thing that would. */
.oxian-whole-grid > *,
.oxian-tiers,
.oxian-tier { min-width: 0; }
.oxian .oxian-tier b { min-width: 0; }
.oxian .oxian-tier span { flex: 0 0 auto; white-space: nowrap; }

/* ===== OXIAN 2026 REFRESH :: STAGE 9 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 10 START ===== */

/* ==========================================================================
   2026 REFRESH - STAGE 10
   Shop cards now carry a stock indicator and the short description, added to
   the archive-product template. Styling them to match the homepage catalog.
   ========================================================================== */

li.wc-block-product .wc-block-components-product-stock-indicator {
	font-family:"IBM Plex Mono",ui-monospace,monospace;
	font-size:10px; font-weight:500; letter-spacing:.1em; text-transform:uppercase;
	background:#E4EFE7; color:#1E5A34;
	border:0; border-radius:999px; padding:6px 12px;
	display:inline-block; width:auto; align-self:flex-start;
	margin:0; line-height:1.3;
}
li.wc-block-product.outofstock .wc-block-components-product-stock-indicator {
	background:rgba(19,26,22,.06); color:#7A857F;
}
li.wc-block-product .wc-block-components-product-summary {
	font-family:"IBM Plex Sans",system-ui,sans-serif;
	font-size:15px; line-height:1.55; color:#4A5751; margin:0;
}
li.wc-block-product .wc-block-components-product-summary p { margin:0; }
li.wc-block-product .wc-block-components-product-price { margin-top:auto; }

/* ===== OXIAN 2026 REFRESH :: STAGE 10 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 11 START ===== */

/* --------------------------------------------------------------------------
   Certificate links.

   The COA Library table carried the placeholder text [PDF LINK] in its
   Certificate column. It now carries a real link to the published
   certificate for lot GHK50-5-22-26, so it has to read as an action rather
   than as body copy. Same pill language as the stock badge on the shop
   cards, so the two trust signals on the site look related.

   Literal hex, not the --ox-* tokens: those are declared inside the .oxian
   scope, and this link lives in plain page content where they resolve to
   nothing. Using them here silently drops the background and the border.
   -------------------------------------------------------------------------- */

a.ox-coa-cert,
.entry-content a.ox-coa-cert,
body.page-id-64 figure.wp-block-table a.ox-coa-cert {
	display:inline-flex; align-items:center; gap:7px;
	box-sizing:border-box;
	padding:7px 13px;
	border:1px solid #CFE3D5;
	border-radius:999px;
	background:#E4EFE7;
	color:#14512F;
	font-family:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
	font-size:10.5px; font-weight:600; letter-spacing:.09em; line-height:1;
	text-transform:uppercase; text-decoration:none; white-space:nowrap;
	transition:background .16s ease, border-color .16s ease, color .16s ease;
}
a.ox-coa-cert::after {
	content:"\2197";
	font-size:12px; line-height:1; opacity:.72;
}
a.ox-coa-cert:hover,
a.ox-coa-cert:focus-visible,
.entry-content a.ox-coa-cert:hover,
.entry-content a.ox-coa-cert:focus-visible,
body.page-id-64 figure.wp-block-table a.ox-coa-cert:hover,
body.page-id-64 figure.wp-block-table a.ox-coa-cert:focus-visible {
	background:#1E5A34;
	border-color:#1E5A34;
	color:#FFFFFF;
}
a.ox-coa-cert:focus-visible { outline:2px solid #1E5A34; outline-offset:2px; }

/* the certificate cell is the one column that must never wrap */
body.page-id-64 figure.wp-block-table td:last-child { white-space:nowrap; }

@media (max-width:640px){
	body.page-id-64 figure.wp-block-table table { min-width:660px; }
}

/* ===== OXIAN 2026 REFRESH :: STAGE 11 END ===== */

/* ===== OXIAN 2026 REFRESH :: STAGE 12 START ===== */

/* --------------------------------------------------------------------------
   COA Library lot table on a phone.

   Nine columns cannot fit a 390px screen, so the table was scrolling
   sideways inside its own box. That is technically correct and practically
   useless: the Certificate link is the last column, which means the one
   thing the page exists for was off-screen until the visitor discovered a
   horizontal scrollbar. Below 700px each row becomes a stacked card with
   its column name beside each value.

   The labels are positional, so they are tied to this table. If a column is
   ever added, removed or reordered in the COA Library table, the nth-child
   list below has to move with it. The header row is not display:none but
   visually hidden, so screen readers still announce the columns.
   -------------------------------------------------------------------------- */

@media (max-width:700px){

	body.page-id-64 .entry-content > figure.wp-block-table {
		overflow:visible; margin-inline:0;
	}
	body.page-id-64 figure.wp-block-table table {
		min-width:0; width:100%; display:block; border-collapse:collapse;
	}
	body.page-id-64 figure.wp-block-table thead {
		display:block; position:absolute; width:1px; height:1px;
		overflow:hidden; clip-path:inset(50%); white-space:nowrap;
	}
	body.page-id-64 figure.wp-block-table thead tr,
	body.page-id-64 figure.wp-block-table thead th { display:block; width:1px; padding:0; }
	body.page-id-64 figure.wp-block-table tbody,
	body.page-id-64 figure.wp-block-table tr { display:block; }

	body.page-id-64 figure.wp-block-table tr {
		padding:4px 0 10px;
		border-bottom:1px solid rgba(19,26,22,.10);
	}
	body.page-id-64 figure.wp-block-table tr:last-child { border-bottom:0; }

	body.page-id-64 figure.wp-block-table td {
		display:grid; grid-template-columns:118px minmax(0,1fr);
		gap:12px; align-items:baseline;
		padding:9px 0; border:0;
		border-bottom:1px solid rgba(19,26,22,.07);
		font-size:14px; white-space:normal;
	}
	body.page-id-64 figure.wp-block-table td::before {
		font-family:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
		font-size:9.5px; font-weight:600; letter-spacing:.1em;
		text-transform:uppercase; color:#7A857F; line-height:1.5;
	}

	/* column names, in the order the COA Library table declares them */
	body.page-id-64 figure.wp-block-table td:nth-child(2)::before { content:"Lot"; }
	body.page-id-64 figure.wp-block-table td:nth-child(3)::before { content:"Size"; }
	body.page-id-64 figure.wp-block-table td:nth-child(4)::before { content:"Purity"; }
	body.page-id-64 figure.wp-block-table td:nth-child(5)::before { content:"Potency"; }
	body.page-id-64 figure.wp-block-table td:nth-child(6)::before { content:"Identification"; }
	body.page-id-64 figure.wp-block-table td:nth-child(7)::before { content:"Assayed"; }
	body.page-id-64 figure.wp-block-table td:nth-child(8)::before { content:"Laboratory"; }
	body.page-id-64 figure.wp-block-table td:nth-child(9)::before { content:""; }

	/* the compound is the card heading, not a labelled field */
	body.page-id-64 figure.wp-block-table td:nth-child(1) {
		display:block; padding:2px 0 12px;
		font-size:20px; font-weight:600; letter-spacing:-.02em; color:#131A16;
		border-bottom:1px solid rgba(19,26,22,.07);
	}
	body.page-id-64 figure.wp-block-table td:nth-child(1)::before { content:none; }

	/* the certificate button gets the full width of the card */
	body.page-id-64 figure.wp-block-table td:nth-child(9) {
		display:block; padding:14px 0 2px; border-bottom:0;
	}
	body.page-id-64 figure.wp-block-table td:last-child { white-space:normal; }
	body.page-id-64 figure.wp-block-table a.ox-coa-cert {
		display:flex; justify-content:center; width:100%; padding:12px 16px;
		font-size:11px;
	}

	body.page-id-64 figure.wp-block-table figcaption { padding-left:0; }
}

/* ===== OXIAN 2026 REFRESH :: STAGE 12 END ===== */


/* ==========================================================================
   NEXTEND SOCIAL LOGIN (Google) - brand alignment
   Google's own button mark can't be recoloured (brand guidelines), so this
   only styles the container, the pill shape, divider and typography -
   matching the pill/button + radius system above. Skin is set to "Neutral"
   in Nextend's settings, which is the skin meant to be restyled like this.
   Covers login, register, checkout-billing and account-details forms -
   Nextend wraps all of them in the same div.nsl-container markup.
   ========================================================================== */

div.nsl-container {
  margin:16px 0 4px;
}
/* Nextend renders its own "OR" separator client-side (.nsl-separator, added
   by the plugin's own JS - not present in the static page source) when a
   "with separator" layout is set. Style that instead of drawing our own. */
.nsl-separator {
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:12px;
  font-weight:600;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:#7A857F;
}

div.nsl-container .nsl-container-buttons {
  width:100%;
  justify-content:center;
}
div.nsl-container.nsl-container-block .nsl-container-buttons {
  grid-template-columns:minmax(240px,100%);
  width:100%;
}
div.nsl-container a { width:100%; display:block; }
div.nsl-container .nsl-button {
  border-radius:999px !important;
  width:100%;
  transition:background .18s, border-color .18s, box-shadow .18s, transform .08s;
}
div.nsl-container .nsl-button:active { transform:translateY(1px); }

div.nsl-container .nsl-button-google[data-skin="neutral"] {
  background:#fff !important;
  box-shadow:inset 0 0 0 1px rgba(19,26,22,.20) !important;
  color:#131A16 !important;
}
div.nsl-container .nsl-button-google[data-skin="neutral"]:hover,
div.nsl-container .nsl-button-google[data-skin="neutral"]:focus {
  background:#E4EFE7 !important;
  box-shadow:inset 0 0 0 1px #1E5A34 !important;
}

div.nsl-container .nsl-button-svg-container { padding:10px 8px 10px 14px; }
div.nsl-container .nsl-button-label-container,
div.nsl-container .nsl-button-google div.nsl-button-label-container {
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif !important;
  font-size:15.5px !important;
  font-weight:500 !important;
  letter-spacing:0 !important;
  line-height:1.3 !important;
  margin:0 20px 0 4px !important;
  padding:13px 0 !important;
  color:#131A16 !important;
}

/* Account details tab: the connect/disconnect button sits in a narrower column */
.woocommerce-MyAccount-content div.nsl-container { max-width:420px; }


/* ==========================================================================
   ACCOUNT PAGE - single-card sign in / create account
   JS (inlined via wp_add_inline_script in the plugin's main file) toggles
   between the two WooCommerce panels and adds the password show/hide
   button; this just styles the result. Radius stays on-system (20px card,
   12px inputs, pill buttons). Palette stays Oxian's forest green / ocean
   blue - a competitor's theme was the reference, not the recipe.
   ========================================================================== */

#customer_login.oxian-auth-card {
  display:block;
  max-width:440px;
  width:100%;
  margin:56px auto;
  background:#fff;
  border:1px solid rgba(19,26,22,.08);
  border-radius:20px;
  padding:40px 36px 36px;
  box-shadow:0 24px 60px -28px rgba(19,26,22,.22);
}
#customer_login.oxian-auth-card .u-column1,
#customer_login.oxian-auth-card .u-column2 {
  width:100% !important;
  float:none !important;
  margin:0 !important;
  padding:0 !important;
}
#customer_login.oxian-auth-card h2 {
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:26px;
  font-weight:600;
  letter-spacing:-.02em;
  color:#131A16;
  margin:0 0 6px;
}
#customer_login.oxian-auth-card .oxian-auth-subtitle {
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:14.5px;
  color:#4A5751;
  margin:0 0 26px;
}

#customer_login.oxian-auth-card .form-row label {
  position:relative;
  display:block;
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:11.5px;
  font-weight:600;
  letter-spacing:.07em;
  text-transform:uppercase;
  color:#7A857F;
  margin-bottom:8px;
}
#customer_login.oxian-auth-card .form-row label .required { color:#2F7A4B; text-decoration:none; }
#customer_login.oxian-auth-card .form-row label .screen-reader-text { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); }

#customer_login.oxian-auth-card input.input-text {
  width:100%;
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:15.5px;
  color:#131A16;
  background-color:#fff;
  border:1px solid rgba(19,26,22,.18);
  border-radius:12px;
  padding:13px 16px 13px 46px;
  line-height:1.3;
  transition:border-color .15s, box-shadow .15s;
  background-repeat:no-repeat;
  background-position:16px center;
  background-size:18px;
}
#customer_login.oxian-auth-card input.input-text:focus {
  outline:none;
  border-color:#2F7A4B;
  box-shadow:0 0 0 3px rgba(47,122,75,.14);
}
#customer_login.oxian-auth-card input#username,
#customer_login.oxian-auth-card input#reg_email {
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%237A857F' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='m3 7 9 6 9-6'/%3E%3C/svg%3E");
}
#customer_login.oxian-auth-card input#password {
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%237A857F' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='10' width='16' height='10' rx='2'/%3E%3Cpath d='M8 10V7a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E");
  padding-right:46px;
}

#customer_login.oxian-auth-card .oxian-pw-row { position:relative; }
#customer_login.oxian-auth-card .oxian-pw-toggle {
  position:absolute;
  right:6px;
  top:50%;
  transform:translateY(-50%);
  width:34px;
  height:34px;
  display:flex;
  align-items:center;
  justify-content:center;
  background:none;
  border:none;
  border-radius:999px;
  color:#7A857F;
  cursor:pointer;
  padding:0;
}
#customer_login.oxian-auth-card .oxian-pw-toggle:hover { background:#E4EFE7; color:#1E5A34; }
#customer_login.oxian-auth-card .oxian-pw-toggle.is-visible::after {
  content:"";
  position:absolute;
  left:7px; right:7px; top:50%;
  height:1.5px;
  background:currentColor;
  transform:translateY(-50%) rotate(-40deg);
}

#customer_login.oxian-auth-card .oxian-lostpw-inline {
  position:absolute;
  right:0;
  top:0;
  text-transform:none;
  letter-spacing:0;
  font-weight:500;
  font-size:13px;
}
#customer_login.oxian-auth-card .oxian-lostpw-inline a { color:#1F56A6; text-decoration:none; }
#customer_login.oxian-auth-card .oxian-lostpw-inline a:hover { text-decoration:underline; }

#customer_login.oxian-auth-card .woocommerce-form-login__rememberme {
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:14px;
  color:#4A5751;
  text-transform:none;
  letter-spacing:0;
}

#customer_login.oxian-auth-card .woocommerce-privacy-policy-text p {
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:13px;
  color:#7A857F;
  line-height:1.5;
}
#customer_login.oxian-auth-card .woocommerce-privacy-policy-text a { color:#1F56A6; }

#customer_login.oxian-auth-card .woocommerce-button,
#customer_login.oxian-auth-card button[type="submit"] {
  width:100%;
  margin-top:6px;
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:16px;
  font-weight:600;
  padding:14px 20px;
  border-radius:999px;
  background:#1E5A34;
  border:1px solid #1E5A34;
  color:#fff;
  cursor:pointer;
  transition:background .18s, border-color .18s, transform .08s;
}
#customer_login.oxian-auth-card .woocommerce-button:hover,
#customer_login.oxian-auth-card button[type="submit"]:hover {
  background:#123A22;
  border-color:#123A22;
}
#customer_login.oxian-auth-card .woocommerce-button:active,
#customer_login.oxian-auth-card button[type="submit"]:active { transform:translateY(1px); }

#customer_login.oxian-auth-card .oxian-auth-switch {
  margin:22px 0 0;
  text-align:center;
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:14px;
  color:#4A5751;
}
#customer_login.oxian-auth-card .oxian-auth-switch a {
  color:#1E5A34;
  font-weight:600;
  text-decoration:none;
}
#customer_login.oxian-auth-card .oxian-auth-switch a:hover { text-decoration:underline; }

@media (max-width:540px) {
  #customer_login.oxian-auth-card {
    margin:28px auto;
    padding:28px 22px 26px;
    border-radius:16px;
    max-width:calc(100% - 32px);
  }
}

#customer_login.oxian-auth-card form.woocommerce-form-register > p:not([class]) {
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
  font-size:13.5px;
  font-weight:400;
  color:#4A5751;
  line-height:1.5;
  margin:-6px 0 18px;
}

/* PRODUCT PAGE - remove duplicate short-description block.
   The Single Product FSE template renders the excerpt twice: once via
   WooCommerce's own .woocommerce-product-details__short-description,
   and again via a separate Post Excerpt block lower in the same column.
   Hide the redundant Post Excerpt block on single product pages. */
body.single-product .wp-block-post-excerpt {
  display: none;
}

/* ==========================================================================
   TEST PANEL - homepage assay panel, sits under the chain-of-custody strip.
   The strip above is the narrative (what we do, in order); this is the
   evidence (what gets measured, and to what specification). Deliberately set
   as a table rather than numbered cards so it does not read as a second copy
   of the 01-04 process strip. Echoes the COA Library table on purpose.
   ========================================================================== */

.oxian.oxian-panel-sec {
  background: var(--ox-white);
  border-top: 1px solid var(--ox-line);
  border-bottom: 1px solid var(--ox-line);
}

.oxian .oxian-panel-head { max-width: 36rem; }

.oxian .oxian-panel-lede {
  margin: 12px 0 0;
  font-size: 16px;
  line-height: 1.62;
  color: var(--ox-ink-soft);
}

.oxian .oxian-panel-grid {
  display: grid;
  grid-template-columns: 220px minmax(0,1fr);
  gap: 56px;
  align-items: start;
  margin-top: 44px;
}

/* Seal. A typographic device, not an illustration: the ring is set on a path
   so it stays crisp at any size and the wording can be edited as text. */
.oxian .oxian-seal-wrap { display: flex; justify-content: center; padding-top: 4px; }
.oxian .oxian-seal { position: relative; width: 200px; height: 200px; }
.oxian .oxian-seal svg { display: block; width: 100%; height: 100%; }
.oxian .oxian-seal-dash { stroke: var(--ox-sage-deep); }
.oxian .oxian-seal-hair { stroke: var(--ox-line-hi); }

.oxian .oxian-seal-ring {
  font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;
  font-size: 9.4px;
  letter-spacing: .15em;
  fill: var(--ox-graphite);
}

.oxian .oxian-seal-core {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
}

.oxian .oxian-seal-n {
  font-size: 42px;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -.02em;
  color: var(--ox-green);
}

.oxian .oxian-seal-l {
  margin-top: 7px;
  font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;
  font-size: 10px;
  line-height: 1.45;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ox-ink-soft);
}

/* Rows */
.oxian .oxian-panel-list { list-style: none; margin: 0; padding: 0; }

.oxian .oxian-panel-row {
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  align-items: center;
  gap: 20px;
  padding: 17px 0;
  border-top: 1px solid var(--ox-line);
}

.oxian .oxian-panel-row:last-child { border-bottom: 1px solid var(--ox-line); }

.oxian .oxian-panel-t {
  display: block;
  font-size: 15.5px;
  font-weight: 600;
  line-height: 1.3;
  color: var(--ox-ink);
}

.oxian .oxian-panel-m {
  display: block;
  margin-top: 4px;
  font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;
  font-size: 12px;
  color: var(--ox-graphite);
}

.oxian .oxian-panel-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 13px;
  border-radius: 999px;
  background: var(--ox-sage);
  color: var(--ox-green);
  font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .05em;
  white-space: nowrap;
}

.oxian .oxian-panel-chip svg { width: 11px; height: 11px; flex: none; }

/* The excipient ratio is reported, not passed or failed, so it does not get
   the check mark or the green. */
.oxian .oxian-panel-chip.is-neutral {
  background: rgba(19,26,22,.06);
  color: var(--ox-ink-soft);
}

/* Foot */
.oxian .oxian-panel-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 32px;
  flex-wrap: wrap;
  margin-top: 36px;
}

.oxian .oxian-panel-fine {
  margin: 0;
  max-width: 54ch;
  font-size: 12.5px;
  line-height: 1.65;
  color: var(--ox-graphite);
}

.oxian .oxian-panel-fine a { color: var(--ox-blue); }

@media (max-width: 900px) {
  .oxian .oxian-panel-grid { grid-template-columns: 1fr; gap: 30px; margin-top: 34px; }
  .oxian .oxian-seal-wrap { justify-content: flex-start; }
  .oxian .oxian-seal { width: 164px; height: 164px; }
  .oxian .oxian-seal-n { font-size: 34px; }
}

@media (max-width: 560px) {
  .oxian .oxian-panel-row { grid-template-columns: 1fr; align-items: start; gap: 11px; }
  .oxian .oxian-panel-chip { justify-self: start; }
  .oxian .oxian-panel-foot { margin-top: 28px; }
}

/* ==========================================================================
   SCROLL REVEAL
   Progressive enhancement only. Every hiding rule below is gated behind
   html.ox-motion, and that class is only ever added by the inline script in
   oxian-labs-storefront.php. So: no JavaScript, no hiding. If that script
   half-runs, its own 3s failsafe drops the class and everything appears.
   Reduced-motion visitors never get the class at all.
   The hero is deliberately not in the list, so first paint is never held back.
   ========================================================================== */

@media (prefers-reduced-motion: no-preference) {

  html.ox-motion .oxian-sec-head,
  html.ox-motion .oxian-proc > .oxian-step,
  html.ox-motion .oxian-whole-grid > *,
  html.ox-motion .oxian-legal-in,
  html.ox-motion .oxian-panel-head,
  html.ox-motion .oxian-seal-wrap,
  html.ox-motion .oxian-panel-row,
  html.ox-motion .oxian-panel-foot {
    opacity: 0;
    transform: translateY(15px);
    transition: opacity .55s cubic-bezier(.16,1,.3,1), transform .55s cubic-bezier(.16,1,.3,1);
  }

  html.ox-motion .oxian-sec-head.is-in,
  html.ox-motion .oxian-proc > .oxian-step.is-in,
  html.ox-motion .oxian-whole-grid > .is-in,
  html.ox-motion .oxian-legal-in.is-in,
  html.ox-motion .oxian-panel-head.is-in,
  html.ox-motion .oxian-seal-wrap.is-in,
  html.ox-motion .oxian-panel-row.is-in,
  html.ox-motion .oxian-panel-foot.is-in {
    opacity: 1;
    transform: none;
  }

  /* Small stagger inside the two list-like groups. Under a quarter second end
     to end - enough to read as sequence, not as a wait. */
  html.ox-motion .oxian-proc > .oxian-step:nth-child(2) { transition-delay: .07s; }
  html.ox-motion .oxian-proc > .oxian-step:nth-child(3) { transition-delay: .14s; }
  html.ox-motion .oxian-proc > .oxian-step:nth-child(4) { transition-delay: .21s; }

  html.ox-motion .oxian-panel-row:nth-child(2) { transition-delay: .05s; }
  html.ox-motion .oxian-panel-row:nth-child(3) { transition-delay: .10s; }
  html.ox-motion .oxian-panel-row:nth-child(4) { transition-delay: .15s; }
  html.ox-motion .oxian-panel-row:nth-child(5) { transition-delay: .20s; }
  html.ox-motion .oxian-panel-row:nth-child(6) { transition-delay: .25s; }
}

/* ===== OXIAN 2026 REFRESH :: STAGE 13 START (Sep 16 2026 site audit) ===== */

/* ---------- 22. light hero with the product ---------------------------------
   Replaces the dark band. The chromatogram now sits in the test panel. */

.oxian.oxian-hero {
	background:linear-gradient(180deg, #E4EFE7 0%, #EDF4EF 62%, #F7F8F6 100%);
	color:var(--ox-ink);
	padding:clamp(36px,5vw,72px) 0 clamp(36px,4.6vw,64px);
}
.oxian.oxian-hero::before { display:none; }
.oxian-hero-grid { grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr); }
.oxian-hero .oxian-h1 { color:var(--ox-ink); font-size:clamp(42px,5.6vw,76px); }
.oxian-hero .oxian-h1 em { color:var(--ox-green-mid); }
.oxian-hero .oxian-eyebrow { color:var(--ox-graphite); }
.oxian-hero .oxian-lede { color:var(--ox-ink-soft); max-width:38ch; }
.oxian-hero .oxian-btn-solid { background:var(--ox-green); border-color:var(--ox-green); color:#fff; }
.oxian-hero .oxian-btn-solid:hover,
.oxian-hero .oxian-btn-solid:focus { background:var(--ox-green-deep); border-color:var(--ox-green-deep); color:#fff; }
.oxian-hero a:focus-visible { outline-color:var(--ox-green-mid); }

.oxian .oxian-hero-visual { margin:0; justify-self:end; width:100%; max-width:440px; }
.oxian .oxian-hero-visual > a {
	display:block; overflow:hidden;
	border-radius:var(--ox-r);
	background:var(--ox-white);
	box-shadow:0 1px 2px rgba(19,52,34,.06), 0 18px 44px rgba(19,52,34,.10);
}
.oxian .oxian-hero-img {
	display:block; width:100%; height:auto; aspect-ratio:1/1; object-fit:cover;
	transition:transform .5s cubic-bezier(.16,1,.3,1);
}
.oxian .oxian-hero-visual > a:hover .oxian-hero-img { transform:scale(1.02); }
.oxian .oxian-hero-visual figcaption {
	display:flex; justify-content:space-between; align-items:baseline; gap:6px 14px; flex-wrap:wrap;
	margin-top:12px; font-size:15px;
}
.oxian .oxian-hero-visual figcaption a { color:var(--ox-ink); font-weight:600; text-decoration:none; }
.oxian .oxian-hero-visual figcaption a:hover { color:var(--ox-green-mid); }
.oxian .oxian-hero-visual figcaption span { font-family:var(--ox-mono); font-size:11.5px; letter-spacing:.03em; color:var(--ox-graphite); }
@media (max-width:900px){
	.oxian-hero-grid { grid-template-columns:1fr; gap:28px; }
	.oxian .oxian-hero-visual { justify-self:start; max-width:320px; }
}

/* the ticker follows the hero onto the light ground */
.oxian.oxian-ticker {
	background:var(--ox-white); color:var(--ox-ink-soft);
	border-top:1px solid var(--ox-line); border-bottom:1px solid var(--ox-line);
}
.oxian-ticker-track span { opacity:1; }

/* ---------- 23. chromatogram in the test panel, light version ------------- */

.oxian .oxian-panel-trace { margin-top:44px; }
.oxian .oxian-panel-trace .oxian-chroma {
	max-width:760px;
	background:var(--ox-paper);
	border:1px solid var(--ox-line);
	box-shadow:none;
}
.oxian-panel-trace .oxian-chroma .oxian-eyebrow { color:var(--ox-graphite); }
.oxian-panel-trace .oxian-gridl { stroke:rgba(19,26,22,.07); }
.oxian-panel-trace .oxian-axis { stroke:rgba(19,26,22,.22); }
.oxian-panel-trace .oxian-trace-ref { stroke:rgba(31,86,166,.38); }
.oxian-panel-trace .oxian-trace-main { stroke:var(--ox-green-mid); }
.oxian-panel-trace .oxian-trace-fill { fill:rgba(47,122,75,.10); }
.oxian-panel-trace .oxian-peakline { stroke:rgba(19,26,22,.30); }
.oxian-panel-trace .oxian-peaklab { fill:var(--ox-ink); }
.oxian-panel-trace .oxian-peaksub { fill:var(--ox-graphite); }
.oxian-panel-trace .oxian-chroma-foot { border-top-color:var(--ox-line); color:var(--ox-graphite); }
.oxian-panel-trace .oxian-chroma-foot b { color:var(--ox-ink); }
.oxian .oxian-panel-trace-note { margin-top:12px; max-width:760px; font-size:14.5px; line-height:1.55; color:var(--ox-ink-soft); }
.oxian .oxian-panel-trace-note a { color:var(--ox-blue); text-decoration:none; font-weight:500; white-space:nowrap; }
.oxian .oxian-panel-trace-note a::after { content:" \2192"; }

/* ---------- 24. catalog: the orderable product first, then "In testing" --- */

.oxian .oxian-cat.is-solo { grid-template-columns:1fr; }
.oxian .oxian-card.is-featured {
	display:grid; grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);
	gap:36px; align-items:start; padding:28px; min-height:0;
}
.oxian .oxian-card.is-featured:hover { transform:none; box-shadow:none; }
.oxian .oxian-card.is-featured .oxian-card-img img { aspect-ratio:1/1; }
.oxian .oxian-card.is-featured:hover .oxian-card-img img { transform:none; }
.oxian .oxian-card-main { display:flex; flex-direction:column; gap:14px; min-width:0; }
.oxian .oxian-card.is-featured .oxian-card-name { font-size:clamp(28px,3vw,36px); }
.oxian .oxian-card.is-featured .oxian-spec { margin-top:2px; }
.oxian .oxian-card.is-featured .oxian-card-buy { display:block; }
.oxian .oxian-card.is-featured .oxian-price { display:block; margin-bottom:14px; }
@media (max-width:820px){
	.oxian .oxian-card.is-featured { grid-template-columns:1fr; gap:20px; padding:20px; }
	.oxian .oxian-card.is-featured .oxian-card-img { max-width:300px; }
}

/* buy form inside the featured card (the homepage has no .woocommerce wrapper) */
.oxian .oxian-card form.cart { margin:0; }
.oxian .oxian-card form.cart table.variations { border:0; margin:0 0 14px; width:auto; border-collapse:collapse; background:none; }
.oxian .oxian-card form.cart table.variations tr,
.oxian .oxian-card form.cart table.variations th,
.oxian .oxian-card form.cart table.variations td { display:block; padding:0; border:0; background:none; text-align:left; }
.oxian .oxian-card form.cart table.variations label {
	display:block; margin:0 0 8px;
	font-family:var(--ox-mono); font-size:11px; font-weight:500; letter-spacing:.1em;
	text-transform:uppercase; color:var(--ox-graphite);
}
.oxian .oxian-card .single_variation_wrap .woocommerce-variation { margin:0 0 12px; font-size:15px; color:var(--ox-ink-soft); }
.oxian .oxian-card .woocommerce-variation-price .price { font-weight:600; color:var(--ox-ink); margin-right:10px; }
.oxian .oxian-card .woocommerce-variation-availability p { display:inline; margin:0; }
.oxian .oxian-card .woocommerce-variation-add-to-cart,
.oxian .oxian-card form.cart:not(.variations_form) { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.oxian .oxian-card .single_add_to_cart_button {
	font-family:var(--ox-sans); font-size:16px; font-weight:500; line-height:1.2;
	padding:13px 26px; border-radius:999px; cursor:pointer;
	background:var(--ox-green); border:1px solid var(--ox-green); color:#fff;
}
.oxian .oxian-card .single_add_to_cart_button:hover { background:var(--ox-green-deep); border-color:var(--ox-green-deep); }
.oxian .oxian-card .single_add_to_cart_button.disabled { opacity:.45; cursor:not-allowed; }
.oxian .oxian-card .added_to_cart { margin-left:4px; }

/* the "In testing" row */
.oxian .oxian-testing { margin-top:44px; }
.oxian .oxian-testing-head { display:flex; flex-direction:column; gap:6px; margin-bottom:16px; max-width:62ch; }
.oxian .oxian-testing-head h3 { font-size:22px; line-height:1.2; letter-spacing:-.015em; }
.oxian .oxian-testing-head p { font-size:15.5px; line-height:1.55; color:var(--ox-ink-soft); }
.oxian .oxian-cat.oxian-cat-testing { grid-template-columns:repeat(auto-fill,minmax(250px,1fr)); gap:10px; }
.oxian .oxian-mini {
	display:flex; gap:14px; align-items:center; padding:12px;
	background:var(--ox-white); border:1px solid var(--ox-line); border-radius:16px;
	color:var(--ox-ink); text-decoration:none;
	transition:border-color .18s, transform .22s cubic-bezier(.16,1,.3,1);
}
.oxian .oxian-mini:hover { border-color:var(--ox-line-hi); transform:translateY(-2px); }
.oxian .oxian-mini:focus-visible { outline:2px solid var(--ox-green-mid); outline-offset:2px; }
.oxian .oxian-mini-img { flex:none; width:64px; height:64px; border-radius:12px; overflow:hidden; background:var(--ox-sage); }
.oxian .oxian-mini-img img { width:100%; height:100%; object-fit:cover; }
.oxian .oxian-mini-body { display:flex; flex-direction:column; gap:2px; min-width:0; }
.oxian .oxian-mini-name { font-size:17px; font-weight:600; letter-spacing:-.01em; line-height:1.25; }
.oxian .oxian-mini-meta { font-family:var(--ox-mono); font-size:11px; line-height:1.45; color:var(--ox-graphite); }
.oxian .oxian-mini-cta { margin-top:2px; font-size:14px; font-weight:500; color:var(--ox-blue); }
.oxian .oxian-mini-cta::after { content:" \2192"; }
@media (prefers-reduced-motion: reduce){
	.oxian .oxian-mini, .oxian .oxian-hero-img { transition:none; }
	.oxian .oxian-mini:hover { transform:none; }
}

/* ---------- 25. size buttons and quantity stepper -------------------------- */

select.oxian-select-hidden {
	position:absolute !important; width:1px !important; height:1px !important;
	min-width:0 !important; padding:0 !important; border:0 !important;
	opacity:0; pointer-events:none;
}
.oxian-size-pills { display:flex; flex-wrap:wrap; gap:8px; }
.oxian-size-pill {
	display:inline-flex; align-items:center; gap:8px;
	padding:10px 18px; border-radius:999px; cursor:pointer;
	background:#fff; color:#131A16; border:1px solid rgba(19,26,22,.22);
	font-family:"IBM Plex Sans",system-ui,sans-serif; font-size:15px; font-weight:500; line-height:1.2;
	transition:background .18s, border-color .18s, color .18s;
}
.oxian-size-pill:hover { border-color:#2F7A4B; }
.oxian-size-pill.is-on { background:#1E5A34; border-color:#1E5A34; color:#fff; }
.oxian-size-pill.is-out { background:rgba(19,26,22,.04); color:#6B766F; border-style:dashed; cursor:not-allowed; }
.oxian-size-pill.is-out:hover { border-color:rgba(19,26,22,.22); }
.oxian-size-pill-note { font-family:"IBM Plex Mono",ui-monospace,monospace; font-size:10px; letter-spacing:.08em; text-transform:uppercase; }
.oxian-size-pill:focus-visible { outline:2px solid #2F7A4B; outline-offset:2px; }
.variations_form .reset_variations { display:none !important; }

.woocommerce div.product form.cart .variations tr { display:block; }
.woocommerce div.product form.cart .variations th,
.woocommerce div.product form.cart .variations td { display:block; padding:0; text-align:left; }
.woocommerce div.product form.cart .variations th label {
	margin:0 0 8px;
	font-family:"IBM Plex Mono",ui-monospace,monospace; font-size:11px; font-weight:500;
	letter-spacing:.1em; text-transform:uppercase; color:#7A857F;
}

.oxian-stepper {
	display:inline-flex !important; align-items:center; gap:2px;
	width:auto !important; float:none !important; margin:0 10px 0 0 !important;
	padding:3px; border:1px solid rgba(19,26,22,.20); border-radius:999px; background:#fff;
	vertical-align:middle;
}
.woocommerce .oxian-stepper .qty,
.oxian-stepper .qty {
	width:44px !important; min-height:0 !important; padding:8px 0 !important;
	border:0 !important; background:transparent !important; box-shadow:none !important;
	text-align:center; font-size:16px; font-weight:600; color:#131A16;
	-moz-appearance:textfield; appearance:textfield;
}
.oxian-stepper .qty::-webkit-outer-spin-button,
.oxian-stepper .qty::-webkit-inner-spin-button { -webkit-appearance:none; margin:0; }
.oxian-step-btn {
	width:38px; height:38px; padding:0; border:0; border-radius:999px; cursor:pointer;
	display:inline-flex; align-items:center; justify-content:center;
	background:#E4EFE7; color:#1E5A34; font-size:20px; line-height:1;
}
.oxian-step-btn:hover { background:#CFE3D5; }
.oxian-step-btn:focus-visible { outline:2px solid #2F7A4B; outline-offset:2px; }

/* ---------- 26. product page: order, photo, specs, description ----------- */

/* the photo stays in view while the buy column scrolls */
@media (min-width:782px){
	.single-product main .wp-block-columns > .wp-block-column:first-child > * { position:sticky; top:104px; }
}
/* phones: a smaller photo so the buy button reaches the first screen */
@media (max-width:600px){
	.single-product main .wp-block-columns.alignwide { row-gap:18px; }
	.single-product main .wp-block-columns > .wp-block-column:first-child .woocommerce-product-gallery {
		width:100% !important; max-width:210px; margin:0 !important;
	}
}

/* selected size: price and stock on one line */
.single_variation_wrap .woocommerce-variation.single_variation:not(:empty) {
	display:flex; align-items:baseline; flex-wrap:wrap; gap:4px 12px; margin:0 0 12px;
}
.single_variation_wrap .woocommerce-variation > div,
.single_variation_wrap .woocommerce-variation p { margin:0; }

/* specs as a compact two-by-two grid under the buy button */
.oxian-lot { margin:22px 0 0; }
body .oxian-lot__grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
body .oxian-lot__cell { padding:12px 14px; }
body .oxian-lot .oxian-lot__v { font-size:18px; }
body .oxian-lot .oxian-lot__n { font-size:12.5px; }
body .oxian-lot .oxian-lot__coa { margin:10px 0 8px; }

.oxian-lot__pending {
	padding:16px 18px; border-radius:12px; background:#E5EDF8;
	font-family:"IBM Plex Sans",system-ui,sans-serif; font-size:14.5px; line-height:1.55; color:#4A5751;
}
.oxian-lot__pending p { margin:0 0 8px; }
.oxian-lot__pending strong { color:#131A16; font-weight:600; }
.oxian-lot__pending a { color:#1F56A6; font-weight:500; text-decoration:none; }
.oxian-lot__pending a::after { content:" \2192"; }

.oxian-bulk-note {
	margin:16px 0 0; padding:12px 16px; border-radius:12px; background:#E4EFE7;
	font-family:"IBM Plex Sans",system-ui,sans-serif; font-size:14.5px; line-height:1.5; color:#24402F;
}
.oxian-bulk-note a { color:#1E5A34; font-weight:600; text-decoration:underline; text-underline-offset:3px; }

.woocommerce-tabs .woocommerce-Tabs-panel,
.wp-block-woocommerce-product-details .woocommerce-Tabs-panel { max-width:720px; }
.woocommerce-tabs .woocommerce-Tabs-panel p,
.wp-block-woocommerce-product-details .woocommerce-Tabs-panel p {
	margin:0 0 14px; font-size:16px; line-height:1.65; color:#4A5751;
}

/* ---------- 27. forms: research accounts and COA alerts ------------------- */

.oxian-form { font-family:"IBM Plex Sans",system-ui,sans-serif; color:#131A16; }
.oxian-form, .oxian-form *, .oxian-form-card { box-sizing:border-box; }
.oxian-form .oxian-hp { position:absolute !important; left:-9999px !important; width:1px; height:1px; overflow:hidden; }
.oxian-form-card {
	max-width:760px; padding:clamp(20px,3vw,32px);
	background:#fff; border:1px solid rgba(19,26,22,.10); border-radius:20px;
}
.oxian-form-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px 18px; }
.oxian-field { display:flex; flex-direction:column; gap:6px; margin:0; }
.oxian-field.is-wide { grid-column:1 / -1; }
.oxian-field label { font-size:14.5px; font-weight:500; color:#131A16; }
.oxian-field label span { font-weight:400; color:#5E6A64; }
.oxian-form input[type="text"],
.oxian-form input[type="email"],
.oxian-form select,
.oxian-form textarea {
	width:100%; margin:0; padding:11px 14px;
	font-family:inherit; font-size:16px; line-height:1.4; color:#131A16;
	background:#fff; border:1px solid rgba(19,26,22,.28); border-radius:12px; box-shadow:none;
}
.oxian-form textarea { min-height:110px; resize:vertical; }
.oxian-form input:focus,
.oxian-form select:focus,
.oxian-form textarea:focus { outline:2px solid #2F7A4B; outline-offset:1px; border-color:#2F7A4B; }
.oxian-help { font-size:13px; line-height:1.45; color:#5E6A64; }
.oxian-check { display:flex; align-items:flex-start; gap:10px; margin:18px 0; font-size:14.5px; line-height:1.5; color:#4A5751; cursor:pointer; }
.oxian-check input { flex:none; width:18px; height:18px; margin:2px 0 0; accent-color:#1E5A34; }
.oxian-form-submit {
	padding:13px 26px; border-radius:999px; cursor:pointer;
	font-family:"IBM Plex Sans",system-ui,sans-serif; font-size:16px; font-weight:500; line-height:1.2;
	background:#1E5A34; border:1px solid #1E5A34; color:#fff;
	transition:background .18s, border-color .18s;
}
.oxian-form-submit:hover,
.oxian-form-submit:focus { background:#123A22; border-color:#123A22; color:#fff; }
.oxian-form-submit:focus-visible { outline:2px solid #2F7A4B; outline-offset:2px; }
.oxian-form-msg { margin:0 0 16px; padding:12px 16px; border-radius:12px; font-size:15px; line-height:1.5; }
.oxian-form-msg.is-ok { background:#E4EFE7; color:#1F3F2B; }
.oxian-form-msg.is-err { background:#F8E7E3; color:#8A2E1C; }
@media (max-width:640px){
	.oxian-form-grid { grid-template-columns:1fr; }
	.oxian-form-submit { width:100%; }
}

.oxian-notify {
	margin:16px 0 0; padding:18px;
	background:#fff; border:1px solid rgba(19,26,22,.10); border-radius:16px;
}
.oxian-notify-t { margin:0; font-size:17px; font-weight:600; letter-spacing:-.01em; line-height:1.3; }
.oxian-notify-s { margin:4px 0 14px; font-size:14px; line-height:1.5; color:#5E6A64; }
.oxian-notify .oxian-check { margin:12px 0 14px; font-size:14px; }

/* ---------- 28. volume section button ------------------------------------- */

.oxian.oxian-whole .oxian-btn.oxian-btn-invert { background:var(--ox-green); border-color:var(--ox-green); color:#fff; }
.oxian.oxian-whole .oxian-btn.oxian-btn-invert:hover,
.oxian.oxian-whole .oxian-btn.oxian-btn-invert:focus { background:var(--ox-green-deep); border-color:var(--ox-green-deep); color:#fff; }

/* ---------- 29. scroll reveal: shorter, and it starts before arrival ------
   The script now fires a little before a section enters the screen, so it is
   already in place by the time anyone looks at it. */

@media (prefers-reduced-motion: no-preference) {
	html.ox-motion .oxian-sec-head,
	html.ox-motion .oxian-proc > .oxian-step,
	html.ox-motion .oxian-whole-grid > *,
	html.ox-motion .oxian-legal-in,
	html.ox-motion .oxian-panel-head,
	html.ox-motion .oxian-seal-wrap,
	html.ox-motion .oxian-panel-row,
	html.ox-motion .oxian-panel-foot {
		transform:translateY(10px);
		transition-duration:.3s, .3s;
	}
	html.ox-motion .oxian-sec-head.is-in,
	html.ox-motion .oxian-proc > .oxian-step.is-in,
	html.ox-motion .oxian-whole-grid > .is-in,
	html.ox-motion .oxian-legal-in.is-in,
	html.ox-motion .oxian-panel-head.is-in,
	html.ox-motion .oxian-seal-wrap.is-in,
	html.ox-motion .oxian-panel-row.is-in,
	html.ox-motion .oxian-panel-foot.is-in { transform:none; }
}

/* ---------- 30. catalog page ---------------------------------------------- */

.woocommerce-result-count,
.wc-block-product-results-count,
.wc-block-product-results-count p {
	font-family:"IBM Plex Sans",system-ui,sans-serif !important;
	font-size:14px !important; letter-spacing:0 !important; text-transform:none !important;
	color:#7A857F;
}

/* ---------- 31. phone header: menu button sits with the icons ------------ */

@media (max-width:599px){
	header.wp-block-template-part .wp-block-group.alignwide { justify-content:flex-start !important; gap:14px; }
	header.wp-block-template-part .wp-block-group.alignwide > .wp-block-navigation { order:3; }
	header.wp-block-template-part .wp-block-group.alignwide > .wp-block-group:last-child { order:2; margin-left:auto; }
}

/* ---------- 32. footer contact line --------------------------------------- */

.oxian-footer .oxian-footer-contact { margin-top:14px; font-size:14.5px; line-height:1.6; color:#4A5751; }
.oxian-footer .oxian-footer-contact a { color:#131A16; font-weight:500; }

/* ---------- 33. one typeface ---------------------------------------------
   The theme's default Manrope was still set on body and headings, so the
   browser downloaded it for stray text. IBM Plex everywhere. */

body,
body button, body input, body select, body textarea,
body h1, body h2, body h3, body h4, body h5, body h6 {
	font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;
}

/* ---------- 34. COA Library: compounds in testing ------------------------- */

body.page-id-64 .ox-testing-table td:last-child { color:#7A857F; }

/* ===== OXIAN 2026 REFRESH :: STAGE 13 END ===== */
