/* ============================================================
   GSDev — Main Stylesheet v4 "Stripi"
   Design: Stripe-style — white canvas, deep-navy ink, indigo CTA,
   atmospheric gradient mesh hero, Sohne-thin (Inter 300) display.
   Source spec: /docs/DESIGN-stripe.md
   ============================================================ */

/* ------------------------------------------------------------
   1. DESIGN TOKENS — Stripe palette
   ------------------------------------------------------------ */
:root {
  /* Brand / accent — indigo */
  --primary:        #533afd;
  --primary-deep:   #4434d4;
  --primary-press:  #2e2b8c;
  --primary-soft:   #665efd;
  --primary-sub:    #b9b9f9;
  --brand-dark:     #1c1e54;

  /* Ink (text + dark surfaces) — deep navy, never pure black */
  --ink:            #0d253d;
  --ink-secondary:  #273951;
  --ink-mute:       #64748d;
  --ink-mute-2:     #61718a;
  --on-primary:     #ffffff;

  /* Surfaces */
  --canvas:         #ffffff;
  --canvas-soft:    #f6f9fc;
  --canvas-cream:   #f5e9d4;
  --hairline:       #e3e8ee;
  --hairline-input: #a8c3de;

  /* Gradient mesh stops */
  --ruby:           #ea2261;
  --magenta:        #f96bee;
  --lemon:          #f5e9d4;

  /* Shadows — Stripe uses subtle navy-tinted lift */
  --shadow-1:       0 1px 3px rgba(0,55,112,0.08);
  --shadow-2:       0 8px 24px rgba(0,55,112,0.08), 0 2px 6px rgba(0,55,112,0.04);

  /* Gradients */
  --grad-brand:     linear-gradient(135deg, var(--primary) 0%, var(--primary-deep) 100%);
  --grad-text:      linear-gradient(135deg, var(--primary) 0%, var(--ruby) 100%);
  --grad-aurora:    linear-gradient(135deg, var(--primary) 0%, var(--primary-soft) 50%, var(--magenta) 100%);
  --grad-sky:       linear-gradient(135deg, var(--primary-soft) 0%, var(--primary) 100%);
  --grad-lime:      linear-gradient(135deg, var(--primary-soft) 0%, var(--primary) 100%);
  /* Signature Stripi gradient mesh — real MJ-generated organic mesh PNG.
     Falls back to CSS gradient if image fails to load. */
  --grad-mesh:
    url('../images/hero-mesh.png') center top / cover no-repeat,
    radial-gradient(ellipse 80% 60% at 20% 30%, rgba(245,233,212,0.9), transparent 60%),
    radial-gradient(ellipse 70% 60% at 60% 40%, rgba(185,185,249,0.85), transparent 60%),
    radial-gradient(ellipse 80% 60% at 80% 20%, rgba(83,58,253,0.5), transparent 60%),
    linear-gradient(180deg, #f6f9fc 0%, #ffffff 100%);

  /* ------------------------------------------------------------
     Legacy alias bridge — maps OLD v3 token names onto Stripe
     so existing class names keep working without per-file edits.
     ------------------------------------------------------------ */
  /* Dark-canvas aliases now point to white/navy where appropriate */
  --ink-2:          var(--canvas-soft);
  --ink-3:          var(--brand-dark);
  --ink-4:          var(--brand-dark);
  --glass:          rgba(13,37,61,0.03);
  --glass-mid:      rgba(13,37,61,0.05);
  --glass-hi:       rgba(13,37,61,0.08);
  --rim:            var(--hairline);
  --rim-mid:        var(--hairline);
  --rim-hi:         var(--hairline-input);

  /* "Snow" was cream-on-dark; now ink-on-white */
  --snow:           var(--ink);
  --snow-mid:       var(--ink-mute);
  --snow-low:       var(--ink-mute-2);
  --snow-dim:       var(--hairline-input);

  /* Old accent tokens → indigo primary */
  --amber:          var(--primary);
  --amber-soft:     var(--primary-soft);
  --amber-glow:     rgba(83,58,253,0.22);
  --gold:           var(--primary-deep);
  --sky:            var(--primary-soft);
  --sky-dark:       var(--primary);
  --sky-glow:       rgba(102,94,253,0.18);
  --violet:         var(--primary);
  --violet-soft:    var(--primary-soft);
  --violet-glow:    rgba(83,58,253,0.22);
  --indigo:         var(--primary-deep);
  --lime:           var(--primary-soft);
  --lime-dark:      var(--primary);
  --lime-glow:      rgba(102,94,253,0.18);

  /* Light palette aliases */
  --paper:          var(--canvas);
  --paper-2:        var(--canvas-soft);
  --paper-3:        var(--canvas-cream);
  --ink-on:         var(--ink);
  --mid-on:         var(--ink-secondary);
  --muted-on:       var(--ink-mute);
  --border-on:      var(--hairline);
  --border-mid:     var(--hairline-input);

  /* `c-` semantic aliases */
  --c-purple:       var(--primary);
  --c-purple-light: var(--primary-soft);
  --c-lime:         var(--primary-soft);
  --c-dark:         var(--canvas);
  --c-dark-2:       var(--canvas-soft);
  --c-dark-3:       var(--brand-dark);
  --c-dark-border:  var(--hairline);
  --c-dark-text:    var(--ink);
  --c-dark-muted:   var(--ink-mute);
  --c-bg:           var(--canvas);
  --c-bg-tint:      var(--canvas-soft);
  --c-text:         var(--ink);
  --c-text-mid:     var(--ink-secondary);
  --c-text-muted:   var(--ink-mute);
  --c-border:       var(--hairline);
  --c-border-mid:   var(--hairline-input);
  --c-border-subtle:var(--hairline);
  --grad-card-dark: linear-gradient(135deg, rgba(83,58,253,0.04) 0%, rgba(83,58,253,0.02) 100%);
  --shadow-card:    var(--shadow-1);
  --shadow-hover:   var(--shadow-2);
  --shadow-purple:  0 8px 32px rgba(83,58,253,0.28);
  --shadow-dark-card: var(--shadow-1);

  /* Radius — Stripe scale (smaller than v3) */
  --r-xs:   4px;
  --r-sm:   6px;
  --r-md:   8px;
  --r-lg:   12px;
  --r-xl:   16px;
  --r-2xl:  24px;
  --r-pill: 9999px;

  /* Layout */
  --nav-h:      68px;
  --container:  1180px;
  --section-py: 96px;

  /* Font — Inter as open-source Sohne substitute */
  --font: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

  /* Easing */
  --ease:     cubic-bezier(0.25, 0.46, 0.45, 0.94);
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --t:        0.22s cubic-bezier(0.25,0.46,0.45,0.94);
  --t-slow:   0.45s cubic-bezier(0.16,1,0.3,1);
}

/* ------------------------------------------------------------
   2. RESET + BASE
   ------------------------------------------------------------ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
ul, ol { list-style: none; }

html {
  font-size: 16px;
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

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

body {
  font-family: var(--font);
  color: var(--ink);
  background: var(--canvas);
  line-height: 1.5;
  font-weight: 300;
  /* Stripe's editorial signature: ss01 stylistic set globally */
  font-feature-settings: "ss01", "cv11";
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Tabular figures for money / numerics — Stripe's quiet financial-data signal */
.tnum, .num, [data-numeric], td.num, .stat-num, .pricing-amount {
  font-feature-settings: "ss01", "tnum";
  font-variant-numeric: tabular-nums;
}

img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button, input, select, textarea { font: inherit; }

/* Accessibility */
.skip-link {
  position: absolute;
  top: -100%;
  left: 16px;
  z-index: 10000;
  padding: 10px 20px;
  background: var(--violet);
  color: #fff;
  font-weight: 700;
  font-size: 0.9375rem;
  border-radius: 0 0 var(--r-sm) var(--r-sm);
  text-decoration: none;
  transition: top 0.15s;
}
.skip-link:focus { top: 0; }

:focus-visible {
  outline: 2px solid var(--violet);
  outline-offset: 3px;
  border-radius: 4px;
}
:focus:not(:focus-visible) { outline: none; }

/* Utilities */
.hidden  { display: none !important; }
.sr-only { position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0; }

/* ------------------------------------------------------------
   3. SCROLL CHROME
   ------------------------------------------------------------ */
#scroll-progress {
  position: fixed;
  top: 0; left: 0;
  width: 0%;
  height: 2px;
  background: linear-gradient(90deg, var(--violet), var(--lime));
  z-index: 9999;
  transition: width 0.1s linear;
  pointer-events: none;
}

#back-to-top {
  position: fixed;
  bottom: 32px;
  right: 32px;
  width: 46px; height: 46px;
  border-radius: 50%;
  background: var(--ink-3);
  border: 1px solid var(--rim-mid);
  color: var(--snow);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8px 24px rgba(0,0,0,0.4);
  opacity: 0;
  transform: translateY(10px) scale(0.95);
  transition: opacity 0.25s var(--ease), transform 0.25s var(--ease), background 0.18s, border-color 0.18s;
  z-index: 9997;
  bottom: max(32px, env(safe-area-inset-bottom, 32px));
}
#back-to-top.visible { opacity: 1; transform: translateY(0) scale(1); }
#back-to-top:hover   { background: var(--ink-4); border-color: var(--rim-hi); }

/* ------------------------------------------------------------
   4. LAYOUT
   ------------------------------------------------------------ */
.container {
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 28px;
}

.section { padding: var(--section-py) 0; }
.section--light  { background: var(--canvas); color: var(--ink); }
.section--tint   { background: var(--canvas-soft); color: var(--ink); }
.section--cream  { background: var(--canvas-cream); color: var(--ink); }
/* Stripi has a dark dashboard track — used for product-mockup sections */
.section--dark   { background: var(--brand-dark); color: var(--on-primary); }
.section--dark2  { background: var(--brand-dark); color: var(--on-primary); }

/* ------------------------------------------------------------
   Signature gradient mesh hero — Stripe atmospheric backdrop
   ------------------------------------------------------------ */
.hero-mesh {
  position: relative;
  background: var(--grad-mesh);
  padding: 120px 0 96px;
  overflow: hidden;
}
.hero-mesh::after {
  /* extra wash to soften the bottom fade-into-white */
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 30%;
  background: linear-gradient(180deg, transparent 0%, var(--canvas) 100%);
  pointer-events: none;
}
.hero-mesh > * { position: relative; z-index: 1; }

/* Fade-up reveal animation */
.fade-up {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.65s var(--ease-out), transform 0.65s var(--ease-out);
}
.fade-up.visible { opacity: 1; transform: translateY(0); }

/* ------------------------------------------------------------
   5. SECTION HEADERS
   ------------------------------------------------------------ */
.section-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 5px 13px;
  background: rgba(245,158,11,0.09);
  border: 1px solid rgba(245,158,11,0.18);
  border-radius: var(--r-pill);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--violet-soft);
  margin-bottom: 18px;
}

.section-eyebrow.lime {
  background: rgba(56,189,248,0.08);
  border-color: rgba(56,189,248,0.22);
  color: var(--lime);
}

.section--dark .section-eyebrow {
  background: rgba(245,158,11,0.12);
  border-color: rgba(245,158,11,0.25);
}

.section-title {
  font-size: clamp(1.875rem, 4vw, 3rem);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.035em;
  margin-bottom: 16px;
  color: var(--ink-on);
}

.section--dark .section-title,
.section--dark2 .section-title { color: var(--snow); }

.section-subtitle {
  font-size: 1.0625rem;
  color: var(--muted-on);
  line-height: 1.8;
  max-width: 540px;
}

.section--dark .section-subtitle,
.section--dark2 .section-subtitle { color: var(--snow-mid); }

.section-header { margin-bottom: 64px; }
.section-header.center { text-align: center; }
.section-header.center .section-subtitle { margin: 0 auto; }
.section-header.center .section-eyebrow  { display: inline-flex; }

/* Gradient text utility */
.grad {
  background: var(--grad-text);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* ------------------------------------------------------------
   6. NAVIGATION
   ------------------------------------------------------------ */
.nav {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 1000;
  height: var(--nav-h);
  display: flex;
  align-items: center;
  transition: background 0.3s var(--ease), border-color 0.3s var(--ease), box-shadow 0.3s var(--ease);
}

.nav--dark {
  background: rgba(12,11,9,0.75);
  backdrop-filter: blur(24px) saturate(180%);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
  border-bottom: 1px solid var(--rim);
}

.nav--light {
  background: rgba(255,255,255,0.88);
  backdrop-filter: blur(24px) saturate(180%);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
  border-bottom: 1px solid var(--border-on);
  box-shadow: 0 1px 0 rgba(0,0,0,0.04);
}

.nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 28px;
}

/* Logo */
.nav-logo {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 1.125rem;
  font-weight: 800;
  letter-spacing: -0.04em;
  text-decoration: none;
  flex-shrink: 0;
}
.nav--dark  .nav-logo { color: var(--snow); }
.nav--light .nav-logo { color: var(--ink-on); }
.footer .nav-logo      { color: var(--snow); }

.nav-logo-mark {
  width: 32px; height: 32px;
  border-radius: 9px;
  background: var(--grad-brand);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.8125rem;
  font-weight: 900;
  color: #fff;
  flex-shrink: 0;
  letter-spacing: -0.02em;
}

/* Desktop links */
.nav-links {
  display: flex;
  align-items: center;
  gap: 0;
}

.nav-link {
  padding: 7px 13px;
  font-size: 0.9rem;
  font-weight: 500;
  border-radius: var(--r-sm);
  transition: color var(--t), background var(--t);
  text-decoration: none;
  letter-spacing: -0.01em;
}

.nav--dark  .nav-link            { color: var(--snow-mid); }
.nav--dark  .nav-link:hover      { color: var(--snow); background: var(--glass-mid); }
.nav--dark  .nav-link[aria-current="page"] { color: var(--snow); background: var(--glass); }

.nav--light .nav-link            { color: var(--mid-on); }
.nav--light .nav-link:hover      { color: var(--ink-on); background: var(--border-on); }
.nav--light .nav-link[aria-current="page"] { color: var(--violet); font-weight: 600; }

.nav-cta { flex-shrink: 0; }

/* Hamburger */
.nav-hamburger {
  display: none;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  width: 44px; height: 44px;
  border: none;
  background: none;
  cursor: pointer;
  gap: 5px;
  border-radius: var(--r-xs);
  min-width: 44px; min-height: 44px;
}
.nav-hamburger span {
  display: block;
  width: 20px; height: 1.5px;
  background: currentColor;
  border-radius: 2px;
  transition: var(--t);
}
.nav--dark  .nav-hamburger { color: var(--snow); }
.nav--light .nav-hamburger { color: var(--ink-on); }

/* Mobile overlay */
.nav-mobile {
  display: flex;
  position: fixed;
  inset: 0;
  z-index: 998;
  background: rgba(12,11,9,0.97);
  backdrop-filter: blur(32px);
  -webkit-backdrop-filter: blur(32px);
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  padding: 32px;
  visibility: hidden;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s var(--ease), visibility 0.25s;
}
.nav-mobile.open {
  visibility: visible;
  opacity: 1;
  pointer-events: auto;
}
.nav-mobile .nav-link {
  color: var(--snow-mid);
  font-size: 1.625rem;
  font-weight: 700;
  padding: 14px 40px;
  min-height: 44px;
  border-radius: var(--r-md);
  letter-spacing: -0.03em;
  width: 100%;
  text-align: center;
}
.nav-mobile .nav-link:hover,
.nav-mobile .nav-link[aria-current="page"] { color: var(--snow); background: var(--glass-mid); }

