/*
Theme Name: GenSelect Research
Theme URI: https://genselectresearch.com
Author: GENSR Holdings LLC
Author URI: https://genselectresearch.com
Description: Custom dark luxe pharma theme for General Select Research. Features dark navy + gold accent design with Barlow Condensed + Poppins typography. WooCommerce compatible.
Version: 2.8.2
Requires at least: 6.0
Tested up to: 6.5
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: genselect
Tags: e-commerce, woocommerce, dark, custom-logo, custom-menu

General Select Research: Premium Research Peptides

Changelog:
2.8.2 — Mobile funnel pass for the 40-60 audience (verified by a six-lens mobile audit; ad clicks are 54% Android, where the zoom block bit hardest). (1) Pinch-zoom restored on the store pages (header.php and the age-gate splash viewport meta drop maximum-scale=1) and every checkout, contact and notify input raised to 16px in the same release so iPhones don't zoom-jump on field focus. (2) Contrast: --text-muted 0.4 → 0.55 alpha (3.25:1 → 5.2:1 on navy) for every label, note, disclaimer and floating checkout label; struck sale prices get a real colour. (3) Catalog on phones: hero compacted, intro clamped, Singles/Kits toggle first with search and sort side by side, trust strip compact — the first kit now lands inside the first screen (was 1.3 screens down); the 'shop the Kits tab' strip item is hidden on the Kits view. (4) Product page on phones: title, price and Add to Cart before the image, the spec grid moved below the button, no empty 'Choose Your Pack' chooser on single-tier products (kits), bigger button label, and a sizes attribute that declares the phone slot honestly (11rem, the rendered width of the 2:3 renders under the 16rem cap) so every phone class picks the 600w rendition instead of the full-size original. (5) Checkout: floating labels 13px in the brighter colour, validation errors in a real error colour with the field border restored (the theme's !important borders used to wipe it). (6) Announcement bar 12px on phones and no rotation on phones or under Reduce Motion, so the GSR20 reminder for ad visitors stays on screen. (7) Age gate (owner decision): a tap on any lander catalog button is the 21+ affirmation — sets the same 30-day cookie as the splash (name and lifetime read from the gate's own constants; iOS caps script-set cookies at 7 days, after which the splash shows once and re-sets it), with 'By continuing to the catalog you confirm you are 21 or older.' under the hero buttons on the /w/ landers and /welcome — so ad visitors never meet the splash mid-purchase. (8) Kits view order (owner-specified): product 1436 first, then 1438/1550/1534, then the rest by price, out-of-stock last (default sort only; post-query reorder, no SQL; also applies to the kits view of category archives). On the Kits view the trust strip now renders below the grid. (9) Ad visitors (gsr_offer cookie) now see '$X with GSR20' under every catalog and product price (coupon confirmed sitewide, no exclusions) and an Apply GSR20 button in the cart/checkout reminder that asks the block's own store to apply the code on a tap — browser only, never server-side; waits for the store and the cart to load, one retry on a transient error, then points at the block's own coupon field. (10) Quiet contact line (email first, text second — owner preference) in the mobile menu and under the checkout reship line. (11) Entrance animations disabled on phones and under Reduce Motion (cards no longer start invisible). (12) Vocabulary sweep of the store templates and the product-card shortcode/guide cards: the catalog label and intro rewritten in research-use-only terms, the old assay-percentage badges → 'Lab Tested', the category-less product label → 'Research Kit'/'Research Material', the two assay/form spec rows → one 'Documentation' row that reads 'Certificate published' only when the product has a published certificate (mapped or uploaded) and links to the certificate status page otherwise, the matching trust badge shown only in that case, and the add-on note → 'Frequently ordered together.' (13) jetpack_photon_pre_args quality=80 filter, inert until the owner enables Jetpack's image CDN (its default lossless WebP saves nothing on the PNG kit renders; quality 80 measured ~35 KB vs 642 KB). Stylesheet/script versions bumped. OPEN (owner): the batch-transparency block on the RT 20mg pages still quotes the assay percentage.
2.8.1 — /w/offer message-matched to the 'Sitewide 20% off. Kits from $152.' creative (image + two video variants, same copy): hero now reads the ad's own lines in order — eyebrow 'Fewer markups. Lower than retail.', headline 'Sitewide 20% off. Kits from $152.', sub 'Yes, 10-packs starting at $152 — use code GSR20 at checkout. While supplies last.' — plus a one-tap Copy chip for the code, a CTA reading 'Shop kits — 20% off' into the Kits view, and the note that the code applies sitewide and stacks with the 10% Zelle discount ($152 = the $190 MOTS-C 10mg kit × 0.8, re-checked against the live catalog). The offer variant's page title and meta description now match the ad too (Meta's review reads them). NEW offer reminder: every lander and /welcome set a 7-day gsr_offer cookie (no personal data); js/gsr-offer.js then swaps the first announcement-bar phrase to '20% off sitewide with code GSR20' and adds a one-line reminder above the cart and checkout blocks — organic visitors have no cookie and see nothing, so the 2.6.4 'ad traffic only' rule holds; browser-only, page-cache safe, no WooCommerce calls. Stylesheet versions bumped for cache-busting. Below-hero content is untouched on all landers and the control (parity re-verified); policy-word audit re-run on the new copy: zero matches.
2.8.0 — Meta event match quality + privacy layer (pre-campaign; both datasets). NEW inc/meta-identity.php. (1) First-party visitor id: a random 32-hex cookie (_gsr_vid, 12 months) minted in the browser and sent RAW as external_id on every browser event (pixel init) and every CAPI event (ViewContent/AddToCart/InitiateCheckout/AddPaymentInfo/Lead, and Purchase via new _gsr_vid order meta) — coverage goes from 'logged in or has a cart' to ~100% of visitors; the pixel passes 32-hex values through untouched, so both channels carry the identical string. Logged-in visitors keep the hashed user id as a second external_id. (2) Persisted identity: after a mailing-list signup, a checkout, or a login, the SHA-256 hashes of the details the visitor gave us (em/ph/fn/ln/ct/st/zp/country) are stored in a signed first-party cookie (_gsr_idh, 180 days, cleared on logout) and attached to that browser's later browser AND server events — previously only logged-in visitors and 48-hour WooCommerce sessions carried them. (3) CACHE-SAFE by design: the site sits behind a page cache that serves anonymous HTML to any visitor whose cookies it doesn't recognise, so the pixel's advanced-matching object is now assembled in the browser from the cookies — no Meta per-visitor value is rendered into page HTML any more (the 2.6.9 server-rendered advanced-matching object is retired; the pre-existing Snap snippets still print a signed-in user's contact fields, only on cookie-bearing requests the cache never serves to others), and PHP never sets cookies on a plain anonymous render (visitor id minted by JS; identity cookie written only on AJAX/checkout/login or renders that already carry WordPress/WooCommerce cookies). (4) Country is no longer fabricated: anonymous events used to carry a hashed 'us' from the store's default customer location; now country is sent only when the visitor entered an address, or (server side only) when the request's geolocation header / local MaxMind lookup knows it. (5) One normalizer for every sender, mirroring Meta's pixel: names lose whitespace/punctuation, city a-z0-9 only, state 2 letters, US ZIP first 5 digits, phone digits with country code; empty fields are omitted (the Purchase sender used to hash empty strings). (6) Purchase event_time = order creation time (clamped to Meta's 7-day window) instead of the moment Completed was clicked, so Zelle orders attribute correctly. (7) Global Privacy Control honoured on both channels: no visitor id, hashes, fbp or fbc from the server, Meta's first-party cookies switched off in the browser, and Meta's Limited Data Use flag on every CAPI event (stored per order for the Purchase). The identity cookie is replaced rather than merged when a different email is supplied, and always replaced by an order or a login, so shared browsers never blend two people. (8) Lead CAPI event_source_url is now the lander the visitor was on. (9) Browser-side _fbc fallback from a landing fbclid, so cached lander HTML still yields the click id. (10) Privacy policy rewritten to disclose the Meta Pixel + Conversions API AND the pre-existing Snap Pixel + Conversions API, cookies, hashed identifiers, retention (180 days; 30 days for a mailing-list signup), GPC and Meta ad preferences; the old 'zero marketing use' and 'no sharing' statements (false since the mailing list and pixels existed) are removed. (11) Global Privacy Control now also stops the Snap Pixel (not loaded), the Snap ADD_CART/PURCHASE senders and the TikTok Purchase sender, so the policy's opt-out statement is true for every platform on the site. (12) Spec-parity fixes from review: the fbclid click-id cookie is refreshed when a NEW ad click arrives (Meta's rule; before, a returning clicker kept the first click id for 90 days) and is written on the registrable domain so the pixel updates the same cookie; phone hashes include the dial code for national numbers outside US/CA (34-country table, never guessed without a billing country); states outside US/CA are no longer truncated to 2 letters; UK postcodes reduce to area + district + sector and countryless ZIP+4 values to 5 digits; Unicode spaces are stripped from names like the pixel does; a browser AddToCart replay older than 24 hours is dropped instead of firing outside Meta's 48-hour dedup window. Payloads remain IDs-only; gender still never sent.
2.7.6 — Cleared the second dataset's test event code (GENSELECT_META_TEST_EVENT_CODE_2 now empty) after end-to-end verification: an on-site Zelle Purchase was confirmed in Test Events for dataset 1007405528627591. Both datasets (gesrrr 1716028582952804 and the original 1007405528627591) now receive every browser and server event on live traffic. No other change.
2.7.5 — VERIFICATION BUILD for the second Meta dataset: GENSELECT_META_ACCESS_TOKEN_2 now carries the events token generated for dataset 1007405528627591 (2026-09-04), so both datasets are live on install with no wp-config edit, and GENSELECT_META_TEST_EVENT_CODE_2 is set to TEST92755 so that dataset's CAPI events land in its Events Manager → Test Events tab. The primary dataset (gesrrr) is unaffected and stays on live traffic. Once verified, ship a build with the test code cleared (or define GENSELECT_META_TEST_EVENT_CODE_2 as an empty string in wp-config.php), otherwise the second dataset's server events never count in ads reporting.
2.7.4 — Optional SECOND Meta dataset, for the recovered original ad account: the legacy pixel/dataset 1007405528627591 can now run in parallel with the primary (gesrrr, 1716028582952804). New constants GENSELECT_META_PIXEL_ID_2 (defaults to 1007405528627591), GENSELECT_META_ACCESS_TOKEN_2 (default empty) and GENSELECT_META_TEST_EVENT_CODE_2 (default empty), plus genselect_meta_datasets(), which lists every dataset the theme emits to. The access token is the on switch: define GENSELECT_META_ACCESS_TOKEN_2 in wp-config.php (a token generated from THAT dataset's Events Manager, since tokens are scoped to the owning business portfolio) and both halves start together: the base pixel code inits every dataset (one fbq set/init pair each, one PageView, one noscript image each; fbq track calls then reach all initialised pixels, so ViewContent/AddToCart/InitiateCheckout/Lead browser events need no change), and every CAPI sender posts an identical event to each dataset under its own token and test code with the same event_id (Meta dedups per dataset). Purchase dedup is now per dataset: the primary keeps the legacy _genselect_capi_purchase_sent key (orders sent before this version are never re-sent), the second dataset uses _genselect_capi_purchase_sent_{id}, so a partial failure only retries the dataset that failed, and each dataset gets its own order note. With the token undefined, behaviour is identical to 2.7.3 (single dataset). Meta-side prerequisites are not code: generate the token, and verify the domain in the second dataset's business portfolio if it is not already.
2.7.3 — Registered the CJC-1295 + Ipamorelin kit (product 1698) in GSR_KIT_PRODUCT_IDS: it now appears in the Kits catalog view, is excluded from the Singles view, and gets no 3/5-pack tiers (kit exclusion), all automatically.
2.7.2 — Pack tiers reduced: 3-Pack 20% → 10%, 5-Pack 30% → 20% (GENSELECT_BULK_PACKS_JSON; every selector label, cart line label, order-item meta and pricing hook reads the constant, so they follow automatically; the /welcome bulk section and its four lander clones updated to match — below-hero parity re-verified). In-flight carts holding 3/5-pack lines reprice to the new tiers on their next recalculation. Free bacteriostatic water swapped to the 3ml product (GENSELECT_BAC_WATER_ID 1109 → 1664): the free-over-$200 pricing, cart nudge, pack-tier suppression, BAC-only cart guard, product-page free note and the add-on button all follow the constant; the 10ml product (1109) becomes a regular listing (normal pack tiers, no free logic, no add-on promotion). The two hard-coded $15 literals (under-$200 notice, add-on button) now read the product's live price so the swap cannot leave stale copy.
2.7.1 — Message-matched ad landers for the S1 campaign: /w/range, /w/shipping, /w/independent, /w/offer, each a hero-only variant of /welcome rendered by the new lander-welcome.php (generated from page-welcome.php — below the hero it is byte-for-byte identical, machine-verified; page-welcome.php itself is UNTOUCHED and remains the control). Routed via a whitelisted rewrite + gsr_lander query var (no WP pages, one-time flush flag bumped to 2.7.1); LP stylesheet enqueued for lander requests; small hero trust-row style appended. Hero CTAs pass utm parameters and fbclid through to the catalog (range/shipping/independent → /shop/, offer → the kits view, matching each claim). COPY NOTES: (PRODUCT) rendered as 'research-grade materials' — the ads say 'research compounds' but 'compound' is on the LP's own banned-word list, so the landers use the audit-safe vocabulary; '32' is taken from the ads/brief as supplied; $152 = $190 kits × 0.8 with GSR20, consistent with the live offer. Tracking parity with the control is exact: base pixel PageView + advanced matching + Lead pair on signup; ViewContent deliberately does NOT fire (it is a product-page event and does not fire on the control either).
2.7.0 — Signal-quality bundle (colleague-spec review: items 2/3 were already live since 2.6.1/2.6.9; the real gaps are closed here). (1) _fbc synthesized from a landing ?fbclid= when the pixel hasn't set the cookie (ad-blocked pixels lose the click id for exactly the visitors who arrived from ads) — Meta's documented fb.1.{ms}.{fbclid} format, 90-day first-party cookie. (2) fbp/fbc captured as order meta at checkout submission and attached to the server-fired Purchase, which previously carried neither (the gateway callback has no customer cookies) — this ties conversions to ad clicks. (3) Anonymous visitors now get a hashed WC-session external_id on pixel init + CAPI events. (4) US/CA 10-digit phones gain their country code before hashing, per Meta spec, gated on billing country — never assumed. (5) NEW AddPaymentInfo CAPI event at order submission (classic + block checkout), deterministic event id, with a payment_method label (zelle/card/card_invoice — gateway label only, never a product name) also added to Purchase custom_data: the funnel now splits IC → AddPaymentInfo → Purchase by payment method. (6) NEW Lead event on /welcome signups (owner-approved reversal of the 2.6.0 no-pixel rule, recorded in COMPLIANCE-REMEDIATION-NOTES.md): browser+CAPI pair with shared event id, new signups only, hashed email attached. Manual/admin orders remain excluded from all events.
2.6.9 — Event match quality upgrade (theme half; Automatic Advanced Matching was enabled dataset-side, content-scraping toggles declined). New genselect_meta_known_user_hashes() builds the full SHA-256 identity set (em/ph/fn/ln/ct/st/zp/country/external_id) for known visitors — logged-in accounts or WC-session billing — with normalization byte-identical to the Purchase sender. It now feeds BOTH sides: fbq('init') gains a manual advanced-matching object (pre-hashed server-side, raw PII never in page source; anonymous visitors get the plain init), and the ViewContent/AddToCart/InitiateCheckout CAPI mirrors carry the full hash set (previously em/ph/external_id only). Gender remains deliberately omitted everywhere — never collected, never fabricated. No auth change; the existing wp-config events token covers everything.
2.6.8 — COA quick view on product pages: mapped products (GLP-3 RT 10mg #55, RT 20mg #1552, GLP-2 TZ 30mg #57, MOTS-C 10mg #58; RT 30mg #56 confirmed and mapped to its accession-2602020012 certificate) render a prominent one-tap Certificate of Analysis card under the price, opening the bundled/Media-Library certificate in a new tab (gsr_product_coa_url map). On mapped products the quick-view certificate is authoritative: the gallery-scan COA section is suppressed there so a stale uploaded scan can never contradict the current certificate (kits/unmapped products unchanged). Batch-transparency: the RT 20mg SINGLE VIAL (1552) now carries the same lot-008655 badge + explainer as the kit, and the explainer's certificate link goes straight to the product's own COA when mapped (falls back to /coas/).
2.6.7 — Recovered from the dead external asset CDN (d2xsxph8kpxj0f.cloudfront.net began returning 403 for every asset, breaking the site logo, hero, and two COA links for all visitors): GENSELECT_LOGO_WHITE (site header, /welcome, OG-image fallback) and GENSELECT_HERO_BG now load from files bundled in the theme (images/gsr-logo-white.png; images/home-hero.jpg, a 195KB JPEG re-encode of the original); GENSELECT_COA_GLP3RT10/RT30 now serve the official Freedom Diagnostics PDFs bundled at images/coas/ (accessions 2602020011 and 2602020012, verified against the documents). GENSELECT_LOGO_BLUE and GENSELECT_TRUST_IMG still point at the dead host but are referenced nowhere in the theme (marked in-code); the GENSELECT_IMG_* placeholder set is also still dead but only renders when the store has zero products.
2.6.6 — GLP-3 RT 20mg COA published (accession 2608140665, lot 008655, received 08/14/2026, reported 08/21/2026): COA card updated with tested values — 99.66% purity, 18.04 mg net content, White Lyophilized Powder — and GENSELECT_COA_RT20 now points at the uploaded PDF, unlocking View Full COA. NEW batch-transparency notice system (GSR_BATCH_NOTICE_IDS): products whose current lot assayed under label carry a gold "This lot: 18.04 mg · 10% off" badge on catalog cards and the product hero, plus a Batch Transparency explainer on the product page (tested number, 10%-below-standard pricing, link to the certificate). Pre-wired for the RT 20mg KIT (1550); add the base RT 20mg product ID to the constant. NOTE: the actual 10% price cut is a WC-admin sale price on both listings — the badge is the disclosure, not the discount.
2.6.5 — Store API audit fixes (block-cart hang investigation; every totals/session/lifecycle hook verified clean — the hang itself is consistent with a stale cached page/nonce at the cache/CDN layer, see cart-watchdog.js). (1) Meta CAPI browsing events now send from the shutdown hook after the response is flushed — blocking=>false is not truly async, so the inline send was adding up to ~5s to Store API add-to-cart requests and product/checkout renders. (2) genselect_is_store_api_request() now rawurldecodes the URI so a percent-encoded rest_route can't bypass the guard. (3) The anonymous-REST allowlist matches rest_route anywhere in the query string (and decoded), fixing guest block-cart breakage on plain-permalink setups. (4) Retired pack tiers (pre-2.5.17 10-pack lines surviving in persistent carts) are no longer quantity-locked at full price: all five enforcement points (update validation, session self-heal, checkout guard, totals snap, Store API stepper locks) now skip tiers absent from GENSELECT_BULK_PACKS_JSON, so customers can edit or remove those lines normally.
2.6.4 — GSR20 offer scoped to /welcome ONLY (the paid-ads landing page): restored the hero offer echo, the first-order-code line in the opt-in intro, and the GSR20 opt-in success message there. Everywhere else stays offer-free — the site-wide announcement bar keeps "Direct-to-Researcher Pricing" — so ad-click visitors see the code but organic/returning visitors never do. The GSR20 coupon must remain active in WooCommerce → Marketing → Coupons while this build is live.
2.6.3 — GSR20 offer retired (deploy when the discount deal ends): announcement bar frame 1 now "Direct-to-Researcher Pricing"; /welcome hero offer-echo line removed (and its orphaned CSS); opt-in intro no longer promises a first-order code; opt-in success message replaced with a neutral confirmation. Remember to also deactivate/delete the GSR20 coupon in WooCommerce → Marketing → Coupons — the theme only stops advertising it; the code itself lives in WC admin. Changelog references to GSR20 in older entries are retained as history.
2.6.2 — Cleared the baked-in Meta test event code after successful end-to-end verification (Explorer pipe test + on-site Zelle Purchase confirmed in Test Events). CAPI events now count in live ads reporting. No other change.
2.6.1 — Conversions API full implementation on the new "gesrrr" dataset (1716028582952804, owned by the GSR 1 business portfolio). (1) Pixel ID + access token constants migrated (wp-config override unchanged; rotate the baked-in token after confirming wp-config holds it). (2) Browsing events now fire as browser+server pairs sharing one event_id so Meta dedups them: AddToCart (CAPI fired at capture time with the customer's real IP/UA; browser half renders next page load with the same stored ID), InitiateCheckout (pair fired from the checkout render), and NEW ViewContent on product pages. All payloads remain IDs/value/currency only — no content_name/content_category anywhere, per the 2.6.0 compliance rule. (3) Browsing-event user_data: client_ip_address + client_user_agent unhashed per Meta spec, _fbp/_fbc forwarded, em/ph/external_id SHA-256 hashed only when truthfully known; GENDER IS DELIBERATELY OMITTED from every event — WooCommerce does not collect it (deviation from the requested parameter list; nothing is fabricated). (4) Purchase sender: unchanged architecture (cards at payment, Zelle at Completed, deduped), now enriched with the order's captured client IP/UA and routed through the shared credential helper. (5) New GENSELECT_META_TEST_EVENT_CODE constant (empty = live) routes all CAPI events through Events Manager → Test Events during verification.
2.6.0 — Meta Ads compliance remediation (see COMPLIANCE-REMEDIATION-NOTES.md). (1) Pixel payloads no longer transmit material names: content_name + content_category removed from the browser AddToCart and InitiateCheckout events (inc/meta-pixel.php) and content_name removed from the TikTok CompletePayment contents array — IDs, value, currency, and quantities only, which is all Meta's optimizer consumes. Meta CAPI and Snap payloads were already IDs-only and are unchanged. (2) Public FAQ rewritten: six Q&As reframed to research-use-only vocabulary, and the storage answer no longer covers preparing material for use. (3) Site-wide footer tagline and the About page reworded to remove purity figures, the testing-lab name, and analytical-method names; three image alt attributes neutralized. (4) Site disclaimer (gsr_ruo_disclaimer_html, also mirrored in the /welcome/ inline footer) now states GSR is a chemical supplier, not a 503A compounding pharmacy or 503B outsourcing facility, and that statements are not FDA-evaluated. (5) NEW: optional email signup on /welcome/ with a required 21+/research-use affirmation — stored in WordPress as the gsr_optin CPT (wp-admin → Email Signups) with a notification to support@, no third-party service and no pixel event on submit; all existing catalog CTAs unchanged.
2.5.21 — (A) New SEO output layer (inc/gsr-seo.php, GSR_SEO_ENABLED, auto-disabled when Yoast/Rank Math/AIOSEO is active): per-context meta descriptions (never empty, ~155-char sentence-safe), canonical + OpenGraph/Twitter tags, consolidated JSON-LD @graph (Organization+WebSite site-wide; BreadcrumbList + Product schema with real offers/availability only — no ratings, nothing fabricated — on products; BreadcrumbList + Article on guides), noindex,follow on cart/checkout/my-account/register, and core-sitemap exclusions to match. (B) Research Library: gsr_guide CPT at /research/ (flush-safe), archive + reading-width single templates with related-products meta box, Verified Testing block, and the standard RUO disclaimer auto-appended (now a shared helper also used by the footer); Research link added to the hardcoded fallback navs. (C) Product pages: "Further reading" module below the COA section — up to 3 guides referencing the product, transient-cached reverse lookup, hidden when empty. (D) Compliance sweep: .product-card-dosage renamed .product-card-subtitle everywhere (functions.php ×2, archive-product.php, search.php, style.css); "High-dose" placeholder copy neutralized to "Research-grade … 30mg"; remaining dosage mentions are only the LANDING-PAGE-NOTES.md audit trigger list (non-customer-facing).
2.5.20 — (T1) Meta CAPI Purchase now fires server-side for CARD (non-Zelle) orders at payment confirmation (woocommerce_payment_complete + woocommerce_order_status_processing; deduped by _genselect_capi_purchase_sent) — fixes card Purchases never reaching Meta because redirect-gateway customers skip the thank-you page; sender refactored into genselect_send_meta_capi_purchase(); CAPI event_id is now the deterministic genselect_purchase_{order_id} (was order_id + timestamp), matching the Snap/TikTok anchor scheme. Zelle unchanged: CAPI on Completed only. (T2) Facebook for WooCommerce plugin Purchase suppression extended back to ALL orders — the theme owns every Meta Purchase server-side; the 2.5.17 card thank-you exception and the matching theme-PageView skip are removed (theme pixel renders on all pages again). (T3) Manually created orders (created_via admin/rest-api) no longer emit Purchase events to Meta, Snap, or TikTok; single "Purchase events skipped (manually created order)" note per order. (T4) TikTok sender returns silently when credentials are absent (no more per-order "NOT sent" notes); configured behavior unchanged.
2.5.19 — (T1) Announcement bar frame 1 now reads "20% Off Your First Order — Code GSR20" (retired the legacy supplier-pricing tagline; also reworded the 2.5.5 changelog quote of it); rotation/pairing untouched. (T2) /welcome campaign sync: GSR20 offer echo under the hero CTA, pills now Lab-Tested · Same-Day Dispatch · Free Reship If Lost, new Research Kits section (10-packs from $190, Browse Kits → ?product_view=kits), bulk section reframed for singles (Browse Singles → ?product_view=singles), same-day card now mentions free reship, fourth FAQ (lost-in-transit reship), hero + final CTAs → kits view; policy-word audit re-run per LANDING-PAGE-NOTES.md: zero matches (new strings kit/10-pack/$190/GSR20 verified against the trigger list). (T3) /welcome hero supports optional images/welcome-hero-bg.jpg at low visibility behind a near-opaque navy overlay (contrast preserved, scroll attachment); degrades to the prior solid background when absent. (T4) COA page: K-Low 80 Blend card renamed KLOW 80mg; pipeline updated (TZ 60mg → 99.698%/62.12 mg, analysis in progress, Aug 2026; NAD+ 500mg → 532.48 mg, Sept 2026) plus six new rows (MOTS-C 40mg, BPC-157 + TB-500, BPC-157 20mg, GHK-Cu 100mg, NAD+ 1000mg, PT-141 10mg) for 12 total; new GLP-3 RT 20mg card with MFR 99.843% badge (fits stock badge style, no tweak needed) and a COA Pending button state driven by the new GENSELECT_COA_RT20 constant (empty by default; paste the PDF URL to unlock View Full COA).
2.5.18 — (A) Singles/Kits is now a real segmented toggle between the catalog search bar and the Sort dropdown (two 50/50 buttons, solid-cyan active state, tap-again-to-deselect, aria-current; stacks full-width on mobile); removed the old filter-row links. (B) Registered six more kit product IDs (1495 K-Low, 1532 MOTS-C 40mg, 1534 RT 30mg, 1550 RT 20mg, 1562 TZ 60mg, 1563 Tesamorelin 10mg) — kit pack-suppression and the catalog split pick them up automatically. (C) loop_shop_per_page now returns -1 (uncapped) so every published product always renders on the single-page catalog.
2.5.17 — (A) Removed the front-page bulk-promo hero badge and its hero-promo-* CSS. (B) Catalog price strip: middle item now promotes Research Kits and links to the Kits catalog view. (C) Retired the 10-pack/40% tier globally (tiers now 3-Pack 20% / 5-Pack 30%); kits get no pack tiers at all (UI + server-side); deleted GENSELECT_NO_10PACK_IDS; copy swept all 40%/10-pack claims. (D) Stripped kit badging — "While supplies last" tags, gsr-kit-card cyan borders, and their CSS (kit COA anchor kept). (E) Catalog split: Single Vials / Kits (10-Packs) filter buttons via ?product_view=singles|kits, filtered server-side on the main product-archive query. (F) Zelle discount now stacks SEQUENTIALLY with coupon codes (10% off the post-coupon subtotal); removed the coupon early-return guard. (G) Meta Pixel Purchase split by gateway: cards fire the plugin's native Purchase at thank-you; Zelle stays suppressed at checkout and fires CAPI Purchase once on Completed (deduped).
2.5.16 — COA page: published Tesamorelin 10mg + K-Low 80 Blend cards (COA links 404 until PDFs uploaded), removed both from the testing pipeline, pushed all remaining pipeline dates to August 2026.
2.5.15 — Fixed the stray cyan line at the screen edge (the "Your order" heading accent escaped its heading due to a position override); billing phone is now REQUIRED (fallback contact when an email is mistyped); kit-ID correction: 1438 is the RT 10mg KIT (border/tag restored), base RT 10mg is 55 (10-pack tier now removed from 55, not 1438).
2.5.14 — Checkout rebuilt as a single centered column (~672px): removed the two-column grid/sticky layout and neutralized WooCommerce's side-by-side .col-1/.col-2 floats at all widths (checkout-scoped).
2.5.14 — Checkout section rhythm: consistent uppercase headings (billing / ship-to / your order) with divider + cyan accent, even spacing; names side-by-side ≥480px, everything else full width; no new boxes/shadows/motion.
2.5.14 — Checkout field consistency: blanked stray placeholders (labels only; selects keep their prompts), visible "Apartment, suite, unit, etc." label on address line 2, default location now US with NO pre-filled state.
2.5.14 — Kept & harmonized existing components at the new width: payment option cards, Zelle treatment, order-review table, dark notices, reship line, Place Order button, autofill shim — all unchanged.
2.5.13 — Autofill compatibility shim on classic checkout (js/autofill-shim.js): re-dispatches input/change for browser-autofilled fields so validation sees them.
2.5.13 — Classic checkout visual polish: two-column sticky layout ≥900px, form-row rhythm, themed order-review table + validation banners, 380px + reduced-motion safe.
2.5.13 — Removed the 10-pack tier on base products 58 (MOTS-C 10mg), 57 (tirzepatide 30mg), 1438 (retatrutide 10mg) via GENSELECT_NO_10PACK_IDS; tiers 1/3/5 kept.
2.5.13 — Kit-ID collision fix: removed 1438 (base retatrutide 10mg) from the kit highlight list; kits are 1434/1436, third kit ID TBD.
2.5.12 — Limited kit highlight: cyan border + "While supplies last" tag on kit products (1434/1436/1438) in catalog + product page, with a "view COA" anchor to the inline COA section.
2.5.11 — Checkout: enabled guest checkout — customers can now purchase without creating an account (account creation is now an optional, unchecked box). Updated cart-page notice to match.
2.5.10 — Welcome page: removed direct-supplier claims, demoted same-day shipping, calmer tone.
2.5.9 — Classic checkout cleanups: removed add-to-cart success banner, login/coupon prompts, and gift-card field; Zelle box de-pilled/normal-sized; removed card-icon row (kept reship line).
2.5.8 — Checkout: billing phone is now OPTIONAL (customers can check out without it) — reverses the 2.5.7 required change.
2.5.7 — Checkout: billing phone forced required (removes the wrong "(optional)" label); "Ship to a different address?" now defaults unchecked.
2.5.6 — Classic checkout polish: prominent full-width Place Order button, clean payment-option boxes (selected state), and a centered card-icon + reship strip above the button.
2.5.5 — Announcement bar regrouped to 2 paired frames: the pricing tagline (frame text retired in 2.5.19) | "Save 10% with Zelle" and "Shipped Same-Day from Tampa, Florida | Lost in Transit? We Reship Free".
2.5.4 — Card icons now scoped to the credit-card option only and right-aligned beside the "Pay With Credit Card" label (no longer leaking onto Zelle / bank transfer).
2.5.3 — Refined checkout card-icon fitment: icons now sit inside the card option beneath the description (aligned), set off by a subtle hairline.
2.5.2 — Removed referral program; announcement bar regrouped to 3 frames (~10s); checkout payment icons moved compactly under the card option (bottom box removed), reship line standalone.
2.5.1 — Rotating trust bar, checkout payment icons + reship badge, reship/returns policy.
2.5.0 — Card processing now accepted; payment copy updated sitewide (cards + Zelle 10% + same-day ACH).
*/

