/* ============================================================================
   TVB BENCH PAPER v1.0 (2026-07-31) — the light-accent system, one shot.
   ----------------------------------------------------------------------------
   Design law: the site is a dark lab bench; light exists ONLY as paper objects
   (certificates, documents) placed on it — never as a field. Every zone below
   is a "paper island": it re-declares the theme tokens locally (the exact
   inverse of the dark-island trick in the retired light skin), so every
   tokenised descendant flips correctly with no per-class enumeration.

   Material spec (one material, used everywhere):
     paper field  #f6fafc   large surfaces (homepage band, rows inside cards)
     cert stock   #ffffff   the objects themselves (cards, sheets, panels)
     ink          #0b1b30 headings / #22313f body / rgba(11,27,48,.70) meta
     on-paper teal #0a6b78  ALL accent text on paper (bright cyan is BANNED as
                            text on white — borders and hover fills only)
     hairline     #e3edf4
     hover fill   #17c4da with #052330 ink
   Shadows: navy-tint ON paper; black-cast for the sheet's shadow on the bench.

   DEPLOY NOTE: this file path is historically assets/css/tvb-light.css — the
   retired light skin was repurposed (wp-admin editor cannot create new files);
   the old skin is preserved in the repo under docs/retired/. In the repo this
   file is assets/css/tvb-paper.css.
   KILL SWITCH: the single wp_enqueue_style('tvb-paper', …) block in
   functions.php — comment it out and the all-dark site returns.
   ========================================================================== */

/* ---------- 0. The paper-island token flip (shared by every zone) ---------- */
.tvb-coa-sec,
body.page-template-template-coa-reports .coalib-card,
.trust-strip + .section,
.woocommerce ul.products li.product,
body.page-template-template-privacy .prose,
body.page-template-template-terms .tvb-legal-doc,
body.page-template-template-disclaimer .prose,
body.page-template-template-shipping-policy .prose,
body.page-template-template-returns .prose{
  --text:#0b1b30;
  --text-2:rgba(11,27,48,.78);
  --text-3:rgba(11,27,48,.70);
  --text-4:rgba(11,27,48,.48);
  --line:#e3edf4;
  --line-strong:#d3e2ec;
  --surface:#ffffff;
  --surface-2:#f6fafc;
  --cyan:#0a6b78;                       /* accent TEXT on paper */
  --cyan-soft:rgba(23,196,218,.08);
  --cyan-line:rgba(23,196,218,.45);
  --glow-cyan:none;                     /* no cyan glows on or near paper */
  color:var(--text-2);
}