.nav-mobile-close {
  position: absolute; top: 20px; right: 20px;
  width: 44px; height: 44px;
  display: flex; align-items: center; justify-content: center;
  background: var(--glass-mid);
  border: 1px solid var(--rim);
  border-radius: 50%;
  color: var(--snow);
  font-size: 1.125rem;
  cursor: pointer;
  transition: var(--t);
}
.nav-mobile-close:hover { background: var(--glass-hi); }

/* ------------------------------------------------------------
   7. BUTTONS
   ------------------------------------------------------------ */
/* Stripe pill button system — tight 8px 16px padding, single indigo CTA per band */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 18px;
  border-radius: var(--r-pill);
  font-size: 0.9375rem;
  font-weight: 500;
  letter-spacing: 0;
  border: none;
  cursor: pointer;
  transition: background var(--t), color var(--t), box-shadow var(--t), transform var(--t);
  white-space: nowrap;
  text-decoration: none;
  line-height: 1;
  position: relative;
  font-feature-settings: "ss01";
}

.btn-primary {
  background: var(--primary);
  color: var(--on-primary);
  box-shadow: 0 1px 2px rgba(83,58,253,0.20);
}
.btn-primary:hover {
  background: var(--primary-deep);
  box-shadow: 0 4px 12px rgba(83,58,253,0.32);
}
.btn-primary:active { background: var(--primary-press); }

/* lime is legacy name — keep alias; now indigo */
.btn-lime {
  background: var(--primary);
  color: var(--on-primary);
  font-weight: 500;
}
.btn-lime:hover { background: var(--primary-deep); }

.btn-outline-light {
  background: transparent;
  color: var(--on-primary);
  border: 1px solid rgba(255,255,255,0.45);
}
.btn-outline-light:hover {
  background: rgba(255,255,255,0.1);
  border-color: rgba(255,255,255,0.65);
}

.btn-outline {
  background: var(--canvas);
  color: var(--primary);
  border: 1px solid var(--primary);
}
.btn-outline:hover {
  background: rgba(83,58,253,0.05);
}

.btn-dark {
  background: var(--brand-dark);
  color: var(--on-primary);
  border: none;
}
.btn-dark:hover { background: var(--primary-press); }

.btn-ghost {
  background: transparent;
  color: var(--ink-mute);
  border: none;
}
.btn-ghost:hover { color: var(--ink); background: var(--canvas-soft); }

.btn-lg  { padding: 12px 22px; font-size: 1rem; }
.btn-sm  { padding: 6px 14px; font-size: 0.875rem; }

.btn .arrow { transition: transform var(--t); }
.btn:hover .arrow { transform: translateX(4px); }

/* ------------------------------------------------------------
   8. HERO
   ------------------------------------------------------------ */
.hero {
  /* In v4 Stripi: when .hero also has .hero-mesh, the mesh background wins. */
  background: var(--canvas);
  min-height: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: calc(var(--nav-h) + 80px) 0 96px;
  position: relative;
  overflow: hidden;
  text-align: center;
  color: var(--ink);
}

/* v3 aurora dimmed when hero-mesh is present */
.hero:not(.hero-mesh)::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 90% 60% at 50% -10%, rgba(83,58,253,0.10) 0%, transparent 65%);
  pointer-events: none;
}
.hero.hero-mesh::before, .hero.hero-mesh::after { content: none; }

/* Animated orbs */
.hero-orb {
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  filter: blur(80px);
}
.hero-orb-1 {
  width: 600px; height: 600px;
  background: radial-gradient(circle, rgba(245,158,11,0.15) 0%, transparent 70%);
  top: -180px; left: -100px;
  animation: orb-drift-a 18s ease-in-out infinite;
}
.hero-orb-2 {
  width: 500px; height: 500px;
  background: radial-gradient(circle, rgba(217,119,6,0.10) 0%, transparent 70%);
  bottom: -120px; right: -80px;
  animation: orb-drift-b 22s ease-in-out infinite;
}
.hero-orb-3 {
  width: 300px; height: 300px;
  background: radial-gradient(circle, rgba(56,189,248,0.07) 0%, transparent 70%);
  top: 50%; left: 60%;
  transform: translate(-50%,-50%);
}

@keyframes orb-drift-a {
  0%, 100% { transform: translate(0,0); }
  33%       { transform: translate(48px, 32px); }
  66%       { transform: translate(-24px, 56px); }
}
@keyframes orb-drift-b {
  0%, 100% { transform: translate(0,0); }
  33%       { transform: translate(-40px,-28px); }
  66%       { transform: translate(32px,-48px); }
}

.hero-inner {
  position: relative;
  z-index: 1;
  max-width: 880px;
  margin: 0 auto;
  padding: 0 28px;
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* Badge */
.hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 16px;
  background: rgba(56,189,248,0.07);
  border: 1px solid rgba(56,189,248,0.2);
  border-radius: var(--r-pill);
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--lime);
  margin-bottom: 36px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.hero-badge-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--lime);
  flex-shrink: 0;
  animation: dot-pulse 2s ease-in-out infinite;
}

@keyframes dot-pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%       { opacity: 0.5; transform: scale(0.75); }
}
@media (prefers-reduced-motion: reduce) {
  .hero-badge-dot { animation: none; }
}

/* Title */
.hero-title {
  font-size: clamp(2.75rem, 8vw, 5.5rem);
  font-weight: 900;
  line-height: 1.04;
  letter-spacing: -0.045em;
  color: var(--snow);
  margin-bottom: 28px;
}

.hero-title .grad {
  background: var(--grad-text);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* Subtitle */
.hero-subtitle {
  font-size: clamp(1.0625rem, 2vw, 1.25rem);
  color: var(--snow-mid);
  line-height: 1.72;
  max-width: 580px;
  margin-bottom: 40px;
}

/* CTA buttons */
.hero-actions {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  justify-content: center;
  margin-bottom: 64px;
}

/* Stats */
.hero-stats {
  display: flex;
  align-items: stretch;
  gap: 0;
  border: 1px solid var(--rim);
  border-radius: var(--r-lg);
  background: var(--glass);
  backdrop-filter: blur(12px);
  overflow: hidden;
}

.hero-stats > div {
  flex: 1;
  padding: 20px 32px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  position: relative;
}

.hero-stats > div + div::before {
  content: '';
  position: absolute;
  left: 0; top: 16px; bottom: 16px;
  width: 1px;
  background: var(--rim);
}

.hero-stat-num {
  font-size: 1.75rem;
  font-weight: 900;
  letter-spacing: -0.04em;
  color: var(--snow);
  line-height: 1;
  background: var(--grad-text);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.hero-stat-label {
  font-size: 0.78rem;
  color: var(--snow-low);
  font-weight: 500;
  letter-spacing: 0.02em;
}

/* Clients strip */
.hero-clients {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  margin-top: 56px;
}

.hero-clients-label {
  font-size: 0.78rem;
  color: var(--snow-dim);
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.client-logos {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: center;
}

.client-logo {
  display: inline-block;
  padding: 6px 16px;
  background: var(--glass);
  border: 1px solid var(--rim);
  border-radius: var(--r-pill);
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--snow-low);
  letter-spacing: -0.01em;
}

/* ------------------------------------------------------------
   9. METRICS STRIP
   ------------------------------------------------------------ */
.metrics-strip {
  background: var(--ink-2);
  border-top: 1px solid var(--rim);
  border-bottom: 1px solid var(--rim);
  padding: 0;
  overflow: hidden;
}

.metrics-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
}

.metric-item {
  padding: 36px 28px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  position: relative;
  transition: background var(--t);
}

.metric-item:hover { background: var(--glass); }

.metric-item + .metric-item::before {
  content: '';
  position: absolute;
  left: 0; top: 20%; bottom: 20%;
  width: 1px;
  background: var(--rim);
}

.metric-num {
  font-size: 2rem;
  font-weight: 900;
  letter-spacing: -0.04em;
  color: var(--snow);
  line-height: 1;
}

.metric-label {
  font-size: 0.8rem;
  color: var(--snow-mid);
  font-weight: 500;
  letter-spacing: 0.02em;
}

/* ------------------------------------------------------------
   10. FEATURE / SERVICES CARDS (homepage grid)
   ------------------------------------------------------------ */
.feature-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 1px;
  background: var(--border-on);
  border: 1px solid var(--border-on);
  border-radius: var(--r-xl);
  overflow: hidden;
}

.feature-card {
  background: var(--paper);
  padding: 40px 36px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  transition: background var(--t);
  position: relative;
}
.feature-card:hover { background: var(--paper-2); }

.feature-icon {
  width: 48px; height: 48px;
  border-radius: var(--r-sm);
  background: rgba(245,158,11,0.08);
  border: 1px solid rgba(245,158,11,0.14);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--violet);
  flex-shrink: 0;
}

.feature-title {
  font-size: 1.125rem;
  font-weight: 700;
  letter-spacing: -0.025em;
  color: var(--ink-on);
  line-height: 1.3;
}

.feature-desc {
  font-size: 0.9375rem;
  color: var(--muted-on);
  line-height: 1.7;
  flex: 1;
}

.feature-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--violet);
  margin-top: 8px;
  transition: gap var(--t);
}
.feature-link:hover { gap: 10px; }

/* Dark variant (about page values) */
.feature-card--dark {
  background: var(--glass);
  border: 1px solid var(--rim);
  border-radius: var(--r-lg);
}
.feature-card--dark:hover { background: var(--glass-mid); }
.feature-card--dark .feature-title { color: var(--snow); }
.feature-card--dark .feature-desc  { color: var(--snow-mid); }
.feature-card--dark .feature-icon {
  background: rgba(245,158,11,0.15);
  border-color: rgba(245,158,11,0.25);
}

.feature-grid--dark {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 16px;
  background: transparent;
  border: none;
  border-radius: 0;
}

/* ------------------------------------------------------------
   11. PORTFOLIO CARDS
   ------------------------------------------------------------ */
.portfolio-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 24px;
}

.portfolio-card {
  background: var(--paper);
  border: 1px solid var(--border-on);
  border-radius: var(--r-xl);
  overflow: hidden;
  transition: box-shadow var(--t-slow), transform var(--t-slow), border-color var(--t);
  display: flex;
  flex-direction: column;
}
.portfolio-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 64px rgba(0,0,0,0.1);
  border-color: rgba(245,158,11,0.2);
}

.portfolio-card-image {
  aspect-ratio: 16/9;
  overflow: hidden;
  flex-shrink: 0;
  position: relative;
}
.portfolio-card-image img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform 0.7s var(--ease);
}
.portfolio-card:hover .portfolio-card-image img { transform: scale(1.05); }

.portfolio-img-placeholder {
  width: 100%; height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 200px;
}

/* Shine on hover */
.portfolio-card-image::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, transparent 60%);
  opacity: 0;
  transition: opacity var(--t);
}
.portfolio-card:hover .portfolio-card-image::after { opacity: 1; }

.portfolio-card-body {
  padding: 28px 28px 32px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex: 1;
}

.portfolio-category {
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--violet-soft);
}

.portfolio-title {
  font-size: 1.125rem;
  font-weight: 700;
  letter-spacing: -0.025em;
  color: var(--ink-on);
  line-height: 1.3;
}

.portfolio-desc {
  font-size: 0.9375rem;
  color: var(--muted-on);
  line-height: 1.7;
  flex: 1;
}

.portfolio-cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--violet);
  margin-top: 8px;
  transition: gap var(--t);
}
.portfolio-cta:hover { gap: 10px; }

/* Portfolio page - full listing */
.portfolio-category-tag {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--muted-on);
  padding: 4px 10px;
  background: var(--border-on);
  border-radius: var(--r-pill);
}

/* Tech tags */
.tech-tags { display: flex; flex-wrap: wrap; gap: 6px; }

.tech-tag {
  display: inline-block;
  padding: 4px 10px;
  background: var(--paper-3);
  border: 1px solid var(--border-on);
  border-radius: var(--r-pill);
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--mid-on);
  cursor: default;
  transition: background var(--t), border-color var(--t), color var(--t);
}
.tech-tag:hover,
button.tech-tag[data-tech-filter]:hover,
button.tech-tag[data-tech-filter].active {
  background: rgba(245,158,11,0.08);
  border-color: rgba(245,158,11,0.25);
  color: var(--violet);
}

/* ------------------------------------------------------------
   12. PROCESS STEPS
   ------------------------------------------------------------ */
.process-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  position: relative;
}

/* Connecting line */
.process-grid::before {
  content: '';
  position: absolute;
  top: 28px;
  left: calc(25% / 2);
  right: calc(25% / 2);
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--rim-mid) 15%, var(--rim-mid) 85%, transparent);
  pointer-events: none;
}

.process-step {
  padding: 0 28px 0 0;
  position: relative;
}

.process-num {
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--violet-soft);
  margin-bottom: 28px;
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.process-num::before {
  content: '';
  width: 10px; height: 10px;
  border-radius: 50%;
  background: var(--violet);
  box-shadow: 0 0 0 3px rgba(245,158,11,0.2);
  flex-shrink: 0;
}

.process-title {
  font-size: 1.0625rem;
  font-weight: 700;
  letter-spacing: -0.025em;
  color: var(--snow);
  margin-bottom: 10px;
  line-height: 1.3;
}

.process-desc {
  font-size: 0.9rem;
  color: var(--snow-mid);
  line-height: 1.75;
}

/* ------------------------------------------------------------
   13. TESTIMONIALS
   ------------------------------------------------------------ */
.testimonials-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 20px;
}

.testimonial-card {
  background: var(--paper);
  border: 1px solid var(--border-on);
  border-radius: var(--r-xl);
  padding: 36px 32px;
  display: flex;
  flex-direction: column;
  gap: 20px;
  position: relative;
  transition: box-shadow var(--t-slow), border-color var(--t), transform var(--t-slow);
}
.testimonial-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 20px 48px rgba(0,0,0,0.07);
  border-color: rgba(245,158,11,0.18);
}

/* Large quotation mark */
.testimonial-card::before {
  content: '\201C';
  position: absolute;
  top: 20px; right: 28px;
  font-size: 5rem;
  line-height: 1;
  color: var(--violet);
  opacity: 0.08;
  font-family: Georgia, serif;
  pointer-events: none;
}

.testimonial-stars {
  display: flex;
  gap: 3px;
}
.star {
  width: 14px; height: 14px;
  fill: var(--lime);
}

.testimonial-content {
  font-size: 0.9375rem;
  color: var(--mid-on);
  line-height: 1.78;
  flex: 1;
  font-style: italic;
}

.testimonial-author {
  display: flex;
  align-items: center;
  gap: 12px;
  padding-top: 16px;
  border-top: 1px solid var(--border-on);
}

.testimonial-avatar {
  width: 42px; height: 42px;
  border-radius: 50%;
  background: var(--grad-brand);
  color: #fff;
  font-size: 1rem;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  flex-shrink: 0;
}
.testimonial-avatar img { width: 100%; height: 100%; object-fit: cover; }

.testimonial-name {
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--ink-on);
  letter-spacing: -0.01em;
}

