/* ===========================================================================
   NEW LIGHT DIGITAL — Homepage v1.50 (polished design)
   Editorial · restrained · red as accent · brand-faithful
   Type pair: Fraunces (EN/RO display) + Playfair Display (RU display, Cyrillic) + Poppins (UI/body)
   =========================================================================== */

/* ---------- DESIGN TOKENS ----------
   Two-layer architecture:
   1. BRAND tokens (--brand-*) are IMMUTABLE — they're the New Light Digital
      paint colors, fixed by the brand guide. These never change between
      light and dark mode.
   2. SEMANTIC tokens (--color-*) are theme-dependent — they reference brand
      tokens for their values, and those references flip in dark mode.

   When writing component CSS, use SEMANTIC tokens for anything that should
   adapt to the active theme (page bg, body text, card surfaces, borders).
   Use BRAND tokens directly when a value should stay fixed regardless of
   theme (e.g., the testimonial card is intentionally dark in both modes;
   the brand red is always red).

   The legacy tokens (--ink, --white, etc.) are kept as aliases of the
   brand tokens so existing CSS that uses them still works as fixed
   colors. New rules should prefer the new --brand-* / --color-* names. */
:root {
  /* CSS-level color-scheme declaration. Tells the browser the page is
     designed for both light and dark modes — pairs with the meta tag in
     <head>. This stops Samsung Internet's automatic force-dark inversion
     and lets browsers render form controls / scrollbars to match. */
  color-scheme: light dark;

  /* ===== Brand colors (immutable, per brand guide) ===== */
  --brand-ink:        #0F1A1D;   /* Eerie Black — primary dark */
  --brand-ink-soft:   #1A2429;   /* slightly lifted dark */
  --brand-paper:      #FFFFFF;   /* pure white */
  --brand-off-white:  #FAFAFB;   /* almost-white */
  --brand-red:        #FF213D;   /* Awesome Red */
  --brand-red-dark:   #C40023;
  --brand-red-pale:   #FFF5F6;
  --brand-red-glow:   rgba(255, 33, 61, 0.08);
  --brand-gray-line:  #E8EAED;
  --brand-gray-soft:  #F4F5F7;
  --brand-gray-mid:   #9CA3AF;
  --brand-gray-deep:  #4A5560;

  /* ===== Legacy aliases (immutable, point to brand tokens) =====
     Existing CSS still uses these names — keep them stable.
     For NEW theme-adaptive styling, use --color-* instead. */
  --ink:        var(--brand-ink);
  --ink-soft:   var(--brand-ink-soft);
  --white:      var(--brand-paper);
  --off-white:  var(--brand-off-white);
  --red:        var(--brand-red);
  --red-dark:   var(--brand-red-dark);
  --red-pale:   var(--brand-red-pale);
  --red-glow:   var(--brand-red-glow);
  --gray-line:  var(--brand-gray-line);
  --gray-soft:  var(--brand-gray-soft);
  --gray-mid:   var(--brand-gray-mid);
  --gray-deep:  var(--brand-gray-deep);

  /* ===== Semantic tokens (theme-adaptive) =====
     These define ROLES, not specific colors. In light mode they map to
     brand colors that read on light. In dark mode (below) the same roles
     map to brand colors that read on dark.

     Sections that should "stay the same in both modes" (testimonial cards,
     How We Engage, footer, pre-footer CTA) use --brand-ink directly and
     skip the semantic layer — they're intentionally dark always. */
  --color-bg:           var(--brand-paper);      /* page background */
  --color-bg-alt:       var(--brand-off-white);  /* subtly tinted sections */
  --color-bg-soft:      var(--brand-gray-soft);  /* slightly contrasted bands */
  --color-surface:      var(--brand-paper);      /* cards, panels */
  --color-surface-alt:  var(--brand-off-white);  /* slightly recessed surface */
  --color-text:         var(--brand-ink);        /* primary text */
  --color-text-soft:    var(--brand-gray-deep);  /* secondary body text */
  --color-text-mute:    var(--brand-gray-mid);   /* eyebrows, captions */
  --color-border:       var(--brand-gray-line);  /* dividers, card edges */
  --color-border-strong: var(--brand-ink);       /* emphatic borders */
  --color-header-bg:           rgba(255, 255, 255, 0.85);  /* frosted glass header */
  --color-header-bg-scrolled:  rgba(255, 255, 255, 0.95);

  /* Type */
  --font-display: 'Fraunces', 'Times New Roman', serif;
  --font-body:    'Poppins', 'Inter', -apple-system, sans-serif;
  --font-display-opsz: "opsz" 144;
  --font-display-italic: "opsz" 144, "SOFT" 50;

  /* Shadows — themed via separate dark-mode override below */
  --shadow-soft:  0  2px 12px rgba(15, 26, 29, 0.04);
  --shadow-card:  0  6px 24px rgba(15, 26, 29, 0.06);
  --shadow-lift:  0 14px 40px rgba(15, 26, 29, 0.10);

  /* Layout */
  --container:    1280px;
  --gutter:       24px;

  /* Motion */
  --ease:     cubic-bezier(0.2, 0.7, 0.2, 1);
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --t-fast:   180ms;
  --t-med:    280ms;
  --t-slow:   480ms;
}

@media (min-width: 1024px) {
  :root { --gutter: 56px; }
}

/* ============================================================================
   DARK MODE
   ============================================================================
   Activates when (a) the OS prefers dark mode, OR (b) the page is manually
   toggled via [data-theme="dark"]. Manual [data-theme="light"] forces light
   regardless of OS preference.

   Only the SEMANTIC tokens flip. Brand tokens (--brand-*) stay fixed —
   they're the brand identity. Elements that use --brand-ink directly as
   background (testimonial cards, footer, How We Engage) stay dark in
   both modes, which is correct.

   Legacy aliases (--ink, --white, etc.) also stay fixed. They are used
   throughout the existing CSS for intentionally-dark or intentionally-
   light surfaces. We DO NOT flip them. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --color-bg:           var(--brand-ink);
    --color-bg-alt:       #14201F;
    --color-bg-soft:      var(--brand-ink-soft);
    --color-surface:      var(--brand-ink-soft);
    --color-surface-alt:  #14201F;
    --color-text:         var(--brand-paper);
    --color-text-soft:    rgba(255, 255, 255, 0.72);
    --color-text-mute:    rgba(255, 255, 255, 0.5);
    --color-border:       rgba(255, 255, 255, 0.1);
    --color-border-strong: rgba(255, 255, 255, 0.3);
    --color-header-bg:           rgba(15, 26, 29, 0.85);
    --color-header-bg-scrolled:  rgba(15, 26, 29, 0.95);

    --shadow-soft: 0  2px 12px rgba(0, 0, 0, 0.35);
    --shadow-card: 0  6px 24px rgba(0, 0, 0, 0.45);
    --shadow-lift: 0 14px 40px rgba(0, 0, 0, 0.55);
  }
}
/* Manual dark mode override — toggleable via data-theme="dark". */
:root[data-theme="dark"] {
  --color-bg:           var(--brand-ink);
  --color-bg-alt:       #14201F;
  --color-bg-soft:      var(--brand-ink-soft);
  --color-surface:      var(--brand-ink-soft);
  --color-surface-alt:  #14201F;
  --color-text:         var(--brand-paper);
  --color-text-soft:    rgba(255, 255, 255, 0.72);
  --color-text-mute:    rgba(255, 255, 255, 0.5);
  --color-border:       rgba(255, 255, 255, 0.1);
  --color-border-strong: rgba(255, 255, 255, 0.3);
  --color-header-bg:           rgba(15, 26, 29, 0.85);
  --color-header-bg-scrolled:  rgba(15, 26, 29, 0.95);

  --shadow-soft: 0  2px 12px rgba(0, 0, 0, 0.35);
  --shadow-card: 0  6px 24px rgba(0, 0, 0, 0.45);
  --shadow-lift: 0 14px 40px rgba(0, 0, 0, 0.55);
}

/* ---------- RESET ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.6;
  color: var(--color-text);
  background: var(--color-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  /* Defensive: prevent any rogue element (overflowing SVG, off-canvas decoration,
     a third-party widget) from causing the page to scroll horizontally on
     mobile. `clip` doesn't establish a scroll container, so position:sticky on
     .site-header still works. Falls back to `hidden` in older browsers. */
  overflow-x: hidden;
  overflow-x: clip;
}
img, svg, video { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: 0; background: transparent; }
ul, ol { list-style: none; padding: 0; margin: 0; }

/* ---------- TYPOGRAPHY ---------- */
h1, h2, h3, h4 { margin: 0; color: var(--color-text); }

.h-hero {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-weight: 500;
  font-size: clamp(40px, 6.5vw, 80px);
  line-height: 1;
  letter-spacing: -0.035em;
}
.h-hero em {
  font-style: italic;
  font-variation-settings: var(--font-display-italic);
  color: var(--red);
  font-weight: 500;
}

.h-section {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-weight: 500;
  font-size: clamp(32px, 4vw, 52px);
  line-height: 1.05;
  letter-spacing: -0.025em;
}
.h-section em {
  font-style: italic;
  font-variation-settings: var(--font-display-italic);
  color: var(--red);
  font-weight: 500;
}

/* ---------- LANGUAGE-SPECIFIC FONT OVERRIDE ---------- */
/* Russian doesn't get Cyrillic support from Fraunces. Swap the display
   font for any element under html[lang^="ru"]. Playfair Display has full
   Cyrillic. We null the variation-settings since Playfair has no opsz axis. */
html[lang^="ru"] {
  --font-display: 'Playfair Display', 'Times New Roman', serif;
  --font-display-opsz: normal;
  --font-display-italic: normal;
}

.lead {
  font-size: clamp(16px, 1.3vw, 19px);
  line-height: 1.6;
  color: var(--color-text-soft);
  max-width: 56ch;
}