/* ---------- 1. The Certificate — product-page COA panel ---------- */
.tvb-coa-sec{
  background:#ffffff;
  border:1px solid #e3edf4;
  box-shadow:0 14px 44px -14px rgba(11,27,48,.16), 0 24px 60px -20px rgba(0,0,0,.5);
}
.tvb-coa-sec h2{color:#0b1b30}
.tvb-coa-sec .coalib-row{background:#f6fafc;border:1px solid #e3edf4}
.tvb-coa-sec .cr-batch{color:#22313f}
.tvb-coa-sec .coalib-chip{border-color:rgba(23,196,218,.45);color:#0a6b78;background:rgba(23,196,218,.06)}
.tvb-coa-sec .coalib-pdf{border:1px solid rgba(23,196,218,.45);color:#0a6b78;background:transparent}
.tvb-coa-sec .coalib-pdf:hover{background:#17c4da;color:#052330;border-color:#17c4da}
.tvb-coa-sec .tcs-empty{color:rgba(11,27,48,.62)}

/* ---------- 2. The Library — COA Library cards become certificates ---------- */
body.page-template-template-coa-reports .coalib-card{
  background:#ffffff;
  border:1px solid #e3edf4;
  box-shadow:0 6px 18px rgba(11,27,48,.06);
}
body.page-template-template-coa-reports .coalib-card:hover{
  border-color:rgba(23,196,218,.45);
  box-shadow:0 18px 50px -16px rgba(11,27,48,.2);
}
body.page-template-template-coa-reports .coalib-card :is(h2,h3,h4){color:#0b1b30}
body.page-template-template-coa-reports .coalib-badge{
  border-color:rgba(23,196,218,.45);color:#0a6b78;background:rgba(23,196,218,.06);
}
body.page-template-template-coa-reports .coalib-badge.none{
  border-color:#d3e2ec;color:rgba(11,27,48,.48);background:transparent;
}
body.page-template-template-coa-reports .coalib-view{
  border:1px solid rgba(23,196,218,.45);color:#0a6b78;background:transparent;
}
body.page-template-template-coa-reports .coalib-view:hover{
  background:#17c4da;color:#052330;border-color:#17c4da;
}

/* ---------- 3. The Spread — homepage standards paper band ---------- */
.trust-strip + .section{
  background-image:
    url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' fill='%230b1b30' opacity='0.04'/%3E%3C/svg%3E"),
    linear-gradient(rgba(11,27,48,.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(11,27,48,.05) 1px,transparent 1px),
    linear-gradient(#f6fafc,#f6fafc);
  background-size:auto,56px 56px,56px 56px,auto;
  border-top:1px solid #e3edf4;
  border-bottom:1px solid #e3edf4;
}
.trust-strip + .section :is(h2,h3,h4){color:#0b1b30}
.trust-strip + .section .card{
  background:#ffffff;
  border:1px solid #e3edf4;
  box-shadow:0 6px 18px rgba(11,27,48,.06);
}
.trust-strip + .section .card:hover{
  border-color:rgba(23,196,218,.45);
  box-shadow:0 14px 44px -14px rgba(11,27,48,.16);
}
/* out-specifies the a11y colour override at tvb.css:378 */
.trust-strip + .section .card p{color:rgba(11,27,48,.70)}
.trust-strip + .section .card-ic{
  background:rgba(23,196,218,.08);color:#0a6b78;border-color:rgba(23,196,218,.38);
}

/* ---------- 4. The Documents — legal pages as paper sheets ----------
   Scoped to template body classes. NEVER a bare .prose selector — the
   index.php fallback wraps cart/checkout/account in .prose and an unscoped
   rule would repaint live checkout.                                     */
body.page-template-template-privacy .prose,
body.page-template-template-terms .tvb-legal-doc,
body.page-template-template-disclaimer .prose,
body.page-template-template-shipping-policy .prose,
body.page-template-template-returns .prose{
  background:#ffffff;
  border:1px solid #e3edf4;
  border-radius:4px;
  padding:clamp(32px,5vw,56px);
  box-shadow:0 24px 60px -20px rgba(0,0,0,.55);
}
body.page-template-template-privacy .prose :is(h2,h3),
body.page-template-template-terms .tvb-legal-doc :is(h2,h3),
body.page-template-template-disclaimer .prose :is(h2,h3),
body.page-template-template-shipping-policy .prose :is(h2,h3),
body.page-template-template-returns .prose :is(h2,h3){color:#0b1b30}
body.page-template-template-privacy .prose a,
body.page-template-template-terms .tvb-legal-doc a,
body.page-template-template-disclaimer .prose a,
body.page-template-template-shipping-policy .prose a,
body.page-template-template-returns .prose a{color:#0a6b78}
body.page-template-template-terms .tvb-legal-hr{border-color:#e3edf4;background:#e3edf4}
body.page-template-template-terms .tvb-legal-doc .tvb-legal-meta{color:rgba(11,27,48,.70)}

/* ---------- 5. The Catalog — shop cards become certificate stock ---------- */
.woocommerce ul.products li.product{
  background:#ffffff;
  border-color:#e3edf4;
  box-shadow:0 6px 18px rgba(11,27,48,.06);
}
.woocommerce ul.products li.product:hover{
  border-color:rgba(23,196,218,.45);
  box-shadow:0 18px 50px -16px rgba(11,27,48,.2);
}
.woocommerce ul.products li.product .woocommerce-loop-product__title{color:#0b1b30}
.woocommerce ul.products li.product .price{color:#0a6b78}
.woocommerce ul.products li.product .button:hover,
.woocommerce ul.products li.product .tvb-card-coa:hover{
  background:#17c4da;color:#052330;border-color:#17c4da;
}
/* the dark-theme placeholder was inverted-to-white; un-invert it for paper */
.woocommerce ul.products li.product a img.woocommerce-placeholder{filter:opacity(.25)}

/* ---------- 6. Post-audit hotfixes (2026-07-31, workflow wf_2bcf3f8e-d2a) ----------
   Three blockers + follow-ups found by the adversarial audit AFTER the one-shot
   ship. All colours-only.                                                      */
/* BLOCKER: the RUO note inside the certificate is pinned white by tvb-woo.css:489
   (this rule existed in Phase 1 and was lost in the consolidation - restored). */
.tvb-coa-sec .tcs-note{color:rgba(11,27,48,.62)}
/* BLOCKER: COA row public-notes carry an INLINE white colour from class-coa.php;
   inline styles beat any stylesheet, hence the !important hammer.              */
.tvb-coa-sec .coalib-row div[style]{color:rgba(11,27,48,.6)!important}
/* BLOCKER: chips overlaying the DARK product photo must keep bright cyan - the
   flipped on-paper teal was landing on a hardcoded dark chip fill.             */
.woocommerce ul.products li.product .tvb-stock--in{color:#17c4da;border-color:rgba(23,196,218,.45)}
.woocommerce ul.products li.product .onsale{background:#17c4da;color:#052330}
/* cursor glow + add-to-cart halo: bright-cyan glows are banned near paper      */
.trust-strip + .section .card>.tvbm-glow,
body.page-template-template-coa-reports .coalib-card>.tvbm-glow{background:radial-gradient(240px circle at var(--mx,50%) var(--my,50%),rgba(11,27,48,.05),transparent 65%)}
.woocommerce ul.products li.product .button:hover{box-shadow:0 10px 30px -12px rgba(11,27,48,.25)}
.woocommerce ul.products li.product .button:active{box-shadow:0 0 0 4px rgba(23,196,218,.25)}
/* selected text inside paper zones: the flipped --cyan made ::selection
   dark-on-dark (tvb.css:40 pins the ink); bright fill + dark ink instead.      */
.tvb-coa-sec ::selection,
body.page-template-template-coa-reports .coalib-card ::selection,
.trust-strip + .section ::selection,
.woocommerce ul.products li.product ::selection,
body.page-template-template-privacy .prose ::selection,
body.page-template-template-terms .tvb-legal-doc ::selection,
body.page-template-template-disclaimer .prose ::selection,
body.page-template-template-shipping-policy .prose ::selection,
body.page-template-template-returns .prose ::selection{background:#17c4da;color:#052330}

/* Out-of-stock cards: the stock treatment fades the image to 45% opacity
   (tvb-woo.css:393) - against the white card that reads as a white mask.
   Owner call 2026-07-31: the OUT OF STOCK chip says it clearly enough;
   show the product photo at full strength. */
.woocommerce ul.products li.product.outofstock a img{opacity:1;filter:none}

/* ============================================================================
   8. THE SANDWICH (2026-07-31, owner: "keep the current color as the head and
   footer of each page then make the middle white")
   ----------------------------------------------------------------------------
   Dark frame, white reading surface. Adapted from the retired light skin
   (docs/retired/) with today's learnings: the frame stays the CURRENT
   near-black (not July navy), the nav header stays dark glass, accent text on
   white is BOLD dark teal (#085e6b, owner ask), and checkout/cart/account are
   excluded at the body level - they cannot flip. Owner approved from live
   in-browser previews; "push it for now if it looks bad ill revert it."
   ========================================================================== */

/* ---------- 8a. Global flip: the middle becomes paper ---------- */
:root{
  --bg:#ffffff;
  --bg-raise:#f6fafc;
  --surface:#ffffff;
  --surface-2:#eef5f9;
  --line:#e3edf4;
  --line-strong:rgba(11,27,48,.18);
  --text:#22313f;
  --text-2:rgba(11,27,48,.72);
  --text-3:rgba(11,27,48,.55);
  --text-4:rgba(11,27,48,.38);
  --cyan:#17c4da;
  --cyan-soft:rgba(23,196,218,.10);
  --cyan-line:rgba(23,196,218,.38);
  --cyan-glow:rgba(23,196,218,.20);
  --shadow-1:0 10px 30px rgba(11,27,48,.08);
  --glow-cyan:0 0 0 1px var(--cyan-line),0 8px 40px -8px var(--cyan-glow);
}
body{
  color:var(--text);
  /* Texture #24 Halftone Fade (owner pick 2026-08-02, replacing #21): navy
     dot matrix that dissolves and returns on a 1500px cycle down the page -
     a single top-to-bottom fade would hide all dots behind the dark hero. */
  background:
    linear-gradient(180deg, rgba(255,255,255,0) 0, rgba(255,255,255,.93) 46%, rgba(255,255,255,.93) 54%, rgba(255,255,255,0) 100%),
    radial-gradient(rgba(11,27,48,.16) 1px, transparent 1.4px),
    linear-gradient(180deg,#fbfdfe 0%,#ffffff 32%,#ffffff 100%);
  background-size:100% 1500px,22px 22px,auto;
  background-repeat:repeat-y,repeat,repeat;
  --cyan:#085e6b;
}
h1,h2,h3,h4{color:#0b1b30}
.tvb-bn :is(h1,h2,h3,h4){color:var(--tvb-bn-text)}
::selection{background:#17c4da;color:#052330}
.overline{font-weight:700}
.btn-link{font-weight:700}

/* ---------- 8b. THE EXCLUSION: checkout/cart/account stay the dark site ---- */
body.woocommerce-checkout,body.woocommerce-cart,body.woocommerce-account{
  --bg:#05050a;--bg-raise:#0a0a12;--surface:#0d0d15;--surface-2:#12121c;
  --line:rgba(255,255,255,.07);--line-strong:rgba(255,255,255,.14);
  --text:#f4f6f8;--text-2:rgba(255,255,255,.66);--text-3:rgba(255,255,255,.42);--text-4:rgba(255,255,255,.28);
  --cyan:#00c9c8;--cyan-soft:rgba(0,201,200,.12);--cyan-line:rgba(0,201,200,.32);--cyan-glow:rgba(0,201,200,.22);
  --shadow-1:0 10px 30px rgba(0,0,0,.45);
  --glow-cyan:0 0 0 1px var(--cyan-line),0 8px 40px -8px var(--cyan-glow);
  background:#05050a;color:var(--text);
}
body.woocommerce-checkout :is(h1,h2,h3,h4),
body.woocommerce-cart :is(h1,h2,h3,h4),
body.woocommerce-account :is(h1,h2,h3,h4){color:var(--text)}

/* ---------- 8c. The dark frame: islands keep light-on-dark ---------- */
.site-header,.page-head,.shop-head,
.hero,.topbar,.site-footer,.cta-band,.gate-brand-panel,.badge-float,.vial-card,.gate-card,
.mobile-overlay,.mobile-menu,.partner-card,.partner-banner{
  --text:#f4f6f8;
  --text-2:rgba(255,255,255,.72);
  --text-3:rgba(255,255,255,.55);
  --text-4:rgba(255,255,255,.38);
  --line:rgba(255,255,255,.09);
  --line-strong:rgba(255,255,255,.22);
  --surface:rgba(10,10,18,.6);
  --surface-2:rgba(10,10,18,.8);
  --cyan:#3ee6f0;
  --cyan-soft:rgba(62,230,240,.12);
  --cyan-line:rgba(62,230,240,.35);
  color:var(--text-2);
}
.hero :is(h1,h2,h3,h4),.cta-band :is(h1,h2,h3,h4),.site-footer :is(h4),
.badge-float :is(h1,h2,h3,h4),.vial-card :is(h1,h2,h3,h4),.gate-brand-panel :is(h1,h2,h3,h4),
.page-head :is(h1,h2),.shop-head h1{color:var(--text)}
.site-header{background:linear-gradient(rgba(5,5,10,.9),rgba(5,5,10,.78));box-shadow:0 1px 0 0 rgba(255,255,255,.06)}
.site-header.is-scrolled{background:rgba(5,5,10,.88)}
html.tvb-js .site-header.is-scrolled{background:rgba(5,5,10,.88);box-shadow:0 1px 0 0 rgba(62,230,240,.2),0 14px 40px -22px rgba(0,0,0,.6)}
.hero{
  background-image:
    url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E"),
    radial-gradient(1100px 520px at 50% -30%,rgba(62,230,240,.06),transparent 72%),
    linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(135deg,#05050a 0%,#070a12 55%,#061019 100%);
  background-size:auto,auto,56px 56px,56px 56px,auto;
}
.cta-band{background:linear-gradient(135deg,#05050a,#0b1b30 60%,#061019)}
.site-footer{background:#050508}
.gate-brand-panel{background:#07070d}
.page-head{
  background-image:
    url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E"),
    linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(180deg,#05050a,#0b0b13);
  background-size:auto,56px 56px,56px 56px,auto;
}
.shop-head{position:relative}
.shop-head::before{
  content:"";position:absolute;top:0;bottom:0;left:-100vmax;right:-100vmax;
  z-index:0;pointer-events:none;
  background-image:
    linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px),
    linear-gradient(180deg,#05050a,#0b0b13);
  background-size:56px 56px,56px 56px,auto;
}
.shop-head>*{position:relative;z-index:1}

/* ---------- 8d. The /welcome signature: solid cyan trust band ---------- */
.trust-strip{
  background:linear-gradient(90deg,#14b8cf,#3ee6f0);
  --text:#05283a; --text-2:rgba(5,40,58,.85); --text-3:rgba(5,40,58,.75); --text-4:rgba(5,40,58,.6);
  --line:rgba(5,40,58,.15); --line-strong:rgba(5,40,58,.25); --cyan:#05283a;
  color:#05283a;
}

/* ---------- 8e. Buttons: gradient cyan + deep ink (checkout untouched) ---------- */
.btn-primary,
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce a.button.alt,
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce button.button.alt,
.woocommerce div.product form.cart .button,
.woocommerce div.product form.cart .single_add_to_cart_button{
  background:linear-gradient(135deg,#3ee6f0,#17c4da);color:#052330;
}
.btn-primary:hover{
  background:linear-gradient(135deg,#3ee6f0,#17c4da);color:#052330;
  box-shadow:0 0 0 1px rgba(23,196,218,.4),0 14px 48px -10px rgba(23,196,218,.5);
}
.woocommerce div.product form.cart .single_add_to_cart_button:hover{
  background:#3ee6f0;box-shadow:0 12px 34px -12px rgba(23,196,218,.5);
}
.cart-count{color:#052330}
.woocommerce nav.woocommerce-pagination ul li span.current{color:#052330}
.skip-link{color:#052330}

/* ---------- 8f. Cards & panels on the white middle ---------- */
.card{box-shadow:0 6px 18px rgba(11,27,48,.05)}
.card p{color:rgba(11,27,48,.62)}
.card:hover{box-shadow:0 14px 44px -14px rgba(11,27,48,.16),0 0 0 1px var(--cyan-soft)}
.woocommerce div.product div.images{background:#f6fafc}
.woocommerce-no-products-found .woocommerce-info{background:rgba(11,27,48,.03)}

/* ---------- 8g. Forms on the white middle (checkout scoped OUT) ---------- */
.input,select.input,textarea.input,
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce form .form-row input.input-text,
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce form .form-row textarea,
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce form .form-row select,
.woocommerce div.product form.cart .quantity .qty,
.tvb-cat-search input[type=search]{background:rgba(11,27,48,.03)}
.input:focus,
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce form .form-row input.input-text:focus,
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce form .form-row textarea:focus{background:rgba(23,196,218,.05)}
.gate-google{background:rgba(11,27,48,.04)}
.woocommerce-ordering select{
  background-color:rgba(11,27,48,.03);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23085e6b' stroke-width='1.5'/%3E%3C/svg%3E");
}
.woocommerce div.product form.cart .variations select{
  background-color:rgba(11,27,48,.03);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23085e6b' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
}

/* ---------- 8h. Notices & states on white (checkout scoped OUT) ---------- */
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce-error{background:#fdf1f1;border-color:rgba(220,38,38,.35);color:#8f1d1d}
body:not(.woocommerce-checkout):not(.woocommerce-cart) .woocommerce-message{background:#edfaf4;border-color:rgba(12,138,88,.35);color:#0b6b45}
.woocommerce div.product .stock.out-of-stock{color:#c22727}
.woocommerce div.product .stock.in-stock{color:#0c8a58}
.gate-error{background:#fdf1f1;border-color:rgba(220,38,38,.4);color:#8f1d1d}
div.form-status.is-err{color:#c22727}
div.form-status.is-ok{color:#0c8a58}
form div.form-status a{color:#085e6b}
.compliance p{color:rgba(11,27,48,.6)}
.compliance p b{color:#8f1d1d}
.compliance{border-top-color:rgba(220,38,38,.3);border-bottom-color:rgba(220,38,38,.3)}
html .coalib-toolbar input,
html .coalib-toolbar select{background:rgba(11,27,48,.03);border-color:rgba(11,27,48,.18);color:#22313f}
html .coalib-toolbar input::placeholder{color:rgba(11,27,48,.4)}
html .coalib-empty{color:rgba(11,27,48,.55);border-color:rgba(11,27,48,.22)}
html .coalib-note{color:rgba(11,27,48,.45)}

/* ---------- 8i. Motion layer + hero islands, light-tuned ---------- */
#tvbm-progress{background:linear-gradient(90deg,#0b1b30 0%,#17c4da 100%)}
.tvbm-blob.b1{background:radial-gradient(circle,rgba(23,196,218,.55),transparent 62%)}
.tvbm-blob.b2{background:radial-gradient(circle,rgba(20,70,180,.4),transparent 62%)}
.tvbm-sheen{background:linear-gradient(105deg,transparent 0%,rgba(255,255,255,.55) 45%,rgba(23,196,218,.18) 55%,transparent 100%)}
.tvbm-glow{background:radial-gradient(240px circle at var(--mx,50%) var(--my,50%),rgba(23,196,218,.12),transparent 65%)}
html.tvb-js .cta-band::after{background-image:linear-gradient(115deg,rgba(62,230,240,0) 0%,rgba(62,230,240,.06) 38%,rgba(20,70,180,.05) 62%,rgba(62,230,240,0) 100%)}
.orb-1{background:radial-gradient(circle,rgba(23,196,218,.10),transparent 65%)}
.orb-2{background:radial-gradient(circle,rgba(20,70,180,.07),transparent 65%)}
.vial-img{filter:drop-shadow(0 30px 60px rgba(11,27,48,.35)) drop-shadow(0 0 34px rgba(62,230,240,.14))}
.vial-halo{background:radial-gradient(circle,rgba(62,230,240,.14),transparent 60%)}

/* ---------- 8j. Tracking widget becomes a paper card (2026-08-01) ----------
   tvb-shipping-suite tvb-tracking.css hardcodes its own dark slate palette -
   an alien dark object on the white middle. Colours only, fully scoped. */
html .tvb-tracking{color:#22313f}
html .tvb-tracking__card{background:#ffffff;border:1px solid #e3edf4;box-shadow:0 14px 44px -14px rgba(11,27,48,.16)}
html .tvb-tracking__title{color:#0b1b30}
html .tvb-tracking__sub{color:rgba(11,27,48,.7)}
html .tvb-tracking__error{background:#fdf1f1;border-color:rgba(220,38,38,.35);color:#8f1d1d}
html .tvb-tracking__label{color:rgba(11,27,48,.6)}
html .tvb-tracking__input{background:rgba(11,27,48,.03);border-color:#d3e2ec;color:#22313f}
html .tvb-tracking__input:focus{border-color:#085e6b}
html .tvb-tracking__btn{background:linear-gradient(135deg,#3ee6f0,#17c4da);color:#052330}
html .tvb-tracking__btn:hover{background:#3ee6f0}
html .tvb-tracking__items{border-top-color:#e3edf4}
html .tvb-tracking__items li{border-bottom-color:#e3edf4}
html .tvb-tracking__item-qty{color:rgba(11,27,48,.55)}
html .tvb-tracking__meta{color:rgba(11,27,48,.7)}
html .tvb-tracking__meta strong{color:#0b1b30}
html .tvb-tracking__link{color:#085e6b}
html .tvb-tracking__link:hover{color:#0a7d8f}
html .tvb-tracking__step::before{background:rgba(11,27,48,.15)}
html .tvb-tracking__dot{background:#f6fafc;border-color:rgba(11,27,48,.25)}
html .tvb-tracking__step-label{color:rgba(11,27,48,.5)}
html .tvb-tracking__step-time{color:rgba(11,27,48,.45)}
html .tvb-tracking__step--done .tvb-tracking__dot{background:#17c4da;border-color:#17c4da}
html .tvb-tracking__step--done .tvb-tracking__step-label{color:#0b1b30}
html .tvb-tracking__step--done .tvb-tracking__step-time,
html .tvb-tracking__step--current .tvb-tracking__step-time{color:rgba(11,27,48,.6)}
html .tvb-tracking__step--done::before{background:rgba(23,196,218,.45)}
html .tvb-tracking__step--current .tvb-tracking__dot{background:#ffffff;border-color:#17c4da}
html .tvb-tracking__step--current .tvb-tracking__step-label{color:#085e6b}

/* ---------- 8k. Contrast-audit fixes (2026-08-01) ----------
   Programmatic sweep: text colour vs real rendered background, every page
   template; these failed (worst 1.03:1 = literally invisible). */
.tvb-ph-card{
  --text:#f4f6f8;--text-2:rgba(255,255,255,.72);--text-3:rgba(255,255,255,.55);
  --text-4:rgba(255,255,255,.38);--line:rgba(255,255,255,.09);--line-strong:rgba(255,255,255,.22);
  --surface:rgba(10,10,18,.6);--surface-2:rgba(10,10,18,.8);
  --cyan:#3ee6f0;--cyan-soft:rgba(62,230,240,.12);--cyan-line:rgba(62,230,240,.35);
  color:var(--text-2);
}
.tvb-ph-card :is(h1,h2,h3,h4){color:var(--text)}
html .woocommerce div.product p.stock.in-stock{color:#0c8a58}
html .woocommerce div.product p.stock.out-of-stock{color:#c22727}
.woocommerce div.product .woocommerce-tabs ul.tabs li a{color:#085e6b}
.woocommerce div.product .woocommerce-tabs ul.tabs li.active a{color:#0b1b30}
html .coalib-toolbar .coalib-pdf{color:#085e6b;border-color:rgba(23,196,218,.45)}
html .coalib-toolbar .coalib-pdf:hover{background:#17c4da;color:#052330;border-color:#17c4da}
.skip-link{background:#0b1b30;color:#ffffff}

/* ---------- 8l. COA detail panel becomes a certificate (2026-08-02) ----------
   The single-product COA view (where every QR scan lands) kept its hardcoded
   #0d0d15 panel while the token flip turned headings navy: the product name
   rendered #0b1b30 on near-black, i.e. invisible. Owner reported it from a
   phone scan. The COA shortcode prints in-body styles AFTER this sheet, so
   every rule is html-prefixed to win. */
html .coalib-detail{
  background:#ffffff;
  border:1px solid #e3edf4;
  box-shadow:0 14px 44px -14px rgba(11,27,48,.16), 0 24px 60px -20px rgba(0,0,0,.5);
}
html .coalib-detail,
html .coalib-detail .coalib-dhead{ color:#22313f; }
html .coalib-detail :is(h1,h2,h3,h4){ color:#0b1b30; }
html .coalib-detail .coalib-dhead{ border-bottom-color:#e3edf4; }
html .coalib-detail .coalib-group{ color:#085e6b; }
html .coalib-detail .coalib-row{ background:#f6fafc; border:1px solid #e3edf4; }
html .coalib-detail .cr-batch{ color:#22313f; }
html .coalib-detail .cr-meta{ color:rgba(11,27,48,.7); }
html .coalib-detail .coalib-chip{ border-color:rgba(23,196,218,.45); color:#085e6b; background:rgba(23,196,218,.06); }
html .coalib-detail .coalib-pdf{ border:1px solid rgba(23,196,218,.45); color:#085e6b; background:transparent; }
html .coalib-detail .coalib-pdf:hover{ background:#17c4da; color:#052330; border-color:#17c4da; }
html .coalib-detail .coalib-empty{ color:rgba(11,27,48,.62); border-color:rgba(11,27,48,.22); }
html .coalib-note{ color:rgba(11,27,48,.62); }

/* ---------- HOTFIX 2026-08-03: size dropdown was white-on-white ----------
   A dark-theme rule pins light ink (#eef4fb) on product form selects; the
   sandwich lightened the fill but never re-inked the text. html-prefixed to
   out-specify regardless of load order. */
html .woocommerce div.product form.cart select,
html .woocommerce div.product form.cart .variations select{color:#22313f}
html .woocommerce div.product form.cart select option{color:#22313f;background:#ffffff}

/* ---------- 8m. Readability audit fixes (2026-08-03) ----------
   From the walker v3 sweep (adds selects/inputs the old walker missed). */
/* tvb-radius pins tab ink with !important - matched per the file rule */
html .woocommerce div.product .woocommerce-tabs ul.tabs li a{color:#085e6b!important}
html .woocommerce div.product .woocommerce-tabs ul.tabs li.active a{color:#0b1b30!important}
html .woocommerce div.product form.cart .reset_variations{color:#085e6b}
html .coalib-back{color:#085e6b;font-weight:700}

/* ---------- 8n. Bulk-tier + attributes tables (2026-08-03, owner report) ----
   tvb-radius pins rgba(10,21,36,.55) fills + light ink on .tvb-tiers and the
   product-attributes table - a translucent dark wash that reads as "grayed
   out / low opacity" on the white page. Paper rate-card instead. */
html .tvb-tiers,
html .woocommerce table.woocommerce-product-attributes{background:#ffffff;border:1px solid rgba(23,196,218,.45)}
html .tvb-tiers th,
html .woocommerce table.woocommerce-product-attributes th{background:rgba(23,196,218,.10);color:#085e6b}
html .tvb-tiers td,
html .woocommerce table.woocommerce-product-attributes td{color:#22313f;border-top:1px solid #e3edf4}
html .tvb-tiers tr td:last-child{color:#085e6b;font-weight:700}
html .tvb-tiers caption{color:rgba(11,27,48,.6)}

/* ---------- 8o. COA-request QR landing (page 504) ----------
   The page guests land on from printed QR codes when a COA is not published
   online. Same certificate material as every other document. */
body.page-id-504 .prose{
  --text:#0b1b30;--text-2:rgba(11,27,48,.78);--text-3:rgba(11,27,48,.70);
  --line:#e3edf4;--surface:#ffffff;--cyan:#0a6b78;
  background:#ffffff;border:1px solid #e3edf4;border-radius:4px;
  padding:clamp(32px,5vw,56px);
  box-shadow:0 24px 60px -20px rgba(0,0,0,.55);
  color:rgba(11,27,48,.78);
}
body.page-id-504 .prose .cq-lead{color:#0b1b30;font-weight:700;font-size:1.05rem}
body.page-id-504 .prose a{color:#0a6b78;font-weight:700}
body.page-id-504 .prose .cq-ruo{color:rgba(11,27,48,.62);font-size:.85rem;border-top:1px solid #e3edf4;padding-top:14px;margin-top:18px}
body.page-id-504 .prose .cq-thanks{color:rgba(11,27,48,.7)}


/* ============ §8p — NEW! badge (4.31.0) ============
   Green chip on catalog cards, printed by tvb_loop_new_badge() in
   functions.php for any product published within the last 30 days.
   Anatomy mirrors the .onsale chip; --ok is the theme's green token. */
.woocommerce ul.products li.product .tvb-new{
  position:absolute;top:12px;left:12px;z-index:2;
  background:var(--ok,#34d399);color:#001615;border-radius:var(--tvb-r-xs,8px);
  font-family:var(--font-mono);font-size:9px;letter-spacing:.12em;text-transform:uppercase;
  padding:5px 9px;line-height:1;margin:0}
/* Sale! owns the corner when present — NEW! sits beside it */
.woocommerce ul.products li.product .onsale ~ .tvb-new{left:74px}


/* ============ §8q — mobile menu readability (4.31.1) ============
   The dropdown panel is part of the dark frame (hangs from the header) but
   was missing from the §8c zone list, so §8a paper ink painted its links
   dark-navy on the near-black panel. §8c now includes .mobile-menu; these
   rules additionally brighten the links past the stock 55% white. */
html body .mobile-menu .nav-link{color:rgba(255,255,255,.88)}
html body .mobile-menu .nav-link:hover{color:#ffffff}
html body .mobile-menu .nav-link.is-active{color:#3ee6f0}


/* ============ §8r — product-page Sale! chip (4.31.2) ============
   Woo core's stock round olive .onsale badge survived on single product
   pages (only the loop chip was ever themed). Match the catalog chip:
   cyan, mono, dark ink, top-left of the gallery. */
html .woocommerce div.product span.onsale{
  position:absolute;top:12px;left:12px;right:auto;margin:0;z-index:9;
  min-width:0;min-height:0;line-height:1;padding:6px 10px;
  background:#17c4da;color:#052330;border-radius:var(--tvb-r-xs,8px);
  font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
}