.testimonial-role {
  font-size: 0.8rem;
  color: var(--muted-on);
}

/* ------------------------------------------------------------
   14. CTA SECTION
   ------------------------------------------------------------ */
.cta-section {
  position: relative;
  padding: var(--section-py) 0;
  overflow: hidden;
  background: var(--ink-2);
  text-align: center;
}

.cta-section::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 80% 80% at 50% 50%, rgba(245,158,11,0.16) 0%, transparent 70%),
    radial-gradient(ellipse 40% 40% at 80% 20%, rgba(56,189,248,0.07) 0%, transparent 55%);
  pointer-events: none;
}

.cta-section::after {
  content: '';
  position: absolute;
  bottom: 0; left: 0; right: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--rim-hi), transparent);
}

.cta-section .container { position: relative; z-index: 1; }

.cta-title {
  font-size: clamp(2rem, 5vw, 3.5rem);
  font-weight: 900;
  letter-spacing: -0.04em;
  color: var(--snow);
  line-height: 1.08;
  margin-bottom: 18px;
  max-width: 700px;
  margin-left: auto;
  margin-right: auto;
}

.cta-subtitle {
  font-size: 1.0625rem;
  color: var(--snow-mid);
  max-width: 520px;
  margin: 0 auto 40px;
  line-height: 1.75;
}

.cta-actions {
  display: flex;
  gap: 14px;
  justify-content: center;
  flex-wrap: wrap;
}

/* ------------------------------------------------------------
   15. FOOTER
   ------------------------------------------------------------ */
.footer {
  background: var(--ink);
  border-top: 1px solid var(--rim);
  padding: 72px 0 0;
  padding-bottom: max(40px, env(safe-area-inset-bottom, 40px));
}

.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1.1fr 1.1fr 1.4fr 1.4fr;
  gap: 40px;
  padding-bottom: 56px;
  border-bottom: 1px solid var(--rim);
}

.footer-brand {}

.footer-about {
  font-size: 0.9rem;
  color: var(--snow-mid);
  line-height: 1.75;
  margin: 18px 0 24px;
  max-width: 280px;
}

.footer-social { display: flex; gap: 8px; }

.footer-social-link {
  width: 36px; height: 36px;
  border-radius: var(--r-xs);
  background: var(--glass-mid);
  border: 1px solid var(--rim);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--snow-mid);
  transition: background var(--t), color var(--t), border-color var(--t);
}
.footer-social-link:hover {
  background: var(--glass-hi);
  color: var(--snow);
  border-color: var(--rim-mid);
}

.footer-col {}

.footer-col-title {
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--snow-dim);
  margin-bottom: 20px;
}

.footer-links { display: flex; flex-direction: column; gap: 10px; }

.footer-link {
  font-size: 0.9rem;
  color: var(--snow-mid);
  transition: color var(--t);
}
.footer-link:hover { color: var(--snow); }

.footer-contact-item {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--snow-mid);
  font-size: 0.9rem;
  margin-bottom: 12px;
}
.footer-contact-item svg { color: var(--snow-dim); flex-shrink: 0; }

.footer-bottom {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 24px 0;
  flex-wrap: wrap;
}

.footer-copy {
  font-size: 0.8125rem;
  color: var(--snow-dim);
}

.footer-cookie-btn {
  background: none;
  border: none;
  color: var(--snow-dim);
  font-size: 0.8125rem;
  cursor: pointer;
  padding: 0;
  transition: color var(--t);
}
.footer-cookie-btn:hover { color: var(--snow-mid); }

/* ------------------------------------------------------------
   16. PAGE HEADER (inner pages)
   ------------------------------------------------------------ */
.page-header {
  background: var(--ink);
  padding: calc(var(--nav-h) + 72px) 0 80px;
  position: relative;
  overflow: hidden;
}

.page-header::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 70% 60% at 50% -10%, rgba(245,158,11,0.18) 0%, transparent 65%),
    radial-gradient(ellipse 40% 40% at 80% 80%, rgba(56,189,248,0.06) 0%, transparent 55%);
  pointer-events: none;
}

.page-header::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(245,240,232,0.06) 1px, transparent 1px);
  background-size: 38px 38px;
  mask-image: radial-gradient(ellipse 70% 70% at 50% 50%, black 20%, transparent 100%);
  pointer-events: none;
}

.page-header-title {
  font-size: clamp(2rem, 5vw, 3.5rem);
  font-weight: 900;
  letter-spacing: -0.04em;
  color: var(--snow);
  line-height: 1.08;
  margin-bottom: 18px;
}

.page-header-subtitle {
  font-size: 1.0625rem;
  color: var(--snow-mid);
  max-width: 600px;
  margin: 0 auto;
  line-height: 1.75;
}

/* ------------------------------------------------------------
   17. CONTACT PAGE
   ------------------------------------------------------------ */
.contact-grid {
  display: grid;
  grid-template-columns: 1fr 400px;
  gap: 64px;
  align-items: start;
}

.form-field { margin-bottom: 24px; }

.form-label {
  display: block;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--ink-on);
  margin-bottom: 8px;
  letter-spacing: -0.01em;
}

.form-input,
.form-select,
.form-textarea {
  width: 100%;
  padding: 13px 16px;
  background: var(--paper);
  border: 1px solid var(--border-mid);
  border-radius: var(--r-md);
  font-size: 0.9375rem;
  color: var(--ink-on);
  transition: border-color var(--t), box-shadow var(--t);
  appearance: none;
  -webkit-appearance: none;
}

.form-input:focus,
.form-select:focus,
.form-textarea:focus {
  outline: none;
  border-color: var(--violet);
  box-shadow: 0 0 0 3px rgba(245,158,11,0.12);
}

.form-input::placeholder,
.form-textarea::placeholder { color: var(--muted-on); }

.js-invalid {
  border-color: #ef4444;
  box-shadow: 0 0 0 3px rgba(239,68,68,0.12);
}

.form-textarea { resize: vertical; min-height: 140px; line-height: 1.65; }

.form-hint {
  font-size: 0.8125rem;
  color: var(--muted-on);
  margin-top: 6px;
}

.contact-info {
  background: var(--ink);
  border: 1px solid var(--rim);
  border-radius: var(--r-xl);
  padding: 40px 36px;
  color: var(--snow);
}

.contact-info-title {
  font-size: 1.25rem;
  font-weight: 700;
  letter-spacing: -0.03em;
  color: var(--snow);
  margin-bottom: 8px;
}

.contact-info-subtitle {
  font-size: 0.9rem;
  color: var(--snow-mid);
  line-height: 1.7;
  margin-bottom: 32px;
}

.contact-info-row {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 16px 0;
  border-top: 1px solid var(--rim);
}

.contact-info-icon {
  width: 38px; height: 38px;
  border-radius: var(--r-xs);
  background: var(--glass-mid);
  border: 1px solid var(--rim);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--violet-soft);
  flex-shrink: 0;
}

.contact-info-label {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--snow-mid);
  margin-bottom: 3px;
}

.contact-info-value {
  font-size: 0.9375rem;
  color: var(--snow);
  font-weight: 500;
}

#copy-email-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 12px;
  background: var(--glass-mid);
  border: 1px solid var(--rim);
  border-radius: var(--r-pill);
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--snow-mid);
  cursor: pointer;
  margin-left: 8px;
  transition: background var(--t), color var(--t);
}
#copy-email-btn:hover { background: var(--glass-hi); color: var(--snow); }

.avail-status {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 32px;
  padding: 14px 18px;
  background: rgba(56,189,248,0.06);
  border: 1px solid rgba(56,189,248,0.18);
  border-radius: var(--r-md);
}

.avail-dot {
  width: 9px; height: 9px;
  border-radius: 50%;
  background: var(--lime);
  flex-shrink: 0;
  animation: dot-pulse 2s ease-in-out infinite;
  box-shadow: 0 0 0 3px rgba(56,189,248,0.22);
}

.avail-text {
  font-size: 0.875rem;
  color: var(--lime);
  font-weight: 600;
}

/* ------------------------------------------------------------
   18. SERVICES PAGE
   ------------------------------------------------------------ */
.services-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 20px;
}

.service-card {
  background: var(--paper);
  border: 1px solid var(--border-on);
  border-radius: var(--r-xl);
  padding: 40px 36px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  transition: box-shadow var(--t-slow), transform var(--t-slow), border-color var(--t);
}
.service-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 20px 48px rgba(0,0,0,0.07);
  border-color: rgba(245,158,11,0.2);
}

.service-card-icon {
  width: 52px; height: 52px;
  border-radius: var(--r-sm);
  background: rgba(245,158,11,0.08);
  border: 1px solid rgba(245,158,11,0.14);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--violet);
}

.service-card-title {
  font-size: 1.25rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--ink-on);
}

.service-card-desc {
  font-size: 0.9375rem;
  color: var(--muted-on);
  line-height: 1.75;
  flex: 1;
}

.service-card-price {
  display: inline-block;
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--violet-soft);
  background: rgba(245,158,11,0.08);
  border: 1px solid rgba(245,158,11,0.15);
  border-radius: var(--r-pill);
  padding: 5px 13px;
}

.service-features {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--border-on);
}

.service-feature {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 0.9rem;
  color: var(--mid-on);
  line-height: 1.5;
}

.service-feature-check {
  width: 18px; height: 18px;
  border-radius: 50%;
  background: rgba(245,158,11,0.1);
  border: 1px solid rgba(245,158,11,0.2);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--violet);
  flex-shrink: 0;
  margin-top: 2px;
}

/* ------------------------------------------------------------
   18b. SERVICE DETAIL SECTIONS
   ------------------------------------------------------------ */
.service-detail-grid {
  display: grid;
  grid-template-columns: 5fr 6fr;
  gap: 72px;
  align-items: center;
}
.service-detail-grid--reverse {
  grid-template-columns: 6fr 5fr;
}
.service-detail-grid--reverse .service-detail-visual {
  order: 2;
}
.service-detail-grid--reverse .service-detail-content {
  order: 1;
}

.service-detail-visual {
  border-radius: var(--r-xl);
  min-height: 420px;
  position: relative;
  overflow: hidden;
  background: #0a0a10;
}

.service-visual-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
  transition: transform 0.6s ease;
}
.service-detail-visual:hover .service-visual-img {
  transform: scale(1.04);
}

.service-visual-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    180deg,
    rgba(5,5,12,0.10) 0%,
    rgba(5,5,12,0.20) 50%,
    rgba(5,5,12,0.72) 100%
  );
  pointer-events: none;
}

.service-visual-badge {
  position: absolute;
  bottom: 24px;
  left: 24px;
  right: 24px;
  z-index: 2;
  background: rgba(0,0,0,0.42);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border: 1px solid rgba(255,255,255,0.14);
  border-radius: var(--r-md);
  padding: 16px 20px;
  color: #fff;
}
.service-visual-badge-label {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  opacity: 0.6;
  margin-bottom: 4px;
}
.service-visual-badge-value {
  font-size: 1.125rem;
  font-weight: 800;
  line-height: 1.2;
}
.service-visual-badge-sub {
  font-size: 0.8125rem;
  opacity: 0.55;
  margin-top: 3px;
}

.service-detail-content {
  display: flex;
  flex-direction: column;
}

.service-feature-heading {
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--c-text-mid);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 14px;
}

.service-feature-list {
  list-style: none;
  padding: 0;
  margin: 0 0 0 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.service-feature-item {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: 0.9375rem;
  color: var(--c-text-mid);
  line-height: 1.55;
}

.check-icon {
  flex-shrink: 0;
  margin-top: 1px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: rgba(124,58,237,0.1);
  border: 1px solid rgba(124,58,237,0.25);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--c-violet);
}
.check-icon svg {
  width: 10px;
  height: 10px;
}

.service-detail-cta {
  margin-top: 36px;
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  align-items: center;
}

@media (max-width: 900px) {
  .service-detail-grid,
  .service-detail-grid--reverse {
    grid-template-columns: 1fr;
    gap: 40px;
  }
  .service-detail-grid--reverse .service-detail-visual,
  .service-detail-grid--reverse .service-detail-content {
    order: unset;
  }
  .service-detail-visual {
    min-height: 280px;
  }
}

/* ------------------------------------------------------------
   19. ABOUT PAGE
   ------------------------------------------------------------ */
.about-intro {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 72px;
  align-items: center;
}

.about-image-wrap {}
.about-image-box { aspect-ratio: 3/4; max-height: 500px; }

.prose p {
  font-size: 1.0625rem;
  line-height: 1.8;
  color: var(--mid-on);
  margin-bottom: 18px;
}
.prose p:last-child { margin-bottom: 0; }

/* ------------------------------------------------------------
   20. PORTFOLIO SINGLE PAGE
   ------------------------------------------------------------ */
.portfolio-hero {
  background: var(--paper-2);
  padding: calc(var(--nav-h) + 64px) 0 64px;
}

.portfolio-meta {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 24px;
}

.portfolio-back {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--muted-on);
  transition: color var(--t);
  margin-bottom: 32px;
}
.portfolio-back:hover { color: var(--violet); }

.portfolio-case {
  display: grid;
  grid-template-columns: 1fr 320px;
  gap: 64px;
  align-items: start;
}

.case-section { margin-bottom: 48px; }
.case-heading {
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--violet-soft);
  margin-bottom: 14px;
}

.case-body {
  font-size: 1.0625rem;
  color: var(--mid-on);
  line-height: 1.8;
}

.case-sidebar {}

.case-sidebar-card {
  background: var(--paper-2);
  border: 1px solid var(--border-on);
  border-radius: var(--r-xl);
  padding: 28px;
  margin-bottom: 16px;
}

.case-sidebar-label {
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted-on);
  margin-bottom: 8px;
}

.case-sidebar-value {
  font-size: 0.9375rem;
  color: var(--ink-on);
  font-weight: 500;
}

/* Portfolio filter buttons */
.pf-filters {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 48px;
}

.pf-btn {
  padding: 8px 18px;
  border-radius: var(--r-pill);
  font-size: 0.875rem;
  font-weight: 600;
  background: transparent;
  border: 1px solid var(--border-mid);
  color: var(--mid-on);
  cursor: pointer;
  transition: var(--t);
}
.pf-btn:hover,
.pf-btn.active {
  background: rgba(245,158,11,0.08);
  border-color: rgba(245,158,11,0.25);
  color: var(--violet);
}

/* ------------------------------------------------------------
   21. COOKIE BANNER + MODAL
   ------------------------------------------------------------ */
.ck-banner {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%) translateY(16px);
  width: calc(100% - 48px);
  max-width: 720px;
  background: rgba(19,17,9,0.96);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
  border: 1px solid var(--rim-mid);
  border-radius: var(--r-xl);
  padding: 18px 22px;
  z-index: 9000;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.35s var(--ease-out), transform 0.35s var(--ease-out);
  bottom: max(24px, env(safe-area-inset-bottom, 24px));
}
.ck-banner.visible {
  opacity: 1;
  pointer-events: auto;
  transform: translateX(-50%) translateY(0);
}

.ck-banner-inner {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}

.ck-banner-icon {
  color: var(--violet-soft);
  flex-shrink: 0;
}

.ck-banner-text {
  flex: 1;
  min-width: 200px;
}
.ck-banner-text strong {
  display: block;
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--snow);
  margin-bottom: 2px;
}
.ck-banner-text span {
  font-size: 0.82rem;
  color: var(--snow-mid);
  line-height: 1.5;
}

