
/* Iron-clad: Elementor global colors -> NDCT brand.
   The Elementor kit already maps these (Primary = #CC0000), but pinning
   them here too means any widget that defaults to a Pro/kit fallback
   still lands on brand. Single source of truth for what is primary?. */
:root {
    --e-global-color-primary:   #CC0000 !important;
    --e-global-color-secondary: #FFFFFF !important;
    --e-global-color-text:      #E8E8E8 !important;
    --e-global-color-accent:    #0B0B0B !important;
}
/* ==============================================
   NDCT Global CSS - v2.0.0 - 2026-04-04
   Next Day Custom Tees - Red / White / Black
   No !important (except SWH hide + reduced-motion)
   #id selectors for specificity over Elementor
   ============================================== */

/* --- Variables --- */
:root {
  --red: #CC0000;
  /* Hover red is now DARKER than --red (per punch list 26-04-28).
     Was #E31937 (lighter/salmon). All button/link hover states use this. */
  --red-bright: #990000;
  --red-glow: rgba(204,0,0,0.15);
  --red-glow-strong: rgba(204,0,0,0.25);
  --black: #0B0B0B;
  --surface: #161616;
  --surface-raised: #1E1E1E;
  --surface-hover: #252525;
  --border: #2A2A2A;
  --white: #FFFFFF;
  --off-white: #F5F5F5;
  --gray-100: #E8E8E8;
  --gray-300: #AAAAAA;
  --gray-500: #999999;
  --gray-700: #444444;
  --font-display: 'Oswald', sans-serif;
  --font-body: 'Barlow', sans-serif;
  --font-condensed: 'Barlow Condensed', sans-serif;
  --pad: 100px;
  --max-w: 1220px;
  --ease: cubic-bezier(0.25,0.46,0.45,0.94);
  --ease-out: cubic-bezier(0.22,1,0.36,1);
  --rfm-primary: #CC0000;
  --rfm-primary-dark: #A00000;
  --rfm-primary-light: #990000;
  --rfm-accent: #CC0000;
  --rfm-accent-hover: #990000;
  --rfm-text: #FFFFFF;
  --rfm-text-mid: #E8E8E8;
  --rfm-text-muted: #AAAAAA;
  --rfm-text-light: #999999;
  --rfm-bg: #161616;
  --rfm-bg-alt: #1E1E1E;
  --rfm-border: #2A2A2A;
  --rfm-border-light: #222222;
  --rfm-radius: 6px;
  --rfm-radius-sm: 4px;
  --rfm-font-display: 'Oswald', sans-serif;
}

/* --- Base --- */
body { font-family: var(--font-body); background: var(--black); color: var(--white); line-height: 1.6; overflow-x: hidden; -webkit-font-smoothing: antialiased; }
img { max-width: 100%; height: auto; display: block; }
a { text-decoration: none; color: inherit; transition: color .3s var(--ease); }

/* --- Promo Bar --- */
#ndct-promo-bar { background: var(--red); color: var(--white); text-align: center; }
#ndct-promo-bar a { color: var(--white); text-decoration: underline; text-underline-offset: 3px; }

/* --- Header --- */
#ndct-header { position: sticky; top: 0; z-index: 9999; background: rgba(255,255,255,0.97); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid #e0e0e0; }
#ndct-header .elementor-widget-image img { height: 52px; width: auto; max-width: none; }
#ndct-header > .e-con-inner { max-width: 100%; width: 100%; }
#ndct-header nav,
#ndct-header .elementor-nav-menu--main > ul { display: flex; flex-wrap: nowrap; gap: 18px; align-items: center; }
#ndct-header .elementor-nav-menu--main > ul > li { list-style: none; }
#ndct-header .elementor-nav-menu--main > ul > li > .elementor-item { font-family: var(--font-condensed); font-size: 13px; font-weight: 600; letter-spacing: 1.5px; text-transform: uppercase; color: #444; white-space: nowrap; padding: 0; position: relative; }
#ndct-header .rfm-phone { margin-left: 16px; margin-right: 12px; }
#ndct-header .elementor-button { box-shadow: none; padding: 11px 20px; font-size: 13px; }
#ndct-header .elementor-nav-menu--main > ul > li > .elementor-item::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 0; height: 2px; background: var(--red); transition: width .3s var(--ease); }
#ndct-header .elementor-nav-menu--main > ul > li > .elementor-item:hover { color: var(--black); }
#ndct-header .elementor-nav-menu--main > ul > li > .elementor-item:hover::after { width: 100%; }
#ndct-header .rfm-phone,
#ndct-header .rfm-phone a,
#ndct-header .rfm-phone__number { color: var(--black); font-family: var(--font-condensed); font-size: 15px; font-weight: 700; letter-spacing: 1px; }
#ndct-header .rfm-phone__icon svg { fill: var(--red); width: 16px; height: 16px; }

/* --- Hero + Video BG --- */
#ndct-hero { position: relative; overflow: hidden; }
#ndct-hero video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: .25; z-index: 0; pointer-events: none; }
#ndct-hero .elementor-widget-text-editor:has(video) { position: absolute; inset: 0; z-index: 0; }
#ndct-hero .elementor-widget-text-editor:has(video) .elementor-widget-container { position: absolute; inset: 0; }
#ndct-hero::before { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(11,11,11,0.92) 0%, rgba(11,11,11,0.75) 50%, rgba(11,11,11,0.88) 100%), radial-gradient(ellipse at 70% 80%, var(--red-glow) 0%, transparent 50%); z-index: 1; pointer-events: none; }
#ndct-hero > .e-con-inner { position: relative; z-index: 2; }
#ndct-hero .hero-bg::after,
#ndct-hero .elementor-background-overlay { background: linear-gradient(135deg,rgba(11,11,11,.95) 0%,rgba(11,11,11,.6) 50%,rgba(11,11,11,.85) 100%),radial-gradient(ellipse at 70% 80%,var(--red-glow) 0%,transparent 50%); }
#ndct-hero-visual .rfm-pc { aspect-ratio: 4/5; border-radius: 8px; overflow: hidden; border: 1px solid var(--border); }

/* --- Section Headers (combined) --- */
[id^="ndct-"] .rfm-sh__eyebrow { font-family: var(--font-condensed); color: var(--red); font-size: 14px; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; }

[id^="ndct-"] .rfm-sh__heading { font-family: var(--font-display); color: var(--white); text-transform: uppercase; font-weight: 700; line-height: 1; }

[id^="ndct-"] .rfm-sh__heading em { color: var(--red); font-style: normal; display: block; }

[id^="ndct-"] .rfm-sh__desc { color: var(--gray-300); font-size: 17px; line-height: 1.75; }

/* --- Stats (Hero) --- */
#ndct-hero .rfm-stats__value,
#ndct-hero .rfm-stats__number { font-family: var(--font-display); font-size: 44px; font-weight: 700; color: var(--red); line-height: 1; }
#ndct-hero .rfm-stats__prefix,
#ndct-hero .rfm-stats__suffix { color: var(--red); }
#ndct-hero .rfm-stats__label { font-family: var(--font-condensed); font-size: 13px; font-weight: 600; color: var(--gray-500); text-transform: uppercase; letter-spacing: 1px; margin-top: 4px; }

/* --- Trust Bar --- */
#ndct-trust .ndct-trust-logos img,
#ndct-trust .elementor-widget-image img { max-width: 900px; width: 100%; height: auto; margin: 0 auto; display: block; opacity: .7; filter: grayscale(50%); transition: opacity .3s, filter .3s; }
#ndct-trust .ndct-trust-logos img:hover,
#ndct-trust .elementor-widget-image img:hover { opacity: 1; filter: grayscale(0%); }

/* --- Gallery Social Icons (top-right follow buttons) --- */
#ndct-gallery .rfm-social { gap: 12px; }
#ndct-gallery .rfm-social__link {
  width: 44px; height: 44px; border-radius: 50%;
  background: transparent; border: 2px solid var(--red); color: var(--red);
  display: inline-flex; align-items: center; justify-content: center;
  transition: all .3s var(--ease);
}
#ndct-gallery .rfm-social__link:hover {
  background: var(--red); border-color: var(--red); color: var(--white);
  transform: translateY(-2px); box-shadow: 0 8px 20px var(--red-glow-strong);
}
#ndct-gallery .rfm-social__link svg { width: 18px; height: 18px; fill: currentColor; transition: fill .3s; }

/* --- Services (Card Box + Counter) --- */
#ndct-services,
#ndct-svc-grid { counter-reset: srv-counter; }
#ndct-services .rfm-cb,
#ndct-svc-grid .rfm-cb { counter-increment: srv-counter; background: var(--surface); border-color: var(--border); box-shadow: none; padding: 0; overflow: hidden; transition: all .4s var(--ease); }
#ndct-services .rfm-cb:hover,
#ndct-svc-grid .rfm-cb:hover { border-color: var(--red); transform: translateY(-6px); box-shadow: 0 20px 60px rgba(0,0,0,.5); }
#ndct-services .rfm-cb__icon,
#ndct-svc-grid .rfm-cb__icon { margin-bottom: 0; width: 100%; }
#ndct-services .rfm-cb__icon img,
#ndct-svc-grid .rfm-cb__icon img { border-radius: 0; width: 100%; height: 200px; object-fit: cover; filter: brightness(0.8); transition: filter .4s; }
#ndct-services .rfm-cb:hover .rfm-cb__icon img,
#ndct-svc-grid .rfm-cb:hover .rfm-cb__icon img { filter: brightness(1); }
#ndct-services .rfm-cb__text-1,
#ndct-svc-grid .rfm-cb__text-1 { padding: 0 24px; }
#ndct-services .rfm-cb__text-2,
#ndct-svc-grid .rfm-cb__text-2 { padding: 0 24px; }
#ndct-services .rfm-cb__button,
#ndct-svc-grid .rfm-cb__button { padding: 0 24px 28px; }
#ndct-services .rfm-cb__text-1::before,
#ndct-svc-grid .rfm-cb__text-1::before { content: counter(srv-counter, decimal-leading-zero); font-family: var(--font-display); font-size: 48px; font-weight: 700; color: var(--surface-hover); line-height: 1; margin: 28px 0 8px; display: block; transition: color .3s; }
#ndct-services .rfm-cb:hover .rfm-cb__text-1::before,
#ndct-svc-grid .rfm-cb:hover .rfm-cb__text-1::before { color: var(--red-glow-strong); }
#ndct-services .rfm-cb__text-1,
#ndct-svc-grid .rfm-cb__text-1 { font-family: var(--font-display); font-size: 24px; color: var(--white); text-transform: uppercase; margin-bottom: 10px; }
#ndct-services .rfm-cb__text-2,
#ndct-svc-grid .rfm-cb__text-2 { font-size: 15px; color: var(--gray-300); line-height: 1.7; margin-bottom: 16px; }
#ndct-services .rfm-cb__button,
#ndct-svc-grid .rfm-cb__button { font-family: var(--font-condensed); font-size: 13px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--red); background: transparent; border: none; padding: 0; }
#ndct-services .rfm-cb__button:hover,
#ndct-svc-grid .rfm-cb__button:hover { color: var(--red-bright); }

/* --- About --- */
.about-quote { font-family: var(--font-display); font-size: 22px; color: var(--red); margin: 24px 0; padding-left: 20px; border-left: 3px solid var(--red); line-height: 1.3; text-transform: uppercase; }
[id^="ndct-"] .rfm-ibadge__img img { border-radius: 6px; border: 1px solid var(--border); }
[id^="ndct-"] .rfm-ibadge__accent { background: var(--red); box-shadow: 0 10px 40px var(--red-glow-strong); transition: transform .3s, box-shadow .3s; }
[id^="ndct-"] .rfm-ibadge:hover .rfm-ibadge__accent { transform: translateY(-3px); box-shadow: 0 14px 50px var(--red-glow-strong); }
[id^="ndct-"] .rfm-ibadge__num { font-family: var(--font-display); font-size: 44px; font-weight: 700; color: var(--white); }
[id^="ndct-"] .rfm-ibadge__label { font-family: var(--font-condensed); font-size: 11px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: rgba(255,255,255,0.8); }
.dtf-price { transition: transform .3s, box-shadow .3s; cursor: default; }
.dtf-price:hover { transform: translateY(-4px); box-shadow: 0 12px 40px var(--red-glow-strong); }

/* --- Icon Checklist (all sections) --- */
[id^="ndct-"] .rfm-icl { color: var(--white); }
[id^="ndct-"] .rfm-icl__item { color: var(--gray-100); font-family: var(--font-condensed); font-size: 15px; font-weight: 600; transition: transform .2s, color .2s; }
[id^="ndct-"] .rfm-icl__item:hover { transform: translateX(4px); color: var(--white); }
[id^="ndct-"] .rfm-icl__icon { color: var(--red); }
[id^="ndct-"] .rfm-icl__icon svg { fill: var(--red); }

/* --- DTF Spotlight --- */
#ndct-dtf { position: relative; overflow: hidden; }
#ndct-dtf::before { content: ''; position: absolute; top: -50%; right: -20%; width: 60%; height: 200%; background: radial-gradient(ellipse, var(--red-glow) 0%, transparent 60%); pointer-events: none; }
#ndct-dtf .rfm-icl__item { border-bottom: 1px solid var(--border); padding: 10px 0; }
.dtf-price { display: inline-flex; align-items: center; gap: 14px; background: var(--surface); border: 2px solid var(--red); border-radius: 6px; padding: 16px 24px; margin: 20px 0 24px; }
.dtf-price .big { font-family: var(--font-display); font-size: 40px; font-weight: 700; color: var(--red); }
.dtf-price .sub { font-size: 14px; color: var(--gray-500); line-height: 1.3; }

/* --- Process (all sections) --- */
[id^="ndct-"] .rfm-step { text-align: center; }
[id^="ndct-"] .rfm-step__num { width: 88px; height: 88px; border-radius: 50%; background: var(--surface-raised); border: 2px solid var(--border); display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 32px; font-weight: 700; color: var(--red); margin-bottom: 20px; position: relative; z-index: 1; transition: all .4s var(--ease); }
[id^="ndct-"] .rfm-step:hover .rfm-step__num { border-color: var(--red); background: var(--red-glow); transform: translateY(-4px); }
[id^="ndct-"] .rfm-step__title { font-family: var(--font-display); font-size: 20px; font-weight: 600; color: var(--white); text-transform: uppercase; margin-bottom: 8px; }
[id^="ndct-"] .rfm-step__desc { font-size: 14px; color: var(--gray-500); line-height: 1.65; }
[id^="ndct-"] .rfm-step__connector { display: none; }
[id^="ndct-"] .rfm-steps--horizontal { position: relative; }
[id^="ndct-"] .rfm-steps--horizontal::before { content: ''; position: absolute; top: 44px; left: 12.5%; right: 12.5%; height: 2px; background: linear-gradient(90deg, var(--border), var(--red), var(--border)); z-index: 0; }

/* --- Gallery --- */
#ndct-gallery .rfm-gallery__item { border: 1px solid var(--border); border-radius: 4px; overflow: hidden; position: relative; transition: all .4s var(--ease); }
#ndct-gallery .rfm-gallery__item:hover { border-color: var(--red); transform: translateY(-3px); }
#ndct-gallery .rfm-gallery__item img { transition: transform .5s var(--ease); filter: brightness(0.95); }
#ndct-gallery .rfm-gallery__item:hover img { transform: translateY(-2px); filter: brightness(1); }
#ndct-gallery .rfm-gallery__overlay { position: absolute; inset: 0; background: linear-gradient(to top, rgba(0,0,0,.7) 0%, transparent 50%); opacity: 0; transition: opacity .3s; display: flex; align-items: flex-end; padding: 14px; }
#ndct-gallery .rfm-gallery__item:hover .rfm-gallery__overlay { opacity: 1; }
#ndct-gallery .rfm-gallery__label { font-family: var(--font-condensed); font-size: 12px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; color: var(--white); }

/* --- Testimonials (all sections) --- */
[id^="ndct-"] .rfm-test { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 32px; color: var(--white); transition: all .3s var(--ease); height: 100%; }
[id^="ndct-"] .rfm-test:hover { border-color: var(--red); transform: translateY(-4px); }
[id^="ndct-"] .rfm-test__stars { color: var(--red); font-size: 16px; letter-spacing: 2px; margin-bottom: 14px; }
[id^="ndct-"] .rfm-test__quote-mark { color: var(--red); opacity: 0.3; }
[id^="ndct-"] .rfm-test__text,
[id^="ndct-"] .rfm-test__quote { font-size: 15px; color: var(--gray-300); line-height: 1.7; font-style: italic; margin-bottom: 20px; }
[id^="ndct-"] .rfm-test__name { font-family: var(--font-condensed); font-size: 15px; font-weight: 700; color: var(--white); }
[id^="ndct-"] .rfm-test__subtitle { font-size: 13px; color: var(--gray-500); }
[id^="ndct-"] .rfm-test__avatar { background: var(--surface); border: 2px solid var(--red); color: var(--red); font-family: var(--font-display); }

/* --- Lead Form --- */
#ndct-lead { position: relative; overflow: hidden; }
#ndct-lead::before { content: ''; position: absolute; inset: 0; background: radial-gradient(ellipse at 50% 100%, var(--red-glow) 0%, transparent 50%); pointer-events: none; }

/* --- Elementor Pro Form Styling (global form chrome standard, 2026-04-28).
 * Card chrome wraps the .ndct-form widget root. Field rules use [id^="ndct-"]
 * to also catch any form on a section without an explicit ndct-form css class. */
.ndct-form-head { text-align: center; margin-bottom: 18px; }
.ndct-form-title { font-family: var(--font-display); font-size: clamp(28px, 3vw, 44px); font-weight: 700; text-transform: uppercase; color: var(--white); margin: 0 0 8px; line-height: 1.1; }
.ndct-form-subtitle { text-align: center; font-size: 14px; color: var(--gray-500); margin: 0 0 24px; }
.ndct-form-note { text-align: center; font-size: 12px; color: var(--gray-700); margin-top: 10px; }

.ndct-form { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 36px; max-width: 720px; margin: 0 auto; width: 100%; }
@media (max-width: 600px) { .ndct-form { padding: 24px; } }

[id^="ndct-"] .elementor-field-group,
.ndct-form .elementor-field-group { margin-bottom: 14px; }

[id^="ndct-"] .elementor-field-group .elementor-field-textual,
[id^="ndct-"] .elementor-field-group input[type="text"],
[id^="ndct-"] .elementor-field-group input[type="email"],
[id^="ndct-"] .elementor-field-group input[type="tel"],
[id^="ndct-"] .elementor-field-group input[type="number"],
[id^="ndct-"] .elementor-field-group input[type="date"],
[id^="ndct-"] .elementor-field-group select,
[id^="ndct-"] .elementor-field-group textarea,
.ndct-form .elementor-field-group .elementor-field-textual,
.ndct-form .elementor-field-group input[type="text"],
.ndct-form .elementor-field-group input[type="email"],
.ndct-form .elementor-field-group input[type="tel"],
.ndct-form .elementor-field-group input[type="number"],
.ndct-form .elementor-field-group input[type="date"],
.ndct-form .elementor-field-group select,
.ndct-form .elementor-field-group textarea { background: var(--black); border: 1px solid var(--border); border-radius: 4px; color: var(--white); font-family: var(--font-body); font-size: 14px; padding: 7px 10px; transition: border-color .3s; width: 100%; box-shadow: none; outline: none; }

[id^="ndct-"] .elementor-field-group .elementor-field-textual:focus,
[id^="ndct-"] .elementor-field-group input:focus,
[id^="ndct-"] .elementor-field-group select:focus,
[id^="ndct-"] .elementor-field-group textarea:focus,
.ndct-form .elementor-field-group .elementor-field-textual:focus,
.ndct-form .elementor-field-group input:focus,
.ndct-form .elementor-field-group select:focus,
.ndct-form .elementor-field-group textarea:focus { border-color: var(--red); outline: none; box-shadow: none; }

[id^="ndct-"] .elementor-field-group input::placeholder,
[id^="ndct-"] .elementor-field-group textarea::placeholder,
.ndct-form .elementor-field-group input::placeholder,
.ndct-form .elementor-field-group textarea::placeholder { color: var(--gray-300); opacity: 1; font-size: 13px; }

[id^="ndct-"] .elementor-field-group > label,
[id^="ndct-"] .elementor-field-group .elementor-field-label,
.ndct-form .elementor-field-group > label,
.ndct-form .elementor-field-group .elementor-field-label { font-family: var(--font-condensed); font-size: 12px; font-weight: 700; letter-spacing: 1px; color: var(--white); text-transform: uppercase; margin-bottom: 5px; display: block; }

[id^="ndct-"] .elementor-mark-required .elementor-field-label::after,
.ndct-form .elementor-mark-required .elementor-field-label::after { content: ' *'; color: var(--red); }

[id^="ndct-"] .elementor-field-group .elementor-field-subgroup,
.ndct-form .elementor-field-group .elementor-field-subgroup { display: flex; flex-wrap: wrap; gap: 16px; }
[id^="ndct-"] .elementor-field-group .elementor-field-subgroup .elementor-field-option,
.ndct-form .elementor-field-group .elementor-field-subgroup .elementor-field-option { display: flex; align-items: center; gap: 8px; color: var(--gray-100); font-size: 13px; }

[id^="ndct-"] .elementor-field-group input[type="radio"],
[id^="ndct-"] .elementor-field-group input[type="checkbox"],
.ndct-form .elementor-field-group input[type="radio"],
.ndct-form .elementor-field-group input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--red); flex-shrink: 0; margin: 0; }

[id^="ndct-"] .elementor-field-type-upload .elementor-field,
.ndct-form .elementor-field-type-upload .elementor-field { background: var(--black); border: 2px dashed var(--border); border-radius: 6px; padding: 20px; color: var(--gray-500); text-align: left; cursor: pointer; transition: border-color .3s; }
[id^="ndct-"] .elementor-field-type-upload .elementor-field:hover,
.ndct-form .elementor-field-type-upload .elementor-field:hover { border-color: var(--red); }
[id^="ndct-"] .elementor-field-type-upload input[type="file"]::file-selector-button,
.ndct-form .elementor-field-type-upload input[type="file"]::file-selector-button { background: var(--surface-raised); color: var(--white); font-family: var(--font-condensed); font-size: 12px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; padding: 8px 14px; border: 1px solid var(--border); border-radius: 4px; margin-right: 12px; cursor: pointer; transition: all .25s var(--ease); }
[id^="ndct-"] .elementor-field-type-upload input[type="file"]::file-selector-button:hover,
.ndct-form .elementor-field-type-upload input[type="file"]::file-selector-button:hover { background: var(--red); border-color: var(--red); color: var(--white); }
[id^="ndct-"] .elementor-field-type-upload input[type="file"],
.ndct-form .elementor-field-type-upload input[type="file"] { color: var(--gray-500); font-size: 13px; }

[id^="ndct-"] .elementor-button[type="submit"],
[id^="ndct-"] form button[type="submit"],
.ndct-form .elementor-button[type="submit"],
.ndct-form form button[type="submit"] { background: var(--red); color: var(--white); font-family: var(--font-condensed); font-size: 16px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; border-radius: 4px; padding: 16px 32px; border: none; cursor: pointer; transition: all .3s var(--ease); width: 100%; margin-top: 6px; }
[id^="ndct-"] .elementor-button[type="submit"]:hover,
[id^="ndct-"] form button[type="submit"]:hover,
.ndct-form .elementor-button[type="submit"]:hover,
.ndct-form form button[type="submit"]:hover { background: var(--red-bright); transform: translateY(-2px); box-shadow: 0 8px 30px var(--red-glow-strong); }

/* Quote tabs heading inside nested-tabs panels */
.ndct-quote-heading { font-family: var(--font-display); font-size: clamp(24px, 2.5vw, 36px); font-weight: 700; text-transform: uppercase; color: var(--white); margin: 0 0 8px; line-height: 1.1; }
.ndct-quote-heading__accent { color: var(--red); }
.ndct-quote-sub { color: var(--gray-500); font-size: 14px; line-height: 1.6; margin: 0 0 24px; }

