/*
Theme Name: Hello Elementor Child — Cook
Template: hello-elementor
Description: Child theme for Cook Portable Warehouses site rebuild.
Version: 1.1.0
*/

/* ===== Design Tokens — cookstuff.com palette ===== */
:root {
  /* Brand */
  --cook-red: #BA2031;
  --cook-red-hover: #D41A34;
  --cook-red-dark: #BA0D21;
  --cook-white: #FFFFFF;
  --cook-dark: #373737;
  --cook-topbar: #5E5E5E;
  --cook-text: #4F4F4F;
  --cook-text-light: #5E5E5E;
  --cook-text-muted: #5E5E5E;
  --cook-card-bg: #F2F2F2;
  --cook-border: #D3D3D3;

  /* Semantic */
  --cook-bg-primary: var(--cook-white);
  --cook-bg-secondary: var(--cook-card-bg);
  --cook-bg-inverse: var(--cook-dark);
  --cook-text-primary: var(--cook-text);
  --cook-text-secondary: var(--cook-text-light);
  --cook-text-inverse: var(--cook-white);
  --cook-accent: var(--cook-red);
  --cook-accent-hover: var(--cook-red-hover);

  /* Footer */
  --cook-footer-link: #E2E2E2;
  --cook-footer-sub-bg: #2d2d2d;

  /* Transitions */
  --cook-transition-fast: 0.2s ease;

  /* Radii & Shadows */
  --cook-radius-sm: 4px;
  --cook-radius-md: 8px;
  --cook-radius-lg: 16px;
  --cook-radius-pill: 999px;
  --cook-shadow-card: 0 1px 3px rgba(0,0,0,0.08);
  --cook-shadow-card-hover: 0 4px 12px rgba(0,0,0,0.12);

  /* Spacing */
  --cook-space-1: 4px;
  --cook-space-2: 8px;
  --cook-space-3: 12px;
  --cook-space-4: 16px;
  --cook-space-5: 20px;
  --cook-space-6: 24px;
  --cook-space-8: 32px;
  --cook-space-10: 40px;
  --cook-space-12: 48px;
  --cook-space-16: 64px;

  /* Typography */
  /* Font-size tokens in rem (16px base) so browser text-size preference scales text (WCAG 1.4.4). */
  --cook-text-xs: 0.75rem;      /* 12px */
  --cook-text-sm: 0.8125rem;    /* 13px */
  --cook-text-base: 0.9375rem;  /* 15px */
  --cook-text-md: 1rem;         /* 16px */
  --cook-text-lg: 1.125rem;     /* 18px */
  --cook-text-xl: 1.25rem;      /* 20px */
  --cook-text-2xl: 1.5rem;      /* 24px */
  --cook-text-3xl: 1.75rem;     /* 28px */

  /* === Button system (Wave 3 / p91g) === */
  --cook-touch-target: 44px;
  --cook-touch-target-sm: 36px;
  --cook-touch-target-lg: 52px;
  --cook-red-dark-hover: #9A1A29;
  --cook-btn-border-width: 2px;
  --cook-btn-focus-ring: 4px;
  --cook-font-weight-bold: 700;
  --cook-font-weight-semibold: 600;

  /* Neutrals (cream-fill secondary fallback + surfaces) */
  --cook-neutral-100: #F5F5F5;
  --cook-neutral-200: #EAEAEA;
  --cook-border-subtle: #D9D9D9;
  --cook-cream: #F7F2EA; /* reserved — pivot option, not adopted */

  /* Overlays (carousel + image nav) */
  --cook-overlay-dark: rgba(0, 0, 0, 0.6);
  --cook-overlay-dark-hover: rgba(0, 0, 0, 0.75);

  /* === Forms (Phase C / p91g) === */
  --cook-input-bg: var(--cook-white);
  --cook-input-bg-disabled: var(--cook-neutral-100);
  --cook-input-border: var(--cook-border);
  --cook-input-border-hover: #9E9E9E;
  --cook-input-border-focus: var(--cook-red);
  --cook-input-border-error: var(--cook-red);
  --cook-input-text: var(--cook-text);
  --cook-input-placeholder: var(--cook-text-muted);
  --cook-input-radius: var(--cook-radius-sm);
  --cook-input-height: var(--cook-touch-target);
  --cook-input-padding-y: 10px;
  --cook-input-padding-x: 14px;
  --cook-input-font-size: 1rem;
  --cook-input-focus-ring: 0 0 0 3px rgba(186, 32, 49, 0.22);
  --cook-label-size: var(--cook-text-sm);
  --cook-label-weight: var(--cook-font-weight-semibold);
  --cook-label-color: var(--cook-text);
  --cook-help-size: var(--cook-text-xs);
  --cook-help-color: var(--cook-text-muted);
  --cook-error-color: var(--cook-red);

  /* === Cards (Phase D / p91g) ===
     All card variants share: bg-primary + 1px border + radius-md + shadow-card.
     Hover adds shadow-card-hover + translateY(-2px). Info-panel variants
     (.cook-width-card) intentionally use bg-secondary — informational, not a tile. */
  --cook-card-padding: 20px;
  --cook-card-padding-sm: 16px;
}

/* ===== Store Selector ===== */

/* Utility bar — horizontal layout, store left, RTO phone right */
.cook-utility-bar { color: var(--cook-text-inverse); }
.cook-utility-bar > .elementor-container > .elementor-column > .elementor-widget-wrap,
.cook-utility-bar .elementor-widget-wrap {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--cook-space-2) var(--cook-space-6);
  /* CLS reservation (v37m.28). #cook-store-indicator is injected entirely
     client-side by store-selector.js (createIndicator) — it has no server
     markup, so first paint is short (~18px) and the late injection grows the
     bar to its populated height (~44px), displacing MAIN ~26px (measured CLS
     ~0.18). Reserve the populated single-row height up front so the JS paints
     into pre-allocated space instead of growing the bar. Re-measure on WPE
     staging to confirm CLS < 0.1. */
  min-height: 2.75rem;
}

/* Store indicator — compact inline, no pill/box */
.cook-store-indicator {
  display: inline-flex;
  align-items: center;
  gap: var(--cook-space-2);
  font-size: var(--cook-text-sm);
  color: var(--cook-text-inverse);
  line-height: 1.4;
}
.cook-store-indicator__icon { display: inline-flex; align-items: center; color: var(--cook-red); }
.cook-store-indicator__icon svg { width: 14px; height: 14px; fill: currentColor; }
.cook-store-indicator .cook-store-indicator__link,
.cook-store-indicator .cook-store-indicator__change,
.cook-store-indicator .cook-store-indicator__phone {
  color: var(--cook-text-inverse);
  background: none;
  border: 0;
  border-radius: 0;
  /* Tap target: pad+negative-margin gets WCAG 2.5.8 AA 24×24 without bloating the bar.
     Mobile rule below upgrades to 44×44 with larger padding. */
  padding: 6px 4px;
  margin: -6px -4px;
  font: inherit;
  line-height: inherit;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
  white-space: nowrap;
}
.cook-store-indicator .cook-store-indicator__link:hover,
.cook-store-indicator .cook-store-indicator__link:focus-visible,
.cook-store-indicator .cook-store-indicator__change:hover,
.cook-store-indicator .cook-store-indicator__change:focus-visible,
.cook-store-indicator .cook-store-indicator__phone:hover,
.cook-store-indicator .cook-store-indicator__phone:focus-visible {
  color: var(--cook-white);
  background: transparent;
}
/* Keyboard focus ring, scoped to the dark utility bar. The site-wide
   *:focus-visible rule (inc/setup.php) forces a RED ring with !important; red
   #BA2031 on the gray bar (rgb(94,94,94)) is only ~1.15:1 — fails WCAG 1.4.11.
   Override to white (~6.4:1 on the bar). Needs !important to beat the global
   !important; higher specificity (0,3,0 > 0,1,0) then wins. Kept separate from
   the :hover rule above so the ring is keyboard-only (WCAG 2.4.7). */
.cook-store-indicator .cook-store-indicator__link:focus-visible,
.cook-store-indicator .cook-store-indicator__change:focus-visible,
.cook-store-indicator .cook-store-indicator__phone:focus-visible {
  outline: 2px solid var(--cook-white) !important;
  outline-offset: 2px !important;
}
.cook-store-indicator__location { font-weight: 600; }
.cook-store-indicator__change { font-size: var(--cook-text-xs); opacity: 0.85; }
.cook-store-indicator__sep { opacity: 0.5; }

/* RTO phone line — flex child, right-aligned, shrinks to fit beside store indicator.
   Beats Elementor's `.elementor-widget-wrap > .elementor-element { width: 100% }`. */
.cook-utility-bar .elementor-widget-wrap > .elementor-widget-text-editor {
  width: auto;
  flex: 0 1 auto;
  text-align: right;
  min-width: 0;
}
.cook-utility-bar .elementor-widget-text-editor p { margin: 0; }
.cook-utility-bar .cook-store-indicator { flex: 0 0 auto; }

@media (max-width: 767px) {
  /* CLS reservation (v37m.28), mobile. Bar wraps to two rows once the store
     indicator is injected (indicator row + RTO-phone row) while the pre-JS
     resting state is one row — reserve the populated two-row height. Re-measure
     on WPE staging across viewports to confirm CLS < 0.1. */
  .cook-utility-bar .elementor-widget-wrap { justify-content: center; gap: 4px 12px; min-height: 3.75rem; }
  .cook-utility-bar .elementor-widget-wrap > .elementor-widget-text-editor { text-align: center; }
  .cook-utility-bar .elementor-widget-text-editor p { font-size: 0.75rem; line-height: 1.35; }
  .cook-store-indicator { font-size: 0.75rem; }
  .cook-store-indicator__location { max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* Tap-target: padding + negative margin expands touch area without bloating layout */
  .cook-store-indicator .cook-store-indicator__link,
  .cook-store-indicator .cook-store-indicator__change,
  .cook-store-indicator .cook-store-indicator__phone {
    padding: 10px 4px;
    margin: -10px -4px;
  }
}

/* Modal overlay */
.cook-store-modal { position: fixed; inset: 0; z-index: 10000; display: flex; align-items: flex-start; justify-content: center; padding-top: 10vh; background: rgba(0,0,0,0.5); opacity: 0; visibility: hidden; transition: opacity var(--cook-transition-fast), visibility var(--cook-transition-fast); }
.cook-store-modal--open { opacity: 1; visibility: visible; }
@media (prefers-reduced-motion: reduce) { .cook-store-modal { transition: none; } }

/* Modal panel */
.cook-store-modal__panel { background: var(--cook-bg-primary); border-radius: var(--cook-radius-md); box-shadow: 0 8px 32px rgba(0,0,0,0.25); width: 100%; max-width: 420px; max-height: 80vh; overflow-y: auto; padding: var(--cook-space-6); position: relative; }

/* Modal header */
.cook-store-modal__header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--cook-space-4); }
.cook-store-modal__title { font-family: 'Roboto Slab', serif; font-size: var(--cook-text-xl); font-weight: 700; color: var(--cook-text); margin: 0; }
.cook-store-modal__close { background: none; border: none; font-size: var(--cook-text-2xl); color: var(--cook-text-muted); cursor: pointer; padding: var(--cook-space-2); min-width: 44px; min-height: 44px; display: flex; align-items: center; justify-content: center; line-height: 1; }
.cook-store-modal__close:hover,
.cook-store-modal__close:focus { color: var(--cook-text); }

/* Search row */
.cook-store-modal__search { display: flex; gap: var(--cook-space-2); margin-bottom: var(--cook-space-3); }
.cook-store-modal__input { flex: 1; padding: var(--cook-space-3) var(--cook-space-4); border: 1px solid var(--cook-border); border-radius: var(--cook-radius-sm); font-size: var(--cook-text-md); font-family: 'Cabin', sans-serif; min-height: 44px; }
.cook-store-modal__input:focus { outline: 2px solid var(--cook-accent); outline-offset: -1px; border-color: var(--cook-accent); }
.cook-store-modal__search-btn { background: var(--cook-accent); color: var(--cook-white); border: none; border-radius: var(--cook-radius-sm); padding: var(--cook-space-3) var(--cook-space-4); font-size: var(--cook-text-sm); font-weight: 600; font-family: 'Cabin', sans-serif; cursor: pointer; min-height: 44px; min-width: 44px; }
.cook-store-modal__search-btn:hover,
.cook-store-modal__search-btn:focus { background: var(--cook-accent-hover); }

/* Geo button */
.cook-store-modal__geo { width: 100%; background: none; border: 1px solid var(--cook-border); border-radius: var(--cook-radius-sm); padding: var(--cook-space-3); font-size: var(--cook-text-sm); font-family: 'Cabin', sans-serif; color: var(--cook-text); cursor: pointer; min-height: 44px; margin-bottom: var(--cook-space-4); }
.cook-store-modal__geo:hover,
.cook-store-modal__geo:focus { border-color: var(--cook-accent); color: var(--cook-accent); }
.cook-store-modal__geo:disabled { opacity: 0.6; cursor: not-allowed; }

/* Dealer dropdown */
.cook-store-modal__dropdown-label { display: block; font-size: var(--cook-text-xs); text-transform: uppercase; letter-spacing: 0.5px; color: var(--cook-text-muted); margin-bottom: var(--cook-space-2); }
.cook-store-modal__dropdown { width: 100%; padding: var(--cook-space-3) var(--cook-space-4); border: 1px solid var(--cook-border); border-radius: var(--cook-radius-sm); font-size: var(--cook-text-base); font-family: 'Cabin', sans-serif; min-height: 44px; margin-bottom: var(--cook-space-4); background: var(--cook-bg-primary); color: var(--cook-text); }
.cook-store-modal__dropdown:focus { outline: 2px solid var(--cook-accent); outline-offset: -1px; }

/* Divider */
.cook-store-modal__divider { border: none; border-top: 1px solid var(--cook-border); margin: 0 0 var(--cook-space-4); }

/* Results */
.cook-store-modal__results-label { font-size: var(--cook-text-xs); text-transform: uppercase; letter-spacing: 0.5px; color: var(--cook-text-muted); margin-bottom: var(--cook-space-2); }
.cook-store-modal__results { display: none; }
.cook-store-modal__results--visible { display: block; }
.cook-store-modal__result { padding: var(--cook-space-3) var(--cook-space-4); background: var(--cook-bg-secondary); border-radius: var(--cook-radius-sm); margin-bottom: var(--cook-space-2); display: flex; justify-content: space-between; align-items: center; gap: var(--cook-space-3); }
.cook-store-modal__result:first-child { border-left: 3px solid var(--cook-accent); }
.cook-store-modal__result-name { font-weight: 600; font-size: var(--cook-text-sm); color: var(--cook-text); }
.cook-store-modal__result-detail { font-size: var(--cook-text-xs); color: var(--cook-text-muted); }
.cook-store-modal__result-btn { background: none; border: none; color: var(--cook-accent); font-weight: 600; font-size: var(--cook-text-sm); cursor: pointer; padding: var(--cook-space-2) var(--cook-space-3); min-height: 44px; min-width: 44px; display: flex; align-items: center; white-space: nowrap; }
.cook-store-modal__result-btn:hover,
.cook-store-modal__result-btn:focus { color: var(--cook-accent-hover); text-decoration: underline; }

/* Error message */
.cook-store-modal__error { color: var(--cook-accent); font-size: var(--cook-text-sm); margin-bottom: var(--cook-space-3); }

/* Mobile */
@media (max-width: 767px) {
  .cook-store-modal { padding: var(--cook-space-4); align-items: center; padding-top: 0; }
  .cook-store-modal__panel { max-width: none; max-height: 90vh; }
}

/* ===== Dark Mode (DISABLED — kept for potential re-enable) =====
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --cook-bg-primary: #1a1a1a;
    --cook-bg-secondary: #252525;
    --cook-bg-inverse: var(--cook-white);
    --cook-text-primary: #E0E0E0;
    --cook-text-secondary: #A0A0A0;
    --cook-text-inverse: var(--cook-dark);
    --cook-accent: #F25C69;
    --cook-accent-hover: #F47171;
    --cook-border: #404040;
    --cook-text-muted: #808080;
    --cook-shadow-card: 0 1px 3px rgba(0,0,0,0.3);
    --cook-shadow-card-hover: 0 4px 12px rgba(0,0,0,0.4);
    --cook-footer-link: #E2E2E2;
    --cook-footer-sub-bg: #2d2d2d;
  }
}
[data-theme="dark"] {
  --cook-bg-primary: #1a1a1a;
  --cook-bg-secondary: #252525;
  --cook-bg-inverse: var(--cook-white);
  --cook-text-primary: #E0E0E0;
  --cook-text-secondary: #A0A0A0;
  --cook-text-inverse: var(--cook-dark);
  --cook-accent: #F25C69;
  --cook-accent-hover: #F47171;
  --cook-border: #404040;
  --cook-text-muted: #808080;
  --cook-shadow-card: 0 1px 3px rgba(0,0,0,0.3);
  --cook-shadow-card-hover: 0 4px 12px rgba(0,0,0,0.4);
  --cook-footer-link: #E2E2E2;
  --cook-footer-sub-bg: #2d2d2d;
}
===== End Dark Mode ===== */

/* ===== Homepage CTA Bar ===== */
.cook-cta-bar, .cook-cta-bar.elementor-section {
  background-color: #BA2031 !important;
}
.cook-cta-bar > .elementor-container {
  align-items: center !important;
}
.cook-cta-bar .elementor-button {
  min-width: 220px;
  text-align: center;
  padding: 14px 28px !important;
  font-size: 1rem !important;
}
@media (max-width: 767px) {
  .cook-cta-bar > .elementor-container { flex-direction: column !important; gap: 8px; }
  .cook-cta-bar .elementor-button { min-width: unset; width: 100%; }
}

/* 22rx: Single Location 3-button CTA band (#5a4e030 on #134).
   Equalized button width (max of 3 labels = ~265px) overflows side columns
   when viewport ~800-950px, wrapping the third button to a new row at the
   left. Force vertical stack at tablet and below (<=1024px, mzkg.25) so all 3 center cleanly. */
@media (max-width: 1024px) {
  .elementor-element-5a4e030 > .elementor-container {
    flex-direction: column !important;
    align-items: center !important;
    gap: 12px;
  }
  .elementor-element-5a4e030 > .elementor-container > .elementor-column {
    width: 100% !important;
    max-width: 320px;
  }
}

/* ===== Homepage Trust Bar ===== */
.cook-trust-bar, .cook-trust-bar.elementor-section {
  background-color: #5E5E5E !important;
  padding: 16px 20px !important;
}
.cook-trust-bar > .elementor-container {
  align-items: center !important;
}
.cook-trust-bar .elementor-heading-title {
  font-size: 1.125rem !important;
  letter-spacing: 1px;
}

/* ===== Breakpoint Reference =====
 * Mobile:  max-width: 767px
 * Tablet:  min-width: 768px and max-width: 1023px
 * Desktop: min-width: 1024px
 * Wide:    min-width: 1280px
 * ================================ */

/* Smooth scroll for anchor links */
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

/* ===== Base Styles ===== */
/* === btbg kerning loosen (2026-05-18): body 0.015em → 0.01em; gently tighten headings (-0.005em)
   to counter Roboto Slab's natural width. Tight-kerning surfaces (.cook-utility-bar, code/pre/kbd,
   .cook-btn-*) re-reset below. */