/* ===== CSS RESET & BASE ===== */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

:root {
  --navy: #070B14;
  --navy-light: #0A0F1A;
  --navy-card: #0D1321;
  --navy-hover: #131B2E;
  --gold: #00BFFF;
  --gold-light: #33CCFF;
  --gold-dark: #0099CC;
  --text-primary: #E8E6E1;
  --text-secondary: rgba(232, 230, 225, 0.6);
  --text-muted: rgba(232, 230, 225, 0.55); /* 2.8.2: 5.2:1 on navy (was 0.4 = 3.25:1) */
  --border-gold: rgba(0, 191, 255, 0.2);
  --border-gold-light: rgba(0, 191, 255, 0.1);
  --font-heading: 'Barlow Condensed', sans-serif;
  --font-body: 'Poppins', sans-serif;
}

html {
  scroll-behavior: smooth;
}

/* Honor reduced-motion: anchor jumps (e.g. the kit COA link) go instant. */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
}

body {
  font-family: var(--font-body);
  background-color: var(--navy);
  color: var(--text-primary);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

a {
  text-decoration: none;
  color: inherit;
  transition: all 0.3s ease;
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  font-weight: 700;
  line-height: 1.1;
  color: var(--text-primary);
}

/* ===== UTILITY CLASSES ===== */
.container {
  max-width: 1400px;
  margin: 0 auto;
  padding: 0 1rem;
}

@media (min-width: 640px) {
  .container { padding: 0 1.5rem; }
}

@media (min-width: 1024px) {
  .container { padding: 0 2rem; }
}

.gold-gradient-text {
  background: linear-gradient(135deg, var(--gold), var(--gold-light), #66D9FF);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.section-number {
  position: absolute;
  font-family: var(--font-heading);
  font-size: 8rem;
  font-weight: 700;
  color: rgba(0, 191, 255, 0.03);
  z-index: 0;
  line-height: 1;
  pointer-events: none;
}

.glow-border {
  position: relative;
  transition: all 0.5s ease;
}

.glow-border::before {
  content: '';
  position: absolute;
  inset: 0;
  border: 1px solid transparent;
  transition: all 0.5s ease;
  pointer-events: none;
  z-index: 1;
}

.glow-border:hover::before {
  border-color: rgba(0, 191, 255, 0.3);
  box-shadow: inset 0 0 30px rgba(0, 191, 255, 0.05), 0 0 30px rgba(0, 191, 255, 0.1);
}

/* ===== ANIMATIONS ===== */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(30px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes slideLeft {
  from { opacity: 0; transform: translateX(-40px); }
  to { opacity: 1; transform: translateX(0); }
}

@keyframes slideRight {
  from { opacity: 0; transform: translateX(40px); }
  to { opacity: 1; transform: translateX(0); }
}

.animate-fade-up {
  animation: fadeUp 0.8s ease-out both;
}

.animate-slide-left {
  animation: slideLeft 0.8s ease-out both;
}

.animate-slide-right {
  animation: slideRight 0.8s ease-out both;
}

.delay-1 { animation-delay: 0.1s; }
.delay-2 { animation-delay: 0.2s; }
.delay-3 { animation-delay: 0.3s; }
.delay-4 { animation-delay: 0.4s; }
.delay-5 { animation-delay: 0.5s; }
.delay-6 { animation-delay: 0.6s; }
.delay-7 { animation-delay: 0.7s; }
.delay-8 { animation-delay: 0.8s; }

/* 2.8.2: on phones and for reduced-motion users nothing starts invisible or
   slides in — older readers read a fading-in card as "still loading". */
@media (prefers-reduced-motion: reduce), (max-width: 767px) {
  .animate-fade-up,
  .animate-fade-in,
  .animate-slide-left,
  .animate-slide-right {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}

/* ===== ANNOUNCEMENT BAR ===== */
.announcement-bar {
  background: linear-gradient(90deg, var(--gold-dark), var(--gold), var(--gold-dark));
  color: var(--navy);
  text-align: center;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  /* Rotating bar: FIXED height so swapping segments causes no layout shift.
     Segments are absolutely stacked inside .announcement-rotator and only one
     is visible at a time. */
  position: relative;
  height: 2.25rem;
  padding: 0 1rem;
  overflow: hidden;
}

.announcement-rotator {
  position: relative;
  height: 100%;
  max-width: 60rem;
  margin: 0 auto;
}

.announcement-segment {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  font-weight: 700;
  opacity: 0;
  transform: translateY(0.5rem);
  transition: opacity 0.7s ease, transform 0.7s ease;
  pointer-events: none;
}

.announcement-segment.is-active {
  opacity: 1;
  transform: translateY(0);
}

/* Frame 2 holds two phrases on one line, joined by a thin vertical rule. */
.announcement-segment--split {
  flex-wrap: nowrap;
}
.announcement-phrase {
  white-space: nowrap;
}
.announcement-divider {
  flex-shrink: 0;
  width: 1px;
  height: 1.1em;
  margin: 0 0.85rem;
  background: currentColor;
  opacity: 0.45;
}

/* Accessibility: with reduced motion the bar still cycles, but instantly —
   no fade or slide. (The JS only toggles .is-active; CSS removes the animation.) */
@media (prefers-reduced-motion: reduce) {
  .announcement-segment {
    transition: none;
    transform: none;
  }
}

/* Narrow screens: shrink so the longest segment still fits the fixed-height
   single line without clipping. */
@media (max-width: 600px) {
  .announcement-bar {
    font-size: 0.75rem;   /* 2.8.2: 12px (was 9.6px); fixed height keeps CLS at 0 */
    letter-spacing: 0.04em;
    height: 2.5rem;
  }
}
@media (max-width: 359px) {
  .announcement-bar {
    font-size: 0.7rem;
  }
}

/* On smaller screens the two-phrase frame can't fit one line cleanly — stack
   the phrases and hide the divider (no overflow/clip). The fixed bar height
   still fits two short lines, so there is no layout shift. */
@media (max-width: 700px) {
  .announcement-segment--split {
    flex-direction: column;
    line-height: 1.2;
  }
  .announcement-divider {
    display: none;
  }
}

/* ===== CHECKOUT TRUST CUES (payment icons + reship line) =====
   Injected at block checkout by js/checkout-trust.js (and the classic-checkout
   PHP fallback). Presentational only — matches the dark navy / cyan brand. */

/* Compact payment marks — a centered strip just above the Place Order button
   on classic checkout. Small (~18px), unboxed — a quiet trust cue. */
.gsr-card-pay-icons {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin: 0 0 0.5rem;
  line-height: 0;
}
.gsr-card-pay-icons .gsr-pay-ico {
  display: inline-flex;
  line-height: 0;
}
.gsr-card-pay-icons .gsr-pay-ico svg {
  height: 18px;
  width: auto;
  display: block;
}

/* Standalone reship reassurance line between the payment options and Place Order. */
.gsr-checkout-reship {
  margin: 0.9rem 0;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  font-size: 0.8rem;
  line-height: 1.4;
  color: var(--text-secondary);
  text-align: center;
  font-family: var(--font-body);
}
.gsr-checkout-reship .gsr-trust-shield {
  flex-shrink: 0;
  color: var(--gold);
}

/* ===== NAVIGATION ===== */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(7, 11, 20, 0.9);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border-bottom: 1px solid var(--border-gold-light);
}

.site-header .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-top: 1rem;
  padding-bottom: 1rem;
}

.site-logo img {
  height: 40px;
  width: auto;
}

.main-nav {
  display: none;
}

@media (min-width: 768px) {
  .main-nav {
    display: flex;
    align-items: center;
    gap: 2rem;
    list-style: none;
  }
}

.main-nav a {
  font-family: var(--font-body);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-secondary);
  position: relative;
}

.main-nav a:hover,
.main-nav .current-menu-item a,
.main-nav .current_page_item a {
  color: var(--gold);
}

.main-nav a::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  width: 0;
  height: 1px;
  background: var(--gold);
  transition: width 0.3s ease;
}