/* Quote nested-tabs styling — pill buttons matching v2 quote-tabs design */
#quote-forms .e-n-tabs-heading { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; align-items: center; margin-bottom: 32px; border: 0; }
#quote-forms .e-n-tab-title { background: var(--surface-raised) !important; color: var(--gray-500) !important; border: 1px solid var(--border) !important; border-radius: 4px !important; padding: 14px 22px !important; min-height: 54px !important; box-sizing: border-box !important; align-self: center !important; font-family: var(--font-condensed) !important; font-size: 13px !important; font-weight: 700 !important; letter-spacing: 1px !important; text-transform: uppercase !important; cursor: pointer; transition: background .25s var(--ease), color .25s var(--ease), border-color .25s var(--ease); transform: none !important; }
#quote-forms .e-n-tab-title:hover { color: var(--white) !important; border-color: var(--gray-500) !important; transform: none !important; }
#quote-forms .e-n-tab-title.e-active,
#quote-forms .e-n-tab-title[aria-selected="true"] { background: rgba(204, 0, 0, 0.1) !important; border-color: var(--red) !important; color: var(--white) !important; transform: none !important; }
#quote-forms .e-n-tabs-content { background: transparent; border: 0; }
#quote-forms .e-n-tabs-content .e-con { background: transparent; padding: 0; }
@media (max-width: 700px) { #quote-forms .e-n-tab-title { width: calc(50% - 5px) !important; } }

/* --- FAQ (all sections) --- */
[id^="ndct-"] .rfm-faq__item { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; margin-bottom: 10px; transition: border-color .3s; }
[id^="ndct-"] .rfm-faq__item:hover { border-color: var(--gray-700); }
[id^="ndct-"] .rfm-faq__question { padding: 18px 20px; font-family: var(--font-condensed); font-size: 16px; font-weight: 700; color: var(--white); cursor: pointer; }
[id^="ndct-"] .rfm-faq__icon { color: var(--red); }
[id^="ndct-"] .rfm-faq__icon svg { stroke: var(--red); }
[id^="ndct-"] .rfm-faq__answer,
[id^="ndct-"] .rfm-faq__answer p { color: var(--gray-500); font-size: 15px; line-height: 1.7; }

/* --- Final CTA --- */
#ndct-final-cta { background: var(--red); text-align: center; }
#ndct-final-cta h2,
#ndct-final-cta p { color: var(--white); }

/* --- Footer --- */
#ndct-footer { background: #111; border-top: 1px solid var(--border); }
#ndct-footer .rfm-fbrand__tagline { color: var(--gray-500); font-size: 14px; line-height: 1.7; }
#ndct-footer .rfm-finfo__title { color: var(--white); }
#ndct-footer .rfm-finfo__phone a { color: var(--gray-300); }
#ndct-footer .rfm-finfo__phone a:hover { color: var(--red); }
#ndct-footer .elementor-nav-menu--main > ul > li > .elementor-item { font-size: 14px; color: var(--gray-500); padding: 5px 0; position: relative; }
#ndct-footer .elementor-nav-menu--main > ul > li > .elementor-item::before { content: '-'; margin-right: 6px; color: var(--gray-700); }
#ndct-footer .elementor-nav-menu--main > ul > li > .elementor-item:hover { color: var(--red); }
#ndct-footer .rfm-social__link { width: 38px; height: 38px; border-radius: 50%; background: var(--surface); border: 1px solid var(--border); transition: all .3s; }
#ndct-footer .rfm-social__link:hover { background: var(--red); border-color: var(--red); transform: translateY(-3px); }
#ndct-footer .rfm-social__link svg { fill: var(--gray-500); }
#ndct-footer .rfm-social__link:hover svg { fill: var(--white); }
#ndct-footer .rfm-fbot { border-top: 1px solid var(--border); padding: 18px 0; color: var(--gray-700); font-size: 13px; }
#ndct-footer .rfm-fbot a { color: var(--gray-500); position: relative; margin-right: 16px; }
#ndct-footer .rfm-fbot a::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 0; height: 1px; background: var(--red); transition: width .3s; }
#ndct-footer .rfm-fbot a:hover { color: var(--red); }
#ndct-footer .rfm-fbot a:hover::after { width: 100%; }
/* Col 4 right-align (Contact + Follow Us) */
#ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child,
#ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child * { text-align: right; }
#ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child .rfm-social { justify-content: flex-end; }
#ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child .rfm-finfo__phone { justify-content: flex-end; }

/* --- Hover Elevation (global) --- */
.elementor-button { transition: all .3s var(--ease); }
.elementor-button:hover { transform: translateY(-2px); box-shadow: 0 8px 30px rgba(0,0,0,0.3); }
#ndct-header .elementor-button:hover { box-shadow: none; }

/* --- Reveal Animation (JS-gated so sections render if JS fails) --- */
.reveal { opacity: 1; transform: none; transition: opacity .7s var(--ease-out), transform .7s var(--ease-out); }
html.js-ready .reveal { opacity: 0; transform: translateY(28px); }
html.js-ready .reveal.visible { opacity: 1; transform: translateY(0); }

/* --- SWH legacy element hide ---
 * Trimmed 2026-04-28: float-cta + back-to-top were removed because NDCT v3
 * uses these IDs for the v2 floating widgets (mandatory site-wide chrome).
 * Hiding `.fp-modal`/`.lightbox` etc. by default is still desirable.
 * SwH styles for older `.rfm-get-started-btn` remain hidden. */
.fp-modal,
.rfm-float-cta,
.rfm-get-started-btn,
button.rfm-get-started-btn,
.lightbox { display: none !important; }

/* --- Responsive --- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }
}

/* Tablet + small desktop */
@media (max-width: 1024px) {
  #ndct-hero-visual { display: none; }
  #ndct-hero > .e-con-inner > .e-con:first-child { width: 100% !important; }
  #ndct-hero > .e-con-inner { flex-direction: column; }
}

/* Header: sticky logo stays small + nav collapses */
@media (max-width: 1024px) {
  #ndct-header .elementor-widget-image img { height: 44px; }
  #ndct-header .elementor-nav-menu--main > ul { gap: 14px; }
  #ndct-header .elementor-nav-menu--main > ul > li > .elementor-item { font-size: 12px; letter-spacing: 1px; }
  #ndct-header .rfm-phone { display: none; }
}

/* Mobile: hamburger nav, stacked sections */
@media (max-width: 768px) {
  :root { --pad: 64px; }
  #ndct-process .rfm-step__connector,
  [id^="ndct-"] .rfm-steps--horizontal::before { display: none; }
  #ndct-header .elementor-widget-image img { height: 40px; }
  #ndct-header > .e-con-inner { padding: 8px 16px; }
  /* Footer: stack columns to single column, center everything */
  #ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner { grid-template-columns: 1fr; gap: 32px; }
  #ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child,
  #ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child * { text-align: center; }
  #ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child .rfm-social,
  #ndct-footer > .e-con-inner > .e-con:first-child > .e-con-inner > .e-con:last-child .rfm-finfo__phone { justify-content: center; }
  #ndct-footer .rfm-fbot { flex-direction: column; gap: 8px; text-align: center; padding: 18px 16px; }
  /* Promo bar smaller */
  #ndct-promo-bar { font-size: 12px; letter-spacing: 1px; padding: 8px 12px; }
  /* Ensure sticky CTA doesn't cover last content */
  body { padding-bottom: 64px; }
}

@media (max-width: 480px) {
  :root { --pad: 48px; }
  #ndct-header .elementor-widget-image img { height: 36px; }
}

/* ==================================================
   Carbon-copy refinements (Apr 24 evening)
   ================================================== */

/* --- Floating widgets: back-to-top LEFT, sticky CTA RIGHT (global rule) --- */
.rfm-btt {
  left: 24px;
  right: auto !important;
}
.rfm-sticky-cta {
  right: 24px;
  left: auto !important;
}

/* --- Service cards: image hover scale (matches gallery) --- */
.rfm-cb__icon { overflow: hidden; }
.rfm-cb__icon img {
  transition: transform .55s var(--ease-out), filter .35s var(--ease-out);
  filter: brightness(.85);
}
.rfm-cb:hover .rfm-cb__icon img {
  filter: brightness(1);
}

/* --- About section: sticky scroll on left photo column --- */
@media (min-width: 1025px) {
  #ndct-about > .e-con-inner > .e-con:first-child {
    position: sticky;
    top: 120px;
    align-self: flex-start;
  }
  #ndct-dtf > .e-con-inner > .e-con:nth-child(2) {
    position: sticky;
    top: 120px;
    align-self: flex-start;
  }
}

/* --- Process: solid fill on hover so the connector line doesn't show through --- */
#ndct-process .rfm-step__circle,
.rfm-steps .rfm-step__circle {
  background-color: var(--surface-raised);
  position: relative;
  z-index: 2;
}
#ndct-process .rfm-step:hover .rfm-step__circle,
.rfm-steps .rfm-step:hover .rfm-step__circle {
  background-color: var(--red);
  border-color: var(--red);
  color: #fff;
}

/* --- Gallery social icons: white circles --- */
#ndct-gallery .rfm-social a,
#ndct-gallery .elementor-social-icon {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: #fff;
  color: var(--red);
  border: 2px solid #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: transform .25s var(--ease-out), background .25s var(--ease-out);
}
#ndct-gallery .rfm-social a:hover,
#ndct-gallery .elementor-social-icon:hover {
  transform: translateY(-3px);
  background: var(--red);
  color: #fff;
}
#ndct-gallery .rfm-social a svg,
#ndct-gallery .elementor-social-icon svg,
#ndct-gallery .rfm-social a i,
#ndct-gallery .elementor-social-icon i {
  fill: currentColor;
  color: inherit;
  width: 18px;
  height: 18px;
}

/* --- Footer link hover: lift + animated underline (global rule) --- */
#ndct-footer a,
#ndct-footer .elementor-nav-menu li a,
#ndct-footer .elementor-icon-list-item a,
#ndct-footer .rfm-finfo a {
  position: relative;
  display: inline-block;
  transition: transform .35s var(--ease-out), color .25s var(--ease-out);
  text-decoration: none;
  border-bottom: 0;
}
#ndct-footer a::after,
#ndct-footer .elementor-nav-menu li a::after,
#ndct-footer .elementor-icon-list-item a::after,
#ndct-footer .rfm-finfo a::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -2px;
  width: 0;
  height: 2px;
  background: var(--red);
  transition: width .35s var(--ease-out);
}
#ndct-footer a:hover,
#ndct-footer .elementor-nav-menu li a:hover,
#ndct-footer .elementor-icon-list-item a:hover,
#ndct-footer .rfm-finfo a:hover {
  transform: translateY(-3px);
  color: #fff;
}
#ndct-footer a:hover::after,
#ndct-footer .elementor-nav-menu li a:hover::after,
#ndct-footer .elementor-icon-list-item a:hover::after,
#ndct-footer .rfm-finfo a:hover::after { width: 100%; }
/* Footer brand image and the social icon row should NOT get the underline */
#ndct-footer .footer-brand img::after,
#ndct-footer .rfm-social a::after,
#ndct-footer .footer-cta::after { display: none; }
/* Remove decorative borders/lines on inner footer columns */
#ndct-footer .elementor-icon-list-items,
#ndct-footer .elementor-icon-list-item {
  border: 0;
}
#ndct-footer .elementor-icon-list-item:not(:last-child) {
  border-bottom: 0;
  margin-bottom: 4px;
}

/* --- Lead form trust badges: center the row --- */
.rfm-tb__badges,
.rfm-trust-bar .rfm-tb__badges,
#ndct-lead .rfm-tb__badges {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 24px;
}

/* --- Header nav dropdown (Services submenu) ---
 * Scoped to BOTH #ndct-header (v1 legacy) and #site-header (v2 current).
 * Includes a CSS bridge (::before pseudo) between trigger and panel so the
 * hover doesn't drop when the cursor crosses the gap. */
#ndct-header .elementor-nav-menu li.menu-item-has-children > a::after,
#site-header .elementor-nav-menu li.menu-item-has-children > a::after {
  content: " \25BE";
  font-size: 10px;
  margin-left: 4px;
  opacity: .7;
  display: inline-block;
}
#ndct-header .elementor-nav-menu li.menu-item-has-children,
#site-header .elementor-nav-menu li.menu-item-has-children {
  position: relative;
}
/* Hover bridge: invisible 14px strip below trigger so cursor can travel
   from item -> panel without crossing a no-hover gap. */
#ndct-header .elementor-nav-menu li.menu-item-has-children::before,
#site-header .elementor-nav-menu li.menu-item-has-children::before {
  content: '';
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  height: 14px;
  background: transparent;
  pointer-events: auto;
  display: none;
}
#ndct-header .elementor-nav-menu li.menu-item-has-children:hover::before,
#site-header .elementor-nav-menu li.menu-item-has-children:hover::before,
#ndct-header .elementor-nav-menu li.menu-item-has-children:focus-within::before,
#site-header .elementor-nav-menu li.menu-item-has-children:focus-within::before {
  display: block;
}
/* SmartMenus (Elementor's default) toggles inline `display: block` on the
   sub-menu UL when the parent is active. We let SmartMenus drive visibility
   via display, and only style the panel chrome here. We do NOT add an
   opacity/visibility gate because SmartMenus does not toggle those. */
#ndct-header .elementor-nav-menu .sub-menu,
#site-header .elementor-nav-menu .sub-menu {
  position: absolute;
  top: calc(100% + 14px);
  left: 0;
  min-width: 240px;
  background: rgba(255,255,255,0.98);
  backdrop-filter: blur(12px);
  border: 1px solid #e0e0e0;
  border-radius: 6px;
  box-shadow: 0 12px 40px rgba(0,0,0,0.18);
  padding: 8px 0;
  margin: 0;
  list-style: none;
  z-index: 1100;
}
/* Belt-and-suspenders: also reveal on pure CSS :hover/:focus-within in case
   SmartMenus fails to bind (e.g. JS error). Uses display so it stacks above
   SmartMenus's display:none default. */
#ndct-header .elementor-nav-menu li.menu-item-has-children:hover > .sub-menu,
#ndct-header .elementor-nav-menu li.menu-item-has-children:focus-within > .sub-menu,
#site-header .elementor-nav-menu li.menu-item-has-children:hover > .sub-menu,
#site-header .elementor-nav-menu li.menu-item-has-children:focus-within > .sub-menu {
  display: block;
}
#ndct-header .elementor-nav-menu .sub-menu li,
#site-header .elementor-nav-menu .sub-menu li {
  width: 100%;
  list-style: none;
}
#ndct-header .elementor-nav-menu .sub-menu li a,
#ndct-header .elementor-nav-menu .sub-menu li a.elementor-sub-item,
#site-header .elementor-nav-menu .sub-menu li a,
#site-header .elementor-nav-menu .sub-menu li a.elementor-sub-item {
  display: block;
  padding: 10px 18px;
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: #444 !important;
  transition: background .2s var(--ease-out), color .2s var(--ease-out);
}
#ndct-header .elementor-nav-menu .sub-menu li a:hover,
#site-header .elementor-nav-menu .sub-menu li a:hover {
  background: var(--red);
  color: #fff !important;
}
/* Submenu CURRENT-page styling. WP doesn't auto-add current-menu-item to
 * type-custom items with relative URLs, so main.js also adds .is-current
 * via JS pathname matching as a fallback. Cover both cases here. */
#ndct-header .elementor-nav-menu .sub-menu li.current-menu-item > a,
#ndct-header .elementor-nav-menu .sub-menu li.current_page_item > a,
#ndct-header .elementor-nav-menu .sub-menu li.is-current > a,
#site-header .elementor-nav-menu .sub-menu li.current-menu-item > a,
#site-header .elementor-nav-menu .sub-menu li.current_page_item > a,
#site-header .elementor-nav-menu .sub-menu li.is-current > a {
  background: var(--red);
  color: #fff !important;
}
/* External-link indicator — small diagonal-arrow icon AFTER any header
 * nav link that opens in a new tab. Catalog (sportswearcollection.com) is
 * the primary trigger; future external items get the same treatment for free.
 *
 * Specificity note: must beat the underline rule
 * `#site-header .elementor-nav-menu li a.elementor-item::after` (1,2,3).
 * We add `li` and `.elementor-item` to reach (1,3,3) and explicitly override
 * position/background/transform so the icon renders inline rather than as the
 * absolutely-positioned underline. Hover underline is provided below via
 * text-decoration on the anchor itself. */
#ndct-header .elementor-nav-menu li a[target="_blank"].elementor-item::after,
#site-header .elementor-nav-menu li a[target="_blank"].elementor-item::after,
#ndct-header .elementor-nav-menu li a[target="_blank"]::after,
#site-header .elementor-nav-menu li a[target="_blank"]::after {
  content: '';
  display: inline-block;
  position: static;
  width: 12px;
  height: 12px;
  margin-left: 6px;
  margin-right: 0;
  bottom: auto;
  left: auto;
  right: auto;
  background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 3h7v7"/><path d="M21 3l-9 9"/><path d="M5 5h6v2H7v10h10v-4h2v6H5z"/></svg>') no-repeat center;
  background-size: contain;
  background-color: transparent;
  vertical-align: middle;
  opacity: .85;
  transform: none;
}
/* Restore hover underline for external-link items (their ::after is the icon
 * now, so the scaleX underline can't be used; use text-decoration instead). */
#site-header .elementor-nav-menu li a[target="_blank"]:hover,
#site-header .elementor-nav-menu li a[target="_blank"]:focus,
#ndct-header .elementor-nav-menu li a[target="_blank"]:hover,
#ndct-header .elementor-nav-menu li a[target="_blank"]:focus {
  text-decoration: underline;
  text-decoration-color: var(--red);
  text-underline-offset: 6px;
  text-decoration-thickness: 2px;
}

/* --- Final CTA formatting (full-width red banner with centered content) --- */
#ndct-final-cta {
  text-align: center;
  padding: 80px 24px !important;
}
#ndct-final-cta h2,
#ndct-final-cta .rfm-sh__heading {
  color: #fff !important;
  font-family: var(--font-display);
  font-size: clamp(36px, 5vw, 60px) !important;
  font-weight: 700;
  text-transform: uppercase;
  margin: 0 auto 16px;
  max-width: 900px;
}
#ndct-final-cta .rfm-sh__desc,
#ndct-final-cta p {
  color: rgba(255,255,255,0.85);
  font-size: 18px;
  max-width: 540px;
  margin: 0 auto 28px;
}
#ndct-final-cta .elementor-button {
  border-radius: 3px;
}

/* --- Footer social icons (white circles, red on hover) --- */
#ndct-footer .rfm-social a,
#ndct-footer .elementor-social-icon,
.footer-socials a {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.18);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: transform .25s var(--ease-out), background .25s var(--ease-out), border-color .25s var(--ease-out);
}
#ndct-footer .rfm-social a:hover,
#ndct-footer .elementor-social-icon:hover,
.footer-socials a:hover {
  background: var(--red);
  border-color: var(--red);
  color: #fff;
  transform: translateY(-3px);
}
#ndct-footer .rfm-social a svg,
#ndct-footer .elementor-social-icon svg,
.footer-socials a svg {
  width: 16px;
  height: 16px;
  fill: currentColor;
}

/* --- Footer NDCTEES brand label above address --- */
#ndct-footer .ndct-fb-name {
  font-family: var(--font-display);
  font-size: 22px;
  font-weight: 700;
  color: #fff;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  display: block;
  margin-bottom: 6px;
}

/* ==============================================================
   v2 BEM-by-configuration styles (rfm-elements-v2 widgets)
   Extracted from ndctees-homepage.html mockup. These rules style
   the BEM roots that v2 widgets emit when component_name matches
   the mockup classnames.
   ============================================================== */

/* --- Promo bar --- */
/* Outer container is full-bleed red (Elementor content_width:full puts the
 * widget children directly inside #promo-bar with no .e-con-inner wrapper),
 * but the flex row of children must be boxed to the same width as
 * #site-header's inner row (~1200px) so the offer text + social icons line
 * up vertically with the logo + CTA below.
 * Trick: padding-inline calc keeps the red bg full-bleed while pushing the
 * flex children inward. Floor padding 24px so it never collapses below the
 * normal page gutter. */
#promo-bar.elementor-element,
#promo-bar {
  padding-inline: max(14px, calc((100% - 1220px) / 2)) !important;
  box-sizing: border-box;
}
/* Announcement bar widget (rfm_v2_announcement_bar, BEM root .promo-bar).
   Sits as the LEFT child of #promo-bar flex row. Right child is .promo-social.
   text-align:left so offer text starts at the left edge of its widget cell. */