body {
  background-color: var(--cook-bg-primary);
  color: var(--cook-text-primary);
  font-family: 'Cabin', sans-serif;
  font-size: 1rem;
  line-height: 1.6;
  letter-spacing: 0.01em;
  font-kerning: normal;
}

/* btbg: restore tight kerning on surfaces that need it */
.cook-utility-bar,
.cook-utility-bar *,
code, pre, kbd, samp {
  letter-spacing: normal;
}

/* html prefix bumps specificity to (0,0,2) — beats hello-elementor reset.css which loads AFTER child style.css. See claude-gotchas.md. */
html h1, html h2 {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  text-transform: uppercase;
  color: var(--cook-red);
  letter-spacing: -0.005em; /* btbg */
}
html h3, html h4 {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  color: var(--cook-text-primary);
  letter-spacing: -0.005em; /* btbg */
}

html h5, html h6 {
  font-family: 'Roboto Slab', serif;
  font-weight: 600;
  text-transform: uppercase;
}

a { color: var(--cook-red); }
a:hover { color: var(--cook-red-hover); }

/* ===== CTA Buttons ===== */
.cook-btn-primary {
  background-color: var(--cook-red);
  color: var(--cook-white);
  border: none;
  padding: 14px 28px;
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.1rem;
  text-transform: uppercase;
  border-radius: var(--cook-radius-sm);
  cursor: pointer;
  transition: background-color var(--cook-transition-fast), transform var(--cook-transition-fast);
  min-height: 44px;
}
.cook-btn-primary:hover {
  background-color: var(--cook-red-hover);
  transform: translateY(-1px);
}
.cook-btn-primary:active {
  background-color: var(--cook-red-dark);
  transform: translateY(0);
}

.cook-btn-secondary {
  background-color: transparent;
  color: var(--cook-text-primary);
  border: 2px solid var(--cook-dark);
  padding: 12px 26px;
  box-sizing: border-box;
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.1rem;
  text-transform: uppercase;
  border-radius: var(--cook-radius-sm);
  cursor: pointer;
  transition: all var(--cook-transition-fast);
  min-height: 44px;
}
.cook-btn-secondary:hover {
  background-color: var(--cook-dark);
  color: var(--cook-white);
}

.cook-btn-tertiary {
  background: none;
  border: none;
  color: var(--cook-red);
  font-family: 'Cabin', sans-serif;
  font-weight: 600;
  text-decoration: underline;
  cursor: pointer;
  padding: 8px 0;
  min-height: 44px;
  transition: color var(--cook-transition-fast);
}
.cook-btn-tertiary:hover {
  color: var(--cook-red-hover);
}

/* ===== Elementor nav-menu — desktop + mobile =====
   Replaces per-widget Style-tab overrides on template #129 nav-menu (kdlp Phase G).
   Roboto Slab 700 uppercase matches brand heading feel. Body color on light bg.
   Hover to Cook red; current item inherits red. */
.elementor-nav-menu a.elementor-item,
.elementor-nav-menu .elementor-item {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.125rem;
  text-transform: uppercase;
  letter-spacing: 0.015em;
  color: var(--cook-body, #4F4F4F);
}
.elementor-nav-menu a.elementor-item:hover,
.elementor-nav-menu a.elementor-item:focus,
.elementor-nav-menu a.elementor-item.elementor-item-active {
  color: var(--cook-red, #BA2031);
}
/* Mobile dropdown — same treatment, Cabin-friendly size tweak for longer lists */
.elementor-nav-menu--dropdown a.elementor-item,
.elementor-nav-menu--dropdown .elementor-item {
  font-size: 1rem;
}

/* ===== Nav Header CTA Button ===== */
.cook-nav-cta .elementor-button {
  background-color: var(--cook-red);
  color: var(--cook-white);
  border: none;
  padding: 12px 24px;
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 0.95rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  border-radius: var(--cook-radius-sm);
  min-height: 44px;
  transition: background-color var(--cook-transition-fast), transform var(--cook-transition-fast);
}
.cook-nav-cta .elementor-button:hover {
  background-color: var(--cook-red-hover);
  transform: translateY(-1px);
}
.cook-nav-cta .elementor-button:active {
  background-color: var(--cook-red-dark);
  transform: translateY(0);
}
@media (max-width: 1024px) {
  .cook-nav-cta .elementor-button { padding: 10px 18px; font-size: 0.875rem; }
}

/* ===== Unified Button System (Wave 3 / p91g) =====
   Base + 6 variants × 3 sizes + state matrix.
   New code uses: .cook-btn .cook-btn--{variant} [.cook-btn--sm|--lg]
   Legacy classes (.cook-btn-primary/.cook-customizer-btn/etc.) untouched
   this phase — migration in Phase 3. */

.cook-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--cook-space-2);
  box-sizing: border-box;
  min-height: var(--cook-touch-target);
  min-width: var(--cook-touch-target);
  padding: 10px 24px;
  font-family: 'Roboto Slab', serif;
  font-weight: var(--cook-font-weight-bold);
  font-size: 1rem;
  line-height: 1.2;
  text-transform: uppercase;
  text-decoration: none;
  letter-spacing: 0.02em;
  border: var(--cook-btn-border-width) solid transparent;
  border-radius: var(--cook-radius-sm);
  cursor: pointer;
  user-select: none;
  /* GPU layer + consistent antialiasing — prevents sub-pixel text jitter
     during transform on hover. */
  backface-visibility: hidden;
  -webkit-font-smoothing: antialiased;
  transform: translate3d(0, 0, 0);
  transition:
    background-color var(--cook-transition-fast),
    color var(--cook-transition-fast),
    border-color var(--cook-transition-fast),
    transform var(--cook-transition-fast),
    box-shadow var(--cook-transition-fast);
}

/* Dual-ring focus — solves red-on-red invisibility (a11y memo §2.3). */
.cook-btn:focus-visible {
  outline: none;
  box-shadow:
    inset 0 0 0 2px var(--cook-white),
    0 0 0 var(--cook-btn-focus-ring) var(--cook-red);
}

/* Kill parent-theme underline leak.
   hello-elementor applies `.page-content a { text-decoration: underline }`
   (0,1,1) — ties my `.cook-btn` (0,1,0). Scoping to `a.cook-btn` (0,1,1)
   wins by cascade order (child loads after parent). */
a.cook-btn,
a.cook-btn:hover,
a.cook-btn:focus,
a.cook-btn:focus-visible {
  text-decoration: none;
}
a.cook-btn--link,
a.cook-btn--link:hover,
a.cook-btn--link:focus-visible {
  text-decoration: underline;
}

.cook-btn[disabled],
.cook-btn[aria-disabled="true"] {
  opacity: 0.55;
  cursor: not-allowed;
  transform: none !important;
  box-shadow: none !important;
}

/* === Variants: scoped to .cook-btn base so they don't paint Elementor widget
   wrappers that carry just the variant class. Elementor button widgets go
   through the universal button map in inc/setup.php which scopes variants to
   .elementor-widget-button.cook-btn--X — so those remain styled correctly. === */

/* === Sizes === */
.cook-btn.cook-btn--sm {
  min-height: var(--cook-touch-target-sm);
  min-width: var(--cook-touch-target-sm);
  padding: 6px 16px;
  font-size: 0.875rem;
}
.cook-btn.cook-btn--lg {
  min-height: var(--cook-touch-target-lg);
  min-width: var(--cook-touch-target-lg);
  padding: 14px 32px;
  font-size: 1.125rem;
}

/* === --primary: red fill + white text === */
.cook-btn.cook-btn--primary {
  background-color: var(--cook-red);
  color: var(--cook-white);
  border-color: var(--cook-red);
}
.cook-btn.cook-btn--primary:hover {
  background-color: var(--cook-red-hover);
  border-color: var(--cook-red-hover);
  color: var(--cook-white);
  transform: translate3d(0, -1px, 0);
  box-shadow: var(--cook-shadow-card-hover);
}
.cook-btn.cook-btn--primary:active {
  background-color: var(--cook-red-dark-hover);
  border-color: var(--cook-red-dark-hover);
  transform: translate3d(0, 0, 0);
  box-shadow: none;
}

/* === --secondary: white fill + red border + red text, flip on hover === */
.cook-btn.cook-btn--secondary {
  background-color: var(--cook-white);
  color: var(--cook-red);
  border-color: var(--cook-red);
}
.cook-btn.cook-btn--secondary:hover {
  background-color: var(--cook-red);
  color: var(--cook-white);
  border-color: var(--cook-red);
  transform: translate3d(0, -1px, 0);
  box-shadow: var(--cook-shadow-card-hover);
}
.cook-btn.cook-btn--secondary:active {
  background-color: var(--cook-red-dark-hover);
  border-color: var(--cook-red-dark-hover);
  transform: translate3d(0, 0, 0);
  box-shadow: none;
}

/* === --ghost: transparent + dark outline + body text === */
.cook-btn.cook-btn--ghost {
  background-color: transparent;
  color: var(--cook-text);
  border-color: var(--cook-dark);
}
.cook-btn.cook-btn--ghost:hover {
  background-color: var(--cook-dark);
  color: var(--cook-white);
  border-color: var(--cook-dark);
  transform: translate3d(0, -1px, 0);
}

/* === --link: underlined red, no chrome === */
.cook-btn.cook-btn--link {
  background: transparent;
  border-color: transparent;
  color: var(--cook-red);
  padding: 8px 4px;
  text-transform: none;
  text-decoration: underline;
  text-underline-offset: 3px;
  font-family: 'Cabin', sans-serif;
  font-weight: var(--cook-font-weight-semibold);
  letter-spacing: normal;
}
.cook-btn.cook-btn--link:hover {
  color: var(--cook-red-hover);
  text-decoration-thickness: 2px;
}
.cook-btn.cook-btn--link:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px var(--cook-red);
  border-radius: 2px;
}

/* === --icon: square tap target, icon-only === */
.cook-btn.cook-btn--icon {
  width: var(--cook-touch-target);
  height: var(--cook-touch-target);
  padding: 0;
  background: transparent;
  color: var(--cook-text);
  border-color: transparent;
}
.cook-btn.cook-btn--icon:hover {
  background: var(--cook-neutral-100);
  color: var(--cook-red);
}
.cook-btn.cook-btn--icon.cook-btn--sm {
  width: var(--cook-touch-target-sm);
  height: var(--cook-touch-target-sm);
}
/* Icon on red/dark surfaces — white glyph, inherits base :hover (light fill + red). */
.cook-btn.cook-btn--icon-inverse {
  color: var(--cook-white);
}

/* === --primary-inverse: white fill + red text + white border.
   Red/dark surfaces (CTA band #780, footer, red-hero).
   Hover = lighter white fill (Q3: subtle, not red-fill). === */
.cook-btn.cook-btn--primary-inverse {
  background-color: var(--cook-white);
  color: var(--cook-red);
  border-color: var(--cook-white);
}
.cook-btn.cook-btn--primary-inverse:hover {
  background-color: var(--cook-neutral-100);
  color: var(--cook-red-dark-hover);
  border-color: var(--cook-neutral-100);
  transform: translate3d(0, -1px, 0);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
}
.cook-btn.cook-btn--primary-inverse:active {
  background-color: var(--cook-neutral-200);
  transform: translate3d(0, 0, 0);
  box-shadow: none;
}
.cook-btn.cook-btn--primary-inverse:focus-visible {
  outline: none;
  box-shadow:
    inset 0 0 0 2px var(--cook-red),
    0 0 0 var(--cook-btn-focus-ring) var(--cook-white);
}

/* Forced-colors — let OS render chrome, keep focus visible. */
@media (forced-colors: active) {
  .cook-btn { border-color: CanvasText; }
  .cook-btn:focus-visible { outline: 3px solid Highlight; outline-offset: 2px; }
}

/* Mobile nav bar: keep logo + hamburger on one row, CTA button on its own row below.
   Elementor defaults to flex-direction: column on mobile, which stacks the
   three columns vertically — that's what leaves the hamburger floating on
   its own row below the logo. */
@media (max-width: 767px) {
  .cook-nav-bar > .elementor-container {
    flex-direction: row !important;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
  }
  /* Logo column: auto-width, left-aligned */
  .cook-nav-bar > .elementor-container > .elementor-column:nth-child(1) {
    width: auto !important;
    max-width: 60%;
    flex: 0 0 auto;
  }
  /* Nav-menu column (hamburger): fills remaining space, hamburger right-aligned.
     flex-basis: 0 prevents the column from claiming its natural 100% width and
     forcing a wrap — with basis 0 it grows from zero to fill whatever space
     col 1 leaves behind on the same row. */
  .cook-nav-bar > .elementor-container > .elementor-column:nth-child(2) {
    width: auto !important;
    flex: 1 1 0;
    min-width: 0;
  }
  .cook-nav-bar > .elementor-container > .elementor-column:nth-child(2) .elementor-menu-toggle {
    margin-left: auto;
  }
  /* CTA button column: full width, own row */
  .cook-nav-bar > .elementor-container > .elementor-column:nth-child(3) {
    width: 100% !important;
    flex: 0 0 100%;
  }
}

/* ===== Unified Form System (Phase C / p91g) =====
   Scopes:
     .cook-form       — native HTML forms (design-system page samples)
     .elementor-form  — Elementor Pro form widget (GW #627, #634)
   Both land on the same visual baseline via shared input/label selectors.
   Submit button inherits cook-btn--primary via ancestor bridge at the end.

   No !important here — Elementor's form widget does not inline styles by
   default. If per-widget Style overrides appear (Phase G audit), clear them
   rather than escalate specificity. */

/* --- Field-group row (vertical stack, above-label convention) --- */
.cook-form .cook-field,
.elementor-form .elementor-field-group {
  display: flex;
  flex-direction: column;
  gap: var(--cook-space-2);
  margin-bottom: var(--cook-space-4);
}

/* Hide Elementor's hidden-type rows entirely (don't reserve vertical space). */
.elementor-form .elementor-field-type-hidden {
  display: none;
}

/* --- Label --- */
.cook-form label,
.elementor-form .elementor-field-label {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-label-size);
  font-weight: var(--cook-label-weight);
  color: var(--cook-label-color);
  line-height: 1.4;
  margin: 0;
}

/* Required asterisk — Elementor emits `.elementor-field-required` on row. */
.cook-form .cook-field--required > label::after,
.elementor-form .elementor-field-required > .elementor-field-label::after {
  content: " *";
  color: var(--cook-red);
  font-weight: var(--cook-font-weight-bold);
}

/* --- Inputs (text/email/tel/url/number/password + textarea + select) --- */
.cook-form input[type="text"],
.cook-form input[type="email"],
.cook-form input[type="tel"],
.cook-form input[type="url"],
.cook-form input[type="number"],
.cook-form input[type="password"],
.cook-form input[type="search"],
.cook-form textarea,
.cook-form select,
.elementor-form .elementor-field-textual,
.elementor-form .elementor-select-wrapper select {
  width: 100%;
  box-sizing: border-box;
  min-height: var(--cook-input-height);
  padding: var(--cook-input-padding-y) var(--cook-input-padding-x);
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-input-font-size);
  line-height: 1.4;
  color: var(--cook-input-text);
  background: var(--cook-input-bg);
  border: 1px solid var(--cook-input-border);
  border-radius: var(--cook-input-radius);
  box-shadow: none;
  transition:
    border-color var(--cook-transition-fast),
    box-shadow var(--cook-transition-fast),
    background-color var(--cook-transition-fast);
  appearance: none;
  -webkit-appearance: none;
}

.cook-form textarea,
.elementor-form textarea.elementor-field-textual {
  min-height: calc(var(--cook-input-height) * 2.5);
  resize: vertical;
  line-height: 1.5;
}

/* Placeholder */
.cook-form ::placeholder,
.elementor-form ::placeholder {
  color: var(--cook-input-placeholder);
  opacity: 1;
}

/* Hover — subtle border darken, no color shift (reserves red for focus). */
.cook-form input:hover:not(:disabled):not([readonly]),
.cook-form textarea:hover:not(:disabled):not([readonly]),
.cook-form select:hover:not(:disabled),
.elementor-form .elementor-field-textual:hover:not(:disabled):not([readonly]),
.elementor-form .elementor-select-wrapper select:hover:not(:disabled) {
  border-color: var(--cook-input-border-hover);
}

/* Focus — red border + red-tinted glow. Matches button focus family. */
.cook-form input:focus,
.cook-form input:focus-visible,
.cook-form textarea:focus,
.cook-form textarea:focus-visible,
.cook-form select:focus,
.cook-form select:focus-visible,
.elementor-form .elementor-field-textual:focus,
.elementor-form .elementor-field-textual:focus-visible,
.elementor-form .elementor-select-wrapper select:focus {
  outline: none;
  border-color: var(--cook-input-border-focus);
  box-shadow: var(--cook-input-focus-ring);
}

/* Error — class-based (native) + HTML5 pseudo (:user-invalid) for real forms. */
.cook-form .cook-field--error input,
.cook-form .cook-field--error textarea,
.cook-form .cook-field--error select,
.cook-form input[aria-invalid="true"],
.cook-form textarea[aria-invalid="true"],
.cook-form select[aria-invalid="true"],
.elementor-form .elementor-field-textual[aria-invalid="true"],
.elementor-form .elementor-error .elementor-field-textual {
  border-color: var(--cook-input-border-error);
}
.cook-form .cook-field--error input:focus,
.cook-form .cook-field--error textarea:focus,
.cook-form .cook-field--error select:focus,
.elementor-form .elementor-field-textual[aria-invalid="true"]:focus,
.elementor-form .elementor-error .elementor-field-textual:focus {
  box-shadow: 0 0 0 3px rgba(186, 32, 49, 0.28);
}

/* Inline per-field validation message (v37m.12, LF-04). Injected by
   js/form-validation.js as .cook-field-error inside the field-group row. */
.cook-field-error {
  display: block;
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm);
  line-height: 1.4;
  color: var(--cook-error-color);
  margin-top: calc(var(--cook-space-2) * -0.5);
}

/* Disabled + readonly */
.cook-form input:disabled,
.cook-form textarea:disabled,
.cook-form select:disabled,
.cook-form input[readonly],
.cook-form textarea[readonly],
.elementor-form .elementor-field-textual:disabled,
.elementor-form .elementor-field-textual[readonly] {
  background: var(--cook-input-bg-disabled);
  color: var(--cook-text-muted);
  cursor: not-allowed;
  border-color: var(--cook-border-subtle);
}

/* --- Select caret — keep Elementor's SVG wrapper, recolor + position --- */
.cook-form select {
  padding-right: calc(var(--cook-input-padding-x) + 24px);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M2 4l4 4 4-4' stroke='%235E5E5E' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right var(--cook-input-padding-x) center;
  background-size: 12px 12px;
}
.elementor-form .elementor-select-wrapper { position: relative; }
.elementor-form .elementor-select-wrapper .select-caret-down-wrapper {
  position: absolute;
  top: 50%;
  right: var(--cook-input-padding-x);
  transform: translateY(-50%);
  pointer-events: none;
  display: flex;
  align-items: center;
  color: var(--cook-text-muted);
}
.elementor-form .elementor-select-wrapper .select-caret-down-wrapper svg {
  width: 12px;
  height: 12px;
  fill: currentColor;
}
.elementor-form .elementor-select-wrapper select {
  padding-right: calc(var(--cook-input-padding-x) + 24px);
}