.eyebrow {
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--red);
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.eyebrow::before {
  content: "";
  width: 28px;
  height: 1px;
  background: var(--red);
}
.eyebrow--plain::before { display: none; }

.container {
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 var(--gutter);
}

/* ---------- BUTTONS ---------- */
.btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  height: 54px;
  padding: 0 28px;
  font-size: 15px;
  font-weight: 500;
  line-height: 1;
  border-radius: 6px;
  border: 1.5px solid transparent;
  letter-spacing: -0.005em;
  transition: background-color var(--t-med) var(--ease),
              border-color var(--t-med) var(--ease),
              color var(--t-med) var(--ease),
              transform 140ms ease,
              box-shadow var(--t-med) var(--ease),
              height var(--t-med) var(--ease),
              padding var(--t-med) var(--ease),
              font-size var(--t-med) var(--ease);
  white-space: nowrap;
  overflow: hidden;
}
.btn--primary {
  background: var(--ink);
  color: var(--white);
  border-color: var(--ink);
}
.btn--primary:hover, .btn--primary:focus-visible {
  background: var(--red);
  border-color: var(--red);
  box-shadow: 0 12px 30px rgba(255, 33, 61, 0.28);
}
.btn--primary:active { transform: translateY(1px); }
.btn--outline {
  background: transparent;
  color: var(--color-text);
  border-color: var(--color-text);
}
.btn--outline:hover, .btn--outline:focus-visible {
  background: var(--ink);
  color: var(--white);
  border-color: var(--ink);
}
.btn__arrow {
  display: inline-block;
  transition: transform var(--t-med) var(--ease);
}
.btn:hover .btn__arrow { transform: translateX(4px); }

.link-red {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 500;
  color: var(--red);
  position: relative;
}
.link-red::after {
  content: "";
  width: 0;
  height: 1.5px;
  background: currentColor;
  transition: width var(--t-med) var(--ease);
  position: absolute;
  bottom: -3px;
  left: 0;
}
.link-red:hover { color: var(--red-dark); }
.link-red:hover::after { width: 20px; }
.link-red__arrow {
  display: inline-block;
  transition: transform var(--t-med) var(--ease);
}
.link-red:hover .link-red__arrow { transform: translateX(4px); }

:focus-visible {
  outline: 2px solid var(--red);
  outline-offset: 3px;
  border-radius: 4px;
}
.btn:focus-visible { outline-offset: 4px; }

/* ---------- HEADER ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--color-header-bg);
  backdrop-filter: saturate(180%) blur(12px);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid transparent;
  transition: background-color var(--t-med) var(--ease),
              border-color var(--t-med) var(--ease),
              box-shadow var(--t-med) var(--ease);
}
/* After 80px scroll, the header tightens: less vertical space, smaller logo,
   denser feel — keeps focus on content as user moves down the page. */
.site-header.is-scrolled {
  background: var(--color-header-bg-scrolled);
  border-bottom-color: var(--color-border);
  box-shadow: var(--shadow-soft);
}
.site-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 84px;
  gap: 40px;
  transition: height var(--t-med) var(--ease);
}
.site-header.is-scrolled .site-header__inner {
  height: 64px;
}
.brand {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
}
.brand__logo {
  height: 40px;
  width: auto;
  display: block;
  transition: height var(--t-med) var(--ease);
}
/* Theme-aware logo swap: light mode shows red logo, dark mode shows color logo.
   By default the dark logo is hidden; dark mode reveals it and hides the light one. */
.brand__logo--dark { display: none; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .brand__logo--light { display: none; }
  :root:not([data-theme="light"]) .brand__logo--dark  { display: block; }
}
:root[data-theme="dark"] .brand__logo--light { display: none; }
:root[data-theme="dark"] .brand__logo--dark  { display: block; }
.brand--header .brand__logo { height: 38px; }
.site-header.is-scrolled .brand--header .brand__logo { height: 30px; }
.brand--footer .brand__logo { height: 44px; }
@media (max-width: 540px) {
  .brand--header .brand__logo { height: 32px; }
  .site-header.is-scrolled .brand--header .brand__logo { height: 26px; }
}

.site-nav { display: none; }
.site-nav__list { display: flex; gap: 36px; list-style: none; padding: 0; margin: 0; }
/* Style both the explicit .site-nav__link class (used in static markup) AND
   the implicit <a> child of <li> (used when wp_nav_menu() renders the
   menu in WordPress). This way the same CSS works in mockup and production. */
.site-nav__link,
.site-nav__list > li > a {
  font-size: 15px;
  font-weight: 500;
  color: var(--color-text);
  position: relative;
  padding: 6px 0;
  transition: color var(--t-med) var(--ease);
  display: inline-block;
  text-decoration: none;
}
.site-nav__link::after,
.site-nav__list > li > a::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 50%;
  width: 0;
  height: 2px;
  background: var(--red);
  transition: width var(--t-med) var(--ease);
  transform: translateX(-50%);
}
.site-nav__link:hover::after,
.site-nav__link--active::after,
.site-nav__list > li > a:hover::after,
/* WP uses .current-menu-item on the active page's <li>. */
.site-nav__list > li.current-menu-item > a::after,
.site-nav__list > li.current_page_item > a::after { width: 24px; }
.site-nav__link:hover,
.site-nav__list > li > a:hover { color: var(--red); }

/* ---- Submenu dropdowns ----
   WP menus may include nested <ul class="sub-menu">. The mockup design
   doesn't visualize these, but if an editor builds parent/child menu items
   in WP Admin we render them as a hover dropdown panel rather than letting
   them expand the top-level row inline. Hidden by default, shown on hover/
   focus-within of the parent <li>. Keyboard-accessible via :focus-within. */
.site-nav__list .sub-menu {
  position: absolute;
  top: 100%;
  left: -16px;
  min-width: 240px;
  padding: 12px 0;
  margin: 0;
  list-style: none;
  background: var(--color-header-bg, var(--color-surface));
  border: 1px solid var(--color-border);
  border-radius: 12px;
  box-shadow: 0 14px 40px rgba(15, 26, 29, 0.10);
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  transition: opacity var(--t-med) var(--ease), transform var(--t-med) var(--ease), visibility 0s linear var(--t-med);
  z-index: 100;
}
.site-nav__list > li { position: relative; }
.site-nav__list > li:hover > .sub-menu,
.site-nav__list > li:focus-within > .sub-menu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition: opacity var(--t-med) var(--ease), transform var(--t-med) var(--ease), visibility 0s;
}
.site-nav__list .sub-menu li { list-style: none; }
.site-nav__list .sub-menu a {
  display: block;
  padding: 8px 18px;
  font-size: 14px;
  font-weight: 500;
  color: var(--color-text);
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--t-med) var(--ease), background var(--t-med) var(--ease);
}
.site-nav__list .sub-menu a:hover { color: var(--red); background: rgba(255, 33, 61, 0.04); }
/* The parent <li>'s <a> may have a caret indicator span — keep neat. */
.site-nav__list > li.menu-item-has-children > a .arrow {
  display: inline-block;
  margin-left: 6px;
  width: 0; height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 4px solid currentColor;
  vertical-align: middle;
  transition: transform var(--t-med) var(--ease);
}
.site-nav__list > li.menu-item-has-children:hover > a .arrow { transform: rotate(180deg); }

.header-cta { display: none; }
@media (min-width: 960px) {
  .site-nav { display: block; }
  .header-cta { display: inline-flex; }
}
/* When the header collapses on scroll, the CTA button shrinks too so it
   stays proportional to the slimmer header — height matches the nav rhythm,
   padding tightens, font holds. Otherwise the button looks left behind. */
.site-header.is-scrolled .header-cta {
  height: 42px;
  padding: 0 18px;
  font-size: 14px;
  border-width: 1.25px;
}

/* Language switcher — EN · RO · RU.
   Sits in the nav (desktop) between the menu and the CTA. The current
   language is bold and slightly larger; others are muted. Each is a link
   pointing to its language version. In WordPress this gets generated by
   WPML's language switcher widget — we'll match the markup classes when
   we integrate. Hidden on mobile (<960px); the burger menu will include
   its own copy. */
.lang-switch {
  display: none;
  align-items: center;
  gap: 8px;
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
@media (min-width: 960px) {
  .lang-switch { display: inline-flex; }
}
.lang-switch__item {
  color: var(--color-text-mute);
  padding: 4px 2px;
  transition: color var(--t-med) var(--ease);
  position: relative;
}
.lang-switch__item:hover {
  color: var(--red);
}
.lang-switch__item.is-active {
  color: var(--color-text);
  font-weight: 700;
}
.lang-switch__item.is-active::after {
  content: "";
  position: absolute;
  bottom: -2px;
  left: 2px;
  right: 2px;
  height: 1.5px;
  background: var(--red);
}
.lang-switch__divider {
  color: var(--color-border);
  font-weight: 700;
}
/* When the header is scrolled (compact), the language switcher tightens to
   match the smaller nav rhythm. */
.site-header.is-scrolled .lang-switch {
  font-size: 11px;
}

/* Footer variant: always visible (footer never collapses to burger),
   white-on-dark for the dark footer surface, has a "Language" label,
   slightly larger gap so it breathes within the brand column. */
.lang-switch--footer {
  display: inline-flex;
  margin-top: 20px;
  gap: 10px;
  font-size: 11px;
}
.lang-switch--footer .lang-switch__label {
  color: rgba(255, 255, 255, 0.4);
  margin-right: 4px;
  letter-spacing: 0.12em;
}
.lang-switch--footer .lang-switch__item {
  color: rgba(255, 255, 255, 0.55);
}
.lang-switch--footer .lang-switch__item:hover {
  color: var(--red);
}
.lang-switch--footer .lang-switch__item.is-active {
  color: var(--white);
}
.lang-switch--footer .lang-switch__divider {
  color: rgba(255, 255, 255, 0.2);
}

.mobile-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border: 1px solid var(--color-border);
  border-radius: 8px;
}
@media (min-width: 960px) { .mobile-toggle { display: none; } }
.mobile-toggle__bars {
  width: 18px;
  height: 12px;
  position: relative;
}
.mobile-toggle__bars span,
.mobile-toggle__bars::before,
.mobile-toggle__bars::after {
  content: "";
  position: absolute;
  left: 0;
  width: 100%;
  height: 1.5px;
  background: var(--ink);
}
.mobile-toggle__bars::before { top: 0; }
.mobile-toggle__bars span { top: 50%; transform: translateY(-50%); display: block; }
.mobile-toggle__bars::after { bottom: 0; }