.promo-bar { color: #fff; text-align: left; font-family: var(--font-condensed); font-size: 14px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; display: block; }
.promo-bar__text,
.promo-bar__sep,
.promo-bar__cta { display: inline; }
.promo-bar__sep { opacity: .85; }
/* Pair classes (.promo-bar .promo-bar__cta = 0,2,0) so this wins
   the cascade over .elementor-kit-5 a (0,2,0) on source-order tie-break. */
.promo-bar .promo-bar__cta { color: #fff; text-decoration: underline; text-underline-offset: 3px; display: inline-block; transition: transform .25s var(--ease); }
.promo-bar .promo-bar__cta:hover { color: #fff; transform: translateY(-2px); }

/* Promo bar SOCIAL icons (right-aligned, white-on-red). Circular tap targets
 * with svg filling currentColor. Pair selectors (.promo-social a) lift the
 * specificity to 0,2,0 so we tie .elementor-kit-5 a:hover (which sets red
 * color and would make icons invisible on the red bar). Source order: this
 * file loads after kit, so the tie resolves in our favour. */
.promo-social { display: inline-flex; align-items: center; gap: 10px; }
.promo-social a,
.promo-social a:link,
.promo-social a:visited {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  color: #fff;
  background: transparent;
  transition: background .25s var(--ease), transform .25s var(--ease);
}
.promo-social a:hover,
.promo-social a:focus { background: rgba(255,255,255,0.18); color: #fff; transform: translateY(-2px); }
.promo-social svg { width: 18px; height: 18px; fill: currentColor; }
.promo-social a:hover svg,
.promo-social a:focus svg { fill: #fff; color: #fff; }
/* Mobile: keep the bar visible but tighten spacing so it stays one row */
@media (max-width: 767px) {
  .promo-social { gap: 8px; }
  .promo-social a { width: 28px; height: 28px; }
  .promo-social svg { width: 16px; height: 16px; }
}

/* --- Header (theme builder template) --- */
#site-header { backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); }
#site-header .header-phone { font-family: var(--font-condensed); font-size: 15px; font-weight: 700; color: var(--black); letter-spacing: 1px; display: inline-flex; align-items: center; gap: 6px; }
#site-header .header-phone svg { width: 16px; height: 16px; fill: var(--red); }
#site-header .btn.btn-red { padding: 11px 22px; font-size: 13px; }

/* --- Buttons (used in rfm_v2_button via css_class)
 *  Specificity note: Elementor kit's `.elementor-kit-5 a` (0,2,0) beats a
 *  bare `.btn-red` (0,1,0). We pair classes (`.btn.btn-red` -> 0,2,0) so
 *  ndct-global.css (loaded after the kit) wins on source-order tie-break.
 */
.btn { display: inline-flex; align-items: center; gap: 8px; padding: 16px 32px; font-family: var(--font-condensed); font-size: 15px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; border: none; border-radius: 3px; cursor: pointer; transition: all .3s var(--ease); text-decoration: none; white-space: nowrap; }
.btn.btn-red { background: var(--red); color: var(--white); }
.btn.btn-red:hover { background: var(--red-bright); transform: translateY(-2px); box-shadow: 0 8px 30px var(--red-glow-strong); }
.btn.btn-outline { background: transparent; border: 2px solid var(--white); color: var(--white); padding: 14px 30px; }
.btn.btn-outline:hover { background: var(--white); color: var(--black); }
.btn.btn-ghost-red { background: transparent; border: 2px solid var(--red); color: var(--red); padding: 14px 30px; }
.btn.btn-ghost-red:hover { background: var(--red); color: var(--white); }
.btn.btn-dark { background: var(--black); color: var(--white); }
.btn.btn-dark:hover { background: var(--surface); transform: translateY(-2px); }
.btn.btn-outline-white { background: transparent; border: 2px solid var(--white); color: var(--white); padding: 14px 32px; }
.btn.btn-outline-white:hover { background: var(--white); color: var(--red); }

/* --- v2 section_header (component_name varies per section) --- */
.hero__heading,
.about-head__heading,
.dtf-head__heading,
.process-head__heading,
.gallery-head__heading,
.reviews-head__heading,
.lead-head__heading,
.faq-head__heading,
.services-head__heading,
.page-hero__heading {
  font-family: var(--font-display);
  font-size: clamp(32px, 4vw, 54px);
  font-weight: 700;
  line-height: 1;
  text-transform: uppercase;
  color: #fff;
}
.hero__heading { font-size: clamp(40px, 6vw, 80px); line-height: .95; }
.page-hero__heading { font-size: clamp(36px, 5vw, 64px); line-height: .98; }

/* Trust bar logos: per mockup line 126, image is a multi-row logo grid
   shown at its natural aspect ratio capped to max-width 900px. Do NOT
   cap max-height — the source asset is a 1325x1561 grid panel, capping
   height makes it a tiny thumbnail. */
#trust-bar img {
  display: block;
  margin: 0 auto;
  width: 100%;
  max-width: 900px;
  height: auto;
  opacity: .7;
  filter: grayscale(50%);
  transition: opacity .3s, filter .3s, transform .3s ease;
}
#trust-bar img:hover {
  opacity: 1;
  filter: grayscale(0%);
  transform: translateY(-2px);
}

/* Section heads that are CENTERED per mockup
   (services-head, process-head, reviews-head, faq-hero).
   gallery-head is LEFT-aligned per punch list 26-04-28 (mockup line 510).
   The remaining heads (hero, about-head, dtf-head, lead-head, faq-head)
   stay left-aligned because they're paired with a sibling column. */
.services-head,
.process-head,
.reviews-head,
.faq-hero {
  text-align: center;
}
.services-head__heading,
.services-head__desc,
.process-head__heading,
.process-head__desc,
.reviews-head__heading,
.reviews-head__desc,
.faq-hero__heading,
.faq-hero__desc {
  text-align: center;
}
.services-head .services-head__desc,
.process-head .process-head__desc,
.reviews-head .reviews-head__desc,
.faq-hero .faq-hero__desc {
  margin-left: auto;
  margin-right: auto;
}

/* Section header eyebrow - applies to every rfm_v2_section_header instance.
   Covers all component_name values used on the homepage + service pages.
   The leading "- " dash is rendered via the ::before pseudo (mockup line 64). */
.hero__eyebrow,
.services-head__eyebrow,
.about-head__eyebrow,
.dtf-head__eyebrow,
.process-head__eyebrow,
.gallery-head__eyebrow,
.reviews-head__eyebrow,
.lead-head__eyebrow,
.faq-head__eyebrow,
.faq-hero__eyebrow,
.page-hero__eyebrow,
.trust-label,
.tag {
  font-family: var(--font-condensed);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--red);
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
}
.hero__eyebrow::before,
.about-head__eyebrow::before,
.dtf-head__eyebrow::before,
.process-head__eyebrow::before,
.gallery-head__eyebrow::before,
.reviews-head__eyebrow::before,
.lead-head__eyebrow::before,
.faq-head__eyebrow::before,
.services-head__eyebrow::before,
.page-hero__eyebrow::before {
  content: '';
  width: 28px;
  height: 2px;
  background: var(--red);
}

/* Section-header accent — every component_name gets red automatically.
 * Replaces the per-component enumeration below so new sections don't need a
 * one-off CSS rule each time. Universal: any element ending in `__accent`. */
[class$="__accent"] {
  color: var(--red);
}

.hero__desc,
.about-head__desc,
.dtf-head__desc,
.process-head__desc,
.reviews-head__desc,
.lead-head__desc,
.faq-head__desc,
.services-head__desc,
.page-hero__desc {
  font-size: 17px;
  color: var(--gray-300);
  line-height: 1.75;
  max-width: 540px;
  margin-top: 14px;
}

/* --- v2 card_box (services grid): canonical .srv-card rules are defined below (duplicate block removed 2026-05-27 to fix duplicate-selector build error) --- */

/* --- v2 image_badge (about photo) --- */
.about-photo { position: relative; }
.about-photo img { width: 100%; border-radius: 6px; border: 0; }
.about-photo-badge { position: absolute; bottom: -20px; right: -20px; width: 130px; height: 130px; background: var(--red); border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-direction: column; box-shadow: 0 10px 40px var(--red-glow-strong); }
.about-photo-badge span:nth-child(1) { font-family: var(--font-display); font-size: 44px; font-weight: 700; color: #fff; line-height: 1; }
.about-photo-badge span:nth-child(2) { font-family: var(--font-condensed); font-size: 11px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: rgba(255,255,255,.8); }

/* --- v2 icon_checklist --- */
.about-checks { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 28px 0 32px; list-style: none; padding: 0; }
.about-checks > * { display: flex; align-items: center; gap: 10px; font-family: var(--font-condensed); font-size: 15px; font-weight: 600; color: var(--gray-100); }
.about-checks svg { width: 16px; height: 16px; color: var(--red); flex-shrink: 0; }

.dtf-list, .lead-perks, .pi-list, .addons-list, .sp-checks, .why-checks, .mat-checks, .rush-can-list, .sv-feat-list, .bn-feat-list, .km-feat-list, .pp-feat-list, .pap-feat-list, .emb-items-list { list-style: none; padding: 0; margin: 0 0 32px; }
.dtf-list li, .lead-perks li, .pi-list li, .addons-list li, .sp-checks li, .why-checks li, .mat-checks li, .rush-can-list li, .sv-feat-list li, .bn-feat-list li, .km-feat-list li, .pp-feat-list li, .pap-feat-list li, .emb-items-list li {
  font-size: 15px; color: var(--gray-100); padding: 10px 0; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 10px;
}
.dtf-list svg, .lead-perks svg, .pi-list svg, .addons-list svg, .sp-checks svg, .why-checks svg, .mat-checks svg, .rush-can-list svg, .sv-feat-list svg, .bn-feat-list svg, .km-feat-list svg, .pp-feat-list svg, .pap-feat-list svg, .emb-items-list svg {
  width: 16px; height: 16px; color: var(--red); flex-shrink: 0;
}

/* --- v2 price_callout --- */
.dtf-price, .sp-price, .emb-price, .rush-price {
  display: inline-flex; flex-direction: column; align-items: flex-start;
  background: var(--surface); border: 2px solid var(--red); border-radius: 6px;
  padding: 24px; margin: 20px 0;
}
.dtf-price__number, .sp-price__number, .emb-price__number, .rush-price__number {
  font-family: var(--font-display); font-size: 64px; font-weight: 700; color: var(--red); line-height: 1;
}
.dtf-price__sub, .sp-price__sub, .emb-price__sub, .rush-price__sub {
  font-size: 18px; color: var(--gray-300); margin-left: 8px;
}
.dtf-price__tagline, .sp-price__tagline, .emb-price__tagline, .rush-price__tagline {
  font-size: 14px; color: var(--gray-500); margin-top: 8px; line-height: 1.4;
}
.dtf-price__stats, .sp-price__stats, .emb-price__stats, .rush-price__stats {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-top: 24px;
}
.dtf-price__stat-value, .sp-price__stat-value, .emb-price__stat-value, .rush-price__stat-value {
  font-family: var(--font-display); font-size: 28px; font-weight: 700; color: var(--red);
}
.dtf-price__stat-label, .sp-price__stat-label, .emb-price__stat-label, .rush-price__stat-label {
  font-family: var(--font-condensed); font-size: 12px; font-weight: 600; color: var(--gray-500); text-transform: uppercase; letter-spacing: 1px; margin-top: 4px;
}

/* --- v2 step_process (.process / .step BEM) --- */
.process__steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px; position: relative; }
.process__steps::before { content: ''; position: absolute; top: 44px; left: 12.5%; right: 12.5%; height: 2px; background: linear-gradient(90deg, var(--border), var(--red), var(--border)); }
.step { text-align: center; position: relative; }
.step__number { width: 88px; height: 88px; border-radius: 50%; background: var(--surface-raised); border: 2px solid var(--border); display: flex; align-items: center; justify-content: center; margin: 0 auto 20px; font-family: var(--font-display); font-size: 32px; font-weight: 700; color: var(--red); position: relative; z-index: 1; transition: all .4s var(--ease); }
.step:hover .step__number { border-color: var(--red); background: var(--red-glow); transform: translateY(-4px); }
.step__content h4 { font-family: var(--font-display); font-size: 20px; font-weight: 600; text-transform: uppercase; margin-bottom: 8px; color: #fff; }
.step__content p { font-size: 14px; color: var(--gray-500); line-height: 1.65; }
@media (max-width: 768px) {
  .process__steps { grid-template-columns: repeat(2, 1fr); }
  .process__steps::before { display: none; }
}

/* --- v2 gallery_grid: rules consolidated below at line ~1277 (Gallery masonry) --- */

/* --- v2 testimonial_carousel (.reviews / .testimonial-card) --- */
.reviews__carousel { width: 100%; overflow: hidden; }
.reviews__track { display: flex; transition: transform .5s var(--ease); }
.reviews__slide { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; min-width: 100%; padding: 0 4px; }
.testimonial-card { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 32px; transition: all .3s var(--ease); }
.testimonial-card:hover { border-color: var(--red); transform: translateY(-2px); }
.testimonial-card__quote { font-family: var(--font-display); font-size: 48px; color: var(--red); line-height: .8; margin-bottom: 8px; }
.testimonial-card__stars { color: var(--red); font-size: 16px; letter-spacing: 2px; margin-bottom: 14px; }
.testimonial-card__text { font-size: 15px; color: var(--gray-300); line-height: 1.7; margin-bottom: 20px; font-style: italic; }
.testimonial-card__author { display: flex; align-items: center; gap: 12px; }
.testimonial-card__avatar { width: 42px; height: 42px; border-radius: 50%; background: var(--surface); border: 2px solid var(--red); display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 18px; color: var(--red); }
.testimonial-card__name { font-family: var(--font-condensed); font-size: 15px; font-weight: 700; color: #fff; display: block; }
.testimonial-card__location { font-size: 13px; color: var(--gray-500); display: block; }
.reviews__nav { display: flex; align-items: center; justify-content: center; gap: 16px; margin-top: 32px; }
.reviews__arrow { width: 40px; height: 40px; border-radius: 50%; background: transparent; border: 1px solid var(--border); color: #fff; cursor: pointer; transition: all .3s; display: flex; align-items: center; justify-content: center; }
.reviews__arrow:hover { background: var(--red); border-color: var(--red); }
.reviews__dots { display: flex; gap: 8px; }
.reviews__dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,.3); transition: all .3s; cursor: pointer; }
.reviews__dot.active { background: var(--red); width: 24px; border-radius: 4px; }
@media (max-width: 1024px) { .reviews__slide { grid-template-columns: 1fr; } }

/* --- v2 faq_accordion (.faq-wrap BEM) --- */
.faq-wrap { display: flex; flex-direction: column; gap: 10px; }
.faq-wrap .faq-item { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; transition: border-color .3s; }
.faq-wrap .faq-item:hover { border-color: var(--gray-700); }
.faq-wrap .faq-btn { width: 100%; padding: 18px 20px; background: transparent; border: 0; font-family: var(--font-condensed); font-size: 16px; font-weight: 700; color: #fff; cursor: pointer; display: flex; align-items: center; justify-content: space-between; text-align: left; }
.faq-wrap .faq-chevron { width: 20px; height: 20px; color: var(--red); transition: transform .3s; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.faq-wrap .faq-item.open .faq-chevron { transform: rotate(180deg); }
.faq-wrap .faq-answer { max-height: 0; overflow: hidden; transition: max-height .4s var(--ease); }
.faq-wrap .faq-item.open .faq-answer { max-height: 400px; }
.faq-wrap .faq-answer-inner { padding: 0 20px 18px; font-size: 15px; color: var(--gray-500); line-height: 1.7; }

/* --- v2 cta_banner (.cta-final BEM, paired with rfm_v2_button siblings) --- */
.cta-final__content { text-align: center; }
.cta-final__content h2 { font-family: var(--font-display); font-size: clamp(36px, 5vw, 60px); font-weight: 700; text-transform: uppercase; color: #fff; margin-bottom: 14px; }
.cta-final__content p { font-size: 18px; color: rgba(255,255,255,.8); max-width: 540px; margin: 0 auto 28px; }

/* --- v2 compare_table --- */
.compare-table { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
.compare-table__head, .compare-table__row { display: grid; grid-template-columns: 1.2fr 1fr 1fr; }
.compare-table__head { background: var(--surface-raised); border-bottom: 2px solid var(--red); }
.compare-table__head-cell { padding: 18px 20px; font-family: var(--font-condensed); font-size: 14px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #fff; }
.compare-table__row:nth-child(even) { background: rgba(255,255,255,.02); }
.compare-table__criterion { padding: 16px 20px; font-family: var(--font-condensed); font-size: 14px; font-weight: 600; color: var(--gray-300); text-transform: uppercase; letter-spacing: 1px; }
.compare-table__cell { padding: 16px 20px; font-size: 15px; color: var(--gray-100); }
.compare-table__row + .compare-table__row { border-top: 1px solid var(--border); }

/* --- v2 nap_card --- */
.nap-card, .footer-nap, .contact-nap { display: flex; flex-direction: column; gap: 14px; }
.nap-card__name, .footer-nap__name, .contact-nap__name { font-family: var(--font-display); font-size: 22px; font-weight: 600; color: #fff; text-transform: uppercase; }
.nap-card__row, .footer-nap__row, .contact-nap__row { display: flex; gap: 12px; align-items: flex-start; font-size: 14px; color: var(--gray-300); }
.nap-card__icon, .footer-nap__icon, .contact-nap__icon { color: var(--red); flex-shrink: 0; margin-top: 2px; }
.nap-card__icon svg, .footer-nap__icon svg, .contact-nap__icon svg { width: 16px; height: 16px; }
.nap-card__text a, .footer-nap__text a, .contact-nap__text a { color: var(--gray-300); }
.nap-card__text a:hover, .footer-nap__text a:hover, .contact-nap__text a:hover { color: var(--red); }
.nap-card__cta { margin-top: 12px; }

/* --- v2 hours_table --- */
.hours-table, .contact-hours { display: flex; flex-direction: column; gap: 4px; }
.hours-table__row, .contact-hours__row { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid var(--border); font-size: 14px; }
.hours-table__day, .contact-hours__day { color: var(--gray-300); font-family: var(--font-condensed); text-transform: uppercase; font-weight: 600; letter-spacing: 1px; }
.hours-table__time, .contact-hours__time { color: #fff; }
.hours-table__row--closed .hours-table__time, .contact-hours__row--closed .contact-hours__time { color: var(--gray-500); font-style: italic; }
.hours-table__footnote, .contact-hours__footnote { font-size: 12px; color: var(--gray-500); margin-top: 12px; font-style: italic; }

/* --- v2 pricing_card --- */
/* (deleted duplicate .pricing-card block — see canonical block below) */

/* --- v2 social_proof_badges (footer-spb / reviews-spb) --- */
.footer-spb, .reviews-spb { display: flex; flex-wrap: wrap; gap: 14px; }
.footer-spb__item, .reviews-spb__item { display: flex; align-items: center; gap: 10px; padding: 10px 14px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; }
.footer-spb__icon, .reviews-spb__icon { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; }
.footer-spb__name, .reviews-spb__name { font-family: var(--font-condensed); font-size: 12px; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 1px; }
.footer-spb__score, .reviews-spb__score { font-size: 11px; color: var(--gray-500); }

/* --- v2 floating widgets (back-to-top, float-cta, mobile-cta) --- */
.back-to-top { position: fixed; bottom: 22px; left: 22px; width: 44px; height: 44px; border-radius: 50%; background: var(--red); border: none; display: flex; align-items: center; justify-content: center; color: #fff; cursor: pointer; opacity: 0; visibility: hidden; transform: translateY(10px); transition: all .3s var(--ease); z-index: 9998; }
.back-to-top.visible { opacity: 1; visibility: visible; transform: translateY(0); }
.back-to-top__ring { position: absolute; inset: 0; }
.float-cta { position: fixed; bottom: 22px; right: 22px; opacity: 0; visibility: hidden; transform: translateY(10px); transition: all .3s var(--ease); z-index: 9998; }
.float-cta.visible { opacity: 1; visibility: visible; transform: translateY(0); }
.float-cta__btn { display: inline-block; background: var(--red); color: #fff; padding: 14px 22px; border-radius: 999px; font-family: var(--font-condensed); font-size: 14px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; text-decoration: none; box-shadow: 0 8px 24px var(--red-glow-strong); }
.float-cta__btn:hover { background: var(--red-bright); }
.mobile-cta { display: none; position: fixed; bottom: 0; left: 0; right: 0; z-index: 9998; background: var(--black); border-top: 1px solid var(--border); }
.mobile-cta__call, .mobile-cta__estimate { display: flex; align-items: center; justify-content: center; gap: 8px; flex: 1; padding: 14px 12px; font-family: var(--font-condensed); font-weight: 700; letter-spacing: 1px; text-transform: uppercase; font-size: 14px; text-decoration: none; }
.mobile-cta__call { color: #fff; background: var(--surface); }
.mobile-cta__estimate { color: #fff; background: var(--red); }
.mobile-cta__call svg, .mobile-cta__estimate svg { width: 16px; height: 16px; }
@media (max-width: 768px) {
  .float-cta { display: none; }
  .mobile-cta { display: flex; }
}

/* --- Hero text-only sub-elements that remain in rfm_v2_html (mockup verbatim) --- */
.hero-stats { display: flex; gap: 40px; padding-top: 32px; border-top: 1px solid var(--border); }
.hero-stats > div { display: flex; flex-direction: column; }
.stat-num { font-family: var(--font-display); font-size: 44px; font-weight: 700; color: var(--red); line-height: 1; }
.stat-label { font-family: var(--font-condensed); font-size: 13px; font-weight: 600; color: var(--gray-500); text-transform: uppercase; letter-spacing: 1px; margin-top: 4px; }
/* --- Hero slideshow widget (rfm_v2_hero_slideshow, BEM root: .hero-visual) ---
   Track must have an explicit width so slides can resolve flex-basis: 100%.
   Without it, `min-width: 100%` on slides becomes circular (slide depends on
   track width, track sized by content) and slides resolve to natural image
   widths (~1440/1280px) instead of carousel column width. */
.hero-visual { position: relative; border-radius: 8px; overflow: hidden; border: 1px solid var(--border); aspect-ratio: 4/5; height: 100%; width: 100%; }
.hero-visual__track { display: flex; height: 100%; width: 100%; transition: transform .6s cubic-bezier(.4,0,.2,1); }
.hero-visual__slide { flex: 0 0 100%; max-width: 100%; height: 100%; position: relative; overflow: hidden; }
.hero-visual__image { width: 100%; height: 100%; object-fit: cover; display: block; }
.hero-visual__label { position: absolute; bottom: 0; left: 0; right: 0; padding: 16px 20px; background: linear-gradient(to top, rgba(0,0,0,.85) 0%, transparent 100%); font-family: var(--font-condensed); font-size: 14px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: #fff; }
.hero-visual__dots { position: absolute; bottom: 24px; left: 50%; transform: translateX(-50%); display: flex; gap: 8px; z-index: 3; }
.hero-visual__dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,.35); border: none; cursor: pointer; transition: all .3s ease; padding: 0; }
.hero-visual__dot.is-active { background: var(--red); width: 24px; border-radius: 4px; }
.hero-visual__badge { position: absolute; top: 16px; left: 16px; background: var(--red); color: #fff; padding: 10px 16px; border-radius: 4px; font-family: var(--font-condensed); font-size: 12px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; z-index: 3; }

/* Mockup line 276: hide hero carousel at tablet/mobile (text-only hero). */
@media (max-width: 1024px) {
  .hero-visual { display: none !important; }
}
.about-quote { font-family: var(--font-display); font-size: 22px; color: var(--red); margin: 24px 0; padding-left: 20px; border-left: 3px solid var(--red); line-height: 1.3; text-transform: uppercase; }
.about-text { font-size: 16px; color: var(--gray-300); line-height: 1.8; margin-bottom: 14px; }

/* --- Footer (theme builder template) --- */
/* Brand col logo: cap at 48px height per mockup line 619.
   Without this constraint the natural 1920px image expands to col height. */
#footer-logo img { height: 48px; width: auto; max-width: none; display: block; }
#site-footer .footer-brand__copy { font-size: 14px; color: var(--gray-500); line-height: 1.7; }
#site-footer .footer-social { display: flex; gap: 10px; margin-top: 16px; }
#site-footer .footer-social a { width: 38px; height: 38px; border-radius: 50%; background: var(--surface); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; font-family: var(--font-condensed); font-size: 12px; font-weight: 700; color: var(--gray-500); transition: transform .3s, background .3s, color .3s, border-color .3s; text-decoration: none; }
#site-footer .footer-social a:hover { background: var(--red); color: #fff; border-color: var(--red); transform: translateY(-2px); }
#site-footer .footer-col__heading { font-family: var(--font-display); font-size: 18px; font-weight: 600; text-transform: uppercase; color: #fff; margin-bottom: 16px; }

/* Footer nav menu links: gray default, red on hover with subtle lift.
   Pair classes (#site-footer .elementor-nav-menu) for specificity beating
   .elementor-kit-5 a (0,2,0). */
#site-footer .elementor-nav-menu li a,
#site-footer .elementor-nav-menu li a.elementor-item { color: var(--gray-500) !important; font-family: var(--font-body); font-size: 14px; font-weight: 400; letter-spacing: 0; text-transform: none; padding: 5px 0; transition: color .3s, transform .3s; display: inline-block; }
#site-footer .elementor-nav-menu li a:hover,
#site-footer .elementor-nav-menu li a.elementor-item-active { color: var(--red) !important; transform: translateY(-2px); }

#footer-bottom-inner { font-size: 13px; color: var(--gray-700); }


/* Header nav: dark text on white sticky bar, tight padding so 8 items fit
   one row at 1440. Mockup gap is 28px; with 8 items we shrink to ~14px. */
#site-header .elementor-nav-menu li a,
#site-header .elementor-nav-menu li a.elementor-item { color: #444 !important; font-family: var(--font-condensed); font-size: 14px; font-weight: 600; letter-spacing: 2px; text-transform: uppercase; transition: color .3s ease; padding: 14px 14px; }
#site-header .elementor-nav-menu li a:hover,
#site-header .elementor-nav-menu li a:focus,
#site-header .elementor-nav-menu li a.elementor-item-active { color: var(--red) !important; }
#site-header .elementor-nav-menu { flex-wrap: nowrap; }

/* Mobile header (<=1024px):
 *   Single row, logo left, hamburger right. Phone + CTA hidden (handled
 *   by sticky bottom bar). The Elementor nav widget renders both a burger
 *   toggle AND a hidden <nav> subtree that takes vertical space; we force
 *   the subtree to absolute-positioned dropdown so only the toggle counts
 *   toward the header height.
 */
@media (max-width: 1024px) {
  #header-inner > .e-con-inner {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 16px !important;
  }
  #header-logo-col,
  #header-nav-col {
    width: auto !important;
    flex: 0 0 auto !important;
    height: auto !important;
  }
  #header-cta-col { display: none !important; }
  #header-logo img { height: 40px !important; }

  /* Nav widget: only the burger toggle contributes to header height.
     Push the dropdown <nav> off the layout flow so it renders below
     the header bar when toggled, not inside it. */
  #header-nav-col .elementor-widget-nav-menu {
    display: flex !important;
    align-items: center !important;
    line-height: 1 !important;
    height: 40px !important;
  }
  #header-nav-col .elementor-menu-toggle {
    position: relative;
    z-index: 2;
    color: var(--black) !important;
    line-height: 1 !important;
  }
  /* Hide the desktop --main nav on mobile (Elementor renders both --main
   * and --dropdown in DOM; mobile drawer logic targets --dropdown). */
  #header-nav-col .elementor-nav-menu--main { display: none !important; }
}
/* Logo aspect: NDCT round logo is wider, constrain to 52px height (kept;
   .header-phone + .header-cta rules already exist higher up under "Header"). */
#header-logo img, .header-logo img { height: 52px; width: auto; max-width: none; }

/* Quote page: 2-col grid (info LEFT, form RIGHT) at desktop */
@media (min-width: 1025px) {
  #quote-form > .e-con-inner { flex-wrap: nowrap; align-items: flex-start; }
  #quote-form-info, #quote-form-form { flex: 1 1 50%; min-width: 0; }
}

/* ============================================================== */
/* NDCT v2 punch-list fixes (deviation report 2026-04-25)            */
/* ============================================================== */

/* --- Service-page hero stat strip glued to bottom of left text col --- */
.hero-stats__grid, .trust-strip__grid { display: flex; gap: 28px; padding-top: 24px; margin-top: 8px; border-top: 1px solid var(--border); flex-wrap: wrap; }
.hero-stats__stat, .trust-strip__stat { display: flex; flex-direction: column; gap: 4px; }
.hero-stats__number, .trust-strip__number { font-family: var(--font-display); font-size: 44px; font-weight: 700; color: var(--red); line-height: 1; }
.hero-stats__label, .trust-strip__label { font-family: var(--font-condensed); font-size: 13px; font-weight: 600; color: var(--gray-500); text-transform: uppercase; letter-spacing: 1px; line-height: 1.3; max-width: 130px; }

/* --- Services index 3-col grid + numbered cards --- */
.srv-card { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; transition: all .4s var(--ease); display: flex; flex-direction: column; height: 100%; }
.srv-card:hover { border-color: var(--red); transform: translateY(-6px); box-shadow: 0 20px 60px rgba(0, 0, 0, .5); }
.srv-card__icon { width: 100%; aspect-ratio: 3/2; overflow: hidden; }
.srv-card__icon img { width: 100%; height: 100%; object-fit: cover; filter: brightness(.85); transition: filter .4s; }
.srv-card:hover .srv-card__icon img { filter: brightness(1); }
.srv-card__title { font-family: var(--font-display); font-size: 24px; font-weight: 600; text-transform: uppercase; margin: 0 24px; padding-top: 28px; line-height: 1.1; }
.srv-card__title .srv-num { display: block; font-family: var(--font-display); font-size: 48px; font-weight: 700; color: var(--surface-hover); line-height: 1; margin-bottom: 8px; transition: color .3s; }
.srv-card:hover .srv-card__title .srv-num { color: var(--red); opacity: .35; }
.srv-card__desc { padding: 12px 24px 16px; font-size: 15px; color: var(--gray-300); line-height: 1.7; flex: 1; }
.srv-card__link { padding: 0 24px 28px; font-family: var(--font-condensed); font-size: 13px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--red); display: inline-flex; align-items: center; gap: 6px; transition: gap .3s; }
.srv-card__link:hover { gap: 12px; }

/* --- Feature row: image + 8-item checklist --- */
.feature-checklist { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.feature-checklist li { display: flex; align-items: flex-start; gap: 10px; padding: 8px 0; font-size: 15px; color: var(--gray-100); }
.feature-checklist li svg { color: var(--red); flex-shrink: 0; width: 18px; height: 18px; margin-top: 4px; }

/* --- Pricing tier card row (badge + featured) --- */
.pricing-card { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 8px; padding: 36px 28px; text-align: center; transition: all .4s var(--ease); position: relative; height: 100%; display: flex; flex-direction: column; }
.pricing-card:hover { border-color: var(--red); transform: translateY(-4px); box-shadow: 0 16px 50px rgba(0, 0, 0, .4); }
.pricing-card--featured { border-color: var(--red); }
.pricing-card--featured::after { content: 'MOST POPULAR'; position: absolute; top: 0; left: 50%; transform: translateX(-50%) translateY(-50%); background: var(--red); color: var(--white); font-family: var(--font-condensed); font-size: 11px; font-weight: 700; letter-spacing: 2px; padding: 6px 16px; border-radius: 3px; white-space: nowrap; z-index: 2; }
.pricing-card__badge { display: none; }
.pricing-card__tier { font-family: var(--font-display); font-size: 20px; font-weight: 600; text-transform: uppercase; color: var(--white); margin-bottom: 4px; }
.pricing-card__desc { font-size: 13px; color: var(--gray-500); margin-bottom: 20px; }
.pricing-card__price-row { display: block; margin-bottom: 24px; }
.pricing-card__price { font-family: var(--font-display); font-size: 48px; font-weight: 700; color: var(--red); line-height: 1; display: block; margin-bottom: 4px; }
.pricing-card__period { font-family: var(--font-condensed); font-size: 13px; color: var(--gray-500); letter-spacing: 1px; text-transform: uppercase; display: block; }
.pricing-card__features { list-style: none; padding: 0; margin: 0 0 24px; flex: 1; text-align: left; }
.pricing-card__features li { padding: 9px 0; border-bottom: 1px solid var(--border); font-size: 14px; color: var(--gray-100); display: flex; align-items: center; gap: 10px; text-align: left; }
.pricing-card__features li::before { content: '✓'; color: var(--red); font-weight: 700; flex-shrink: 0; }
.pricing-card__cta { display: inline-flex; justify-content: center; width: 100%; }

/* --- Fresh-gallery 4-image row --- */
.fresh-gallery__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.fresh-gallery__item { aspect-ratio: 1; border-radius: 4px; overflow: hidden; border: 1px solid var(--border); transition: all .4s var(--ease); position: relative; }
.fresh-gallery__item img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.fresh-gallery__item:hover { border-color: var(--red); transform: translateY(-3px); }
.fresh-gallery__item:hover img { transform: translateY(-2px); }
@media (max-width: 1024px) { .fresh-gallery__grid { grid-template-columns: repeat(2, 1fr); } }

/* --- Cross-sell 3-card row --- */
.cross-card { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; transition: all .4s var(--ease); display: flex; flex-direction: column; height: 100%; }
.cross-card:hover { border-color: var(--red); transform: translateY(-4px); box-shadow: 0 16px 50px rgba(0, 0, 0, .4); }
.cross-card__icon { width: 100%; aspect-ratio: 16/9; overflow: hidden; }
.cross-card__icon img { width: 100%; height: 100%; object-fit: cover; filter: brightness(.85); transition: filter .4s; }
.cross-card:hover .cross-card__icon img { filter: brightness(1); }
.cross-card__title { font-family: var(--font-display); font-size: 20px; font-weight: 600; text-transform: uppercase; margin: 22px 20px 8px; }
.cross-card__desc { font-size: 14px; color: var(--gray-300); line-height: 1.6; margin: 0 20px 14px; flex: 1; }
.cross-card__link { font-family: var(--font-condensed); font-size: 13px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--red); display: inline-flex; align-items: center; gap: 6px; padding: 0 20px 22px; transition: gap .3s; }
.cross-card__link:hover { gap: 12px; }

/* --- Gallery filter bar (rfm_v2_html chrome) --- */
.filter-bar { padding: 20px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.filter-row { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }
.filter-pill { padding: 9px 18px; background: var(--surface-raised); border: 1px solid var(--border); border-radius: 30px; font-family: var(--font-condensed); font-size: 13px; font-weight: 700; letter-spacing: 1px; color: var(--gray-300); text-transform: uppercase; cursor: pointer; transition: all .3s var(--ease); }
.filter-pill:hover { background: #990000; border-color: #990000; color: #fff; }
.filter-pill.active { background: var(--red); border-color: var(--red); color: #fff; }

/* --- Gallery masonry (24-image grid via gallery-grid widget) ---
 * Items are 1:1 squares; gap matches the section rhythm. We NO LONGER set
 * grid-auto-rows so each row sizes to the (consistent) item aspect-ratio,
 * preventing the 3px row-mismatch that read as "overlap". */
#gallery-grid-section .gallery__grid,
.gallery__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; align-items: stretch; }
#gallery-grid-section .gallery__item,
.gallery__item { aspect-ratio: 1 / 1; border-radius: 6px; overflow: hidden; border: 1px solid var(--border); position: relative; transition: all .4s var(--ease); cursor: pointer; }
.gallery__item.is-hidden { display: none; }
.gallery__item img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); display: block; }
.gallery__item:hover { border-color: var(--red); transform: translateY(-3px); }
.gallery__item:hover img { transform: translateY(-2px); }
.gallery__item-overlay { position: absolute; inset: 0; background: linear-gradient(to top, rgba(0, 0, 0, .85) 0%, transparent 60%); opacity: 0; transition: opacity .3s; display: flex; align-items: flex-end; padding: 14px 16px; }
.gallery__item:hover .gallery__item-overlay { opacity: 1; }
.gallery__item-type { font-family: var(--font-condensed); font-size: 13px; font-weight: 700; letter-spacing: 1px; color: #fff; text-transform: uppercase; }
/* Spacing after the masonry grid before the next section. Elementor's
 * outer .e-con padding gets stripped on this widget; force the inner
 * pad-bottom on the gallery-grid section itself. */
#gallery-grid-section > .e-con-inner { padding-bottom: 160px; }
@media (max-width: 1024px) { .gallery__grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 768px)  { .gallery__grid { grid-template-columns: repeat(2, 1fr); } }

/* --- Gallery social row --- */
.social-row { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.social-link { display: inline-flex; align-items: center; gap: 10px; padding: 14px 24px; background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; font-family: var(--font-condensed); font-size: 14px; font-weight: 700; color: #fff; letter-spacing: 1px; text-transform: uppercase; transition: all .3s var(--ease); text-decoration: none; }
.social-link:hover { border-color: var(--red); transform: translateY(-2px); color: #fff; }
.social-link .ico { width: 32px; height: 32px; border-radius: 50%; background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; }

/* --- Reviews aggregate stats row + 12-card grid + platform cards --- */
.reviews-aggregate__grid { display: flex; gap: 28px; justify-content: center; flex-wrap: wrap; padding: 24px 0; }
.reviews-aggregate__stat { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 22px 32px; text-align: center; min-width: 200px; }
.reviews-aggregate__number { font-family: var(--font-display); font-size: 44px; font-weight: 700; color: var(--red); line-height: 1; }
.reviews-aggregate__label { font-family: var(--font-condensed); font-size: 12px; font-weight: 600; color: var(--gray-300); text-transform: uppercase; letter-spacing: 1px; margin-top: 8px; }

.reviews__carousel { width: 100%; }
.reviews__track { display: flex; }
.reviews__slide { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; width: 100%; }
.reviews__nav { display: none; }
@media (max-width: 1024px) { .reviews__slide { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 768px)  { .reviews__slide { grid-template-columns: 1fr; } }

.testimonial-card { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 28px; transition: all .3s var(--ease); }
.testimonial-card:hover { border-color: var(--red); transform: translateY(-3px); }
.testimonial-card__quote { color: var(--red); font-family: var(--font-display); font-size: 36px; line-height: 1; margin-bottom: 12px; }
.testimonial-card__stars { color: var(--red); font-size: 16px; letter-spacing: 2px; margin-bottom: 12px; }
.testimonial-card__text { font-size: 15px; color: var(--gray-300); line-height: 1.7; margin-bottom: 18px; font-style: italic; }
.testimonial-card__author { display: flex; align-items: center; gap: 12px; }
.testimonial-card__avatar { width: 42px; height: 42px; border-radius: 50%; background: var(--surface); border: 2px solid var(--red); display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 18px; color: var(--red); flex-shrink: 0; }
.testimonial-card__name { font-family: var(--font-condensed); font-size: 14px; font-weight: 700; color: #fff; display: block; }
.testimonial-card__location { font-size: 12px; color: var(--gray-500); }

.p-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
.p-card { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 28px; text-align: center; transition: all .3s var(--ease); }
.p-card:hover { border-color: var(--red); transform: translateY(-4px); }
.p-icon { width: 56px; height: 56px; border-radius: 50%; background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 22px; font-weight: 700; margin: 0 auto 14px; }
.p-card h3 { font-family: var(--font-display); font-size: 20px; font-weight: 700; text-transform: uppercase; margin-bottom: 6px; }
.p-card p { font-size: 13px; color: var(--gray-300); margin-bottom: 16px; }
.p-link { font-family: var(--font-condensed); font-size: 13px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--red); display: inline-flex; align-items: center; gap: 4px; transition: gap .3s; }
.p-link:hover { gap: 10px; }
@media (max-width: 1024px) { .p-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 768px)  { .p-grid { grid-template-columns: 1fr; } }

/* --- Pricing table (a-la-carte starting prices) --- */
.price-table { width: 100%; border-collapse: collapse; background: var(--surface-raised); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
.price-table th, .price-table td { padding: 16px 22px; text-align: left; border-bottom: 1px solid var(--border); font-size: 14px; }
.price-table thead th { background: var(--surface); color: #fff; font-family: var(--font-condensed); text-transform: uppercase; letter-spacing: 1px; font-weight: 700; }
.price-table tbody tr:last-child td { border-bottom: 0; }
.price-table tbody td { color: var(--gray-300); }
.price-table .price-num { color: var(--red); font-family: var(--font-display); font-size: 18px; font-weight: 700; white-space: nowrap; }
@media (max-width: 768px) { .price-table th, .price-table td { padding: 12px 14px; font-size: 13px; } }

/* --- Pricing add-ons 6-card grid --- */
.addons-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.addon { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 24px; transition: all .3s var(--ease); }
.addon:hover { border-color: var(--red); transform: translateY(-3px); }
.addon-name { font-family: var(--font-display); font-size: 18px; font-weight: 600; text-transform: uppercase; color: #fff; margin-bottom: 6px; }
.addon-price { font-family: var(--font-display); font-size: 28px; font-weight: 700; color: var(--red); line-height: 1; margin-bottom: 10px; }
.addon-desc { font-size: 13px; color: var(--gray-300); line-height: 1.6; }
@media (max-width: 1024px) { .addons-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 768px)  { .addons-grid { grid-template-columns: 1fr; } }

/* --- About-page pillar (numbered cards) + community tile --- */
.pillar { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 32px 28px; transition: all .3s var(--ease); height: 100%; display: flex; flex-direction: column; }
.pillar:hover { border-color: var(--red); transform: translateY(-4px); }
.pillar__icon { display: block; }
.pillar-num { font-family: var(--font-display); font-size: 56px; font-weight: 700; color: var(--red); line-height: 1; display: block; margin-bottom: 14px; }
.pillar__title { font-family: var(--font-display); font-size: 22px; font-weight: 600; text-transform: uppercase; margin-bottom: 12px; }
.pillar__desc { font-size: 15px; color: var(--gray-300); line-height: 1.7; }

.comm-tile { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 6px; padding: 28px 22px; transition: all .3s var(--ease); height: 100%; }
.comm-tile:hover { border-color: var(--red); transform: translateY(-3px); }
.comm-tile__title { font-family: var(--font-display); font-size: 18px; font-weight: 600; text-transform: uppercase; margin-bottom: 8px; color: #fff; }
.comm-tile__desc { font-size: 14px; color: var(--gray-300); line-height: 1.6; }

/* --- About team bio card --- */
.team-card { background: var(--surface-raised); border: 1px solid var(--border); border-radius: 8px; padding: 40px; max-width: 760px; margin: 0 auto; text-align: center; }
.team-card .team-photo { width: 110px; height: 110px; border-radius: 50%; background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 38px; font-weight: 700; margin: 0 auto 22px; }
.team-card h3 { font-family: var(--font-display); font-size: 28px; font-weight: 700; text-transform: uppercase; margin-bottom: 4px; }
.team-card .team-role { font-family: var(--font-condensed); font-size: 13px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--red); margin-bottom: 18px; }
.team-card p { font-size: 15px; color: var(--gray-300); line-height: 1.8; margin-bottom: 14px; text-align: left; }

/* --- Form-card surface wrap (mockup uses dark surface card with subtle border for forms) --- */
.form-card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 36px; }
.form-card input, .form-card select, .form-card textarea { background: var(--surface-raised); border: 1px solid var(--border); color: #fff; }
.form-card input:focus, .form-card select:focus, .form-card textarea:focus { border-color: var(--red); outline: none; }

/* --- 1024 + 768 responsive collapses --- */
@media (max-width: 1024px) {
  #services-grid > .e-con-inner > .e-con,
  #pillars-grid > .e-con-inner > .e-con,
  #pricing-grid > .e-con-inner > .e-con { width: 50% !important; }
  .feature-checklist { grid-template-columns: 1fr; }
  .hero-stats__grid, .trust-strip__grid { gap: 18px; }
  .hero-stats__number, .trust-strip__number { font-size: 36px; }
}
@media (max-width: 768px) {
  #services-grid > .e-con-inner > .e-con,
  #pillars-grid > .e-con-inner > .e-con,
  #pricing-grid > .e-con-inner > .e-con,
  #community-grid > .e-con-inner > .e-con { width: 100% !important; }
  .reviews-aggregate__grid { gap: 14px; }
  .reviews-aggregate__stat { min-width: 0; flex: 1 1 100%; }
}


/* --- Services grid (homepage #srv-grid + services index #services-grid):
   force 3-col layout. Elementor flex_wrap with 33.33% width wraps to 2-col
   because card width + gap exceeds container width. Override to CSS grid. */
@media (min-width: 1025px) {
  #srv-grid > .e-con-inner,
  #services-grid > .e-con-inner {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
  }
  #srv-grid > .e-con-inner > .e-con,
  #services-grid > .e-con-inner > .e-con {
    width: auto !important;
  }
  /* Services hero: ensure hero image col displays at desktop */
  #services-hero > .e-con-inner { flex-wrap: nowrap; align-items: center; }
  #services-hero-text { min-width: 0; }
  #services-hero-img-col { display: flex; min-width: 0; align-items: center; }
  #services-hero-img-col img { width: 100%; height: auto; border-radius: 8px; aspect-ratio: 5/4; object-fit: cover; }
}
@media (min-width: 769px) and (max-width: 1024px) {
  #srv-grid > .e-con-inner {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr);
    gap: 16px;
  }
  #srv-grid > .e-con-inner > .e-con { width: auto !important; }
}
@media (max-width: 768px) {
  #srv-grid > .e-con-inner {
    display: grid !important;
    grid-template-columns: 1fr;
    gap: 14px;
  }
  #srv-grid > .e-con-inner > .e-con { width: auto !important; }
}

/* ==================================================================
   Punch-list fixes 2026-04-28 (batched per user)
   ================================================================== */

/* All 3-col tier/cross-sell grids built by v2_pricing_tier_row + v2_cross_sell_row helpers.
 * Pattern matches every {prefix}-pricing-grid and {prefix}-cross-grid plus services-grid (9 cards).
 * Service pages: dtf, sp, emb, sv, bn, km, pap, pp, rush, bm. Pricing/specials pages too. */
[id$="-pricing-grid"],
[id$="-cross-grid"],
#pricing-smb-grid,
#pricing-band-grid,
#specials-smb-grid,
#specials-band-grid,
#services-grid {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
[id$="-pricing-grid"] > .e-con,
[id$="-cross-grid"] > .e-con,
#pricing-smb-grid > .e-con,
#pricing-band-grid > .e-con,
#specials-smb-grid > .e-con,
#specials-band-grid > .e-con,
#services-grid > .e-con { width: auto !important; min-width: 0; }

/* Equal-height service cards: stretch the column container + its inner widget
 * wrapper so the card box fills the tallest cell in the row. The grid above
 * already gives every cell the same height; we just need the descendants to
 * stretch instead of hugging content. */
#services-grid > .e-con,
[id$="-cross-grid"] > .e-con,
#srv-grid > .e-con-inner > .e-con {
  align-self: stretch;
  display: flex;
  flex-direction: column;
}
#services-grid > .e-con > .e-con-inner,
[id$="-cross-grid"] > .e-con > .e-con-inner,
#srv-grid > .e-con-inner > .e-con > .e-con-inner {
  flex: 1;
  display: flex;
  flex-direction: column;
}
#services-grid > .e-con .elementor-widget-rfm_v2_card_box,
[id$="-cross-grid"] > .e-con .elementor-widget-rfm_v2_card_box,
#srv-grid > .e-con .elementor-widget-rfm_v2_card_box {
  flex: 1;
  display: flex;
}
#services-grid > .e-con .elementor-widget-rfm_v2_card_box > .elementor-widget-container,
[id$="-cross-grid"] > .e-con .elementor-widget-rfm_v2_card_box > .elementor-widget-container,
#srv-grid > .e-con .elementor-widget-rfm_v2_card_box > .elementor-widget-container {
  flex: 1;
  display: flex;
  flex-direction: column;
}
@media (max-width: 900px) {
  [id$="-pricing-grid"],
  [id$="-cross-grid"],
  #pricing-smb-grid,
  #pricing-band-grid,
  #specials-smb-grid,
  #specials-band-grid,
  #services-grid { grid-template-columns: 1fr; }
}

/* About — community 4-card row (was wrapping 3+1 with 25% widths + 16px gap). */
#community-grid {
  display: grid !important;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}
#community-grid > .e-con { width: auto !important; min-width: 0; }
@media (max-width: 900px) {
  #community-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  #community-grid { grid-template-columns: 1fr; }
}

/* About — trust stats counter row (5 stats, center-distributed). Actual class
 * is .about-stats__grid (component_name was 'about-stats' on the stats widget). */
#about-trust .rfm-stats,
#about-trust .about-stats__grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 24px;
  width: 100%;
  text-align: center;
}
@media (max-width: 900px) {
  #about-trust .rfm-stats,
  #about-trust .about-stats__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  #about-trust .rfm-stats,
  #about-trust .about-stats__grid { grid-template-columns: 1fr; }
}

/* Section header alignment modifier — widget renders `{component}--align-{value}`
 * on the root, so this generic rule covers any component_name without having
 * to enumerate variants. */
[class*="--align-center"] { text-align: center; }
[class*="--align-center"] > * { margin-left: auto; margin-right: auto; }
[class*="--align-center"] [class$="__eyebrow"] { justify-content: center; }

/* Section header accent_display=block → render the accent span on its own line.
 * Widget adds `{component}--accent-block` to the root when set. Universal
 * rule means this works for any component_name (lead-head, page-hero, etc). */
[class*="--accent-block"] [class$="__accent"] { display: block; }
[class*="--align-right"]  { text-align: right; }
[class*="--align-right"]  [class$="__eyebrow"] { justify-content: flex-end; }

/* Legacy CSS overrides — kept for variants whose rebuild scripts haven't been
 * re-run yet. Once every page rebuilds with `alignment: center` and the new
 * widget control, these can be deleted. */
.trust-head,
.pillars-head-inner,
.community-head-inner,
.process-head,
.process-head-inner,
.reviews-head,
.gallery-head,
.faq-head,
.lead-head,
.services-head,
.pi-head,
.addons-head,
.team-head { text-align: center; }
/* NOTE: .story-head deliberately omitted — about-page story heading must be
 * left-aligned per punch list (mockup right column under photo). */
.trust-head__eyebrow,
.trust-head__heading,
.trust-head__desc,
.pillars-head-inner__eyebrow,
.pillars-head-inner__heading,
.pillars-head-inner__desc,
.community-head-inner__eyebrow,
.community-head-inner__heading,
.community-head-inner__desc,
.process-head__eyebrow,
.process-head__heading,
.process-head__desc,
.reviews-head__eyebrow,
.reviews-head__heading,
.reviews-head__desc,
.gallery-head__eyebrow,
.gallery-head__heading,
.gallery-head__desc,
.faq-head__eyebrow,
.faq-head__heading,
.faq-head__desc,
.services-head__eyebrow,
.services-head__heading,
.services-head__desc,
.pi-head__eyebrow,
.pi-head__heading,
.pi-head__desc,
.addons-head__eyebrow,
.addons-head__heading,
.addons-head__desc,
.team-head__eyebrow,
.team-head__heading,
.team-head__desc { text-align: center; margin-left: auto; margin-right: auto; }
.trust-head__eyebrow,
.pillars-head-inner__eyebrow,
.community-head-inner__eyebrow,
.process-head__eyebrow,
.reviews-head__eyebrow,
.gallery-head__eyebrow,
.faq-head__eyebrow,
.services-head__eyebrow,
.pi-head__eyebrow,
.addons-head__eyebrow,
.team-head__eyebrow { justify-content: center; }
/* Gallery head is sometimes 2-col (heading left + button right) — only center its eyebrow */
#gallery .gallery-head { text-align: left; }
#gallery .gallery-head__heading { text-align: left; margin-left: 0; margin-right: 0; }

/* About — pillars 3-col grid (already 33.33% but also wraps because of gap). */
#pillars-grid {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
#pillars-grid > .e-con { width: auto !important; min-width: 0; }
@media (max-width: 900px) {
  #pillars-grid { grid-template-columns: 1fr; }
}

/* Reviews — hide the giant decorative open-quote mark per user 2026-04-28
 * ("ommit the " its pointless and leaving a huge gap at the top of the review card") */
.testimonial-card__quote,
.rfm-test__quote-mark { display: none !important; }

/* Gallery — anchor wrapper styling so the lightbox link doesn't break grid layout. */
.gallery__link,
[class*="__link"][class*="gallery"] {
  display: block;
  width: 100%;
  height: 100%;
  text-decoration: none;
  color: inherit;
  cursor: zoom-in;
}
.gallery__link img,
[class*="__link"][class*="gallery"] img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* List/checklist items — subtle elevation on hover per user 2026-04-28
 * ("every list ie why-checks - each list item needs a subtle elevation hover effect") */
.rfm-icl__item,
.feature-checklist li,
.why-checks li,
.about-checks li {
  transition: transform .25s var(--ease), background-color .25s var(--ease);
  border-radius: 4px;
  padding: 4px 6px;
}
.rfm-icl__item:hover,
.feature-checklist li:hover,
.why-checks li:hover,
.about-checks li:hover {
  transform: translateY(-2px);
  background-color: rgba(204, 0, 0, 0.05);
}

/* Quote-tabs button hover fix — was using transform but inactive tab text stayed gray
 * making "hover" look broken. Pin to white text + red border on hover. */
.quote-tabs__btn:hover {
  border-color: var(--red);
  color: #fff;
  background: var(--surface-hover);
  transform: translateY(-2px);
}
.quote-tabs__btn.is-active {
  background: var(--red);
  border-color: var(--red);
  color: #fff;
}
.quote-tabs__btn.is-active:hover {
  background: var(--red-bright);
  border-color: var(--red-bright);
  color: #fff;
}

/* GET A QUOTE button hover — header CTA + any .btn-red.
 * Mockup wants brighter red + slight lift on hover. */
.btn.btn-red,
a.btn.btn-red {
  background: var(--red);
  color: #fff;
  border: none;
  transition: all .3s var(--ease);
}
.btn.btn-red:hover,
a.btn.btn-red:hover {
  background: var(--red-bright);
  color: #fff;
  transform: translateY(-2px);
  box-shadow: 0 8px 30px var(--red-glow-strong);
}
/* Outline button hover — fill with white text */
.btn.btn-outline:hover,
a.btn.btn-outline:hover {
  background: #fff;
  color: #000;
  transform: translateY(-2px);
}
/* Ghost-red button hover — fill with red */
.btn.btn-ghost-red:hover,
a.btn.btn-ghost-red:hover {
  background: var(--red);
  color: #fff;
  transform: translateY(-2px);
}

/* Footer text — uniform color per user 2026-04-28 ("no red text"). */
#site-footer,
#site-footer * {
  color: var(--gray-300);
}
#site-footer h2, #site-footer h3, #site-footer h4,
#site-footer .rfm-finfo__title,
#site-footer .footer-col-title { color: #fff; }
#site-footer a { color: var(--gray-300); }
#site-footer a:hover { color: #fff; }
/* Override any inline red applied to .rfm-phone__number, .rfm-finfo__phone, contact icons */
#site-footer .rfm-phone__number,
#site-footer .rfm-finfo__phone,
#site-footer .rfm-finfo__name,
#site-footer .rfm-finfo .rfm-icon,
#site-footer .rfm-fbrand__cta,
#site-footer [class*="contact"] [class*="icon"],
#site-footer [class*="contact"] svg { color: var(--gray-300); fill: var(--gray-300); }

/* Footer 4th column icons — anti-pixelation: cap + crisp render.
 * If icons are img, force vector treatment; if svg, ensure size matches DPR. */
#site-footer .elementor-widget-icon-list svg,
#site-footer .rfm-icon svg,
#site-footer [class*="contact"] svg {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  shape-rendering: geometricPrecision;
}
#site-footer .elementor-widget-icon-list img,
#site-footer [class*="contact"] img {
  width: 16px;
  height: 16px;
  image-rendering: -webkit-optimize-contrast;
}

/* ==================================================================
   Mockup-fidelity batch 2 (2026-04-28 evening) — pulled from
   ndctees-homepage.html lines 63-243 verbatim where applicable.
   ================================================================== */

/* Hero overlay — match mockup line 102 (135deg dark gradient + radial red glow).
 * Hero container is #hero (Elementor section with background-video). The overlay
 * is a ::after pseudo-element layered above the video and below the content. */
#hero {
  position: relative;
}
#hero::after {
  content: '';
  position: absolute;
  inset: 0;
  background:
    linear-gradient(135deg, rgba(11,11,11,.95) 0%, rgba(11,11,11,.6) 50%, rgba(11,11,11,.85) 100%),
    radial-gradient(ellipse at 70% 80%, var(--red-glow) 0%, transparent 50%);
  pointer-events: none;
  z-index: 1;
}
#hero > .e-con-inner,
#hero > .e-child { position: relative; z-index: 2; }
#hero video { z-index: 0; }

/* Eyebrow / .tag — mockup line 63 (red, Barlow Condensed 14px 700, ls 3px) */
.tag,
.rfm-sh__eyebrow,
[class*="head__eyebrow"],
[class*="-head__eyebrow"],
.eyebrow,
.hero__eyebrow,
.about-head__eyebrow,
.dtf-head__eyebrow,
.process-head__eyebrow,
.gallery-head__eyebrow,
.reviews-head__eyebrow,
.faq-head__eyebrow,
.services-head__eyebrow,
.lead-head__eyebrow,
.page-hero__eyebrow {
  font-family: var(--font-condensed);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--red);
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
}

/* Buttons — mockup line 71 (Barlow Condensed 15px 700, ls 2px, padding 16px 32px, radius 3px) */
.btn,
a.btn,
button.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 16px 32px;
  font-family: var(--font-condensed);
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  border: none;
  border-radius: 3px;
  cursor: pointer;
  text-decoration: none;
  transition: all .3s var(--ease);
}