.main-nav a:hover::after {
  width: 100%;
}

.nav-cta {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: transparent;
  border: 1px solid rgba(0, 191, 255, 0.3);
  color: var(--gold);
  padding: 0.5rem 1.25rem;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  transition: all 0.3s ease;
}

.nav-cta:hover {
  background: rgba(0, 191, 255, 0.1);
  border-color: rgba(0, 191, 255, 0.6);
}

/* Mobile menu toggle */
.mobile-menu-toggle {
  display: flex;
  flex-direction: column;
  gap: 5px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 5px;
}

@media (min-width: 768px) {
  .mobile-menu-toggle { display: none; }
}

.mobile-menu-toggle span {
  display: block;
  width: 24px;
  height: 2px;
  background: var(--gold);
  transition: all 0.3s ease;
}

.mobile-nav {
  display: none;
  background: var(--navy-card);
  border-bottom: 1px solid var(--border-gold-light);
  padding: 1rem;
}

.mobile-nav.active,
.mobile-nav.open {
  display: block;
}

.mobile-nav ul {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.mobile-nav a {
  display: block;
  padding: 0.75rem 1rem;
  font-size: 0.85rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-secondary);
  font-family: var(--font-body);
  border-left: 2px solid transparent;
  transition: all 0.3s ease;
}

.mobile-nav a:hover {
  color: var(--gold);
  border-left-color: var(--gold);
  background: rgba(0, 191, 255, 0.05);
}

/* ===== HERO SECTION ===== */
.hero-section {
  position: relative;
  min-height: 90vh;
  display: flex;
  align-items: center;
  overflow: hidden;
}

.hero-bg {
  position: absolute;
  inset: 0;
}

.hero-bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hero-overlay-right {
  position: absolute;
  inset: 0;
  background: linear-gradient(to right, rgba(7, 11, 20, 0.95), rgba(7, 11, 20, 0.80), rgba(7, 11, 20, 0.55));
}

.hero-overlay-top {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, var(--navy), rgba(7, 11, 20, 0.5), rgba(7, 11, 20, 0.6));
}

.hero-content {
  position: relative;
  z-index: 10;
  max-width: 1400px;
  margin: 0 auto;
  padding: 5rem 1rem;
  width: 100%;
}

@media (min-width: 640px) {
  .hero-content { padding: 5rem 1.5rem; }
}

@media (min-width: 1024px) {
  .hero-content { padding: 5rem 2rem; }
}

.hero-inner {
  max-width: 640px;
}

.hero-label {
  display: inline-block;
  color: var(--gold);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  margin-bottom: 1.5rem;
  font-family: var(--font-body);
}

.hero-title {
  font-size: 3rem;
  line-height: 0.95;
  margin-bottom: 1.5rem;
}

@media (min-width: 640px) {
  .hero-title { font-size: 3.75rem; }
}

@media (min-width: 1024px) {
  .hero-title { font-size: 4.5rem; }
}

.hero-desc {
  color: var(--text-secondary);
  font-size: 1.125rem;
  line-height: 1.7;
  margin-bottom: 2.5rem;
  max-width: 32rem;
  font-family: var(--font-body);
  font-weight: 300;
}

.hero-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

.btn-gold {
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
  background: var(--gold);
  color: var(--navy);
  padding: 1rem 2rem;
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  transition: all 0.3s ease;
  border: none;
  cursor: pointer;
}

.btn-gold:hover {
  background: var(--gold-light);
  color: var(--navy);
}

.btn-gold svg {
  transition: transform 0.3s ease;
}

.btn-gold:hover svg {
  transform: translateX(4px);
}

.btn-outline {
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
  border: 1px solid rgba(0, 191, 255, 0.3);
  color: var(--gold);
  padding: 1rem 2rem;
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  background: transparent;
  transition: all 0.3s ease;
  cursor: pointer;
}

.btn-outline:hover {
  background: rgba(0, 191, 255, 0.05);
  border-color: rgba(0, 191, 255, 0.6);
  color: var(--gold);
}

.hero-bottom-gradient {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 8rem;
  background: linear-gradient(to top, var(--navy), transparent);
}

/* ===== TRUST BAR ===== */
.trust-bar {
  background: var(--navy-light);
  border-top: 1px solid var(--border-gold-light);
  border-bottom: 1px solid var(--border-gold-light);
  padding: 3rem 0;
}

.trust-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 2rem;
}

@media (min-width: 1024px) {
  .trust-grid { grid-template-columns: repeat(4, 1fr); }
}

/* === "Why Our Prices" section: 3 tiles centered as a row === */
/* Scoped via .pricing-section so the 4-pillar trust bar above keeps
   its 4-column grid layout untouched. */
.pricing-section .trust-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 2rem;
  max-width: 1100px;
  margin-left: auto;
  margin-right: auto;
}

.pricing-section .trust-grid .trust-item {
  flex: 1 1 280px;
  max-width: 340px;
}

@media (min-width: 768px) {
  .pricing-section .trust-grid {
    flex-wrap: nowrap;
  }
}

.trust-item {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.trust-icon {
  width: 3rem;
  height: 3rem;
  border: 1px solid var(--border-gold);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.trust-icon svg {
  width: 1.25rem;
  height: 1.25rem;
  color: var(--gold);
  stroke: var(--gold);
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.trust-label {
  font-size: 0.875rem;
  font-weight: 600;
  font-family: var(--font-body);
  color: var(--text-primary);
}

.trust-desc {
  font-size: 0.75rem;
  color: var(--text-muted);
  font-family: var(--font-body);
}

/* ===== ABOUT SECTION ===== */
.about-section {
  position: relative;
  padding: 6rem 0;
  overflow: hidden;
}

@media (min-width: 1024px) {
  .about-section { padding: 8rem 0; }
}

.about-grid {
  display: grid;
  gap: 4rem;
  align-items: center;
}

@media (min-width: 1024px) {
  .about-grid { grid-template-columns: 1fr 1fr; }
}

.about-image-wrap {
  position: relative;
}

.about-image-wrap img {
  width: 100%;
  height: 500px;
  object-fit: cover;
}

.about-image-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(to right, transparent, rgba(7, 11, 20, 0.3));
}

.about-stat-card {
  position: absolute;
  bottom: -1.5rem;
  right: -1.5rem;
  background: var(--navy-card);
  border: 1px solid var(--border-gold);
  padding: 1.5rem;
  backdrop-filter: blur(20px);
}

.about-stat-number {
  font-family: var(--font-heading);
  font-size: 1.875rem;
  font-weight: 700;
  color: var(--gold);
}

.about-stat-label {
  font-size: 0.75rem;
  color: var(--text-muted);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  margin-top: 0.25rem;
}

.section-label {
  color: var(--gold);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  font-family: var(--font-body);
}

.section-title {
  font-size: 2.25rem;
  margin-top: 1rem;
  margin-bottom: 1.5rem;
  line-height: 1.1;
}

@media (min-width: 1024px) {
  .section-title { font-size: 3rem; }
}

.section-divider {
  width: 4rem;
  height: 1px;
  /* Soft gold-to-cyan gradient line. Feels more curated than a flat color. */
  background: linear-gradient(90deg,
    rgba(201, 168, 76, 0.45) 0%,
    rgba(0, 191, 255, 0.55) 60%,
    transparent 100%);
  margin-bottom: 2rem;
}

.about-text {
  color: var(--text-secondary);
  line-height: 1.7;
  margin-bottom: 1.5rem;
  font-family: var(--font-body);
}

.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--gold);
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  transition: gap 0.3s ease;
}

.link-arrow:hover {
  gap: 1rem;
  color: var(--gold);
}

/* ===== PRODUCT CARDS ===== */
.products-section {
  position: relative;
  padding: 6rem 0;
  background: var(--navy-light);
}

@media (min-width: 1024px) {
  .products-section { padding: 8rem 0; }
}

.section-header {
  text-align: center;
  margin-bottom: 4rem;
}

.section-subtitle {
  color: var(--text-muted);
  max-width: 36rem;
  margin: 0 auto;
  font-family: var(--font-body);
}

.products-grid {
  display: grid;
  gap: 1.5rem;
}

@media (min-width: 640px) {
  .products-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1024px) {
  .products-grid { grid-template-columns: repeat(3, 1fr); }
}

.product-card {
  display: block;
  background: var(--navy-card);
  border-radius: 4px;
  /* Soft elevation + a 1px inset top highlight for that "lifted" premium
     finish you get on luxury e-commerce cards. The highlight reads as a
     subtle gloss without becoming a hard border. */
  box-shadow:
    0 4px 18px rgba(0, 0, 0, 0.35),
    inset 0 1px 0 rgba(255, 255, 255, 0.04);
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1),
              box-shadow 0.5s ease,
              filter 0.4s ease;
}

.product-card:hover {
  transform: translateY(-6px);
  box-shadow:
    0 14px 36px rgba(0, 0, 0, 0.45),
    inset 0 1px 0 rgba(255, 255, 255, 0.07);
  filter: brightness(1.04);
}

.product-card:focus-visible {
  outline: 2px solid #C9A84C;
  outline-offset: 3px;
}

.product-card-image {
  position: relative;
  height: 16rem;
  background: linear-gradient(135deg, var(--navy-card), var(--navy-hover));
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}

.product-card-image img {
  width: 12rem;
  height: 12rem;
  object-fit: contain;
  opacity: 0.9;
  transition: transform 0.7s ease;
}

.product-card:hover .product-card-image img {
  transform: scale(1.1);
}

.product-card-badge {
  position: absolute;
  top: 0.75rem;
  left: 0.75rem;
  background: rgba(0, 191, 255, 0.1);
  border: 1px solid rgba(0, 191, 255, 0.2);
  color: var(--gold);
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.25rem 0.75rem;
  font-family: var(--font-body);
}

.product-card-body {
  padding: 1.5rem;
  border-top: 1px solid var(--border-gold-light);
}

.product-card-name {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 0.25rem;
}

.product-card-subtitle {
  font-size: 0.75rem;
  color: var(--text-muted);
  font-family: var(--font-body);
}

.product-card-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 1rem;
  padding-top: 1rem;
  border-top: 1px solid var(--border-gold-light);
}

.product-card-price {
  font-family: var(--font-heading);
  font-size: 1.5rem;
  font-weight: 400;
  color: var(--text-primary);
}

/* Premium "Flash Sale" badge + .premium-card styling removed in v2.4.7
   (premium repositioning). The general .product-card and .glow-border
   styling is intentionally untouched. See FLASH-SALE-REMOVAL-NOTES.md. */

/* === REMOVE: the redundant "99%+ PURE" purity badge on every card === */
.product-card-badge {
  display: none !important;
}

/* === REMOVE: WooCommerce's default underline on sale prices ===
   <ins> renders with text-decoration: underline by default; the sale
   amount and the regular amount both use it. Strip across the board. */
.product-card-price ins,
.product-card-price del,
.product-detail-price ins,
.product-detail-price del,
.woocommerce-Price-amount,
.woocommerce ins,
.amount ins,
ins.amount,
del.amount {
  text-decoration: none !important;
  background: transparent !important;
}
/* Keep the strikethrough on the old price */
.product-card-price del .woocommerce-Price-amount,
.product-detail-price del .woocommerce-Price-amount,
.product-card-price del,
.product-detail-price del,
del.woocommerce-Price-amount {
  text-decoration: line-through !important;
  color: var(--text-secondary) !important; /* 2.8.2: was opacity .5 (2:1) */
  opacity: 1;
}

.product-card-arrow {
  width: 2rem;
  height: 2rem;
  border: 1px solid var(--border-gold);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.3s ease;
}

.product-card:hover .product-card-arrow {
  background: var(--gold);
  border-color: var(--gold);
}

.product-card-arrow svg {
  width: 0.875rem;
  height: 0.875rem;
  color: var(--gold);
  stroke: var(--gold);
  fill: none;
  stroke-width: 2;
  transition: all 0.3s ease;
}

.product-card:hover .product-card-arrow svg {
  color: var(--navy);
  stroke: var(--navy);
}

.out-of-stock-badge {
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
  background: rgba(255, 255, 255, 0.1);
  color: var(--text-muted);
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.25rem 0.75rem;
  font-family: var(--font-body);
}

/* Kit product page: small anchor down to the inline COA section.
   align-self keeps it text-width inside the flex-column info panel (a flex
   item would otherwise stretch, making the underline span the column). */
.gsr-kit-coa-link {
  display: inline-block;
  align-self: flex-start;
  margin: 0 0 1.25rem;
  font-family: var(--font-body);
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--gold);
  text-decoration: none;
  border-bottom: 1px solid rgba(0, 191, 255, 0.35);
  padding-bottom: 2px;
}

.gsr-kit-coa-link:hover,
.gsr-kit-coa-link:focus-visible {
  color: var(--gold-light);
  border-bottom-color: var(--gold-light);
}

/* The site header is sticky — give the anchor target clearance so the COA
   heading lands below the header instead of underneath it. */
#gsr-coa-section {
  scroll-margin-top: 6rem;
}

/* ===== COA TRUST SECTION ===== */
.coa-section {
  position: relative;
  padding: 6rem 0;
  overflow: hidden;
}

@media (min-width: 1024px) {
  .coa-section { padding: 8rem 0; }
}

.coa-grid {
  display: grid;
  gap: 4rem;
  align-items: center;
}

@media (min-width: 1024px) {
  .coa-grid { grid-template-columns: 1fr 1fr; }
}

.coa-image-wrap {
  position: relative;
  overflow: hidden;
}

.coa-image-wrap img {
  width: 100%;
  height: 400px;
  object-fit: cover;
}

.coa-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
  margin-top: 2rem;
}

.coa-stat {
  text-align: center;
  padding: 1.5rem;
  border: 1px solid var(--border-gold-light);
}

.coa-stat-number {
  font-family: var(--font-heading);
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--gold);
}

.coa-stat-label {
  font-size: 0.625rem;
  color: var(--text-muted);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  margin-top: 0.25rem;
}

/* ===== FAQ SECTION ===== */
.faq-section {
  position: relative;
  padding: 6rem 0;
  background: var(--navy-light);
}

@media (min-width: 1024px) {
  .faq-section { padding: 8rem 0; }
}

.faq-layout {
  display: grid;
  gap: 4rem;
}

@media (min-width: 1024px) {
  .faq-layout { grid-template-columns: 1fr 2fr; }
}

.faq-item {
  border-bottom: 1px solid var(--border-gold-light);
}

.faq-question {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.5rem 0;
  text-align: left;
  background: none;
  border: none;
  cursor: pointer;
  font-family: var(--font-body);
  font-size: 1.05rem;
  font-weight: 500;
  color: var(--text-primary);
  transition: color 0.3s ease;
}

.faq-question:hover {
  color: var(--gold);
}

.faq-question svg {
  width: 1.25rem;
  height: 1.25rem;
  flex-shrink: 0;
  color: var(--text-muted);
  stroke: var(--text-muted);
  fill: none;
  stroke-width: 2;
  transition: all 0.3s ease;
}

.faq-question:hover svg {
  color: var(--gold);
  stroke: var(--gold);
}

.faq-answer {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.5s ease, padding 0.5s ease;
}

.faq-answer.open,
.faq-item.open .faq-answer {
  max-height: 15rem;
  padding-bottom: 1.5rem;
}

.faq-answer p {
  color: var(--text-secondary);
  font-size: 0.875rem;
  line-height: 1.7;
  font-family: var(--font-body);
}

/* ===== CTA SECTION ===== */
.cta-section {
  position: relative;
  padding: 6rem 0;
  text-align: center;
}

@media (min-width: 1024px) {
  .cta-section { padding: 8rem 0; }
}

.cta-inner {
  max-width: 48rem;
  margin: 0 auto;
}

/* ===== FOOTER ===== */
.site-footer {
  background: var(--navy-light);
  border-top: 1px solid var(--border-gold-light);
  padding: 4rem 0 2rem;
}

.footer-grid {
  display: grid;
  gap: 3rem;
  margin-bottom: 3rem;
}

@media (min-width: 768px) {
  .footer-grid { grid-template-columns: 2fr 1fr 1fr 1fr 1fr; }
}

.footer-brand p {
  color: var(--text-secondary);
  font-size: 0.875rem;
  line-height: 1.7;
  margin-top: 1rem;
  font-family: var(--font-body);
}

.footer-business-info {
  margin-top: 1.25rem;
  padding-top: 1.25rem;
  border-top: 1px solid var(--border-gold-light);
}

.footer-business-info p {
  color: var(--text-secondary);
  font-size: 0.8rem;
  line-height: 1.6;
  margin-top: 0.25rem;
  font-family: var(--font-body);
}

.footer-business-info strong {
  color: var(--text-primary);
  font-size: 0.8rem;
  letter-spacing: 0.05em;
}

.footer-business-info a {
  color: var(--text-secondary);
}

.footer-business-info a:hover {
  color: var(--gold);
}

.footer-heading {
  font-family: var(--font-heading);
  font-size: 0.875rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 1rem;
}