.ck-banner-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-shrink: 0;
  flex-wrap: wrap;
}

.ck-btn {
  padding: 8px 16px;
  border-radius: var(--r-pill);
  font-size: 0.82rem;
  font-weight: 600;
  cursor: pointer;
  transition: var(--t);
  white-space: nowrap;
  border: none;
}

.ck-btn-ghost {
  background: transparent;
  color: var(--snow-mid);
  border: 1px solid var(--rim);
}
.ck-btn-ghost:hover { background: var(--glass-mid); color: var(--snow); }

.ck-btn-outline {
  background: transparent;
  color: var(--snow-mid);
  border: 1px solid var(--rim-mid);
}
.ck-btn-outline:hover { background: var(--glass-mid); color: var(--snow); }

.ck-btn-primary {
  background: var(--violet);
  color: #fff;
}
.ck-btn-primary:hover { background: #FCD34D; }

/* Cookie modal overlay */
.ck-overlay {
  position: fixed;
  inset: 0;
  z-index: 9001;
  background: rgba(0,0,0,0.7);
  backdrop-filter: blur(8px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s var(--ease);
}
.ck-overlay.visible { opacity: 1; pointer-events: auto; }

.ck-modal {
  background: var(--ink-2);
  border: 1px solid var(--rim-mid);
  border-radius: var(--r-xl);
  width: 100%;
  max-width: 520px;
  max-height: 90vh;
  overflow-y: auto;
}

.ck-modal-header {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 24px 28px;
  border-bottom: 1px solid var(--rim);
}

.ck-modal-header-icon {
  width: 42px; height: 42px;
  border-radius: var(--r-sm);
  background: rgba(245,158,11,0.12);
  border: 1px solid rgba(245,158,11,0.2);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--violet-soft);
  flex-shrink: 0;
}

.ck-modal-title {
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--snow);
  letter-spacing: -0.02em;
}

.ck-modal-subtitle {
  font-size: 0.83rem;
  color: var(--snow-mid);
  margin-top: 2px;
}

.ck-close {
  margin-left: auto;
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--glass-mid);
  border: 1px solid var(--rim);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--snow-mid);
  cursor: pointer;
  transition: var(--t);
  flex-shrink: 0;
}
.ck-close:hover { background: var(--glass-hi); color: var(--snow); }

.ck-modal-body { padding: 8px 0; }

.ck-category {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 20px 28px;
  border-bottom: 1px solid var(--rim);
}

.ck-category-left { display: flex; align-items: flex-start; gap: 14px; }

.ck-category-icon {
  width: 32px; height: 32px;
  border-radius: var(--r-xs);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.ck-category-icon--green { background: rgba(16,185,129,0.12); border: 1px solid rgba(16,185,129,0.2); color: #34d399; }
.ck-category-icon--blue  { background: rgba(245,158,11,0.12); border: 1px solid rgba(245,158,11,0.2); color: var(--violet-soft); }

.ck-category-info strong {
  display: block;
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--snow);
  margin-bottom: 4px;
}
.ck-category-info p {
  font-size: 0.82rem;
  color: var(--snow-mid);
  line-height: 1.55;
}

.ck-always-on {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 0.78rem;
  font-weight: 600;
  color: #34d399;
  white-space: nowrap;
  flex-shrink: 0;
}

.ck-switch { cursor: pointer; flex-shrink: 0; }
.ck-switch input { display: none; }

.ck-track {
  display: block;
  width: 44px; height: 24px;
  background: var(--glass-hi);
  border: 1px solid var(--rim-mid);
  border-radius: var(--r-pill);
  position: relative;
  transition: background var(--t), border-color var(--t);
}
.ck-switch input:checked + .ck-track { background: var(--violet); border-color: var(--violet); }

.ck-thumb {
  position: absolute;
  top: 2px; left: 2px;
  width: 18px; height: 18px;
  border-radius: 50%;
  background: #fff;
  transition: transform var(--t);
  box-shadow: 0 1px 4px rgba(0,0,0,0.3);
}
.ck-switch input:checked + .ck-track .ck-thumb { transform: translateX(20px); }

.ck-modal-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 20px 28px;
  border-top: 1px solid var(--rim);
  flex-wrap: wrap;
}

.ck-footer-note {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.78rem;
  color: var(--snow-low);
}

/* ------------------------------------------------------------
   22. RESPONSIVE
   ------------------------------------------------------------ */
@media (max-width: 1024px) {
  .portfolio-case    { grid-template-columns: 1fr; }
  .contact-grid      { grid-template-columns: 1fr; }
  .about-intro       { grid-template-columns: 1fr; gap: 40px; }
  .footer-grid       { grid-template-columns: 1fr 1fr 1fr; }
  .footer-brand      { grid-column: 1 / -1; }
  .process-grid      { grid-template-columns: 1fr 1fr; gap: 40px; }
  .process-grid::before { display: none; }
  .metrics-grid      { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 768px) {
  :root { --section-py: 72px; --nav-h: 64px; }

  .nav-links, .nav-cta { display: none; }
  .nav-hamburger       { display: flex; }

  .container { padding: 0 20px; }

  .hero { padding: calc(var(--nav-h) + 48px) 0 64px; }
  .hero-inner { padding: 0 20px; }

  .hero-stats {
    flex-direction: row;
    flex-wrap: nowrap;
    width: 100%;
  }
  .hero-stats > div { padding: 16px 12px; }

  .hero-actions { flex-direction: column; align-items: stretch; }
  .hero-actions .btn { text-align: center; justify-content: center; }

  .metrics-grid { grid-template-columns: repeat(2, 1fr); }
  .metric-item  { padding: 28px 20px; }

  .feature-grid {
    grid-template-columns: 1fr;
    border-radius: var(--r-lg);
  }

  .portfolio-grid  { grid-template-columns: 1fr; }
  .process-grid    { grid-template-columns: 1fr; gap: 36px; }
  .testimonials-grid { grid-template-columns: 1fr; }
  .footer-grid     { grid-template-columns: 1fr; gap: 36px; }
  .footer-bottom   { flex-direction: column; align-items: flex-start; gap: 12px; }

  .cta-title { font-size: clamp(1.75rem, 7vw, 2.5rem); }

  #back-to-top { bottom: max(20px, env(safe-area-inset-bottom, 20px)); right: 20px; }

  .ck-banner { width: calc(100% - 32px); bottom: max(16px, env(safe-area-inset-bottom, 16px)); }
  .ck-banner-inner { flex-direction: column; align-items: flex-start; }
  .ck-banner-actions { width: 100%; justify-content: flex-end; }
}

@media (max-width: 480px) {
  .hero-stats { flex-direction: column; }
  .hero-stats > div + div::before { display: none; }
  .hero-stat-num { font-size: 1.5rem; }
  .metrics-grid  { grid-template-columns: 1fr 1fr; }
  .hero-badge    { font-size: 0.7rem; }
}

/* Navigation hamburger: active nav items */
.nav--dark  .nav-link.active  { color: #fff; background: var(--glass-mid); }
.nav--light .nav-link.active  { color: var(--violet); }
[aria-current="page"].nav-link { font-weight: 600; }
.nav--dark  [aria-current="page"].nav-link { color: var(--snow); background: var(--glass-mid); }
.nav--light [aria-current="page"].nav-link { color: var(--violet); }

/* Dark section eyebrow */
.section--dark .section-eyebrow.lime {
  background: rgba(56,189,248,0.08);
  border-color: rgba(56,189,248,0.2);
  color: var(--lime);
}

/* ============================================================
   DARK MODE TOGGLE
   ============================================================ */

/* --- Nav search button --- */
.nav-search-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px; height: 36px;
  border-radius: var(--r-sm);
  transition: background var(--t), color var(--t);
  flex-shrink: 0;
}
.nav--dark  .nav-search-btn { color: var(--snow-mid); }
.nav--dark  .nav-search-btn:hover { color: var(--snow); background: var(--glass-mid); }
.nav--light .nav-search-btn { color: var(--mid-on); }
.nav--light .nav-search-btn:hover { color: var(--ink-on); background: var(--border-on); }

/* --- Theme toggle button --- */
.theme-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px; height: 36px;
  border-radius: var(--r-sm);
  background: none;
  border: none;
  cursor: pointer;
  transition: background var(--t), color var(--t);
  flex-shrink: 0;
}
.nav--dark  .theme-toggle { color: var(--snow-mid); }
.nav--dark  .theme-toggle:hover { color: var(--snow); background: var(--glass-mid); }
.nav--light .theme-toggle { color: var(--mid-on); }
.nav--light .theme-toggle:hover { color: var(--ink-on); background: var(--border-on); }

/* Default (light): show moon, hide sun */
.theme-icon-dark  { display: block; }
.theme-icon-light { display: none; }

/* Dark theme active: show sun, hide moon */
[data-theme="dark"] .theme-icon-dark  { display: none; }
[data-theme="dark"] .theme-icon-light { display: block; }

/* --- Dark theme overrides --- */
[data-theme="dark"] {
  color-scheme: dark;
}
[data-theme="dark"] body {
  background: var(--ink);
  color: var(--snow);
}
[data-theme="dark"] .section--light  { background: var(--ink-2); }
[data-theme="dark"] .section--tint   { background: var(--ink-3); }
[data-theme="dark"] .section-title   { color: var(--snow); }
[data-theme="dark"] .section-subtitle { color: var(--snow-mid); }
[data-theme="dark"] .section-eyebrow {
  background: rgba(245,158,11,0.12);
  border-color: rgba(245,158,11,0.25);
  color: var(--amber-soft);
}
[data-theme="dark"] .nav--light {
  background: rgba(12,11,9,0.92);
  border-bottom-color: var(--rim);
}
[data-theme="dark"] .nav--light .nav-logo { color: var(--snow); }
[data-theme="dark"] .nav--light .nav-link { color: var(--snow-mid); }
[data-theme="dark"] .nav--light .nav-link:hover { color: var(--snow); background: var(--glass-mid); }
[data-theme="dark"] .nav--light .nav-link[aria-current="page"],
[data-theme="dark"] .nav--light .nav-link.active { color: var(--amber-soft); background: var(--glass); }
[data-theme="dark"] .nav--light .nav-hamburger { color: var(--snow); }
[data-theme="dark"] .nav--light .nav-search-btn { color: var(--snow-mid); }
[data-theme="dark"] .nav--light .nav-search-btn:hover { color: var(--snow); background: var(--glass-mid); }
[data-theme="dark"] .nav--light .theme-toggle { color: var(--snow-mid); }
[data-theme="dark"] .nav--light .theme-toggle:hover { color: var(--snow); background: var(--glass-mid); }
[data-theme="dark"] .page-header { background: var(--ink-2); }
[data-theme="dark"] .page-header-title { color: var(--snow); }
[data-theme="dark"] .page-header-subtitle { color: var(--snow-mid); }
[data-theme="dark"] .feature-card {
  background: var(--ink-3);
  border-color: var(--rim);
}
[data-theme="dark"] .feature-card:hover { border-color: var(--rim-mid); }
[data-theme="dark"] .feature-title { color: var(--snow); }
[data-theme="dark"] .feature-desc  { color: var(--snow-mid); }
[data-theme="dark"] .portfolio-card {
  background: var(--ink-2);
  border-color: var(--rim);
}
[data-theme="dark"] .portfolio-card:hover { border-color: var(--rim-mid); }
[data-theme="dark"] .portfolio-title { color: var(--snow); }
[data-theme="dark"] .portfolio-desc  { color: var(--snow-mid); }
[data-theme="dark"] .tech-tag {
  background: var(--glass);
  border-color: var(--rim);
  color: var(--snow-mid);
}
[data-theme="dark"] .form-control,
[data-theme="dark"] .form-control:focus {
  background: var(--ink-3);
  border-color: var(--rim-mid);
  color: var(--snow);
}
[data-theme="dark"] .form-control::placeholder { color: var(--snow-low); }
[data-theme="dark"] .prose { color: var(--snow-mid); }
[data-theme="dark"] .prose h1, [data-theme="dark"] .prose h2,
[data-theme="dark"] .prose h3, [data-theme="dark"] .prose h4 { color: var(--snow); }
[data-theme="dark"] .contact-form-wrap {
  background: var(--ink-2);
  border-color: var(--rim);
}
[data-theme="dark"] .footer { background: #040302; }
[data-theme="dark"] #back-to-top {
  background: var(--ink-4);
  border-color: var(--rim-mid);
}
[data-theme="dark"] .blog-card {
  background: var(--ink-2);
  border-color: var(--rim);
}
[data-theme="dark"] .blog-card:hover { border-color: var(--rim-mid); }
[data-theme="dark"] .blog-card-title a { color: var(--snow); }
[data-theme="dark"] .blog-card-excerpt { color: var(--snow-mid); }
[data-theme="dark"] .search-result-card {
  background: var(--ink-2);
  border-color: var(--rim);
  color: var(--snow);
}
[data-theme="dark"] .search-result-card:hover { border-color: var(--amber); }

/* ============================================================
   PROCESS TIMELINE ANIMATION
   ============================================================ */
.process-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
  position: relative;
}

/* Horizontal connector line — aligned to icon center (80px icon) */
.process-grid::before {
  content: '';
  position: absolute;
  top: 40px;
  left: calc(12.5% + 28px);
  right: calc(12.5% + 28px);
  height: 2px;
  background: linear-gradient(90deg, rgba(245,158,11,0.25) 0%, rgba(245,158,11,0.6) 50%, rgba(245,158,11,0.25) 100%);
  z-index: 0;
}

.process-step {
  position: relative;
  z-index: 1;
  padding: 0 24px 0;
  opacity: 0;
  transform: translateY(32px);
  transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}
.process-step.visible { opacity: 1; transform: translateY(0); }
.process-step:nth-child(2) { transition-delay: 0.12s; }
.process-step:nth-child(3) { transition-delay: 0.24s; }
.process-step:nth-child(4) { transition-delay: 0.36s; }

.process-icon-wrap {
  position: relative;
  width: 80px;
  height: 80px;
  margin-bottom: 24px;
  z-index: 2;
}
.process-icon-wrap img {
  width: 80px;
  height: 80px;
  border-radius: 18px;
  display: block;
  transition: transform 0.3s var(--ease-out), filter 0.3s;
}
.process-step-num {
  position: absolute;
  top: -7px;
  right: -7px;
  width: 22px;
  height: 22px;
  background: var(--amber);
  color: #09090e;
  font-size: 0.65rem;
  font-weight: 900;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  pointer-events: none;
}
.process-step:hover .process-icon-wrap img {
  transform: scale(1.08) translateY(-3px);
  filter: brightness(1.1);
}
/* Legacy — keep hidden */
.process-num { display: none; }
.process-num::before { display: none; }

.process-title {
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--snow);
  margin-bottom: 10px;
  letter-spacing: -0.02em;
  line-height: 1.3;
}
.process-desc {
  font-size: 0.9rem;
  color: var(--snow-mid);
  line-height: 1.7;
}

@media (max-width: 900px) {
  .process-grid {
    grid-template-columns: 1fr 1fr;
    gap: 40px 0;
  }
  .process-grid::before { display: none; }
}
@media (max-width: 600px) {
  .process-grid { grid-template-columns: 1fr; }
}