/* Reviews / testimonial cards — mockup lines 203-204
 * border on hover (red) + translateY -4. Avatar mockup line 208. */
.rev-card,
.testimonial-card,
.rfm-test {
  background: var(--surface-raised);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 32px;
  transition: all .3s var(--ease);
}
.rev-card:hover,
.testimonial-card:hover,
.rfm-test:hover {
  border-color: var(--red);
  transform: translateY(-4px);
}
/* Avatar circles — anti-pixelation: scale background, force flex centering, vector text */
.rev-avatar,
.testimonial-card__avatar,
.rfm-test__avatar {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  background: var(--surface);
  border: 2px solid var(--red);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display);
  font-size: 18px;
  font-weight: 700;
  color: var(--red);
  flex-shrink: 0;
  -webkit-font-smoothing: antialiased;
  shape-rendering: geometricPrecision;
}

/* FAQ accordion — mockup lines 236-243 */
.faq-wrap,
.fq-list { display: flex; flex-direction: column; gap: 10px; }
.faq-wrap .faq-item,
.fq {
  background: var(--surface-raised);
  border: 1px solid var(--border);
  border-radius: 6px;
  overflow: hidden;
  transition: border-color .3s;
}
.faq-wrap .faq-item:hover,
.fq:hover { border-color: var(--gray-700); }
.faq-wrap .faq-btn,
.fq-q {
  width: 100%;
  padding: 18px 20px;
  background: transparent;
  border: 0;
  font-family: var(--font-condensed);
  font-size: 16px;
  font-weight: 700;
  color: #fff;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  text-align: left;
  user-select: none;
}
.faq-wrap .faq-q { flex: 1; }
.faq-wrap .faq-chevron {
  width: 20px;
  height: 20px;
  color: var(--red);
  transition: transform .3s;
  flex-shrink: 0;
}
.faq-wrap .faq-item.open .faq-chevron,
.fq.open .fq-q::after { transform: rotate(180deg); }
.faq-wrap .faq-answer,
.fq-a {
  max-height: 0;
  overflow: hidden;
  transition: max-height .4s var(--ease);
}
.faq-wrap .faq-item.open .faq-answer { max-height: 600px; }
.fq.open .fq-a { max-height: 300px; padding: 0 20px 18px; }
.faq-wrap .faq-answer-inner,
.fq-a p {
  padding: 0 20px 18px;
  font-size: 15px;
  color: var(--gray-300);
  line-height: 1.7;
}

/* Header nav — mockup lines 88-91: animated red underline that grows from left on hover */
#site-header .elementor-nav-menu li a,
#site-header .elementor-nav-menu li a.elementor-item {
  position: relative;
}
#site-header .elementor-nav-menu li a::after,
#site-header .elementor-nav-menu li a.elementor-item::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 14px;
  right: 14px;
  width: auto;
  height: 2px;
  background: var(--red);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .3s var(--ease);
}
#site-header .elementor-nav-menu li a:hover::after,
#site-header .elementor-nav-menu li a:focus::after,
#site-header .elementor-nav-menu li a.elementor-item-active::after {
  transform: scaleX(1);
}

/* Footer menu — same animated underline pattern, white instead of red.
 * "as wide as the menu item wording" — anchor's intrinsic text width drives it. */