/* --- Checkbox + radio --- */
.cook-form .cook-field--checkbox,
.cook-form .cook-field--radio,
.elementor-form .elementor-field-type-checkbox,
.elementor-form .elementor-field-type-radio {
  flex-direction: column;
  gap: var(--cook-space-2);
}
.cook-form .cook-check,
.elementor-form .elementor-field-subgroup label {
  display: inline-flex;
  align-items: center;
  gap: var(--cook-space-2);
  font-size: var(--cook-input-font-size);
  font-weight: 400;
  color: var(--cook-input-text);
  cursor: pointer;
  line-height: 1.4;
}
.cook-form input[type="checkbox"],
.cook-form input[type="radio"],
.elementor-form input[type="checkbox"],
.elementor-form input[type="radio"] {
  width: 18px;
  height: 18px;
  min-height: 18px;
  flex-shrink: 0;
  margin: 0;
  padding: 0;
  accent-color: var(--cook-red);
  cursor: pointer;
}

/* --- Help + error messages --- */
.cook-form .cook-field__help,
.elementor-form .elementor-field-group .elementor-help-inline {
  font-size: var(--cook-help-size);
  color: var(--cook-help-color);
  line-height: 1.4;
  margin: 0;
}
.cook-form .cook-field__error,
.elementor-form .elementor-message-danger,
.elementor-form .elementor-field-group .elementor-error-message {
  font-size: var(--cook-help-size);
  color: var(--cook-error-color);
  font-weight: var(--cook-font-weight-semibold);
  line-height: 1.4;
  margin: 0;
}

/* --- Adjacent button pattern ---
   Buttons stacked in the same widget-wrap match widths at the widest button's natural size.
   Elementor DOM: .elementor-column > .elementor-widget-wrap > .elementor-widget-button
   Technique: widget-wrap becomes inline-grid sized to max-content (widest child),
   then each button stretches to 100% of the grid cell. Centered within the column. */
.elementor-widget-wrap.elementor-element-populated:has(> .elementor-widget-button + .elementor-widget-button) {
  display: grid !important;
  grid-auto-rows: auto;
  width: max-content !important;
  max-width: 100% !important;
  margin-inline: auto !important;
  gap: 0;
  flex-wrap: initial;
}
.elementor-widget-wrap.elementor-element-populated:has(> .elementor-widget-button + .elementor-widget-button) > .elementor-widget-button {
  width: 100% !important;
}
.elementor-widget-wrap.elementor-element-populated:has(> .elementor-widget-button + .elementor-widget-button) > .elementor-widget-button .elementor-button {
  width: 100% !important;
  max-width: 100%;
  justify-content: center;
}

/* Fallback for browsers without :has() — adjacent-sibling selector still lets 2nd+ button match */
@supports not selector(:has(*)) {
  .elementor-widget-wrap > .elementor-widget-button + .elementor-widget-button .elementor-button {
    width: 100%;
  }
}

/* --- Building Card (#128) — customizer + View Details side-by-side (bd pdfy) ---
   The card column is template element 357afdf (element-ID-scoped, the cook-hero-red
   pattern). Its two trailing button widgets are the customizer button (global shortcode
   widget gcust128, inner anchor .cook-customizer-btn) and View Details (button widget
   14cd383). The .elementor-widget-wrap is already flex-wrap, so resizing both widgets to
   ~50% drops them onto a shared last row. Gated on :has(.elementor-element-gcust128 a):
   2 of 15 buildings (Dog Condo, Chicken Coop) have no customizer URL → that widget renders
   empty (no anchor); there we hide it and View Details stays full-width. Graceful fallback
   without :has() is the prior stacked layout. */
.elementor-element-357afdf > .elementor-widget-wrap { column-gap: 8px; }
.elementor-element-357afdf > .elementor-widget-wrap:has(.elementor-element-gcust128 a) > .elementor-element-gcust128,
.elementor-element-357afdf > .elementor-widget-wrap:has(.elementor-element-gcust128 a) > .elementor-element-14cd383 {
  flex: 0 0 calc(50% - 4px);
  max-width: calc(50% - 4px);
}
.elementor-element-357afdf .elementor-element-gcust128:not(:has(a)) { display: none; }
.elementor-element-357afdf .elementor-element-gcust128 .cook-customizer-btn,
.elementor-element-357afdf .elementor-element-14cd383 .elementor-button {
  width: 100%;
  justify-content: center;
}
/* Stack at 479px and below. Mirrors the desktop :has() selector so specificity ties (0,4,1)
   and source order wins — a plain selector here would lose to the desktop rule, since
   media queries add no specificity. */
@media (max-width: 479px) {
  .elementor-element-357afdf > .elementor-widget-wrap:has(.elementor-element-gcust128 a) > .elementor-element-gcust128,
  .elementor-element-357afdf > .elementor-widget-wrap:has(.elementor-element-gcust128 a) > .elementor-element-14cd383 {
    flex: 0 0 100%;
    max-width: 100%;
  }
}

/* --- Building Size (#1011) — hide dead "Customize This Shed" button (v37m.27) ---
   bsize_cust_btn is a NATIVE Elementor button whose href is a DCE Pods-url tag
   (building_size:781:customizer_url). Unlike the card's self-hiding shortcode widget
   (gcust128 above), it ALWAYS renders an anchor — but when customizer_url is empty DCE
   omits the href ENTIRELY (verified: dead renders <a class="elementor-button" role=
   "button"> with no href / no elementor-button-link class; live renders <a … href=
   "https://myshed…" target="_blank">). 4 specialty sizes have no IdeaRoom configurator
   model at all (Chicken Coop 6x6/6x12, Greenhouse 8x20, Dog Condo 8x12), so this is a
   permanent empty state — a dead button, marginally worse than hidden. Hide the widget
   when its button anchor has no href — mirrors [cook_customizer_button]/size-grid
   self-hide. A populated button always has an href, so it is never hidden.
   Belt-and-suspenders anchor-hide covers browsers without :has(). */
.elementor-element-bsize_cust_btn:has(a.elementor-button:not([href])) { display: none !important; }
.elementor-element-bsize_cust_btn a.elementor-button:not([href]) { display: none !important; }

/* --- Lead-form anchor scroll offset (gh12.6) ---
   #building-lead-form is the anchor target for the hero "Get Your Local Quote" CTA and
   the mobile sticky bar on building + building_size singles. Without a scroll-margin the
   sticky header + store-selector bar overlap the form heading after the jump. */
#building-lead-form { scroll-margin-top: 110px; }
@media (max-width: 767px) { #building-lead-form { scroll-margin-top: 90px; } }

/* --- Spam honeypot (v37m.3) ---
   JS injects .cook-hp-field into every Elementor form (js/form-tracking.js). Hidden
   off-screen (not display:none — some bots skip display:none) so humans never fill it;
   a non-empty value server-side flags the submission as a bot. */
.cook-hp-field {
  position: absolute !important;
  left: -9999px !important;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* --- Submit button bridge ---
   Form submit is `.elementor-button` NOT inside `.elementor-widget-button`,
   so the universal Elementor button map in inc/setup.php does NOT cover it.
   Bridge here: Elementor form submits adopt cook-btn base + --primary variant. */
.elementor-form .elementor-field-type-submit .elementor-button,
.elementor-form button[type="submit"].elementor-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--cook-space-2);
  box-sizing: border-box;
  min-height: var(--cook-touch-target);
  min-width: var(--cook-touch-target);
  padding: 10px 24px;
  font-family: 'Roboto Slab', serif;
  font-weight: var(--cook-font-weight-bold);
  font-size: 1rem;
  line-height: 1.2;
  text-transform: uppercase;
  text-decoration: none;
  letter-spacing: 0.02em;
  border: var(--cook-btn-border-width) solid var(--cook-red);
  border-radius: var(--cook-radius-sm);
  background: var(--cook-red);
  color: var(--cook-white);
  cursor: pointer;
  backface-visibility: hidden;
  -webkit-font-smoothing: antialiased;
  transform: translate3d(0, 0, 0);
  transition:
    background-color var(--cook-transition-fast),
    border-color var(--cook-transition-fast),
    transform var(--cook-transition-fast),
    box-shadow var(--cook-transition-fast);
}
.elementor-form .elementor-field-type-submit .elementor-button:hover {
  background: var(--cook-red-hover);
  border-color: var(--cook-red-hover);
  color: var(--cook-white);
  transform: translate3d(0, -1px, 0);
  box-shadow: var(--cook-shadow-card-hover);
}
.elementor-form .elementor-field-type-submit .elementor-button:focus-visible {
  outline: none;
  box-shadow:
    inset 0 0 0 2px var(--cook-white),
    0 0 0 var(--cook-btn-focus-ring) var(--cook-red);
}
.elementor-form .elementor-field-type-submit .elementor-button:active {
  background: var(--cook-red-dark-hover);
  border-color: var(--cook-red-dark-hover);
  transform: translate3d(0, 0, 0);
  box-shadow: none;
}

/* Forced-colors — preserve form legibility */
@media (forced-colors: active) {
  .cook-form input, .cook-form textarea, .cook-form select,
  .elementor-form .elementor-field-textual { border-color: CanvasText; }
  .cook-form input:focus, .cook-form textarea:focus, .cook-form select:focus,
  .elementor-form .elementor-field-textual:focus { outline: 2px solid Highlight; outline-offset: 2px; }
}

/* ===== Skeleton loading (Phase F / p91g) =====
   Use for above-the-fold content that's fetched async (price lookup,
   dealer-aware pricing refresh). Matches card proportions. */
.cook-skeleton {
  display: block;
  background:
    linear-gradient(90deg,
      var(--cook-neutral-100) 0%,
      var(--cook-neutral-200) 50%,
      var(--cook-neutral-100) 100%);
  background-size: 200% 100%;
  border-radius: var(--cook-radius-sm);
  animation: cook-skeleton-shimmer 1.4s ease-in-out infinite;
  color: transparent;
  user-select: none;
}
.cook-skeleton--text { height: 1em; margin-bottom: var(--cook-space-2); }
.cook-skeleton--text-lg { height: 1.5em; margin-bottom: var(--cook-space-3); }
.cook-skeleton--block { height: 120px; }
.cook-skeleton--circle { border-radius: 50%; width: 48px; height: 48px; }
@keyframes cook-skeleton-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
@media (prefers-reduced-motion: reduce) {
  .cook-skeleton { animation: none; background: var(--cook-neutral-200); }
}

/* ===== Text primitives (Phase G.1 / kdlp) =====
   Eyebrow + label utilities. Prereq for #131 override clear — subtitle/label
   heading widgets on Building single use these instead of Style-tab typography.
   Apply via Elementor widget "CSS Classes" field (wrapper) or directly on <p>. */
.cook-text-eyebrow,
.cook-text-label {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm);        /* 13px */
  color: var(--cook-text-muted);         /* #5E5E5E, WCAG AA on white */
  margin: 0;
}
.cook-text-lede {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-xl);        /* 20px */
  font-weight: 400;
  line-height: 1.5;
  color: inherit;                        /* red-hero scope → white; light surfaces → body color */
  margin: 0;
}
.elementor-widget.cook-text-lede .elementor-heading-title {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-xl);
  font-weight: 400;
  line-height: 1.5;
  color: inherit;
  margin: 0;
}
.cook-text-eyebrow {
  font-weight: var(--cook-font-weight-semibold);  /* 600 */
  text-transform: uppercase;
  letter-spacing: 0.5px;
}
.cook-text-label {
  font-weight: 400;
}
/* Elementor heading-widget wrapper variants — class lands on .elementor-widget,
   inner <p> inherits font; color/transform target the rendered element. */