.footer-links {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.footer-links a {
  font-size: 0.875rem;
  color: var(--text-secondary);
  font-family: var(--font-body);
}

.footer-links a:hover {
  color: var(--gold);
}

.footer-payments {
  border-top: 1px solid var(--border-gold-light);
  padding: 1.75rem 0 1.5rem;
  margin-bottom: 0.5rem;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.5rem;
}

.footer-payments-label {
  font-family: var(--font-body);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
  margin: 0;
}

.footer-payments-methods {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  gap: 0.75rem;
}

.footer-payment-card {
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.65rem 0.95rem;
  border: 1px solid var(--border-gold-light);
  border-radius: 6px;
  background: rgba(255, 255, 255, 0.03);
  transition: border-color 0.2s ease, transform 0.2s ease;
}

.footer-payment-card:hover {
  border-color: var(--border-gold);
  transform: translateY(-1px);
}

/* Understated variant for the CC-by-invoice card. Visible and
   professional, but deliberately less prominent than Zelle / ACH. */
.footer-payment-card-muted {
  background: transparent;
  border-color: rgba(255, 255, 255, 0.08);
  opacity: 0.78;
}

.footer-payment-card-muted:hover {
  border-color: rgba(255, 255, 255, 0.18);
  opacity: 1;
}

.footer-payment-card-muted .footer-payment-card-name {
  color: var(--text-secondary);
  font-weight: 600;
}

.footer-payment-card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 30px;
  border-radius: 4px;
  background: rgba(255, 255, 255, 0.04);
  overflow: hidden;
  flex-shrink: 0;
}

.footer-payment-card-icon-zelle {
  background: transparent;
}

.footer-payment-card-icon svg {
  width: 100%;
  height: 100%;
  display: block;
}

.footer-payment-card-icon svg[stroke] {
  width: 22px;
  height: 22px;
}

.footer-payment-card-text {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  line-height: 1.2;
}

.footer-payment-card-name {
  font-family: var(--font-body);
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--text-primary);
  letter-spacing: 0.04em;
}

.footer-payment-card-benefit {
  font-family: var(--font-body);
  font-size: 0.65rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.footer-payments-trust {
  font-family: var(--font-body);
  font-size: 0.7rem;
  letter-spacing: 0.04em;
  color: var(--text-secondary);
  margin: 0;
  flex-basis: 100%;
}

@media (max-width: 640px) {
  .footer-payments {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.85rem;
  }
  .footer-payment-card {
    width: 100%;
  }
}

.footer-bottom {
  border-top: 1px solid var(--border-gold-light);
  padding-top: 2rem;
}

.footer-disclaimer {
  font-size: 0.6875rem;
  color: var(--text-muted);
  line-height: 1.6;
  font-family: var(--font-body);
  max-width: 64rem;
}

.footer-copyright {
  font-size: 0.75rem;
  color: var(--text-muted);
  font-family: var(--font-body);
  margin-top: 1rem;
}

/* ===== SERVER-SIDE 21+ AGE GATE (splash page) ===== */
.gsr-age-gate-body {
  margin: 0;
  padding: 0;
  min-height: 100vh;
  background: var(--navy);
  color: var(--text-primary);
  display: flex;
  align-items: center;
  justify-content: center;
}

.gsr-age-gate-body::before {
  content: '';
  position: fixed;
  inset: 0;
  background:
    radial-gradient(circle at 20% 10%, rgba(201, 168, 76, 0.10), transparent 55%),
    radial-gradient(circle at 80% 90%, rgba(0, 191, 255, 0.05), transparent 50%);
  pointer-events: none;
  z-index: 0;
}

.gsr-age-gate-wrap {
  position: relative;
  z-index: 1;
  width: 100%;
  padding: 2rem 1rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

.gsr-age-gate-card {
  background: var(--navy-card);
  border: 1px solid var(--border-gold);
  max-width: 28rem;
  width: 100%;
  padding: 3rem 2rem;
  text-align: center;
}

.gsr-age-gate-logo {
  height: 3rem;
  width: auto;
  margin: 0 auto 2rem;
  display: block;
}

.gsr-age-gate-eyebrow {
  display: block;
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 0.85rem;
}

.gsr-age-gate-title {
  font-size: 1.5rem;
  margin: 0 0 0.5rem;
}

.gsr-age-gate-divider {
  margin: 1rem auto 1.25rem;
}

.gsr-age-gate-body-text {
  color: var(--text-secondary);
  font-size: 0.875rem;
  line-height: 1.6;
  margin: 0 0 2rem;
}

.gsr-age-gate-buttons {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  margin: 0 0 1.5rem;
}

.gsr-age-gate-btn-accept {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  width: 100%;
  background: var(--gold);
  color: var(--navy);
  padding: 1rem 2rem;
  font-family: var(--font-body);
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  border: none;
  cursor: pointer;
  transition: all 0.3s ease;
}

.gsr-age-gate-btn-accept:hover {
  background: var(--gold-light);
}

.gsr-age-gate-btn-accept svg {
  transition: transform 0.25s ease;
}

.gsr-age-gate-btn-accept:hover svg {
  transform: translateX(4px);
}

.gsr-age-gate-btn-decline {
  display: inline-block;
  width: 100%;
  padding: 0.75rem;
  background: none;
  border: 1px solid rgba(255, 255, 255, 0.1);
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.3s ease;
}

.gsr-age-gate-btn-decline:hover {
  border-color: rgba(255, 255, 255, 0.2);
  color: var(--text-secondary);
}

.gsr-age-gate-disclaimer {
  font-size: 0.6875rem;
  color: var(--text-muted);
  margin: 1.5rem 0 0;
  line-height: 1.5;
}

/* ===== PAGE TEMPLATES ===== */
.page-hero {
  position: relative;
  padding: 8rem 0 4rem;
  text-align: center;
  background: var(--navy-light);
  border-bottom: 1px solid var(--border-gold-light);
}

.page-hero-title {
  font-size: 3rem;
  margin-bottom: 1rem;
}

@media (min-width: 1024px) {
  .page-hero-title { font-size: 4rem; }
}

.page-hero-desc {
  color: var(--text-secondary);
  max-width: 36rem;
  margin: 0 auto;
  font-family: var(--font-body);
}

.page-content {
  padding: 4rem 0;
}

@media (min-width: 1024px) {
  .page-content { padding: 6rem 0; }
}

/* ===== POLICY PAGES ===== */
.policy-content {
  color: var(--text-secondary);
  font-size: 0.9rem;
  line-height: 1.8;
}

.policy-updated {
  font-size: 0.8rem;
  color: var(--text-muted);
  margin-bottom: 2rem;
  font-style: italic;
}

.policy-heading {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--text-primary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin: 2rem 0 0.75rem;
}

.policy-heading:first-of-type {
  margin-top: 0;
}

.policy-content p {
  margin-bottom: 0.75rem;
}

.policy-content strong {
  color: var(--text-primary);
}

.policy-content a {
  color: var(--gold);
  text-decoration: none;
}

.policy-content a:hover {
  color: var(--gold-light);
  text-decoration: underline;
}

.policy-list {
  list-style: none;
  padding: 0;
  margin: 0.5rem 0 1rem;
}

.policy-list li {
  position: relative;
  padding-left: 1.25rem;
  margin-bottom: 0.4rem;
}

.policy-list li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.6em;
  width: 6px;
  height: 6px;
  background: var(--gold);
  border-radius: 50%;
}

/* ===== PRODUCT DETAIL PAGE - SIDEBAR LAYOUT ===== */
.product-breadcrumb {
  margin-bottom: 2rem;
  font-size: 0.875rem;
}

.product-breadcrumb a {
  color: var(--text-secondary);
}

.product-breadcrumb a:hover {
  color: var(--gold);
}

.breadcrumb-sep {
  color: var(--text-secondary);
  margin: 0 0.5rem;
}

.breadcrumb-current {
  color: var(--gold);
}

/* 2-column layout: image left, info right */
.product-detail-layout {
  display: grid;
  gap: 3rem;
  align-items: start;
}

@media (min-width: 768px) {
  .product-detail-layout {
    grid-template-columns: 1fr 1fr;
    gap: 4rem;
  }
}

.product-detail-image-col {
  position: relative;
}

@media (min-width: 768px) {
  .product-detail-image-col {
    position: sticky;
    top: 6rem;
  }
}

.product-detail-image {
  background: linear-gradient(135deg, var(--navy-card), var(--navy-hover));
  padding: 2rem;
  position: relative;
  overflow: hidden;
}

.product-main-img {
  width: 100%;
  height: auto;
  max-height: 32rem;
  object-fit: contain;
}

.product-detail-info-col {
  display: flex;
  flex-direction: column;
}

.product-detail-title {
  font-family: var(--font-heading);
  font-size: 2.25rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin: 0.5rem 0 1rem;
}

@media (min-width: 1024px) {
  .product-detail-title { font-size: 2.5rem; }
}

.product-detail-price {
  font-family: var(--font-heading);
  font-size: 2rem;
  font-weight: 700;
  color: var(--gold);
  margin-bottom: 0.5rem;
}

.product-detail-pricing-note {
  font-family: var(--font-body);
  font-size: 0.8rem;
  color: var(--text-secondary);
  font-style: italic;
  letter-spacing: 0.01em;
  margin: 0 0 1.5rem;
}

/* BAC water price-line note (the GENSELECT_BAC_WATER_ID product only). Reuses the product-meta
   note style above; this just tints it with the brand accent and drops the
   italic so it reads as a factual price feature rather than a disclaimer. */
.product-bac-free-note {
  color: var(--gold);
  font-style: normal;
  font-weight: 500;
}

.product-short-desc {
  color: var(--text-secondary);
  line-height: 1.7;
  margin-bottom: 1.5rem;
  font-family: var(--font-body);
  font-size: 0.9rem;
}

.product-meta-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  margin-bottom: 2rem;
  padding: 1.5rem;
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
}

.product-meta-item {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.product-meta-label {
  font-size: 0.625rem;
  color: var(--text-muted);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
}

.product-meta-value {
  font-size: 0.875rem;
  color: var(--text-primary);
  font-family: var(--font-body);
  font-weight: 500;
}

/* Add to Cart wrapper */
.product-add-to-cart-wrap {
  margin-bottom: 2rem;
}

.product-add-to-cart-wrap .cart {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem;
}

.product-add-to-cart-wrap .quantity {
  display: flex;
  align-items: center;
}

.product-add-to-cart-wrap .quantity .qty {
  width: 4rem;
  padding: 0.75rem;
  text-align: center;
  background: var(--navy-card);
  border: 1px solid var(--border-gold);
  color: var(--text-primary);
  font-family: var(--font-body);
  font-size: 1rem;
  outline: none;
}

.product-add-to-cart-wrap .quantity .qty:focus {
  border-color: var(--gold);
}

.product-add-to-cart-wrap .single_add_to_cart_button {
  flex: 1;
  min-width: 200px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  background: var(--gold) !important;
  color: var(--navy) !important;
  padding: 1rem 2rem;
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  border: none;
  cursor: pointer;
  transition: all 0.3s ease;
}

.product-add-to-cart-wrap .single_add_to_cart_button:hover {
  background: var(--gold-light) !important;
}

/* === Bulk pack selector (single-product page) === */
.genselect-pack-form {
  display: flex;
  flex-direction: column;
  gap: 1.25rem;
}

.pack-selector {
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.pack-selector-label {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-muted);
  font-family: var(--font-body);
  margin-bottom: 0.25rem;
}

.pack-selector-stack-note {
  margin: 0.85rem 0 0;
  text-align: center;
  font-family: var(--font-body);
  font-size: 0.78rem;
  color: var(--text-secondary);
  letter-spacing: 0.01em;
  line-height: 1.5;
}

/* BAC water "add-on, not sold alone" helper line at the add-to-cart area
   (the GENSELECT_BAC_WATER_ID product only — FIX 3a). Small muted note with a thin cyan-tinted
   divider so it reads as a distinct expectation-setting line. */
.product-bac-soldwith-note {
  margin-top: 0.6rem;
  padding-top: 0.6rem;
  border-top: 1px solid rgba(0, 191, 255, 0.18);
}

.pack-tier {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1rem 1.25rem;
  background: var(--navy-card);
  border: 1.5px solid var(--border-gold-light);
  border-radius: 8px;
  cursor: pointer;
  transition: border-color 0.2s ease, background 0.2s ease, transform 0.15s ease;
  font-family: var(--font-body);
}

.pack-tier:hover {
  border-color: var(--border-gold);
  background: rgba(201, 168, 76, 0.05);
  transform: translateY(-1px);
}

.pack-tier input[type="radio"] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.pack-tier.is-selected {
  border-color: var(--gold);
  background: rgba(201, 168, 76, 0.10);
  box-shadow: 0 0 0 1px var(--gold) inset;
}

.pack-tier-main {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  flex-wrap: wrap;
}

.pack-tier-title {
  font-weight: 700;
  font-size: 1rem;
  color: var(--text-primary);
  letter-spacing: 0.04em;
}

.pack-tier-savings {
  font-size: 0.68rem;
  font-weight: 700;
  color: #4ade80;
  background: rgba(74, 222, 128, 0.12);
  padding: 3px 8px;
  border-radius: 4px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.pack-tier-flag {
  font-size: 0.6rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: 4px;
}

.pack-tier-flag-pop {
  background: rgba(201, 168, 76, 0.18);
  color: var(--gold);
  border: 1px solid var(--border-gold);
}

.pack-tier-pricing {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.15rem;
  text-align: right;
  white-space: nowrap;
}

.pack-tier-unit {
  font-family: var(--font-heading);
  font-size: 1.1rem;
  font-weight: 700;
  color: var(--gold);
}

.pack-tier-unit-sub {
  font-family: var(--font-body);
  font-size: 0.62rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  color: var(--text-muted);
  text-transform: uppercase;
  margin-left: 0.15rem;
}

.pack-tier-total {
  font-size: 0.72rem;
  color: var(--text-muted);
  letter-spacing: 0.05em;
}

.genselect-pack-form .single_add_to_cart_button {
  width: 100%;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  background: var(--gold) !important;
  color: var(--navy) !important;
  padding: 1rem 2rem;
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-family: var(--font-body);
  border: none;
  cursor: pointer;
  transition: all 0.3s ease;
}

.genselect-pack-form .single_add_to_cart_button:hover {
  background: var(--gold-light) !important;
}

/* Cart line lock for pack quantities. The lock icon is added by the
   woocommerce_cart_item_quantity filter (BUGFIX v2.4.1) — inline-flex keeps
   icon and text vertically centered. */
.cart-pack-qty-lock {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.35rem 0.75rem;
  border: 1px dashed var(--border-gold);
  border-radius: 4px;
  color: var(--gold);
  font-weight: 700;
  font-family: var(--font-body);
  letter-spacing: 0.05em;
}

.cart-pack-qty-lock-icon {
  flex-shrink: 0;
  opacity: 0.85;
}

@media (max-width: 540px) {
  .pack-tier {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.65rem;
  }
  .pack-tier-pricing {
    align-items: flex-start;
    text-align: left;
  }
}

/* Out of stock notice */
.product-out-of-stock-notice {
  padding: 1.5rem;
  border: 1px solid rgba(0, 191, 255, 0.3);
  text-align: center;
}

.product-out-of-stock-notice .oos-title {
  color: var(--gold);
  font-family: var(--font-heading);
  font-weight: 700;
  text-transform: uppercase;
  font-size: 1.1rem;
  margin-bottom: 0.5rem;
}

.product-out-of-stock-notice .oos-desc {
  color: var(--text-secondary);
  font-size: 0.875rem;
}

.product-out-of-stock-notice .oos-desc a {
  color: var(--gold);
}

.product-out-of-stock-notice .oos-notify-form {
  display: flex;
  gap: 0.5rem;
  margin-top: 1rem;
  flex-wrap: wrap;
}

.product-out-of-stock-notice .oos-notify-input {
  flex: 1 1 auto;
  min-width: 0;
  padding: 0.65rem 0.85rem;
  background: rgba(0, 0, 0, 0.35);
  border: 1px solid var(--border-gold-light);
  color: var(--text-primary);
  font-family: var(--font-body);
  font-size: 16px; /* 2.8.2: no iOS focus-zoom */
  border-radius: 0;
  outline: none;
  transition: border-color 0.2s ease;
}

.product-out-of-stock-notice .oos-notify-input:focus {
  border-color: var(--gold);
}

.product-out-of-stock-notice .oos-notify-button {
  padding: 0.65rem 1.25rem;
  background: var(--gold);
  color: var(--navy);
  font-family: var(--font-body);
  font-size: 0.8rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  border: none;
  cursor: pointer;
  transition: background 0.2s ease;
  white-space: nowrap;
}

.product-out-of-stock-notice .oos-notify-button:hover {
  background: var(--gold-light);
}

.product-out-of-stock-notice .oos-disclaimer {
  margin-top: 0.6rem;
  font-size: 0.7rem;
  color: var(--text-muted);
  font-family: var(--font-body);
}

.product-out-of-stock-notice .oos-success {
  margin-top: 1rem;
  padding: 0.75rem 1rem;
  background: rgba(0, 212, 255, 0.08);
  border: 1px solid rgba(0, 212, 255, 0.3);
  color: #00d4ff;
  font-size: 0.875rem;
  font-family: var(--font-body);
}

/* Trust badges */
.product-trust-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-top: 0.5rem;
}

.product-trust-badge {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 1rem;
  border: 1px solid var(--border-gold-light);
  font-size: 0.75rem;
  color: var(--text-secondary);
  font-family: var(--font-body);
}

/* Full description below both columns */
.product-full-description {
  margin-top: 4rem;
  padding-top: 3rem;
  border-top: 1px solid var(--border-gold-light);
}

.product-desc-heading {
  font-family: var(--font-heading);
  font-size: 1.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 1rem;
}

.product-desc-content {
  color: var(--text-secondary);
  line-height: 1.8;
  font-family: var(--font-body);
}

.product-desc-content p {
  margin-bottom: 1rem;
}

/* Related products */
.product-related-section {
  margin-top: 4rem;
  padding-top: 3rem;
  border-top: 1px solid var(--border-gold-light);
}

.product-related-heading {
  font-family: var(--font-heading);
  font-size: 1.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  text-align: center;
  margin-bottom: 2rem;
}

/* Product-page Certificate of Analysis section */
.product-coa-section {
    margin: 3rem 0;
    padding: 2rem;
    background: var(--navy-card);
    border-radius: 1rem;
    border: 1px solid rgba(0, 191, 255, 0.15);
}
.product-coa-heading {
    font-family: 'Barlow Condensed', sans-serif;
    font-size: 1.75rem;
    font-weight: 700;
    text-transform: uppercase;
    text-align: center;
    margin-bottom: 0.5rem;
    color: var(--text-primary);
}
.product-coa-subtext {
    text-align: center;
    color: var(--text-secondary);
    font-size: 0.95rem;
    max-width: 40rem;
    margin: 0 auto 1.5rem;
    line-height: 1.6;
}
.product-coa-images {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    justify-content: center;
}
.product-coa-image-link {
    display: block;
    position: relative;
    max-width: 100%;
    border-radius: 0.5rem;
    overflow: hidden;
    border: 1px solid rgba(0, 191, 255, 0.2);
    transition: border-color 0.2s ease, transform 0.2s ease;
}
.product-coa-image-link:hover {
    border-color: var(--gold);
    transform: translateY(-2px);
}
.product-coa-image {
    display: block;
    width: 100%;
    max-width: 600px;
    height: auto;
}
.product-coa-zoom-hint {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    background: rgba(7, 11, 20, 0.85);
    color: var(--gold);
    text-align: center;
    font-size: 0.85rem;
    padding: 0.5rem;
    font-weight: 600;
}
@media (max-width: 767px) {
    .product-coa-section { padding: 1.25rem; }
    .product-coa-heading { font-size: 1.4rem; }
    .product-coa-image { max-width: 100%; }
}

/* ===== COA PAGE ===== */
.coa-cards-grid {
  display: grid;
  gap: 2rem;
}

@media (min-width: 768px) {
  .coa-cards-grid { grid-template-columns: repeat(2, 1fr); }
}

.coa-card {
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  overflow: hidden;
  transition: all 0.3s ease;
}

.coa-card:hover {
  border-color: var(--border-gold);
}

.coa-card-header {
  padding: 1.5rem;
  border-bottom: 1px solid var(--border-gold-light);
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.coa-card-title {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 600;
}

.coa-card-meta {
  font-size: 0.75rem;
  color: var(--text-muted);
  font-family: var(--font-body);
  margin-top: 0.25rem;
}

.coa-purity-badge {
  background: rgba(0, 191, 255, 0.1);
  border: 1px solid rgba(0, 191, 255, 0.2);
  color: var(--gold);
  font-family: var(--font-heading);
  font-size: 1.1rem;
  font-weight: 700;
  padding: 0.5rem 1rem;
  white-space: nowrap;
}

.coa-card-details {
  padding: 1.5rem;
}

.coa-detail-row {
  display: flex;
  justify-content: space-between;
  padding: 0.5rem 0;
  border-bottom: 1px solid var(--border-gold-light);
}

.coa-detail-row:last-child {
  border-bottom: none;
}

.coa-detail-label {
  font-size: 0.75rem;
  color: var(--text-muted);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-family: var(--font-body);
}

.coa-detail-value {
  font-size: 0.875rem;
  color: var(--text-primary);
  font-family: var(--font-body);
  text-align: right;
}

/* ===== CONTACT PAGE ===== */
.contact-grid {
  display: grid;
  gap: 4rem;
}

@media (min-width: 1024px) {
  .contact-grid { grid-template-columns: 1fr 1fr; }
}

.contact-form .form-group {
  margin-bottom: 1.5rem;
}

.contact-form .form-label {
  display: block;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-secondary);
  font-family: var(--font-body);
  margin-bottom: 0.5rem;
}

.contact-form .form-input {
  width: 100%;
  padding: 0.875rem 1rem;
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  color: var(--text-primary);
  font-family: var(--font-body);
  font-size: 16px; /* 2.8.2: no iOS focus-zoom */
  transition: border-color 0.3s ease;
  outline: none;
}

.contact-form .form-input:focus {
  border-color: var(--gold);
}

.contact-form .form-textarea {
  min-height: 8rem;
  resize: vertical;
}

.contact-info-card {
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  padding: 2rem;
}

.contact-info-item {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
  padding: 1rem 0;
  border-bottom: 1px solid var(--border-gold-light);
}

.contact-info-item:last-child {
  border-bottom: none;
}

.contact-info-item svg {
  flex-shrink: 0;
  margin-top: 0.25rem;
}

/* ===== WOOCOMMERCE OVERRIDES ===== */
.woocommerce ul.products {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}

@media (max-width: 1023px) {
  .woocommerce ul.products { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 639px) {
  .woocommerce ul.products { grid-template-columns: 1fr; }
}

.woocommerce ul.products li.product {
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  padding: 0;
  margin: 0 !important;
  width: 100% !important;
  float: none !important;
  transition: all 0.5s ease;
}

.woocommerce ul.products li.product:hover {
  transform: translateY(-4px);
  border-color: rgba(0, 191, 255, 0.3);
  box-shadow: 0 0 30px rgba(0, 191, 255, 0.1);
}

.woocommerce ul.products li.product a img {
  margin: 0;
  padding: 1.5rem;
  background: linear-gradient(135deg, var(--navy-card), var(--navy-hover));
}

.woocommerce ul.products li.product .woocommerce-loop-product__title {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--text-primary);
  padding: 0.75rem 1.5rem 0;
}

.woocommerce ul.products li.product .price {
  font-family: var(--font-heading);
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--gold);
  padding: 0.5rem 1.5rem 1rem;
}