#site-footer .elementor-nav-menu li a,
#site-footer .elementor-nav-menu li a.elementor-item,
#site-footer .footer-col ul li a {
  position: relative;
  display: inline-block;
  padding-bottom: 2px;
}
#site-footer .elementor-nav-menu li a::after,
#site-footer .elementor-nav-menu li a.elementor-item::after,
#site-footer .footer-col ul li a::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  width: 100%;
  height: 1px;
  background: #fff;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .3s var(--ease);
}
#site-footer .elementor-nav-menu li a:hover::after,
#site-footer .elementor-nav-menu li a:focus::after,
#site-footer .elementor-nav-menu li a.elementor-item-active::after,
#site-footer .footer-col ul li a:hover::after { transform: scaleX(1); }

/* Footer bottom — 50/50 split: copyright left, legal pipes right.
 * Mockup line 271 (display: flex space-between).
 * The rfm-html widget wraps its inner spans in an .elementor-widget container,
 * so promote that wrapper to display: contents so the .footer-bottom__copy and
 * .footer-bottom__legal spans become direct flex children of #footer-bottom-inner. */
#footer-bottom-inner > .e-con-inner,
#footer-bottom-inner {
  display: flex !important;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
}
#footer-bottom-inner .elementor-widget,
#footer-bottom-inner .elementor-widget-rfm_v2_html,
#footer-bottom-inner .elementor-widget > .elementor-widget-container {
  display: contents;
}
.footer-bottom__copy {
  flex: 0 0 50%;
  text-align: left;
  font-size: 13px;
  color: var(--gray-700);
}
.footer-bottom__legal {
  flex: 0 0 50%;
  text-align: right;
  font-size: 13px;
  color: var(--gray-700);
}
.footer-bottom__legal a {
  color: var(--gray-700);
  text-decoration: none;
  transition: color .3s;
}
.footer-bottom__legal a:hover { color: #fff; }
@media (max-width: 768px) {
  #footer-bottom-inner > .e-con-inner,
  #footer-bottom-inner {
    flex-direction: column;
    text-align: center;
  }
  .footer-bottom__copy,
  .footer-bottom__legal { text-align: center; flex: 1 1 auto; }
}

/* NAP card hours — allow inline <br> (widget passes Mon-Fri ... <br>Sat & Sun: Closed).
 * Footer uses component_name='footer-nap' so class is .footer-nap__text not .rfm-nap__text. */
.rfm-nap__text,
.footer-nap__text {
  white-space: normal;
  line-height: 1.5;
}

/* Page hero (pricing/about/etc.) — alignment now driven by widget's
 * `alignment` setting (rendered as .page-hero--align-{value} class). The
 * generic `[class*="--align-center"]` rule below handles centering. We only
 * keep the max-width tweak here because it's the same on both alignments. */
.page-hero__heading,
.page-hero__desc { max-width: 880px; }
.page-hero--align-center .page-hero__heading,
.page-hero--align-center .page-hero__desc {
  margin-left: auto;
  margin-right: auto;
}

/* ==================================================================
   FORMS — unified standard (per feedback_form_styling_standard.md)
   One rule covers all 3 widget BEM variants:
     .f-* (mockup), .hero__form-* (form-card), .message-form__* (message-form), .quote-tabs__* (quote-tabs)
   Sourced from R:/NDCT/resources/ndctees-quote.html lines 43-62
   User tweaks 2026-04-28: labels 11px, placeholders 10px, input padding 7px (50% reduction)
   ================================================================== */

/* Card chrome — multiple root variants because form-card widget's component_name
 * is configurable per page (default 'hero__form-card', NDCT homepage uses 'form-card'). */
.f-card,
.hero__form-card,
.form-card,
.contact-form,
.message-form,
.quote-tabs__form {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 36px;
  max-width: 720px;
  margin: 0 auto;
}

/* Title (centered, uppercase, display font) */
.f-card__title,
.hero__form-title,
.form-card__title,
.quote-tabs__heading {
  font-family: var(--font-display);
  font-size: clamp(28px, 3vw, 44px);
  font-weight: 700;
  line-height: 1.1;
  text-transform: uppercase;
  text-align: center;
  margin: 0 0 8px;
  color: #fff;
}
.quote-tabs__heading-accent { color: var(--red); }

/* Subtitle / form intro */
.f-card__subtitle,
.hero__form-subtitle,
.quote-tabs__sub {
  text-align: center;
  font-size: 14px;
  color: var(--gray-500);
  margin: 0 auto 24px;
  max-width: 540px;
  line-height: 1.6;
}

/* Field group spacing */
.f-group,
.hero__form-group,
.contact-form__field,
.message-form__field,
.quote-tabs__field { margin-bottom: 14px; }

/* Multi-column rows (2-col, 3-col → stack on mobile) */
.f-row,
.hero__form-row,
.hero__form-row--2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 14px;
}
.f-row-3,
.hero__form-row--3 {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 14px;
  margin-bottom: 14px;
}

/* Labels — 12px white per user 2026-04-28 (latest) */
.f-group label,
.hero__form-label,
.contact-form__label,
.message-form__label,
.quote-tabs__label {
  display: block;
  font-family: var(--font-condensed);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: #fff;
  margin-bottom: 5px;
}
/* Red asterisk on required-field labels (widget appends <span class="*-req">*</span>) */
.hero__form-req,
.message-form__req,
.contact-form__req,
.quote-tabs__req {
  color: var(--red);
  margin-left: 2px;
}

/* Inputs / textareas / selects — 7px padding per user 2026-04-28 (50% reduction from 13px 14px).
 * Compound `input.X` / `textarea.X` / `select.X` selectors give 0,1,1 specificity which ties
 * Elementor reset.css's `input[type="text"]` rule and wins on source order (loaded after). */
.f-group input,
.f-group select,
.f-group textarea,
input.hero__form-input,
select.hero__form-select,
textarea.hero__form-textarea,
input.contact-form__input,
textarea.contact-form__textarea,
input.message-form__input,
textarea.message-form__textarea,
input.quote-tabs__input,
textarea.quote-tabs__textarea,
select.quote-tabs__select {
  width: 100%;
  padding: 7px 10px;
  background: var(--black);
  border: 1px solid var(--border);
  border-radius: 4px;
  color: #fff;
  font-family: var(--font-body);
  font-size: 14px;
  outline: none;
  transition: border-color .3s;
}

/* Placeholders — 11px per user 2026-04-28 (latest) */
.f-group input::placeholder,
.f-group textarea::placeholder,
input.hero__form-input::placeholder,
textarea.hero__form-textarea::placeholder,
input.contact-form__input::placeholder,
textarea.contact-form__textarea::placeholder,
input.message-form__input::placeholder,
textarea.message-form__textarea::placeholder,
input.quote-tabs__input::placeholder,
textarea.quote-tabs__textarea::placeholder {
  font-size: 13px;
  color: var(--gray-300);
  opacity: 1;
}

/* Focus state */
.f-group input:focus,
.f-group select:focus,
.f-group textarea:focus,
input.hero__form-input:focus,
select.hero__form-select:focus,
textarea.hero__form-textarea:focus,
input.contact-form__input:focus,
textarea.contact-form__textarea:focus,
input.message-form__input:focus,
textarea.message-form__textarea:focus,
input.quote-tabs__input:focus,
textarea.quote-tabs__textarea:focus,
select.quote-tabs__select:focus { border-color: var(--red); }

/* Select option chrome (keep dark in dropdown) */
.f-group select option,
.hero__form-select option,
.quote-tabs__select option { background: var(--black); color: #fff; }

/* Textarea sizing */
.f-group textarea,
.hero__form-textarea,
.contact-form__textarea,
.message-form__textarea,
.quote-tabs__textarea {
  min-height: 90px;
  resize: vertical;
  line-height: 1.5;
}

/* File upload — styled dashed drop-zone (mockup ndctees-quote.html lines 50-54) */
.f-upload,
.quote-tabs__upload {
  position: relative;
  padding: 20px;
  border: 2px dashed var(--border);
  border-radius: 6px;
  text-align: center;
  cursor: pointer;
  transition: border-color .3s, background .3s;
  background: var(--black);
}
.f-upload:hover,
.quote-tabs__upload:hover,
.quote-tabs__upload.is-loaded { border-color: var(--red); }
.f-upload input[type="file"],
.quote-tabs__upload input[type="file"],
.quote-tabs__file {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
}
.f-upload-icon,
.quote-tabs__upload-icon {
  display: block;
  font-size: 24px;
  line-height: 1;
  margin-bottom: 4px;
  color: var(--red);
}
.f-upload-label,
.quote-tabs__upload-label {
  display: block;
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--gray-500);
}
.f-upload-sub,
.quote-tabs__upload-hint,
.quote-tabs__upload-sub {
  display: block;
  font-size: 11px;
  color: var(--gray-700);
  margin-top: 2px;
}

/* Radio groups — pill-style, native input hidden */
.f-radio-group,
.quote-tabs__radio-group {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}
.f-radio,
.quote-tabs__radio { flex: 1; min-width: 100px; }
.f-radio input,
.quote-tabs__radio input[type="radio"] { display: none; }
.f-radio label,
.quote-tabs__radio label {
  display: block;
  padding: 10px 14px;
  background: var(--black);
  border: 1px solid var(--border);
  border-radius: 4px;
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--gray-500);
  text-align: center;
  cursor: pointer;
  transition: all .3s;
}
.f-radio input:checked + label,
.quote-tabs__radio input:checked + label {
  border-color: var(--red);
  color: #fff;
  background: rgba(204, 0, 0, .1);
}

/* Submit button */
.f-submit,
.hero__form-cta,
.contact-form__submit,
.message-form__submit,
.quote-tabs__submit {
  width: 100%;
  padding: 16px;
  background: var(--red);
  color: #fff;
  font-family: var(--font-condensed);
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: all .3s var(--ease);
  margin-top: 6px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  text-decoration: none;
}
.f-submit:hover,
.hero__form-cta:hover,
.contact-form__submit:hover,
.message-form__submit:hover,
.quote-tabs__submit:hover {
  background: var(--red-bright);
  transform: translateY(-2px);
  box-shadow: 0 8px 30px var(--red-glow-strong);
  color: #fff;
}
.hero__form-cta-arrow { display: inline-block; transition: transform .25s ease; }
.hero__form-cta:hover .hero__form-cta-arrow { transform: translateX(4px); }

/* Note line below submit (replaces trust-pill clutter where applicable) */
.f-note,
.contact-form__note,
.message-form__note {
  text-align: center;
  font-size: 12px;
  color: var(--gray-700);
  margin-top: 10px;
}

/* Trust pills, rating bar, privacy — form-card widget extras NOT in NDCT mockup.
 * Hidden by default on NDCT homepage form. SVGs constrained so if a future project
 * enables them via .hero__form-card root they don't blow up to natural size. */
.form-card .hero__form-trust,
.form-card .hero__form-rating,
.form-card .hero__form-privacy { display: none; }
.hero__form-trust { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 14px; justify-content: center; }
.hero__form-trust-item { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--gray-500); font-family: var(--font-condensed); text-transform: uppercase; letter-spacing: 1px; }
.hero__form-trust-item svg,
.hero__form-privacy svg { width: 14px; height: 14px; flex-shrink: 0; color: var(--red); }
.hero__form-rating { display: flex; align-items: center; justify-content: space-around; gap: 16px; margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--border); }
.hero__form-rating-item { text-align: center; flex: 1; }
.hero__form-rating-stars { color: var(--red); font-size: 14px; letter-spacing: 1px; margin-bottom: 4px; }
.hero__form-rating-num { font-family: var(--font-display); font-size: 22px; font-weight: 700; color: #fff; line-height: 1; }
.hero__form-rating-label { font-size: 11px; color: var(--gray-500); margin-top: 2px; text-transform: uppercase; letter-spacing: 1px; }
.hero__form-rating-divider { width: 1px; align-self: stretch; background: var(--border); flex-shrink: 0; }
.hero__form-privacy { display: flex; align-items: center; gap: 8px; margin-top: 14px; font-size: 12px; color: var(--gray-700); justify-content: center; }
.hero__form-cta-arrow { display: inline-block; transition: transform .25s ease; }
.hero__form-cta:hover .hero__form-cta-arrow { transform: translateX(4px); }

/* Quote tabs — top nav strip (kept here so all form chrome lives in one block) */
.quote-tabs__nav {
  display: flex;
  gap: 6px;
  justify-content: center;
  flex-wrap: wrap;
  margin-bottom: 48px;
}
.quote-tabs__btn {
  padding: 14px 28px;
  font-family: var(--font-condensed);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  background: var(--surface-raised);
  border: 2px solid var(--border);
  border-radius: 4px;
  color: var(--gray-500);
  cursor: pointer;
  transition: all .3s var(--ease);
}
.quote-tabs__btn:hover { border-color: var(--gray-700); color: #fff; transform: translateY(-2px); }
.quote-tabs__btn.is-active { background: var(--red); border-color: var(--red); color: #fff; }
.quote-tabs__panel { display: none; }
.quote-tabs__panel.is-active { display: block; }

/* Mobile collapse: stack 2/3-col rows, tighten card padding */
@media (max-width: 600px) {
  .f-row,
  .f-row-3,
  .hero__form-row,
  .hero__form-row--2,
  .hero__form-row--3 { grid-template-columns: 1fr; }
  .f-card,
  .hero__form-card,
  .contact-form,
  .message-form,
  .quote-tabs__form { padding: 24px 18px; }
  .quote-tabs__btn { padding: 10px 16px; font-size: 12px; letter-spacing: 1px; }
}

/* ==================================================================
   v3 page-delta fixes — 2026-04-28
   Per R:/NDCT/audit/page-deltas-v2-2026-04-28.md, mockup-driven adds.
   ================================================================== */

/* Quote hero — 4 trust pills under intro (mockup ndctees-quote.html .rush-bar) */
#quote-hero .rush-bar {
  display: flex;
  gap: 16px;
  justify-content: center;
  flex-wrap: wrap;
  margin-top: 28px;
}
#quote-hero .rush-tag {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 18px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 4px;
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--gray-300);
}
#quote-hero .rush-tag .rt-icon {
  color: var(--red);
  font-size: 15px;
}
#quote-hero .rush-tag {
  transition: color .15s ease, border-color .15s ease;
}
#quote-hero .rush-tag:hover,
#quote-hero .rush-tag:focus-visible {
  color: #fff;
  border-color: #fff;
}

/* Quote tab service image (left-column hero) */
.quote-info__figure {
  margin: 24px 0 0;
}
.quote-info__figure img {
  display: block;
  width: 100%;
  height: auto;
}

/* Quote tab panel — 2-col split: left bullets info col + right form card col */
.quote-info { padding-top: 4px; }
.quote-info__tag {
  font-family: var(--font-condensed);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--red);
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
}
.quote-info__tag::before {
  content: '';
  width: 28px;
  height: 2px;
  background: var(--red);
}
.quote-info__heading {
  font-family: var(--font-display);
  font-size: clamp(28px, 3.5vw, 44px);
  font-weight: 700;
  line-height: 1;
  text-transform: uppercase;
  color: #fff;
  margin: 0 0 16px;
}
.quote-info__accent { color: var(--red); }
.quote-info__para {
  font-size: 16px;
  color: var(--gray-300);
  line-height: 1.8;
  margin-bottom: 16px;
}
.quote-info__bullets {
  list-style: none;
  margin: 20px 0 0;
  padding: 0;
}
.quote-info__bullets li {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 0;
  font-family: var(--font-condensed);
  font-size: 16px;
  font-weight: 600;
  color: var(--gray-100);
  border-bottom: 1px solid var(--border);
}
.quote-info__bullets li:last-child { border-bottom: none; }
.quote-info__bullets .fi-icon {
  color: var(--red);
  font-size: 15px;
  flex-shrink: 0;
}

/* Force quote tab panel form NOT to be max-width-bound (it's now in a column) */
#quote-forms .ndct-form,
#quote-forms .ndct-form--quote {
  max-width: none;
}

/* Upload tile — paperclip icon + dashed dropzone per mockup.
 * Wrapped via JS (main.js) since pseudo-elements don't render on file inputs.
 * Native input sits invisibly over the whole tile so the click-anywhere works. */
.ndct-upload-tile {
  position: relative;
  display: block;
  padding: 24px 14px;
  background: var(--black);
  border: 2px dashed var(--border);
  border-radius: 6px;
  text-align: center;
  cursor: pointer;
  transition: border-color .3s;
  min-height: 100px;
}
.ndct-upload-tile:hover { border-color: var(--red); }
.ndct-upload-tile--selected { border-color: var(--red); border-style: solid; }
.ndct-upload-tile__icon {
  display: block;
  font-size: 24px;
  color: var(--red);
  line-height: 1;
  margin-bottom: 6px;
}
.ndct-upload-tile__label {
  display: block;
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--gray-500);
}
.ndct-upload-tile__sub {
  display: block;
  font-size: 11px;
  color: var(--gray-700);
  margin-top: 2px;
  word-break: break-all;
}
.ndct-upload-tile input[type="file"] {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
  padding: 0;
  border: 0;
  background: transparent;
  font-size: 0;
}
.ndct-upload-tile input[type="file"]::file-selector-button { display: none; }

/* Shipping radio — render as pill toggles (red/black) per mockup */
.ndct-form .elementor-field-type-radio .elementor-field-subgroup {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  gap: 10px;
}
.ndct-form .elementor-field-type-radio .elementor-field-option {
  flex: 1 1 calc(50% - 5px);
  min-width: 100px;
  position: relative;
  margin: 0;
}
.ndct-form .elementor-field-type-radio .elementor-field-option input[type="radio"] {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  opacity: 0;
  cursor: pointer;
  z-index: 1;
}
.ndct-form .elementor-field-type-radio .elementor-field-option label {
  display: block;
  width: 100%;
  padding: 12px 16px;
  background: var(--black);
  border: 1px solid var(--border);
  border-radius: 4px;
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--gray-500);
  text-align: center;
  cursor: pointer;
  transition: all .25s var(--ease);
  margin: 0;
}
.ndct-form .elementor-field-type-radio .elementor-field-option:hover label {
  border-color: var(--gray-700);
  color: var(--white);
}
.ndct-form .elementor-field-type-radio .elementor-field-option input[type="radio"]:checked + label {
  border-color: var(--red);
  color: var(--white);
  background: rgba(204, 0, 0, .12);
}

/* Quote tab panel responsive: stack on tablet */
@media (max-width: 1024px) {
  #quote-forms .e-con > .e-con-inner > .e-con,
  #quote-forms [id^="quote-forms"] .e-con-inner > .e-con { width: 100% !important; }
  #quote-forms .e-con-inner { flex-direction: column !important; }
}

/* Quote contact trio — Call / Email / Visit 3-card row (rfm_v2_card_box) */
#quote-trio-grid {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
#quote-trio-grid > .e-con { width: auto !important; min-width: 0; }
@media (max-width: 900px) {
  #quote-trio-grid { grid-template-columns: 1fr; }
}
#quote-contact-trio .cb-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 28px 24px;
  text-align: center;
  transition: all .3s var(--ease);
  height: 100%;
}
#quote-contact-trio .cb-card:hover {
  border-color: var(--red);
  transform: translateY(-4px);
}
#quote-contact-trio .cb-card__icon {
  display: block;
  margin: 0 auto 12px;
  text-align: center;
}
#quote-contact-trio .cb-card .cb-icon {
  font-size: 28px;
  display: inline-block;
  line-height: 1;
}
#quote-contact-trio .cb-card .cb-icon img.emoji,
#quote-contact-trio .cb-card .cb-icon img {
  width: 32px;
  height: 32px;
  display: inline-block;
  vertical-align: middle;
  margin: 0;
  padding: 0;
}
#quote-contact-trio .cb-card { display: flex; flex-direction: column; gap: 0; text-decoration: none; }
#quote-contact-trio .cb-card__link { display: inline-flex; align-items: center; gap: 6px; justify-content: center; }
#quote-contact-trio .cb-card__link svg { width: 14px; height: 14px; flex-shrink: 0; }
#quote-contact-trio .cb-card__title {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 600;
  text-transform: uppercase;
  margin: 0 0 6px;
  color: #fff;
}
#quote-contact-trio .cb-card__desc {
  font-size: 14px;
  color: var(--gray-500);
  line-height: 1.5;
  margin: 0 0 12px;
}
#quote-contact-trio .cb-card__link {
  font-family: var(--font-condensed);
  font-size: 15px;
  font-weight: 700;
  color: var(--red);
  letter-spacing: 1px;
  text-transform: uppercase;
}
#quote-contact-trio .cb-card__link:hover { color: var(--red-bright); }

/* Contact map iframe wrap */
#contact-map .map-wrap {
  position: relative;
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid var(--border);
  height: 420px;
  width: 100%;
}
#contact-map .map-wrap iframe {
  width: 100%;
  height: 100%;
  border: none;
  filter: grayscale(.4);
  display: block;
}

/* Contact message info column — extra paragraph block under heading */
.message-info-extra p {
  font-size: 16px;
  color: var(--gray-300);
  line-height: 1.8;
  margin-bottom: 14px;
}
.message-info-extra .msg-link {
  color: var(--red);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.message-info-extra .msg-link:hover { color: var(--red-bright); }

/* Pricing FAQ — left sidebar (heading + phone CTA) + right accordion (2-col) */
#pricing-faq-sidebar .faq-sidebar-desc {
  font-size: 16px;
  color: var(--gray-300);
  line-height: 1.7;
  margin: 0 0 8px;
}
@media (max-width: 900px) {
  #pricing-faq { flex-direction: column !important; }
  #pricing-faq-sidebar,
  #pricing-faq-accordion { width: 100% !important; }
}

/* About — stat tiles with red-bordered card chrome (5-card grid).
 * Stats counter widget renders .about-stats__stat children inside .about-stats__grid */
#about-trust .about-stats__stat {
  background: var(--surface-raised);
  border: 1px solid var(--red);
  border-radius: 8px;
  padding: 28px 18px;
  transition: transform .3s var(--ease), box-shadow .3s var(--ease);
}
#about-trust .about-stats__stat:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 40px var(--red-glow-strong);
}
#about-trust .about-stats__number {
  font-family: var(--font-display);
  font-size: 44px;
  font-weight: 700;
  color: var(--red);
  line-height: 1;
}
#about-trust .about-stats__label {
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 600;
  color: var(--gray-300);
  text-transform: uppercase;
  letter-spacing: 1px;
  margin-top: 8px;
  display: block;
}

/* DTF Advantages — 6-card 3x2 grid (rfm_v2_card_box, component dtf-adv-card) */
#dtf-feature-grid {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
#dtf-feature-grid > .e-con { width: auto !important; min-width: 0; }
.dtf-adv-card {
  background: var(--surface-raised);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 28px 24px;
  text-align: left;
  transition: all .3s var(--ease);
  height: 100%;
}
.dtf-adv-card:hover {
  border-color: var(--red);
  transform: translateY(-3px);
  box-shadow: 0 12px 40px var(--red-glow-strong);
}
.dtf-adv-card__icon { margin-bottom: 12px; }
.dtf-adv-card__icon .dtf-adv-icon {
  font-size: 28px;
  color: var(--red);
  line-height: 1;
}
.dtf-adv-card__title {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 600;
  text-transform: uppercase;
  margin: 0 0 8px;
  color: #fff;
}
.dtf-adv-card__desc {
  font-size: 14px;
  color: var(--gray-300);
  line-height: 1.6;
  margin: 0;
}
@media (max-width: 900px) {
  #dtf-feature-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  #dtf-feature-grid { grid-template-columns: 1fr; }
}

/* Rush capability — 6-card 3x2 grid (rfm_v2_card_box, component rush-cap-card) */
#rush-capacity-grid {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
#rush-capacity-grid > .e-con { width: auto !important; min-width: 0; }
.rush-cap-card {
  background: var(--surface-raised);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 28px 24px;
  text-align: left;
  transition: all .3s var(--ease);
  height: 100%;
}
.rush-cap-card:hover {
  border-color: var(--red);
  transform: translateY(-3px);
  box-shadow: 0 12px 40px var(--red-glow-strong);
}
.rush-cap-card__icon { margin-bottom: 12px; }
.rush-cap-card__icon .rush-cap-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--red);
  color: #fff;
  font-size: 18px;
  line-height: 1;
}
.rush-cap-card__title {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 600;
  text-transform: uppercase;
  margin: 0 0 8px;
  color: #fff;
}
.rush-cap-card__desc {
  font-size: 14px;
  color: var(--gray-300);
  line-height: 1.6;
  margin: 0;
}
@media (max-width: 900px) {
  #rush-capacity-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  #rush-capacity-grid { grid-template-columns: 1fr; }
}

/* ==============================================================
 * NDCT v3 punch list fixes (deviation report 2026-04-28)
 * ============================================================== */

/* (#2) Hero eyebrow + hero description: WHITE not red on every page that
   uses `hero` component_name. The eyebrow's leading red bar (::before)
   stays red as a brand accent. Hero desc text was gray-300; bump to
   white per punch list 26-04-28. */