/* ---------- HERO ---------- */
.hero {
  position: relative;
  padding: clamp(56px, 8vw, 120px) 0 clamp(64px, 8vw, 120px);
  overflow: hidden;
}
.hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 0%, var(--color-bg-alt) 100%);
  z-index: -1;
}
.hero__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(40px, 5vw, 80px);
  align-items: center;
}
@media (min-width: 960px) {
  .hero__inner { grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); }
}
.hero__copy {
  position: relative;
  animation: fadeUp 0.9s var(--ease-out) both;
}
.hero__eyebrow { margin-bottom: 28px; }
.hero__title { margin-bottom: 32px; }
.hero__lead { margin-bottom: 40px; max-width: 540px; }
.hero__ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin-bottom: 36px;
}
.hero__clutch {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 10px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 100px;
  font-size: 13px;
  color: var(--color-text-soft);
  margin-bottom: 14px;
  transition: border-color var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease);
}
.hero__clutch:hover {
  border-color: var(--color-text);
  box-shadow: var(--shadow-soft);
}
.hero__clutch strong { color: var(--color-text); font-weight: 600; }
.stars {
  display: inline-flex;
  gap: 1px;
  color: #FFAA00;
  font-size: 13px;
  letter-spacing: 1px;
}
.hero__clutch-divider {
  width: 1px;
  height: 14px;
  background: var(--color-border);
}
.hero__location {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--color-text-soft);
}
.hero__location svg { width: 14px; height: 14px; color: var(--red); }

.hero__visual {
  position: relative;
  min-height: 420px;
  animation: fadeUp 1.1s var(--ease-out) 0.15s both;
}
.hero__composition {
  position: relative;
  background: var(--ink);
  color: var(--white);
  border-radius: 24px;
  padding: clamp(40px, 4vw, 56px);
  height: 100%;
  min-height: 480px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.hero__composition::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);
  background-size: 40px 40px;
  pointer-events: none;
}
.hero__composition-top {
  position: relative;
  z-index: 1;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.5);
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.hero__composition-top-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--red);
  animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: 0.5; transform: scale(0.85); }
}
.hero__equation {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.hero__eq-row {
  display: flex;
  align-items: baseline;
  gap: 18px;
}
.hero__eq-op {
  font-family: var(--font-display);
  font-variation-settings: "opsz" 144, "wght" 700;
  font-style: italic;
  color: var(--red);
  font-weight: 700;
  font-size: clamp(34px, 3.5vw, 50px);
  opacity: 0.9;
}
.hero__eq-word {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-weight: 500;
  letter-spacing: -0.04em;
  line-height: 0.95;
  color: var(--white);
}
.eq-website {
  font-size: clamp(36px, 4.5vw, 56px);
  font-weight: 400;
  font-style: italic;
  color: rgba(255, 255, 255, 0.7);
}
.eq-marketing {
  font-size: clamp(48px, 6vw, 76px);
  color: rgba(255, 255, 255, 0.85);
}
.eq-growth {
  font-size: clamp(64px, 9vw, 120px);
  font-weight: 600;
  position: relative;
  display: inline-block;
}
.eq-growth::after {
  content: "";
  position: absolute;
  bottom: 4px;
  left: 0;
  width: 100%;
  height: 6px;
  background: var(--red);
  transform: scaleX(0);
  transform-origin: left;
  animation: underline 1.4s var(--ease-out) 1.2s forwards;
  border-radius: 4px;
}
/* On mobile, the smaller font size makes the underline appear visually
   closer to the text — nudge it down 1px so it has the same breathing
   room as desktop. */
@media (max-width: 719px) {
  .eq-growth::after { bottom: 3px; }
}
@keyframes underline { to { transform: scaleX(1); } }
.hero__composition-bottom {
  position: relative;
  z-index: 1;
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.4);
}
.hero__composition-stat {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-style: italic;
  font-weight: 400;
  font-size: 22px;
  letter-spacing: -0.02em;
  text-transform: none;
  color: var(--white);
  display: block;
  margin-top: 4px;
}
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ---------- CREDENTIALS ---------- */
.creds {
  padding: clamp(40px, 5vw, 64px) 0;
  background: var(--color-surface);
  border-top: 1px solid var(--color-border);
  border-bottom: 1px solid var(--color-border);
}
.creds__label {
  text-align: center;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-text-mute);
  margin-bottom: 32px;
}
.creds__row {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 32px 24px;
  align-items: center;
  justify-items: center;
  max-width: 1100px;
  margin: 0 auto;
}
@media (min-width: 640px) { .creds__row { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 960px) { .creds__row { grid-template-columns: repeat(8, 1fr); gap: 32px 16px; } }
.cred-logo {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 44px;
  font-weight: 600;
  font-size: 13px;
  color: var(--color-text-soft);
  text-align: center;
  opacity: 0.7;
  transition: opacity var(--t-med) var(--ease), color var(--t-med) var(--ease), transform var(--t-med) var(--ease);
  white-space: nowrap;
  line-height: 1.2;
}
.cred-logo:hover {
  opacity: 1;
  color: var(--color-text);
  transform: translateY(-2px);
}
.creds__note {
  text-align: center;
  margin-top: 28px;
  font-size: 13px;
  color: var(--color-text-mute);
}
.creds__note a {
  color: var(--red);
  font-weight: 500;
  border-bottom: 1px solid transparent;
  transition: border-color var(--t-med) var(--ease);
}
.creds__note a:hover { border-bottom-color: currentColor; }

/* ---------- SECTION DEFAULTS ---------- */
.section {
  padding: clamp(80px, 9vw, 144px) 0;
  position: relative;
}
.section--alt { background: var(--color-bg-alt); }
.section__header {
  display: flex;
  flex-direction: column;
  gap: 16px;
  max-width: 760px;
  margin-bottom: clamp(48px, 6vw, 80px);
}
.section__header--row {
  flex-direction: row;
  align-items: flex-end;
  justify-content: space-between;
  max-width: none;
  flex-wrap: wrap;
  gap: 24px;
}
.section__header--center {
  align-items: center;
  text-align: center;
  margin-left: auto;
  margin-right: auto;
}

/* ---------- SECTION 3: WHAT WE DO ---------- */
.what { background: var(--color-bg); }
.what__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  position: relative;
}
@media (min-width: 860px) {
  .what__grid { grid-template-columns: 1fr 1fr; gap: 32px; }
  .what__grid::after {
    content: "+";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 64px;
    height: 64px;
    background: var(--ink);
    color: var(--red);
    font-family: var(--font-display);
    font-variation-settings: "opsz" 144, "wght" 700;
    font-style: italic;
    font-size: 40px;
    font-weight: 700;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1;
    box-shadow: 0 8px 24px rgba(15, 26, 29, 0.3);
  }
}
.what__card {
  position: relative;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 20px;
  padding: clamp(32px, 4vw, 48px);
  transition: border-color var(--t-med) var(--ease),
              transform var(--t-med) var(--ease),
              box-shadow var(--t-med) var(--ease);
  display: flex;
  flex-direction: column;
  gap: 28px;
  overflow: hidden;
}
.what__card::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: var(--red);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--t-slow) var(--ease);
}
.what__card:hover {
  border-color: var(--color-text);
  transform: translateY(-4px);
  box-shadow: var(--shadow-card);
}
.what__card:hover::before { transform: scaleX(1); }
.what__card-tag {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 4px;
}
.what__card-tag::before {
  content: "";
  width: 20px;
  height: 1.5px;
  background: var(--red);
}
.what__card h3 {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-size: clamp(26px, 2.5vw, 36px);
  font-weight: 500;
  line-height: 1.1;
  letter-spacing: -0.025em;
  color: var(--color-text);
}
.what__list { display: grid; gap: 14px; }
.what__list li {
  font-size: 16px;
  color: var(--color-text);
  padding-left: 28px;
  position: relative;
  line-height: 1.5;
}
.what__list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 9px;
  width: 16px;
  height: 1.5px;
  background: var(--red);
}
.what__card-cta { margin-top: auto; }
.what__pitch {
  margin-top: clamp(40px, 5vw, 64px);
  text-align: center;
  max-width: 680px;
  margin-left: auto;
  margin-right: auto;
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-size: clamp(18px, 1.8vw, 24px);
  line-height: 1.4;
  color: var(--color-text-soft);
  font-weight: 400;
  letter-spacing: -0.015em;
}
.what__pitch strong { color: var(--color-text); font-weight: 600; }
.what__pitch em { font-style: italic; color: var(--red); font-weight: 500; }