.woocommerce ul.products li.product .button,
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce #respond input#submit {
  background: var(--gold) !important;
  color: var(--navy) !important;
  font-family: var(--font-body);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  border: none;
  border-radius: 0;
  padding: 0.75rem 1.5rem;
  transition: all 0.3s ease;
}

.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover,
.woocommerce #respond input#submit:hover {
  background: var(--gold-light) !important;
  color: var(--navy) !important;
}

.woocommerce a.button.alt,
.woocommerce button.button.alt,
.woocommerce input.button.alt {
  background: var(--gold) !important;
  color: var(--navy) !important;
}

.woocommerce a.button.alt:hover,
.woocommerce button.button.alt:hover,
.woocommerce input.button.alt:hover {
  background: var(--gold-light) !important;
  color: var(--navy) !important;
}

/* WooCommerce single product */
.woocommerce div.product div.images {
  background: linear-gradient(135deg, var(--navy-card), var(--navy-hover));
  padding: 2rem;
}

.woocommerce div.product .product_title {
  font-family: var(--font-heading);
  font-size: 2.5rem;
  color: var(--text-primary);
}

.woocommerce div.product p.price {
  font-family: var(--font-heading);
  font-size: 2rem;
  color: var(--gold);
}

.woocommerce div.product .woocommerce-product-details__short-description {
  color: var(--text-secondary);
  font-family: var(--font-body);
}

/* WooCommerce cart */
.woocommerce table.shop_table {
  border: 1px solid var(--border-gold-light);
  border-collapse: collapse;
}

.woocommerce table.shop_table th {
  font-family: var(--font-heading);
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gold);
  background: var(--navy-card);
  border-bottom: 1px solid var(--border-gold-light);
}

.woocommerce table.shop_table td {
  border-bottom: 1px solid var(--border-gold-light);
  color: var(--text-primary);
  font-family: var(--font-body);
}

/* WooCommerce notices */
.woocommerce-message {
  background: var(--navy-card);
  border-top-color: var(--gold);
  color: var(--text-primary);
}

.woocommerce-info {
  background: var(--navy-card);
  border-top-color: var(--gold);
  color: var(--text-primary);
}

.woocommerce-error {
  background: var(--navy-card);
  border-top-color: #e74c3c;
  color: var(--text-primary);
}

/* WooCommerce forms: transparent inputs with white text */
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.woocommerce form .form-row select,
.woocommerce-checkout input[type="text"],
.woocommerce-checkout input[type="email"],
.woocommerce-checkout input[type="tel"],
.woocommerce-checkout input[type="number"],
.woocommerce-checkout input[type="password"],
.woocommerce-checkout input[type="url"],
.woocommerce-checkout textarea,
.woocommerce-checkout select,
.woocommerce-checkout .input-text,
.woocommerce-checkout #billing_address_1,
.woocommerce-checkout #billing_address_2,
.woocommerce-checkout #billing_city,
.woocommerce-checkout #billing_postcode,
.woocommerce-checkout #billing_phone,
.woocommerce-checkout #billing_email,
.woocommerce-checkout #billing_first_name,
.woocommerce-checkout #billing_last_name,
.woocommerce-checkout #billing_company,
.woocommerce-checkout #billing_state,
.woocommerce-checkout #billing_country,
.woocommerce-checkout #order_comments,
.select2-container--default .select2-selection--single,
.woocommerce form .form-row .select2-container .select2-selection--single {
  background: transparent !important;
  background-color: transparent !important;
  border: 1px solid var(--border-gold-light) !important;
  color: var(--text-primary) !important;
  font-family: var(--font-body);
  padding: 0.75rem 1rem;
  border-radius: 0 !important;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}

/* Select2 dropdown overrides for WooCommerce */
.select2-container--default .select2-selection--single .select2-selection__rendered {
  color: var(--text-primary) !important;
  line-height: inherit;
}

.select2-container--default .select2-selection--single .select2-selection__arrow {
  top: 50%;
  transform: translateY(-50%);
}

.select2-dropdown {
  background-color: var(--navy-card) !important;
  border: 1px solid var(--border-gold-light) !important;
  border-radius: 0 !important;
}

.select2-container--default .select2-results__option {
  color: var(--text-primary) !important;
  background: var(--navy-card) !important;
}

.select2-container--default .select2-results__option--highlighted[aria-selected],
.select2-container--default .select2-results__option:hover {
  background: rgba(0, 191, 255, 0.1) !important;
  color: var(--gold) !important;
}

.select2-container--default .select2-search--dropdown .select2-search__field {
  background: transparent !important;
  border: 1px solid var(--border-gold-light) !important;
  color: var(--text-primary) !important;
}

/* Placeholder text */
.woocommerce-checkout input::placeholder,
.woocommerce-checkout textarea::placeholder {
  color: var(--text-muted) !important;
}

.woocommerce form .form-row input.input-text:focus,
.woocommerce form .form-row textarea:focus,
.woocommerce form .form-row select:focus,
.woocommerce-checkout input:focus,
.woocommerce-checkout textarea:focus,
.woocommerce-checkout select:focus {
  border-color: var(--gold) !important;
  outline: none;
  box-shadow: 0 0 0 1px rgba(0, 191, 255, 0.2);
}

.woocommerce form .form-row label,
.woocommerce-checkout label {
  font-family: var(--font-body);
  color: var(--text-secondary);
}

/* WooCommerce checkout page background */
.woocommerce-checkout .woocommerce {
  color: var(--text-primary);
}

.woocommerce-checkout h3,
.woocommerce-checkout h2 {
  color: var(--text-primary);
  font-family: var(--font-heading);
}

/* Truvo / payment gateway iframes and fields */
.woocommerce-checkout #payment {
  background: var(--navy-card) !important;
  border-radius: 0;
}

.woocommerce-checkout #payment div.payment_box {
  background: var(--navy-light) !important;
  color: var(--text-secondary) !important;
}

.woocommerce-checkout #payment ul.payment_methods {
  border-bottom: 1px solid var(--border-gold-light);
}

.woocommerce-checkout #payment ul.payment_methods li label {
  color: var(--text-primary) !important;
}

/* ===== CLASSIC CHECKOUT POLISH (block -> classic switch) =====
   Clean, aligned payment options and one prominent Place Order button, so
   nothing reads as unstyled or out of line on the classic checkout. */

/* Payment options as tidy boxes; selected state via :has() (graceful fallback). */
.woocommerce-checkout #payment ul.payment_methods {
  list-style: none;
  margin: 0;
  padding: 0;
  border-bottom: none;
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method {
  list-style: none;
  margin: 0 0 0.6rem;
  padding: 0.9rem 1rem;
  border: 1px solid var(--border-gold-light);
  border-radius: 6px;
  background: rgba(255, 255, 255, 0.02);
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method::before {
  display: none;
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method:has(input.input-radio:checked) {
  border-color: var(--gold);
  background: rgba(0, 191, 255, 0.06);
}
.woocommerce-checkout #payment ul.payment_methods li input.input-radio {
  margin: 0 0.5rem 0 0;
  accent-color: var(--gold);
  vertical-align: middle;
}
.woocommerce-checkout #payment ul.payment_methods li label {
  display: inline;
  color: var(--text-primary) !important;
  font-weight: 600;
  cursor: pointer;
}
.woocommerce-checkout #payment ul.payment_methods li img {
  max-height: 22px;
  width: auto;
  vertical-align: middle;
  margin-left: 0.4rem;
}
.woocommerce-checkout #payment div.payment_box {
  margin: 0.7rem 0 0 !important;
  padding: 0.85rem 1rem !important;
  background: var(--navy-light) !important;
  border-radius: 4px;
  color: var(--text-secondary) !important;
  font-size: 0.85rem;
  line-height: 1.55;
}
.woocommerce-checkout #payment div.payment_box::before {
  display: none !important; /* remove the default triangle that often misaligns */
}

/* Place Order — one prominent, full-width primary button (not the small
   generic .button it was inheriting). */
.woocommerce-checkout #payment .form-row.place-order {
  margin: 0;
  padding: 1.25rem 0 0;
}
.woocommerce-checkout #payment #place_order {
  float: none;
  display: block;
  width: 100%;
  margin: 0;
  padding: 1rem 2rem !important;
  font-family: var(--font-heading) !important;
  font-size: 1.05rem !important;
  font-weight: 700 !important;
  letter-spacing: 0.12em !important;
  text-transform: uppercase !important;
  color: var(--navy) !important;
  background: linear-gradient(135deg, #00BFFF, #33CCFF) !important;
  border: none !important;
  border-radius: 6px !important;
  cursor: pointer;
  transition: all 0.25s ease;
}
.woocommerce-checkout #payment #place_order:hover {
  background: linear-gradient(135deg, #33CCFF, #66D9FF) !important;
  transform: translateY(-1px);
  box-shadow: 0 8px 24px rgba(0, 191, 255, 0.25);
}
.woocommerce-checkout #payment #place_order:active {
  transform: translateY(0);
  box-shadow: 0 3px 10px rgba(0, 191, 255, 0.2);
}

/* ===== CLASSIC CHECKOUT LAYOUT + FORMS (complements the POLISH block
   above — payment option cards, Zelle treatment, and #place_order are
   already styled there; nothing here re-declares them) ===== */

/* --- Form rhythm: labels, input height, radius. The base input rules
   earlier in this sheet supply the transparent background, 1px cyan-tint
   border, and cyan focus ring; these normalize size + radius on checkout. --- */
.woocommerce-checkout form.checkout .form-row {
  margin-bottom: 1.1rem;
}
.woocommerce-checkout form.checkout .form-row > label {
  display: block;
  margin-bottom: 0.35rem;
  font-size: 0.8rem;
  font-weight: 500;
  letter-spacing: 0.03em;
  color: var(--text-secondary);
}
.woocommerce-checkout form.checkout .form-row input.input-text,
.woocommerce-checkout form.checkout .form-row select,
.woocommerce-checkout form.checkout .form-row .select2-container .select2-selection--single {
  width: 100%;
  min-height: 48px; /* comfortable mobile tap target */
  border-radius: 6px !important;
}
.woocommerce-checkout form.checkout .form-row textarea {
  width: 100%;
  min-height: 6.5rem;
  border-radius: 6px !important;
  resize: vertical;
}
/* The base input rules earlier in this sheet pin border-radius: 0 !important
   through ID selectors (#billing_* / #order_comments), which outrank any
   class-only selector regardless of source order. Restate the radius at the
   same ID specificity, later in the sheet, so every checkout field renders
   consistently rounded. */
.woocommerce-checkout #billing_first_name,
.woocommerce-checkout #billing_last_name,
.woocommerce-checkout #billing_company,
.woocommerce-checkout #billing_address_1,
.woocommerce-checkout #billing_address_2,
.woocommerce-checkout #billing_city,
.woocommerce-checkout #billing_postcode,
.woocommerce-checkout #billing_phone,
.woocommerce-checkout #billing_email,
.woocommerce-checkout #billing_state,
.woocommerce-checkout #billing_country,
.woocommerce-checkout #order_comments {
  border-radius: 6px !important;
}
/* Keep checkbox rows (ship-to-different-address, terms, create-account) on
   their native inline layout — the block-label rule above must not apply.
   The second selector repeats .form-row > label so it OUTRANKS the block
   rule for checkbox labels that are direct .form-row children. */
.woocommerce-checkout form.checkout #ship-to-different-address label,
.woocommerce-checkout form.checkout .form-row > label.woocommerce-form__label-for-checkbox,
.woocommerce-checkout form.checkout .woocommerce-form__label-for-checkbox {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 0;
  font-size: 0.85rem;
  color: var(--text-primary);
}

/* --- SINGLE-COLUMN CHECKOUT (all widths) ---
   One centered, constrained column, top-down: billing → ship-to → notes →
   order table → payment → Place Order. No grid, no sticky, no side-by-side
   sections. WooCommerce's default layout stylesheet floats .col-1/.col-2 at
   ~48% each — neutralized here at ALL widths, scoped to checkout only so
   cart/account pages keep their default layout. DOM order is untouched:
   notices WooCommerce prepends into the form naturally render at the top. */
.woocommerce-checkout .woocommerce {
  max-width: 42rem; /* ~672px column; page.php's container (48rem) centers it */
  margin-left: auto;
  margin-right: auto;
}
.woocommerce-checkout form.checkout .col2-set,
.woocommerce-checkout form.checkout .col2-set .col-1,
.woocommerce-checkout form.checkout .col2-set .col-2,
.woocommerce-checkout form.checkout #order_review,
.woocommerce-checkout form.checkout #order_review_heading {
  float: none;
  width: 100%;
  max-width: 100%;
}
/* Only #order_review needs its position reset (kills the old sticky).
   BUGFIX 2.5.15: this used to be in the group above, where its higher
   specificity beat the heading rule's position:relative — the heading's
   absolutely-positioned cyan accent then escaped to the page edge and
   rendered as a stray blue line at the left of the screen. */
.woocommerce-checkout form.checkout #order_review {
  position: static;
}

/* --- Section headings: one consistent treatment so the column reads as
   evenly-breathing sections. Thin divider + a short 2px cyan accent — the
   only section chrome; no boxes around sections, no shadows, no motion. --- */
.woocommerce-checkout .woocommerce-billing-fields > h3,
.woocommerce-checkout h3#ship-to-different-address,
.woocommerce-checkout #order_review_heading {
  position: relative;
  margin: 2.25rem 0 1rem;
  padding-bottom: 0.6rem;
  font-family: var(--font-heading);
  font-size: 1.1rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-primary);
  border-bottom: 1px solid var(--border-gold-light);
}
.woocommerce-checkout .woocommerce-billing-fields > h3::after,
.woocommerce-checkout h3#ship-to-different-address::after,
.woocommerce-checkout #order_review_heading::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: -1px;
  width: 3rem;
  height: 2px;
  background: var(--gold);
}
/* The first section heading shouldn't push away from the page top. */
.woocommerce-checkout .woocommerce-billing-fields > h3 {
  margin-top: 0.5rem;
}

/* --- First/last name side-by-side ≥480px; everything else full width.
   Restated at checkout specificity so it beats woocommerce-smallscreen's
   full-width override between 480–768px. --- */
.woocommerce-checkout form.checkout .form-row-first,
.woocommerce-checkout form.checkout .form-row-last {
  float: none;
  width: 100%;
}
@media (min-width: 480px) {
  .woocommerce-checkout form.checkout .form-row-first {
    float: left;
    width: 48.5%;
    clear: left;
  }
  .woocommerce-checkout form.checkout .form-row-last {
    float: right;
    width: 48.5%;
    clear: right;
  }
  .woocommerce-checkout form.checkout .form-row-wide,
  .woocommerce-checkout form.checkout .form-row.notes {
    clear: both;
  }
}

