/*
Theme Name: Flatsome Blaze
Theme URI: https://zedsupply.com
Description: Zed Supply child theme for Flatsome — v4 "Ink & Blaze" brand layer (palette, type, stencil stamps, category tiles, hero "Z" watermark, Caution-Yellow prices) plus WooCommerce hooks (branded ship-time tags, Details + Shipping & Returns tabs, Brand/Caliber attributes). Carries forward the working functions from the previous child theme, de-blued and rebranded to v4. Never edit the parent Flatsome theme.
Author: Zed Supply
Template: flatsome
Version: 1.8.2
Text Domain: flatsome-blaze
*/

/* ============================================================
   ZED BRAND LAYER
   The :root variables + base treatments (grain, price color) apply
   globally once loaded. The component classes (.stamp, .cat, .reticle,
   .zwm, etc.) are NOT native Flatsome — attach them to elements in UX
   Builder via the element's "Class" field (Advanced tab). Each block
   notes which UX Builder element it hangs on.
   ============================================================ */

/* ---------- 1. PALETTE + TYPE TOKENS (global) -------------- */
/* Fonts are also set in Theme Options → Type panel; these vars just let
   the custom classes below reference them. */
:root{
  --ink:#0B0B0B;        /* base — we live on black */
  --ink2:#161616;       /* raised panel */
  --panel:#131313;
  --line:#282828;
  --bone:#F1F1F2;       /* text / logo */
  --blaze:#FF5B16;      /* primary accent / CTAs / hover */
  --olive:#565C46;      /* Ranger Green — prep / education / trust */
  --coyote:#9E8666;     /* Medium Coyote Tan — gear / survival warmth */
  --caut:#F5C518;       /* Caution Yellow — prices, kickers, cart count, active nav */
  --gray:#8A8A8A;
  --radius:2px;
  --head:'Anton',Impact,sans-serif;      /* poster headlines, ALL CAPS */
  --sten:'Black Ops One',sans-serif;     /* stencil kickers / stamps */
  --cond:'Barlow Condensed',sans-serif;  /* subheads */
  --body:'Barlow',system-ui,sans-serif;  /* body */
  --type:'p22-typewriter','Special Elite',monospace; /* deadpan lines — Adobe Fonts live-text */
}

/* ---------- 2. GRAIN OVERLAY (global) --------------------- */
/* Field-gear grain on every page. Fixed, non-interactive, above content
   but below modals. It's on <body> automatically — attaches to nothing. */