/* ---------- SECTION 4: RESULTS ---------- */
.results {
  background: var(--color-bg-alt);
  position: relative;
  overflow: hidden;
}
.results::before {
  content: "";
  position: absolute;
  top: -50%;
  left: -10%;
  width: 60%;
  height: 100%;
  background: radial-gradient(ellipse, rgba(255, 33, 61, 0.04) 0%, transparent 60%);
  pointer-events: none;
}
.results__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
  position: relative;
}
@media (min-width: 640px) { .results__grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .results__grid { grid-template-columns: repeat(3, 1fr); gap: 24px; } }
.result-card {
  position: relative;
  background: var(--color-surface);
  border-radius: 20px;
  padding: clamp(32px, 3.5vw, 44px);
  transition: transform var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease);
  overflow: hidden;
  border: 1px solid transparent;
}
.result-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, var(--red-glow) 0%, transparent 50%);
  opacity: 0;
  transition: opacity var(--t-med) var(--ease);
  pointer-events: none;
}
.result-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-lift);
}
.result-card:hover::before { opacity: 1; }
.result-card__rank {
  position: absolute;
  top: 24px;
  right: 24px;
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-style: italic;
  font-weight: 400;
  font-size: 16px;
  color: var(--color-text-mute);
}
.result-card__number {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-size: clamp(56px, 6vw, 88px);
  font-weight: 500;
  line-height: 0.95;
  letter-spacing: -0.045em;
  color: var(--color-text);
  margin-bottom: 6px;
}
.result-card__number sup {
  font-size: 0.45em;
  color: var(--red);
  margin-left: 4px;
  vertical-align: super;
  letter-spacing: 0;
  font-weight: 500;
}
.result-card__unit {
  font-size: 15px;
  font-weight: 500;
  color: var(--color-text-soft);
  line-height: 1.4;
  margin-bottom: 24px;
}

.result-card__client-name {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-style: italic;
  font-size: 18px;
  font-weight: 500;
  color: var(--color-text);
  margin-top: 8px;
}
.result-card__meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 6px;
  padding-top: 16px;
  border-top: 1px solid var(--color-border);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-text-mute);
}
.result-card__industry { color: var(--color-text-soft); }
.result-card__country {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.flag { font-size: 14px; letter-spacing: 0; }
.results__footer {
  margin-top: clamp(40px, 5vw, 64px);
  text-align: center;
}
.results__footer-text {
  font-size: 14px;
  color: var(--color-text-soft);
  margin-bottom: 16px;
}

/* ---------- SECTION 5: SELECTED WORK ---------- */
.work { background: var(--color-bg); }
.work__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 28px;
}
@media (min-width: 720px) { .work__grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1100px) { .work__grid { grid-template-columns: repeat(3, 1fr); } }
.work-card {
  display: block;
  background: var(--color-surface);
  border-radius: 20px;
  overflow: hidden;
  border: 1px solid var(--color-border);
  transition: transform var(--t-med) var(--ease),
              box-shadow var(--t-med) var(--ease),
              border-color var(--t-med) var(--ease);
  position: relative;
}
.work-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-lift);
  border-color: var(--color-text);
}
.work-card__visual {
  aspect-ratio: 16 / 11;
  width: 100%;
  position: relative;
  overflow: hidden;
  background-color: #0F1A1D;
  background-size: cover;
  background-position: center;
}
/* Two card states:
   1. With photo (e.g., --moldasig) → just the photo, no decorative overlay
   2. Without photo (e.g., --montaco, --2fl) → brand-aligned gradient as placeholder
   In the WP theme, ACF will detect whether the work post has a featured image
   and apply either the photo URL or the gradient class accordingly. */
.work-visual--montaco {
  background-image:
    radial-gradient(circle at 20% 30%, rgba(255, 33, 61, 0.45), transparent 45%),
    linear-gradient(135deg, #1A2429 0%, #0F1A1D 100%);
}
.work-visual--montaco::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    repeating-linear-gradient(45deg, transparent 0, transparent 30px, rgba(255,255,255,0.025) 30px, rgba(255,255,255,0.025) 31px);
}
.work-visual--moldasig {
  /* Real photo only — no overlay, no gradient. The image speaks for itself. */
  background-image: url('https://newlightdigital.nldsite.com/wp-content/uploads/2025/03/moldasig-custom-insurance-website-sm.jpg');
}
.work-visual--2fl {
  background-image:
    radial-gradient(circle at 65% 70%, rgba(202, 202, 202, 0.18), transparent 50%),
    linear-gradient(135deg, #2A2F35 0%, #0F1A1D 100%);
}
.work-visual--2fl::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    repeating-linear-gradient(0deg, transparent 0, transparent 40px, rgba(255,255,255,0.03) 40px, rgba(255,255,255,0.03) 41px),
    repeating-linear-gradient(90deg, transparent 0, transparent 40px, rgba(255,255,255,0.03) 40px, rgba(255,255,255,0.03) 41px);
}

/* The "frame + label" overlay (the inset border with the project name +
   diagonal arrow) only renders on gradient/placeholder cards. Cards that
   have real photos show the image clean. */
.work-card__visual:not(.has-image) .work-card__visual-overlay {
  display: flex;
}
.work-card__visual.has-image .work-card__visual-overlay {
  display: none;
}
.work-card__visual-overlay {
  position: absolute;
  inset: 28px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 10px;
  display: flex;
  align-items: flex-end;
  padding: 24px;
  color: rgba(255, 255, 255, 0.5);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 500;
}
.work-card__visual-overlay svg {
  position: absolute;
  top: 24px;
  right: 24px;
  width: 22px;
  height: 22px;
  opacity: 0.4;
  transition: opacity var(--t-med) var(--ease), transform var(--t-med) var(--ease);
}
.work-card:hover .work-card__visual-overlay svg {
  opacity: 1;
  transform: translate(2px, -2px);
}
.work-card__body { padding: 28px; }
.work-card__tags {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 18px;
}
.work-tag {
  display: inline-flex;
  align-items: center;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 5px 10px;
  border-radius: 100px;
  background: var(--color-bg-soft);
  color: var(--color-text-soft);
}
.work-tag--full-stack {
  background: var(--ink);
  color: var(--red);
}
.work-card__industry {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 8px;
}
.work-card__title {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-weight: 500;
  font-size: 26px;
  line-height: 1.15;
  letter-spacing: -0.02em;
  color: var(--color-text);
  margin-bottom: 10px;
}
.work-card__stack {
  font-size: 14px;
  color: var(--color-text-soft);
  margin-bottom: 18px;
  line-height: 1.5;
}
.work-card__result {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding-top: 14px;
  border-top: 1px solid var(--color-border);
  width: 100%;
}
.work-card__result-arrow {
  color: var(--red);
  font-weight: 600;
}
.work-card__result-text {
  font-size: 14px;
  font-weight: 500;
  color: var(--color-text);
}
.work__cta-row {
  margin-top: clamp(40px, 5vw, 64px);
  display: flex;
  justify-content: center;
}

/* ---------- SECTION 6: HOW WE WORK (dark) ---------- */
.how {
  background: var(--ink);
  color: var(--white);
  position: relative;
  overflow: hidden;
}
.how::before {
  content: "";
  position: absolute;
  top: 0;
  right: -20%;
  width: 60%;
  height: 100%;
  background: radial-gradient(ellipse, rgba(255, 33, 61, 0.08) 0%, transparent 60%);
  pointer-events: none;
}
.how .h-section { color: var(--white); }
.how__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}
@media (min-width: 800px) { .how__grid { grid-template-columns: repeat(3, 1fr); gap: 24px; } }
.how-card {
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 20px;
  padding: clamp(32px, 3.5vw, 44px);
  transition: background var(--t-med) var(--ease),
              border-color var(--t-med) var(--ease),
              transform var(--t-med) var(--ease);
  position: relative;
  overflow: hidden;
}
.how-card::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(255, 33, 61, 0.06) 0%, transparent 50%);
  opacity: 0;
  transition: opacity var(--t-med) var(--ease);
  pointer-events: none;
}
.how-card:hover {
  background: rgba(255, 255, 255, 0.05);
  border-color: rgba(255, 33, 61, 0.3);
  transform: translateY(-4px);
}
.how-card:hover::after { opacity: 1; }
.how-card__number {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-style: italic;
  font-weight: 400;
  font-size: 56px;
  line-height: 1;
  color: var(--red);
  letter-spacing: -0.04em;
  margin-bottom: 24px;
}
.how-card h3 {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-weight: 500;
  font-size: 26px;
  line-height: 1.2;
  letter-spacing: -0.02em;
  color: var(--white);
  margin-bottom: 14px;
}
.how-card p {
  font-size: 15px;
  line-height: 1.65;
  color: rgba(255, 255, 255, 0.65);
}
/* Featured quote inside the dark "How we engage" section.
   Same visual vocabulary as the Get Started testimonial card (dark surface,
   red corner triangle, "Verified on Clutch" badge, italic Fraunces quote
   with inline red quotation marks). Adapted to sit inside an already-dark
   section: lighter card surface, narrower max-width, centered. */
.how__quote {
  position: relative;
  margin: clamp(56px, 7vw, 88px) auto 0;
  max-width: 720px;
  padding: 36px 32px 28px;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 20px;
  overflow: hidden;
  text-align: left;
}
/* Subtler than the Get Started card: keeps the dark surface + badge + italic
   quote, but drops the red corner triangle so the two cards don't repeat
   identically. Only a soft red glow at top-right echoes the brand color. */
.how__quote::before {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  width: 200px;
  height: 200px;
  background: radial-gradient(circle at top right, rgba(255, 33, 61, 0.18), transparent 70%);
  pointer-events: none;
}
.how__quote-badge {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 5px 12px 5px 8px;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 100px;
  font-family: var(--font-body);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.85);
  margin-bottom: 20px;
}
.how__quote-badge svg {
  width: 12px;
  height: 12px;
  color: var(--red);
  flex-shrink: 0;
}
.how__quote-text {
  position: relative;
  z-index: 1;
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(20px, 2vw, 26px);
  line-height: 1.35;
  letter-spacing: -0.02em;
  color: var(--white);
  margin: 0 0 24px;
}
.how__quote-text::before {
  content: "\201C";
  display: inline;
  color: var(--red);
  font-size: 1.2em;
  line-height: 0;
  margin-right: 4px;
  vertical-align: -0.1em;
}
.how__quote-text::after {
  content: "\201D";
  display: inline;
  color: var(--red);
  font-size: 1.2em;
  line-height: 0;
  margin-left: 2px;
  vertical-align: -0.1em;
}
.how__quote-foot {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 14px;
  padding-top: 18px;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.how__quote-stars {
  display: inline-flex;
  align-items: center;
  gap: 1px;
  color: #FFAA00;
  font-size: 13px;
  letter-spacing: 1px;
  flex-shrink: 0;
}
.how__quote-attribution {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-family: var(--font-body);
}
.how__quote-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--white);
  letter-spacing: -0.005em;
}
.how__quote-meta {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.5);
}