/* --- Order review table: cyan headers, row separators on dark navy,
   totals row strongest. --- */
.woocommerce-checkout #order_review table.shop_table {
  width: 100%;
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  border-radius: 8px;
  border-collapse: separate;
  border-spacing: 0;
  overflow: hidden;
}
.woocommerce-checkout #order_review table.shop_table th,
.woocommerce-checkout #order_review table.shop_table td {
  padding: 0.8rem 1rem;
  border: none;
  border-bottom: 1px solid var(--border-gold-light);
  font-family: var(--font-body);
  color: var(--text-primary);
  overflow-wrap: break-word; /* long product names never force sideways scroll */
}
.woocommerce-checkout #order_review table.shop_table thead th {
  font-family: var(--font-heading);
  font-size: 0.85rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--gold);
  background: rgba(0, 191, 255, 0.05);
}
.woocommerce-checkout #order_review table.shop_table tfoot th {
  color: var(--text-secondary);
  font-weight: 500;
}
.woocommerce-checkout #order_review table.shop_table tfoot tr.order-total th,
.woocommerce-checkout #order_review table.shop_table tfoot tr.order-total td {
  border-bottom: none;
  background: rgba(0, 191, 255, 0.07);
  color: var(--text-primary);
  font-weight: 700;
  font-size: 1.05rem;
}
.woocommerce-checkout #order_review table.shop_table tfoot tr.order-total .woocommerce-Price-amount {
  color: var(--gold);
}

/* --- Validation error / notice banners: theme-dark instead of default
   white (base .woocommerce-error colors are set earlier; this shapes the
   checkout banner + its list items). --- */
.woocommerce-checkout ul.woocommerce-error,
.woocommerce-checkout .woocommerce-error,
.woocommerce-checkout .woocommerce-message,
.woocommerce-checkout .woocommerce-info {
  padding: 1rem 1.25rem 1rem 2.75rem;
  margin-bottom: 1.5rem;
  border: 1px solid rgba(231, 76, 60, 0.35);
  border-radius: 8px;
  font-family: var(--font-body);
  font-size: 0.9rem;
  line-height: 1.55;
}
.woocommerce-checkout .woocommerce-message,
.woocommerce-checkout .woocommerce-info {
  border-color: var(--border-gold);
}
.woocommerce-checkout ul.woocommerce-error li {
  margin: 0.25rem 0;
}
.woocommerce-checkout .woocommerce-error a,
.woocommerce-checkout .woocommerce-message a,
.woocommerce-checkout .woocommerce-info a {
  color: var(--gold);
}

/* --- ~380px safety: table + banner text can never force sideways scroll.
   (Width/float resets that used to live here are now global — the
   single-column rules above apply at all widths.) --- */
@media (max-width: 600px) {
  .woocommerce-checkout #order_review table.shop_table th,
  .woocommerce-checkout #order_review table.shop_table td {
    padding: 0.7rem 0.75rem;
    font-size: 0.875rem;
    /* 'anywhere' (unlike break-word) shrinks min-content width, so a long
       unbroken product/SKU token can't widen the table past the viewport. */
    overflow-wrap: anywhere;
  }
  .woocommerce-checkout ul.woocommerce-error,
  .woocommerce-checkout .woocommerce-error,
  .woocommerce-checkout .woocommerce-message,
  .woocommerce-checkout .woocommerce-info {
    overflow-wrap: anywhere; /* long emails in validation messages wrap */
  }
}

/* --- Reduced motion: strip the transitions/transform introduced for
   checkout controls. --- */
@media (prefers-reduced-motion: reduce) {
  .woocommerce-checkout #payment #place_order,
  .woocommerce-checkout #payment ul.payment_methods li.wc_payment_method,
  .woocommerce-checkout form.checkout .form-row input.input-text,
  .woocommerce-checkout form.checkout .form-row select,
  .woocommerce-checkout form.checkout .form-row textarea {
    transition: none !important;
  }
  .woocommerce-checkout #payment #place_order:hover,
  .woocommerce-checkout #payment #place_order:active {
    transform: none;
  }
}

/* ===== CATALOG/ARCHIVE PAGE ===== */
.catalog-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  justify-content: center;
  margin-bottom: 3rem;
}

/* Pricing-context strip above the catalog grid */
.catalog-price-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  justify-content: center;
  align-items: stretch;
  margin-bottom: 2.5rem;
  padding: 1rem 1.25rem;
  background: rgba(13, 19, 33, 0.6);
  border-left: 2px solid var(--gold);
  border-radius: 4px;
}

.catalog-price-strip-item {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  font-family: var(--font-body);
  font-size: 0.82rem;
  color: var(--text-secondary);
  letter-spacing: 0.01em;
  white-space: nowrap;
}

.catalog-price-strip-item strong {
  font-family: var(--font-heading);
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--text-primary);
  text-transform: uppercase;
  font-size: 0.85rem;
}

.catalog-price-strip-item svg {
  flex-shrink: 0;
}

/* The kits strip item is a link (→ Kits catalog view) — keep its resting
   look identical to the other items, add a hover affordance only. */
a.catalog-price-strip-item:hover strong,
a.catalog-price-strip-item:focus-visible strong {
  color: var(--gold);
}

@media (max-width: 720px) {
  .catalog-price-strip {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.75rem;
  }
  .catalog-price-strip-item {
    white-space: normal;
  }
}

.filter-btn {
  padding: 0.5rem 1.25rem;
  background: transparent;
  border: 1px solid var(--border-gold-light);
  color: var(--text-secondary);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-family: var(--font-body);
  cursor: pointer;
  transition: all 0.3s ease;
}

.filter-btn:hover,
.filter-btn.active {
  background: rgba(0, 191, 255, 0.1);
  border-color: var(--gold);
  color: var(--gold);
}

/* ===== CATALOG CONTROLS (live search + sort dropdown) =====
   Lives directly above .catalog-filters. Visually matched to
   the filter-button row: same dark navy surface, same border
   treatment, same cyan focus glow. */
.catalog-controls {
  display: flex;
  align-items: stretch;
  gap: 0.75rem;
  margin-bottom: 1.5rem;
}

.catalog-search-wrap {
  position: relative;
  flex: 0 1 70%;
  display: flex;
  align-items: center;
}

.catalog-search-icon {
  position: absolute;
  left: 0.9rem;
  top: 50%;
  transform: translateY(-50%);
  color: var(--text-muted);
  pointer-events: none;
  transition: color 0.25s ease;
}

.catalog-search-wrap:focus-within .catalog-search-icon {
  color: var(--gold);
}

.catalog-search-input {
  width: 100%;
  min-height: 48px;
  padding: 0.75rem 2.75rem 0.75rem 2.75rem;
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  border-radius: 8px;
  color: var(--text-primary);
  font-family: var(--font-body);
  /* 16px on mobile to prevent iOS auto-zoom on focus */
  font-size: 16px;
  font-weight: 500;
  letter-spacing: 0.01em;
  line-height: 1.4;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  transition: border-color 0.25s ease, box-shadow 0.25s ease, background 0.25s ease;
}

.catalog-search-input::placeholder {
  color: var(--text-muted);
  font-weight: 400;
  letter-spacing: 0.02em;
}

.catalog-search-input::-webkit-search-decoration,
.catalog-search-input::-webkit-search-cancel-button,
.catalog-search-input::-webkit-search-results-button,
.catalog-search-input::-webkit-search-results-decoration {
  -webkit-appearance: none;
          appearance: none;
}

.catalog-search-input:hover {
  border-color: var(--border-gold);
}

.catalog-search-input:focus,
.catalog-search-input:focus-visible {
  outline: none;
  border-color: var(--gold);
  background: var(--navy-hover);
  box-shadow: 0 0 0 3px rgba(0, 191, 255, 0.18);
}

.catalog-search-clear {
  position: absolute;
  right: 0.5rem;
  top: 50%;
  transform: translateY(-50%);
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  border-radius: 6px;
  color: var(--text-secondary);
  cursor: pointer;
  padding: 0;
  transition: color 0.2s ease, background 0.2s ease;
  -webkit-tap-highlight-color: transparent;
}

.catalog-search-clear:hover,
.catalog-search-clear:focus-visible {
  color: var(--gold);
  background: rgba(0, 191, 255, 0.1);
  outline: none;
}

.catalog-search-clear[hidden] {
  display: none;
}

/* ===== SINGLES/KITS SEGMENTED TOGGLE =====
   Sits between the search bar and the Sort dropdown (stacked full-width on
   mobile, inline on desktop). Two equal buttons; the active side is solid
   cyan with dark text — the same cyan CTA family as .filter-btn.active —
   and its href taps back to All Products. No animation beyond the standard
   border/background transitions used by the neighboring controls. */
.catalog-view-toggle {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.75rem;
  flex: 0 0 auto;
}

.catalog-view-toggle a {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 0;
  min-height: 48px;
  padding: 0.85rem 1rem;
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  border-radius: 8px;
  color: var(--text-secondary);
  font-family: var(--font-body);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-align: center;
  white-space: nowrap;
  transition: border-color 0.25s ease, background 0.25s ease, color 0.25s ease;
  -webkit-tap-highlight-color: transparent;
}

.catalog-view-toggle a:hover {
  border-color: var(--gold);
  color: var(--gold);
  background: rgba(0, 191, 255, 0.1);
}

.catalog-view-toggle a:focus-visible {
  outline: none;
  border-color: var(--gold);
  box-shadow: 0 0 0 3px rgba(0, 191, 255, 0.18);
}

.catalog-view-toggle a.active {
  background: var(--gold);
  border-color: var(--gold);
  color: var(--navy);
  font-weight: 700;
}

.catalog-view-toggle a.active:hover,
.catalog-view-toggle a.active:focus-visible {
  background: var(--gold-light);
  border-color: var(--gold-light);
  color: var(--navy);
}

/* Very narrow phones: step the label down instead of letting
   "KITS (10-PACKS)" wrap or overflow its button. */
@media (max-width: 399px) {
  .catalog-view-toggle a {
    font-size: 0.72rem;
    letter-spacing: 0.05em;
    padding: 0.85rem 0.5rem;
  }
}

/* Desktop row: the toggle keeps its natural width; floor the search and
   sort widths so the new third sibling can't squeeze them unusably. */
@media (min-width: 768px) {
  .catalog-search-wrap {
    min-width: 180px;
  }
  .catalog-sort {
    min-width: 140px;
  }
}

.catalog-sort {
  flex: 0 1 30%;
  min-height: 48px;
  padding: 0.75rem 2.5rem 0.75rem 1rem;
  background-color: var(--navy-card);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2300BFFF' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 1rem center;
  background-size: 14px 14px;
  border: 1px solid var(--border-gold-light);
  border-radius: 8px;
  color: var(--text-primary);
  font-family: var(--font-body);
  font-size: 16px;
  font-weight: 500;
  letter-spacing: 0.01em;
  line-height: 1.4;
  cursor: pointer;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  transition: border-color 0.25s ease, box-shadow 0.25s ease, background-color 0.25s ease;
}

.catalog-sort:hover {
  border-color: var(--border-gold);
}

.catalog-sort:focus,
.catalog-sort:focus-visible {
  outline: none;
  border-color: var(--gold);
  background-color: var(--navy-hover);
  box-shadow: 0 0 0 3px rgba(0, 191, 255, 0.18);
}

.catalog-sort option {
  background: var(--navy-card);
  color: var(--text-primary);
}

@media (max-width: 767px) {
  .catalog-controls {
    flex-direction: column;
    gap: 0.625rem;
  }
  .catalog-search-wrap,
  .catalog-sort {
    flex: 1 1 100%;
    width: 100%;
  }
}

@media (min-width: 768px) {
  .catalog-search-input,
  .catalog-sort {
    /* On larger screens we can use a slightly smaller font without
       triggering iOS zoom (since the iOS zoom-on-focus rule only
       fires when font-size < 16px AND the device is in portrait
       mobile width). Keep 16px to be safe across all viewports. */
    font-size: 16px;
  }
}

/* Accessible label for the screen-reader-only inputs above the row */
.catalog-controls .screen-reader-text {
  border: 0;
  clip: rect(1px, 1px, 1px, 1px);
  -webkit-clip-path: inset(50%);
          clip-path: inset(50%);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 1px;
  word-wrap: normal !important;
}

.catalog-no-results {
  text-align: center;
  color: var(--text-secondary);
  font-family: var(--font-body);
  font-size: 1.1rem;
  padding: 4rem 0;
  margin: 0;
}

/* ===== SCROLLBAR ===== */
::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: var(--navy);
}

::-webkit-scrollbar-thumb {
  background: rgba(0, 191, 255, 0.2);
}

::-webkit-scrollbar-thumb:hover {
  background: rgba(0, 191, 255, 0.4);
}

/* ===== WP BLOCK EDITOR COMPATIBILITY ===== */
.wp-block-image img {
  max-width: 100%;
  height: auto;
}

.entry-content {
  color: var(--text-secondary);
  font-family: var(--font-body);
  line-height: 1.7;
}

.entry-content h2,
.entry-content h3,
.entry-content h4 {
  color: var(--text-primary);
  margin-top: 2rem;
  margin-bottom: 1rem;
}

.entry-content p {
  margin-bottom: 1rem;
}

.entry-content a {
  color: var(--gold);
}

.entry-content a:hover {
  color: var(--gold-light);
}

/* ===== EMPTY CART PAGE STYLING ===== */
.woocommerce-cart .woocommerce {
  padding: 4rem 1rem;
  max-width: 900px;
  margin: 0 auto;
}

.woocommerce-cart .cart-empty.woocommerce-info {
  background: transparent !important;
  border: none !important;
  text-align: center;
  font-family: var(--font-heading);
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--text-primary);
  padding: 3rem 2rem 1rem;
}

.woocommerce-cart .cart-empty.woocommerce-info::before {
  content: none !important;
}

/* Hide the default sad emoji / icon */
.woocommerce-cart .woocommerce-info::before {
  display: none !important;
}

/* Style the "Return to shop" button */
.woocommerce-cart .return-to-shop {
  text-align: center;
  margin-top: 1.5rem;
  margin-bottom: 3rem;
}