.hero__eyebrow { color: #fff; }
.hero__desc { color: #fff; }

/* (#3) Hero slideshow image fit: `.elementor img` (0,1,1) was beating
   `.hero-visual__image` (0,1,0) and forcing height:auto, leaving the
   image at its natural square aspect inside a 4:5 container. Pair the
   class to bump specificity to (0,2,0) so cover works. */
.hero-visual .hero-visual__image,
.hero-visual__slide .hero-visual__image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* (#5) Icon checklist hover lift — applies to every list rendered by
   rfm_v2_icon_checklist (about-checks, lead-perks, dtf-list, sp-checks,
   why-checks, mat-checks, rush-can-list, sv-feat-list, bn-feat-list,
   km-feat-list, pp-feat-list, pap-feat-list, emb-items-list, pi-list,
   addons-list, feature-list, checklist). Subtle Y-lift + red border to
   match card hover language elsewhere on the site. */
.about-checks > *,
.lead-perks li,
.dtf-list li,
.sp-checks li,
.why-checks li,
.mat-checks li,
.rush-can-list li,
.sv-feat-list li,
.bn-feat-list li,
.km-feat-list li,
.pp-feat-list li,
.pap-feat-list li,
.emb-items-list li,
.pi-list li,
.addons-list li,
.feature-list li,
.checklist li,
.feature-checklist li {
  transition: transform .25s var(--ease), border-color .25s var(--ease), color .25s var(--ease);
}
.about-checks > *:hover,
.lead-perks li:hover,
.dtf-list li:hover,
.sp-checks li:hover,
.why-checks li:hover,
.mat-checks li:hover,
.rush-can-list li:hover,
.sv-feat-list li:hover,
.bn-feat-list li:hover,
.km-feat-list li:hover,
.pp-feat-list li:hover,
.pap-feat-list li:hover,
.emb-items-list li:hover,
.pi-list li:hover,
.addons-list li:hover,
.feature-list li:hover,
.checklist li:hover,
.feature-checklist li:hover {
  transform: translateY(-2px);
  border-color: var(--red);
  color: #fff;
}

/* (#6) "27 YEARS STRONG" circle position: nudge down ~16px so it sits
   just below the photo bottom edge instead of overlapping the corner. */
.about-photo-badge {
  bottom: -32px;
}
/* Counter animation hook — JS bumps from 0 to target on intersect. */
.about-photo-badge span:nth-child(1)[data-counter] {
  font-variant-numeric: tabular-nums;
}

/* (#8) Process step circle hover: solid bg, not transparent, so the
   connector line behind doesn't bleed through. */
.step:hover .step__number,
[id^="ndct-"] .rfm-step:hover .rfm-step__num {
  background: var(--surface-raised);
  border-color: var(--red);
  color: var(--red);
}

/* (#9) Gallery items: force square aspect for every gallery widget item.
   .gallery__item already has it but reinforce + mockup parity. */
.gallery__item,
.fresh-gallery__item,
.gal-item {
  aspect-ratio: 1 / 1 !important;
}

/* (#10) Testimonial card: use border-color (not border shorthand) on hover
   so the top border doesn't disappear during transition. Also tighten the
   transform to translateY only. */
.testimonial-card {
  border: 1px solid var(--border);
  transition: transform .3s var(--ease), border-color .3s var(--ease);
}
.testimonial-card:hover {
  transform: translateY(-2px);
  border-color: var(--red);
}

/* Avatar: switch from low-res image to crisp CSS-rendered initials circle.
   Source images for testimonials are 40px PNGs upscaled — pixelated.
   The widget already exposes initials; ensure no image swallows the box. */
.testimonial-card__avatar {
  background: var(--red);
  color: #fff;
  border: 0;
  font-family: var(--font-display);
  font-size: 18px;
  font-weight: 700;
  width: 44px;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  overflow: hidden;
  image-rendering: -webkit-optimize-contrast;
  image-rendering: crisp-edges;
}
.testimonial-card__avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  image-rendering: -webkit-optimize-contrast;
}

/* (#12) FAQ accordion font tightened to mockup target.
   Mockup line 220-225: question 16px Barlow Condensed 700 white,
   answer 15px Barlow 400 gray-300. */
.faq-wrap .faq-btn {
  font-family: var(--font-condensed);
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 1px;
  color: #fff;
}
.faq-wrap .faq-answer-inner {
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 400;
  color: var(--gray-300);
  line-height: 1.7;
}

/* (#13) Hide the social-proof-badges row in the footer. Reusable widget
   stays in place for other sites; only the homepage instance is silenced. */
#site-footer .footer-spb { display: none !important; }

/* (#14) Defensive: ensure floating widgets can't be clipped by ancestor
   `overflow: hidden`. The Elementor footer wraps them in a container that
   may apply overflow; force the floating root to escape via fixed positioning
   already, but `transform` on ancestors creates a containing block. The
   floating-widgets parent has neither transform nor filter set in the
   rebuild script so this is a no-op safety net. */
#floating-widgets {
  position: static;
  transform: none;
}

/* ==================================================================
   Punch-list fixes 2026-04-29 (batched per user)
   ================================================================== */

/* (#15) Service sub-page two-column feature row: make the text column sticky
 * inside its section so it stays visible while the image scrolls past.
 * Activated by adding the `feature-row__text-col` CSS class to the text
 * container inside v2_feature_row(). The section's flex_align_items has
 * been switched to flex-start so sticky has room to translate. */
@media (min-width: 1025px) {
  .feature-row__text-col {
    position: sticky;
    top: 100px;
    align-self: flex-start;
  }
}

/* (#16) Gallery filter pills: button reset + filter behavior. Pills now
 * render as <button> elements with data-category attributes; gallery items
 * also carry data-category. JS toggles the `is-hidden` class when a filter
 * pill is clicked. */
.filter-pill {
  background: var(--surface-raised);
  border: 1px solid var(--border);
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--gray-300);
  padding: 9px 18px;
  border-radius: 30px;
  cursor: pointer;
  transition: all .3s var(--ease);
}
.filter-pill:hover { border-color: var(--red); color: #fff; }
.filter-pill.active { background: var(--red); border-color: var(--red); color: #fff; }
.gallery__item.is-hidden { display: none; }

/* ==================================================================
   Punch-list fixes 2026-04-29 evening (10-item batch per user)
   ================================================================== */

/* (#1 + #2) Global eyebrow standard: red dash + WHITE text on EVERY
 * eyebrow site-wide (hero, all section eyebrows on all pages). The
 * `::before` is a 28px red bar that reads as the dash. Higher
 * specificity than legacy per-component rules so it wins everywhere. */
[class$="__eyebrow"],
.rfm-sh__eyebrow,
.tag,
.eyebrow {
  color: #fff !important;
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
[class$="__eyebrow"]::before,
.rfm-sh__eyebrow::before,
.tag::before,
.eyebrow::before {
  content: '';
  width: 28px;
  height: 2px;
  background: var(--red);
  flex-shrink: 0;
}
/* Center-aligned eyebrows still flex-row; keep the dash on the left. */

/* (#3) Homepage "Fresh Off The Press" gallery: removes the row-track
 * cap so 200px row + 1:1 aspect-ratio items don't overflow into the
 * next row. Square aspect-ratio drives the height; explicit row track
 * not needed. Component_name is "gallery" on homepage (8 items, 4-col). */
#fresh-press .gallery__grid,
#gallery-wrap .gallery__grid,
#gallery-grid-wrap .gallery__grid {
  grid-auto-rows: auto;
}
.gallery__grid { grid-auto-rows: auto; }

/* (#4) Floating CTA button: was inheriting body color (red) on red bg
 * making text invisible. Force white text + match the standard btn-red
 * pill styling. Same family/size as header GET A QUOTE button. */
.float-cta__btn,
.float-cta a,
.float-cta a:visited,
.float-cta a:link {
  background: var(--red);
  color: #fff !important;
  padding: 14px 24px;
  border-radius: 4px;
  font-family: var(--font-condensed);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  text-decoration: none;
  border: 2px solid var(--red);
  display: inline-flex;
  align-items: center;
  gap: 8px;
  box-shadow: 0 8px 24px rgba(204,0,0,0.35);
  transition: background .25s var(--ease), transform .25s var(--ease), box-shadow .25s var(--ease);
}
.float-cta__btn:hover,
.float-cta a:hover {
  background: #990000;
  border-color: #990000;
  color: #fff !important;
  transform: translateY(-2px);
  box-shadow: 0 12px 32px rgba(204,0,0,0.5);
}

/* (#5) Back-to-top: track matches inner red (invisible on red bg),
 * progress arc is white, arrow stays white, hover darkens to var(--red-bright). */
.back-to-top { color: #fff; transition: background .25s var(--ease), transform .25s var(--ease); }
.back-to-top:hover { background: var(--red-bright); transform: translateY(-2px); }
.back-to-top__progress { stroke: #fff !important; }
.back-to-top__arrow { color: #fff; }
.back-to-top:hover .back-to-top__arrow { color: #fff; }

/* Mobile: park back-to-top at bottom-left clear of the sticky CTA bar
 * (which lives at bottom: 0 with ~50px height + safe-area). */
@media (max-width: 1024px) {
  .back-to-top { bottom: 70px !important; left: 8px !important; right: auto !important; }
}

/* (Item 1) Mobile-only header phone icon, sits LEFT of the hamburger.
 * Markup is rendered via rfm_v2_html in rebuild-header-v2.php.
 * Hidden on desktop (>=1025px), shown at <=1024px. */
.header-mobile-phone {
  display: none;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: transparent;
  color: var(--red);
  align-items: center;
  justify-content: center;
  text-decoration: none;
  transition: background .2s var(--ease);
}
.header-mobile-phone:hover,
.header-mobile-phone:focus { background: rgba(204, 0, 0, 0.15); color: var(--red); }
.header-mobile-phone svg { width: 20px; height: 20px; }
@media (max-width: 1024px) {
  .header-mobile-phone { display: inline-flex; }
  /* Push the hamburger toggle next to the phone icon. The nav widget at
   * <=1024px exposes a single hamburger button - keep it adjacent. */
  #header-nav-col { justify-content: flex-end !important; gap: 4px !important; }
}

/* (#6) Footer bottom: ALL text white (was gray-700). */
#footer-bottom-inner,
.footer-bottom__copy,
.footer-bottom__legal,
.footer-bottom__legal a,
.footer-bottom__legal a:visited {
  color: #fff !important;
}
.footer-bottom__legal a { text-decoration: none; }
.footer-bottom__legal a:hover { color: #fff; text-decoration: underline; }

/* (#7) Footer social icons: bigger SVGs, white stroke, red on hover.
 * Markup change in rebuild-footer-v2.php replaces "IG"/"FB" text with
 * inline SVG paths. CSS strips the text-styling and sizes the svg. */
#site-footer .footer-social a {
  background: var(--surface);
  border: 1px solid var(--border);
  color: #fff;
  font-size: 0; /* hide any leftover text node */
}
#site-footer .footer-social a svg {
  width: 16px;
  height: 16px;
  display: block;
  fill: currentColor;
}
#site-footer .footer-social a:hover {
  background: var(--red);
  border-color: var(--red);
  color: #fff;
}

/* (#8) Header submenu items: NO underline animation (only top-level
 * gets the red ::after underline). Override the global rule that
 * targeted every nav anchor. */
#site-header .elementor-nav-menu .sub-menu li a::after,
#ndct-header .elementor-nav-menu .sub-menu li a::after,
#site-header .elementor-nav-menu .sub-menu li a.elementor-sub-item::after,
#ndct-header .elementor-nav-menu .sub-menu li a.elementor-sub-item::after {
  content: none !important;
  display: none !important;
}

/* (#9) Mobile menu = RIGHT slide-in drawer.
 * Elementor renders <nav class="elementor-nav-menu--dropdown"> as a sibling
 * of .elementor-menu-toggle. By default Elementor scales it vertically via
 * transform on the toggle's `.elementor-active` state. We override that to
 * a horizontal translate so the menu slides in from the right as a drawer,
 * full-height, fixed-position. Backdrop overlay sits behind the drawer. */
@media (max-width: 1024px) {
  /* Drawer container — fixed right side, off-screen by default.
   * NOTE: #site-header sets backdrop-filter, which makes IT (not the viewport)
   * the containing block for this position:fixed drawer. So `top:0` resolves to
   * the header's top — ~70px down, below the promo bar — and a plain 100vh then
   * overshoots the viewport bottom by that offset, dropping the footer/social
   * row off-screen (the original "icons cut off, no scroll" bug). Fix: a flex
   * column (the menu list scrolls, the footer stays pinned) + main.js sets the
   * exact pixel height (innerHeight - drawer.top) so the drawer always reaches
   * the real viewport bottom regardless of promo-bar height, scroll position,
   * or the mobile URL bar. 100dvh is just the pre-JS CSS fallback. */
  #site-header .elementor-widget-nav-menu nav.elementor-nav-menu--dropdown,
  [data-elementor-type="header"] .elementor-widget-nav-menu nav.elementor-nav-menu--dropdown {
    position: fixed !important;
    top: 0 !important;
    left: auto !important;
    right: 0 !important;
    width: 85% !important;
    max-width: 360px !important;
    height: 100vh !important;       /* fallback for browsers without dvh */
    height: 100dvh !important;      /* fallback before main.js sizes it precisely */
    overflow: hidden !important;    /* the inner list scrolls; footer stays pinned */
    background: rgba(255,255,255,0.98) !important;
    backdrop-filter: blur(16px);
    border-left: 1px solid #e0e0e0;
    box-shadow: -4px 0 24px rgba(0,0,0,0.18);
    z-index: 10000 !important;
    margin: 0 !important;
    padding: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    transform: translateX(100%) !important;
    transition: transform .3s var(--ease, ease) !important;
    will-change: transform;
  }
  /* Open state — when burger toggle has .elementor-active, translate to 0 */
  #site-header .elementor-menu-toggle.elementor-active + nav.elementor-nav-menu--dropdown,
  [data-elementor-type="header"] .elementor-menu-toggle.elementor-active + nav.elementor-nav-menu--dropdown {
    transform: translateX(0) !important;
  }
  /* Backdrop overlay — body-level pseudo via .ndct-menu-open class on <html> */
  html.ndct-menu-open::before {
    content: '';
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.55);
    z-index: 9999;
    opacity: 0;
    pointer-events: auto;
    animation: ndctMenuFadeIn .3s ease forwards;
  }
  html.ndct-menu-open { overflow: hidden; }

  /* #site-header has z-index: 1000 (its own stacking context). The drawer
   * inside it can never escape that ceiling. When menu is open, lift the
   * whole header above the backdrop so the drawer can render on top. */
  html.ndct-menu-open #site-header,
  html.ndct-menu-open [data-elementor-type="header"] { z-index: 10001 !important; }
  @keyframes ndctMenuFadeIn { to { opacity: 1; } }

  /* Top-level item spacing inside drawer */
  nav.elementor-nav-menu--dropdown ul.elementor-nav-menu {
    padding: 56px 0 0 !important;   /* clear the close (X) button overlaying the drawer top */
    margin: 0 !important;
    flex: 1 1 auto !important;       /* fill the height between the top and the pinned footer */
    min-height: 0 !important;        /* REQUIRED so this flex child can actually scroll */
    overflow-y: auto !important;
    overflow-x: hidden !important;
    -webkit-overflow-scrolling: touch;
  }
  nav.elementor-nav-menu--dropdown li.menu-item {
    list-style: none;
    border-bottom: 1px solid #e8e8e8;
    position: relative;
  }
  nav.elementor-nav-menu--dropdown li.menu-item > a,
  nav.elementor-nav-menu--dropdown li.menu-item > a.elementor-item {
    display: flex !important;
    align-items: center;
    justify-content: space-between;
    padding: 16px 24px !important;
    font-family: var(--font-condensed);
    font-size: 15px;
    font-weight: 600;
    letter-spacing: 1.5px;
    text-transform: uppercase;
    color: #1a1a1a !important;
    text-decoration: none;
    background: transparent !important;
  }
  /* Suppress underline pseudo on mobile drawer items */
  nav.elementor-nav-menu--dropdown li a::after,
  nav.elementor-nav-menu--dropdown li a.elementor-item::after { content: none !important; display: none !important; }

  /* (#9b) Click-to-expand sub-menu accordion.
   * Hide all sub-menus by default. Show only when parent <li> has .is-open.
   * SmartMenus would normally hover-toggle these on desktop, on mobile we
   * disable that and use our own click handler in main.js. */
  nav.elementor-nav-menu--dropdown li.menu-item-has-children > .sub-menu,
  nav.elementor-nav-menu--dropdown ul.sub-menu {
    display: none !important;
    position: static !important;
    background: #f5f5f5 !important;
    box-shadow: none !important;
    padding: 0 !important;
    margin: 0 !important;
    width: 100% !important;
    min-width: 0 !important;
    transform: none !important;
    opacity: 1 !important;
    visibility: visible !important;
  }
  nav.elementor-nav-menu--dropdown li.menu-item-has-children.is-open > .sub-menu {
    display: block !important;
  }
  /* Chevron indicator for items with children */
  nav.elementor-nav-menu--dropdown li.menu-item-has-children > a .sub-arrow {
    display: inline-flex !important;
    transition: transform .25s ease;
    margin-left: auto;
  }
  nav.elementor-nav-menu--dropdown li.menu-item-has-children.is-open > a .sub-arrow {
    transform: rotate(180deg);
  }

  /* Sub-menu items */
  nav.elementor-nav-menu--dropdown .sub-menu li {
    border-bottom: 1px solid #e0e0e0;
  }
  nav.elementor-nav-menu--dropdown .sub-menu li:last-child { border-bottom: none; }
  nav.elementor-nav-menu--dropdown .sub-menu li a,
  nav.elementor-nav-menu--dropdown .sub-menu li a.elementor-sub-item {
    padding: 14px 24px 14px 40px !important;
    font-size: 13px !important;
    font-weight: 500 !important;
    color: #555 !important;
    background: transparent !important;
    text-transform: uppercase;
    letter-spacing: 1px;
  }

  /* (#9c) Active menu item — red bg + white text + no underline.
   * Applies to top-level AND sub-menu items at any tree depth.
   * Specificity must beat `#site-header .elementor-nav-menu li a` (1,2,2)
   * which sets `color: #444 !important`. We stack `nav.elementor-nav-menu--dropdown`
   * + `li.current-*` + `> a.elementor-item` = (0,3,2). To win we add the
   * #site-header parent context AND the .current-* class on the anchor's li,
   * raising specificity to (1,4,2) which beats the kit rule. */
  #site-header nav.elementor-nav-menu--dropdown li.current-menu-item > a,
  #site-header nav.elementor-nav-menu--dropdown li.current_page_item > a,
  #site-header nav.elementor-nav-menu--dropdown li.current-menu-ancestor > a,
  #site-header nav.elementor-nav-menu--dropdown li.is-current > a,
  #site-header nav.elementor-nav-menu--dropdown li.current-menu-item > a.elementor-item,
  #site-header nav.elementor-nav-menu--dropdown li.current_page_item > a.elementor-item,
  #site-header nav.elementor-nav-menu--dropdown li.current-menu-ancestor > a.elementor-item,
  #site-header nav.elementor-nav-menu--dropdown li.is-current > a.elementor-item,
  #site-header nav.elementor-nav-menu--dropdown li.current-menu-item > a.elementor-sub-item,
  #site-header nav.elementor-nav-menu--dropdown li.current_page_item > a.elementor-sub-item,
  #site-header nav.elementor-nav-menu--dropdown li.is-current > a.elementor-sub-item,
  [data-elementor-type="header"] nav.elementor-nav-menu--dropdown li.current-menu-item > a,
  [data-elementor-type="header"] nav.elementor-nav-menu--dropdown li.current-menu-ancestor > a,
  [data-elementor-type="header"] nav.elementor-nav-menu--dropdown li.is-current > a,
  [data-elementor-type="header"] nav.elementor-nav-menu--dropdown li.current-menu-item > a.elementor-item,
  [data-elementor-type="header"] nav.elementor-nav-menu--dropdown li.current-menu-ancestor > a.elementor-item,
  [data-elementor-type="header"] nav.elementor-nav-menu--dropdown li.is-current > a.elementor-item {
    background: var(--red) !important;
    color: #fff !important;
  }

  /* Sub-menu in mobile drawer sits FLUSH against the parent — no top
   * margin/border that would create a white gap visual. Sub-menu items
   * get a left-indent and a slight bg tint to read as nested. */
  nav.elementor-nav-menu--dropdown li.menu-item-has-children > .sub-menu {
    margin: 0 !important;
    border-top: 0 !important;
  }
  nav.elementor-nav-menu--dropdown li.menu-item-has-children.is-open {
    border-bottom: 1px solid #e8e8e8;
  }

  /* Tap states (no hover on touch) */
  nav.elementor-nav-menu--dropdown li > a:active {
    background: rgba(0,0,0,0.04) !important;
  }
}

/* (#9d) Active menu item styling — DESKTOP top-level + sub-menu.
 * Red bg + white text + no underline pseudo. Suppresses the animated
 * red underline added higher up for current-page items. */
@media (min-width: 1025px) {
  #site-header .elementor-nav-menu .sub-menu li.current-menu-item > a,
  #site-header .elementor-nav-menu .sub-menu li.current_page_item > a,
  #site-header .elementor-nav-menu .sub-menu li.current-menu-ancestor > a,
  #site-header .elementor-nav-menu .sub-menu li.is-current > a,
  #site-header .elementor-nav-menu .sub-menu li.current-menu-item > a.elementor-sub-item,
  #site-header .elementor-nav-menu .sub-menu li.is-current > a.elementor-sub-item,
  #ndct-header .elementor-nav-menu .sub-menu li.current-menu-item > a,
  #ndct-header .elementor-nav-menu .sub-menu li.is-current > a {
    background: var(--red) !important;
    color: #fff !important;
  }
  #site-header .elementor-nav-menu .sub-menu li.current-menu-item > a::after,
  #site-header .elementor-nav-menu .sub-menu li.is-current > a::after,
  #ndct-header .elementor-nav-menu .sub-menu li.current-menu-item > a::after,
  #ndct-header .elementor-nav-menu .sub-menu li.is-current > a::after { content: none !important; }
}

/* (#9e) Top-level menu hover — header bar is white/light, so red text reads.
 * Hover turns text red (var(--red) #CC0000) and triggers the animated red
 * underline. Active page item (current-menu-item) has red bg + white text
 * and must NOT flip to red-on-red when hovered, so the rule below pins
 * white on the active-hover combo. */
#site-header .elementor-nav-menu li > a:hover,
#site-header .elementor-nav-menu li > a:focus,
#site-header .elementor-nav-menu li > a.elementor-item:hover,
#site-header .elementor-nav-menu li > a.elementor-item:focus,
#ndct-header .elementor-nav-menu li > a:hover,
#ndct-header .elementor-nav-menu li > a:focus {
  color: var(--red) !important;
}
/* Top-level desktop ACTIVE page styling — red bg + white text on the
 * current item. .elementor-nav-menu IS the <ul>, so use `ul.elementor-nav-menu > li`
 * (not `.elementor-nav-menu > ul > li`). Higher specificity than the kit's
 * `#site-header .elementor-nav-menu li a` (1,2,2) — these selectors land at
 * (1,3,3) which beats it. */
@media (min-width: 1025px) {
  #site-header ul.elementor-nav-menu > li.current-menu-item > a,
  #site-header ul.elementor-nav-menu > li.current_page_item > a,
  #site-header ul.elementor-nav-menu > li.current-menu-ancestor > a,
  #site-header ul.elementor-nav-menu > li.is-current-parent > a,
  #site-header ul.elementor-nav-menu > li.is-current > a,
  #site-header ul.elementor-nav-menu > li.current-menu-item > a.elementor-item,
  #site-header ul.elementor-nav-menu > li.current_page_item > a.elementor-item,
  #site-header ul.elementor-nav-menu > li.current-menu-ancestor > a.elementor-item,
  #site-header ul.elementor-nav-menu > li.is-current-parent > a.elementor-item,
  #site-header ul.elementor-nav-menu > li.is-current > a.elementor-item {
    background: var(--red) !important;
    color: #fff !important;
  }
  /* Suppress the animated red underline on active top-level items
   * (red-on-red would be invisible anyway). */
  #site-header ul.elementor-nav-menu > li.current-menu-item > a::after,
  #site-header ul.elementor-nav-menu > li.current_page_item > a::after,
  #site-header ul.elementor-nav-menu > li.current-menu-ancestor > a::after,
  #site-header ul.elementor-nav-menu > li.is-current-parent > a::after,
  #site-header ul.elementor-nav-menu > li.is-current > a::after {
    content: none !important;
    display: none !important;
  }
  /* Active-page HOVER: NO color change at all - bg stays red, text stays white,
   * no underline. Pin both color AND background on every hover/focus combo
   * so the kit's `a:hover { color: red }` can never bleed through. */
  #site-header ul.elementor-nav-menu > li.current-menu-item > a:hover,
  #site-header ul.elementor-nav-menu > li.current-menu-item > a:focus,
  #site-header ul.elementor-nav-menu > li.current-menu-item > a.elementor-item:hover,
  #site-header ul.elementor-nav-menu > li.current-menu-item > a.elementor-item-active:hover,
  #site-header ul.elementor-nav-menu > li.current_page_item > a:hover,
  #site-header ul.elementor-nav-menu > li.current_page_item > a:focus,
  #site-header ul.elementor-nav-menu > li.current-menu-ancestor > a:hover,
  #site-header ul.elementor-nav-menu > li.current-menu-ancestor > a:focus,
  #site-header ul.elementor-nav-menu > li.is-current-parent > a:hover,
  #site-header ul.elementor-nav-menu > li.is-current-parent > a:focus,
  #site-header ul.elementor-nav-menu > li.is-current > a:hover,
  #site-header ul.elementor-nav-menu > li.is-current > a:focus {
    color: #fff !important;
    background: var(--red) !important;
  }
}
/* Sub-menu (dropdown) hover — red bg + white text (consistent w/ active) */
#site-header .elementor-nav-menu .sub-menu li > a:hover,
#site-header .elementor-nav-menu .sub-menu li > a.elementor-sub-item:hover,
#ndct-header .elementor-nav-menu .sub-menu li > a:hover {
  background: var(--red) !important;
  color: #fff !important;
}

/* (#9f) Mobile drawer FOOTER (injected by main.js -> ensureDrawerFooter).
 * Sits at the bottom of nav.elementor-nav-menu--dropdown, below the menu list.
 * Stacks Call Now (solid red) + Get a Quote (outline) + IG/FB social row. */