/* ---------- SECTION 7: INSIGHTS ---------- */
.insights { background: var(--color-bg); }
.insights__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}
@media (min-width: 640px) { .insights__grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .insights__grid { grid-template-columns: repeat(4, 1fr); } }
.insight-card {
  display: block;
  background: var(--color-surface);
  border-radius: 16px;
  overflow: hidden;
  border: 1px solid var(--color-border);
  transition: transform var(--t-med) var(--ease),
              box-shadow var(--t-med) var(--ease),
              border-color var(--t-med) var(--ease);
}
.insight-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-card);
  border-color: var(--color-text);
}
.insight-card__img {
  aspect-ratio: 16 / 10;
  width: 100%;
  position: relative;
  overflow: hidden;
}
.insight-card__img-icon {
  display: none; /* hidden — real photos render in place of placeholders */
}
/* Blog insight cards — show the real WP featured image cleanly, no overlay.
   In WP integration these become <?php the_post_thumbnail() ?> outputs. */
.insight-img--1 {
  background-image: url('https://newlightdigital.nldsite.com/wp-content/uploads/2026/05/how-to-increase-your-leads.jpg');
  background-size: cover;
  background-position: center;
}
.insight-img--2 {
  background-image: url('https://newlightdigital.nldsite.com/wp-content/uploads/2026/04/j2dz5rf7jna63fivrjkd5kod7y.jpg');
  background-size: cover;
  background-position: center;
}
.insight-img--3 {
  background-image: url('https://newlightdigital.nldsite.com/wp-content/uploads/2026/04/ai-tools-for-ppc-ai-search-and-social-campaigns-whats-worth-using-now.png.webp');
  background-size: cover;
  background-position: center;
}
.insight-img--4 {
  background-image: url('https://newlightdigital.nldsite.com/wp-content/uploads/2026/03/google-shopping-ads-example.webp');
  background-size: cover;
  background-position: center;
}
.insight-card__body { padding: 24px; }
.insight-card__meta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 12px;
}
.insight-card__meta-divider { color: var(--color-text-mute); letter-spacing: 0; }
.insight-card__meta-date { color: var(--color-text-mute); }
.insight-card__title {
  font-size: 16px;
  font-weight: 500;
  color: var(--color-text);
  line-height: 1.4;
  margin-bottom: 14px;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  letter-spacing: -0.01em;
}
.insight-card__read {
  font-size: 13px;
  font-weight: 500;
  color: var(--red);
}

/* ---------- SECTION 8: CONTACT ---------- */
.contact {
  background: var(--color-bg-alt);
  position: relative;
  overflow: hidden;
}
.contact::before {
  content: "";
  position: absolute;
  bottom: -20%;
  left: -10%;
  width: 50%;
  height: 80%;
  background: radial-gradient(ellipse, rgba(255, 33, 61, 0.04) 0%, transparent 60%);
  pointer-events: none;
}
.contact__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: 56px;
  position: relative;
}
@media (min-width: 960px) {
  .contact__inner { grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr); gap: 80px; }
}
.contact__left .h-section { margin-bottom: 24px; }
.contact__left .lead { margin-bottom: 36px; }
.trust-list {
  display: grid;
  gap: 14px;
  margin-bottom: 40px;
}
.trust-list li {
  display: flex;
  align-items: center;
  gap: 14px;
  font-size: 15px;
  color: var(--color-text);
  font-weight: 500;
}
.trust-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  background: var(--red);
  color: var(--white);
  border-radius: 50%;
  flex-shrink: 0;
  font-size: 13px;
  font-weight: 700;
}
/* Get Started quote card — designed to look like a pulled-out Clutch
   testimonial. Dark surface, large italic quote, red verified badge,
   diagonal red corner accent. Differs from the lighter "how we work"
   quote so the two don't compete visually. */
.contact__quote {
  position: relative;
  padding: 36px 32px 28px;
  background: var(--ink);
  border: 1px solid rgba(255, 255, 255, 0.06);
  border-radius: 20px;
  overflow: hidden;
  color: var(--white);
  box-shadow: var(--shadow-lift);
}
.contact__quote::before {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  width: 140px;
  height: 140px;
  background: radial-gradient(circle at top right, rgba(255, 33, 61, 0.4), transparent 65%);
  pointer-events: none;
}
.contact__quote::after {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  width: 0;
  height: 0;
  border-top: 56px solid var(--red);
  border-left: 56px solid transparent;
  border-bottom-left-radius: 4px;
}
.contact__quote-badge {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 5px 12px 5px 8px;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 100px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.85);
  margin-bottom: 24px;
}
.contact__quote-badge svg {
  width: 12px;
  height: 12px;
  color: var(--red);
  flex-shrink: 0;
}
.contact__quote-text {
  position: relative;
  z-index: 1;
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(20px, 2vw, 26px);
  line-height: 1.35;
  letter-spacing: -0.02em;
  color: var(--white);
  margin: 0 0 28px;
}
.contact__quote-text::before {
  content: "\201C";
  display: inline;
  color: var(--red);
  font-size: 1.2em;
  line-height: 0;
  margin-right: 4px;
  vertical-align: -0.1em;
}
.contact__quote-text::after {
  content: "\201D";
  display: inline;
  color: var(--red);
  font-size: 1.2em;
  line-height: 0;
  margin-left: 2px;
  vertical-align: -0.1em;
}
.contact__quote-foot {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 14px;
  padding-top: 20px;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.contact__quote-stars {
  display: inline-flex;
  align-items: center;
  gap: 1px;
  color: #FFAA00;
  font-size: 14px;
  letter-spacing: 1px;
  flex-shrink: 0;
}
.contact__quote-attribution {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-family: var(--font-body);
}
.contact__quote-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--white);
  letter-spacing: -0.005em;
}
.contact__quote-meta {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.5);
}

.form {
  background: var(--color-surface);
  border-radius: 24px;
  padding: clamp(32px, 4vw, 48px);
  border: 1px solid var(--color-border);
  position: relative;
}
.form__title {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-weight: 500;
  font-size: 24px;
  letter-spacing: -0.02em;
  margin-bottom: 28px;
  color: var(--color-text);
}
.form__row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
  margin-bottom: 20px;
}
@media (min-width: 580px) { .form__row { grid-template-columns: 1fr 1fr; } }
.field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.field label {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--color-text-soft);
  text-transform: uppercase;
}
.field label .req { color: var(--red); }
.field input,
.field textarea {
  font-family: inherit;
  font-size: 15px;
  color: var(--color-text);
  padding: 14px 16px;
  border: 1.5px solid var(--color-border);
  border-radius: 10px;
  background: var(--color-surface);
  transition: border-color var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease);
  width: 100%;
}
.field input:hover, .field textarea:hover { border-color: var(--color-text-mute); }
.field input:focus, .field textarea:focus {
  outline: none;
  border-color: var(--color-text);
  box-shadow: 0 0 0 3px rgba(15, 26, 29, 0.06);
}
.field textarea { min-height: 120px; resize: vertical; }
.form__submit-row {
  margin-top: 32px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 16px;
}
.form__submit-note {
  font-size: 12px;
  color: var(--color-text-mute);
  max-width: 280px;
}
.form__placeholder {
  font-size: 14px;
  color: var(--color-text-soft);
  line-height: 1.6;
}
.form__placeholder a { color: var(--red); text-decoration: underline; }

/* ---- Contact Form 7 integration ----
   CF7 wraps every form in `<div class="wpcf7"><form class="wpcf7-form">`
   regardless of what markup the editor pastes into the form template.
   These rules style CF7's auto-generated markup AND any raw input/textarea
   inside our `.form` container so editors can configure forms in WP Admin
   without learning our class names — defaults still look right.

   Layout strategy: the `.wpcf7-form` itself is a flex column. CF7 auto-
   injects several elements that the editor can't position from the form
   template — hidden fields fieldset, Turnstile widget, response output.
   We use `order` to position them where the design needs them: Turnstile
   right above the submit row, response output below the submit row,
   hidden fields out of the visual flow. */
.form .wpcf7 { width: 100%; }
.form .wpcf7-form {
  display: flex;
  flex-direction: column;
  gap: 0;
}
.form .wpcf7-form > .hidden-fields-container,
.form .wpcf7-form > fieldset.hidden-fields-container {
  order: -10;
  border: 0;
  padding: 0;
  margin: 0;
}
.form .wpcf7-form > .wpcf7-turnstile,
.form .wpcf7-form > .cf-turnstile {
  order: 90;             /* sits right above the submit row (order 100) */
  /* Horizontally centered; equal breathing room above and below so it sits
     visually between the acceptance row and the submit row. */
  margin: 20px auto;
  display: flex;
  justify-content: center;
}
.form .wpcf7-form > .form__submit-row,
.form .wpcf7-form > p:has(input[type="submit"]),
.form .wpcf7-form > p:has(button[type="submit"]) {
  order: 100;
}
.form .wpcf7-form > .wpcf7-response-output {
  order: 200;
}
/* CF7 wraps every form-tag with <br> on both sides by default; we don't
   want those breaking our label/input rhythm — labels and inputs are
   already block-level inside .field. */
.form .wpcf7-form br { display: none; }
.form .wpcf7-form p { margin: 0 0 20px 0; }
/* The .wpcf7-form-control-wrap is the <span> CF7 puts around every input.
   It needs to be block-level so inputs flow correctly under labels. The
   empty <div> CF7 puts inside it (validation tip slot) becomes a block too. */
.form .wpcf7-form-control-wrap { display: block; width: 100%; position: relative; }