.woocommerce-cart .return-to-shop .button {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.875rem 2.5rem !important;
  background: linear-gradient(135deg, #00BFFF, #33CCFF) !important;
  color: var(--navy) !important;
  font-family: var(--font-heading) !important;
  font-weight: 700 !important;
  font-size: 0.85rem !important;
  letter-spacing: 0.15em !important;
  text-transform: uppercase !important;
  border: none !important;
  transition: all 0.3s ease !important;
}

.woocommerce-cart .return-to-shop .button:hover {
  background: linear-gradient(135deg, #33CCFF, #66D9FF) !important;
  transform: translateY(-2px);
  box-shadow: 0 8px 25px rgba(0, 191, 255, 0.3);
}

/* Style the "New in store" cross-sells section */
.woocommerce-cart .cross-sells,
.woocommerce-cart .cart_totals {
  background: var(--navy-card);
  border: 1px solid var(--border-gold-light);
  padding: 2rem;
  margin-top: 2rem;
}

.woocommerce-cart .cross-sells h2,
.woocommerce-cart .cart_totals h2 {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 1.25rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-primary);
  margin-bottom: 1.5rem;
  text-align: center;
}

/* Cross-sell product grid */
.woocommerce-cart .cross-sells ul.products {
  display: grid !important;
  grid-template-columns: repeat(4, 1fr) !important;
  gap: 1.5rem !important;
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
}

@media (max-width: 768px) {
  .woocommerce-cart .cross-sells ul.products {
    grid-template-columns: repeat(2, 1fr) !important;
  }
}

.woocommerce-cart .cross-sells ul.products li.product {
  background: var(--navy-light) !important;
  border: 1px solid var(--border-gold-light) !important;
  padding: 1rem !important;
  text-align: center;
  transition: all 0.3s ease;
  float: none !important;
  width: auto !important;
  margin: 0 !important;
}

.woocommerce-cart .cross-sells ul.products li.product:hover {
  border-color: rgba(0, 191, 255, 0.3) !important;
  transform: translateY(-3px);
}

.woocommerce-cart .cross-sells ul.products li.product a img {
  border-radius: 0;
  margin-bottom: 0.75rem;
}

.woocommerce-cart .cross-sells ul.products li.product .woocommerce-loop-product__title {
  font-family: var(--font-heading) !important;
  font-size: 0.9rem !important;
  font-weight: 600 !important;
  color: var(--text-primary) !important;
  margin-bottom: 0.5rem;
}

.woocommerce-cart .cross-sells ul.products li.product .price {
  color: var(--gold) !important;
  font-family: var(--font-heading) !important;
  font-weight: 700 !important;
  font-size: 1rem !important;
}

.woocommerce-cart .cross-sells ul.products li.product .button {
  display: inline-block;
  margin-top: 0.75rem;
  padding: 0.5rem 1.25rem !important;
  background: transparent !important;
  border: 1px solid var(--border-gold-light) !important;
  color: var(--gold) !important;
  font-family: var(--font-heading) !important;
  font-size: 0.7rem !important;
  font-weight: 600 !important;
  letter-spacing: 0.1em !important;
  text-transform: uppercase !important;
  transition: all 0.3s ease !important;
}

.woocommerce-cart .cross-sells ul.products li.product .button:hover {
  background: rgba(0, 191, 255, 0.1) !important;
  border-color: var(--gold) !important;
}

/* Remove default WooCommerce cart page heading white background */
.woocommerce-cart .page-header,
.woocommerce-cart .entry-title {
  color: var(--text-primary);
}

/* Cart table when items are present */
.woocommerce-cart table.shop_table {
  background: var(--navy-card) !important;
  border: 1px solid var(--border-gold-light) !important;
}

.woocommerce-cart table.shop_table td.product-remove a {
  color: #e74c3c !important;
}

.woocommerce-cart table.shop_table td.product-name a {
  color: var(--text-primary) !important;
  font-family: var(--font-heading);
  font-weight: 600;
}

.woocommerce-cart table.shop_table td.product-name a:hover {
  color: var(--gold) !important;
}

.woocommerce-cart table.shop_table td.product-price,
.woocommerce-cart table.shop_table td.product-subtotal {
  color: var(--gold) !important;
  font-family: var(--font-heading);
  font-weight: 700;
}

.woocommerce-cart table.shop_table input.qty {
  background: transparent !important;
  border: 1px solid var(--border-gold-light) !important;
  color: var(--text-primary) !important;
  width: 60px;
  text-align: center;
  padding: 0.5rem;
}

/* Cart totals sidebar */
.woocommerce-cart .cart_totals table {
  border: none !important;
}

.woocommerce-cart .cart_totals table th {
  color: var(--text-secondary) !important;
  font-family: var(--font-heading);
  font-weight: 600;
  letter-spacing: 0.05em;
}

.woocommerce-cart .cart_totals table td {
  color: var(--text-primary) !important;
}

.woocommerce-cart .cart_totals .order-total td {
  color: var(--gold) !important;
  font-weight: 700;
}

/* Checkout button in cart */
.woocommerce-cart .wc-proceed-to-checkout a.checkout-button {
  background: linear-gradient(135deg, #00BFFF, #33CCFF) !important;
  color: var(--navy) !important;
  font-family: var(--font-heading) !important;
  font-weight: 700 !important;
  letter-spacing: 0.15em !important;
  text-transform: uppercase !important;
  border: none !important;
  padding: 1rem 2rem !important;
  transition: all 0.3s ease !important;
}

.woocommerce-cart .wc-proceed-to-checkout a.checkout-button:hover {
  background: linear-gradient(135deg, #33CCFF, #66D9FF) !important;
  transform: translateY(-2px);
  box-shadow: 0 8px 25px rgba(0, 191, 255, 0.3);
}

/* ===== SITE TITLE FIX ===== */
/* Override WordPress default page titles to use theme font */
.page-title,
.woocommerce-products-header__title,
.woocommerce-loop-product__title,
.entry-title {
  font-family: var(--font-heading);
  color: var(--text-primary);
}

/* ===== ORDER RECEIVED / THANK YOU PAGE ===== */
.woocommerce-order-received .woocommerce {
  padding: 2rem 1rem;
  max-width: 900px;
  margin: 0 auto;
}

.woocommerce-order-received h2 {
  font-family: var(--font-heading);
  color: var(--text-primary);
}

.woocommerce-order-received .woocommerce-thankyou-order-received {
  color: var(--gold);
  font-family: var(--font-heading);
  font-size: 1.25rem;
}

.woocommerce-order-received table {
  background: var(--navy-card) !important;
  border: 1px solid var(--border-gold-light) !important;
}

.woocommerce-order-received table th {
  color: var(--gold) !important;
  background: var(--navy-card) !important;
}

.woocommerce-order-received table td {
  color: var(--text-primary) !important;
}

/* ===== MY ACCOUNT PAGE ===== */
.woocommerce-account .woocommerce {
  padding: 2rem 1rem;
}

.woocommerce-account .woocommerce-MyAccount-navigation ul {
  list-style: none;
  padding: 0;
}

.woocommerce-account .woocommerce-MyAccount-navigation ul li a {
  display: block;
  padding: 0.75rem 1rem;
  color: var(--text-secondary);
  border-bottom: 1px solid var(--border-gold-light);
  font-family: var(--font-body);
  transition: all 0.3s ease;
}

.woocommerce-account .woocommerce-MyAccount-navigation ul li.is-active a,
.woocommerce-account .woocommerce-MyAccount-navigation ul li a:hover {
  color: var(--gold);
  background: rgba(0, 191, 255, 0.05);
}

/* ===== COUPON FORM ===== */
.woocommerce-cart .coupon input.input-text {
  background: transparent !important;
  border: 1px solid var(--border-gold-light) !important;
  color: var(--text-primary) !important;
  padding: 0.5rem 1rem;
  font-family: var(--font-body);
}

.woocommerce-cart .coupon input.input-text::placeholder {
  color: var(--text-muted) !important;
}

.woocommerce-cart .coupon .button {
  background: transparent !important;
  border: 1px solid var(--border-gold-light) !important;
  color: var(--gold) !important;
}

.woocommerce-cart .coupon .button:hover {
  background: rgba(0, 191, 255, 0.1) !important;
  border-color: var(--gold) !important;
}

/* Update cart button */
.woocommerce-cart button[name="update_cart"] {
  background: transparent !important;
  border: 1px solid var(--border-gold-light) !important;
  color: var(--text-secondary) !important;
  font-family: var(--font-heading) !important;
  letter-spacing: 0.1em !important;
  text-transform: uppercase !important;
}

.woocommerce-cart button[name="update_cart"]:hover {
  border-color: var(--gold) !important;
  color: var(--gold) !important;
}

/* ===== WOOCOMMERCE BLOCKS CHECKOUT (Block-based checkout) ===== */
/* These selectors target the newer WooCommerce Blocks checkout, not the classic checkout */

/* Main checkout block wrapper */
.wp-block-woocommerce-checkout,
.wc-block-checkout,
.wc-block-checkout__main,
.wc-block-checkout__sidebar {
  background: transparent !important;
  color: var(--text-primary) !important;
}

/* All input fields in blocks checkout */
.wc-block-components-text-input input,
.wc-block-components-text-input input[type="text"],
.wc-block-components-text-input input[type="email"],
.wc-block-components-text-input input[type="tel"],
.wc-block-components-text-input input[type="number"],
.wc-block-components-text-input input[type="password"],
.wc-block-components-select select,
.wc-block-components-country-input input,
.wc-block-components-state-input input,
.wc-block-checkout input[type="text"],
.wc-block-checkout input[type="email"],
.wc-block-checkout input[type="tel"],
.wc-block-checkout input[type="number"],
.wc-block-checkout input[type="password"],
.wc-block-checkout select,
.wc-block-checkout textarea {
  background: transparent !important;
  background-color: rgba(13, 19, 33, 0.8) !important;
  border: 1px solid rgba(0, 191, 255, 0.2) !important;
  border-radius: 0 !important;
  color: var(--text-primary) !important;
  font-family: var(--font-body) !important;
  font-size: 16px !important; /* 2.8.2: no iOS focus-zoom now that pinch-zoom is allowed */
  padding: 1.5rem 1rem 0.5rem !important;
  height: auto !important;
  line-height: 1.4 !important;
}

/* Floating label positioning for WooCommerce Blocks */
.wc-block-components-text-input label {
  position: absolute !important;
  top: 0.4rem !important;
  left: 1rem !important;
  font-size: 0.8125rem !important; /* 2.8.2 */
  color: var(--text-secondary) !important;
  pointer-events: none !important;
  transition: all 0.2s ease !important;
}

/* When input has a value or is focused, keep label small at top */
.wc-block-components-text-input.is-active label {
  top: 0.4rem !important;
  font-size: 0.8125rem !important; /* 2.8.2 */
  color: var(--text-secondary) !important;
}

.wc-block-components-text-input input:focus,
.wc-block-components-select select:focus,
.wc-block-checkout input:focus,
.wc-block-checkout select:focus,
.wc-block-checkout textarea:focus {
  border-color: var(--gold) !important;
  outline: none !important;
  box-shadow: 0 0 0 1px rgba(0, 191, 255, 0.2) !important;
}

/* Labels */
.wc-block-components-text-input label,
.wc-block-components-select label,
.wc-block-checkout label,
.wc-block-components-form label {
  color: var(--text-secondary) !important;
  font-family: var(--font-body) !important;
  font-size: 0.8125rem !important; /* 2.8.2 */
  letter-spacing: 0.05em !important;
}

/* Placeholder text */
.wc-block-components-text-input input::placeholder,
.wc-block-checkout input::placeholder,
.wc-block-checkout textarea::placeholder {
  color: var(--text-muted) !important;
}

/* Section headings (Billing address, Payment options) */
.wc-block-checkout h2,
.wc-block-checkout h3,
.wc-block-checkout .wc-block-components-title,
.wc-block-checkout .wp-block-woocommerce-checkout-billing-address-block h2,
.wc-block-checkout .wp-block-woocommerce-checkout-payment-block h2,
.wc-block-checkout .wc-block-checkout__step-title {
  color: var(--text-primary) !important;
  font-family: var(--font-heading) !important;
  font-weight: 700 !important;
  letter-spacing: 0.05em !important;
}

/* Country/State select wrappers (these use a custom component) */
.wc-block-components-country-input .wc-block-components-combobox input,
.wc-block-components-state-input .wc-block-components-combobox input,
.wc-block-components-combobox input {
  background: rgba(13, 19, 33, 0.8) !important;
  background-color: rgba(13, 19, 33, 0.8) !important;
  border: 1px solid rgba(0, 191, 255, 0.2) !important;
  color: var(--text-primary) !important;
  border-radius: 0 !important;
}

/* Combobox dropdown list */
.wc-block-components-combobox .wc-block-components-combobox-control__suggestions-container {
  background: var(--navy-card) !important;
  border: 1px solid rgba(0, 191, 255, 0.2) !important;
}

.wc-block-components-combobox .wc-block-components-combobox-control__item {
  color: var(--text-primary) !important;
  background: var(--navy-card) !important;
}

.wc-block-components-combobox .wc-block-components-combobox-control__item:hover,
.wc-block-components-combobox .wc-block-components-combobox-control__item[aria-selected="true"] {
  background: rgba(0, 191, 255, 0.1) !important;
  color: var(--gold) !important;
}

/* Payment section */
.wc-block-components-payment-method-label,
.wc-block-components-payment-method-label__label {
  color: var(--text-primary) !important;
  font-family: var(--font-body) !important;
}

.wc-block-components-radio-control__option {
  color: var(--text-primary) !important;
}

/* Payment container background */
.wc-block-checkout .wp-block-woocommerce-checkout-payment-block,
.wc-block-components-payment-methods {
  background: var(--navy-card) !important;
  border: 1px solid rgba(0, 191, 255, 0.1) !important;
}

/* Credit card / Stripe iframe container */
.wc-block-components-payment-method-icons,
.wc-block-components-payment-method-label__logo-container {
  background: transparent !important;
}

/* Card input row (Stripe Elements) */
.wc-block-checkout .StripeElement,
.wc-block-checkout .stripe-card-element,
.wc-block-checkout [class*="stripe"] input {
  background: rgba(13, 19, 33, 0.8) !important;
  border: 1px solid rgba(0, 191, 255, 0.2) !important;
  color: var(--text-primary) !important;
}

/* Order summary sidebar */
.wc-block-checkout__sidebar .wc-block-components-order-summary,
.wc-block-order-summary,
.wc-block-components-order-summary__content {
  background: var(--navy-card) !important;
  border: 1px solid rgba(0, 191, 255, 0.1) !important;
  color: var(--text-primary) !important;
}

.wc-block-components-order-summary-item__description,
.wc-block-components-order-summary-item__full-name,
.wc-block-components-totals-item__label,
.wc-block-components-totals-item__value {
  color: var(--text-primary) !important;
}

.wc-block-components-totals-item__value strong {
  color: var(--gold) !important;
}

/* Checkbox styling */
.wc-block-checkout input[type="checkbox"] {
  accent-color: var(--gold) !important;
}

.wc-block-components-checkbox .wc-block-components-checkbox__label {
  color: var(--text-secondary) !important;
  font-family: var(--font-body) !important;
  font-size: 0.875rem !important;
}

/* "Place order" / submit button */
.wc-block-checkout .wc-block-components-checkout-place-order-button,
.wc-block-checkout button[type="submit"],
.wp-block-woocommerce-checkout-order-summary-block .wc-block-components-checkout-place-order-button {
  background: linear-gradient(135deg, #00BFFF, #33CCFF) !important;
  color: var(--navy) !important;
  font-family: var(--font-heading) !important;
  font-weight: 700 !important;
  letter-spacing: 0.15em !important;
  text-transform: uppercase !important;
  border: none !important;
  border-radius: 0 !important;
  padding: 1rem 2rem !important;
  transition: all 0.3s ease !important;
  width: 100% !important;
}

.wc-block-checkout .wc-block-components-checkout-place-order-button:hover,
.wc-block-checkout button[type="submit"]:hover {
  background: linear-gradient(135deg, #33CCFF, #66D9FF) !important;
  transform: translateY(-2px);
  box-shadow: 0 8px 25px rgba(0, 191, 255, 0.3) !important;
}

/* "Add a note to your order" textarea */
.wc-block-checkout .wc-block-checkout__add-note textarea {
  background: rgba(13, 19, 33, 0.8) !important;
  border: 1px solid rgba(0, 191, 255, 0.2) !important;
  color: var(--text-primary) !important;
  border-radius: 0 !important;
}

/* Step descriptions */
.wc-block-components-form-step__description {
  color: var(--text-secondary) !important;
  font-family: var(--font-body) !important;
}
/* 2.8.2: validation errors get a real error colour and the field cue back
   (the !important input borders above used to wipe WooCommerce's red border). */
.wc-block-components-validation-error p {
  color: #FF7B7B !important;
  font-family: var(--font-body) !important;
  font-size: 0.875rem !important;
  font-weight: 600 !important;
}
.wc-block-components-text-input.has-error input,
.wc-block-components-select.has-error select,
.wc-block-components-country-input.has-error input,
.wc-block-components-state-input.has-error input,
.wc-block-components-combobox.has-error input {
  border-color: #FF7B7B !important;
  box-shadow: 0 0 0 1px rgba(255, 123, 123, 0.35) !important;
}
.wc-block-components-text-input.has-error label {
  color: #FF7B7B !important;
}

/* "By proceeding..." legal text */
.wc-block-checkout__terms p,
.wc-block-checkout .wc-block-checkout__terms {
  color: var(--text-muted) !important;
  font-family: var(--font-body) !important;
  font-size: 0.8rem !important;
}

.wc-block-checkout__terms a {
  color: var(--gold) !important;
}

/* "Add apartment, suite, etc." link */
.wc-block-checkout .wc-block-components-address-form__address_2-toggle {
  color: var(--gold) !important;
  font-family: var(--font-body) !important;
  font-size: 0.875rem !important;
}

/* Coupon code input in blocks */
.wc-block-components-totals-coupon__form input {
  background: rgba(13, 19, 33, 0.8) !important;
  border: 1px solid rgba(0, 191, 255, 0.2) !important;
  color: var(--text-primary) !important;
  border-radius: 0 !important;
}

/* Spinner / loading overlay */
.wc-block-checkout .wc-block-components-loading-mask__children {
  opacity: 0.5;
}

/* Step numbers in multi-step checkout */
.wc-block-checkout .wc-block-checkout__step-number {
  background: var(--gold) !important;
  color: var(--navy) !important;
  font-family: var(--font-heading) !important;
}

/* ===== QUANTITY INPUT ARROWS: NEON BLUE ===== */
.product-add-to-cart-wrap .quantity input[type="number"]::-webkit-inner-spin-button,
.product-add-to-cart-wrap .quantity input[type="number"]::-webkit-outer-spin-button {
  -webkit-appearance: inner-spin-button !important;
  opacity: 1 !important;
  filter: invert(60%) sepia(90%) saturate(2000%) hue-rotate(160deg) brightness(110%);
  cursor: pointer;
}

.product-add-to-cart-wrap .quantity input[type="number"] {
  -moz-appearance: textfield;
  color: var(--gold) !important;
}

/* Fallback: style the entire qty input border to match */
.product-add-to-cart-wrap .quantity .qty {
  border-color: var(--gold) !important;
  color: var(--gold) !important;
}

/* ===== CHECKOUT FIELD TITLES: CENTERED ===== */
.wc-block-checkout .wc-block-checkout__step-title,
.wc-block-checkout h2,
.wc-block-checkout h3,
.wc-block-components-title {
  text-align: center !important;
}

/* ===== EMPTY CART: CLEAN SIMPLE MESSAGE ===== */
/* Override WooCommerce blocks empty cart */
.wc-block-cart__empty-cart__title,
.wc-empty-cart-page .wc-block-cart__empty-cart__title {
  font-family: var(--font-heading) !important;
  font-size: 1.5rem !important;
  color: var(--text-primary) !important;
  text-align: center !important;
  letter-spacing: 0.05em !important;
}

/* Hide the sad face emoji/icon from WooCommerce blocks cart */
.wc-block-cart__empty-cart__image,
.wc-block-cart .wc-block-cart__empty-cart__image,
.woocommerce-cart .wc-block-cart__empty-cart__image,
.wc-block-cart__empty-cart__image svg,
.wc-block-cart__empty-cart__image img {
  display: none !important;
}

/* Also target the classic empty cart emoji */
.woocommerce-cart .cart-empty::before,
.woocommerce-cart .woocommerce-info::before {
  display: none !important;
  content: none !important;
}

/* ===== ACCOUNT ICON IN HEADER ===== */
.nav-account-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--text-primary);
  padding: 0.5rem;
  margin-right: 0.5rem;
  transition: color 0.3s ease;
  position: relative;
}

.nav-account-icon:hover {
  color: var(--gold);
}

.nav-account-icon svg {
  width: 22px;
  height: 22px;
}

.header-right-actions {
  display: flex;
  align-items: center;
  gap: 0.25rem;
}

/* ===== SIMPLE ACCOUNT PAGE ===== */
.account-page-container {
  max-width: 500px;
  margin: 0 auto;
  padding: 4rem 2rem;
  text-align: center;
}

.account-page-container h1 {
  font-family: var(--font-heading);
  font-size: 2rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-primary);
  margin-bottom: 0.5rem;
}

.account-page-container .account-email {
  font-family: var(--font-body);
  font-size: 1rem;
  color: var(--gold);
  margin-bottom: 2rem;
}

.account-page-container .account-links {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  align-items: center;
}

.account-page-container .account-link {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.75rem 2rem;
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 0.85rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border: 1px solid var(--border-gold);
  color: var(--text-primary);
  background: transparent;
  transition: all 0.3s ease;
  text-decoration: none;
  min-width: 250px;
  justify-content: center;
}

.account-page-container .account-link:hover {
  border-color: var(--gold);
  color: var(--gold);
  background: rgba(0, 191, 255, 0.05);
}

.account-page-container .account-link.sign-out {
  background: linear-gradient(135deg, #00BFFF, #33CCFF);
  color: var(--navy);
  border: none;
  font-weight: 700;
}

.account-page-container .account-link.sign-out:hover {
  background: linear-gradient(135deg, #33CCFF, #66D9FF);
  transform: translateY(-2px);
}

.account-page-container .account-not-signed-in {
  color: var(--text-secondary);
  font-family: var(--font-body);
  font-size: 1rem;
  margin-bottom: 2rem;
}

/* ===== ORDER SUMMARY SIDEBAR: FIX WIDTH & TEXT WRAPPING ===== */
/* Give the sidebar more room so product names and prices don't break */
.wc-block-checkout__sidebar {
  min-width: 280px !important;
}

/* Ensure the order summary product items have proper layout */
.wc-block-components-order-summary-item {
  display: flex !important;
  gap: 12px !important;
  align-items: flex-start !important;
}

/* Product image, fixed size, don't shrink */
.wc-block-components-order-summary-item__image {
  flex-shrink: 0 !important;
  width: 60px !important;
  min-width: 60px !important;
}

/* Product description area. Allow it to grow and don't break words */
.wc-block-components-order-summary-item__description {
  flex: 1 !important;
  min-width: 0 !important;
  word-break: normal !important;
  overflow-wrap: normal !important;
}

/* Product name. Don't wrap mid-word */
.wc-block-components-order-summary-item__full-name,
.wc-block-components-order-summary-item .wc-block-components-product-name {
  white-space: normal !important;
  word-break: normal !important;
  overflow-wrap: normal !important;
  font-size: 0.85rem !important;
  line-height: 1.3 !important;
}

/* Prices. Never break mid-number */
.wc-block-components-order-summary-item .wc-block-components-product-price,
.wc-block-components-order-summary-item .price,
.wc-block-components-order-summary-item del,
.wc-block-components-order-summary-item ins,
.wc-block-components-order-summary-item .wc-block-components-sale-badge,
.wc-block-components-order-summary-item .wc-block-components-product-badge {
  white-space: nowrap !important;
  word-break: normal !important;
}

/* Product metadata (like "Product Overview"). Allow wrapping but not mid-word */
.wc-block-components-order-summary-item .wc-block-components-product-metadata,
.wc-block-components-order-summary-item .wc-block-components-product-metadata__description {
  word-break: normal !important;
  overflow-wrap: break-word !important;
  font-size: 0.75rem !important;
  line-height: 1.3 !important;
}

/* Totals row. Keep values on one line */
.wc-block-components-totals-item {
  display: flex !important;
  justify-content: space-between !important;
  align-items: baseline !important;
}

.wc-block-components-totals-item__value {
  white-space: nowrap !important;
  text-align: right !important;
}

/* ============================================
   COA TESTING PIPELINE
   ============================================ */
.coa-testing-pipeline {
  max-width: 64rem;
  margin: 0 auto;
  border: 1px solid rgba(201, 169, 97, 0.18);
  border-radius: 8px;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.02);
}
.coa-testing-row {
  display: grid;
  grid-template-columns: 1.4fr 1.3fr 1.2fr 0.9fr;
  gap: 1rem;
  padding: 1.1rem 1.5rem;
  align-items: flex-start;
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  font-size: 0.95rem;
}
.coa-testing-row:last-child {
  border-bottom: none;
}
.coa-testing-header {
  background: rgba(201, 169, 97, 0.06);
  font-family: 'Barlow Condensed', sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--gold);
  align-items: center;
}
.coa-testing-product {
  font-weight: 500;
  color: var(--text-primary, #ffffff);
  padding-top: 0.15rem;
}
.coa-testing-prelim {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  line-height: 1.3;
}
.coa-prelim-label {
  font-family: 'Barlow Condensed', sans-serif;
  text-transform: uppercase;
  font-size: 0.7rem;
  letter-spacing: 0.1em;
  color: var(--text-secondary);
  opacity: 0.7;
  margin-bottom: 0.1rem;
}
.coa-prelim-value {
  font-family: 'Barlow Condensed', sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  color: rgba(255, 255, 255, 0.88);
  letter-spacing: 0.02em;
}
.coa-testing-status {
  color: var(--text-secondary);
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.88rem;
  padding-top: 0.15rem;
}
.coa-status-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 6px rgba(201, 169, 97, 0.5);
  flex-shrink: 0;
  animation: coa-status-pulse 2.4s ease-in-out infinite;
}
@keyframes coa-status-pulse {
  0%, 100% { opacity: 0.7; }
  50% { opacity: 1; }
}
.coa-testing-expected {
  color: var(--text-secondary);
  font-size: 0.85rem;
  text-align: right;
  font-family: 'Barlow Condensed', sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding-top: 0.2rem;
}
@media (max-width: 740px) {
  .coa-testing-row {
    grid-template-columns: 1fr 1fr;
    gap: 0.75rem 1rem;
    padding: 1.25rem;
  }
  .coa-testing-header {
    display: none;
  }
  .coa-testing-product {
    grid-column: 1 / -1;
    font-size: 1rem;
    font-weight: 600;
    margin-bottom: 0.4rem;
  }
  .coa-testing-prelim {
    grid-column: 1 / -1;
    padding: 0.5rem 0.75rem;
    background: rgba(201, 169, 97, 0.04);
    border-radius: 6px;
    margin-bottom: 0.5rem;
  }
  .coa-testing-status {
    grid-column: 1;
    font-size: 0.85rem;
  }
  .coa-testing-expected {
    grid-column: 2;
    text-align: right;
    font-size: 0.78rem;
    opacity: 0.85;
  }
}

/* ===== BACTERIOSTATIC WATER ADD-ON ===== */
/* Product-page convenience button — understated, leans on .btn-outline. */
.product-bac-addon {
  margin-top: 1rem;
}
.product-bac-addon-btn {
  width: 100%;
  text-align: center;
  justify-content: center;
}
.product-bac-addon-note {
  margin: 0.5rem 0 0;
  font-size: 0.8rem;
  line-height: 1.5;
  color: var(--text-secondary);
  font-family: var(--font-body);
  text-align: center;
}

/* Block-cart / checkout nudge — injected by js/bac-water-cart.js. */
#gsr-bac-nudge {
  margin: 1rem 0;
  padding: 0.9rem 1rem;
  border: 1px solid rgba(0, 191, 255, 0.2);
  border-radius: 0.5rem;
  background: var(--navy-card);
  font-family: var(--font-body);
}
#gsr-bac-nudge .gsr-bac-text {
  margin: 0;
  font-size: 0.85rem;
  line-height: 1.5;
  color: var(--text-secondary);
}
#gsr-bac-nudge .gsr-bac-strong {
  color: var(--text-primary);
  font-weight: 600;
}
#gsr-bac-nudge .gsr-bac-bar {
  height: 4px;
  margin-top: 0.6rem;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.08);
  overflow: hidden;
}
#gsr-bac-nudge .gsr-bac-bar-fill {
  height: 100%;
  background: var(--gold);
  transition: width 0.3s ease;
}
#gsr-bac-nudge .gsr-bac-add-free {
  margin-top: 0.7rem;
  width: 100%;
  text-align: center;
  justify-content: center;
}