/* ============================================================
   BLOG CSS
   ============================================================ */
.blog-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 28px;
}
.blog-grid--3col { grid-template-columns: repeat(3, 1fr); }

.blog-card {
  background: var(--paper);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: border-color 0.2s var(--ease), box-shadow 0.2s var(--ease), transform 0.2s var(--ease);
}
.blog-card:hover {
  border-color: var(--amber);
  box-shadow: 0 8px 32px rgba(245,158,11,0.12);
  transform: translateY(-3px);
}

.blog-card-img-wrap {
  display: block;
  aspect-ratio: 16/9;
  overflow: hidden;
  background: var(--ink-3);
  flex-shrink: 0;
}
.blog-card-img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform 0.4s var(--ease);
  display: block;
}
.blog-card:hover .blog-card-img { transform: scale(1.04); }

.blog-card-img-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, var(--ink-3), var(--ink-4));
}

.blog-card-body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 22px 24px 24px;
}

.blog-card-meta {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}
.blog-card-category {
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--amber);
  background: rgba(245,158,11,0.09);
  border: 1px solid rgba(245,158,11,0.18);
  padding: 3px 9px;
  border-radius: var(--r-pill);
  text-decoration: none;
}
.blog-card-category:hover { background: rgba(245,158,11,0.16); }
.blog-card-date,
.blog-card-read {
  font-size: 0.8125rem;
  color: var(--c-text-muted);
}
.blog-card-date::before { content: '·'; margin-right: 10px; color: var(--c-border-mid); }
.blog-card-date:first-child::before { display: none; }

.blog-card-title {
  font-size: 1.125rem;
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.35;
  margin-bottom: 8px;
}
.blog-card-title a {
  color: var(--ink-on);
  text-decoration: none;
  transition: color var(--t);
}
.blog-card-title a:hover { color: var(--amber); }

.blog-card-excerpt {
  font-size: 0.9rem;
  color: var(--c-text-muted);
  line-height: 1.65;
  margin-bottom: 16px;
  flex: 1;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.blog-card-cta {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--amber);
  text-decoration: none;
  margin-top: auto;
  transition: gap var(--t), color var(--t);
}
.blog-card-cta:hover { gap: 9px; color: var(--amber-soft); }

/* Blog single prose */
.blog-prose { font-size: 1.0625rem; line-height: 1.85; color: var(--c-text); }
.blog-prose h2 { font-size: 1.625rem; font-weight: 800; margin: 2.25em 0 0.75em; letter-spacing: -0.03em; }
.blog-prose h3 { font-size: 1.25rem; font-weight: 700; margin: 1.75em 0 0.6em; letter-spacing: -0.02em; }
.blog-prose p  { margin: 0 0 1.35em; }
.blog-prose ul, .blog-prose ol { margin: 0 0 1.35em 1.5em; list-style: revert; }
.blog-prose li { margin: 0.4em 0; }
.blog-prose a  { color: var(--amber); text-decoration: underline; text-underline-offset: 3px; }
.blog-prose a:hover { color: var(--amber-soft); }
.blog-prose strong { font-weight: 700; color: var(--ink-on); }
.blog-prose blockquote {
  border-left: 3px solid var(--amber);
  margin: 1.75em 0;
  padding: 12px 20px;
  background: rgba(245,158,11,0.06);
  border-radius: 0 var(--r-xs) var(--r-xs) 0;
  color: var(--c-text-mid);
  font-style: italic;
}
.blog-prose pre {
  background: var(--ink-2);
  border: 1px solid var(--rim);
  border-radius: var(--r-sm);
  padding: 20px 24px;
  overflow-x: auto;
  font-size: 0.875rem;
  line-height: 1.65;
  margin: 1.75em 0;
}
.blog-prose code {
  font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;
  font-size: 0.875em;
  background: rgba(245,158,11,0.1);
  border: 1px solid rgba(245,158,11,0.18);
  padding: 2px 6px;
  border-radius: 4px;
}
.blog-prose pre code { background: none; border: none; padding: 0; font-size: 1em; color: var(--snow); }
.blog-prose img { border-radius: var(--r-md); margin: 1.5em 0; max-width: 100%; }
.blog-prose hr { border: none; border-top: 1px solid var(--c-border); margin: 2em 0; }

@media (max-width: 768px) {
  .blog-grid { grid-template-columns: 1fr 1fr; gap: 20px; }
  .blog-grid--3col { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 520px) {
  .blog-grid,
  .blog-grid--3col { grid-template-columns: 1fr; }
}

/* ============================================================
   RESULTS METRICS CALLOUT STRIP
   ============================================================ */
.results-metrics-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  margin-bottom: 28px;
  padding: 24px;
  background: linear-gradient(135deg, rgba(245,158,11,0.07) 0%, rgba(56,189,248,0.05) 100%);
  border: 1px solid rgba(245,158,11,0.18);
  border-radius: var(--r-lg);
}
.results-metric-card {
  flex: 1 1 180px;
  text-align: center;
  padding: 18px 16px;
  background: var(--paper);
  border: 1px solid var(--c-border);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-card);
}
.results-metric-value {
  display: block;
  font-size: 1.25rem;
  font-weight: 900;
  letter-spacing: -0.03em;
  color: var(--amber);
  line-height: 1.2;
}

/* ============================================================
   FOOTER NEWSLETTER FORM
   ============================================================ */
.footer-nl-form {
  display: flex;
  gap: 0;
  border: 1px solid rgba(255,248,235,0.12);
  border-radius: var(--r-pill);
  overflow: hidden;
  background: rgba(255,248,235,0.04);
}
.footer-nl-input {
  flex: 1;
  background: transparent;
  border: none;
  outline: none;
  color: var(--snow);
  font-size: 0.875rem;
  padding: 10px 16px;
  min-width: 0;
}
.footer-nl-input::placeholder { color: rgba(245,240,232,0.35); }
.footer-nl-btn {
  background: var(--grad-brand);
  border: none;
  color: #fff;
  cursor: pointer;
  padding: 10px 16px;
  display: flex;
  align-items: center;
  transition: opacity var(--t);
  flex-shrink: 0;
}
.footer-nl-btn:hover { opacity: 0.88; }

/* Footer newsletter col: full-width on small screens */
@media (max-width: 640px) {
  .footer-newsletter-col { grid-column: 1 / -1; }
}

/* ============================================================
   SEARCH PAGE HOVER
   ============================================================ */
.search-result-card:hover {
  border-color: var(--amber) !important;
  box-shadow: 0 4px 20px rgba(245,158,11,0.1);
}
.search-result-card h2 { transition: color var(--t); }
.search-result-card:hover h2 { color: var(--amber); }

/* ============================================================
   v4 STRIPI OVERRIDES — typography polarity flip, applied last
   so this block wins specificity over v3 component rules above.
   ============================================================ */

/* Display tier — Sohne-thin (Inter 300) with negative tracking */
h1, h2, .hero-title, .section-title,
.blog-prose h1, .blog-prose h2,
.case-block-title {
  font-weight: 300 !important;
  letter-spacing: -0.025em !important;
  color: var(--ink);
}
.hero-title { letter-spacing: -0.04em !important; }
.section-title { letter-spacing: -0.03em !important; }

h3, h4, h5, h6 { font-weight: 400; color: var(--ink); letter-spacing: -0.015em; }

/* Stripi gradient text helper */
.grad {
  background: var(--grad-text);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* Nav — light surface always (the dark nav becomes a vestige) */
.nav--dark,
.nav--light {
  background: rgba(255,255,255,0.92);
  backdrop-filter: blur(20px) saturate(180%);
  -webkit-backdrop-filter: blur(20px) saturate(180%);
  border-bottom: 1px solid var(--hairline);
  box-shadow: none;
}
.nav-link { color: var(--ink-secondary) !important; font-weight: 400; }
.nav-link:hover { color: var(--primary) !important; }
.nav--dark .nav-link[aria-current="page"],
.nav--light .nav-link[aria-current="page"] { color: var(--primary) !important; font-weight: 500; }
.nav-logo, .nav-logo span { color: var(--ink) !important; }
.nav-logo-mark {
  background: var(--primary) !important;
  color: var(--on-primary) !important;
  border-radius: var(--r-sm) !important;
}

/* Footer — light surface per Stripe spec */
.footer,
footer.footer {
  background: var(--canvas) !important;
  color: var(--ink-mute) !important;
  border-top: 1px solid var(--hairline);
}
.footer a { color: var(--ink-secondary); }
.footer a:hover { color: var(--primary); }
.footer h4, .footer h5 { color: var(--ink); }

/* CTA section — Stripe uses the cream band for warm interludes */
.cta-section {
  background: var(--canvas-cream) !important;
  color: var(--ink) !important;
  padding: 80px 0;
}
.cta-title { color: var(--ink) !important; }
.cta-subtitle { color: var(--ink-secondary) !important; }

/* Cards — white surface with hairline + Level-1 lift */
.stat-card, .portfolio-card, .service-card, .testimonial-card,
.case-block, .blog-card, .feature-card, .pricing-card,
.admin-card {
  background: var(--canvas) !important;
  border: 1px solid var(--hairline) !important;
  border-radius: var(--r-lg) !important;
  box-shadow: var(--shadow-1);
  color: var(--ink);
}
.stat-card:hover, .portfolio-card:hover, .service-card:hover {
  box-shadow: var(--shadow-2);
  transform: translateY(-2px);
}

/* Forms — Stripe hairline-input border, indigo focus ring */
.form-control, input[type="text"], input[type="email"], input[type="tel"],
input[type="date"], input[type="password"], input[type="search"],
select, textarea {
  background: var(--canvas) !important;
  color: var(--ink) !important;
  border: 1px solid var(--hairline-input) !important;
  border-radius: var(--r-sm) !important;
  padding: 8px 12px;
  font-weight: 300;
  font-feature-settings: "ss01";
  transition: border-color var(--t), box-shadow var(--t);
}
.form-control:focus, input:focus, select:focus, textarea:focus {
  border-color: var(--primary) !important;
  outline: none !important;
  box-shadow: 0 0 0 3px rgba(83,58,253,0.15);
}
.form-label { color: var(--ink); font-weight: 400; }

/* Portfolio / blog category tag — Stripe soft-indigo pill */
.portfolio-category, .pill-tag, .category-tag {
  background: var(--primary-sub) !important;
  color: var(--primary-deep) !important;
  font-size: 0.625rem;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 4px 8px;
  border-radius: var(--r-pill);
  display: inline-block;
}

/* Alerts */
.alert-success {
  background: rgba(83,58,253,0.05);
  border: 1px solid var(--primary-sub);
  color: var(--primary-deep);
}
.alert-error {
  background: rgba(234,34,97,0.06);
  border: 1px solid rgba(234,34,97,0.25);
  color: var(--ruby);
}

/* Back-to-top — indigo pill instead of dark glass */
#back-to-top {
  background: var(--canvas) !important;
  border: 1px solid var(--hairline) !important;
  color: var(--primary) !important;
  box-shadow: var(--shadow-2) !important;
}
#back-to-top:hover { background: var(--primary) !important; color: var(--on-primary) !important; border-color: var(--primary) !important; }

/* Scroll progress bar — solid indigo */
#scroll-progress { background: var(--primary) !important; }

/* Section eyebrow */
.section-eyebrow {
  background: var(--primary-sub) !important;
  border: none !important;
  color: var(--primary-deep) !important;
  font-size: 0.625rem !important;
  font-weight: 500 !important;
  letter-spacing: 0.1em;
  padding: 4px 10px;
}

/* Money / numeric tabular figures everywhere relevant */
.stat-num, .portfolio-stat-num, .case-stat-num,
.price, .pricing-amount, td.amount, .number {
  font-feature-settings: "ss01", "tnum";
  font-variant-numeric: tabular-nums;
  font-weight: 300;
  letter-spacing: -0.02em;
}

/* Page header (services/portfolio/about/contact/blog index) — Stripe mesh */
.page-header,
.portfolio-single-header {
  background: var(--grad-mesh) !important;
  color: var(--ink);
  position: relative;
  padding: calc(var(--nav-h) + 88px) 0 96px;
}
.page-header::before, .page-header::after,
.portfolio-single-header::before, .portfolio-single-header::after {
  content: none !important;
}
.page-header::after,
.portfolio-single-header::after {
  content: '' !important;
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 30%;
  background: linear-gradient(180deg, transparent 0%, var(--canvas) 100%);
  pointer-events: none;
}
.page-header > *, .portfolio-single-header > * { position: relative; z-index: 1; }
.page-header-title { color: var(--ink) !important; font-weight: 300 !important; }
.page-header-subtitle { color: var(--ink-secondary) !important; }

/* Breadcrumb on mesh */
.breadcrumb a { color: var(--primary); }
.breadcrumb span { color: var(--ink-mute); }

/* btn-outline-light invisible on cream/white CTA banks — re-skin when on light parents */
.section--light .btn-outline-light,
.section--tint .btn-outline-light,
.section--cream .btn-outline-light,
.cta-section .btn-outline-light,
.hero-mesh .btn-outline-light,
.page-header .btn-outline-light,
.portfolio-single-header .btn-outline-light {
  color: var(--primary) !important;
  border-color: var(--primary) !important;
  background: var(--canvas) !important;
}
.section--light .btn-outline-light:hover,
.section--tint .btn-outline-light:hover,
.section--cream .btn-outline-light:hover,
.cta-section .btn-outline-light:hover,
.hero-mesh .btn-outline-light:hover,
.page-header .btn-outline-light:hover,
.portfolio-single-header .btn-outline-light:hover {
  background: rgba(83,58,253,0.05) !important;
}

/* Animated hero mesh — MJ-generated mp4 loops behind hero content.
   JS injects <video class="hero-mesh-video"> when prefers-reduced-motion is OK. */
.hero-mesh-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  z-index: 0;
  pointer-events: none;
  /* Slight blur softens compression artifacts and blends with surrounding white */
  filter: saturate(1.05);
}
/* Static mesh image stays as poster — covered once video paints */
.hero-mesh, .page-header, .portfolio-single-header {
  position: relative;
  isolation: isolate;
}
.hero-mesh > *, .page-header > *, .portfolio-single-header > * { position: relative; z-index: 2; }
/* Bottom fade-to-white over video */
.hero-mesh::after,
.page-header::after,
.portfolio-single-header::after {
  z-index: 1;
}

/* ============================================================
   v4 Stripi — readability boost pass
   Stripe's 300-weight body looks elegant on Sohne; on Inter it can
   read thin. Bump base body weight to 400, keep 300 reserved for
   display tiers (h1/h2/.hero-title/.section-title).
   ============================================================ */
body {
  font-weight: 400;
  color: var(--ink); /* #0d253d — already 15.6:1 on white */
}
p, li, td, dd, label, .form-label, .body-text, .text {
  font-weight: 400;
  color: var(--ink);
}

/* Darker muted text — was #64748d (5.2:1), now #475569 (7.6:1) */
:root {
  --ink-mute:   #475569;
  --ink-mute-2: #475569;
}

/* Helper / caption text — keep slightly muted but readable */
.section-subtitle, .hero-subtitle, .page-header-subtitle,
.portfolio-desc, .blog-card-desc, .service-card-desc {
  color: var(--ink-secondary) !important; /* #273951 — 12.4:1 */
  font-weight: 400 !important;
}