.form .wpcf7-form input[type="text"],
.form .wpcf7-form input[type="email"],
.form .wpcf7-form input[type="tel"],
.form .wpcf7-form input[type="url"],
.form .wpcf7-form input[type="number"],
.form .wpcf7-form select,
.form .wpcf7-form textarea {
  font-family: inherit;
  font-size: 15px;
  color: var(--color-text);
  padding: 14px 16px;
  border: 1.5px solid var(--color-border);
  border-radius: 10px;
  background: var(--color-surface);
  transition: border-color var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease);
  width: 100%;
  display: block;
}
.form .wpcf7-form input:hover,
.form .wpcf7-form textarea:hover,
.form .wpcf7-form select:hover { border-color: var(--color-text-mute); }
.form .wpcf7-form input:focus,
.form .wpcf7-form textarea:focus,
.form .wpcf7-form select:focus {
  outline: none;
  border-color: var(--color-text);
  box-shadow: 0 0 0 3px rgba(15, 26, 29, 0.06);
}
.form .wpcf7-form textarea { min-height: 120px; resize: vertical; }

/* Placeholder text — slightly more visible on the dark form card while staying
   subordinate to the user's typed text. */
.form .wpcf7-form input::placeholder,
.form .wpcf7-form textarea::placeholder { color: var(--color-text-mute); opacity: 1; }

/* CF7 input validation state — red border on invalid fields.
   Also handle the [acceptance] checkbox: when unchecked-but-required and the
   user submits, CF7 adds .wpcf7-not-valid to the input. We push that visually
   onto the styled checkbox (which is the input itself with appearance:none). */
.form .wpcf7-form input.wpcf7-not-valid,
.form .wpcf7-form textarea.wpcf7-not-valid,
.form .wpcf7-form select.wpcf7-not-valid { border-color: var(--red); }
.form .wpcf7-form input[type="checkbox"].wpcf7-not-valid,
.form .wpcf7-acceptance.wpcf7-not-valid input[type="checkbox"] {
  border-color: var(--red);
  box-shadow: 0 0 0 3px rgba(255, 33, 61, 0.15);
}
.form .wpcf7-acceptance.wpcf7-not-valid .wpcf7-list-item-label { color: var(--red); }

/* ---- Acceptance checkbox (privacy/terms agreement) ----
   CF7's [acceptance] tag wraps its checkbox in <span class="wpcf7-list-item">
   with a nested <label> containing the input + the label text in a
   <span class="wpcf7-list-item-label">. We style it inline + clickable. */