@media (max-width: 1024px) {
  .ndct-drawer-footer {
    flex: 0 0 auto;                  /* pinned at the bottom of the drawer, always fully visible */
    padding: 18px 24px calc(18px + env(safe-area-inset-bottom, 0px));
    border-top: 1px solid #e0e0e0;
    display: flex;
    flex-direction: column;
    gap: 12px;
    background: rgba(255,255,255,0.98);
  }
  .ndct-drawer-footer__call,
  .ndct-drawer-footer__quote {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 14px 20px !important;
    font-family: var(--font-condensed);
    font-size: 14px !important;
    font-weight: 700 !important;
    letter-spacing: 1.5px;
    text-transform: uppercase;
    border-radius: 4px;
    text-decoration: none !important;
    transition: transform .2s var(--ease), background .2s var(--ease);
    width: 100%;
    box-sizing: border-box;
  }
  .ndct-drawer-footer__call,
  .ndct-drawer-footer__call:link,
  .ndct-drawer-footer__call:visited {
    background: var(--red) !important;
    color: #fff !important;
    border: 1px solid var(--red);
  }
  .ndct-drawer-footer__call:hover,
  .ndct-drawer-footer__call:focus { background: var(--red-bright, #e31937) !important; color: #fff !important; transform: translateY(-2px); }
  .ndct-drawer-footer__call svg { color: #fff; stroke: #fff; flex-shrink: 0; }
  .ndct-drawer-footer__quote,
  .ndct-drawer-footer__quote:link,
  .ndct-drawer-footer__quote:visited {
    background: #fff !important;
    color: var(--red) !important;
    border: 1px solid var(--red);
  }
  .ndct-drawer-footer__quote:hover,
  .ndct-drawer-footer__quote:focus { background: var(--red) !important; color: #fff !important; transform: translateY(-2px); }
  .ndct-drawer-footer__social {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
    margin-top: 8px;
  }
  .ndct-drawer-footer__social a,
  .ndct-drawer-footer__social a:link,
  .ndct-drawer-footer__social a:visited {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: transparent;
    color: var(--red);
    border: 1px solid var(--red);
    transition: background .2s var(--ease), color .2s var(--ease), transform .2s var(--ease);
  }
  .ndct-drawer-footer__social a:hover,
  .ndct-drawer-footer__social a:focus { background: var(--red); color: #fff; transform: translateY(-2px); }
  .ndct-drawer-footer__social svg { width: 20px; height: 20px; fill: currentColor; }
}

/* (#10) Mobile sticky CTAs:
 * Left = solid red bg + WHITE text (Call)
 * Right = WHITE bg + RED text + red border (Get a Quote)
 * Currently right's color was inheriting body red on red bg = invisible. */
.mobile-cta__call {
  background: var(--red) !important;
  color: #fff !important;
}
.mobile-cta__call svg { color: #fff; stroke: #fff; }
.mobile-cta__estimate {
  background: #fff !important;
  color: var(--red) !important;
  border: 1px solid var(--red);
}
.mobile-cta__estimate svg { color: var(--red); stroke: var(--red); }

/* ==============================================
   Resources page (/resources)
   Template download cards + reference charts.
   Images shown in FULL (contain), never cropped.
   ============================================== */
.tpl-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: var(--surface-raised);
  border: 1px solid var(--border);
  border-radius: 6px;
  overflow: hidden;
  transition: border-color .4s var(--ease), transform .4s var(--ease), box-shadow .4s var(--ease);
}
.tpl-card:hover { border-color: var(--red); transform: translateY(-6px); box-shadow: 0 20px 60px rgba(0, 0, 0, .5); }
.tpl-card__icon {
  width: 100%;
  aspect-ratio: 3 / 2;
  background: #FFFFFF;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}
.tpl-card__icon img { width: 100%; height: 100%; object-fit: contain; }
.tpl-card__title {
  font-family: var(--font-display);
  font-size: 22px;
  font-weight: 600;
  text-transform: uppercase;
  color: #fff;
  margin: 0 24px;
  padding-top: 24px;
  line-height: 1.1;
}
.tpl-card__desc { padding: 12px 24px 16px; font-size: 15px; color: var(--gray-300); line-height: 1.7; flex: 1; }
.tpl-card__link {
  /* Render as a proper red pill button, not a text link */
  margin: 0 24px 24px;
  padding: 10px 18px;
  font-family: var(--font-condensed);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: #fff;
  background: var(--red, #CC0000);
  border: 1px solid var(--red, #CC0000);
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  text-decoration: none;
  align-self: flex-start;
  transition: background .2s ease, gap .25s ease, color .2s ease, border-color .2s ease;
}
.tpl-card__link:hover,
.tpl-card__link:focus,
.tpl-card__link:focus-visible {
  background: #990000;
  border-color: #990000;
  color: #fff;
  gap: 12px;
  text-decoration: none;
  outline: none;
}
.tpl-card__link svg { stroke: #fff; }
.tpl-card__link:hover svg, .tpl-card__link:focus svg { stroke: #fff; }

/* Reference chart figure: full-width image on a clean frame */
.resources-chart {
  width: 100%;
  background: #FFFFFF;
  border: 1px solid var(--border);
  border-radius: 6px;
  overflow: hidden;
  padding: 24px;
}
.resources-chart img { width: 100%; height: auto; display: block; margin: 0 auto; }

/* 2-up template grid: account for the 24px gap so two cards fit per row.
   Elementor stores width:50% which (50% + 50% + 24px gap) overflows and wraps
   to one column; calc() reins it back to a true 2-up. */
#resources-templates-grid > .e-con,
#resources-templates-grid > .elementor-element { width: calc(50% - 12px); }

@media (max-width: 768px) {
  #resources-templates-grid > .e-con,
  #resources-templates-grid > .elementor-element { width: 100%; }
  .resources-chart { padding: 12px; }
}


/* Upload tiles: fill their 50% column on desktop; stack full-width on mobile. */
.elementor-field-type-upload .ndct-upload-tile { width: 100%; }
@media (max-width: 767px) {
  .elementor-field-type-upload.elementor-col-50 { flex: 0 0 100%; max-width: 100%; width: 100%; }
}

/* RFM Cloud Uploader — Uppy Dashboard sizing inside Elementor Pro form columns.
   The native upload rule (.elementor-field-type-upload ...) above stopped
   applying once fields were swapped to cloud_upload, and Uppy renders inline
   at a default ~750px width which overflows the 50% column. Constrain to
   container; collapse to full width on mobile. */
.elementor-field-type-cloud_upload .rfm-cu-host,
.elementor-field-type-cloud_upload .uppy-Root,
.elementor-field-type-cloud_upload .uppy-Dashboard {
    width: 100% !important;
    max-width: 100% !important;
}
@media (max-width: 767px) {
    .elementor-field-type-cloud_upload.elementor-col-50 {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        width: 100% !important;
    }
}

/* RFM Cloud Uploader — dark theme matching the NDCT quote form palette.
   Targets Uppy 4.x Dashboard classes. Variables come from ndct-global :root. */
.elementor-field-type-cloud_upload .uppy-Root {
    background: var(--black);
    border: 2px dashed var(--border);
    border-radius: 6px;
    transition: border-color .25s var(--ease);
}
.elementor-field-type-cloud_upload .uppy-Root:hover {
    border-color: var(--red);
}
.elementor-field-type-cloud_upload .uppy-Dashboard-inner,
.elementor-field-type-cloud_upload .uppy-Dashboard-innerWrap,
.elementor-field-type-cloud_upload .uppy-Dashboard-AddFiles {
    background: transparent !important;
    border: none !important;
}
/* "Drop print files here or" title */
.elementor-field-type-cloud_upload .uppy-Dashboard-AddFiles-title {
    color: var(--white, #fff) !important;
    font-family: var(--font-condensed) !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    letter-spacing: .5px !important;
    text-transform: uppercase;
}
/* "browse files" link inside the title */
.elementor-field-type-cloud_upload .uppy-Dashboard-browse {
    color: var(--red) !important;
    font-weight: 700 !important;
    text-decoration: none !important;
    text-transform: uppercase !important;
    letter-spacing: .5px;
    padding: 4px 10px;
    border: 1px solid var(--red);
    border-radius: 4px;
    margin-left: 4px;
    transition: all .25s var(--ease);
}
.elementor-field-type-cloud_upload .uppy-Dashboard-browse:hover,
.elementor-field-type-cloud_upload .uppy-Dashboard-browse:focus {
    color: var(--white, #fff) !important;
    background: var(--red) !important;
    border-color: var(--red) !important;
}
/* "Max 500 MB · Up to 10 files" note + footer note */
.elementor-field-type-cloud_upload .uppy-Dashboard-AddFiles-info,
.elementor-field-type-cloud_upload .uppy-Dashboard-note {
    color: var(--gray-500) !important;
    font-size: 12px !important;
}
/* Drag-over hint overlay */
.elementor-field-type-cloud_upload .uppy-Dashboard-dropFilesHereHint {
    background: rgba(204, 0, 0, 0.12) !important;
    border-color: var(--red) !important;
    color: var(--white, #fff) !important;
}
/* File items once added */
.elementor-field-type-cloud_upload .uppy-Dashboard-Item {
    background: var(--surface-raised) !important;
    border-color: var(--border) !important;
    color: var(--white, #fff) !important;
}
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-name {
    color: var(--white, #fff) !important;
}
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-status,
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-fileInfo {
    color: var(--gray-500) !important;
}
/* Primary action buttons (Upload N files, Retry, etc.) */
.elementor-field-type-cloud_upload .uppy-c-btn-primary,
.elementor-field-type-cloud_upload .uppy-StatusBar-actionBtn--upload,
.elementor-field-type-cloud_upload .uppy-StatusBar-actionBtn--retry {
    background: var(--red) !important;
    border-color: var(--red) !important;
    color: var(--white, #fff) !important;
    font-family: var(--font-condensed) !important;
    text-transform: uppercase;
    letter-spacing: .5px;
}
.elementor-field-type-cloud_upload .uppy-c-btn-primary:hover,
.elementor-field-type-cloud_upload .uppy-StatusBar-actionBtn--upload:hover {
    background: var(--white, #fff) !important;
    color: var(--red) !important;
}
/* Progress bar fill */
.elementor-field-type-cloud_upload .uppy-StatusBar-progress {
    background: var(--red) !important;
}
/* Status bar background */
.elementor-field-type-cloud_upload .uppy-StatusBar {
    background: var(--black) !important;
    color: var(--gray-500) !important;
    border-top: 1px solid var(--border) !important;
}
.elementor-field-type-cloud_upload .uppy-StatusBar-content {
    color: var(--gray-500) !important;
}

/* Cloud Uploader — push the "browse files" button to its own line with
   breathing room below the "DROP PRINT FILES HERE OR" title. */
.elementor-field-type-cloud_upload .uppy-Dashboard-browse {
    display: inline-block !important;
    margin-top: 12px !important;
    margin-left: 0 !important;
}
.elementor-field-type-cloud_upload .uppy-Dashboard-AddFiles-title {
    line-height: 1.6 !important;
}


/* Contact-card emoji icons: render the phone-receiver glyph as solid white.
   Emoji color is OS-controlled, so we desaturate + brighten via filter (not
   `color`, which has no effect on emoji). WP may replace inline emoji spans
   with img.emoji tags, so cover both. */
#quote-contact-trio .cb-card[href^="tel:"] .cb-icon,
#quote-contact-trio .cb-card[href^="tel:"] .cb-icon img,
#quote-contact-trio .cb-card[href^="tel:"] .cb-icon img.emoji {
    filter: grayscale(1) brightness(3) !important;
}

/* Shipping address fields are inserted into every quote form but only
   relevant when the customer chooses "Ship to Me". Hidden until the JS
   below adds .show-ship to the form on that radio selection. */
.elementor-form .elementor-field-group.js-ship-only {
    display: none !important;
}
.elementor-form.show-ship .elementor-field-group.js-ship-only {
    display: block !important;
}

/* Uppy DashboardContent bar (the top strip with Cancel + "1 file selected" +
   "+" that appears once files are added). Override Uppys default pink/white

/* Uppy DashboardContent bar (top strip with Cancel + "1 file selected" + "+"
   that appears once files are added). Override Uppy's pink/white defaults. */
.elementor-field-type-cloud_upload .uppy-DashboardContent-bar,
.elementor-field-type-cloud_upload .uppy-DashboardContent-panel,
.elementor-field-type-cloud_upload .uppy-Dashboard-files {
    background: var(--black) !important;
    color: var(--white, #fff) !important;
    border-bottom-color: var(--border) !important;
}
.elementor-field-type-cloud_upload .uppy-DashboardContent-title {
    color: var(--white, #fff) !important;
    font-family: var(--font-condensed) !important;
    text-transform: uppercase;
    letter-spacing: .5px;
}
/* Cancel button (left) - was pink. */
.elementor-field-type-cloud_upload .uppy-DashboardContent-back,
.elementor-field-type-cloud_upload .uppy-DashboardContent-bar > button {
    background: transparent !important;
    color: var(--gray-300) !important;
    border: 1px solid var(--border) !important;
    border-radius: 4px !important;
    padding: 4px 10px !important;
    font-family: var(--font-condensed) !important;
    font-size: 12px !important;
    text-transform: uppercase;
    letter-spacing: .5px;
    transition: all .2s var(--ease);
}
.elementor-field-type-cloud_upload .uppy-DashboardContent-back:hover,
.elementor-field-type-cloud_upload .uppy-DashboardContent-bar > button:hover {
    background: var(--red) !important;
    color: #fff !important;
    border-color: var(--red) !important;
}
/* "+" Add-more (right) - was a white outlined chip. */
.elementor-field-type-cloud_upload .uppy-DashboardContent-addMore,
.elementor-field-type-cloud_upload .uppy-DashboardContent-addMoreCaption {
    background: transparent !important;
    color: var(--gray-300) !important;
    border: 1px solid var(--border) !important;
    border-radius: 4px !important;
    padding: 4px 10px !important;
}
.elementor-field-type-cloud_upload .uppy-DashboardContent-addMore svg {
    fill: currentColor !important;
}
.elementor-field-type-cloud_upload .uppy-DashboardContent-addMore:hover {
    background: var(--red) !important;
    color: #fff !important;
    border-color: var(--red) !important;
}
/* Remove-file icon (per-row X) - was pink. */
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-actionWrapper button,
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-action--remove {
    background: transparent !important;
    color: var(--red) !important;
    border: none !important;
}
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-action--remove svg {
    fill: currentColor !important;
}

/* Elementor Pro form submit button - match site CTA hover (var(--red-bright)
   #990000, not Elementor's default pink). Covers the SEND MY * QUOTE button
   on the /quote forms + any other Pro form submit on the site. */
.elementor-form button[type="submit"]:hover,
.elementor-form button[type="submit"]:focus,
.elementor-form .elementor-button:hover,
.elementor-form .elementor-button:focus {
    background-color: var(--red-bright) !important;
    border-color: var(--red-bright) !important;
    color: #fff !important;
}

/* Conditional shipping - corrected: target the wrapper class that Elementor
   builds from custom_id, not the inner input's `js-ship-only` class. */
.elementor-form .elementor-field-group-ship_company,
.elementor-form .elementor-field-group-ship_addr1,
.elementor-form .elementor-field-group-ship_addr2,
.elementor-form .elementor-field-group-ship_city,
.elementor-form .elementor-field-group-ship_state,
.elementor-form .elementor-field-group-ship_zip {
    display: none !important;
}
.elementor-form.show-ship .elementor-field-group-ship_company,
.elementor-form.show-ship .elementor-field-group-ship_addr1,
.elementor-form.show-ship .elementor-field-group-ship_addr2,
.elementor-form.show-ship .elementor-field-group-ship_city,
.elementor-form.show-ship .elementor-field-group-ship_state,
.elementor-form.show-ship .elementor-field-group-ship_zip {
    display: block !important;
}

/* Quote form footer note - red box, white text, small */
.ndct-form-note {
    display: block;
    background: var(--red, #CC0000);
    color: #fff !important;
    font-size: 12px !important;
    font-family: var(--font-condensed, sans-serif);
    padding: 10px 16px;
    border-radius: 6px;
    text-align: center;
    margin: 12px 0 0 0;
    line-height: 1.4;
}

/* Flatpickr calendar -> NDCT red theme */
.flatpickr-calendar {
    background: var(--surface-raised, #1E1E1E) !important;
    border: 1px solid var(--border, #2A2A2A) !important;
    box-shadow: 0 12px 36px rgba(0,0,0,0.5);
    color: var(--white, #fff) !important;
}
.flatpickr-calendar.arrowTop:before, .flatpickr-calendar.arrowTop:after { border-bottom-color: var(--surface-raised, #1E1E1E) !important; }
.flatpickr-calendar.arrowBottom:before, .flatpickr-calendar.arrowBottom:after { border-top-color: var(--surface-raised, #1E1E1E) !important; }
.flatpickr-months, .flatpickr-current-month, .flatpickr-weekdaycontainer, .flatpickr-weekday {
    color: var(--white, #fff) !important;
    background: transparent !important;
}
.flatpickr-monthDropdown-months {
    background: var(--surface-raised, #1E1E1E) !important;
    color: var(--white, #fff) !important;
}
.flatpickr-current-month input.cur-year {
    color: var(--white, #fff) !important;
}
.flatpickr-prev-month svg, .flatpickr-next-month svg { fill: var(--white, #fff) !important; }
.flatpickr-prev-month:hover svg, .flatpickr-next-month:hover svg { fill: var(--red, #CC0000) !important; }
.flatpickr-day {
    color: var(--text, #fff) !important;
}
.flatpickr-day.today, .flatpickr-day.today:hover, .flatpickr-day.today:focus {
    border-color: var(--red, #CC0000) !important;
    color: var(--white, #fff) !important;
}
.flatpickr-day.selected, .flatpickr-day.selected:hover, .flatpickr-day.selected:focus,
.flatpickr-day.startRange, .flatpickr-day.endRange,
.flatpickr-day.startRange.selected, .flatpickr-day.endRange.selected {
    background: var(--red, #CC0000) !important;
    border-color: var(--red, #CC0000) !important;
    color: #fff !important;
}
.flatpickr-day:hover, .flatpickr-day:focus {
    background: var(--red-glow, rgba(204,0,0,0.15)) !important;
    border-color: var(--red, #CC0000) !important;
}
.flatpickr-day.flatpickr-disabled, .flatpickr-day.flatpickr-disabled:hover,
.flatpickr-day.prevMonthDay, .flatpickr-day.nextMonthDay {
    color: var(--gray-700, #444) !important;
    background: transparent !important;
    border-color: transparent !important;
}

/* Tighten main nav spacing - was wrapping/overlapping the GET A QUOTE column
   after adding Resources to the menu. Drop horizontal padding on each item
   and bump z-index on the cta column so it always wins stacking. */
.header-nav .elementor-nav-menu > li > a,
.header-nav .elementor-nav-menu li.menu-item a.elementor-item {
    padding-left: 10px !important;
    padding-right: 10px !important;
    font-size: 13px !important;
    letter-spacing: 0.5px;
}
.header-nav .elementor-nav-menu > li {
    margin: 0 !important;
}
#header-cta-col {
    position: relative;
    z-index: 1 !important;
    /* Mouse events pass through the col's empty background; only the phone
       link + Get A Quote button capture clicks. Means Resources stays
       clickable even when the col's flex bounds extend leftward past its
       visible content. */
    pointer-events: none;
}
#header-cta-col > *,
#header-cta-col a,
#header-cta-col button {
    pointer-events: auto;
}
/* Nav menu must always paint above the CTA col. */
.header-nav,
.header-nav .elementor-nav-menu,
.header-nav .elementor-nav-menu > li,
.header-nav .elementor-nav-menu > li > a {
    position: relative;
    z-index: 10 !important;
}

/* Shirt-order repeater UI (Screen Print + DTF) */
.rfm-shirt-repeater {
    background: var(--surface, #0d0d0d);
    border: 1px solid var(--border, #2A2A2A);
    border-radius: 6px;
    padding: 12px;
}
.rfm-shirt-repeater__head {
    display: grid;
    grid-template-columns: 1.6fr 1.4fr 1.2fr 1.4fr 0.8fr 36px;
    gap: 8px;
    font-family: var(--font-condensed, sans-serif);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--gray-300, #aaa);
    padding-bottom: 8px;
    margin-bottom: 8px;
    border-bottom: 1px solid var(--border, #2A2A2A);
}
.rfm-shirt-repeater__rows {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.rfm-shirt-row {
    display: grid;
    grid-template-columns: 1.6fr 1.4fr 1.2fr 1.4fr 0.8fr 36px;
    gap: 8px;
    align-items: center;
}
.rfm-shirt-row input,
.rfm-shirt-row select {
    width: 100%;
    background: var(--black, #0B0B0B) !important;
    color: var(--white, #fff) !important;
    border: 1px solid var(--border2, #333) !important;
    border-radius: 4px;
    padding: 7px 9px !important;
    font-size: 13px !important;
    font-family: inherit;
}
.rfm-shirt-row input::placeholder { color: var(--gray-300, #aaa); opacity: 1; font-size: 12px; }
.rfm-shirt-row__remove {
    background: transparent;
    color: var(--red, #CC0000);
    border: 1px solid var(--border, #2A2A2A);
    border-radius: 4px;
    cursor: pointer;
    font-size: 18px;
    line-height: 1;
    padding: 6px 0;
    transition: all 0.2s var(--ease, ease);
}
.rfm-shirt-row__remove:hover {
    background: var(--red, #CC0000);
    color: #fff;
    border-color: var(--red, #CC0000);
}
.rfm-shirt-row__remove[disabled] { opacity: 0.3; cursor: not-allowed; }
/* Vinyl mode: Type column is a select + conditional "Other" text input
 * stacked inside one grid cell so the row layout stays 6-column. */
.rfm-shirt-row__type--vinyl {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.rfm-shirt-row__type--vinyl select,
.rfm-shirt-row__type--vinyl input { width: 100%; }
.rfm-shirt-row__type--vinyl input[hidden] { display: none; }
.rfm-shirt-repeater__add {
    display: inline-block;
    margin-top: 12px;
    background: transparent;
    color: var(--red, #CC0000);
    border: 1px solid var(--red, #CC0000);
    border-radius: 4px;
    padding: 8px 14px;
    cursor: pointer;
    font-family: var(--font-condensed, sans-serif);
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: all 0.2s var(--ease, ease);
}
.rfm-shirt-repeater__add:hover,
.rfm-shirt-repeater__add:focus,
.rfm-shirt-repeater__add:focus-visible,
.rfm-shirt-repeater__add:active {
    background: var(--red, #CC0000) !important;
    border-color: var(--red, #CC0000) !important;
    color: #fff !important;
    outline: none !important;
    box-shadow: none !important;
}
@media (max-width: 767px) {
    .rfm-shirt-repeater__head { display: none; }
    .rfm-shirt-row { grid-template-columns: 1fr 36px; row-gap: 6px; }
    .rfm-shirt-row > :nth-child(n+2):nth-child(-n+5) { grid-column: 1; }
    .rfm-shirt-row > input:first-child { grid-column: 1; }
    .rfm-shirt-row__remove { grid-row: 1; grid-column: 2; align-self: start; }
}

/* Give the header CTA column breathing room from the nav's last item */
.header-nav { margin-right: 16px; }
#header-cta-col { gap: 12px; }

/* Override earlier .ndct-form-note red-box style: now plain white text
   directly under the submit button, no background box. */
.ndct-form-note {
    background: transparent !important;
    color: #fff !important;
    font-size: 12px !important;
    font-family: var(--font-condensed, sans-serif);
    padding: 8px 0 0 0 !important;
    border-radius: 0 !important;
    text-align: center;
    margin: 8px 0 0 0 !important;
    line-height: 1.4;
    font-weight: 400;
}

/* Inline form-note (placed inside .elementor-form by JS, after submit button).
   14px, white, red asterisk, normal weight. */
.ndct-form-note--inline {
    font-size: 14px !important;
    font-weight: 400 !important;
    color: #fff !important;
    text-align: center;
    margin: 14px 0 4px 0 !important;
    padding: 0 !important;
    background: transparent !important;
    line-height: 1.4;
}
.ndct-form-note__asterisk {
    color: var(--red, #CC0000);
    font-weight: 700;
}
/* Rush callout under the quote hero subtext */
.ndct-rush-callout { text-align: center; }
.ndct-rush-callout p {
    color: #fff !important;
    font-weight: 700 !important;
    max-width: 900px;
    margin: 16px auto 0 auto;
    line-height: 1.5;
}

/* Home hero brand eyebrow - "NEXT DAY CUSTOM Tees" above the existing
   "San Antonio's Print Shop Since '98" line. Not a heading; just styled text. */
.ndct-brand-eyebrow {
    font-family: var(--font-condensed, 'Barlow Condensed', sans-serif);
    font-size: 32px;
    font-weight: 700;
    letter-spacing: 2px;
    color: #fff;
    text-transform: uppercase;
    line-height: 1.05;
    margin: 0 0 14px 0;
}
.ndct-brand-eyebrow .red { color: var(--red, #CC0000); }
@media (max-width: 991px) {
    .ndct-brand-eyebrow { font-size: 26px; }
}
@media (max-width: 480px) {
    .ndct-brand-eyebrow { font-size: 22px; letter-spacing: 1.5px; }
}

/* Iron-clad: site header sits above EVERYTHING (Uppy dashboard z-index 1005, modal layers, etc). */
header.elementor-location-header,
.elementor-location-header,
#site-header,
#ndct-header {
    z-index: 9999 !important;
}


/* === Uppy active-upload feedback ============================
   The user can't tell uploads are happening because per-row progress
   is subtle. Beef it up:
   - Pulsing red ring on the dashboard while ANY file is uploading
   - Bold red progress fill + percentage overlay per file
   - Animated 'UPLOADING' label below the dashboard
============================================================ */
@keyframes rfm-cu-pulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(204, 0, 0, 0.55); }
    50%      { box-shadow: 0 0 0 6px rgba(204, 0, 0, 0); }
}
@keyframes rfm-cu-stripes {
    0%   { background-position: 0 0; }
    100% { background-position: 40px 0; }
}
.elementor-field-type-cloud_upload .uppy-Dashboard.uppy-Dashboard--isInnerWrapVisible:has(.uppy-StatusBar.is-uploading),
.elementor-field-type-cloud_upload .uppy-Dashboard:has(.uppy-StatusBar.is-uploading) .uppy-Dashboard-inner,
.elementor-field-type-cloud_upload:has(.uppy-StatusBar.is-uploading) .uppy-Dashboard-inner {
    animation: rfm-cu-pulse 1.6s ease-in-out infinite;
    border-color: var(--red, #CC0000) !important;
}
/* Per-file thicker progress bar in red with diagonal stripes so motion is obvious */
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-progress,
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-progressIcon--bar {
    height: 8px !important;
    background-image:
        linear-gradient(90deg, var(--red, #CC0000), var(--red, #CC0000)),
        repeating-linear-gradient(135deg,
            rgba(255,255,255,0.18) 0 10px,
            transparent 10px 20px);
    background-blend-mode: overlay;
    animation: rfm-cu-stripes 0.8s linear infinite;
}
/* Per-file percentage stays readable */
.elementor-field-type-cloud_upload .uppy-Dashboard-Item-progressIndicator {
    color: #fff !important;
    font-weight: 700 !important;
    text-shadow: 0 1px 2px rgba(0,0,0,0.6);
}
/* Statusbar progress bar — thicker, stripes too */
.elementor-field-type-cloud_upload .uppy-StatusBar.is-uploading {
    background: rgba(204, 0, 0, 0.08) !important;
}
.elementor-field-type-cloud_upload .uppy-StatusBar.is-uploading .uppy-StatusBar-progress {
    height: 4px !important;
    background-image:
        linear-gradient(90deg, var(--red, #CC0000), var(--red, #CC0000)),
        repeating-linear-gradient(135deg,
            rgba(255,255,255,0.25) 0 10px,
            transparent 10px 20px);
    background-blend-mode: overlay;
    animation: rfm-cu-stripes 0.8s linear infinite;
}
/* Status text - upgrade subtle uploading to bold red */
.elementor-field-type-cloud_upload .uppy-StatusBar.is-uploading .uppy-StatusBar-content {
    color: var(--red, #CC0000) !important;
    font-weight: 700 !important;
    text-transform: uppercase !important;
    letter-spacing: 0.5px;
}
/* Pulsing dot before the status text so it visibly LIVES */
.elementor-field-type-cloud_upload .uppy-StatusBar.is-uploading .uppy-StatusBar-content::before {
    content: '';
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--red, #CC0000);
    margin-right: 8px;
    vertical-align: middle;
    animation: rfm-cu-pulse 1s ease-in-out infinite;
}
/* Item card row gets a left-edge red bar while uploading */
.elementor-field-type-cloud_upload .uppy-Dashboard-Item.is-inprogress {
    border-left: 3px solid var(--red, #CC0000) !important;
}

/* final-cta button hover: stay white on the red background instead of
   shifting to brand-red/pink. The user said the hover color reads pink
   against the section's red bg; locking the buttons to white text + transparent
   bg + slight white-glow background fixes that without losing the hover affordance. */
#ndct-final-cta .elementor-button:hover,
#ndct-final-cta .elementor-button:focus,
#ndct-final-cta .elementor-button:focus-visible,
#ndct-final-cta .elementor-button:active,
#ndct-final-cta a.elementor-button-link:hover,
#ndct-final-cta a.elementor-button-link:focus,
#ndct-final-cta a.elementor-button-link:active {
    color: #fff !important;
    border-color: #fff !important;
    background-color: rgba(255, 255, 255, 0.12) !important;
    outline: none !important;
    box-shadow: none !important;
}
#ndct-final-cta .elementor-button:hover .elementor-button-text,
#ndct-final-cta .elementor-button:focus .elementor-button-text {
    color: #fff !important;
}


/* === Thank-you page (/thank-you) ============================
   Personalized greeting + order summary block, populated by JS
   from query params + sessionStorage (set by the redirect shim).
============================================================ */
#thx-hero .thx-heading {
    font-family: var(--font-display, Oswald, sans-serif);
    font-size: clamp(36px, 6vw, 64px);
    font-weight: 700;
    line-height: 1;
    text-transform: uppercase;
    color: #fff;
    margin: 0;
    text-align: center;
    letter-spacing: 1px;
}
#thx-hero .thx-name {
    color: var(--red, #CC0000);
    margin-left: 12px;
    white-space: nowrap;
}
#thx-hero .thx-name:empty { display: none; }
#thx-hero .thx-sub {
    font-family: var(--font-display, Oswald, sans-serif);
    font-size: clamp(28px, 5vw, 48px);
    font-weight: 700;
    line-height: 1;
    text-transform: uppercase;
    color: var(--red, #CC0000);
    margin: 6px 0 0;
    text-align: center;
    letter-spacing: 1px;
}
#thx-hero .thx-tagline {
    font-family: var(--font-body, Barlow, sans-serif);
    font-size: 17px;
    color: #d6d0c8;
    margin: 14px 0 0;
    text-align: center;
}

.thx-summary-card {
    width: 100%;
    max-width: 560px;
    background: #161616;
    border: 1px solid #2A2A2A;
    border-radius: 8px;
    overflow: hidden;
}
.thx-summary-header {
    font-family: var(--font-display, Oswald, sans-serif);
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
    color: var(--red, #CC0000);
    padding: 16px 22px;
    border-bottom: 1px solid #2A2A2A;
    background: rgba(204,0,0,0.06);
}
.thx-summary-body { padding: 8px 22px 18px; }
.thx-summary-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: 12px 0;
    border-bottom: 1px solid rgba(255,255,255,0.06);
    gap: 16px;
}
.thx-summary-row:last-child { border-bottom: none; }
.thx-summary-label {
    font-family: var(--font-condensed, Barlow Condensed, sans-serif);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: #8c8880;
}
.thx-summary-value {
    font-family: var(--font-body, Barlow, sans-serif);
    font-size: 15px;
    font-weight: 600;
    color: #fff;
    text-align: right;
    word-break: break-word;
}

#thx-cta .thx-contact {
    font-family: var(--font-body, Barlow, sans-serif);
    font-size: 16px;
    color: #d6d0c8;
    margin: 0;
    text-align: center;
}
#thx-cta .thx-contact a {
    color: #fff;
    text-decoration: underline;
    text-underline-offset: 3px;
}
#thx-cta .thx-contact a:hover { color: var(--red, #CC0000); }

/* Contact page (page id 124, slug contact) ============================ */
#contact-hero { text-align: center; }
#contact-hero .contact-hero__img img,
#contact-hero img { max-width: 480px; width: 100%; height: auto; display: block; margin: 0 auto; }

/* Contact trio uses shared cb-card / page-hero / cta-final BEM. Add per-page tweaks only. */
#contact-trio { border-top: 1px solid #1a1a1a; }
#contact-trio-grid { align-items: stretch; }
#contact-trio-grid > .e-con-inner,
#contact-trio-grid > .e-con { display: flex; }
@media (max-width: 768px) {
    #contact-trio-1, #contact-trio-2, #contact-trio-3 { width: 100% !important; }
}

/* Form section: 40/60 split, info col on the left */
#contact-form-section .e-con-inner { align-items: flex-start; }
@media (max-width: 900px) {
    #contact-form-info, #contact-form-col { width: 100% !important; }
}

/* Info col (left) */
.contact-info-col { color: var(--white, #fff); }
.contact-info-col .contact-info-heading {
    font-family: var(--font-display, Oswald, sans-serif);
    font-size: 22px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--white, #fff);
    margin: 0 0 14px;
    padding-bottom: 8px;
    border-bottom: 2px solid var(--red, #CC0000);
}
.contact-info-col .contact-info-heading + .contact-info-heading,
.contact-info-col .contact-hours + .contact-info-heading,
.contact-info-col .contact-lines + .contact-address {
    margin-top: 28px;
}
.contact-info-col .contact-address h3.contact-info-heading {
    font-size: 18px;
}
.contact-info-col p {
    color: var(--gray-100, #d6d0c8);
    font-family: var(--font-body, Barlow, sans-serif);
    font-size: 15px;
    line-height: 1.5;
    margin: 0;
}

/* Hours rows */
.contact-hours { display: flex; flex-direction: column; gap: 0; }
.contact-hours-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 8px 0;
    border-bottom: 1px solid #1f1f1f;
    font-family: var(--font-body, Barlow, sans-serif);
    font-size: 14px;
}
.contact-hours-row:last-child { border-bottom: none; }
.contact-hours-row .ch-day {
    color: var(--white, #fff);
    font-family: var(--font-condensed, "Barlow Condensed", sans-serif);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    font-size: 13px;
}
.contact-hours-row .ch-time {
    color: var(--gray-100, #d6d0c8);
    font-size: 14px;
}

/* Direct lines */
.contact-lines { display: flex; flex-direction: column; gap: 12px; margin-top: 4px; }
.contact-line {
    display: grid;
    grid-template-columns: 90px 1fr;
    grid-template-rows: auto auto;
    gap: 2px 12px;
    padding: 10px 0;
    border-bottom: 1px solid #1f1f1f;
}
.contact-line:last-child { border-bottom: none; }
.contact-line .cl-label {
    grid-column: 1;
    grid-row: 1 / span 2;
    align-self: center;
    color: var(--red, #CC0000);
    font-family: var(--font-condensed, "Barlow Condensed", sans-serif);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    font-size: 12px;
}
.contact-line .cl-value {
    grid-column: 2;
    grid-row: 1;
    color: var(--white, #fff);
    text-decoration: none;
    font-family: var(--font-body, Barlow, sans-serif);
    font-size: 15px;
    word-break: break-word;
}
.contact-line .cl-value:hover { color: var(--red, #CC0000); text-decoration: underline; }
.contact-line .cl-note {
    grid-column: 2;
    grid-row: 2;
    color: var(--gray-500, #8a847c);
    font-size: 12px;
}

/* Address block */
.contact-info-col .contact-address { margin-top: 28px; }
.contact-info-col .contact-address p { margin-top: 4px; }

/* Map */
.contact-map,
#contact-map-wrap {
    border: 1px solid var(--red, #CC0000);
    border-radius: 8px;
    overflow: hidden;
    line-height: 0;
    box-shadow: 0 8px 30px rgba(0,0,0,.5);
}
.contact-map iframe,
#contact-map-wrap iframe { display: block; width: 100%; height: 420px; border: 0; }
@media (max-width: 600px) { .contact-map iframe, #contact-map-wrap iframe { height: 320px; } }

/* Final CTA — uses shared #ndct-final-cta + .cta-final BEM (already styled globally) */
/* End contact page ===================================================== */

/* Contact page layout fixes (gap-aware widths so 33.33% + gap don't overflow) */
@media (min-width: 901px) {
    /* Trio: 3 columns. Three 33.33% cells + 2x 20px gap overflow.
       Use calc to subtract gap share, or just flex:1 with a min-width. */
    #contact-trio-grid > #contact-trio-1,
    #contact-trio-grid > #contact-trio-2,
    #contact-trio-grid > #contact-trio-3 {
        width: calc((100% - 40px) / 3) !important;
        flex: 0 0 calc((100% - 40px) / 3) !important;
    }
}
@media (min-width: 901px) {
    /* Form section: 40/60 split + 32px gap means 40% + 60% + 32 = 100% + 32 overflow.
       Subtract gap proportionally. */
    #contact-form-section > .e-con-inner > #contact-form-info {
        width: calc(40% - 12.8px) !important;
        flex: 0 0 calc(40% - 12.8px) !important;
    }
    #contact-form-section > .e-con-inner > #contact-form-col {
        width: calc(60% - 19.2px) !important;
        flex: 0 0 calc(60% - 19.2px) !important;
    }
}
/* End contact page layout fixes */


/* === Inline CTA card (replaces former inline forms on service pages) === */
.inline-cta {
    background: #0f0f0f;
    border: 1px solid #2a2a2a;
    border-radius: 8px;
    padding: 36px 32px;
    display: flex;
    flex-direction: column;
    gap: 14px;
    box-shadow: 0 12px 36px rgba(0,0,0,0.35);
}
.inline-cta__eyebrow {
    font-family: var(--font-condensed, Barlow Condensed, sans-serif);
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 3px;
    text-transform: uppercase;
    color: var(--red, #CC0000);
    display: inline-flex;
    align-items: center;
    gap: 10px;
}
.inline-cta__eyebrow::before {
    content: '';
    width: 28px;
    height: 2px;
    background: var(--red, #CC0000);
}
.inline-cta__heading {
    font-family: var(--font-display, Oswald, sans-serif);
    font-size: clamp(30px, 3.6vw, 44px);
    font-weight: 700;
    line-height: 1;
    text-transform: uppercase;
    color: #fff;
    margin: 0;
}
.inline-cta__accent { color: var(--red, #CC0000); }
.inline-cta__para {
    font-size: 16px;
    color: #d6d0c8;
    line-height: 1.7;
    margin: 0;
}
.inline-cta__bullets {
    list-style: none;
    margin: 8px 0 4px;
    padding: 0;
}
.inline-cta__bullets li {
    position: relative;
    padding: 9px 0 9px 26px;
    font-family: var(--font-condensed, Barlow Condensed, sans-serif);
    font-size: 16px;
    font-weight: 600;
    color: #f5f5f5;
    border-bottom: 1px solid #1f1f1f;
}
.inline-cta__bullets li:last-child { border-bottom: none; }
.inline-cta__bullets li::before {
    content: '✓';
    position: absolute;
    left: 0;
    top: 9px;
    color: var(--red, #CC0000);
}
.inline-cta__btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    margin-top: 6px;
    padding: 14px 28px;
    background: var(--red, #CC0000);
    color: #fff !important;
    font-family: var(--font-condensed, Barlow Condensed, sans-serif);
    font-size: 16px;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-decoration: none;
    border-radius: 4px;
    transition: background .2s ease, transform .2s ease;
    align-self: flex-start;
}
.inline-cta__btn::after {
    content: '→';
    margin-left: 4px;
    transition: transform .25s ease;
}
.inline-cta__btn:hover,
.inline-cta__btn:focus,
.inline-cta__btn:focus-visible {
    background: #990000;
    text-decoration: none;
    transform: translateY(-1px);
    outline: none;
}
.inline-cta__btn:hover::after { transform: translateX(4px); }
.inline-cta__or {
    margin: 4px 0 0;
    font-size: 14px;
    color: #8c8880;
}
.inline-cta__or a { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
.inline-cta__or a:hover { color: var(--red, #CC0000); }

/* === Footer Contact Us button (above socials) === */
.footer-contact-cta {
    margin: 16px 0 18px;
}
.footer-contact-cta__btn {
    display: inline-block;
    padding: 11px 24px;
    background: var(--red, #CC0000);
    color: #fff !important;
    font-family: var(--font-condensed, Barlow Condensed, sans-serif);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-decoration: none;
    border-radius: 4px;
    border: 1px solid var(--red, #CC0000);
    transition: background .2s ease, border-color .2s ease, color .2s ease;
}
.footer-contact-cta__btn:hover,
.footer-contact-cta__btn:focus {
    background: transparent;
    color: #fff !important;
    border-color: #fff;
    text-decoration: none;
}

/* === Resources mega-menu dropdown — Catalog + Print Templates === */
.header-nav .elementor-nav-menu li.menu-item-has-children > a::after {
    content: 'BE';
    margin-left: 6px;
    font-size: 9px;
    color: var(--red, #CC0000);
    transition: transform .2s ease;
}
.header-nav .elementor-nav-menu li.menu-item-has-children:hover > a::after {
    transform: rotate(180deg);
}
.header-nav .elementor-nav-menu .sub-menu {
    background: #0a0a0a !important;
    border: 1px solid #2a2a2a !important;
    border-top: 2px solid var(--red, #CC0000) !important;
    padding: 6px 0 !important;
    min-width: 180px;
    box-shadow: 0 16px 40px rgba(0,0,0,0.5);
    border-radius: 0 0 4px 4px;
    z-index: 9999 !important;
}
.header-nav .elementor-nav-menu .sub-menu li a,
.header-nav .elementor-nav-menu .sub-menu li.menu-item a.elementor-sub-item {
    padding: 10px 18px !important;
    color: #f5f5f5 !important;
    font-size: 13px !important;
    letter-spacing: 0.5px;
    background: transparent !important;
    border-bottom: 1px solid transparent;
}
.header-nav .elementor-nav-menu .sub-menu li a:hover,
.header-nav .elementor-nav-menu .sub-menu li a:focus {
    background: rgba(204,0,0,0.10) !important;
    color: var(--red, #CC0000) !important;
}


/* === Inquiry CTA (sibling under inline inquiry form) === */
.inquiry-cta {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 12px;
    margin-top: 4px;
}
.inquiry-cta__divider {
    display: flex;
    align-items: center;
    gap: 12px;
    color: #8c8880;
    font-family: var(--font-condensed, Barlow Condensed, sans-serif);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
    margin: 4px 0;
}
.inquiry-cta__divider::before,
.inquiry-cta__divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: #2a2a2a;
}
.inquiry-cta__btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 14px 22px;
    background: transparent;
    color: #fff !important;
    font-family: var(--font-condensed, Barlow Condensed, sans-serif);
    font-size: 15px;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-decoration: none;
    border-radius: 4px;
    border: 1px solid var(--red, #CC0000);
    transition: background .2s ease, color .2s ease, transform .2s ease;
}
.inquiry-cta__btn:hover,
.inquiry-cta__btn:focus,
.inquiry-cta__btn:focus-visible {
    background: var(--red, #CC0000);
    color: #fff !important;
    text-decoration: none;
    transform: translateY(-1px);
    outline: none;
}
.inquiry-cta__or {
    margin: 0;
    font-size: 13px;
    color: #8c8880;
    text-align: center;
}
.inquiry-cta__or a {
    color: #fff;
    text-decoration: underline;
    text-underline-offset: 3px;
}
.inquiry-cta__or a:hover { color: var(--red, #CC0000); }


/* === Specials: centered eyebrow + claim-deal anchor offset === */
.rfm-sh--center .rfm-sh__tag,
.rfm-sh[data-align="center"] .rfm-sh__tag,
.elementor-element:has([data-align="center"]) .rfm-sh__tag {
    justify-content: center;
    align-self: center;
    margin-left: auto;
    margin-right: auto;
}
/* Belt-and-suspenders: any section-header tag inside a section whose
   inner widget container is centered, center the tag. */
.elementor-element-aa56749b .rfm-sh__tag,
.elementor-element-5bca196f .rfm-sh__tag,
.elementor-element-4fc9819b .rfm-sh__tag,
.elementor-element-ea5d3900 .rfm-sh__tag,
.elementor-element-b7b31351 .rfm-sh__tag,
.elementor-element-c53988e7 .rfm-sh__tag {
    justify-content: center;
    align-self: center;
    margin-left: auto;
    margin-right: auto;
    width: auto;
    display: inline-flex !important;
}
/* Wrap the tag block in flex so the inline-flex centers within its parent */
.rfm-sh:has([data-align="center"]) > * {
    text-align: center;
}
#claim-deal {
    scroll-margin-top: 80px;
}


/* === Specials: REAL eyebrow centering (.specials-smb-head-inner) === */
.specials-smb-head-inner,
.specials-smb-head-inner--align-left {
    text-align: center !important;
    align-items: center !important;
}
.specials-smb-head-inner__eyebrow {
    display: inline-flex !important;
    margin: 0 auto !important;
    justify-content: center !important;
}
.specials-smb-head-inner__title,
.specials-smb-head-inner__sub {
    text-align: center !important;
}

/* ============================================================
   2026-05-29 form polish + claim-flow visibility
   ============================================================ */

/* Slight breathing room between label and input on every Elementor form
   in the theme. Was visually 0 — labels were stuck to the input boxes. */
[id^="ndct-"] .elementor-field-group > label,
[id^="ndct-"] .elementor-field-group .elementor-field-label,
.ndct-form .elementor-field-group > label,
.ndct-form .elementor-field-group .elementor-field-label,
.elementor-form .elementor-field-group .elementor-field-label {
    margin-bottom: 6px !important;
}

/* "No spam. We respond within 1 business day." bump to 14px (was 12px). */
.ndct-form-note,
p.ndct-form-note {
    font-size: 14px !important;
}

/* "Or call 210.858.8825" — add real breathing room between the label and
   the underlined phone link. Visually 1 character of space was reading as
   tight against the underline. */
.inquiry-cta__or a {
    margin-left: 6px;
}

/* Claim flow: hide the Offer + Offer Marker form fields until the visitor
   actually arrived through a "Claim This Offer / Claim Package" link.
   The JS shim toggles .ndct-claim-flow on <body> to reveal them. */
.elementor-field-group.elementor-field-type-text.elementor-field-group-offer,
.elementor-field-group.elementor-field-type-checkbox.elementor-field-group-offer_marker {
    display: none;
}
body.ndct-claim-flow .elementor-field-group.elementor-field-type-text.elementor-field-group-offer,
body.ndct-claim-flow .elementor-field-group.elementor-field-type-checkbox.elementor-field-group-offer_marker {
    display: flex !important;
}

/* Read-only Offer field — distinct so staff/visitor knows it auto-filled. */
body.ndct-claim-flow input[name="form_fields[offer]"] {
    background: rgba(204, 0, 0, 0.08) !important;
    border-color: var(--red, #CC0000) !important;
    color: #fff !important;
    font-weight: 700;
    cursor: default;
}

/* ============================================================
   Testimonials hover clip fix — 2026-05-29.
   .reviews__carousel has overflow:hidden for the carousel scroll;
   combined with the .testimonial-card hover translateY(-2/-3px),
   the lifted card's top border gets clipped. Add top padding to
   the slide so the lift has clearance.
   ============================================================ */
.reviews__carousel,
.reviews__slide {
    padding-top: 6px !important;
}
.reviews__track {
    overflow: visible;
}

/* Contact page form column — reduce dead space above the first field.
   The form widget had ~30px implicit top padding from the column container. */
[data-element_id="contact-form-col"] > .e-con-inner,
[data-element_id="contact-form-col"] .elementor-widget-form > .elementor-widget-container,
[data-element_id="contact-form-col"] .elementor-form-fields-wrapper {
    padding-top: 0 !important;
    margin-top: 0 !important;
}
[data-element_id="contact-form-col"] {
    padding-top: 16px !important;
}

/* Header customer login → avatar-only icon. The anchor sits to the
   right of the social icons in the topbar; restyle so it's a circle
   button matching the social-icon vibe. */
.promo-social__login {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    margin-left: 10px !important;
    padding: 0 !important;
    border-left: none !important;
    background: rgba(255,255,255,0.08);
    transition: background .15s ease, transform .15s ease;
    font-size: 0 !important; /* hide any "CUSTOMER LOGIN" text */
}
.promo-social__login::before {
    content: '';
    width: 16px;
    height: 16px;
    display: inline-block;
    background-color: #fff;
    -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/><circle cx='12' cy='7' r='4'/></svg>") center/contain no-repeat;
            mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/><circle cx='12' cy='7' r='4'/></svg>") center/contain no-repeat;
}
.promo-social__login:hover,
.promo-social__login:focus {
    background: rgba(255,255,255,0.18);
    transform: translateY(-2px);
}

/* ============================================================
   Contact page sidebar (page 124) — 2026-05-29 polish:
   - 14px body for address/phone/hours
   - NDCTees brand line above the address
   - Phone link bold white, no redundant "Mon-Fri 9am-6pm" suffix
   - Phone + Office Hours headers get top-margin breathing room
   ============================================================ */
.contact-info-col {
    line-height: 1.5;
}
.contact-info-col .contact-address-line,
.contact-info-col .contact-phone-line,
.contact-info-col .contact-hours,
.contact-info-col .contact-hours-row {
    font-size: 14px !important;
    color: #fff;
}
.contact-info-col .contact-address-brand {
    display: block;
    font-family: var(--font-condensed, sans-serif);
    font-weight: 700;
    color: #fff;
    font-size: 14px;
    margin-bottom: 4px;
}
.contact-info-col .contact-address-line {
    margin-top: 0;
    margin-bottom: 0;
}
.contact-info-col .contact-phone-line {
    margin: 0;
}
.contact-info-col .contact-phone-line .cl-value {
    color: #fff !important;
    font-weight: 700;
    text-decoration: none;
    font-size: 14px;
}
.contact-info-col .contact-phone-line .cl-value:hover,
.contact-info-col .contact-phone-line .cl-value:focus { color: var(--red, #CC0000) !important; }
.contact-info-col .contact-info-heading--spaced {
    margin-top: 28px !important;
}
.contact-info-col .contact-hours-row {
    padding: 4px 0;
}

/* Mobile header phone — show digits next to the icon. The anchor uses
   inline-flex from the existing rule so this just adds typography for
   the new span. Hidden on desktop where the full header NAP renders. */
.header-mobile-phone {
    gap: 6px;
}
.header-mobile-phone__num {
    font-family: var(--font-condensed, sans-serif);
    font-weight: 700;
    letter-spacing: 0.5px;
    font-size: 14px;
    color: inherit;
    white-space: nowrap;
}
@media (max-width: 380px) {
    /* Tiny phones — drop the digits, keep just the icon to avoid wrap. */
    .header-mobile-phone__num { display: none; }
}

/* ── Thank-you "Your Submission" block (2026-06-01: moved off inline styles) ── */
.thx-submission{margin:24px auto;padding:18px 20px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);border-radius:8px;max-width:720px;}
.thx-submission__title{margin:0 0 12px 0;font-family:var(--font-display,sans-serif);font-size:18px;text-transform:uppercase;letter-spacing:1px;color:#fff;}
.thx-sub-row{display:flex;gap:16px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.06);font-size:14px;line-height:1.5;}
.thx-sub-label{flex:0 0 130px;color:#999;font-family:var(--font-condensed,sans-serif);font-size:11px;text-transform:uppercase;letter-spacing:1px;font-weight:700;padding-top:2px;}
.thx-sub-value{flex:1;color:#fff;}
.thx-sub-value--pre{white-space:pre-wrap;}
.thx-na{color:#777;font-style:italic;}
.thx-shirt-line{padding:2px 0;}
.thx-graphics{display:flex;flex-wrap:wrap;gap:12px;}
.thx-graphic{display:flex;flex-direction:column;align-items:flex-start;gap:4px;max-width:120px;}
.thx-graphic__thumb{width:120px;height:120px;object-fit:cover;border-radius:6px;border:1px solid rgba(255,255,255,.15);background:#0c0f14;}
.thx-graphic__name{font-size:12px;color:#fff;word-break:break-all;text-decoration:underline;}
.thx-note{margin:14px 0 0 0;font-size:12px;color:#999;line-height:1.5;}
.thx-note__phone{color:#fff;font-weight:700;font-size:14px;text-decoration:none;}
.thx-status{padding:14px 16px;background:rgba(34,197,94,.08);border:1px solid rgba(34,197,94,.4);border-radius:6px;font-size:14px;color:#fff;margin:0 0 14px 0;}
.thx-status[hidden]{display:none;}
.thx-status--muted{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.12);color:#999;}
.thx-status__label{font-family:var(--font-condensed,sans-serif);font-size:11px;text-transform:uppercase;letter-spacing:1px;font-weight:700;color:#999;margin-bottom:6px;}
.thx-status__value{font-size:18px;font-weight:700;color:#22c55e;}
.thx-status__meta{font-size:12px;color:#999;margin-top:4px;}
.thx-note a.thx-note__phone,.thx-note a.thx-note__phone:link,.thx-note a.thx-note__phone:visited,.thx-note a.thx-note__phone:hover{color:#fff !important;font-weight:700;font-size:14px;text-decoration:none;}

/* ── rfm_v2_addon_card widget (BEM children; .addon root + hover already defined above) ── */
.addon__prefix { font-family: var(--font-condensed); font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--red); margin-bottom: 6px; }
.addon__title  { font-family: var(--font-display); font-size: 18px; font-weight: 600; text-transform: uppercase; color: #fff; margin: 0 0 6px; }
.addon__price  { font-family: var(--font-display); font-size: 28px; font-weight: 700; color: var(--red); line-height: 1; margin: 0 0 10px; }
.addon__desc   { font-size: 13px; color: var(--gray-300); line-height: 1.6; margin: 0; }
.addon__desc p { margin: 0 0 8px; } .addon__desc p:last-child { margin-bottom: 0; }