/* Stat / caption / micro labels — bump weight + darken */
.hero-stat-label, .stat-label, .metric-label, .portfolio-stat-label,
.case-stat-label, .footer-col-label, .micro-label {
  color: var(--ink-mute) !important;
  font-weight: 500 !important;
  letter-spacing: 0.06em;
}

/* Footer column headings */
.footer h4, .footer h5, .footer-col-label { color: var(--ink) !important; }
.footer a { color: var(--ink-secondary) !important; }
.footer a:hover { color: var(--primary) !important; }
.footer p, .footer li { color: var(--ink-secondary) !important; }

/* Hero + page-header text over video — semi-opaque white scrim under
   text for guaranteed legibility regardless of mesh hue at that pixel */
.hero-mesh::before,
.page-header::before,
.portfolio-single-header::before {
  content: '' !important;
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg,
              rgba(255,255,255,0.45) 0%,
              rgba(255,255,255,0.15) 40%,
              rgba(255,255,255,0.75) 100%);
  z-index: 1;
  pointer-events: none;
}
.hero-mesh-video { z-index: 0 !important; }
.hero-mesh > :not(.hero-mesh-video),
.page-header > :not(.hero-mesh-video),
.portfolio-single-header > :not(.hero-mesh-video) {
  position: relative;
  z-index: 2;
}

/* Hero subtitle / page subtitle — solid ink for clarity over mesh */
.hero-subtitle, .page-header-subtitle {
  color: var(--ink) !important;
  font-weight: 400 !important;
  text-shadow: 0 1px 0 rgba(255,255,255,0.5);
}
.hero-title, .page-header-title {
  color: var(--ink) !important;
  text-shadow: 0 1px 2px rgba(255,255,255,0.4);
}

/* Hero badge — solid white pill on mesh for max contrast */
.hero-badge {
  background: rgba(255,255,255,0.9) !important;
  border: 1px solid var(--hairline) !important;
  color: var(--primary-deep) !important;
  font-weight: 600 !important;
  box-shadow: var(--shadow-1);
}
.hero-badge-dot { background: var(--primary) !important; }

/* Hero stats — white card on mesh for legibility */
.hero-stats {
  background: rgba(255,255,255,0.85) !important;
  border: 1px solid var(--hairline) !important;
  backdrop-filter: blur(12px) saturate(180%) !important;
  -webkit-backdrop-filter: blur(12px) saturate(180%) !important;
  box-shadow: var(--shadow-2);
}
.hero-stat-num { color: var(--ink) !important; font-weight: 400 !important; }
.hero-stat-label { color: var(--ink-mute) !important; }
.hero-stats > div + div::before { background: var(--hairline) !important; }

/* Nav links — bump weight for hover discoverability */
.nav-link { font-weight: 500 !important; }
.nav-link:hover { color: var(--primary) !important; }

/* Section eyebrows — were faint pastel; now stronger */
.section-eyebrow {
  background: rgba(83,58,253,0.10) !important;
  color: var(--primary-deep) !important;
  font-weight: 600 !important;
}

/* Cards body text — bump from 300 to 400 */
.stat-card, .portfolio-card, .service-card, .testimonial-card,
.case-block, .blog-card, .feature-card, .pricing-card {
  font-weight: 400;
  color: var(--ink);
}
.stat-card p, .portfolio-card p, .service-card p,
.testimonial-card p, .case-block p { color: var(--ink-secondary); }

/* Tables in admin — readable density */
.admin-table td { font-weight: 400 !important; color: var(--a-text); }
.admin-table th { color: var(--a-text-mid); }

/* Form inputs body text — readable */
.form-control, input, select, textarea {
  font-weight: 400 !important;
  color: var(--ink) !important;
}
.form-control::placeholder, input::placeholder, textarea::placeholder {
  color: var(--ink-mute) !important;
  opacity: 1;
}

/* Buttons — solid weight for tap affordance */
.btn { font-weight: 500 !important; }
.btn-primary, .btn-lime { font-weight: 500 !important; }

/* Links inside body content — clearly clickable indigo */
.prose a, .blog-prose a, p a, li a {
  color: var(--primary) !important;
  text-decoration: underline;
  text-decoration-color: rgba(83,58,253,0.35);
  text-underline-offset: 3px;
}
.prose a:hover, .blog-prose a:hover, p a:hover, li a:hover {
  text-decoration-color: var(--primary);
}

/* Breadcrumb */
.breadcrumb { font-weight: 400; }
.breadcrumb a { color: var(--ink-secondary); }
.breadcrumb a:hover { color: var(--primary); }
.breadcrumb span:last-child { color: var(--ink) !important; font-weight: 500; }

/* Service / portfolio / blog card titles — readable bold */
.portfolio-title, .service-title, .blog-card-title, .feature-title {
  color: var(--ink) !important;
  font-weight: 500 !important;
  letter-spacing: -0.015em;
}

/* Cream-band CTA text */
.cta-section .cta-title { color: var(--ink) !important; font-weight: 400 !important; }
.cta-section .cta-subtitle { color: var(--ink-secondary) !important; font-weight: 400 !important; }

/* ============================================================
   v4 Stripi — HERO TEXT LEGIBILITY PASS 2
   Goal: Hero text must be readable against the animated video mesh
   regardless of which mesh hue lands behind any given pixel.
   Strategy: stronger top-fade scrim + frosted card behind text block.
   ============================================================ */

/* Stronger top scrim — darker at top where headline sits */
.hero-mesh::before,
.page-header::before,
.portfolio-single-header::before {
  background: linear-gradient(180deg,
              rgba(255,255,255,0.65) 0%,
              rgba(255,255,255,0.35) 35%,
              rgba(255,255,255,0.20) 60%,
              rgba(255,255,255,0.85) 100%) !important;
}

/* HERO inner content — frosted glass card behind text for guaranteed
   contrast against any video frame */
.hero .hero-inner,
.hero-mesh .hero-inner {
  background: rgba(255,255,255,0.55);
  backdrop-filter: blur(18px) saturate(160%);
  -webkit-backdrop-filter: blur(18px) saturate(160%);
  border: 1px solid rgba(255,255,255,0.55);
  border-radius: var(--r-xl);
  padding: 56px 48px;
  max-width: 880px;
  margin: 0 auto;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.8) inset,
    0 24px 60px rgba(13,37,61,0.10),
    0 4px 12px rgba(13,37,61,0.06);
}

/* Page-header — slightly less aggressive (no inner card, but stronger scrim) */
.page-header .container,
.portfolio-single-header .container {
  position: relative;
  z-index: 2;
}

/* Hero / page text — drop the shadow-on-mesh hack; rely on scrim+card */
.hero-title, .page-header-title {
  color: var(--ink) !important;
  text-shadow: none !important;
  font-weight: 400 !important;        /* bump from 300 for body-bold readability */
  letter-spacing: -0.035em !important;
}
.hero-subtitle, .page-header-subtitle {
  color: var(--ink) !important;
  font-weight: 400 !important;
  text-shadow: none !important;
}

/* Hero "Now accepting projects" badge — solid pill, indigo text */
.hero-badge {
  background: var(--canvas) !important;
  border: 1px solid var(--hairline-input) !important;
  color: var(--primary-deep) !important;
  font-weight: 600 !important;
  box-shadow: var(--shadow-1);
}