.form .wpcf7-form > .wpcf7-acceptance-wrapper,
.form .wpcf7-form > p:has(.wpcf7-acceptance) {
  order: 85;                /* above Turnstile (90), below the textarea */
  margin: 0 0 16px 0;
}
.form .wpcf7-acceptance .wpcf7-list-item { display: flex; align-items: flex-start; gap: 10px; margin: 0; }
.form .wpcf7-acceptance .wpcf7-list-item label { display: flex; align-items: flex-start; gap: 10px; cursor: pointer; }
.form .wpcf7-acceptance input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  width: 18px;
  height: 18px;
  min-width: 18px;
  margin: 2px 0 0 0;
  border: 1.5px solid var(--color-border);
  border-radius: 4px;
  background: var(--color-surface);
  cursor: pointer;
  transition: border-color var(--t-med) var(--ease), background var(--t-med) var(--ease);
  position: relative;
}
.form .wpcf7-acceptance input[type="checkbox"]:hover { border-color: var(--color-text); }
.form .wpcf7-acceptance input[type="checkbox"]:checked {
  background: var(--brand-ink);
  border-color: var(--brand-ink);
}
.form .wpcf7-acceptance input[type="checkbox"]:checked::after {
  content: "";
  position: absolute;
  top: 1px;
  left: 5px;
  width: 5px;
  height: 10px;
  border: solid var(--brand-paper);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.form .wpcf7-acceptance .wpcf7-list-item-label,
.form .wpcf7-acceptance label > span:not(.wpcf7-list-item-label) {
  font-size: 13px;
  line-height: 1.5;
  color: var(--color-text-soft);
}
/* Any link inside the acceptance area gets the underlined-link treatment so
   the user can clearly see they're clickable. The selector is intentionally
   broad — CF7's markup nests the label content variably depending on version
   and whether the [acceptance] tag wraps content or stands alone. */
.form .wpcf7-acceptance a,
.form .wpcf7-acceptance label a,
.form .wpcf7-acceptance .wpcf7-list-item-label a {
  color: var(--color-text);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  font-weight: 500;
  transition: color var(--t-med) var(--ease);
}
.form .wpcf7-acceptance a:hover,
.form .wpcf7-acceptance label a:hover,
.form .wpcf7-acceptance .wpcf7-list-item-label a:hover { color: var(--red); }

/* ---- Submit button + loading state ----
   The button text gets swapped by JS (assets/js/cf7-submit-state.js) — when
   the form is submitting, the button's value is replaced with "Sending..."
   and the wrapping `.wpcf7` gets `.is-submitting` for disabled styling. */
.form .wpcf7-form input[type="submit"],
.form .wpcf7-form button[type="submit"] {
  /* Match .btn .btn--primary so CF7 submit looks like the design's CTA. */
  background: var(--brand-ink);
  color: var(--brand-paper);
  border: 1.5px solid var(--brand-ink);
  border-radius: 999px;
  padding: 14px 28px;
  font-family: inherit;
  font-size: 15px;
  font-weight: 500;
  cursor: pointer;
  transition: background var(--t-med) var(--ease), color var(--t-med) var(--ease), opacity var(--t-med) var(--ease);
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.form .wpcf7-form input[type="submit"]:hover:not(:disabled),
.form .wpcf7-form button[type="submit"]:hover:not(:disabled) { background: var(--red); border-color: var(--red); }
.form .wpcf7-form input[type="submit"]:disabled,
.form .wpcf7-form button[type="submit"]:disabled,
.form .wpcf7.is-submitting input[type="submit"],
.form .wpcf7.is-submitting button[type="submit"] {
  cursor: wait;
  opacity: 0.85;
  background: var(--brand-ink);
  border-color: var(--brand-ink);
  pointer-events: none;
}
/* Inline spinner appended by the JS as an adjacent <span class="nld-spinner">. */
.form .nld-spinner {
  display: inline-block;
  width: 14px;
  height: 14px;
  margin-left: 10px;
  border: 2px solid rgba(255, 255, 255, 0.35);
  border-top-color: var(--brand-paper);
  border-radius: 50%;
  vertical-align: -3px;
  animation: nld-spin 0.7s linear infinite;
}
@keyframes nld-spin { to { transform: rotate(360deg); } }
/* Hide CF7's own spinner — we render our own. */
.form .wpcf7-spinner { display: none; }

/* CF7 status / validation messages */
.form .wpcf7-not-valid-tip {
  font-size: 12px;
  color: var(--red);
  margin-top: 6px;
  display: block;
  /* CF7 sometimes positions the tip absolutely inside the wrap — force
     normal flow so it sits under the input instead of overlapping it. */
  position: static !important;
}
.form .wpcf7-response-output {
  margin: 16px 0 0 0 !important;
  padding: 12px 16px !important;
  border: 1.5px solid var(--color-border) !important;
  border-radius: 8px !important;
  font-size: 14px;
}
.form .wpcf7 form.invalid .wpcf7-response-output,
.form .wpcf7 form.unaccepted .wpcf7-response-output { border-color: var(--red) !important; color: var(--red); }
.form .wpcf7 form.sent .wpcf7-response-output { border-color: #2a8a3e !important; color: #2a8a3e; }

/* ---- Compact mobile form ----
   Below 580px the form is single-column. We tighten card padding, label/input
   gap, row gap, textarea height, and font sizes so the form takes less of the
   viewport on small phones. Stays readable — just less whitespace. */
@media (max-width: 580px) {
  .form { padding: 20px; border-radius: 18px; }
  .form__title { font-size: 20px; margin-bottom: 18px; }
  .form__row { gap: 12px; margin-bottom: 12px; }
  .field { gap: 4px; }
  .field label { font-size: 11px; }
  .field input,
  .field textarea,
  .form .wpcf7-form input,
  .form .wpcf7-form textarea { padding: 11px 14px; font-size: 14px; border-radius: 8px; }
  .field textarea,
  .form .wpcf7-form textarea { min-height: 90px; }
  .form__submit-row { margin-top: 18px; gap: 10px; flex-direction: column; align-items: stretch; }
  .form__submit-note { font-size: 11px; max-width: none; text-align: center; }
  .form .wpcf7-form input[type="submit"],
  .form .wpcf7-form button[type="submit"] { padding: 12px 22px; font-size: 14px; width: 100%; }
  .form .wpcf7-form > .wpcf7-turnstile,
  .form .wpcf7-form > .cf-turnstile { margin: 12px auto; }
  .form .wpcf7-acceptance .wpcf7-list-item-label { font-size: 12px; }
}

/* ---------- PRE-FOOTER CTA STRIP ---------- */
.prefooter {
  position: relative;
  background: var(--ink);
  color: var(--white);
  padding: clamp(56px, 7vw, 96px) 0;
  overflow: hidden;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.prefooter::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 80%;
  height: 200%;
  background: radial-gradient(ellipse, rgba(255, 33, 61, 0.18) 0%, transparent 55%);
  pointer-events: none;
}
.prefooter__inner {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  align-items: center;
}
@media (min-width: 880px) {
  .prefooter__inner { grid-template-columns: minmax(0, 1.4fr) auto; gap: 56px; }
}
.prefooter__heading {
  font-family: var(--font-display);
  font-variation-settings: var(--font-display-opsz);
  font-weight: 500;
  font-size: clamp(28px, 4.5vw, 56px);
  line-height: 1.05;
  letter-spacing: -0.025em;
  color: var(--white);
  margin: 0;
}
.prefooter__heading em {
  font-style: italic;
  font-variation-settings: var(--font-display-italic);
  color: var(--red);
  font-weight: 500;
}
.prefooter__sub {
  font-size: 16px;
  line-height: 1.55;
  color: rgba(255, 255, 255, 0.7);
  margin: 12px 0 0;
  max-width: 56ch;
}
.prefooter__cta {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}
.prefooter__cta .btn--primary {
  background: var(--red);
  border-color: var(--red);
}
.prefooter__cta .btn--primary:hover {
  background: var(--color-surface);
  color: var(--color-text);
  border-color: var(--white);
  box-shadow: 0 12px 30px rgba(255, 255, 255, 0.12);
}
.prefooter__cta .btn--ghost-light {
  background: transparent;
  color: rgba(255, 255, 255, 0.85);
  border-color: rgba(255, 255, 255, 0.2);
}
.prefooter__cta .btn--ghost-light:hover {
  color: var(--white);
  border-color: var(--white);
}

/* ---------- FOOTER ---------- */
.site-footer {
  background: var(--ink);
  color: rgba(255, 255, 255, 0.65);
  padding: 88px 0 32px;
  font-size: 14px;
  position: relative;
  overflow: hidden;
}
/* Stylized world map watermark — continents as low-opacity light shapes
   on the dark surface, with a pulsing red pin on Chișinău. Communicates
   "Moldova-based, serving the world" without words. */
/* World map watermark — absolute behind the footer columns.
   Sized and positioned so that Moldova (path id="md" at 55.7% across the
   map viewBox) lands in the gap BETWEEN the Services column and the
   Industries column of the footer grid. The map covers the full footer
   width at low opacity; the pin and label sit in the column-gap negative
   space where no text lives. */
/* World map watermark — edge-to-edge of the viewport, cropped top/bottom
   via preserveAspectRatio="xMidYMid slice" on the <svg>. The pin is embedded
   INSIDE the svg at viewBox coords (467.5, 403) so it crops naturally with
   the map. Moldova lands at 55.7% across the viewport. */
.site-footer__world {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  /* Map is wider than the viewport (100vw + 200px). After shifting left
     ~100px to center Moldova in the column gap, the right edge still
     extends ~100px past the viewport — no empty space on the right edge
     of the screen, even on wide viewports. */
  transform: translateX(calc(-50% - 100px));
  width: calc(100vw + 200px);
  color: var(--white);
  pointer-events: none;
  z-index: 0;
  overflow: hidden;
}
.site-footer__world svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
}
.site-footer__world .nld-map-paths {
  opacity: 0.08;
}
.site-footer__world .nld-map-pin-pulse {
  fill: var(--red);
  opacity: 0.45;
  /* Scale from the circle's own center (its cx/cy = Moldova location).
     Using fill-box + center keeps the pulse anchored on Moldova
     instead of drifting across the map. */
  transform-box: fill-box;
  transform-origin: center;
  animation: pin-pulse-svg 2.4s ease-out infinite;
}
@keyframes pin-pulse-svg {
  0%   { transform: scale(0.7); opacity: 0.55; }
  100% { transform: scale(3.5); opacity: 0; }
}
.site-footer__world .nld-map-pin-glow {
  fill: var(--red);
  opacity: 0.35;
  filter: blur(6px);
}
.site-footer__world .nld-map-pin-dot {
  fill: var(--red);
}
.site-footer__world .nld-map-pin-ring {
  fill: none;
  stroke: var(--red);
  stroke-width: 1.5;
  opacity: 0.5;
}
.site-footer__world .nld-map-pin-label {
  font-family: var(--font-body), -apple-system, sans-serif;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  fill: var(--white);
  text-anchor: middle;
  paint-order: stroke;
  stroke: var(--ink);
  stroke-width: 3;
  stroke-linejoin: round;
}
.site-footer__world .nld-map-pin-label.country {
  fill: rgba(255, 255, 255, 0.55);
  font-weight: 500;
}
.site-footer__pin {
  display: none;
}

/* Tablet portrait, lower tier (720-799px) — Galaxy S8+ horizontal (740px)
   sits here. The user confirmed this width is PERFECT at -30px; don't
   change. Other devices here: small foldable phones in landscape. */
@media (min-width: 720px) and (max-width: 799px) {
  .site-footer__world {
    transform: translateX(calc(-50% - 30px));
    width: calc(100vw + 200px);
  }
}

/* Tablet portrait, upper tier (800-1099px) — iPad Air vertical (820),
   iPhone 12 Pro horizontal (844), iPhone XR horizontal (896), Surface
   Pro 7 vertical (912), Galaxy A51/71 horizontal (914), Pixel 7 horizontal
   (915), S20 Ultra horizontal (915), iPhone 14 Pro Max horizontal (932),
   iPad Mini horizontal (1024), iPad Pro vertical (1024), Nest Hub (1024).
   The user asked these to shift 15px further left. Was -30px → now -45px. */
@media (min-width: 800px) and (max-width: 1099px) {
  .site-footer__world {
    transform: translateX(calc(-50% - 45px));
    width: calc(100vw + 200px);
  }
}

/* Medium-wide widths (1100-1399px): iPad Air horizontal (1180px),
   Surface Pro 7 horizontal (1368px). Need less leftward shift than the
   1400+ desktop range. -60px shift. */
@media (min-width: 1100px) and (max-width: 1399px) {
  .site-footer__world {
    transform: translateX(calc(-50% - 60px));
    width: calc(100vw + 200px);
  }
}

/* Ultra-wide foldables continuous (≥1600px): Asus Zenbook Fold vertical
   continuous (~1707), Galaxy Z Fold 5 horizontal continuous (~2076).
   User asked these to shift 15px further left. Standard desktop uses
   -100px; ultra-wide uses -115px. NOTE: 16" MBP (~1728) also falls in
   this range — earlier user confirmed -100px was "perfect" there, but
   most recent instruction overrides. If 16" MBP looks too-far-left
   now, tell me and we'll split the breakpoint further. */
@media (min-width: 1600px) {
  .site-footer__world {
    transform: translateX(calc(-50% - 115px));
    width: calc(100vw + 200px);
  }
}

/* Mobile: don't hide the map. The four-column footer collapses to one
   stacked column at this breakpoint, so there's no column gap to position
   the watermark behind. Instead, the map becomes a dedicated short banner
   that appears AT THE BOTTOM of the footer (just above the copyright line),
   pulled out of the absolute-positioned watermark flow and rendered inline
   inside .site-footer__bottom. We do this in pure CSS by re-anchoring the
   element with a sibling-relative position. */
@media (max-width: 719px) {
  /* On mobile, the map flows in normal layout as a banner between the
     link columns and the copyright row. No more absolute positioning;
     the footer is just three stacked blocks: links → map → copyright. */
  .site-footer__world {
    position: relative;
    top: auto;
    bottom: auto;
    left: auto;
    width: 100%;
    height: 234px;
    transform: none;
    margin-top: 40px;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    overflow: hidden;
  }
  /* Map zoom on mobile is handled via JS that swaps the SVG's viewBox
     attribute to a Moldova-focused rect (see the IIFE at bottom of doc).
     This avoids all the CSS-transform-scale math that doesn't work
     consistently across viewport aspect ratios. Below the breakpoint,
     the SVG element itself fills the band, and the SVG's own viewBox
     controls what's visible — Moldova centered, every time. */
  .site-footer__world svg {
    transform: none;
  }
  /* Map paths slightly more visible on mobile since they're zoomed */
  .site-footer__world .nld-map-paths {
    opacity: 0.16;
  }
  /* Label on mobile: bigger, more visible since it's the focal element */
  .site-footer__world .nld-map-pin-label.city {
    font-size: 6px;
  }
  .site-footer__world .nld-map-pin-label.country {
    font-size: 5px;
  }
  /* Copyright row sits naturally AFTER the map in DOM and visual flow.
     Reset its base margin-top (which is 64px on desktop for spacing
     from the link columns) so the copyright sits flush against the
     map's bottom border on mobile. Also remove the redundant top border
     since the map's border-bottom already provides the separator line. */
  /* .site-footer .site-footer__bottom for higher specificity than the
     base .site-footer__bottom rule that follows later in source order.
     Mobile copyright row sits flush against the map's border-bottom
     above it AND flush to the screen edge below it. */
  .site-footer .site-footer__bottom {
    position: relative;
    z-index: 3;
    margin-top: 0;
    padding-top: 12px;
    padding-bottom: 0;
    border-top: none;
  }
  /* On mobile, the flex row wraps to two lines (375px is too narrow to fit
     both copyright + privacy links on one line). The natural DOM order
     puts the copyright on line 1 and the links on line 2, but the user
     wants the copyright line to be THE VERY LAST visible thing. So we
     re-order with flex order: the Privacy/Sitemap/Terms div goes first,
     the copyright span goes second. */
  .site-footer .site-footer__bottom > span {
    order: 2;
  }
  .site-footer .site-footer__bottom > div {
    order: 1;
  }
  /* Kill the footer's outer padding-bottom on mobile, but keep 16px so
     the copyright text isn't flush against the very edge of the screen. */
  .site-footer {
    padding-bottom: 16px;
  }
}

.site-footer__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 40px;
  position: relative;
  z-index: 2;
}
@media (min-width: 720px) { .site-footer__grid { grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 56px; } }
.site-footer h4 {
  font-size: 12px;
  color: var(--white);
  font-weight: 600;
  margin: 0 0 18px 0;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.site-footer ul { display: grid; gap: 10px; }
.site-footer a { transition: color var(--t-med) var(--ease); }
.site-footer a:hover { color: var(--red); }
.site-footer__brand .brand { margin-bottom: 20px; }
.site-footer__location {
  font-size: 13px;
  line-height: 1.6;
  margin-bottom: 20px;
  color: rgba(255, 255, 255, 0.5);
}
.site-footer__location strong {
  color: var(--white);
  font-weight: 600;
}
.site-footer__phones {
  display: grid;
  gap: 6px;
  font-size: 13px;
  margin-bottom: 24px;
}
.site-footer__phones span {
  color: rgba(255, 255, 255, 0.4);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.site-footer__socials {
  display: flex;
  gap: 10px;
}
.site-footer__social {
  width: 36px;
  height: 36px;
  border: 1px solid rgba(255, 255, 255, 0.15);
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: rgba(255, 255, 255, 0.7);
  transition: all var(--t-med) var(--ease);
}
.site-footer__social svg {
  width: 15px;
  height: 15px;
  fill: currentColor;
}
/* Higher specificity than .site-footer a:hover so the icon stays white
   (not red) when the circle is red on hover.
   Note: previously had `transform: translateY(-2px)` on hover, which
   caused a flicker when hovering the icon's bottom edge — the icon would
   move up out from under the cursor, then snap back. Removed it; the
   color flip is sufficient feedback. */
.site-footer a.site-footer__social:hover {
  background: var(--red);
  color: var(--white);
  border-color: var(--red);
}
.site-footer__bottom {
  /* margin-top + padding-top below were 64px + 24px with a border-top.
     Removed the border (the map's border-bottom already separates the
     copyright row visually on all viewports). Kept the spacing only for
     desktop layout where there's no map immediately above. */
  margin-top: 64px;
  padding-top: 24px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 16px;
  font-size: 12px;
  color: rgba(255, 255, 255, 0.4);
  position: relative;
  z-index: 2;
}
.site-footer__bottom a:hover { color: var(--red); }
/* ---- Sub-footer menu (Privacy · Sitemap · Terms) ----
   wp_nav_menu renders the sub-footer with items_wrap='%3$s' so only the
   <li>s come back, no wrapping <ul>. We render them inline with a · separator
   between items and strip native bullets. WPML's language switcher menu item
   (.wpml-ls-menu-item) is hidden — the language switcher already renders in
   the footer brand column, we don't want it duplicated here. */
.site-footer__bottom > div {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0;
}
.site-footer__bottom > div li {
  list-style: none;
  display: inline-flex;
  align-items: center;
  margin: 0;
  padding: 0;
}
.site-footer__bottom > div li + li::before {
  content: "·";
  margin: 0 10px;
  color: rgba(255, 255, 255, 0.3);
}
.site-footer__bottom > div li a {
  color: rgba(255, 255, 255, 0.6);
  text-decoration: none;
}
.site-footer__bottom > div li a:hover { color: var(--red); }
/* Hide WPML language switcher if it's been added to the sub-footer menu —
   the brand-column switcher is the canonical one. */
.site-footer__bottom .wpml-ls-menu-item { display: none !important; }
.site-footer__bottom .wpml-ls-menu-item + li::before { content: none; }

/* ---------- STICKY MOBILE CTA ---------- */
.sticky-cta {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: var(--ink);
  color: var(--white);
  padding: 14px 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  z-index: 40;
  transform: translateY(100%);
  transition: transform 0.5s var(--ease-out);
  border-top: 1px solid rgba(255, 33, 61, 0.3);
  box-shadow: 0 -10px 30px rgba(0, 0, 0, 0.3);
}
.sticky-cta.is-visible { transform: translateY(0); }
.sticky-cta__text { font-size: 14px; font-weight: 500; }
.sticky-cta__btn {
  background: var(--red);
  color: var(--white);
  height: 40px;
  padding: 0 18px;
  border-radius: 6px;
  font-weight: 500;
  font-size: 13px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.sticky-cta__close {
  color: rgba(255, 255, 255, 0.5);
  font-size: 20px;
  padding: 4px 8px;
  line-height: 1;
}
@media (min-width: 960px) { .sticky-cta { display: none; } }

/* ---------- PREVIEW BADGE ---------- */
:root[data-theme="dark"] .preview-badge,
:root[data-theme="dark"] /* Count-up state: numbers start at 0, animate to final value via JS swap */
.result-card__number {
  font-variant-numeric: tabular-nums;
}
.result-card__number.is-counting {
  color: var(--red);
}

/* ============================================================================
   SURFACE DUO / FOLDABLE DUAL-SCREEN OPTIMIZATION
   ============================================================================
   Foldables like Surface Duo span content across two screens with a physical
   seam/hinge between them. The browser reports a continuous viewport width
   but the user's eye sees a break in the middle. Goal: don't let critical
   content (CTAs, faces, key headings, the map pin) land on the seam.

   We use the standardized CSS env() variables for viewport segments where
   supported, with fallbacks for older Duo browsers that only know the
   experimental "screen-spanning" media feature.

   Two spanning modes:
     - horizontal-viewport-segments: 2 → side-by-side screens, vertical seam
     - vertical-viewport-segments: 2   → stacked screens, horizontal seam
*/

/* --- HORIZONTAL DUAL-SCREEN (Duo unfolded landscape, ~1114x720) --- */
@media (horizontal-viewport-segments: 2) {

  /* Layout strategy: collapse multi-column grids to 2 columns so the gutter
     between columns aligns with the seam. The seam at Duo dual is in the
     center, and a 2-column layout naturally has its gap there. */

  /* Hero: keep two columns but align the column gap with the seam.
     The seam center is at env(viewport-segment-right 0 0), which is the
     right edge of the LEFT screen. We position the gap to match. */
  .hero__inner {
    grid-template-columns: 1fr 1fr;
    column-gap: env(viewport-segment-left 1 0, 56px) - env(viewport-segment-right 0 0, 0px);
  }

  /* Service cards section ("What we do") — the centered "+" badge between
     the two cards lands exactly on the seam. Hide it on Duo dual. */
  .what__grid::after {
    display: none;
  }

  /* Results grid (3 cols on desktop): collapse to 2 columns so the column
     gap aligns with the seam instead of a card straddling it. */
  .results__grid {
    grid-template-columns: 1fr 1fr;
  }

  /* Selected Work (3 cards): collapse to 2 cards visible per row.
     The middle card was crossing the seam; now we have 2 + 1 wrap. */
  .work__grid {
    grid-template-columns: 1fr 1fr;
  }

  /* How We Work (3 cards): same treatment as Results. */
  .how__grid {
    grid-template-columns: 1fr 1fr;
  }

  /* Insights (4 cards): collapse to 2 columns so the gap between cols
     2-3 falls on the seam. */
  .insights__grid {
    grid-template-columns: 1fr 1fr;
  }

  /* Contact section: the form on the right and copy/quote on the left
     already naturally split. We adjust the ratio so the column boundary
     sits ON the seam, giving each screen one element cleanly. */
  .contact__inner {
    grid-template-columns: 1fr 1fr;
  }

  /* Footer 4-col grid: drop to 2 cols so the brand block sits on the left
     screen and the link columns stack on the right. */
  .site-footer__grid {
    grid-template-columns: 1fr 1fr;
    gap: 40px;
  }

  /* World map pin: at viewport width 1114, the desktop -100px shift would
     put Moldova at vw*0.557 - 100 = 521px, very close to the seam (~558px).
     Pull it further left so the pin sits clearly inside the LEFT screen
     rather than on the hinge. */
  .site-footer__world {
    transform: translateX(calc(-50% - 180px));
  }

  /* Pre-footer CTA: already has text-left, buttons-right structure.
     Tighten the column ratio so the split matches the seam. */
  .prefooter__inner {
    grid-template-columns: 1fr auto;
  }
}

/* --- VERTICAL DUAL-SCREEN (Duo unfolded portrait, ~720x1114) --- */
@media (vertical-viewport-segments: 2) {
  /* Horizontal seam runs through the page at roughly the middle vertically.
     Sections naturally stack with their own padding, so most content is
     fine — but we make sure critical headings + CTAs don't land on the
     seam. The header is sticky at the top of the upper screen; the sticky
     mobile CTA would land at the bottom of the lower screen — both safe.

     Main concern: the hero's title + composition might split awkwardly
     across the seam. We add a touch more padding to the hero so the
     "growth" word in the composition isn't bisected. */
  .hero {
    padding-block: clamp(40px, 6vw, 80px);
  }
}

/* --- FALLBACK for older Duo browsers (only support screen-spanning) --- */
@media (screen-spanning: single-fold-vertical) {
  /* Same rules as horizontal-viewport-segments: 2 — Duo with the fold
     running vertically (i.e., side-by-side screens). */
  .what__grid::after { display: none; }
  .results__grid,
  .work__grid,
  .how__grid,
  .insights__grid,
  .contact__inner,
  .site-footer__grid {
    grid-template-columns: 1fr 1fr;
  }
  .site-footer__world {
    transform: translateX(calc(-50% - 180px));
  }
}

/* ----------------------------------------------------------------
   WordPress accessibility utilities.
   Standard WP convention — these classes are used by core, themes,
   and many plugins. The .screen-reader-text class visually hides
   content while keeping it readable by screen readers; .skip-link
   gives keyboard users a way to jump past the nav.
   ---------------------------------------------------------------- */
.screen-reader-text {
  border: 0;
  clip: rect(1px, 1px, 1px, 1px);
  -webkit-clip-path: inset(50%);
  clip-path: inset(50%);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute !important;
  width: 1px;
  word-wrap: normal !important;
}
.screen-reader-text:focus {
  background-color: var(--color-bg);
  clip: auto !important;
  -webkit-clip-path: none;
  clip-path: none;
  color: var(--color-text);
  display: block;
  font-size: 14px;
  font-weight: 600;
  height: auto;
  left: 5px;
  line-height: normal;
  padding: 12px 16px;
  text-decoration: none;
  top: 5px;
  width: auto;
  z-index: 999;
}
.skip-link {
  position: absolute;
  top: -100px;
  left: 0;
  z-index: 100000;
}
.skip-link:focus {
  top: 0;
}

/* The count-up animation targets a <span class="num"> inside result cards.
   No special styling needed — it inherits everything from .result-card__number.
   Declaring the class explicitly here just to satisfy linters / make the
   targeting visible in the stylesheet. */
.result-card__number .num { color: inherit; font: inherit; }