/* BAC-only corrective notice (FIX 3b) — the cart can't check out yet. More
   prominent than the promotional nudge so the customer notices it: cyan
   accent border + subtle tint + brighter, heavier text. */
#gsr-bac-nudge.gsr-bac-nudge-warning {
  border-color: var(--gold);
  background: rgba(0, 191, 255, 0.08);
}
#gsr-bac-nudge .gsr-bac-warning {
  color: var(--text-primary);
  font-weight: 600;
}

/* ===== RESEARCH LIBRARY (gsr_guide) ===== */

/* Archive cards: reuse the product-card system; guides just add a wide
   thumbnail treatment and a date in the footer slot. */
.gsr-guide-card-image img {
  width: 100%;
  height: 11rem;
  object-fit: cover;
}

.gsr-guide-card-date {
  font-size: 0.75rem;
  color: var(--text-muted);
  font-family: var(--font-body);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

/* Single guide: reading-width column */
.gsr-guide-article {
  max-width: 740px;
  margin: 0 auto;
}

.gsr-guide-header {
  margin: 1.5rem 0 1rem;
}

.gsr-guide-title {
  font-family: var(--font-heading);
  font-size: clamp(1.9rem, 6vw, 2.75rem);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  line-height: 1.1;
  margin: 0.5rem 0 0.75rem;
  color: var(--text-primary);
}

.gsr-guide-date {
  font-size: 0.8rem;
  color: var(--text-muted);
  font-family: var(--font-body);
  margin-bottom: 1rem;
}

.gsr-guide-hero-image img {
  width: 100%;
  height: auto;
  border-radius: 4px;
  margin-bottom: 1.75rem;
}

/* Long-form content typography */
.gsr-guide-content {
  font-family: var(--font-body);
  color: var(--text-secondary);
  font-size: 1rem;
  line-height: 1.75;
}

.gsr-guide-content p {
  margin: 0 0 1.25rem;
}

.gsr-guide-content h2,
.gsr-guide-content h3 {
  font-family: var(--font-heading);
  color: var(--text-primary);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  line-height: 1.2;
  margin: 2.25rem 0 0.9rem;
}

.gsr-guide-content h2 { font-size: 1.6rem; }
.gsr-guide-content h3 { font-size: 1.25rem; }

.gsr-guide-content ul,
.gsr-guide-content ol {
  margin: 0 0 1.25rem;
  padding-left: 1.4rem;
}

.gsr-guide-content li {
  margin-bottom: 0.5rem;
}

.gsr-guide-content a {
  color: var(--gold);
  border-bottom: 1px solid rgba(0, 191, 255, 0.35);
}

.gsr-guide-content blockquote {
  margin: 1.5rem 0;
  padding: 0.75rem 1.25rem;
  border-left: 2px solid var(--gold);
  background: rgba(13, 19, 33, 0.6);
  color: var(--text-secondary);
}

.gsr-guide-content table {
  width: 100%;
  border-collapse: collapse;
  margin: 0 0 1.5rem;
  font-size: 0.9rem;
}

.gsr-guide-content th,
.gsr-guide-content td {
  padding: 0.6rem 0.75rem;
  border: 1px solid var(--border-gold-light);
  text-align: left;
}

.gsr-guide-content th {
  font-family: var(--font-heading);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-primary);
  background: rgba(13, 19, 33, 0.6);
  font-size: 0.8rem;
}

/* Wide tables scroll inside the column instead of breaking the layout */
.gsr-guide-content .wp-block-table {
  overflow-x: auto;
}

.gsr-guide-related {
  margin-top: 3rem;
}

/* Verified testing trust block */
.gsr-guide-verified {
  display: flex;
  gap: 1rem;
  align-items: flex-start;
  margin-top: 3rem;
  padding: 1.5rem;
}

.gsr-guide-verified-title {
  font-family: var(--font-heading);
  font-size: 1.1rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--gold);
  margin: 0 0 0.4rem;
}

.gsr-guide-verified-body {
  font-family: var(--font-body);
  color: var(--text-secondary);
  font-size: 0.9rem;
  line-height: 1.6;
  margin: 0 0 0.75rem;
}

/* Guide disclaimer reuses .footer-disclaimer typography; just space it */
.gsr-guide-disclaimer {
  margin-top: 2.5rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--border-gold-light);
}

/* ===== FURTHER READING (single product → guides) ===== */
.gsr-further-reading {
  margin-top: 3.5rem;
}

.gsr-further-reading-list {
  list-style: none;
  margin: 1.5rem 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.gsr-further-reading-item a {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.9rem 1.1rem;
  background: rgba(13, 19, 33, 0.6);
  border: 1px solid var(--border-gold-light);
  border-radius: 4px;
  font-family: var(--font-body);
  transition: border-color 0.25s ease, background 0.25s ease;
}

.gsr-further-reading-item a:hover,
.gsr-further-reading-item a:focus-visible {
  border-color: var(--gold);
  background: rgba(0, 191, 255, 0.06);
}

.gsr-further-reading-title {
  flex: 1 1 auto;
  color: var(--text-primary);
  font-weight: 600;
  font-size: 0.95rem;
}

.gsr-further-reading-date {
  color: var(--text-muted);
  font-size: 0.75rem;
  white-space: nowrap;
}

.gsr-further-reading-item svg {
  flex-shrink: 0;
  color: var(--gold);
}

/* ===== BATCH TRANSPARENCY NOTICE (products in GSR_BATCH_NOTICE_IDS) =====
   Gold-toned disclosure badge on catalog cards + the product hero image,
   and an explainer block on the product page. Static styling, no animation
   — modeled on the retired kit-tag pattern. */
.gsr-batch-badge {
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
  z-index: 2;
  background: rgba(201, 168, 76, 0.14);
  border: 1px solid rgba(201, 168, 76, 0.55);
  color: #e8c96a;
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0.25rem 0.75rem;
  border-radius: 999px;
  font-family: var(--font-body);
  white-space: nowrap;
  pointer-events: none;
}

/* The single-product hero image insets its badges at 1rem — match. */
.product-detail-image .gsr-batch-badge {
  top: 1rem;
  right: 1rem;
}

/* Notice + out-of-stock both sit top-right: keep the notice on top and
   drop the stock badge below it. !important beats the inline top:1rem on
   the single-product stock badge. */
.product-card-image .gsr-batch-badge ~ .out-of-stock-badge,
.product-detail-image .gsr-batch-badge ~ .out-of-stock-badge {
  top: 2.9rem !important;
}

.gsr-batch-notice {
  display: flex;
  gap: 0.75rem;
  align-items: flex-start;
  margin: 0 0 1.25rem;
  padding: 1rem 1.1rem;
  background: rgba(201, 168, 76, 0.07);
  border: 1px solid rgba(201, 168, 76, 0.35);
  border-left-width: 3px;
  border-radius: 4px;
}

.gsr-batch-notice svg {
  flex-shrink: 0;
  margin-top: 0.1rem;
}

.gsr-batch-notice-title {
  font-family: var(--font-heading);
  font-size: 0.85rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #e8c96a;
  margin: 0 0 0.3rem;
}

.gsr-batch-notice-body {
  font-family: var(--font-body);
  font-size: 0.85rem;
  line-height: 1.6;
  color: var(--text-secondary);
  margin: 0 0 0.45rem;
}

.gsr-batch-notice-body strong {
  color: var(--text-primary);
}

.gsr-batch-notice-link {
  font-family: var(--font-body);
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--gold);
  border-bottom: 1px solid rgba(0, 191, 255, 0.35);
  padding-bottom: 1px;
}

/* ===== COA QUICK VIEW (product page, mapped products) ===== */
.gsr-coa-quick {
  display: flex;
  align-items: center;
  gap: 0.85rem;
  margin: 0 0 1.25rem;
  padding: 0.9rem 1.1rem;
  min-height: 48px;
  background: rgba(0, 191, 255, 0.06);
  border: 1px solid rgba(0, 191, 255, 0.35);
  border-left-width: 3px;
  border-radius: 4px;
  transition: border-color 0.25s ease, background 0.25s ease;
}

.gsr-coa-quick:hover,
.gsr-coa-quick:focus-visible {
  border-color: var(--gold);
  background: rgba(0, 191, 255, 0.1);
}

.gsr-coa-quick svg {
  flex-shrink: 0;
}

.gsr-coa-quick svg:last-child {
  color: var(--gold);
  margin-left: auto;
}

.gsr-coa-quick-text {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}

.gsr-coa-quick-text strong {
  font-family: var(--font-heading);
  font-size: 0.9rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-primary);
}

.gsr-coa-quick-text span {
  font-family: var(--font-body);
  font-size: 0.78rem;
  color: var(--text-secondary);
}

/* ------------------------------------------------------------------
 * 2.8.1: offer reminder for ad-click visitors (js/gsr-offer.js)
 * ------------------------------------------------------------------ */
.gsr-offer-reminder {
  margin: 0 auto 1.25rem;
  max-width: 72rem;
  padding: 0.75rem 1rem;
  border: 1px solid var(--border-gold);
  border-radius: 12px;
  background: rgba(0, 191, 255, 0.08);
  color: var(--text-secondary);
  font-size: 0.9rem;
  text-align: center;
}
.gsr-offer-reminder strong {
  color: var(--gold-light);
  letter-spacing: 0.08em;
}

/* ==================================================================
 * 2.8.2: MOBILE FUNNEL (40-60 audience) — catalog, product, reminder, contact
 * ================================================================== */

/* Catalog on phones: the first product inside the first screen. */
@media (max-width: 767px) {
  .woocommerce-shop .page-hero,
  .tax-product_cat .page-hero,
  .tax-product_tag .page-hero {
    padding: 2rem 0 1.25rem;
  }
  .woocommerce-shop .page-hero-title,
  .tax-product_cat .page-hero-title,
  .tax-product_tag .page-hero-title {
    font-size: 2rem;
    margin-bottom: 0.5rem;
  }
  .woocommerce-shop .page-hero-desc,
  .tax-product_cat .page-hero-desc,
  .tax-product_tag .page-hero-desc {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    font-size: 0.95rem;
  }
  .woocommerce-shop .page-content,
  .tax-product_cat .page-content,
  .tax-product_tag .page-content {
    padding: 1.25rem 0 3rem;
  }
  .catalog-controls {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-bottom: 1rem;
  }
  .catalog-view-toggle {
    flex: 1 1 100%;
    order: -1;
  }
  .catalog-search-wrap {
    flex: 1 1 48%;
    width: auto;
    min-width: 0;
  }
  .catalog-sort {
    flex: 1 1 44%; /* review: 36% clipped the selected sort label */
    width: auto;
    min-width: 0;
  }
  .catalog-price-strip {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem 1rem;
    padding: 0.6rem 0.9rem;
    margin-bottom: 1.25rem;
  }
  .catalog-price-strip-item {
    font-size: 0.8rem;
    white-space: normal; /* review: nowrap overflowed the strip on ≤360px phones */
    min-width: 0;
  }
  .product-card-image {
    height: 13rem; /* review: brings the first kit's name/price closer to the first screen */
  }
}

/* Product page on phones: price and Add to Cart before the image. */
@media (max-width: 767px) {
  .product-detail-layout { gap: 1.25rem; }
  .product-detail-info-col { order: 1; }
  .product-detail-image-col { order: 2; }
  .product-detail-image { padding: 1rem; }
  .product-main-img { max-height: 16rem; }
  .product-detail-title {
    font-size: 1.6rem;
    letter-spacing: 0.03em;
    line-height: 1.1;
  }
  .product-add-to-cart-wrap .single_add_to_cart_button {
    font-size: 1rem;
    letter-spacing: 0.08em;
  }
}

/* Offer price anchor under prices (ad visitors only — js/gsr-offer.js). */
.gsr-offer-price {
  display: block;
  margin-top: 0.25rem;
  font-family: var(--font-body);
  font-size: 0.85rem;
  font-weight: 500;
  letter-spacing: 0;
  text-transform: none;
  color: var(--gold-light);
}

/* Tap-to-apply button inside the cart/checkout reminder. */
.gsr-offer-reminder .gsr-offer-apply {
  display: inline-block;
  margin-left: 0.6rem;
  padding: 0.55rem 1rem;
  min-height: 40px;
  border: 0;
  border-radius: 999px;
  font-family: var(--font-body);
  font-size: 0.875rem;
  font-weight: 600;
  cursor: pointer;
  background: linear-gradient(135deg, var(--gold), var(--gold-dark));
  color: var(--navy);
}
.gsr-offer-reminder .gsr-offer-apply:disabled {
  cursor: default;
  opacity: 0.85;
}
.gsr-offer-reminder.is-applied {
  border-color: rgba(51, 204, 255, 0.5);
}

/* Quiet contact line: mobile nav + checkout reship line. */
.mobile-nav-contact {
  padding: 0.5rem 1.5rem 1rem;
  border-top: 1px solid rgba(0, 191, 255, 0.1);
  display: flex;
  flex-direction: column;
}
.mobile-nav-contact-label {
  font-family: var(--font-body);
  font-size: 0.8rem;
  color: var(--text-muted);
  padding: 0.5rem 0 0.15rem;
}
.mobile-nav-contact a {
  display: block;
  padding: 0.6rem 0;
  font-family: var(--font-body);
  font-size: 0.9rem;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none; /* review: .mobile-nav a is uppercase + tracked; the address must stay readable */
  border-left: 0;
  overflow-wrap: anywhere;
  color: var(--text-secondary);
}
.gsr-checkout-contact {
  display: block;
  flex: 0 0 100%; /* review: the reship <p> is a flex row — take a full line under it */
  margin-top: 0.35rem;
  font-size: 0.85rem;
  color: var(--text-secondary);
}
.gsr-checkout-reship {
  flex-wrap: wrap;
}
.gsr-checkout-contact a {
  color: var(--gold-light);
  text-decoration: underline;
}