/* Hero stats card — solid white card on top of frosted hero-inner */
.hero-stats {
  background: var(--canvas) !important;
  border: 1px solid var(--hairline) !important;
  box-shadow: var(--shadow-1);
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* Hero clients strip */
.hero-clients {
  background: var(--canvas);
  border-top: 1px solid var(--hairline);
  margin-top: 32px;
  padding-top: 24px;
}
.hero-clients-label { color: var(--ink-mute) !important; font-weight: 500; }
.client-logo { color: var(--ink-secondary) !important; font-weight: 500; }

/* On mobile: lighter card padding so content doesn't get cramped */
@media (max-width: 640px) {
  .hero .hero-inner, .hero-mesh .hero-inner {
    padding: 32px 22px;
    border-radius: var(--r-lg);
  }
}

/* page-header inner content — readable card on mesh too */
.page-header .container > *,
.portfolio-single-header .container > * {
  position: relative;
  z-index: 2;
}
.page-header-title,
.portfolio-single-header h1 {
  background: rgba(255,255,255,0.6);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  display: inline-block;
  padding: 8px 24px;
  border-radius: var(--r-md);
  margin-left: -24px;
}
@media (max-width: 640px) {
  .page-header-title, .portfolio-single-header h1 {
    margin-left: 0;
    padding: 8px 12px;
  }
}

/* Improve breadcrumb pill over mesh */
.portfolio-single-header .breadcrumb {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: rgba(255,255,255,0.7);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  padding: 6px 12px;
  border-radius: var(--r-pill);
  font-size: 0.875rem;
  border: 1px solid var(--hairline);
}

/* Video tint — slightly desaturate to keep mesh hues from overwhelming */
.hero-mesh-video {
  filter: saturate(0.85) brightness(1.05);
  opacity: 0.9;
}

/* ============================================================
   v4 Stripi — DARK THEME RESET
   The v4 alias bridge collapses snow→ink (both point to navy) for
   light-mode contrast. In dark mode we re-invert the bridge so
   existing [data-theme="dark"] rules behave correctly.
   ============================================================ */
[data-theme="dark"] {
  /* Brand stays the same — indigo still readable on dark */
  --canvas:         #0f172a;          /* dark slate canvas */
  --canvas-soft:    #1e293b;
  --canvas-cream:   #2d2638;          /* warm interlude in dark */
  --hairline:       rgba(255,255,255,0.10);
  --hairline-input: rgba(255,255,255,0.18);

  /* Ink ramp — light text on dark canvas */
  --ink:            #f1f5f9;
  --ink-secondary:  #cbd5e1;
  --ink-mute:       #94a3b8;
  --ink-mute-2:     #94a3b8;

  /* Legacy alias bridge — re-route to dark-mode equivalents */
  --paper:          var(--canvas);
  --paper-2:        var(--canvas-soft);
  --paper-3:        var(--canvas-cream);
  --ink-on:         var(--ink);
  --mid-on:         var(--ink-secondary);
  --muted-on:       var(--ink-mute);
  --border-on:      var(--hairline);
  --border-mid:     var(--hairline-input);
  --snow:           #f1f5f9;
  --snow-mid:       #cbd5e1;
  --snow-low:       #94a3b8;
  --snow-dim:       rgba(241,245,249,0.30);
  --rim:            rgba(255,255,255,0.08);
  --rim-mid:        rgba(255,255,255,0.14);
  --rim-hi:         rgba(255,255,255,0.22);
  --glass:          rgba(255,255,255,0.03);
  --glass-mid:      rgba(255,255,255,0.06);
  --glass-hi:       rgba(255,255,255,0.10);

  /* `c-` semantic */
  --c-dark:         var(--canvas);
  --c-dark-2:       var(--canvas-soft);
  --c-dark-3:       var(--brand-dark);
  --c-dark-border:  var(--hairline);
  --c-dark-text:    var(--ink);
  --c-dark-muted:   var(--ink-mute);
  --c-bg:           var(--canvas);
  --c-bg-tint:      var(--canvas-soft);
  --c-text:         var(--ink);
  --c-text-mid:     var(--ink-secondary);
  --c-text-muted:   var(--ink-mute);
  --c-border:       var(--hairline);
  --c-border-mid:   var(--hairline-input);

  /* Shadows softer on dark */
  --shadow-1:       0 1px 3px rgba(0,0,0,0.4);
  --shadow-2:       0 8px 24px rgba(0,0,0,0.45);
  --shadow-card:    var(--shadow-1);
  --shadow-hover:   var(--shadow-2);

  color-scheme: dark;
}

[data-theme="dark"] body {
  background: var(--canvas);
  color: var(--ink);
}

/* Sections in dark mode */
[data-theme="dark"] .section--light { background: var(--canvas); color: var(--ink); }
[data-theme="dark"] .section--tint  { background: var(--canvas-soft); }
[data-theme="dark"] .section--cream { background: #2d2638; color: var(--ink); }
[data-theme="dark"] .section--dark  { background: #050d1a; color: var(--ink); }

/* Nav in dark mode — translucent dark glass */
[data-theme="dark"] .nav--dark,
[data-theme="dark"] .nav--light {
  background: rgba(15,23,42,0.88) !important;
  border-bottom-color: rgba(255,255,255,0.08) !important;
  backdrop-filter: blur(20px) saturate(160%);
  -webkit-backdrop-filter: blur(20px) saturate(160%);
}
[data-theme="dark"] .nav-logo,
[data-theme="dark"] .nav-logo span { color: var(--ink) !important; }
[data-theme="dark"] .nav-link { color: var(--ink-secondary) !important; }
[data-theme="dark"] .nav-link:hover { color: var(--primary-soft) !important; }
[data-theme="dark"] .nav-link[aria-current="page"] { color: var(--primary-soft) !important; }

/* Hero in dark — keep mesh, swap inner card to dark glass */
[data-theme="dark"] .hero-mesh::before,
[data-theme="dark"] .page-header::before,
[data-theme="dark"] .portfolio-single-header::before {
  background: linear-gradient(180deg,
              rgba(15,23,42,0.55) 0%,
              rgba(15,23,42,0.25) 35%,
              rgba(15,23,42,0.20) 60%,
              rgba(15,23,42,0.85) 100%) !important;
}
[data-theme="dark"] .hero .hero-inner,
[data-theme="dark"] .hero-mesh .hero-inner {
  background: rgba(15,23,42,0.6);
  border-color: rgba(255,255,255,0.10);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.06) inset,
    0 24px 60px rgba(0,0,0,0.45);
}
[data-theme="dark"] .hero-title,
[data-theme="dark"] .page-header-title,
[data-theme="dark"] .hero-subtitle,
[data-theme="dark"] .page-header-subtitle {
  color: var(--ink) !important;
  text-shadow: none !important;
}
[data-theme="dark"] .page-header-title,
[data-theme="dark"] .portfolio-single-header h1 {
  background: rgba(15,23,42,0.55);
}
[data-theme="dark"] .hero-badge {
  background: rgba(15,23,42,0.6) !important;
  border-color: rgba(255,255,255,0.15) !important;
  color: var(--primary-soft) !important;
}

/* Hero stats card on dark */
[data-theme="dark"] .hero-stats {
  background: rgba(15,23,42,0.7) !important;
  border-color: rgba(255,255,255,0.10) !important;
}
[data-theme="dark"] .hero-stat-num { color: var(--ink) !important; }
[data-theme="dark"] .hero-stat-label { color: var(--ink-mute) !important; }
[data-theme="dark"] .hero-stats > div + div::before { background: rgba(255,255,255,0.08) !important; }

/* Hero clients */
[data-theme="dark"] .hero-clients { background: var(--canvas-soft); border-color: rgba(255,255,255,0.05); }
[data-theme="dark"] .hero-clients-label,
[data-theme="dark"] .client-logo { color: var(--ink-mute) !important; }

/* Cards on dark */
[data-theme="dark"] .stat-card, [data-theme="dark"] .portfolio-card,
[data-theme="dark"] .service-card, [data-theme="dark"] .testimonial-card,
[data-theme="dark"] .case-block, [data-theme="dark"] .blog-card,
[data-theme="dark"] .feature-card, [data-theme="dark"] .pricing-card {
  background: var(--canvas-soft) !important;
  border-color: rgba(255,255,255,0.08) !important;
  color: var(--ink) !important;
}
[data-theme="dark"] .stat-card p, [data-theme="dark"] .portfolio-card p,
[data-theme="dark"] .service-card p, [data-theme="dark"] .testimonial-card p,
[data-theme="dark"] .case-block p { color: var(--ink-secondary) !important; }

/* Section eyebrow on dark */
[data-theme="dark"] .section-eyebrow {
  background: rgba(83,58,253,0.18) !important;
  color: var(--primary-soft) !important;
}

/* Forms on dark */
[data-theme="dark"] .form-control,
[data-theme="dark"] input, [data-theme="dark"] select, [data-theme="dark"] textarea {
  background: var(--canvas-soft) !important;
  color: var(--ink) !important;
  border-color: rgba(255,255,255,0.12) !important;
}
[data-theme="dark"] .form-control:focus,
[data-theme="dark"] input:focus, [data-theme="dark"] select:focus, [data-theme="dark"] textarea:focus {
  border-color: var(--primary-soft) !important;
  box-shadow: 0 0 0 3px rgba(102,94,253,0.20) !important;
}
[data-theme="dark"] .form-control::placeholder,
[data-theme="dark"] input::placeholder, [data-theme="dark"] textarea::placeholder {
  color: var(--ink-mute) !important;
}
[data-theme="dark"] .form-label { color: var(--ink) !important; }

/* Footer on dark */
[data-theme="dark"] .footer { background: #050d1a !important; color: var(--ink-mute) !important; border-top-color: rgba(255,255,255,0.06) !important; }
[data-theme="dark"] .footer a { color: var(--ink-secondary) !important; }
[data-theme="dark"] .footer a:hover { color: var(--primary-soft) !important; }
[data-theme="dark"] .footer h4, [data-theme="dark"] .footer h5 { color: var(--ink) !important; }

/* CTA cream band on dark — becomes dusky purple */
[data-theme="dark"] .cta-section { background: #2d2638 !important; color: var(--ink) !important; }
[data-theme="dark"] .cta-title { color: var(--ink) !important; }
[data-theme="dark"] .cta-subtitle { color: var(--ink-secondary) !important; }

/* Buttons on dark */
[data-theme="dark"] .btn-outline {
  background: transparent !important;
  border-color: var(--primary-soft) !important;
  color: var(--primary-soft) !important;
}
[data-theme="dark"] .btn-outline:hover { background: rgba(102,94,253,0.10) !important; }

[data-theme="dark"] .section--light .btn-outline-light,
[data-theme="dark"] .section--tint .btn-outline-light,
[data-theme="dark"] .section--cream .btn-outline-light,
[data-theme="dark"] .cta-section .btn-outline-light,
[data-theme="dark"] .hero-mesh .btn-outline-light,
[data-theme="dark"] .page-header .btn-outline-light,
[data-theme="dark"] .portfolio-single-header .btn-outline-light {
  background: transparent !important;
  border-color: rgba(255,255,255,0.4) !important;
  color: var(--ink) !important;
}

/* Back-to-top on dark */
[data-theme="dark"] #back-to-top {
  background: var(--canvas-soft) !important;
  color: var(--ink) !important;
  border-color: rgba(255,255,255,0.10) !important;
}

/* Pills on dark */
[data-theme="dark"] .portfolio-category,
[data-theme="dark"] .pill-tag,
[data-theme="dark"] .category-tag {
  background: rgba(83,58,253,0.18) !important;
  color: var(--primary-soft) !important;
}

/* Tables (admin dark not handled here; admin has own theme) */
[data-theme="dark"] table th { color: var(--ink-secondary); }
[data-theme="dark"] table td { color: var(--ink); border-color: rgba(255,255,255,0.06); }

/* Video on dark — slight dim */
[data-theme="dark"] .hero-mesh-video {
  filter: saturate(0.7) brightness(0.55);
  opacity: 0.7;
}

/* ============================================================
   v4 Stripi — CONTACT PAGE polish
   View uses .contact-layout / .contact-info-items / .contact-form-wrap
   which had no CSS in v3. Add them.
   ============================================================ */
.contact-layout {
  display: grid;
  grid-template-columns: 1fr 1.1fr;
  gap: 64px;
  align-items: start;
}
@media (max-width: 900px) {
  .contact-layout { grid-template-columns: 1fr; gap: 40px; }
}

.contact-info-items {
  display: flex;
  flex-direction: column;
  gap: 20px;
  margin-bottom: 24px;
}
.contact-info-item {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  padding: 18px 20px;
  background: var(--canvas);
  border: 1px solid var(--hairline);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-1);
  transition: transform var(--t), box-shadow var(--t), border-color var(--t);
}
.contact-info-item:hover {
  border-color: var(--primary-sub);
  box-shadow: var(--shadow-2);
}
.contact-info-icon {
  width: 40px; height: 40px;
  border-radius: var(--r-md);
  background: rgba(83,58,253,0.10);
  color: var(--primary);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.contact-info-icon svg { width: 20px; height: 20px; }
.contact-info-label {
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin-bottom: 4px;
}
.contact-info-value {
  font-size: 0.9375rem;
  font-weight: 500;
  color: var(--ink) !important;
  text-decoration: none;
  display: inline-block;
}
.contact-info-value:hover { color: var(--primary) !important; }

/* Copy email button */
#copy-email-btn {
  background: var(--primary-sub);
  color: var(--primary-deep);
  border: none;
  padding: 4px 10px;
  border-radius: var(--r-pill);
  font-size: 0.7rem;
  font-weight: 600;
  cursor: pointer;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  transition: background var(--t);
}
#copy-email-btn:hover { background: var(--primary); color: #fff; }

/* Response time strip — re-skin from old lime to indigo */
.avail-dot {
  background: var(--primary) !important;
  box-shadow: 0 0 0 4px rgba(83,58,253,0.18) !important;
}
.contact-layout .fade-up > div[style*="background:rgba(190,242,100"] {
  /* the inline-styled response box — Stripify */
  background: var(--primary-sub) !important;
  border-color: var(--primary-sub) !important;
}

/* Form wrap card — sharp white panel with hairline + soft lift */
.contact-form-wrap {
  background: var(--canvas);
  border: 1px solid var(--hairline);
  border-radius: var(--r-xl);
  padding: 36px;
  box-shadow: var(--shadow-2);
}
.contact-form-wrap h3 {
  font-size: 1.375rem !important;
  font-weight: 400 !important;
  color: var(--ink) !important;
  margin-bottom: 6px !important;
  letter-spacing: -0.02em;
}
.contact-form-wrap > p {
  color: var(--ink-mute) !important;
  font-size: 0.9375rem;
  margin-bottom: 28px;
}

/* Form row */
.form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin-bottom: 18px;
}
@media (max-width: 640px) {
  .form-row { grid-template-columns: 1fr; }
}
.form-group { margin-bottom: 18px; }
.form-label {
  display: block;
  font-size: 0.8125rem;
  font-weight: 500;
  color: var(--ink) !important;
  margin-bottom: 6px;
  letter-spacing: -0.005em;
}

/* Inputs — sharp Stripe pill-free rectangles with hairline */
.contact-form-wrap .form-control,
.contact-form-wrap input,
.contact-form-wrap select,
.contact-form-wrap textarea {
  width: 100%;
  background: var(--canvas) !important;
  border: 1px solid var(--hairline-input) !important;
  border-radius: var(--r-sm) !important;
  padding: 10px 14px !important;
  font-size: 0.9375rem;
  color: var(--ink) !important;
  font-weight: 400 !important;
  transition: border-color var(--t), box-shadow var(--t);
}
.contact-form-wrap .form-control:focus,
.contact-form-wrap input:focus,
.contact-form-wrap select:focus,
.contact-form-wrap textarea:focus {
  border-color: var(--primary) !important;
  box-shadow: 0 0 0 3px rgba(83,58,253,0.15) !important;
  outline: none !important;
}
.contact-form-wrap textarea { resize: vertical; min-height: 140px; }

/* Submit row */
.contact-form-wrap button[type="submit"] {
  width: 100%;
  padding: 14px 22px;
  background: var(--primary) !important;
  color: var(--on-primary) !important;
  border: none;
  border-radius: var(--r-pill);
  font-size: 1rem;
  font-weight: 500;
  cursor: pointer;
  transition: background var(--t), box-shadow var(--t), transform var(--t);
  margin-top: 8px;
  box-shadow: 0 1px 2px rgba(83,58,253,0.20);
}
.contact-form-wrap button[type="submit"]:hover {
  background: var(--primary-deep) !important;
  box-shadow: 0 4px 16px rgba(83,58,253,0.32);
}

/* Honeypot stays invisible */
.contact-form-wrap [aria-hidden="true"] input { display: none; }

/* Alert blocks inside form */
.contact-form-wrap .alert {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 14px 16px;
  border-radius: var(--r-md);
  font-size: 0.9375rem;
  margin-bottom: 20px;
  line-height: 1.5;
}
.contact-form-wrap .alert svg { flex-shrink: 0; margin-top: 2px; }
.contact-form-wrap .alert-success {
  background: rgba(83,58,253,0.06);
  border: 1px solid var(--primary-sub);
  color: var(--primary-deep);
}
.contact-form-wrap .alert-error {
  background: rgba(234,34,97,0.06);
  border: 1px solid rgba(234,34,97,0.30);
  color: #b8174a;
}

/* Character count + helper labels under fields */
.contact-form-wrap .form-group > div[style*="text-align:right"] {
  color: var(--ink-mute) !important;
}

/* Contact page top section — info column heading bump */
.contact-layout h2 {
  font-size: 1.625rem !important;
  font-weight: 400 !important;
  color: var(--ink) !important;
  letter-spacing: -0.02em;
  margin-bottom: 14px;
}
.contact-layout > .fade-up > p {
  color: var(--ink-secondary) !important;
  font-weight: 400;
  font-size: 1rem;
  line-height: 1.7;
}

/* ============================================================
   v4 Stripi — "make it sharp" GLOBAL POLISH PASS
   ============================================================ */

/* Hairline crisper everywhere */
:root {
  --hairline:       #e3e8ee;
  --hairline-input: #cbd5e1;
}

/* All cards get a subtle 1px ring + crisper shadow */
.stat-card, .portfolio-card, .service-card, .testimonial-card,
.case-block, .blog-card, .feature-card, .pricing-card,
.contact-info-item, .contact-form-wrap, .admin-card {
  box-shadow:
    0 1px 0 rgba(255,255,255,0.6) inset,
    0 1px 3px rgba(13,37,61,0.06),
    0 0 0 1px rgba(13,37,61,0.02);
}
.stat-card:hover, .portfolio-card:hover, .service-card:hover,
.contact-info-item:hover {
  box-shadow:
    0 1px 0 rgba(255,255,255,0.6) inset,
    0 8px 28px rgba(13,37,61,0.10),
    0 2px 6px rgba(13,37,61,0.06);
}

/* Tighten heading line-heights for editorial feel */
h1, h2, .hero-title, .section-title, .page-header-title {
  line-height: 1.08;
}
h3, h4 { line-height: 1.25; }

/* Section spacing — generous Stripe negative space */
.section { padding: 96px 0; }
@media (max-width: 768px) { .section { padding: 64px 0; } }

/* Container max width breath */
.container { max-width: 1200px; padding: 0 32px; }
@media (max-width: 640px) { .container { padding: 0 20px; } }

/* Body line-height a hair tighter for crisp scan */
body { line-height: 1.55; }

/* Pixel-snap render */
* { -webkit-font-smoothing: antialiased; }

/* Better text-rendering for editorial type */
body, h1, h2, h3, h4, .hero-title, .section-title { text-rendering: optimizeLegibility; }

/* Selection color — indigo brand */
::selection { background: var(--primary-sub); color: var(--primary-deep); }

/* ============================================================
   v4 Stripi — CONTACT PAGE EMERGENCY FIX
   Force full-width inputs, 2-col grids, visible form-wrap card.
   ============================================================ */

/* Force 2-col contact layout down to 768px (was 900) */
.contact-layout {
  display: grid !important;
  grid-template-columns: 1fr 1.15fr !important;
  gap: 56px !important;
  align-items: start !important;
}
@media (max-width: 900px) {
  .contact-layout { grid-template-columns: 1fr !important; gap: 32px !important; }
}

/* Form rows — 2-col only above 640px, else stack */
.contact-form-wrap .form-row,
.form-row {
  display: grid !important;
  grid-template-columns: 1fr 1fr !important;
  gap: 14px !important;
  margin-bottom: 14px !important;
}
@media (max-width: 640px) {
  .contact-form-wrap .form-row,
  .form-row { grid-template-columns: 1fr !important; }
}

/* Inputs must fill their column */
.contact-form-wrap .form-control,
.contact-form-wrap input,
.contact-form-wrap select,
.contact-form-wrap textarea,
.form-row .form-control,
.form-row input,
.form-row select,
.form-row textarea,
.form-group .form-control,
.form-group input,
.form-group select,
.form-group textarea {
  width: 100% !important;
  box-sizing: border-box !important;
  display: block !important;
  min-height: 42px;
  font-size: 0.9375rem !important;
}
.contact-form-wrap textarea,
.form-group textarea {
  min-height: 140px !important;
  resize: vertical !important;
  line-height: 1.55;
}

/* Visible form-wrap card on BOTH light and dark */
.contact-form-wrap {
  background: var(--canvas) !important;
  border: 1px solid var(--hairline) !important;
  border-radius: var(--r-xl) !important;
  padding: 36px !important;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.6) inset,
    0 8px 32px rgba(13,37,61,0.10),
    0 2px 8px rgba(13,37,61,0.05) !important;
}
[data-theme="dark"] .contact-form-wrap {
  background: rgba(30,41,59,0.7) !important;
  border-color: rgba(255,255,255,0.10) !important;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.04) inset,
    0 8px 32px rgba(0,0,0,0.45) !important;
}

/* Contact info items — card-like even on dark */
.contact-info-item {
  background: var(--canvas) !important;
  border: 1px solid var(--hairline) !important;
}
[data-theme="dark"] .contact-info-item {
  background: rgba(30,41,59,0.6) !important;
  border-color: rgba(255,255,255,0.08) !important;
}
[data-theme="dark"] .contact-info-icon {
  background: rgba(83,58,253,0.20) !important;
  color: var(--primary-soft) !important;
}
[data-theme="dark"] .contact-info-label { color: var(--ink-mute) !important; }
[data-theme="dark"] .contact-info-value { color: var(--ink) !important; }

/* Response-time strip — kill lime green leak, force indigo on both themes */
.contact-layout .fade-up > div[style*="rgba(190,242,100"],
.contact-layout .fade-up > div[style*="190,242,100"] {
  background: rgba(83,58,253,0.08) !important;
  border: 1px solid rgba(83,58,253,0.25) !important;
  border-radius: var(--r-md) !important;
}
[data-theme="dark"] .contact-layout .fade-up > div[style*="190,242,100"] {
  background: rgba(83,58,253,0.15) !important;
  border-color: rgba(83,58,253,0.30) !important;
}
.avail-dot {
  background: var(--primary) !important;
  box-shadow: 0 0 0 4px rgba(83,58,253,0.22) !important;
}