body::after{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:100;
  opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---------- 3. STENCIL "STAMP" KICKER -------------------- */
/* The rotated military stamp badge. Default = Caution-Yellow outline (v4).
   ATTACH TO: a Text element (type the kicker text) OR the "Badge"/"Text"
   inside a Banner. Add class `stamp`. Add a variant class for filled themes. */
.stamp{
  display:inline-block;font-family:var(--sten);text-transform:uppercase;
  letter-spacing:.04em;font-size:12px;color:var(--caut);background:transparent;
  border:2px solid var(--caut);padding:5px 11px;transform:rotate(-2deg);
  box-shadow:3px 3px 0 rgba(0,0,0,.35);
}
.stamp.olive{background:var(--olive);color:var(--bone);border-color:var(--olive)}
.stamp.coyote{background:var(--coyote);color:var(--ink);border-color:var(--coyote)}
.stamp.caut{background:var(--caut);color:var(--ink);border-color:var(--caut)}
/* `.stamp.red` was a legacy alias — in v4 it is identical to the default
   yellow-outline stamp (no Sales Red in v4). Kept as an alias. */
.stamp.red{background:transparent;color:var(--caut);border-color:var(--caut)}

/* Eyebrow / deadpan helpers (Text elements) */
.eyebrow{font-family:var(--sten);text-transform:uppercase;letter-spacing:.12em;font-size:12px;color:var(--caut)}
.deadpan{font-family:var(--type);color:var(--coyote);font-size:14px}

/* ---------- 4. CAUTION-YELLOW PRICE TREATMENT ------------ */
/* Prices render in Caution Yellow, condensed bold (per v4). WooCommerce
   outputs .price / .amount natively — no class needed on the element. */
.woocommerce ul.products li.product .price,
.woocommerce div.product p.price,
.woocommerce div.product span.price,
.price .amount,
.card .price b{
  font-family:var(--cond);font-weight:700;color:var(--caut);
}
.woocommerce div.product p.price{font-size:24px}
/* Struck original on a sale item = grey. The `.amount` selector is needed to beat
   the blanket `.price .amount` (Caution Yellow) rule above — otherwise it stays yellow. */
.card .price s,.price del,.price del .amount{color:#6b6b6b;font-weight:400}
/* Active sale price = Caution Yellow (matches the Theme Options "Sale Price" value). */
.price ins,.price ins .amount{color:var(--caut);text-decoration:none;font-weight:700;font-family:var(--cond)}
/* The "Save $X" flash stays Blaze. */
.card .price .save{color:var(--blaze);font-weight:700;font-family:var(--cond)}

/* ---------- 5. CATEGORY TILE SYSTEM ---------------------- */
/* The "Most Wanted" linked category tiles (homepage Block 5).
   ATTACH TO: a Banner element (or a Col wrapping a linked image).
   Simplest build: one Banner per tile, background image set in Banner
   settings, then add class `cat hasimg` + a glow variant on an overlay col. */
.cat{
  position:relative;border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;min-height:200px;display:flex;flex-direction:column;
  justify-content:flex-end;padding:22px;background:var(--ink2);transition:.18s;
}
.cat:hover{border-color:var(--blaze);transform:translateY(-3px)}
.cat.tall{min-height:414px}                 /* the wide/tall feature tile */
.cat .bgtex{position:absolute;inset:0;opacity:.6;z-index:0;
  background:repeating-linear-gradient(135deg,#191919 0 18px,#131313 18px 36px)}
.cat .glow{position:absolute;inset:0;z-index:0;opacity:.5}
.cat .g-blaze{background:radial-gradient(circle at 68% 24%,rgba(255,91,22,.34),transparent 60%)}
.cat .g-coyote{background:radial-gradient(circle at 30% 30%,rgba(158,134,102,.4),transparent 60%)}
.cat .g-olive{background:radial-gradient(circle at 55% 65%,rgba(86,92,70,.5),transparent 60%)}
/* g-red kept as an alias to the ranger-green glow (no red in v4) */
.cat .g-red{background:radial-gradient(circle at 60% 70%,rgba(86,92,70,.34),transparent 60%)}
.cat.hasimg{background-size:cover;background-position:center}
.cat.hasimg .bgtex{opacity:.14}
.cat .scrim{position:absolute;inset:0;z-index:0;
  background:linear-gradient(180deg,rgba(11,11,11,.10),rgba(11,11,11,.48) 52%,rgba(11,11,11,.92))}
.cat .inner{position:relative;z-index:1}
.cat .code{font-family:var(--sten);color:var(--coyote);letter-spacing:.1em;font-size:11px;text-transform:uppercase}
.cat h3{font-family:var(--head);text-transform:uppercase;line-height:.98;font-size:28px;margin:6px 0 4px}
.cat.tall h3{font-size:40px}
.cat p{color:var(--gray);font-size:13px;margin-bottom:12px;font-family:var(--body)}
.cat .arrow{font-family:var(--cond);font-weight:700;text-transform:uppercase;font-size:13px;letter-spacing:.05em;color:var(--bone)}
.cat:hover .arrow{color:var(--blaze)}

/* ---------- 6. HERO "Z" WATERMARK + RETICLE -------------- */
/* ATTACH TO: absolutely-positioned images placed inside the hero Banner.
   .zwm = the faint giant Z; .reticle = the crosshair framing top-right. */
.zwm{position:absolute;right:-40px;top:50%;transform:translateY(-50%);height:150%;opacity:.05;z-index:1;pointer-events:none}
.reticle{position:absolute;top:34px;right:40px;width:120px;height:120px;z-index:2;opacity:.9;pointer-events:none}
.zc{opacity:.14;position:absolute;bottom:20px;right:24px;pointer-events:none}

/* ---------- 7. PRODUCT CARD HOVER ACCENT ----------------- */
/* Adds the Zed border-accent hover + dark card body to shop/archive/related
   grids. `.card` also matches homepage manual cards built with that class. */
.woocommerce ul.products li.product,
.card{
  background:var(--ink2);border:1px solid var(--line);border-radius:var(--radius);
  transition:.18s;position:relative;
}
.woocommerce ul.products li.product:hover,
.card:hover{border-color:var(--blaze);transform:translateY(-3px)}
.card .brandname,
.woocommerce ul.products li.product .product-brand{
  color:var(--gray);font-size:11px;text-transform:uppercase;letter-spacing:.08em;font-family:var(--sten)}
.card .stars,.woocommerce .star-rating span:before{color:var(--coyote)}

/* ---------- 8. SHIPPING-INFO (paired with functions.php) --- */
/* The functions.php ship-time hooks output bare .shipping-info /
   .catalog-shipping-info; these brand them. Replaces the old off-brand
   inline #1E90FF / #E0E6EB. NO BLUE. */
.shipping-info{
  margin-bottom:15px;color:var(--bone);font-weight:600;font-family:var(--cond);
  text-transform:uppercase;letter-spacing:.02em;font-size:15px;
  border-left:3px solid var(--blaze);padding-left:12px;
}
.shipping-info .fast{color:var(--caut)}          /* highlight the "1–2 days" bit */
.catalog-shipping-info{
  color:var(--caut);font-size:.8em;margin:5px 0;font-family:var(--sten);
  letter-spacing:.06em;text-transform:uppercase;
}

/* ---------- 9. GHOST BUTTON (optional) ------------------- */
.btn-ghost-zed{background:transparent;border:2px solid #4a4a4a;color:var(--bone)}
.btn-ghost-zed:hover{border-color:var(--blaze);color:var(--blaze)}

/* ---------- 10. DEAL COUNTDOWN DIGITS -------------------- */
.zed-clock .count,.zed-clock b{color:var(--caut);font-family:var(--head)}



/* NOTE (2026-07-12): Flatsome's dark styles use `.dark p{color:#f1f1f1}` — specificity
   (0,1,1) — which beats a single class (0,1,0) and flattened every brand colour in this
   layer to off-white inside dark sections/text-boxes. The doubled class names below
   (.zed-x.zed-x = 0,2,0) win without !important and without coupling to `.dark`.
   Don't "simplify" them back to a single class. */
/* ---------- 34. DEALS LAYER (Scrapyard hub + deal_* tag archives) ----------
   Hub page: "The Scrapyard" (native UX Builder). Deal = a `deal_*` product tag;
   the tag's archive is the deal's landing page. Classes below hang on UX Builder
   elements via the "Class" field.                                             */

/* shared type helpers used by the Scrapyard + deal banners */
.zed-eyebrow.zed-eyebrow{font-family:var(--sten);text-transform:uppercase;letter-spacing:.12em;
  font-size:12px;color:var(--caut);margin:0 0 10px}
.zed-h1.zed-h1{font-family:var(--head);text-transform:uppercase;font-weight:400;line-height:.92;
  letter-spacing:.01em;font-size:72px;color:var(--bone);margin:0 0 12px}
.zed-h2.zed-h2{font-family:var(--head);text-transform:uppercase;font-weight:400;line-height:.98;
  font-size:38px;color:var(--bone);margin:0 0 6px}
.zed-blaze.zed-blaze{color:var(--blaze)}
.zed-sub.zed-sub{font-family:var(--cond);font-weight:600;text-transform:uppercase;font-size:21px;
  color:#d6d6d6;margin:0 0 10px}
.zed-deadpan.zed-deadpan{font-family:var(--type);font-size:14px;color:var(--coyote);line-height:1.45;margin:0}
.zed-stamp.zed-stamp{display:inline-block;font-family:var(--sten);text-transform:uppercase;
  letter-spacing:.04em;font-size:12px;color:var(--caut);background:transparent;
  border:2px solid var(--caut);padding:5px 11px;margin:0 0 14px;transform:rotate(-2deg);
  box-shadow:3px 3px 0 rgba(0,0,0,.35)}

/* Scrapyard hero */
.zed-scrapyard-hero{border-bottom:1px solid var(--line);background-color:var(--ink)!important;
  /* Blaze glow hugs the right EDGE. A centred radial at higher alpha reads as brown
     mud over near-black — keep it tight and low-alpha. */
  background-image:
    radial-gradient(ellipse 55% 90% at 100% 50%,rgba(255,91,22,.13),transparent 60%),
    repeating-linear-gradient(135deg,#111 0 26px,#0b0b0b 26px 52px)!important}
.zed-scrapyard-hero .zed-h1{font-size:84px}

/* deal cards on the hub */
/* Deal cards read as RAISED PANELS so they sit forward of the flat Ink section.
   A photo is OPTIONAL per card (Flatsome `bg` field in UX Builder): set one and the
   card becomes a full-bleed poster; leave it off and the panel stands on its own.
   That matters because a code-only promo ("15% off, use REARDEN15") has no product
   to photograph — the design must not require an image. */
.zed-deal-card{
  background-color:var(--panel)!important;
  background-image:repeating-linear-gradient(135deg,#171717 0 22px,#131313 22px 44px)!important;
  border:1px solid #303030;
  border-top:3px solid var(--blaze);
  box-shadow:0 10px 30px rgba(0,0,0,.45);
  transition:border-color .16s,transform .16s,box-shadow .16s}
.zed-deal-card:hover{border-color:var(--blaze);transform:translateY(-3px);
  box-shadow:0 16px 38px rgba(0,0,0,.55)}

/* Content alignment: copy lengths differ per deal, so anchor the button to the
   bottom and reserve title/body space — otherwise stamps, titles and buttons sit at
   three different heights across the row. */
.zed-deal-card .text-box-content{display:flex!important;flex-direction:column!important;
  justify-content:flex-start!important;height:100%}
.zed-deal-card .zed-deal-title{min-height:2.1em}
.zed-deal-card .zed-deadpan{min-height:4.2em}
.zed-deal-card .button{margin-top:auto!important}

/* OPTIONAL PHOTO — set Flatsome's `bg` + `bg_overlay="rgba(11,11,11,0.82)"` on the
   ux_banner and the card becomes a poster. The photo must be DARKENED HARD: it is a
   texture behind Bone copy, never a competing subject.

   Use Flatsome's NATIVE overlay layer (`bg_overlay` -> `.overlay`), not a ::after on
   .banner-bg — the theme paints the <img> above such a pseudo-element, so the scrim
   never lands. The gradient below rides on top of that flat Ink scrim to add depth.

   Two traps, both hit while building this:
     • The overlay must NOT carry a z-index. `.banner-bg` is z-index:auto (not a
       stacking context), so a positive z-index on a child escapes it and paints OVER
       the copy, blanking the card.
     • Never an orange overlay — orange at low alpha over near-black reads as brown mud. */
.zed-deal-card .banner-bg{overflow:hidden}
.zed-deal-card .overlay{
  background-image:linear-gradient(to top,rgba(11,11,11,.75) 0%,rgba(11,11,11,0) 90%)}
.zed-deal-card:has(.banner-bg img){background-image:none!important}
.zed-deal-card .zed-deal-title{font-family:var(--head);text-transform:uppercase;font-weight:400;
  font-size:27px;line-height:1;color:var(--bone)!important;margin:0 0 8px}
.zed-deal-card:hover .zed-deal-title{color:var(--blaze)}
.zed-deal-card .zed-deadpan{margin-bottom:16px}
.zed-deal-card .button{display:inline-flex!important;width:auto!important;
  border-color:#4a4a4a;color:var(--bone);font-family:var(--cond);font-weight:700;
  font-size:13.5px;letter-spacing:.06em;padding:10px 18px}
/* HOVER: Flatsome's `.is-outline:hover` FILLS the background with the primary colour
   (Blaze). So the label must go INK on hover — setting it to Blaze paints Blaze-on-Blaze
   and the button label vanishes entirely. Matches canon: btn-primary = Blaze fill, Ink text.
   (Ink on Blaze = 6.4:1 contrast; white on Blaze is only 3.1:1 and fails WCAG AA.) */
.zed-deal-card .button:hover,
.zed-deal-card .button:focus-visible{
  background-color:var(--blaze)!important;
  border-color:var(--blaze)!important;
  color:var(--ink)!important}
.zed-deal-card .button:hover span{color:var(--ink)!important}

/* deal banner — printed at the TOP of a deal_* tag archive by zed_archive_deal_banner() */
.zed-deal-banner-wrap{margin:0 0 26px}
.zed-deal-banner{border:1px solid var(--line);
  background-image:
    radial-gradient(circle at 85% 50%,rgba(255,91,22,.16),transparent 58%),
    repeating-linear-gradient(135deg,#141414 0 26px,#0f0f0f 26px 52px)!important}
.zed-deal-banner .zed-h1{font-size:52px}
.zed-deal-banner .zed-sub{font-size:19px;margin-bottom:8px}

/* on-sale product grid — Caution-Yellow price, Blaze stencil flash */
.zed-deal-grid .price del,.zed-deal-grid .price del .amount{
  color:var(--gray);opacity:.85;font-weight:400}
.zed-deal-grid .price ins,.zed-deal-grid .price ins .amount{
  color:var(--caut);text-decoration:none;font-family:var(--head);font-size:20px}
.zed-deal-grid .badge-container .callout .badge-inner,
.zed-deal-grid .badge.post-item__badge .badge-inner{
  background:var(--blaze);color:var(--ink);border-radius:var(--radius);
  font-family:var(--sten);font-size:11px;letter-spacing:.05em;
  box-shadow:3px 3px 0 rgba(0,0,0,.35)}
.zed-deal-grid .product-title a{font-family:var(--cond);font-weight:700;
  text-transform:uppercase;font-size:16.5px;line-height:1.15;color:var(--bone)}
.zed-deal-grid .product-title a:hover{color:var(--blaze)}

/* coupon code cards */
.zed-code{border:1px dashed #3a3a3a;background:var(--panel);border-radius:var(--radius);
  padding:18px 20px;display:flex;flex-direction:column;gap:6px;height:100%}
.zed-code strong{font-family:var(--cond);font-weight:700;text-transform:uppercase;
  font-size:17px;color:var(--bone)!important;letter-spacing:.02em}
.zed-code .zed-deadpan{font-size:12.5px}
.zed-code-chip{align-self:flex-start;margin-top:8px;font-family:var(--sten);font-size:13px;
  letter-spacing:.08em;background:var(--ink);border:2px dashed var(--caut);color:var(--caut)!important;
  padding:9px 13px;border-radius:var(--radius);cursor:pointer;transition:.15s;
  -webkit-user-select:all;user-select:all}
.zed-code-chip:hover{background:var(--caut);color:var(--ink);border-style:solid}

@media (max-width:849px){
  .zed-scrapyard-hero .zed-h1{font-size:48px}
  .zed-deal-banner .zed-h1{font-size:34px}
  .zed-h2{font-size:30px}
  .zed-sub{font-size:18px}
}

/* ---------- 35. CATEGORY / TAG DESCRIPTION PANEL ----------------------------
   Pairs with zed_archive_description_panel() in functions.php. The description
   moves BELOW the product grid into a <details> accordion: out of the way, but
   visible and crawlable (CSS-hidden text is discounted by search engines).

   NOTE: Additional CSS (DB) still carries the legacy `.term-description
   {display:none!important}`. We do NOT need it removed — the panel body override
   below is higher specificity (0,2,0 vs 0,1,0) so it wins regardless of load
   order, and the deal banner is printed outside .term-description entirely. */

.zed-cat-desc{margin:38px 0 8px;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--panel)}
.zed-cat-desc__summary{list-style:none;cursor:pointer;display:flex;align-items:center;
  justify-content:space-between;gap:16px;padding:16px 20px;transition:background .15s}
.zed-cat-desc__summary::-webkit-details-marker{display:none}
.zed-cat-desc__summary::marker{content:""}
.zed-cat-desc__summary:hover{background:var(--ink2)}
.zed-cat-desc__summary:focus-visible{outline:2px solid var(--blaze);outline-offset:2px}
.zed-cat-desc__label{font-family:var(--cond);font-weight:700;text-transform:uppercase;
  letter-spacing:.05em;font-size:15px;color:var(--bone)}
.zed-cat-desc[open] .zed-cat-desc__label{color:var(--blaze)}
.zed-cat-desc__chevron{width:9px;height:9px;flex-shrink:0;
  border-right:2px solid var(--gray);border-bottom:2px solid var(--gray);
  transform:rotate(45deg);margin-top:-4px;transition:transform .2s ease,border-color .15s}
.zed-cat-desc__summary:hover .zed-cat-desc__chevron{border-color:var(--bone)}
.zed-cat-desc[open] .zed-cat-desc__chevron{transform:rotate(-135deg);margin-top:2px;
  border-color:var(--blaze)}
.zed-cat-desc__body{padding:4px 20px 22px;border-top:1px solid var(--line);
  color:#b4b4b4;font-size:15px;line-height:1.6;max-width:78ch}
.zed-cat-desc__body > *:first-child{margin-top:16px}
.zed-cat-desc__body p{margin:0 0 12px}
.zed-cat-desc__body h2,.zed-cat-desc__body h3{font-family:var(--cond);font-weight:700;
  text-transform:uppercase;letter-spacing:.03em;color:var(--bone);font-size:19px;margin:20px 0 8px}
.zed-cat-desc__body a{color:var(--blaze);text-decoration:underline;text-underline-offset:2px}
.zed-cat-desc__body ul,.zed-cat-desc__body ol{margin:0 0 12px 20px}
.zed-cat-desc__body li{margin-bottom:5px}

/* beats the legacy `.term-description{display:none!important}` on specificity */
.zed-cat-desc .term-description{display:block!important}

@media (max-width:549px){
  .zed-cat-desc__summary{padding:14px 16px}
  .zed-cat-desc__body{padding:4px 16px 18px}
}


/* ---------- 36. FULL-BLEED PAGES ---------------------------------------
   Pairs with zed_full_bleed_body_class(). Flatsome caps page content in
   `.row-main` at the theme Site Width (1190px). The homepage worked around this
   with `body.home #content .row-main{max-width:100%}` — front-page-only, not
   reusable. This does the same thing for any page flagged via the
   `zed_full_bleed_pages` filter (currently: zed-home, scrapyard).
   Sections inside still control their own inner padding.               */
body.zed-full-bleed #content .row-main{max-width:100%!important}
body.zed-full-bleed #content .row-main > .col{padding-left:0;padding-right:0}

/* CENTRE THE ROWS INSIDE FULL-BLEED SECTIONS.
   Flatsome gives .row negative -15px side margins (gutter compensation) and NO auto
   margins. Inside a boxed .row-main that's fine — the 1190px container centres it. The
   moment full-bleed removes that box, a 1190px row with negative margins and no auto
   margins simply PINS LEFT, so every heading and section lands hard against the left
   edge while the section background runs full width.

   The homepage never exposed this because its sections are raw blocks with no .row at
   all. The Scrapyard's sections use plain [row]s, which is why it showed up there.

   Fix on the ROW (not .section-content) — centring the wrapper still leaves the row
   30px off, because the -15px margins pull it back. :not(.row-collapse) so deliberately
   collapsed/full-bleed rows are left alone. */
body.zed-full-bleed #content section .row:not(.row-collapse){
  margin-left:auto!important;
  margin-right:auto!important}


/* ---------- 37. BLAZE BUTTONS: PIN FILL + INK LABEL (site-wide) ------------
   Canon: btn-primary = Blaze fill, Ink text; hover = #ff7038 fill, Ink text.

   WHY WE PIN THE BACKGROUND, not just the colour:
   Setting only `color:Ink` by selector assumes the background is Blaze — but the
   background is whatever the CONTEXT does. On the cart page Flatsome darkens the
   orange on hover (fine). Inside the dark mini-cart panel the hover background goes
   DARK instead, and Ink-on-dark rendered a black button with a black label. So pin
   both fill and label on rest AND hover; then contrast is guaranteed everywhere and
   does not depend on the container.

   Contrast:  Ink on Blaze #FF5B16 = 6.3:1 · Ink on hover #ff7038 = 7.2:1  (AA needs 4.5)

   CAREFUL: filled buttons only. An `.is-outline` at REST has a transparent bg and a
   Blaze label — forcing Ink there makes it invisible on the Ink page. Hence
   :not(.is-outline) on the solid rule, and :hover/:focus on the outline rule. */

.button.primary:not(.is-outline),
.button.checkout,
.button.wc-forward,
.button.wc-backward,
.quick-view,
.single_add_to_cart_button,
.woocommerce .button.alt{
  background-color:var(--blaze)!important;
  color:var(--ink)!important}

.button.primary:not(.is-outline):hover,
.button.primary:not(.is-outline):focus-visible,
.button.checkout:hover,
.button.wc-forward:hover,
.button.wc-backward:hover,
.quick-view:hover,
.single_add_to_cart_button:hover,
.woocommerce .button.alt:hover{
  background-color:#ff7038!important;
  color:var(--ink)!important}

/* Outline buttons: transparent at rest (keep their Blaze label), fill on hover. */
.button.primary.is-outline:hover,
.button.primary.is-outline:focus-visible{
  background-color:var(--blaze)!important;
  border-color:var(--blaze)!important;
  color:var(--ink)!important}

/* The mini-cart lives in the header nav-dropdown, and Additional CSS carries
   `.header .nav-dropdown a{color:var(--bone)!important}` — specificity (0,2,1), which
   beats `.button.wc-forward` (0,2,0) even at equal !important. Out-specify it, and pin
   the fill here too so the dark dropdown can't repaint the background. */
.header .nav-dropdown a.button.primary:not(.is-outline),
.header .nav-dropdown a.button.checkout,
.header .nav-dropdown a.button.wc-forward,
.header .nav-dropdown a.button.wc-backward{
  background-color:var(--blaze)!important;
  color:var(--ink)!important}
.header .nav-dropdown a.button.primary:not(.is-outline):hover,
.header .nav-dropdown a.button.checkout:hover,
.header .nav-dropdown a.button.wc-forward:hover,
.header .nav-dropdown a.button.wc-backward:hover{
  background-color:#ff7038!important;
  color:var(--ink)!important}

/* labels are often wrapped in a <span> that carries its own colour */
.button.primary:not(.is-outline) span,
.button.primary.is-outline:hover span,
.button.checkout span,
.button.wc-forward span,
.button.wc-backward span,
.quick-view span{color:inherit!important}


/* ---------- 38. HERO BACKGROUND — kill the brown wash ---------------------
   Additional CSS (DB) has:
     .hero-native{ background:
        linear-gradient(90deg,rgba(11,11,11,.95),rgba(11,11,11,.18)),   <- veil dies at .18
        radial-gradient(circle at 76% 56%,rgba(255,91,22,.3),…),        <- 30% orange
        radial-gradient(circle at 90% 20%,rgba(255,91,22,.22),…) }      <- + 22% orange
   Two strong orange radials with nothing holding them back = brown mud across the right
   half. Orange at meaningful alpha over near-black ALWAYS reads brown; keep Blaze glows
   tight and low-alpha (same lesson as the Scrapyard hero and the deal-card overlay).

   `.section.hero-native` = (0,2,0) and beats the DB's `.hero-native` (0,1,0), so this
   wins without touching Additional CSS. */
/* NO ORANGE IN THE SECTION. Any orange over near-black is brown — there is no alpha
   low enough to be both visible and not muddy across a large area. The Blaze glow
   belongs BEHIND THE OBJECT only (.zed-hero-object::before), where it's tight, small,
   and reads as light spill off the product. The field itself stays pure Ink + texture.
   (Attempt #1 kept a .17 radial under a .66 veil and still came out brown.) */
/* No veil. The 90deg Ink gradient only ever existed to hold back the orange wash;
   with the orange gone it is Ink over Ink — it does nothing but add a faint smudge.
   Pure Ink + diagonal texture. Depth comes from the light pool behind the object. */
.section.hero-native{
  background:
    repeating-linear-gradient(135deg,#111 0 26px,#0b0b0b 26px 52px)!important}

/* ---------- 39. HERO OBJECT (knockout product image) ----------------------
   For a BACKGROUND-REMOVED (transparent PNG/WebP) product image in a hero slide.
   Drop `zed-hero-object` into the [ux_image] element's Class field (Advanced tab).

   The point: the product floats in the Wasteland — no frame, no photo edges. It is
   oversized, bleeds toward the right edge, catches a Blaze rim-glow from behind, and
   throws a real shadow. A rectangular catalog photo will NOT work here; it needs the
   background knocked out, or you just get a framed placeholder.

   drop-shadow() (not box-shadow) so the shadow follows the object's alpha silhouette,
   not its bounding box — that's the whole trick. */
.zed-hero-object{position:relative;z-index:2}
.zed-hero-object .img-inner{overflow:visible!important;background:none!important}

/* SIZE: no transform. `object-fit:contain` + the [ux_image] `height` already fit the
   object to the slide. A scale() with transform-origin:center right (the old v1.5.0
   rule) inflated it 28% and pushed it past the right edge, clipping the case corner.
   Size the object with the ux_image height field, not CSS scale. */
.zed-hero-object img{
  object-fit:contain!important;
  /* Two shadows: a tight contact shadow that defines the silhouette, and a soft
     ambient one for depth. drop-shadow (not box-shadow) so both follow the alpha
     outline rather than the bounding box — that's what stops it looking pasted on. */
  filter:
    drop-shadow(0 10px 14px rgba(0,0,0,.55))
    drop-shadow(0 34px 46px rgba(0,0,0,.45))
    contrast(1.04) saturate(1.02)}

/* LIGHT POOL behind the object.
   Key insight: you cannot see a BLACK shadow on a BLACK field. The page is #0B0B0B, so
   a black drop-shadow has nothing darker to become — it was invisible by construction.
   On a dark field, objects separate by LIGHT, not shadow. So lift the area behind the
   object with a soft NEUTRAL pool; the contact shadow then has a surface to fall on,
   and the Blaze warmth rides on top.
   Neutral (white at low alpha) = grey. A warm/orange pool at this size would go BROWN. */
.zed-hero-object::before{content:"";position:absolute;z-index:-1;pointer-events:none;
  inset:0 -8% 0 -8%;
  background:
    /* BLAZE-LED. The warm layer does the work; the neutral lift is only there to give
       the drop-shadow a surface. Lead with the neutral instead and it reads as a grey
       smudge behind the product rather than light coming off it. */
    radial-gradient(ellipse 44% 46% at 50% 48%,
      rgba(255,91,22,.85) 0%,rgba(255,91,22,.26) 46%,transparent 68%),
    radial-gradient(ellipse 62% 64% at 50% 50%,
      rgba(255,255,255,.18) 0%,rgba(255,255,255,.07) 50%,transparent 74%);
  /* Light blur only. The gradients ALREADY have soft falloff — a heavy blur on top just
     dilutes the lift until it's invisible. That (plus alphas that were far too low) is
     why v1.6.0's pool rendered correctly and still couldn't be seen. */
  filter:blur(16px)}

/* ground shadow — centred under the object so it isn't levitating */
.zed-hero-object::after{content:"";position:absolute;z-index:-1;pointer-events:none;
  left:20%;right:20%;bottom:4%;height:22px;
  background:radial-gradient(ellipse 50% 50% at 50% 50%,rgba(0,0,0,.55),transparent 74%);
  filter:blur(12px)}

/* ---------- 39b. HERO SPREAD (scattered parts, not a single object) --------
   For a hero image that is a SCATTER — several separate items spread across the frame
   with gaps (e.g. the Rearden muzzle-device flat-lay), rather than one object with a
   coherent silhouette.

   `zed-hero-object` is WRONG for these, for three reasons:
     • Its centred light pool lights the EMPTY MIDDLE of the bounding box, where there
       is nothing to light.
     • Its ground shadow implies the object is resting on something. A scatter isn't.
     • The pool assumes a LIGHT subject (the tan MRE case popped against Ink). Dark
       nitride/bronze hardware sinks into the Ink field instead — it needs lifting, not
       a glow behind it.

   So this variant: brighten the metal so it reads at all, a WIDE FLAT ambient rather
   than a centred pool, no ground shadow, and a tighter shadow per silhouette (drop-
   shadow follows the alpha, so it traces every part individually). */
.zed-hero-spread{position:relative;z-index:2}
.zed-hero-spread .img-inner{overflow:visible!important;background:none!important}
.zed-hero-spread img{
  object-fit:contain!important;
  /* dark hardware on Ink needs LIFTING — this is the opposite of the MRE case, which
     was light and only needed separating */
  filter:
    brightness(1.22) contrast(1.12) saturate(1.14)
    drop-shadow(0 6px 10px rgba(0,0,0,.6))
    drop-shadow(0 18px 26px rgba(0,0,0,.4))}

/* WIDE, FLAT ambient — covers the whole spread evenly instead of pooling in the middle.
   Low alpha and broad, so it lifts the field the parts sit on without becoming a blob. */
.zed-hero-spread::before{content:"";position:absolute;z-index:-1;pointer-events:none;
  inset:-6%;
  background:
    radial-gradient(ellipse 70% 70% at 50% 50%,
      rgba(255,91,22,.20) 0%,rgba(255,91,22,.07) 50%,transparent 72%),
    radial-gradient(ellipse 78% 78% at 50% 50%,
      rgba(255,255,255,.10) 0%,rgba(255,255,255,.04) 55%,transparent 78%);
  filter:blur(30px)}

/* NO ground shadow — a scatter isn't resting on anything, and faking it reads as a
   smudge under the parts. */

@media (max-width:849px){
  .zed-hero-spread::before{inset:0;filter:blur(20px)}
}

@media (max-width:849px){
  .zed-hero-object::before{inset:10% 0 10% 0;filter:blur(18px)}
  .zed-hero-object::after{display:none}
}


/* ---------- 40. DEAL BANNER — NATIVE UX BUILDER ELEMENTS -------------------
   The banners are built from discrete Flatsome elements ([ux_text], [ux_html]) rather
   than one raw-HTML blob, so each line is individually clickable/editable in UX Builder
   and Luke can drop a button or swap copy without touching code.

   [ux_text class="x"] renders  <div class="ux-text x"><p>…</p></div>
   — the class lands on the WRAPPER, not the <p>. Our brand rules target the element
   itself, so they must be re-pointed at the inner <p> or nothing applies. And `.dark p`
   (0,1,1) still beats a single class, so keep the doubled-class trick. */
.zed-deal-banner .zed-stamp.zed-stamp p,
.zed-deal-banner .zed-h1.zed-h1 p,
.zed-deal-banner .zed-sub.zed-sub p,
.zed-deal-banner .zed-deadpan.zed-deadpan p{margin:0}

.zed-deal-banner .zed-stamp p{
  display:inline-block;font-family:var(--sten);text-transform:uppercase;letter-spacing:.04em;
  font-size:12px;color:var(--caut)!important;border:2px solid var(--caut);padding:5px 11px;
  transform:rotate(-2deg);box-shadow:3px 3px 0 rgba(0,0,0,.35)}
.zed-deal-banner .zed-stamp{margin-bottom:14px}

.zed-deal-banner .zed-h1 p{
  font-family:var(--head);text-transform:uppercase;font-weight:400;line-height:.92;
  font-size:52px;color:var(--bone)!important}
.zed-deal-banner .zed-h1 .zed-blaze{color:var(--blaze)!important}
.zed-deal-banner .zed-h1{margin-bottom:10px}

.zed-deal-banner .zed-sub p{
  font-family:var(--cond);font-weight:600;text-transform:uppercase;font-size:19px;
  color:#d6d6d6!important}
.zed-deal-banner .zed-sub{margin-bottom:6px}

.zed-deal-banner .zed-deadpan p{
  font-family:var(--type);font-size:14px;color:var(--coyote)!important;line-height:1.45}
.zed-deal-banner .zed-deadpan{margin-bottom:16px}

/* ---------- 40b. COUPON STRIP ----------------------------------------------
   The "how do I actually get this deal" line. Deliberately concrete: the code, what it
   does, and when it dies. A deal banner that doesn't say how to claim it is decoration. */
.zed-coupon-strip{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:12px 16px;border:1px dashed #3a3a3a;border-radius:var(--radius);
  background:rgba(11,11,11,.55);width:fit-content;max-width:100%}
.zed-coupon-label{
  font-family:var(--sten);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--gray)}
.zed-coupon-strip .zed-code-chip{
  margin:0;align-self:auto;
  font-family:var(--sten);font-size:14px;letter-spacing:.08em;
  background:var(--ink);border:2px dashed var(--caut);color:var(--caut)!important;
  padding:8px 13px;border-radius:var(--radius);cursor:pointer;
  -webkit-user-select:all;user-select:all}
.zed-coupon-strip .zed-code-chip:hover{background:var(--caut);color:var(--ink)!important;border-style:solid}
.zed-coupon-terms{
  font-family:var(--cond);font-weight:600;text-transform:uppercase;letter-spacing:.03em;
  font-size:12.5px;color:#b4b4b4}

@media (max-width:549px){
  .zed-deal-banner .zed-h1 p{font-size:34px}
  .zed-coupon-strip{gap:8px;padding:10px 12px}
}

/* ============================================================
   §41  GEAR SCHOOL callout card
   A branded "read the guide" block injected on PDPs + relevant
   archives (armor categories, Rearden brand) by functions.php,
   and placeable anywhere via [zed_gear_school]. Dark Ink card so
   it pops on the light PDP/shop pages; Blaze accent + Ink-label
   button (reuses the §37 .button.primary canon).
   ============================================================ */
.zed-gs-card{
  display:flex; gap:18px; align-items:center;
  margin:24px 0; padding:20px 22px;
  background:#0B0B0B;
  border-left:5px solid #FF5B16;
  border-radius:6px;
  box-shadow:0 8px 24px rgba(0,0,0,.18);
}
.zed-gs-card .zed-gs-emblem{
  flex:0 0 auto; width:76px; height:76px;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center;
  border:2px solid #FF5B16; border-radius:6px;
  font-family:"Black Ops One",Impact,sans-serif;
  font-size:14px; line-height:1.02; letter-spacing:.02em;
  color:#FF5B16;
}
.zed-gs-card .zed-gs-body{flex:1 1 auto; min-width:0}
.zed-gs-card .zed-gs-eyebrow{
  margin:0 0 5px!important;
  font-family:"Black Ops One",Impact,sans-serif;
  font-size:11px!important; letter-spacing:.18em; text-transform:uppercase;
  color:#F5C518!important;
}
.zed-gs-card .zed-gs-title{
  margin:0 0 7px!important;
  font-family:"Barlow Condensed","Barlow",sans-serif; font-weight:800;
  font-size:25px!important; line-height:1.04; letter-spacing:.01em; text-transform:uppercase;
  color:#F1F1F2!important;
}
.zed-gs-card .zed-gs-text{
  margin:0 0 13px!important;
  font-family:"Barlow",sans-serif; font-weight:400;
  font-size:15px!important; line-height:1.5;
  color:#CFD3D8!important;
}
.zed-gs-card .zed-gs-btn{margin:0!important}
@media (max-width:549px){
  .zed-gs-card{flex-direction:column; align-items:flex-start; gap:14px; padding:18px}
  .zed-gs-card .zed-gs-title{font-size:22px!important}
}

/* === END ZED BRAND LAYER === */