.elementor-widget.cook-text-eyebrow .elementor-heading-title,
.elementor-widget.cook-text-label .elementor-heading-title {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm);
  color: var(--cook-text-muted);
  margin: 0;
}
.elementor-widget.cook-text-eyebrow .elementor-heading-title {
  font-weight: var(--cook-font-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}
.elementor-widget.cook-text-label .elementor-heading-title {
  font-weight: 400;
}

/* .cook-tagline — card marketing hook ("Our #1 Selling Shed", "Built for Gardeners").
   Narrow documented exception to "red reserved for CTAs + h1/h2" — card editorial
   tagline is a recurring component pattern, not ornamental color.
   Cabin 600 / 14px / Cook red. Red-on-white = 5.8:1 (WCAG AA). */
.cook-tagline,
.elementor-widget.cook-tagline .elementor-widget-container > *,
.elementor-widget.cook-tagline .elementor-widget-container p {
  font-family: 'Cabin', sans-serif;
  font-weight: var(--cook-font-weight-semibold, 600);
  font-size: var(--cook-text-sm, 0.8125rem);
  color: var(--cook-red, #BA2031);
  margin: 0;
  line-height: 1.4;
}

/* Loop-item card title convention — uppercase, dark, tracked.
   Scopes to Elementor Loop Grid items (.e-loop-item rendered by loop widget).
   Replaces per-widget typography overrides that were cleared during kdlp. */
.e-loop-item .elementor-widget-heading .elementor-heading-title {
  text-transform: uppercase;
  color: var(--cook-dark, #373737);
  letter-spacing: 0.02em;
}

/* ===== Callouts (Phase E / p91g) =====
   Contextual notices for in-page info/warnings/errors/success.
   Left-border + tinted bg + strong title. Use sparingly. */
.cook-callout {
  display: flex;
  gap: var(--cook-space-3);
  padding: var(--cook-space-3) var(--cook-space-4);
  border-left: 4px solid var(--cook-border);
  border-radius: var(--cook-radius-sm);
  background: var(--cook-neutral-100);
  color: var(--cook-text);
  font-size: var(--cook-text-sm);
  line-height: 1.5;
  margin: var(--cook-space-4) 0;
}
.cook-callout__icon {
  flex-shrink: 0;
  width: 20px;
  height: 20px;
  font-size: 1.125rem;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cook-callout__body { flex: 1; min-width: 0; }
.cook-callout__title {
  display: block;
  font-family: 'Roboto Slab', serif;
  font-weight: var(--cook-font-weight-bold);
  font-size: var(--cook-text-base);
  color: inherit;
  margin: 0 0 var(--cook-space-1);
}
.cook-callout p { margin: 0; }
.cook-callout p + p { margin-top: var(--cook-space-2); }

.cook-callout--info    { border-left-color: #2B6CB0; background: #EBF4FB; color: #1A365D; }
.cook-callout--success { border-left-color: #2F855A; background: #E6F4EC; color: #1C4532; }
.cook-callout--warning { border-left-color: #B7791F; background: #FEF5E7; color: #744210; }
.cook-callout--error   { border-left-color: var(--cook-red); background: #FDECEE; color: #742027; }
.cook-callout--info    .cook-callout__icon { color: #2B6CB0; }
.cook-callout--success .cook-callout__icon { color: #2F855A; }
.cook-callout--warning .cook-callout__icon { color: #B7791F; }
.cook-callout--error   .cook-callout__icon { color: var(--cook-red); }

/* ===== Tables (Phase E / p91g) =====
   Baseline data table. Opt-in stripes via .cook-table--striped. */
.cook-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--cook-text-sm);
  line-height: 1.5;
  color: var(--cook-text);
}
.cook-table th,
.cook-table td {
  text-align: left;
  padding: var(--cook-space-3) var(--cook-space-4);
  border-bottom: 1px solid var(--cook-border-subtle);
  vertical-align: top;
}
.cook-table th {
  font-family: 'Roboto Slab', serif;
  font-weight: var(--cook-font-weight-bold);
  font-size: var(--cook-text-xs);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--cook-text-muted);
  background: var(--cook-neutral-100);
  border-bottom: 2px solid var(--cook-border);
}
.cook-table--striped tbody tr:nth-child(even) {
  background: var(--cook-neutral-100);
}
.cook-table tbody tr:hover { background: rgba(186, 32, 49, 0.04); }

/* ===== Dividers ===== */
.cook-hr,
hr.cook-hr {
  border: 0;
  border-top: 1px solid var(--cook-border-subtle);
  margin: var(--cook-space-6) 0;
}
.cook-hr--strong { border-top-color: var(--cook-border); }
.cook-hr--red { border-top: 2px solid var(--cook-red); }

/* ===== Links (Phase E / p91g) =====
   Inline body-text links + standalone variants (back-arrow / external).
   Use .cook-btn--link for link-styled actions in button contexts. */
.cook-link {
  color: var(--cook-red);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
  transition: color var(--cook-transition-fast);
}
.cook-link:hover { color: var(--cook-red-hover); text-decoration-thickness: 2px; }
.cook-link:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px var(--cook-red);
  border-radius: 2px;
}

.cook-link--back::before { content: "\2190\00a0"; } /* ← + nbsp */

/* Editorial body links (text-editor widget paragraphs) — auto-underline + Cook red.
   Hello Elementor parent leaves links at #cc3366 (2.5:1 vs body #333) without underline,
   failing WCAG 1.4.1 (color alone) + 1.4.3 (contrast). Scope to text-editor body so we
   don't catch Elementor-styled UI links (buttons, nav, etc.). :where() keeps specificity
   low so red-hero / dark-hero scopes still win for inverted contexts.
   2026-05-07 emda — fixes /contact-us/ + /shed-styles/.../12x24/ link-in-text-block. */
:where(.elementor-widget-text-editor p, .elementor-widget-theme-post-content p, .cook-text-lede p) a:not(.cook-btn):not(.elementor-button):not(.cook-link--back) {
  color: var(--cook-red, #BA2031);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}
:where(.elementor-widget-text-editor p, .elementor-widget-theme-post-content p) a:not(.cook-btn):not(.elementor-button):hover {
  color: var(--cook-red-hover, #D41A34);
  text-decoration-thickness: 2px;
}

/* === External-link icon policy ===
   Any link flagged as external (target="_blank", .cook-link--external class,
   or rel~="external") gets a trailing "arrow-out-of-box" icon via CSS mask.
   Opts-out: buttons (.cook-btn, .elementor-button), back links, image-only links,
   and same-page anchors. Icon color inherits currentColor via mask technique.
   SVG data URI avoids network request + scales cleanly at any font-size. */
:where(
  a[target="_blank"],
  a.cook-link--external,
  a[rel~="external"]
):not(.cook-btn):not(.elementor-button):not(.cook-link--back):not(:has(> img:only-child))::after {
  content: "";
  display: inline-block;
  width: 0.75em;
  height: 0.75em;
  margin-inline-start: 0.25em;
  vertical-align: -0.08em;
  background-color: currentColor;
  mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9 4H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-4'/><path d='M14 4h6v6'/><path d='M10 14 20 4'/></svg>") center / contain no-repeat;
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9 4H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-4'/><path d='M14 4h6v6'/><path d='M10 14 20 4'/></svg>") center / contain no-repeat;
  flex-shrink: 0;
}

/* Legacy .cook-link--external glyph removed in favor of SVG icon above.
   Kept the class active so editor usage continues to work as a deliberate signal. */

/* ===== Feature List ===== */
.cook-feature-list { list-style: none; padding: 0; }
.cook-feature-list li {
  padding: 8px 0 8px 28px;
  position: relative;
  border-bottom: 1px solid var(--cook-border);
  line-height: 1.5;
}
.cook-feature-list li::before {
  content: '\2713';
  position: absolute;
  left: 0;
  color: var(--cook-red);
  font-weight: 700;
}

/* ===== Size Pills ===== */
.cook-size-pill {
  display: inline-block;
  padding: 8px 16px;
  margin: 4px;
  background: var(--cook-bg-secondary);
  color: var(--cook-text-primary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-sm);
  font-weight: 600;
  font-size: 0.9rem;
  min-height: 44px;
  line-height: 28px;
}

/* ===== Spec Row ===== */
.cook-spec-row {
  display: flex;
  justify-content: space-between;
  padding: 12px 0;
  border-bottom: 1px solid var(--cook-border);
}
.cook-spec-label { color: var(--cook-text-secondary); }
.cook-spec-value { font-weight: 600; color: var(--cook-text-primary); }

/* ===== Cards ===== */
.cook-card {
  background: var(--cook-bg-primary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-md);
  overflow: hidden;
  box-shadow: var(--cook-shadow-card);
  transition: box-shadow var(--cook-transition-fast), transform var(--cook-transition-fast);
}
.cook-card:hover {
  box-shadow: var(--cook-shadow-card-hover);
  transform: translateY(-2px);
}

/* ===== Dark Mode Toggle ===== */
.cook-theme-toggle {
  background: none;
  border: none;
  cursor: pointer;
  padding: 8px;
  color: var(--cook-text-secondary);
  font-size: 1.2rem;
  min-height: 44px;
  min-width: 44px;
}

/* ===== Reduced Motion ===== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}
/* Nav responsive overrides handled in setup.php cook-elementor-fixes block (priority 999) */

/* ===== Utility Bar Touch Targets ===== */
.elementor-element [href^="tel:"],
.elementor-element [href^="mailto:"] {
  display: inline-block;
  min-height: 44px;
  line-height: 44px;
}

/* Pills wrap */
.cook-pills-wrap {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

/* Carousel fallback image */
.cook-carousel__fallback {
  width: 100%;
  border-radius: var(--cook-radius-md);
}

/* Carousel slide images */
.cook-slide {
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
}

/* Dealer info fallback */
.cook-dealer-info__fallback {
  color: var(--cook-text-secondary);
  font-style: italic;
}
.cook-dealer-info__fallback a {
  color: var(--cook-accent);
}

/* Lead form trust copy */
.cook-lead-form__trust {
  text-align: center;
  font-size: 0.875rem;
  color: var(--cook-text-secondary);
  margin: 0 0 20px;
}

/* Lead capture form */
.cook-lead-form {
  background: var(--cook-bg-primary);
  border-radius: var(--cook-radius-md);
  padding: 32px;
  box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
.cook-lead-form__row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin-bottom: 16px;
}
@media (max-width: 767px) {
  .cook-lead-form__row { grid-template-columns: 1fr; }
}
.cook-lead-form__field {
  display: flex;
  flex-direction: column;
}
.cook-lead-form__field--full {
  margin-bottom: 16px;
}
.cook-lead-form label {
  font-family: 'Cabin', sans-serif;
  font-weight: 600;
  font-size: 0.8125rem;
  color: var(--cook-text-primary);
  text-transform: uppercase;
  letter-spacing: 0.3px;
  margin-bottom: 4px;
}
.cook-lead-form input,
.cook-lead-form select,
.cook-lead-form textarea {
  font-family: 'Cabin', sans-serif;
  font-size: 0.9375rem;
  padding: 12px 14px;
  border: 2px solid var(--cook-border);
  border-radius: var(--cook-radius-sm);
  background: var(--cook-bg-primary);
  color: var(--cook-text-primary);
  min-height: 44px;
  transition: border-color var(--cook-transition-fast);
}
.cook-lead-form input:focus,
.cook-lead-form select:focus,
.cook-lead-form textarea:focus {
  border-color: var(--cook-accent);
}
.cook-lead-form input:focus-visible,
.cook-lead-form select:focus-visible,
.cook-lead-form textarea:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}
.cook-lead-form__submit {
  width: 100%;
  padding: 16px;
  background: var(--cook-accent, #BA2031);
  color: #FFFFFF;
  border: none;
  border-radius: var(--cook-radius-sm);
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.125rem;
  text-transform: uppercase;
  cursor: pointer;
  min-height: 44px;
  transition: background-color var(--cook-transition-fast);
}
.cook-lead-form__submit:hover {
  background: var(--cook-accent-hover, #D41A34);
}
.cook-lead-form__submit:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}

/* Secondary button dark mode fix */
[data-theme="dark"] .cook-btn-secondary {
  border-color: var(--cook-text-primary);
  color: var(--cook-text-primary);
}
/* ===== Shortcode Component Styles ===== */

/* Width detail cards */
/* Info-panel variant — bg-secondary signals informational, not tile. */
.cook-width-card {
  background: var(--cook-bg-secondary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-md);
  padding: var(--cook-card-padding);
  margin-bottom: 12px;
}
.cook-width-card h4 {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.25rem;
  color: var(--cook-accent);
  text-transform: uppercase;
  margin: 0 0 12px;
}
.cook-width-card p {
  font-family: 'Cabin', sans-serif;
  font-size: 0.9375rem;
  color: var(--cook-text-primary);
  margin: 0 0 12px;
}
.cook-width-specs {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 8px;
}

/* RTO badge */
.cook-rto-badge {
  background: var(--cook-dark, #373737);
  border-radius: var(--cook-radius-sm);
  padding: 8px 16px;
  display: inline-block;
}
.cook-rto-badge span {
  color: #FFFFFF;
  font-family: 'Cabin', sans-serif;
  font-weight: 600;
  font-size: 0.875rem;
}

/* RTO proximity disclosure (r528 — DRAFT pending baf7 counsel review).
   Neutral, muted, always paired with RTO mentions. Never red (protects red-reservation rule). */
.cook-rto-disclosure {
  display: block;
  margin-top: 4px;
  font-size: 0.75rem;
  line-height: 1.4;
  color: var(--cook-muted, #5E5E5E);
  font-style: italic;
}
.cook-rto-disclosure a { color: inherit; text-decoration: underline; }
.cook-rto-badge .cook-rto-disclosure { color: rgba(255,255,255,0.85); margin-top: 6px; }

/* Site-wide RTO legal disclosure (r528 — rendered via wp_footer, after Elementor footer). */
.cook-legal-disclosure {
  background: var(--cook-bg-secondary, #F5F5F5);
  border-top: 1px solid var(--cook-border, #E0E0E0);
  padding: 16px 24px;
  font-size: 0.75rem;
  line-height: 1.5;
  color: var(--cook-muted, #5E5E5E);
  text-align: center;
}
.cook-legal-disclosure p { max-width: 1100px; margin: 0 auto; }
.cook-legal-disclosure a { color: inherit; text-decoration: underline; }

/* Pricing */
.cook-price {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-base, 0.9375rem);
  color: var(--cook-body-text, #4F4F4F);
  margin: var(--cook-space-2, 8px) 0;
}
.cook-price__amount {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: var(--cook-text-lg, 1.125rem);
  color: var(--cook-red, #BA2031);
}
.cook-price__range {
  color: var(--cook-body-text, #4F4F4F);
}
.cook-price--empty {
  font-size: var(--cook-text-sm, 0.8125rem);
  color: var(--cook-muted, #5E5E5E);
}
.cook-price--empty a {
  color: var(--cook-red, #BA2031);
  text-decoration: none;
  font-weight: 600;
}
.cook-price--empty a:hover {
  text-decoration: underline;
}
.cook-price--empty-note {
  display: block;
  margin-top: 4px;
  font-size: var(--cook-text-xs, 0.75rem);
  color: var(--cook-muted, #5E5E5E);
  font-weight: 400;
}
.cook-price--empty-phone {
  display: inline-block;
  margin-left: 8px;
  padding-left: 8px;
  border-left: 1px solid var(--cook-border-subtle, #D9D9D9);
  color: var(--cook-body-text, #4F4F4F) !important;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  text-decoration: none;
}
.cook-price--empty-phone:hover {
  color: var(--cook-red, #BA2031) !important;
  text-decoration: underline;
}

/* Military discount badge — restrained, dark-gray outline, star glyph */
.cook-military-badge {
  display: flex;
  align-items: center;
  gap: 6px;
  width: fit-content;
  margin: 6px auto 0;
  padding: 4px 10px;
  border: 1px solid var(--cook-dark);
  border-radius: var(--cook-radius-sm);
  background: transparent;
  color: var(--cook-dark);
  font-family: Cabin, sans-serif;
  font-size: var(--cook-text-xs, 0.75rem);
  font-weight: 600;
  text-decoration: none;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  transition: var(--cook-transition-fast, 0.2s ease);
}
.cook-military-badge:hover,
.cook-military-badge:focus {
  background: var(--cook-dark);
  color: var(--cook-white);
  text-decoration: none;
}
/* WCAG 2.4.7 — explicit keyboard focus ring on the two card CTAs that rendered
   with no visible indicator (v37m.10 runtime a11y pass). !important to beat the
   Elementor/inversion-scope rules that were suppressing the outline on these. */
.cook-military-badge:focus-visible,
.cook-customizer-btn:focus-visible {
  outline: 2px solid var(--cook-red, #BA2031) !important;
  outline-offset: 2px !important;
}
.cook-military-badge__star {
  font-size: 0.8125rem;
  line-height: 1;
}
.cook-military-badge__text {
  line-height: 1.2;
}

/* Size-page geo-aware dealer block — appears on /shed-styles/{slug}/{WxL}/.
   Adds location signals to pages that otherwise have none, targeting
   "{WxL} sheds near me" queries. Schema.php wires matching availableAtOrFrom. */
.cook-size-dealers {
  margin: var(--cook-space-8, 32px) 0;
  padding: var(--cook-space-6, 24px);
  background: var(--cook-bg-secondary, #F5F5F5);
  border-radius: var(--cook-radius-md, 8px);
}
.cook-size-dealers__title {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: var(--cook-text-xl, 1.25rem);
  color: var(--cook-red, #BA2031);
  margin: 0 0 var(--cook-space-3, 12px);
}
.cook-size-dealers__intro {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-base, 0.9375rem);
  color: var(--cook-body-text, #4F4F4F);
  margin: 0 0 var(--cook-space-4, 16px);
  line-height: 1.5;
}
.cook-size-dealers__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: var(--cook-space-3, 12px);
  list-style: none;
  padding: 0;
  margin: 0 0 var(--cook-space-4, 16px);
}
.cook-size-dealers__item {
  position: relative; /* overlay anchor (.__link::after) positions against this (krnr) */
  display: flex;
  flex-direction: column;
  gap: 4px;
  background: var(--cook-bg-primary, #FFF);
  border: 1px solid var(--cook-border, #D3D3D3);
  border-radius: var(--cook-radius-sm, 4px);
  padding: var(--cook-space-3, 12px);
  transition: box-shadow var(--cook-transition-fast, 0.2s ease), border-color var(--cook-transition-fast, 0.2s ease);
}
.cook-size-dealers__item:hover {
  border-color: var(--cook-red, #BA2031);
  box-shadow: var(--cook-shadow-card-hover, 0 4px 12px rgba(0,0,0,0.08));
}
.cook-size-dealers__link {
  display: flex;
  flex-direction: column;
  gap: 4px;
  text-decoration: none;
  color: var(--cook-body-text, #4F4F4F);
}
/* Whole-card click affordance without wrapping the tel anchor (krnr) — overlay fills
   the item; the phone span is lifted above it so tel: stays independently tappable. */
.cook-size-dealers__link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}
.cook-size-dealers__name {
  font-weight: 600;
  font-family: 'Roboto Slab', serif;
  color: var(--cook-text-primary, #373737);
  font-size: var(--cook-text-base, 0.9375rem);
}
.cook-size-dealers__loc {
  font-size: var(--cook-text-sm, 0.8125rem);
  color: var(--cook-text-muted, #5E5E5E);
}
.cook-size-dealers__phone {
  position: relative; /* above the .__link::after overlay so tel: is independently tappable (krnr) */
  z-index: 2;
  align-self: flex-start; /* shrink to content width so only the number is the tel hit-target */
  font-size: var(--cook-text-sm, 0.8125rem);
  font-weight: 600;
}
.cook-size-dealers__phone a {
  color: var(--cook-red, #BA2031);
  text-decoration: none;
}
.cook-size-dealers__phone a:hover { text-decoration: underline; }
.cook-size-dealers__all {
  display: inline-block;
}
/* Dealer embedded Google Map (m3q7.24). */
.cook-dealer-map__frame {
  display: block;
  width: 100%;
  height: 350px;
  border: 0;
  border-radius: 8px;
}
/* Dealer "Open in Google Maps" link (m3q7.24) — centered under the map / address block. */
.cook-dealer-maplink {
  text-align: center;
  margin-top: var(--cook-space-3, 12px);
}

/* Invert for use on colored/dark backgrounds (e.g. building-single hero,
   which uses Global Widget 1051 rendered via `gprice131` on template #131). */
.cook-price-invert .cook-price,
.cook-price-invert .cook-price__amount,
.cook-price-invert .cook-price__range,
.cook-price-invert .cook-price--empty,
.cook-price-invert .cook-price--empty a,
.cook-price-invert .cook-price--empty-phone,
.cook-price-invert .cook-price--empty-note,
.elementor-element-gprice131 .cook-price,
.elementor-element-gprice131 .cook-price__amount,
.elementor-element-gprice131 .cook-price__range,
.elementor-element-gprice131 .cook-price--empty,
.elementor-element-gprice131 .cook-price--empty a,
.elementor-element-gprice131 .cook-price--empty-phone,
.elementor-element-gprice131 .cook-price--empty-note {
  color: var(--cook-white, #fff) !important;
}
.cook-price-invert .cook-price--empty-phone,
.elementor-element-gprice131 .cook-price--empty-phone {
  border-left-color: rgba(255, 255, 255, 0.4);
}
.cook-price-invert .cook-price--empty a:hover,
.cook-price-invert .cook-price--empty-phone:hover,
.elementor-element-gprice131 .cook-price--empty a:hover,
.elementor-element-gprice131 .cook-price--empty-phone:hover {
  color: var(--cook-white, #fff) !important;
  text-decoration: underline;
}

/* === Red hero section — inverted-on-red treatment for hero + CTA bands ===
   Section IDs covered:
     79c41af         — #131 Single Building hero
     f157cd0         — #134 Single Location hero
     f9eb918         — #133 hero
     298d36a         — #139 Contact Us hero
     220c3d0         — #141 Build Your Shed hero
     cta_section_01  — #780 CTA band
     f14ef354        — #587 "Storage Units vs. Cook Shed" red band (2026-04-20 kdlp)
     9acb5abd        — #587 "What Our Customers Say" red band (2026-04-20 kdlp)
     f586e1f         — #132 Building Archive red hero (not currently rendering — see lbli)
     690f148         — #131 "Ready to get started" red CTA band (2026-04-20 kdlp)
     2c18e96         — #133 Single Dealer red CTA band (2026-04-20 kdlp)
     a511825         — #491 404 Page red hero (2026-05-07 7sel)
     5a4e030         — #134 Single Location red band (undocumented until gh12.24)
   All of the above are legacy sections — Elementor doesn't emit a custom
   `.cook-band--red`-style class on them (see claude-gotchas.md), so
   .elementor-element-<id> is their ONLY hook into this scope. (The dark block
   below documents the one exception: #135's dd1g bands DO emit custom classes.)
   To cover a new red section, add its .elementor-element-<id> ONCE to the single
   :is(...) list that opens this nested block. (Native CSS nesting; no pre-2023
   fallback, accepted gh12.24.) */

/* Section-level color: lets `inherit` chains find white. Required for
   `.elementor-widget.cook-text-lede .elementor-heading-title { color: inherit }`
   (specificity 0,3,0 — wins vs the per-element scope rules below at 0,2,0).
   Without this, subtitle widgets using cook-text-lede walk inherit up to body #333.
   2026-05-07 7sel — fixes hero subtitle contrast on #131. */
:is(.cook-band--red, .cook-hero-red, .elementor-element-79c41af, .elementor-element-f157cd0, .elementor-element-f9eb918, .elementor-element-298d36a, .elementor-element-220c3d0, .elementor-element-cta_section_01, .elementor-element-f14ef354, .elementor-element-9acb5abd, .elementor-element-f586e1f, .elementor-element-690f148, .elementor-element-2c18e96, .elementor-element-5a4e030, .elementor-element-a511825) {
  color: var(--cook-white, #FFFFFF);

  /* Generic inversion: headings + body text + links render white on red */
  & :is(h1, h2, h3, h4, h5, h6),
  & .elementor-heading-title,
  & .elementor-widget-text-editor,
  & .elementor-widget-text-editor p,
  & p { color: var(--cook-white, #FFFFFF); }

  & a:not(.cook-btn):not(.elementor-button) {
    color: var(--cook-white, #FFFFFF);
    text-decoration: underline;
  }
  & a:not(.cook-btn):not(.elementor-button):hover { opacity: 0.85; }
  /* gh12.23: keyboard focus ring for plain text links on red bands. The site-wide
     *:focus-visible rule (inc/setup.php ~line 479) forces a RED ring with !important —
     red #BA2031 on the #BA2031 band is ~1:1, invisible (fails WCAG 2.4.7 + 1.4.11).
     Flip to white (~6.3:1). !important + higher specificity beats the global
     !important — same precedent as the utility-bar override (~line 186) and
     .cook-btn's dual-ring (~line 577). .cook-btn / .elementor-button keep their own
     inverse focus ring (excluded here, matching the color/hover rules above). */
  & a:not(.cook-btn):not(.elementor-button):focus-visible {
    outline: 2px solid var(--cook-white, #FFFFFF) !important;
    outline-offset: 2px !important;
  }

  /* Customize button: primary-inverse (white fill + red text, flip on hover).
     !important required: base .cook-customizer-btn rule sets color:#FFFFFF
     without !important, but source order + Chrome :is() specificity resolution puts
     the scope rule in a losing tie for the color property on the hero button.
     Same !important precedent as the form-submit inversion inside red-hero scope. */
  & .cook-customizer-btn {
    background: var(--cook-white, #FFFFFF) !important;
    color: var(--cook-red, #BA2031) !important;
    border-color: var(--cook-white, #FFFFFF) !important;
  }
  & .cook-customizer-btn:hover {
    background: transparent !important;
    color: var(--cook-white, #FFFFFF) !important;
    border-color: var(--cook-white, #FFFFFF) !important;
  }

  /* Military badge: cream outline on red (was dark-gray outline, invisible on red) */
  & .cook-military-badge {
    background: rgba(255, 255, 255, 0.08);
    color: var(--cook-white, #FFFFFF) !important;
    border-color: rgba(255, 255, 255, 0.6);
  }
  & .cook-military-badge__star { color: #FFD45C; }
  & .cook-military-badge:hover {
    background: rgba(255, 255, 255, 0.18);
    border-color: var(--cook-white, #FFFFFF);
  }

  /* Price empty-state: bump up text size for hero legibility */
  & .cook-price--empty { font-size: var(--cook-text-base, 0.9375rem); }
  & .cook-price--empty-note { font-size: var(--cook-text-sm, 0.8125rem); opacity: 0.88; }
  & .cook-price--empty a,
  & .cook-price--empty-phone { font-size: var(--cook-text-base, 0.9375rem); }

  /* RTO badge inside hero — keep white/cream, not muted */
  & .cook-rto-badge {
    background: rgba(255, 255, 255, 0.15);
    color: var(--cook-white, #FFFFFF);
    border: 1px solid rgba(255, 255, 255, 0.5);
  }

  /* Lead form on red surfaces — labels flip white, required asterisk stays visible,
     submit button adopts primary-inverse. Prerequisite for clearing per-widget
     label_color / button_* overrides on #627 / #634 (kdlp). */
  & .elementor-form .elementor-field-label,
  & .elementor-form .elementor-field-subgroup label { color: var(--cook-white, #FFFFFF); }
  & .elementor-form .elementor-field-required > .elementor-field-label::after { color: var(--cook-white, #FFFFFF); }
  /* !important required: Elementor Pro form widget emits hardcoded
     .elementor-{N} .elementor-global-{M} .elementor-button[type="submit"]{color:#fff}
     at specificity (0,5,1) in per-post CSS regardless of widget settings. Loads AFTER
     child theme so same-specificity ties also lose. Same precedent as button widget map. */
  & .elementor-form .elementor-field-type-submit .elementor-button {
    background: var(--cook-white, #FFFFFF) !important;
    color: var(--cook-red, #BA2031) !important;
    border-color: var(--cook-white, #FFFFFF) !important;
  }
  & .elementor-form .elementor-field-type-submit .elementor-button:hover {
    background: transparent !important;
    color: var(--cook-white, #FFFFFF) !important;
    border-color: var(--cook-white, #FFFFFF) !important;
  }
}

/* === Dark section — inverted-text treatment for --cook-dark (#373737) surfaces ===
   Text flips to white; CTAs stay red (red-on-dark reads fine, no inversion needed).
   Section IDs covered:
     979534c                     — #139 "PREFER TO VISIT IN PERSON?"
     8736453                     — #141 Build Your Shed dark band
     5bca5db, 84fd926            — #130 footer ribbon + nav-column sections (kdlp 2026-04-20)
     a6c0037, b18e898, 584811b   — #135 home dark bands (dd1g reskin)
   Legacy sections (979534c/8736453/5bca5db/84fd926) don't get a custom class
   emitted on the frontend at all (see claude-gotchas.md) — .elementor-element-<id>
   is their ONLY hook. #135's trio (a6c0037/b18e898/584811b) is different: those
   sections DO render `.cook-band--dark`/`.cook-band--sub` on the frontend and are
   already covered by the class selectors above — their element-IDs are kept in
   this list anyway as a revision-proof fallback, since a WPE env-copy or an
   Elementor revision restore can silently drop the classes without touching the
   element ID (gh12.24 review).
   To cover a new dark section, add its .elementor-element-<id> ONCE to the single
   :is(...) list that opens this nested block. (Native CSS nesting; no pre-2023
   fallback, accepted gh12.24.)
   Footer 430c556 copyright strip fixed separately below (inline widget style, requires !important). */
/* Section-level color — same rationale as red-hero (7sel): lets `inherit` chains
   walk up to white. Required for cook-text-lede subtitle + form labels inheriting
   from body. 2026-05-07 emda. */
:is(.cook-band--dark, .cook-band--sub, .cook-hero-dark, .elementor-element-a6c0037, .elementor-element-b18e898, .elementor-element-584811b, .elementor-element-979534c, .elementor-element-8736453, .elementor-element-5bca5db, .elementor-element-84fd926) {
  color: var(--cook-white, #FFFFFF);

  & :is(h1, h2, h3, h4, h5, h6),
  & .elementor-heading-title,
  & .elementor-widget-text-editor,
  & .elementor-widget-text-editor p,
  & p { color: var(--cook-white, #FFFFFF); }

  & a:not(.cook-btn):not(.elementor-button):not(.cook-prefooter-cta a) {
    color: var(--cook-white, #FFFFFF);
    text-decoration: underline;
  }
  & a:not(.cook-btn):not(.elementor-button):not(.cook-prefooter-cta a):hover { opacity: 0.85; }
  /* Keyboard focus ring: the global *:focus-visible forces a RED ring (!important), which
     is ~1.1:1 on --sub #5E5E5E and ~1.95:1 on --dark #373737 — invisible (WCAG 2.4.7/1.4.11).
     Flip to white on these grounds, mirroring the red-scope rule above. Covers .cook-pill
     (an <a>) placed on a dark/sub band too. */
  & a:not(.cook-btn):not(.elementor-button):not(.cook-prefooter-cta a):focus-visible {
    outline: 2px solid var(--cook-white, #FFFFFF) !important;
    outline-offset: 2px !important;
  }

  /* Lead form on dark surfaces — labels flip white. Mirrors red-hero form scope.
     2026-05-07 emda — fixes #4f4f4f labels on #373737 (1.4:1) homepage form. */
  & .elementor-form .elementor-field-label,
  & .elementor-form .elementor-field-subgroup label { color: var(--cook-white, #FFFFFF); }
  & .elementor-form .elementor-field-required > .elementor-field-label::after { color: var(--cook-white, #FFFFFF); }
}

/* Footer copyright strip (#130 section 430c556) — WCAG AA contrast fix.
   Widget HTML has inline style="color:#5E5E5E" on <p>/<a> (hand-typed in text-editor
   widget's Visual tab, NOT Style-tab) — inline style beats CSS, requires !important
   to override. On #2d2d2d bg that rendered ~3.6:1, failing AA.
   Lift to #B0B0B0 to preserve "muted copyright" design intent while clearing AA. */
.elementor-element-430c556 .elementor-widget-text-editor,
.elementor-element-430c556 .elementor-widget-text-editor p,
.elementor-element-430c556 .elementor-widget-text-editor a {
  color: #B0B0B0 !important;
}
.elementor-element-430c556 .elementor-widget-text-editor a:hover {
  color: var(--cook-white, #FFFFFF) !important;
}

/* Customizer button — PRIMARY default (red fill). Reserved for hero / section-level CTAs.
   Card-grid contexts override to outline secondary via scoped rules below (9nbs). */
.cook-customizer-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  background: var(--cook-red, #BA2031);
  color: #FFFFFF;
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: var(--cook-text-sm, 0.8125rem);
  text-transform: uppercase;
  text-decoration: none;
  padding: var(--cook-space-2, 8px) var(--cook-space-4, 16px);
  border: 2px solid transparent; /* p83d sizing parity — primary matches outline secondary box */
  border-radius: var(--cook-radius-sm, 4px);
  transition: var(--cook-transition-fast, 0.2s ease);
}
.cook-customizer-btn:hover {
  background: var(--cook-red-hover, #D41A34);
  color: #FFFFFF;
}

/* Editor-only placeholder state (a67i.2 widget) — dimmed, inert. Frontend never
   renders it (is_edit_mode branch); href-less so preview-iframe JS ignores it. */
.cook-customizer-btn--placeholder {
  opacity: 0.45;
  cursor: default;
  pointer-events: none;
}

/* Editor-only RTO placeholder (a67i batch 2) — dimmed, never rendered frontend. */
.cook-rto-badge--placeholder { opacity: 0.45; }

/* Generic editor-only widget placeholder (a67i batch 3+) — dimmed, never frontend. */
.cook-widget-placeholder { opacity: 0.45; }

/* 9nbs: demote to outline secondary inside card-grid contexts */
.elementor-loop-container .cook-customizer-btn,
.cook-size-grid .cook-customizer-btn {
  background: #FFFFFF;
  color: var(--cook-red, #BA2031);
  border-color: var(--cook-red, #BA2031);
}
.elementor-loop-container .cook-customizer-btn:hover,
.cook-size-grid .cook-customizer-btn:hover {
  background: var(--cook-red, #BA2031);
  color: #FFFFFF;
  border-color: var(--cook-red, #BA2031);
}

/* Gallery grid */
.cook-gallery-grid {
  display: grid;
  gap: 8px;
}
.cook-gallery-grid a {
  display: block;
  border-radius: var(--cook-radius-sm);
  overflow: hidden;
}
.cook-gallery-grid img {
  width: 100%;
  height: auto;
  display: block;
  aspect-ratio: 4/3;
  object-fit: cover;
}
@media (min-width: 768px) {
  .cook-gallery-grid { grid-template-columns: repeat(4, 1fr); }
}
@media (max-width: 767px) {
  .cook-gallery-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 479px) {
  .cook-gallery-grid { grid-template-columns: 1fr; }
}

/* Carousel */
.cook-carousel {
  position: relative;
  border-radius: var(--cook-radius-md);
  overflow: hidden;
}
.cook-carousel img {
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
}
.cook-carousel-btn {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(0,0,0,0.5);
  color: #fff;
  border: none;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  font-size: 1.25rem;
  cursor: pointer;
  z-index: 2;
}
.cook-carousel-btn:hover {
  background: rgba(0,0,0,0.7);
}
.cook-carousel-btn:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}
.cook-carousel-btn--prev { left: 8px; }
.cook-carousel-btn--next { right: 8px; }
.cook-carousel-dots {
  position: absolute;
  bottom: 8px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 6px;
  z-index: 2;
}
.cook-carousel-dot {
  position: relative;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: rgba(255,255,255,0.5);
  cursor: pointer;
  border: none;
  padding: 8px;
  min-width: 44px;
  min-height: 44px;
  box-sizing: border-box;
  background-clip: content-box;
}
.cook-carousel-dot:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 2px;
}
.cook-carousel-dot--active { background: #fff; }

/* Related building cards */
.cook-related-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 16px;
}
.cook-related-card {
  text-decoration: none;
  display: block;
  background: var(--cook-bg-primary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-md);
  overflow: hidden;
  box-shadow: var(--cook-shadow-card);
  transition:
    box-shadow var(--cook-transition-fast),
    transform var(--cook-transition-fast);
}
.cook-related-card:hover {
  box-shadow: var(--cook-shadow-card-hover);
  transform: translateY(-2px);
}
.cook-related-card img {
  width: 100%;
  aspect-ratio: 16/9;
  object-fit: cover;
}
.cook-related-card__content {
  padding: var(--cook-card-padding-sm);
}
.cook-related-card h4 {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.125rem;
  color: var(--cook-text-primary);
  text-transform: uppercase;
  margin: 0 0 4px;
}
.cook-related-card p {
  font-family: 'Cabin', sans-serif;
  font-size: 0.8125rem;
  color: var(--cook-text-secondary);
  margin: 0;
}

/* Dealer info block */
/* Dealer type badge (lgmt) — "Independent Dealer" on independent lots only.
   Neutral pill (never red — red is reserved for CTAs + h1/h2). */
.cook-dealer-badge {
  display: inline-block;
  font-family: 'Cabin', sans-serif;
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  line-height: 1.3;
  padding: 0.25rem 0.6rem;
  border-radius: 999px;
  vertical-align: middle;
}
.cook-dealer-badge--independent {
  background: #F5F5F5;
  color: #373737;
  border: 1px solid #D0D0D0;
}

.cook-dealer-info {
  font-family: 'Cabin', sans-serif;
}
.cook-dealer-info h3 {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.375rem;
  color: var(--cook-text-primary);
  text-transform: uppercase;
  margin: 0 0 12px;
}
.cook-dealer-info p {
  margin: 0 0 4px;
  color: var(--cook-text-primary);
}
.cook-dealer-info a {
  color: var(--cook-accent);
  text-decoration: none;
  font-weight: 600;
}
.cook-dealer-info__phone {
  font-size: 1.25rem;
}
.cook-dealer-info__hours {
  margin-top: 12px;
}
.cook-dealer-info__hours p {
  color: var(--cook-text-secondary);
  font-size: 0.875rem;
  margin: 0 0 2px;
}
.cook-hours-table {
  border: none;
  border-collapse: collapse;
  font-size: 0.875rem;
  color: var(--cook-text-secondary);
  margin-top: 4px;
}
.cook-hours-table tr,
.cook-hours-table td {
  border: none;
  padding: 1px 0;
  vertical-align: top;
  background: transparent !important;
}
.cook-hours-day {
  font-weight: 600;
  padding-right: 12px;
  white-space: nowrap;
  color: var(--cook-text-primary);
}
.cook-hours-table--compact {
  font-size: 0.8125rem;
}
.cook-dealer-info__directions {
  margin-top: 16px;
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 0.875rem;
  text-transform: uppercase;
}

/* Dealer list */
.cook-dealer-list {
  max-width: 1200px;
  margin: 0 auto;
}
.cook-dealer-list h3 {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.5rem;
  color: var(--cook-accent);
  text-transform: uppercase;
  margin: 30px 0 16px;
  border-bottom: 2px solid var(--cook-border);
  padding-bottom: 8px;
}
.cook-dealer-list__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: 16px;
}
.cook-dealer-list__card {
  background: var(--cook-bg-primary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-md);
  padding: 20px;
}
.cook-dealer-list__card h4 {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 1.125rem;
  color: var(--cook-text-primary);
  text-transform: uppercase;
  margin: 0 0 8px;
}
.cook-dealer-list__card p {
  font-family: 'Cabin', sans-serif;
  font-size: 0.875rem;
  color: var(--cook-text-primary);
  margin: 0 0 4px;
}
.cook-dealer-list__card a {
  color: var(--cook-accent);
  font-weight: 600;
  text-decoration: none;
}
.cook-dealer-list__hours {
  color: var(--cook-text-secondary) !important;
  font-size: 0.75rem !important;
  margin-top: 4px !important;
}

/* Geolocation button */
.cook-geo-btn {
  background: var(--cook-bg-secondary);
  color: var(--cook-text-primary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-sm);
  padding: 10px 16px;
  font-family: 'Cabin', sans-serif;
  font-weight: 600;
  font-size: 0.875rem;
  cursor: pointer;
  min-height: 44px;
  transition: all var(--cook-transition-fast);
  white-space: nowrap;
}
.cook-geo-btn:hover {
  border-color: var(--cook-accent);
  color: var(--cook-accent);
}
.cook-geo-btn:disabled {
  opacity: 0.6;
  cursor: wait;
}
.cook-geo-btn:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}
.cook-geo-btn__icon {
  font-size: 1rem;
}

/* Dealer distance badge */
.cook-dealer-distance {
  display: inline-block;
  background: var(--cook-accent);
  color: var(--cook-white, #fff);
  font-family: 'Cabin', sans-serif;
  font-weight: 700;
  font-size: 0.75rem;
  padding: 3px 10px;
  border-radius: var(--cook-radius-sm);
  margin-top: 8px;
}

/* Geo error message */
.cook-geo-error {
  color: var(--cook-accent);
  font-family: 'Cabin', sans-serif;
  font-size: 0.8125rem;
  font-weight: 600;
  margin: 8px 0 0;
}

/* Promo slider */
/* === lghy slider+CTA padding reduce (2026-05-18): tighten vertical rhythm on home.
   Adds responsive block padding instead of relying on adjacent Elementor section padding.
   uvod (2026-07-10): zero BOTH block paddings so the full-bleed banner sits flush under
   the nav AND flush against the red "Talk to an Expert" band below — no empty white gap
   either side. The pause control (.cook-carousel-btn--pause, absolute bottom:8px right:8px)
   now overlays the image's bottom-right corner (like the prev/next arrows), keeping its
   dark scrim + white icon for contrast; still a focusable labeled button (WCAG 2.2.2). */
.cook-promo-slider {
  position: relative;
  width: 100%;
  overflow: hidden;
  padding-block: 0; /* lghy; both paddings zeroed for flush banner — uvod */
}
.cook-promo-slider img {
  width: 100%;
  height: auto;
  display: block;
}
.cook-promo-dots {
  position: absolute;
  bottom: 12px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 8px;
  z-index: 2;
}

/* ── Band-2 promo slider — anchored chrome (dd1g Phase 2) ───────────────────
   Slides are image-only banner creatives (eyebrow / slab headline / CTA live
   IN the creative — dum3), so this is chrome-only: dark ground, pill dots,
   rounded red-hover nav. CSS-only per decision A7 — no markup / carousel.js /
   data touched. SCOPED to .cook-promo-slider so the SHARED testimonial +
   size-card carousels keep their circular dots + round buttons. carousel.js
   binds data-* attrs and toggles .cook-carousel-dot--active + inline display —
   none of which this affects. Dots + prev/next render only with >=2 active
   slides (PHP $total>1 gate); the pause button + dark ground show with one. */
.cook-promo-slider { background: var(--cook-dark, #373737); }

/* Pill dots — inactive translucent dot, active white pill bar. 44px tap target
   preserved via the base padding + min-width (WCAG 2.5.8). */
.cook-promo-slider .cook-carousel-dot {
  border-radius: var(--cook-radius-pill, 999px);
  /* background-color (not the `background` shorthand): the base dot rule uses
     background-clip:content-box to paint a small 12px mark inside a 44px tap-box.
     The shorthand would reset background-clip to border-box and balloon the fill. */
  background-color: rgba(255, 255, 255, 0.55);
  transition: min-width var(--cook-transition-fast, 0.2s ease),
              background-color var(--cook-transition-fast, 0.2s ease);
}
.cook-promo-slider .cook-carousel-dot--active {
  min-width: 60px;
  background-color: var(--cook-white, #FFFFFF);
}
@media (prefers-reduced-motion: reduce) {
  .cook-promo-slider .cook-carousel-dot { transition: none; }
}

/* Prev / next / pause — rounded rect + red hover (band language); keep the
   dark scrim for contrast over imagery + the base 44px size. */
.cook-promo-slider .cook-carousel-btn {
  border-radius: var(--cook-radius-md, 8px);
  background: rgba(0, 0, 0, 0.55);
}
.cook-promo-slider .cook-carousel-btn:hover {
  background: var(--cook-red, #BA2031);
}

/* Testimonials */
.cook-testimonial-slider,
.cook-testimonial-carousel {
  position: relative;
  max-width: 800px;
  margin: 0 auto;
  min-height: 200px;
}
/* Loop Grid outputs a .elementor-loop-container .elementor-grid inside the carousel;
   each slide is a direct .e-loop-item child. Cancel grid display so JS can toggle one-at-a-time. */
.cook-testimonial-carousel .elementor-loop-container {
  display: block;
}
.cook-testimonial-carousel .e-loop-item {
  width: 100%;
}
/* Hide all but the first slide pre-JS so we don't flash the stacked layout.
   carousel.js restores display via JS once DOMContentLoaded fires. */
.cook-testimonial-carousel .e-loop-item ~ .e-loop-item {
  display: none;
}
.cook-testimonial {
  text-align: center;
  padding: 0 40px;
}
.cook-testimonial__stars {
  color: #E8A830;
  font-size: 1.25rem;
  margin: 0 0 12px;
}
.cook-testimonial__quote {
  font-family: 'Cabin', sans-serif;
  font-size: 1.0625rem;
  color: var(--cook-text-primary);
  line-height: 1.7;
  font-style: italic;
  margin: 0 0 16px;
}
.cook-testimonial__author {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 0.875rem;
  color: var(--cook-accent);
  text-transform: uppercase;
  margin: 0 0 4px;
}
.cook-testimonial__meta {
  font-family: 'Cabin', sans-serif;
  font-size: 0.8125rem;
  color: var(--cook-text-muted, #5E5E5E);
  margin: 0;
  letter-spacing: 0.3px;
}
.cook-testimonial-btn {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  color: var(--cook-accent);
  font-size: 1.75rem;
  cursor: pointer;
  min-width: 44px;
  min-height: 44px;
}
.cook-testimonial-btn:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}
.cook-testimonial-btn--prev { left: 0; }
.cook-testimonial-btn--next { right: 0; }
.cook-testimonial__disclosure {
  text-align: center;
  font-size: 0.75rem;
  color: var(--cook-text-secondary);
  margin-top: 16px;
}

/* Pause button positioning */
.cook-carousel-btn--pause {
  position: absolute;
  bottom: 8px;
  right: 8px;
  top: auto;
  transform: none;
  font-size: 0.875rem;
}
.cook-testimonial-slider .cook-carousel-btn--pause,
.cook-testimonial-carousel .cook-carousel-btn--pause {
  position: absolute;
  bottom: -32px;
  right: 0;
  top: auto;
  transform: none;
  background: none;
  color: var(--cook-text-secondary);
  font-size: 0.875rem;
  width: 44px;
  height: 44px;
}

/* Screen reader text (visually hidden, accessible) */
.screen-reader-text {
  clip: rect(1px, 1px, 1px, 1px);
  clip-path: inset(50%);
  height: 1px;
  width: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  word-wrap: normal !important;
}
.screen-reader-text:focus {
  clip: auto !important;
  clip-path: none;
  display: block;
  height: auto;
  left: 5px;
  top: 5px;
  width: auto;
  z-index: 100000;
  background: var(--cook-bg-primary);
  color: var(--cook-accent);
  padding: 12px 24px;
  font-size: 0.875rem;
  font-weight: 700;
  text-decoration: none;
  box-shadow: 0 2px 8px rgba(0,0,0,0.2);
  border-radius: var(--cook-radius-sm);
}

/* ===== Sticky Mobile CTA Bar ===== */
.cook-sticky-cta {
  display: none;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 9999;
  background: var(--cook-red);
  padding: 8px 12px;
  box-shadow: 0 -2px 8px rgba(0,0,0,0.2);
  transform: translateY(100%);
  transition: transform 0.3s ease;
}
.cook-sticky-cta--visible {
  transform: translateY(0);
}
.cook-sticky-cta__inner {
  display: flex;
  gap: 8px;
  max-width: 600px;
  margin: 0 auto;
}
.cook-sticky-cta__quote {
  flex: 1;
  background: var(--cook-white);
  color: var(--cook-red);
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: 0.9375rem;
  text-transform: uppercase;
  text-align: center;
  text-decoration: none;
  padding: 12px 16px;
  border-radius: var(--cook-radius-sm);
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cook-sticky-cta__phone {
  background: var(--cook-white);
  color: var(--cook-red);
  width: 48px;
  min-height: 44px;
  border-radius: var(--cook-radius-sm);
  display: flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  font-size: 1.25rem;
}
@media (min-width: 768px) {
  .cook-sticky-cta { display: none !important; }
}
@media (max-width: 767px) {
  .cook-sticky-cta { display: block; }
  body { padding-bottom: 64px; } /* clears the 62.5px bar; matches theme 767/768 split (mzkg.15) */
}
@media (prefers-reduced-motion: reduce) {
  .cook-sticky-cta { transition: none; }
}

/* Use-case filter pills */
.cook-filter-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  margin: 0 0 24px;
}
.cook-filter-pill {
  background: var(--cook-bg-secondary);
  color: var(--cook-text-primary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-sm);
  padding: 8px 16px;
  font-family: 'Cabin', sans-serif;
  font-weight: 600;
  font-size: 0.875rem;
  cursor: pointer;
  min-height: 44px;
  transition: all var(--cook-transition-fast);
}
.cook-filter-pill:hover {
  border-color: var(--cook-accent);
  color: var(--cook-accent);
}
.cook-filter-pill--active {
  background: var(--cook-accent);
  color: var(--cook-white);
  border-color: var(--cook-accent);
}
.cook-filter-pill--active:hover {
  background: var(--cook-accent-hover);
  border-color: var(--cook-accent-hover);
  color: var(--cook-white);
}
.cook-filter-pill:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}

/* Global focus indicator */
:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}
a:focus-visible, button:focus-visible {
  outline: 2px solid var(--cook-accent);
  outline-offset: 2px;
}

/* ===== Pre-Footer Dealer CTA Strip ===== */
/* lghy: halve vertical padding (48px → clamp ~2rem-4rem); horizontal preserved. */
.cook-prefooter-cta {
  background: var(--cook-red);
  padding: clamp(2rem, 5vw, 4rem) 20px;
  text-align: center;
}
.cook-prefooter-cta__inner {
  max-width: 800px;
  margin: 0 auto;
}
.cook-prefooter-cta__heading {
  color: var(--cook-white) !important;
  font-size: 1.75rem;
  margin: 0 0 8px;
}
.cook-prefooter-cta__text {
  color: rgba(255,255,255,0.9);
  font-size: 1rem;
  margin: 0 0 24px;
}
.cook-prefooter-cta .cook-btn-primary {
  background: var(--cook-white);
  color: var(--cook-red);
}
.cook-prefooter-cta .cook-btn-primary:hover {
  background: var(--cook-card-bg);
  color: var(--cook-red-hover);
}
/* Focus ring for the white button on the red band (gwh7). The global
   :focus-visible ring is red (var(--cook-accent)) → red-on-red, invisible here.
   A white outline reads clearly against the red band, survives forced-colors
   mode (box-shadow would not, and this legacy .cook-btn-primary misses the
   .cook-btn forced-colors fallback), and beats the parent/kit !important red
   outline. Mirrors the .cook-store-indicator red-ground fix (§ above). The inset
   red box-shadow adds a crisp edge against the white button in normal mode. */
.cook-prefooter-cta .cook-btn-primary:focus-visible {
  outline: 2px solid var(--cook-white) !important;
  outline-offset: 2px !important;
  box-shadow: inset 0 0 0 2px var(--cook-red);
}
[data-theme="dark"] .cook-prefooter-cta .cook-btn-primary {
  background: var(--cook-bg-primary);
  color: var(--cook-accent);
  border: 2px solid var(--cook-accent);
}
/* Dark mode override disabled — see top of file
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cook-prefooter-cta .cook-btn-primary {
    background: var(--cook-bg-primary);
    color: var(--cook-accent);
    border: 2px solid var(--cook-accent);
  }
}
*/

/* ===== Cross-Linking Components ===== */
.cook-nearby-dealers, .cook-dealer-buildings, .cook-location-links {
  margin: 32px 0;
}
.cook-nearby-dealers h3, .cook-dealer-buildings h3, .cook-location-links h3 {
  margin: 0 0 16px;
}
.cook-nearby-dealers__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 8px;
  margin-bottom: 16px;
}
.cook-nearby-dealers__item {
  display: flex;
  flex-direction: column;
  padding: 12px;
  background: var(--cook-bg-secondary);
  border-radius: var(--cook-radius-sm);
  text-decoration: none;
  transition: background var(--cook-transition-fast);
}
.cook-nearby-dealers__item:hover {
  background: var(--cook-border);
}
.cook-nearby-dealers__name {
  font-weight: 600;
  color: var(--cook-text-primary);
  font-size: 0.875rem;
}
.cook-nearby-dealers__location {
  font-size: 0.8125rem;
  color: var(--cook-text-secondary);
}
.cook-dealer-buildings__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 12px;
}
.cook-dealer-buildings__card {
  text-decoration: none;
  text-align: center;
  transition: transform var(--cook-transition-fast);
}
.cook-dealer-buildings__card:hover {
  transform: translateY(-2px);
}
.cook-dealer-buildings__img {
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
  border-radius: var(--cook-radius-sm);
}
.cook-dealer-buildings__name {
  display: block;
  margin-top: 8px;
  font-weight: 600;
  font-size: 0.8125rem;
  color: var(--cook-text-primary);
}

/* ===== CTA Band (reusable) ===== */
.cook-cta-band {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--cook-space-6, 24px);
    background: var(--cook-red, #BA2031);
    padding: var(--cook-space-4, 16px) var(--cook-space-8, 32px);
    text-align: center;
    flex-wrap: wrap;
}
.cook-cta-band__phone {
    color: #fff;
    text-decoration: none;
    font-family: 'Roboto Slab', serif;
    font-weight: 700;
    font-size: var(--cook-text-lg, 1.125rem);
    display: flex;
    align-items: center;
    gap: var(--cook-space-2, 8px);
}
.cook-cta-band__phone:hover { text-decoration: underline; }
.cook-cta-band__label { text-transform: uppercase; }
.cook-cta-band__number { white-space: nowrap; }
.cook-cta-band__btn {
    display: inline-block;
    background: #fff;
    color: var(--cook-red, #BA2031);
    font-family: 'Roboto Slab', serif;
    font-weight: 700;
    text-transform: uppercase;
    text-decoration: none;
    padding: var(--cook-space-2, 8px) var(--cook-space-6, 24px);
    border-radius: var(--cook-radius-sm, 4px);
    transition: var(--cook-transition-fast, 0.2s ease);
    white-space: nowrap;
}
.cook-cta-band__btn:hover {
    background: var(--cook-red-hover, #D41A34);
    color: #fff;
}
@media (max-width: 767px) {
    .cook-cta-band { flex-direction: column; gap: var(--cook-space-3, 12px); }
    .cook-cta-band__btn { width: 80%; text-align: center; }
}

/* ===== FAQ (cook_faq shortcode) ===== */
.cook-faq {
    max-width: 780px;
    margin: 0 auto;
    padding: var(--cook-space-6, 24px) var(--cook-space-4, 16px);
}
.cook-faq__section + .cook-faq__section {
    margin-top: var(--cook-space-10, 40px);
}
.cook-faq__section-title {
    font-family: 'Roboto Slab', serif;
    font-size: 1.75rem;
    font-weight: 700;
    text-transform: uppercase;
    color: var(--cook-red, #BA2031);
    margin: 0 0 var(--cook-space-6, 24px) 0;
    padding-bottom: var(--cook-space-3, 12px);
    border-bottom: 2px solid var(--cook-red, #BA2031);
}
.cook-faq__item {
    border: 1px solid var(--cook-border, #D3D3D3);
    border-radius: var(--cook-radius-md, 8px);
    margin-bottom: var(--cook-space-3, 12px);
    background: var(--cook-bg-primary, #FFFFFF);
    overflow: hidden;
    transition: box-shadow var(--cook-transition-fast, 0.2s ease);
}
.cook-faq__item[open] {
    box-shadow: var(--cook-shadow-card-hover, 0 4px 12px rgba(0, 0, 0, 0.08));
}
.cook-faq__question {
    font-family: 'Roboto Slab', serif;
    font-size: 1.0625rem;
    font-weight: 700;
    color: var(--cook-text-primary, #4F4F4F);
    padding: var(--cook-space-4, 16px) var(--cook-space-12, 48px) var(--cook-space-4, 16px) var(--cook-space-4, 16px);
    cursor: pointer;
    list-style: none;
    position: relative;
    line-height: 1.4;
    transition: color var(--cook-transition-fast, 0.2s ease);
}
.cook-faq__question:hover,
.cook-faq__question:focus {
    color: var(--cook-red, #BA2031);
    outline: none;
}
.cook-faq__question:focus-visible {
    box-shadow: inset 0 0 0 2px var(--cook-red, #BA2031);
    border-radius: var(--cook-radius-md, 8px);
}
/* Custom chevron indicator — hides the default triangle */
.cook-faq__question::-webkit-details-marker { display: none; }
.cook-faq__question::marker { content: ''; }
.cook-faq__question::after {
    content: '';
    position: absolute;
    right: var(--cook-space-4, 16px);
    top: 50%;
    width: 12px;
    height: 12px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: translateY(-70%) rotate(45deg);
    transition: transform var(--cook-transition-fast, 0.2s ease);
}
.cook-faq__item[open] .cook-faq__question::after {
    transform: translateY(-30%) rotate(-135deg);
}
.cook-faq__answer {
    padding: 0 var(--cook-space-4, 16px) var(--cook-space-4, 16px) var(--cook-space-4, 16px);
    font-family: 'Cabin', sans-serif;
    font-size: 1rem;
    line-height: 1.6;
    color: var(--cook-text-primary, #4F4F4F);
}
.cook-faq__answer p { margin: 0 0 var(--cook-space-3, 12px) 0; }
.cook-faq__answer p:last-child { margin-bottom: 0; }
.cook-faq__answer ul,
.cook-faq__answer ol { margin: 0 0 var(--cook-space-3, 12px) var(--cook-space-5, 20px); }
.cook-faq__answer a { color: var(--cook-red, #BA2031); font-weight: 600; }

/* Callout for held-until-legal-review content */
.cook-faq__callout {
    margin-top: var(--cook-space-10, 40px);
    padding: var(--cook-space-6, 24px);
    background: var(--cook-bg-soft, #F7F7F7);
    border-left: 4px solid var(--cook-red, #BA2031);
    border-radius: var(--cook-radius-md, 8px);
}
.cook-faq__callout-title {
    font-family: 'Roboto Slab', serif;
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--cook-text-primary, #4F4F4F);
    margin: 0 0 var(--cook-space-3, 12px) 0;
}
.cook-faq__callout p { margin: 0 0 var(--cook-space-3, 12px) 0; }
.cook-faq__callout .cook-btn-primary { display: inline-block; }

@media (prefers-reduced-motion: reduce) {
    .cook-faq__item,
    .cook-faq__question,
    .cook-faq__question::after { transition: none; }
}

@media (max-width: 767px) {
    .cook-faq { padding: var(--cook-space-4, 16px) var(--cook-space-3, 12px); }
    .cook-faq__section-title { font-size: 1.5rem; }
    .cook-faq__question { font-size: 1rem; padding: var(--cook-space-3, 12px) var(--cook-space-10, 40px) var(--cook-space-3, 12px) var(--cook-space-3, 12px); }
}

/* ── Building Size Components ─────────────────────────────────────────────── */

.cook-size-grid {
  display: grid;
  gap: var(--cook-space-4, 16px);
}
.cook-size-card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--cook-bg-primary);
  border: 1px solid var(--cook-border);
  border-radius: var(--cook-radius-md);
  overflow: hidden;
  box-shadow: var(--cook-shadow-card);
  transition:
    box-shadow var(--cook-transition-fast),
    transform var(--cook-transition-fast);
}
.cook-size-card:hover {
  box-shadow: var(--cook-shadow-card-hover);
  transform: translateY(-2px);
}
.cook-size-card:focus-within {
  outline: 2px solid var(--cook-red, #BA2031);
  outline-offset: 2px;
}
.cook-size-card__carousel {
  position: relative;
  z-index: 2;
}
.cook-size-card__dots {
  position: absolute;
  bottom: 8px;
  left: 0;
  right: 0;
  display: flex;
  justify-content: center;
  gap: 6px;
  z-index: 1;
}
.cook-size-card__dots button {
  /* 44×44 hit target with 8px visible dot rendered via background-clip:content-box.
     Prior pattern (8×8 button + ::before 44×44 pseudo) didn't extend hit area —
     pointer events on the pseudo extending past the button bounds don't reach the button. */
  position: relative;
  width: 44px;
  height: 44px;
  min-width: 44px;
  min-height: 44px;
  box-sizing: border-box;
  padding: 18px;
  border-radius: 50%;
  border: none;
  background: rgba(255, 255, 255, 0.5);
  background-clip: content-box;
  cursor: pointer;
  transition: var(--cook-transition-fast, 0.2s ease);
}
.cook-size-card__dots .cook-carousel-dot--active {
  background: #FFFFFF;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}
.cook-size-card__img {
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
  display: block;
}
.cook-size-card__content {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: var(--cook-space-3, 12px) var(--cook-space-4, 16px);
}
.cook-size-card__link {
  text-decoration: none;
  color: var(--cook-text-primary);
  outline: none;
}
.cook-size-card__link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}
.cook-size-card:hover .cook-size-card__title {
  color: var(--cook-red, #BA2031);
}
.cook-size-card__title {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: var(--cook-text-lg, 1.125rem);
  color: var(--cook-text-primary);
  margin: 0 0 var(--cook-space-1, 4px);
  transition: color var(--cook-transition-fast, 0.2s ease);
}
.cook-size-card__price {
  font-family: 'Cabin', sans-serif;
  font-weight: 700;
  font-size: var(--cook-text-base, 0.9375rem);
  color: var(--cook-red, #BA2031);
  margin: 0;
}
.cook-size-card__rto {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.8125rem);
  color: var(--cook-text-secondary);
  margin: var(--cook-space-1, 4px) 0 0;
}
.cook-size-card__specs {
  margin: var(--cook-space-3, 12px) 0 0;
  padding: var(--cook-space-3, 12px) 0 0;
  border-top: 1px solid var(--cook-border);
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.8125rem);
  color: var(--cook-text-secondary);
  display: flex;
  flex-direction: column;
  gap: var(--cook-space-1, 4px);
}
.cook-size-card__specs > div {
  display: flex;
  justify-content: space-between;
  gap: var(--cook-space-2, 8px);
}
.cook-size-card__specs dt {
  font-weight: 400;
}
.cook-size-card__specs dd {
  margin: 0;
  font-weight: 700;
  color: var(--cook-text-primary);
  text-align: right;
}
.cook-size-card__actions {
  margin-top: auto;
  padding-top: var(--cook-space-3, 12px);
  position: relative;
  z-index: 2;
}
.cook-customizer-btn--sm {
  display: block;
  text-align: center;
  font-size: var(--cook-text-xs, 0.75rem);
  padding: var(--cook-space-2, 8px) var(--cook-space-3, 12px);
}

/* Size pricing block */
.cook-size-pricing {
  display: flex;
  flex-wrap: wrap;
  gap: var(--cook-space-6, 24px);
  padding: var(--cook-space-5, 20px);
  background: var(--cook-bg-secondary, #F5F5F5);
  border-radius: var(--cook-radius-md);
}
.cook-size-pricing__cash,
.cook-size-pricing__rto {
  display: flex;
  flex-direction: column;
  gap: var(--cook-space-1, 4px);
}
.cook-size-pricing__label {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.8125rem);
  color: var(--cook-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.cook-size-pricing__amount {
  font-family: 'Roboto Slab', serif;
  font-weight: 700;
  font-size: var(--cook-text-2xl, 1.5rem);
  color: var(--cook-red, #BA2031);
}
.cook-size-pricing__rto .cook-size-pricing__amount {
  color: var(--cook-text-primary);
  font-size: var(--cook-text-xl, 1.25rem);
}
.cook-size-pricing__term,
.cook-size-pricing__total {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.8125rem);
  color: var(--cook-text-secondary);
}

/* Floorplan image */
.cook-size-floorplan {
  text-align: center;
  padding: var(--cook-space-4, 16px) 0;
}
.cook-size-floorplan__img {
  max-width: 100%;
  height: auto;
  border-radius: var(--cook-radius-md);
}

/* Parent link */
.cook-size-parent-link {
  display: inline-block;
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-base, 0.9375rem);
  color: var(--cook-red, #BA2031);
  text-decoration: none;
  font-weight: 600;
  /* Tap target: 8px vertical padding bumps hit height to ~40px (WCAG 2.5.8 AA 24×24). */
  padding: 8px 0;
  margin-bottom: var(--cook-space-3, 8px);
}
.cook-size-parent-link:hover {
  text-decoration: underline;
}

@media (max-width: 767px) {
  .cook-size-grid { grid-template-columns: repeat(2, 1fr) !important; }
  .cook-size-pricing { flex-direction: column; gap: var(--cook-space-4, 16px); }
}
@media (max-width: 479px) {
  .cook-size-grid { grid-template-columns: 1fr !important; }
}

/* ============================================================================
 * Blog post template (zchd) — reading time, share buttons, author block, CTA cards
 * ========================================================================== */

.cook-post-reading-time {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.875rem);
  color: var(--cook-muted, #5E5E5E);
  font-weight: 400;
}

.cook-post-author {
  margin: var(--cook-space-6, 32px) 0;
  padding: var(--cook-space-5, 24px);
  background: var(--cook-bg-secondary, #F7F7F7);
  border-radius: var(--cook-radius-md, 8px);
  border-left: 3px solid var(--cook-red, #BA2031);
}
.cook-post-author__name {
  font-family: 'Roboto Slab', serif;
  font-size: var(--cook-text-base, 1rem);
  font-weight: 700;
  color: var(--cook-dark, #373737);
  margin: 0 0 var(--cook-space-2, 4px);
}
.cook-post-author__bio {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.875rem);
  color: var(--cook-body, #4F4F4F);
  margin: 0;
}

.cook-post-share {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--cook-space-3, 8px);
  margin: var(--cook-space-6, 32px) 0;
  padding: var(--cook-space-4, 16px) 0;
  border-top: 1px solid var(--cook-border, #E0E0E0);
  border-bottom: 1px solid var(--cook-border, #E0E0E0);
}
.cook-post-share__label {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.875rem);
  font-weight: 600;
  color: var(--cook-muted, #5E5E5E);
  margin-right: var(--cook-space-2, 4px);
}
.cook-post-share__btn {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.875rem);
  font-weight: 500;
  color: var(--cook-body, #4F4F4F);
  background: transparent;
  border: 1px solid var(--cook-border, #E0E0E0);
  border-radius: var(--cook-radius-sm, 4px);
  padding: 6px 12px;
  cursor: pointer;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  min-height: 40px;
  box-sizing: border-box;
}
.cook-post-share__btn:hover {
  border-color: var(--cook-red, #BA2031);
  color: var(--cook-red, #BA2031);
}
.cook-post-share__btn:focus-visible {
  outline: 2px solid var(--cook-red, #BA2031);
  outline-offset: 2px;
}

.cook-post-cta-card {
  margin: var(--cook-space-7, 40px) 0;
  padding: var(--cook-space-5, 24px);
  background: var(--cook-bg-primary, #FFFFFF);
  border: 1px solid var(--cook-border, #E0E0E0);
  border-radius: var(--cook-radius-md, 8px);
  box-shadow: var(--cook-shadow-card, 0 1px 3px rgba(0,0,0,0.08));
}
.cook-post-cta-card__title {
  font-family: 'Roboto Slab', serif;
  font-size: var(--cook-text-lg, 1.25rem);
  font-weight: 700;
  color: var(--cook-dark, #373737);
  margin: 0 0 var(--cook-space-3, 8px);
}
.cook-post-cta-card__body {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-base, 1rem);
  color: var(--cook-body, #4F4F4F);
  margin: 0 0 var(--cook-space-4, 16px);
}
.cook-post-cta-card__action {
  margin: 0;
}
.cook-post-cta-card--dealer {
  border-left: 3px solid var(--cook-red, #BA2031);
}
.cook-post-cta-card--styles {
  border-left: 3px solid var(--cook-dark, #373737);
}

@media (max-width: 767px) {
  .cook-post-share { gap: 6px; }
  .cook-post-share__btn { font-size: 0.8125rem; padding: 6px 10px; }
}

/* ============================================================================
 * Blog archive (nsp9) — category filter pills + native search styling
 * ========================================================================== */

.cook-blog-pills {
  display: flex;
  flex-wrap: wrap;
  gap: var(--cook-space-3, 8px);
  margin: var(--cook-space-5, 24px) 0;
  align-items: center;
}
.cook-blog-pills__link {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.875rem);
  font-weight: 500;
  color: var(--cook-body, #4F4F4F);
  background: transparent;
  border: 1px solid var(--cook-border, #E0E0E0);
  border-radius: 999px;
  padding: 8px 18px;
  text-decoration: none;
  min-height: 36px;
  display: inline-flex;
  align-items: center;
  transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease;
}
.cook-blog-pills__link:hover {
  border-color: var(--cook-red, #BA2031);
  color: var(--cook-red, #BA2031);
}
.cook-blog-pills__link:focus-visible {
  outline: 2px solid var(--cook-red, #BA2031);
  outline-offset: 2px;
}
.cook-blog-pills__link--active {
  background: var(--cook-red, #BA2031);
  border-color: var(--cook-red, #BA2031);
  color: #FFFFFF;
}
.cook-blog-pills__link--active:hover {
  color: #FFFFFF;
  background: var(--cook-red-dark, #BA0D21);
  border-color: var(--cook-red-dark, #BA0D21);
}

/* Native WP search form on blog archive — Elementor "WordPress" widget or shortcode. */
.cook-blog-search,
.cook-blog-search form[role="search"] {
  display: flex;
  gap: var(--cook-space-3, 8px);
  width: 100%;
}
.cook-blog-search input[type="search"] {
  flex: 1;
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-base, 1rem);
  padding: 10px 14px;
  border: 1px solid var(--cook-border, #E0E0E0);
  border-radius: var(--cook-radius-sm, 4px);
  background: var(--cook-bg-primary, #FFFFFF);
  color: var(--cook-body, #4F4F4F);
  min-height: 44px;
  box-sizing: border-box;
}
.cook-blog-search input[type="search"]:focus-visible {
  outline: 2px solid var(--cook-red, #BA2031);
  outline-offset: 2px;
  border-color: var(--cook-red, #BA2031);
}
.cook-blog-search button[type="submit"] {
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.875rem);
  font-weight: 600;
  padding: 10px 18px;
  background: var(--cook-red, #BA2031);
  color: #FFFFFF;
  border: 0;
  border-radius: var(--cook-radius-sm, 4px);
  cursor: pointer;
  min-height: 44px;
}
.cook-blog-search button[type="submit"]:hover {
  background: var(--cook-red-dark, #BA0D21);
}

@media (max-width: 479px) {
  .cook-blog-pills { gap: 6px; }
  .cook-blog-pills__link { font-size: 0.8125rem; padding: 6px 14px; }
}

/* ============================================================================
 * Internal search results (v37m.13) — branded child search.php
 * ========================================================================== */

.cook-search__inner {
  max-width: 820px;
  margin: 0 auto;
  padding: var(--cook-space-16, 64px) var(--cook-space-6, 24px);
}
.cook-search__header {
  margin-bottom: var(--cook-space-8, 32px);
  padding-bottom: var(--cook-space-5, 20px);
  border-bottom: 1px solid var(--cook-border, #E0E0E0);
}
.cook-search__title {
  margin: 0;
}
.cook-search__results {
  display: flex;
  flex-direction: column;
  gap: var(--cook-space-8, 32px);
}
.cook-search__result {
  padding-bottom: var(--cook-space-6, 24px);
  border-bottom: 1px solid var(--cook-border, #E0E0E0);
}
.cook-search__result:last-child {
  border-bottom: 0;
}
.cook-search__result-title {
  margin: 0 0 var(--cook-space-2, 8px);
  font-size: 1.375rem;
}
.cook-search__result-title a {
  text-decoration: none;
}
.cook-search__result-title a:hover,
.cook-search__result-title a:focus-visible {
  text-decoration: underline;
}
.cook-search__result-excerpt {
  margin: 0 0 var(--cook-space-3, 12px);
  color: var(--cook-body, #4F4F4F);
}
.cook-search__result-more {
  font-family: 'Cabin', sans-serif;
  font-weight: 600;
  font-size: var(--cook-text-sm, 0.875rem);
  color: var(--cook-red, #BA2031);
  text-decoration: none;
}
.cook-search__result-more:hover,
.cook-search__result-more:focus-visible {
  text-decoration: underline;
}
.cook-search__pagination {
  display: flex;
  justify-content: space-between;
  gap: var(--cook-space-4, 16px);
  margin-top: var(--cook-space-10, 40px);
}
.cook-search__pagination a {
  font-family: 'Cabin', sans-serif;
  font-weight: 600;
  color: var(--cook-red, #BA2031);
  text-decoration: none;
}
.cook-search__pagination a:hover,
.cook-search__pagination a:focus-visible {
  text-decoration: underline;
}

/* No-results empty state — never a dead end. */
.cook-search-empty__lead {
  font-size: 1.125rem;
  margin: 0 0 var(--cook-space-3, 12px);
}
.cook-search-empty__hint {
  color: var(--cook-body, #4F4F4F);
  margin: 0 0 var(--cook-space-6, 24px);
}
.cook-search-empty__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--cook-space-4, 16px);
  margin-bottom: var(--cook-space-10, 40px);
}
.cook-search-empty__form {
  max-width: 480px;
}

@media (max-width: 479px) {
  .cook-search__inner { padding: var(--cook-space-10, 40px) var(--cook-space-5, 20px); }
  .cook-search-empty__actions .cook-btn { width: 100%; }
}

/* === do18 footer text white + larger (2026-05-18) ===
   Catches Elementor footer template (#130) surfaces that aren't picked up by the
   element-ID dark-scope above (lines 1923-1949). Covers theme-builder location + any
   .cook-footer / .site-footer wrappers. Excludes .cook-prefooter-cta (own red scope)
   and .elementor-element-430c556 (copyright strip — already #B0B0B0 for AA muted intent).
   Body size bumped to 1.0625rem (17px equiv) per WCAG-favorable rem unit (memory: rem over px). */
.elementor-location-footer:not(.cook-prefooter-cta),
.cook-footer,
.site-footer {
  color: #FFFFFF;
  font-size: 1.0625rem;
}
.elementor-location-footer :is(p, li, span, .elementor-widget-text-editor, .elementor-widget-text-editor p, .elementor-icon-list-text):not(.cook-prefooter-cta *),
.cook-footer :is(p, li, span, .elementor-widget-text-editor, .elementor-widget-text-editor p, .elementor-icon-list-text),
.site-footer :is(p, li, span, .elementor-widget-text-editor, .elementor-widget-text-editor p, .elementor-icon-list-text) {
  color: #FFFFFF;
  font-size: 1.0625rem;
}
/* fs6l — headings on dark footer scope. html h1-h6 (lines 379-397) force red/dark-primary;
   without this, h3/h4 column titles render dark-on-dark. Excludes .cook-prefooter-cta (red scope owns its own heading color). */
.elementor-location-footer:not(.cook-prefooter-cta) :is(h1, h2, h3, h4, h5, h6),
.cook-footer :is(h1, h2, h3, h4, h5, h6),
.site-footer :is(h1, h2, h3, h4, h5, h6) {
  color: #FFFFFF;
}
.elementor-location-footer a:not(.cook-btn):not(.elementor-button):not(.cook-prefooter-cta a),
.cook-footer a:not(.cook-btn):not(.elementor-button),
.site-footer a:not(.cook-btn):not(.elementor-button) {
  color: #FFFFFF;
}
.elementor-location-footer a:not(.cook-btn):not(.elementor-button):hover,
.cook-footer a:not(.cook-btn):not(.elementor-button):hover,
.site-footer a:not(.cook-btn):not(.elementor-button):hover {
  color: #FFFFFF;
  opacity: 0.85;
}
/* Preserve copyright muted treatment (#B0B0B0 on #2d2d2d — see 430c556 block above) */
.elementor-element-430c556 .elementor-widget-text-editor,
.elementor-element-430c556 .elementor-widget-text-editor p,
.elementor-element-430c556 .elementor-widget-text-editor a {
  font-size: 0.875rem !important; /* copyright stays small + muted, color unchanged */
}

/* dzgr — Building Card #128 (Most Popular Sheds + Beyond Sheds loop grids).
   Clamp tagline + description to fixed line counts so cards stay uniform regardless of
   CMS copy length. equal_height:yes stretches outer columns, but text-length variance
   inside the cards still creates visual drift — clamping the variable widgets fixes that.
   "View Details" button at the bottom of each card serves as the read-more affordance.
   84b8024 = tagline (red sub-heading), daeadfe = description (body text). */
/* In Loop Grid context, text-editor widgets render without .elementor-widget-container —
   description text sits as a bare text node directly inside .elementor-element-{id}.
   So clamp targets the widget element itself. */
.elementor-128 .elementor-element-84b8024,
.elementor-128 .elementor-element-daeadfe {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
/* min-height reserves N line-heights of space (lh unit, CSS L4) so short content
   doesn't make the card shorter than its siblings. line-clamp caps long content. */
.elementor-128 .elementor-element-84b8024 {
  -webkit-line-clamp: 2;
  line-clamp: 2;
  min-height: 2lh;
}
.elementor-128 .elementor-element-daeadfe {
  -webkit-line-clamp: 3;
  line-clamp: 3;
  min-height: 3lh;
}

/* View Details = ghost variant on card #128. Widget 14cd383 ships with
   cook-btn--secondary (red outline) but red outline either reads as text or
   competes with the terminal "View All Shed Styles" red-filled CTA below the
   grid. Ghost (dark outline + dark text → dark fill on hover) keeps a clear
   button shape while preserving hierarchy: 6 quiet card CTAs + 1 loud terminal.
   Loop Grid context does NOT add .elementor-128 ancestor — scope by
   .elementor-loop-container. Doubled class on widget id wins specificity tie
   against the inline setup.php cook-btn--secondary rule. */
.elementor-loop-container .elementor-element-14cd383.elementor-element-14cd383 .elementor-button {
  background-color: var(--cook-dark) !important;
  color: var(--cook-white) !important;
  border-color: var(--cook-dark) !important;
}
.elementor-loop-container .elementor-element-14cd383.elementor-element-14cd383 .elementor-button:hover {
  background-color: var(--cook-red) !important;
  border-color: var(--cook-red) !important;
  color: var(--cook-white) !important;
}

/* Terminal CTA: "View All Shed Styles" on home #135 — upsize so it reads as
   the dominant call below the 6 quieter View Details cards. CSS-only avoids
   _elementor_data mutation on the home page (cold-cache OOM history). */
.elementor-element-btn_view_all.elementor-element-btn_view_all .elementor-button {
  min-height: var(--cook-touch-target-lg) !important;
  padding: 1.125rem 2.5rem !important;
  font-size: 1.25rem !important;
}

/* rsre — How It Works (home #135 section 7618197).
   Force layout: heading row on top (centered) + steps row below (3 equal cols)
   + red chevrons between steps aligned to step-heading line.
   ID-scoped to avoid _elementor_data mutation. DOM order is heading=col1, step1=col2,
   step2=col3, step3=col4 — flex-wrap pushes heading to its own row by flex-basis. */

.elementor-element-7618197 > .elementor-container {
  flex-wrap: wrap;
  align-items: flex-start;
}

/* Step icons above each step heading. ::before on the heading widget wrapper.
   Widget IDs from _elementor_data: f6d43ca=step1, 086e348=step2, 8cacc17=step3.
   Stroke-style red #BA2031 SVGs as data URIs (no asset deps). */
.elementor-element-7618197 .elementor-element-f6d43ca::before,
.elementor-element-7618197 .elementor-element-086e348::before,
.elementor-element-7618197 .elementor-element-8cacc17::before {
  content: "";
  display: block;
  width: 4rem;
  height: 4rem;
  margin: 0 auto 1rem;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}
/* 1. CHOOSE YOUR STYLE — cursor pointing into a shed card (act of choosing). */
.elementor-element-7618197 .elementor-element-f6d43ca::before {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23BA2031' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><rect x='2' y='4' width='13' height='13' rx='1'/><path d='M4.5 11l3.5-2.5L11.5 11'/><path d='M5.5 11v4h5v-4'/><path d='M13 11l9 4-4 1.5-1.5 4z' fill='%23BA2031'/></svg>");
}
/* 2. CUSTOMIZE IT — pencil + ruler (design / configure, not just paint). */
.elementor-element-7618197 .elementor-element-086e348::before {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23BA2031' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='M15 3l3 3-9 9H6v-3z'/><path d='M13 5l3 3'/><rect x='3' y='18' width='18' height='3'/><line x1='7' y1='18' x2='7' y2='20'/><line x1='11' y1='18' x2='11' y2='20'/><line x1='15' y1='18' x2='15' y2='20'/><line x1='19' y1='18' x2='19' y2='20'/></svg>");
}
/* 3. WE DELIVER — delivery truck */
.elementor-element-7618197 .elementor-element-8cacc17::before {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23BA2031' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><rect x='2' y='7' width='11' height='9' rx='1'/><path d='M13 10h4l3 3v3h-7'/><circle cx='6' cy='18' r='2'/><circle cx='17' cy='18' r='2'/></svg>");
}

/* Heading column → own row, full width, centered, breathing room below. */
.elementor-element-7618197 > .elementor-container > .elementor-element-742653b {
  flex: 0 0 100%;
  max-width: 100%;
  text-align: center;
  margin-bottom: 2.5rem;
}

/* Step columns (nth-child 2-4) → 33% each, in their own row, top-aligned. */
.elementor-element-7618197 > .elementor-container > .elementor-column:nth-child(n+2) {
  flex: 0 0 33.333%;
  max-width: 33.333%;
}

/* Chevron between step1↔step2 (in DOM: before nth-child 3) and step2↔step3 (before nth-child 4).
   Pinned to top: 2.5rem so it aligns with the h3 step heading regardless of step-column height. */
.elementor-element-7618197 > .elementor-container > .elementor-column:nth-child(n+3) {
  position: relative;
}
.elementor-element-7618197 > .elementor-container > .elementor-column:nth-child(n+3)::before {
  content: "";
  position: absolute;
  left: -1.25rem;
  top: 2.5rem;
  width: 2.25rem;
  height: 2.25rem;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23BA2031'><path d='M9 5l7 7-7 7V5z'/></svg>");
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  pointer-events: none;
  z-index: 1;
}

@media (max-width: 767px) {
  /* Mobile: stack steps vertically; hide horizontal arrows. */
  .elementor-element-7618197 > .elementor-container > .elementor-column:nth-child(n+2) {
    flex: 0 0 100%;
    max-width: 100%;
  }
  .elementor-element-7618197 > .elementor-container > .elementor-column:nth-child(n+3)::before {
    display: none;
  }
}

/* --- Catalog soft-gate skip link (dcfj) — muted, subtle, never red. --- */
.cook-catalog-skip {
  display: inline-block;
  margin-top: var(--cook-space-3);
  font-size: var(--cook-text-sm);
  color: var(--cook-text-muted);
  text-decoration: underline;
}
.cook-catalog-skip:hover,
.cook-catalog-skip:focus-visible {
  color: var(--cook-text);
  text-decoration: underline;
}

/* =========================================================================
   2026-07-10 — runtime verification sweep (bead 9qsr) launch-gate fixes
   ========================================================================= */

/* v37m.10-A01 (launch gate): keyboard focus was invisible on the two primary
   keyboard entry paths — the desktop nav links and the store-selector trigger.
   Elementor/Hello core zeroes `outline` on `.elementor-item` with higher
   specificity than the global :focus-visible ring, and #cook-store-trigger is
   not nested under .cook-store-indicator so the utility-bar ring above misses
   it. Re-assert a keyboard-only ring via box-shadow, which the outline reset
   can't defeat. Nav is on the white header -> red ring; the trigger is on the
   dark utility bar -> white ring (red there is ~1.15:1, fails WCAG 1.4.11).
   Transparent outline is the forced-colors / High-Contrast-Mode fallback (box
   shadow is dropped in HCM). WCAG 2.4.7 (AA). */
.elementor-nav-menu a.elementor-item:focus-visible {
  box-shadow: 0 0 0 2px var(--cook-red, #BA2031) !important;
  outline: 2px solid transparent !important;
  outline-offset: 2px !important;
  border-radius: 3px;
}
#cook-store-trigger:focus-visible {
  box-shadow: 0 0 0 2px var(--cook-white, #fff) !important;
  outline: 2px solid transparent !important;
  outline-offset: 2px !important;
  border-radius: 3px;
}

/* v37m.12 LF-01 (launch gate): no-JS / JS-failure lead-loss fallback. Rendered
   into every embedded Elementor form via inc/elementor-form-webhook.php so a
   JS-off (or Cloudflare-challenge-blocked frontend.js) visitor gets a visible
   way to reach a dealer instead of a silent native POST-to-self. */
.cook-noscript-fallback {
  margin: 0 0 1rem;
  padding: 0.875rem 1rem;
  border: 1px solid var(--cook-red, #BA2031);
  border-radius: 4px;
  background: #fff5f5;
  color: var(--cook-body, #4F4F4F);
  font-size: var(--cook-text-sm, 0.9375rem);
  line-height: 1.5;
}
.cook-noscript-fallback a {
  color: var(--cook-red, #BA2031);
  font-weight: 700;
}

/* v37m.35 — lead-form privacy line + cookie notice banner (opt-in default; opt-out
   via [cook_privacy_optout] toggle on the Cookie Policy). */
.cook-form-privacy {
  margin: 0.75rem 0 0;
  font-size: var(--cook-text-xs, 0.8125rem);
  line-height: 1.5;
  color: var(--cook-text-muted, #5E5E5E);
}
.cook-form-privacy a { color: var(--cook-red, #BA2031); text-decoration: underline; }
/* hnla — Elementor's `.elementor a { text-decoration:none }` (equal specificity, later
   source) strips the underline; scope past it so the in-text link stays distinguishable
   by more than color (WCAG 1.4.1). No !important — the override isn't !important. */
.elementor .cook-form-privacy a { text-decoration: underline; }

.cook-cookie-notice {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 1rem;
  padding: 0.875rem 1.25rem;
  background: #2b2b2b;
  color: #f2f2f2;
  font-size: var(--cook-text-sm, 0.875rem);
  line-height: 1.5;
  box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.25);
}
.cook-cookie-notice[hidden] { display: none; }
.cook-cookie-notice__text { margin: 0; max-width: 70ch; }
.cook-cookie-notice__text a { color: #fff; text-decoration: underline; }
.cook-cookie-notice__btn {
  flex: none;
  padding: 0.5rem 1.25rem;
  background: var(--cook-red, #BA2031);
  color: #fff;
  border: 0;
  border-radius: 4px;
  font-weight: 700;
  font-size: var(--cook-text-sm, 0.875rem);
  cursor: pointer;
}
.cook-cookie-notice__btn:hover { background: #a01b2a; }
.cook-cookie-notice__btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
/* hnla — Elementor's `[type="button"], button` reset (equal specificity, later source)
   forces transparent bg + #c36 text on the OK button = 2.85:1 contrast fail. The button
   carries an id, so an id-scoped rule wins the cascade without !important (the override
   isn't !important). Hover is re-scoped to id too, else the id base rule would beat the
   class-level :hover. */
#cook-cookie-notice-ok { background: var(--cook-red, #BA2031); color: #fff; }
#cook-cookie-notice-ok:hover { background: #a01b2a; }

/* gh12.18 — genuine Google-review aggregate badge (visible social proof).
   Values from cook_get_review_aggregate() (LocalLock export). Gold stars are a
   review-rating convention, intentionally distinct from the red CTA reservation.
   Text inherits section color so the badge adapts to light/dark placements. */
.cook-review-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  flex-wrap: wrap;
  font-size: var(--cook-text-base, 1rem);
  line-height: 1.2;
}
.cook-review-badge__stars {
  position: relative;
  display: inline-block;
  white-space: nowrap;
  font-size: 1.15em;
  letter-spacing: 0.06em;
  color: var(--cook-star-empty, #d4d4d4);
}
.cook-review-badge__stars::before { content: "\2605\2605\2605\2605\2605"; }
.cook-review-badge__fill {
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
  white-space: nowrap;
  color: var(--cook-star, #f5a623);
}
.cook-review-badge__score { font-weight: 600; }
.cook-review-badge__score strong { font-size: 1.1em; }
.cook-review-badge__count { opacity: 0.85; }
.cook-review-badge__count a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.cook-review-badge--lg { font-size: var(--cook-text-lg, 1.125rem); }
.cook-review-badge--center { display: flex; justify-content: center; }

/* ── Shared classic-template container ─────────────────────────────────
   .cook-container is used by every non-Elementor PHP template (permits,
   size-hub, use-case, sheds-for). It was undefined → zero horizontal gutter,
   so long hero titles (e.g. state names) touched the viewport edge. Narrower
   component max-widths (e.g. .cook-permits__prose 70ch) are declared later and
   still win by source order. */
.cook-container{width:100%;max-width:1120px;margin-inline:auto;padding-inline:clamp(1rem,4vw,2rem);box-sizing:border-box}

/* ── Use-case landing pages (h1sk.7) ─────────────────────────────────── */
/* .cook-hero-red only inverts TEXT to white (it assumes an Elementor-supplied red bg);
   on a plain PHP <section> we must supply the red background ourselves, else white-on-white. */
.cook-usecase__hero{background:var(--cook-red,#BA2031);padding:2.5rem 0}
.cook-usecase__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1.25rem;margin:1.5rem 0}
.cook-usecase__card{display:flex;flex-direction:column;border:1px solid #e0e0e0;border-radius:6px;overflow:hidden;text-decoration:none;color:inherit}
.cook-usecase__img{width:100%;height:auto;display:block}
.cook-usecase__name{font-weight:700;padding:.6rem .75rem 0}
.cook-usecase__price{padding:0 .75rem .75rem;color:#4F4F4F}
.cook-usecase__intro{max-width:60ch}
.cook-usecase-uplink{margin:1rem 0;font-weight:600}
.cook-usecase-uplink a{color:#BA2031;text-decoration:none;font-weight:700}
.cook-usecase-uplink a:hover{text-decoration:underline}
/* ── Size-Hub layer (h1sk.3) ─────────────────────────────────────────── */
/* .cook-hero-red only inverts TEXT to white (assumes an Elementor-supplied red bg);
   on a plain PHP <section> we must supply the red background, else white-on-white. */
.cook-size-hub__hero{background:var(--cook-red,#BA2031);padding:2.5rem 0}
.cook-size-hub__table{width:100%;border-collapse:collapse;margin:1.5rem 0}
.cook-size-hub__table th,.cook-size-hub__table td{padding:.6rem .75rem;border-bottom:1px solid #e0e0e0;text-align:left}
.cook-size-hub__table th{font-weight:700}
.cook-size-hub__use-chips{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0}
.cook-size-hub__use-chips li{background:#f2f2f2;border-radius:999px;padding:.25rem .75rem;font-size:.9rem}
.cook-size-hub__adjacent{margin:1.5rem 0}
/* h1sk.3.4 — flex on the .cook-container child (the prev/next links live inside it), not the <nav> */
.cook-size-hub__adjacent .cook-container{display:flex;justify-content:space-between;gap:1rem}
.cook-size-hub-uplink{display:inline-block;margin:1rem 0;font-weight:700;color:#BA2031;text-decoration:none}
.cook-size-hub-index__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1rem}
.cook-size-hub-index__card{display:flex;flex-direction:column;padding:1rem;border:1px solid #e0e0e0;border-radius:6px;text-decoration:none;color:inherit}
.cook-size-hub-index__wxl{font-size:1.3rem;font-weight:700}
.cook-size-hub-index__meta{font-size:.85rem;color:#4F4F4F}
@media (max-width: 767px){.cook-size-hub__adjacent .cook-container{flex-direction:column}}

/* ── Sheds-by-use index (h1sk.7.1) ───────────────────────────────────── */
.cook-usecase-index__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1.25rem;margin:1.5rem 0;list-style:none;padding:0}
.cook-usecase-index__card{display:flex;flex-direction:column;gap:.4rem;height:100%;padding:1.1rem 1.15rem;border:1px solid #e0e0e0;border-radius:6px;text-decoration:none;color:inherit}
.cook-usecase-index__card:hover{border-color:var(--cook-red,#BA2031)}
.cook-usecase-index__name{font-weight:700;font-size:1.15rem;color:var(--cook-red,#BA2031)}
.cook-usecase-index__blurb{color:#4F4F4F;line-height:1.5}

/* ── Shed-permit resource pages (inc/permits.php) ────────────────────── */
/* .cook-hero-red inverts TEXT to white only; supply the red background here or
   the hero renders white-on-white. */
.cook-permits__hero{background:var(--cook-red,#BA2031);padding:2.5rem 0}
.cook-permits__hero p{max-width:60ch}
.cook-permits__prose{max-width:70ch}
.cook-permits__prose h2{margin-top:2rem}
.cook-permits__prose ul,.cook-permits__prose ol{margin:0 0 1.25rem;padding-left:1.4rem}
.cook-permits__prose li{margin-bottom:.5rem}
.cook-permits__prose p{margin:0 0 1rem}
.cook-permits__reviewed{margin:0 0 1.25rem;font-size:0.875rem;color:var(--cook-text-muted, #6b6b6b)}
.cook-permits__faq{margin-top:2rem}
.cook-permits__links{margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid #e0e0e0}
.cook-permits__linklist{list-style:none;padding:0;margin:.75rem 0 0;display:flex;flex-direction:column;gap:.5rem}
.cook-permits__linklist a{font-weight:600}
.cook-permits-index__grid{list-style:none;padding:0;margin:1.5rem 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.25rem}
.cook-permits-index__item a{display:flex;flex-direction:column;gap:.4rem;height:100%;padding:1.1rem 1.15rem;border:1px solid #e0e0e0;border-radius:6px;text-decoration:none;color:inherit}
.cook-permits-index__item a:hover{border-color:var(--cook-red,#BA2031)}
.cook-permits-index__state{font-weight:700;font-size:1.1rem;color:var(--cook-red,#BA2031)}
.cook-permits-index__meta{color:#4F4F4F;line-height:1.5;font-size:.95rem}
/* /locations/ -> in-state permit-guide cross-link */
.cook-permits-xlink{margin:1rem 0;font-weight:600}
.cook-permits-xlink a{color:var(--cook-red,#BA2031);text-decoration:none;font-weight:700}
.cook-permits-xlink a:hover{text-decoration:underline}

/* ══════════════════════════════════════════════════════════════════════════
   ANCHORED RESKIN — reusable pattern kit (dd1g / spec 2026-07-19)
   ──────────────────────────────────────────────────────────────────────────
   The flagship "anchored" visual language: full-bleed alternating color bands,
   eyebrow-tag section heads, uppercase slab display type, chips + pills, one
   overlap card. All values derive from the existing :root --cook-* tokens — NO
   new palette, NO new fonts (Roboto Slab display / Cabin body).

   CLASS LOCK (Phase 1, dd1g plan §2): the class names below are FROZEN. `m3q7.3`
   (phone/engagement JS repoint) and every site-wide rollout spec target these
   exact names. Kit classes are STYLING-ONLY (INTENT-1.5) — never key JS/GTM on
   them; tracking rides data-cook-click-location attrs + the unchanged
   .cook-prefooter-cta / .cook-card / .cook-utility-bar / .cook-nav-bar classes.

   Inversion (red/dark/sub bands): NOT re-implemented here. .cook-band--red joins
   the red-hero :is() scope and .cook-band--dark / .cook-band--sub join the
   dark-hero :is() scope (both above) — inheriting the proven 4 rule families
   (section-color, headings/p, links, forms). Those scopes hardcode
   color:var(--cook-white) (not --cook-text-inverse) so inverted bands hold white
   text under the retained dark-mode CSS. New banded work uses .cook-band--*
   classes ONLY — never a new element-ID allowlist entry (exits the gh12.24/t6qt
   fragility). --sub is #5E5E5E: white-only text, muted tokens BANNED in-band
   (--cook-text-muted IS #5E5E5E → invisible); AA at all sizes (~6.5:1).

   Layout: .cook-band is full-bleed (background + vertical padding only). It does
   NOT constrain width — horizontal constraint stays with the inner container
   (Elementor boxed container in a full-width section, or .cook-container /
   __inner wrapper in PHP). Apply band classes via the Elementor CSS-Classes
   field on the Section/Container (never inline CSS — INTENT-4.4).

   Breakpoints (mzkg N-7): kit media queries use ONLY the 767/1023 max scheme.
   No new one-off breakpoints.
   ══════════════════════════════════════════════════════════════════════════ */

/* --- Band grounds -------------------------------------------------------- */
.cook-band { padding-block: clamp(var(--cook-space-12, 48px), 8vw, var(--cook-space-16, 64px)); }
.cook-band--red   { background: var(--cook-red, #BA2031);     color: var(--cook-white, #FFFFFF); }
.cook-band--dark  { background: var(--cook-dark, #373737);    color: var(--cook-white, #FFFFFF); }
.cook-band--sub   { background: var(--cook-topbar, #5E5E5E);  color: var(--cook-white, #FFFFFF); }
.cook-band--grey  { background: var(--cook-card-bg, #F2F2F2); }
.cook-band--white { background: var(--cook-white, #FFFFFF); }
.cook-band--flush { padding-block: 0; }

/* --- Section header rhythm: eyebrow tag → slab h2 → sub ------------------ */
.cook-section-head { margin-bottom: var(--cook-space-8, 32px); }
.cook-section-head__tag {
  display: inline-block;
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.8125rem);
  font-weight: var(--cook-font-weight-semibold, 600);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--cook-red, #BA2031);
  margin-bottom: var(--cook-space-3, 12px);
}
/* Elementor renders the eyebrow as a heading widget → inner .elementor-heading-title.
   Force it to inherit the tag styling (else Elementor's default size wins, and the
   broad title rule below would otherwise size it as a slab head). */
.cook-section-head__tag .elementor-heading-title {
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
  text-transform: inherit;
}
.cook-section-head h2,
.cook-section-head__title .elementor-heading-title,
.cook-section-head__title {
  font-family: 'Roboto Slab', serif;
  font-weight: var(--cook-font-weight-bold, 700);
  text-transform: uppercase;
  font-size: clamp(1.625rem, 4vw, 2.5rem);
  line-height: 1.12;
  letter-spacing: -0.005em;
  margin: 0;
}
.cook-section-head__sub {
  margin-top: var(--cook-space-3, 12px);
  color: var(--cook-text-muted, #5E5E5E);
  font-size: var(--cook-text-lg, 1.125rem);
  max-width: 60ch;
}
/* --light: variant for red/dark/sub bands (red tag on a red/dark ground fails) */
.cook-section-head--light .cook-section-head__tag { color: var(--cook-white, #FFFFFF); }
.cook-section-head--light .cook-section-head__sub  { color: rgba(255, 255, 255, 0.85); }
/* Defense-in-depth: auto-invert the eyebrow tag + sub on inverted bands even when
   --light is omitted. The tag is a <span> (and sub may be a non-<p>), so the hero
   :is() text scopes don't catch them → a forgotten --light would render red-on-red
   (~1:1, invisible). Mirrors the .cook-chip inverted-band rule below. */
.cook-band--red .cook-section-head__tag,
.cook-band--dark .cook-section-head__tag,
.cook-band--sub .cook-section-head__tag { color: var(--cook-white, #FFFFFF); }
.cook-band--red .cook-section-head__sub,
.cook-band--dark .cook-section-head__sub,
.cook-band--sub .cook-section-head__sub { color: rgba(255, 255, 255, 0.85); }

/* --- Hero display headline (applied to an h1 widget via CSS-Classes) ------ */
.cook-display-xl,
.cook-display-xl .elementor-heading-title {
  font-family: 'Roboto Slab', serif;
  font-weight: var(--cook-font-weight-bold, 700);
  text-transform: uppercase;
  font-size: clamp(2.375rem, 6vw, 4.625rem); /* 38 → 74px */
  line-height: 1.12;
  letter-spacing: -0.005em;
  margin: 0;
}

/* --- Overlap: the signature pull-up (home: ONE, the featured building) ----
   Positioning-only BY DESIGN: the inner card (loop-item #128) supplies its own
   elevation (--cook-shadow-card), which is REQUIRED so the flattened mobile state
   (margin-top:0, <=767px) still reads "featured". Kept off .cook-overlap to avoid
   double-shadow with the card. Parent band needs bottom-padding headroom +
   overflow:visible (not clipping). */
.cook-overlap { position: relative; z-index: 2; margin-top: -72px; }
@media (max-width: 1024px) { .cook-overlap { margin-top: -40px; } }
@media (max-width: 767px)  { .cook-overlap { margin-top: 0; } }

/* --- Chip: small non-interactive uppercase meta label -------------------- */
.cook-chip {
  display: inline-flex;
  align-items: center;
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-xs, 0.75rem);
  font-weight: var(--cook-font-weight-semibold, 600);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  line-height: 1.4;
  padding: var(--cook-space-1, 4px) var(--cook-space-3, 12px);
  border: 1px solid var(--cook-border, #D3D3D3);
  border-radius: var(--cook-radius-pill, 999px);
  color: var(--cook-text-muted, #5E5E5E);
}
.cook-band--red .cook-chip,
.cook-band--dark .cook-chip,
.cook-band--sub .cook-chip {
  border-color: rgba(255, 255, 255, 0.5);
  color: var(--cook-white, #FFFFFF);
}

/* --- Pill: tappable nav link (use-case row). Focus ring via the global
   a:focus-visible / button:focus-visible rule (this file, ~"CTA / focus" block) —
   red on the white band, no override needed. */
.cook-pill-row { display: flex; flex-wrap: wrap; gap: var(--cook-space-3, 12px); }
.cook-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--cook-touch-target, 44px);
  padding: var(--cook-space-2, 8px) var(--cook-space-5, 20px);
  border: 1px solid var(--cook-border, #D3D3D3);
  border-radius: var(--cook-radius-pill, 999px);
  background: var(--cook-white, #FFFFFF);
  font-family: 'Cabin', sans-serif;
  font-size: var(--cook-text-sm, 0.8125rem);
  font-weight: var(--cook-font-weight-semibold, 600);
  color: var(--cook-text-primary, #4F4F4F);
  text-decoration: none;
  transition: background-color var(--cook-transition-fast, 0.2s ease),
              color var(--cook-transition-fast, 0.2s ease),
              border-color var(--cook-transition-fast, 0.2s ease);
}
.cook-pill:hover {
  background: var(--cook-red, #BA2031);
  color: var(--cook-white, #FFFFFF);
  border-color: var(--cook-red, #BA2031);
}
@media (prefers-reduced-motion: reduce) {
  .cook-pill { transition: none; }
}
/* ── end anchored reskin pattern kit ─────────────────────────────────────── */