/* Form labels visible on dark */
[data-theme="dark"] .form-label,
[data-theme="dark"] .contact-form-wrap label {
  color: var(--ink) !important;
  font-weight: 500 !important;
}

/* Inputs on dark — visible borders, lighter input bg than card */
[data-theme="dark"] .contact-form-wrap input,
[data-theme="dark"] .contact-form-wrap select,
[data-theme="dark"] .contact-form-wrap textarea,
[data-theme="dark"] .contact-form-wrap .form-control {
  background: rgba(15,23,42,0.7) !important;
  border-color: rgba(255,255,255,0.14) !important;
  color: var(--ink) !important;
}
[data-theme="dark"] .contact-form-wrap input:focus,
[data-theme="dark"] .contact-form-wrap select:focus,
[data-theme="dark"] .contact-form-wrap textarea:focus,
[data-theme="dark"] .contact-form-wrap .form-control:focus {
  border-color: var(--primary-soft) !important;
  box-shadow: 0 0 0 3px rgba(102,94,253,0.25) !important;
}
[data-theme="dark"] .contact-form-wrap input::placeholder,
[data-theme="dark"] .contact-form-wrap textarea::placeholder {
  color: rgba(241,245,249,0.40) !important;
}

/* Form group spacing tighter for vertical rhythm */
.form-group { margin-bottom: 16px !important; }
.form-label, .contact-form-wrap label {
  display: block !important;
  margin-bottom: 6px !important;
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0;
}

/* "What are you looking to build?" and tell us more are NOT in form-row, so single col is fine */

/* Submit button — full-width pill, indigo flat */
.contact-form-wrap button[type="submit"] {
  width: 100% !important;
  padding: 14px 24px !important;
  font-size: 1rem !important;
  font-weight: 500 !important;
  background: var(--primary) !important;
  color: #fff !important;
  border: none !important;
  border-radius: var(--r-pill) !important;
  margin-top: 12px !important;
  box-shadow: 0 1px 2px rgba(83,58,253,0.22);
  cursor: pointer;
  transition: background var(--t), box-shadow var(--t);
}
.contact-form-wrap button[type="submit"]:hover {
  background: var(--primary-deep) !important;
  box-shadow: 0 6px 20px rgba(83,58,253,0.35);
}

/* Character count + meta below textarea — small + muted */
.contact-form-wrap .form-group > div[style*="text-align:right"] {
  color: var(--ink-mute) !important;
  font-size: 0.75rem !important;
  margin-top: 6px;
}

/* Disclaimer under submit */
.contact-form-wrap > p:last-of-type,
.contact-form-wrap p[style*="text-align:center"] {
  color: var(--ink-mute) !important;
  font-size: 0.8125rem !important;
  margin-top: 14px !important;
  text-align: center;
}

/* Contact info column headline */
.contact-layout > .fade-up:first-child > h2 {
  font-size: 1.625rem !important;
  font-weight: 500 !important;
  color: var(--ink) !important;
  letter-spacing: -0.025em !important;
  margin-bottom: 14px !important;
  line-height: 1.2 !important;
}
.contact-layout > .fade-up:first-child > p {
  color: var(--ink-secondary) !important;
  font-weight: 400 !important;
  font-size: 1rem !important;
  line-height: 1.7 !important;
  margin-bottom: 28px !important;
}

/* Send-a-message heading */
.contact-form-wrap h3 {
  font-size: 1.375rem !important;
  font-weight: 500 !important;
  color: var(--ink) !important;
  margin-bottom: 4px !important;
  letter-spacing: -0.02em !important;
}
.contact-form-wrap > p:first-of-type {
  color: var(--ink-mute) !important;
  font-size: 0.9375rem !important;
  margin-bottom: 24px !important;
}

/* Phone "(optional)" hint inline */
.form-label small, .form-label .optional {
  color: var(--ink-mute);
  font-weight: 400;
  margin-left: 4px;
}

/* ============================================================
   v4 Stripi — HERO/HEADER OVERLAY ENFORCEMENT
   Issue: video + content were stacking vertically instead of
   overlaying. Force the parent into proper layered positioning
   so video sits behind content card on EVERY page.
   ============================================================ */

/* HERO — fullscreen banner with overlaid frosted card */
.hero.hero-mesh,
.hero {
  position: relative !important;
  min-height: 88vh !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  padding: calc(var(--nav-h) + 32px) 24px 64px !important;
  overflow: hidden !important;
  isolation: isolate;
  background: var(--grad-mesh);
  background-size: cover;
  background-position: center;
}

.hero .hero-mesh-video,
.hero-mesh .hero-mesh-video,
.page-header .hero-mesh-video,
.portfolio-single-header .hero-mesh-video {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  object-position: center center !important;
  z-index: 0 !important;
  pointer-events: none;
}

/* Scrim above video — under content */
.hero::before,
.hero-mesh::before,
.page-header::before,
.portfolio-single-header::before {
  content: '' !important;
  position: absolute !important;
  inset: 0 !important;
  background: linear-gradient(180deg,
              rgba(255,255,255,0.45) 0%,
              rgba(255,255,255,0.20) 40%,
              rgba(255,255,255,0.10) 60%,
              rgba(255,255,255,0.80) 100%) !important;
  z-index: 1 !important;
  pointer-events: none !important;
}

/* Hero-inner card — overlay on top */
.hero .hero-inner,
.hero-mesh .hero-inner {
  position: relative !important;
  z-index: 2 !important;
  background: rgba(255,255,255,0.62) !important;
  backdrop-filter: blur(22px) saturate(170%) !important;
  -webkit-backdrop-filter: blur(22px) saturate(170%) !important;
  border: 1px solid rgba(255,255,255,0.6) !important;
  border-radius: var(--r-xl) !important;
  padding: 56px 48px !important;
  max-width: 820px !important;
  width: 100% !important;
  margin: 0 auto !important;
  text-align: center;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 24px 60px rgba(13,37,61,0.12),
    0 4px 12px rgba(13,37,61,0.06) !important;
}
@media (max-width: 640px) {
  .hero.hero-mesh, .hero { min-height: 78vh !important; padding-top: calc(var(--nav-h) + 16px) !important; }
  .hero .hero-inner, .hero-mesh .hero-inner { padding: 32px 22px !important; }
}

/* hero-clients sits beneath the card but inside .hero — z-index 2 */
.hero .hero-clients {
  position: relative !important;
  z-index: 2 !important;
  margin-top: 32px;
  width: 100%;
  max-width: 820px;
}

/* ============================================================
   PAGE-HEADERS (services / portfolio / blog / about / contact /
   portfolio-single) — wrap container content in same frosted card.
   The container itself becomes the card to avoid view edits.
   ============================================================ */
.page-header,
.portfolio-single-header {
  position: relative !important;
  min-height: 60vh !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: calc(var(--nav-h) + 64px) 24px 72px !important;
  overflow: hidden !important;
  isolation: isolate;
  background: var(--grad-mesh);
  background-size: cover;
  background-position: center;
}

.page-header .container,
.portfolio-single-header .container {
  position: relative !important;
  z-index: 2 !important;
  background: rgba(255,255,255,0.62) !important;
  backdrop-filter: blur(22px) saturate(170%) !important;
  -webkit-backdrop-filter: blur(22px) saturate(170%) !important;
  border: 1px solid rgba(255,255,255,0.6) !important;
  border-radius: var(--r-xl) !important;
  padding: 48px 40px !important;
  max-width: 880px !important;
  width: 100% !important;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 24px 60px rgba(13,37,61,0.12),
    0 4px 12px rgba(13,37,61,0.06) !important;
  text-align: center;
}
@media (max-width: 640px) {
  .page-header, .portfolio-single-header { min-height: 50vh !important; padding-top: calc(var(--nav-h) + 24px) !important; }
  .page-header .container, .portfolio-single-header .container { padding: 28px 20px !important; }
}

/* Portfolio-single has a 2-col layout inside header — keep flex */
.portfolio-single-header .portfolio-single-layout { text-align: left; }

/* Cancel the page-header-title own pill (was inline card) */
.page-header-title,
.portfolio-single-header h1 {
  background: transparent !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  padding: 0 !important;
  margin-left: 0 !important;
}

/* Bottom-of-region fade */
.hero::after,
.hero-mesh::after,
.page-header::after,
.portfolio-single-header::after {
  content: '' !important;
  position: absolute !important;
  left: 0; right: 0; bottom: 0;
  height: 18%;
  background: linear-gradient(180deg, transparent 0%, var(--canvas) 100%) !important;
  z-index: 1 !important;
  pointer-events: none !important;
}

/* ============================================================
   DARK MODE — gradient text invisible (was navy→ruby on navy)
   Re-flip to brighter stops + ensure step titles visible.
   ============================================================ */
[data-theme="dark"] {
  /* Lighter gradient text on dark — soft-indigo → magenta */
  --grad-text: linear-gradient(135deg, var(--primary-soft) 0%, var(--magenta) 100%);
}

[data-theme="dark"] .grad {
  background: var(--grad-text);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* Process step titles — explicit color in both themes */
.process-title, .process-step-title, .step-title {
  color: var(--ink) !important;
  font-weight: 500 !important;
  background: none !important;
  -webkit-text-fill-color: var(--ink) !important;
}
[data-theme="dark"] .process-title,
[data-theme="dark"] .process-step-title,
[data-theme="dark"] .step-title {
  color: var(--ink) !important;
  -webkit-text-fill-color: var(--ink) !important;
}

/* Process connector line — was orange/amber, now hairline */
.process-grid::before {
  background: var(--hairline) !important;
}
[data-theme="dark"] .process-grid::before {
  background: rgba(255,255,255,0.10) !important;
}

/* Process step description */
.process-desc {
  color: var(--ink-secondary) !important;
  font-weight: 400;
}
[data-theme="dark"] .process-desc {
  color: var(--ink-secondary) !important;
}

/* Process number badges — keep indigo */
.process-num, .process-step-num {
  background: var(--primary) !important;
  color: #fff !important;
}

/* Hero scrim on dark — dark glass instead of white */
[data-theme="dark"] .hero::before,
[data-theme="dark"] .hero-mesh::before,
[data-theme="dark"] .page-header::before,
[data-theme="dark"] .portfolio-single-header::before {
  background: linear-gradient(180deg,
              rgba(15,23,42,0.55) 0%,
              rgba(15,23,42,0.25) 40%,
              rgba(15,23,42,0.20) 60%,
              rgba(15,23,42,0.85) 100%) !important;
}
[data-theme="dark"] .hero::after,
[data-theme="dark"] .hero-mesh::after,
[data-theme="dark"] .page-header::after,
[data-theme="dark"] .portfolio-single-header::after {
  background: linear-gradient(180deg, transparent 0%, var(--canvas) 100%) !important;
}

/* Hero/page-header frosted card on dark */
[data-theme="dark"] .hero .hero-inner,
[data-theme="dark"] .hero-mesh .hero-inner,
[data-theme="dark"] .page-header .container,
[data-theme="dark"] .portfolio-single-header .container {
  background: rgba(15,23,42,0.62) !important;
  border-color: rgba(255,255,255,0.10) !important;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.06) inset,
    0 24px 60px rgba(0,0,0,0.45) !important;
}

/* ============================================================
   v4 Stripi — "HOW IT WORKS" / section--dark CONTRAST FIX
   The .section--dark surface is deep navy. Any text token that
   resolves to --ink (also navy) becomes invisible. Force white
   inside dark sections regardless of theme.
   ============================================================ */

/* All text inside section--dark must be light */
.section--dark,
.section--dark2 {
  color: var(--on-primary) !important;
}
.section--dark .section-title,
.section--dark2 .section-title,
.section--dark .section-subtitle,
.section--dark2 .section-subtitle,
.section--dark h1, .section--dark h2, .section--dark h3, .section--dark h4,
.section--dark2 h1, .section--dark2 h2, .section--dark2 h3, .section--dark2 h4,
.section--dark p, .section--dark2 p,
.section--dark .process-title,
.section--dark .process-desc,
.section--dark2 .process-title,
.section--dark2 .process-desc {
  color: var(--on-primary) !important;
  -webkit-text-fill-color: var(--on-primary) !important;
}

/* Gradient text override inside dark sections — kill clip, force white */
.section--dark .section-title .grad,
.section--dark2 .section-title .grad,
.section--dark .grad,
.section--dark2 .grad {
  background: none !important;
  -webkit-background-clip: initial !important;
  -webkit-text-fill-color: var(--on-primary) !important;
  background-clip: initial !important;
  color: var(--on-primary) !important;
}

/* Section title — kill the universal weight-300 override inside dark sections
   so headlines stay readable at large sizes. */
.section--dark .section-title,
.section--dark2 .section-title {
  font-weight: 400 !important;
  letter-spacing: -0.025em !important;
}

/* Subtitle slightly muted but visible */
.section--dark .section-subtitle,
.section--dark2 .section-subtitle {
  color: rgba(255,255,255,0.75) !important;
}

/* Section eyebrow on dark — solid pill with primary tint */
.section--dark .section-eyebrow,
.section--dark2 .section-eyebrow {
  background: rgba(255,255,255,0.10) !important;
  color: var(--primary-soft) !important;
  border: 1px solid rgba(255,255,255,0.15) !important;
}

/* Process step description — readable muted on dark */
.section--dark .process-desc,
.section--dark2 .process-desc {
  color: rgba(255,255,255,0.72) !important;
  font-weight: 400 !important;
}

/* Process title — make it pop on dark */
.section--dark .process-title,
.section--dark2 .process-title {
  font-weight: 500 !important;
  font-size: 1.0625rem !important;
}

/* Process step number badge over icon — bright on dark */
.section--dark .process-step-num,
.section--dark2 .process-step-num {
  background: var(--primary) !important;
  color: #fff !important;
  font-weight: 600;
  box-shadow: 0 0 0 3px rgba(83,58,253,0.30);
}

/* Connector line between steps — visible on dark */
.section--dark .process-grid::before,
.section--dark2 .process-grid::before {
  background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.18) 20%, rgba(255,255,255,0.18) 80%, transparent 100%) !important;
}

/* Cards on dark sections (testimonials/portfolio dropped here) */
.section--dark .stat-card,
.section--dark .portfolio-card,
.section--dark .testimonial-card,
.section--dark .feature-card,
.section--dark2 .stat-card,
.section--dark2 .portfolio-card,
.section--dark2 .testimonial-card,
.section--dark2 .feature-card {
  background: rgba(255,255,255,0.04) !important;
  border: 1px solid rgba(255,255,255,0.08) !important;
  color: var(--on-primary) !important;
}
.section--dark .portfolio-title,
.section--dark .testimonial-content,
.section--dark .feature-title,
.section--dark2 .portfolio-title,
.section--dark2 .testimonial-content,
.section--dark2 .feature-title {
  color: var(--on-primary) !important;
}
.section--dark .portfolio-desc,
.section--dark .feature-desc,
.section--dark2 .portfolio-desc,
.section--dark2 .feature-desc {
  color: rgba(255,255,255,0.70) !important;
}

/* Links inside dark sections */
.section--dark a:not(.btn):not(.process-num),
.section--dark2 a:not(.btn):not(.process-num) {
  color: var(--primary-soft) !important;
}
.section--dark a:not(.btn):hover,
.section--dark2 a:not(.btn):hover {
  color: #fff !important;
}
