/* ==========================================================================
   BigBox Technologies — technology consulting & delivery partner
   Design system: ink/navy + logo-matched coral & gold accents
   ========================================================================== */

/* Self-hosted fonts (Inter + Plus Jakarta Sans, latin + latin-ext subsets only --
   this is an English-language site; the fuller Google Fonts CSS also serves
   cyrillic/greek/vietnamese subsets no page here ever uses). Removes Google
   Fonts as a separate render-blocking origin entirely -- a PageSpeed audit
   flagged the Google Fonts stylesheet request itself (not the font files,
   which already load async thanks to font-display:swap) as a render-blocking
   cost, since it was fetched via a plain <link rel="stylesheet"> with no
   deferral. Bundling the @font-face rules into this file instead means they
   ride along with however style.css itself is loaded, and load from the same
   origin as everything else (no separate DNS/TLS handshake to
   fonts.googleapis.com/fonts.gstatic.com). See the Performance section in
   CLAUDE.md for the full before/after and the matching CSP tightening. */
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 400; font-display: swap; src: url('/fonts/inter-400-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 400; font-display: swap; src: url('/fonts/inter-400-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 500; font-display: swap; src: url('/fonts/inter-500-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 500; font-display: swap; src: url('/fonts/inter-500-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 600; font-display: swap; src: url('/fonts/inter-600-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 600; font-display: swap; src: url('/fonts/inter-600-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 700; font-display: swap; src: url('/fonts/inter-700-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Inter'; font-style: normal; font-weight: 700; font-display: swap; src: url('/fonts/inter-700-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 600; font-display: swap; src: url('/fonts/plus-jakarta-sans-600-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 600; font-display: swap; src: url('/fonts/plus-jakarta-sans-600-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url('/fonts/plus-jakarta-sans-700-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url('/fonts/plus-jakarta-sans-700-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 800; font-display: swap; src: url('/fonts/plus-jakarta-sans-800-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 800; font-display: swap; src: url('/fonts/plus-jakarta-sans-800-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

/* Font-metric-matched fallbacks -- a PageSpeed audit measured a real CLS
   regression from font-swap reflow (font-display:swap paints text in a
   fallback font first, then reflows once the real webfont loads; unlike
   preloading specific weights, which only shrinks the *timing* window, this
   closes the gap structurally by making the fallback occupy the exact same
   space as the real font, for every weight, regardless of load order).
   `local('Arial')` is the actual rendered glyph source; size-adjust/
   ascent-override/descent-override/line-gap-override are computed (via
   fontkit, reading each real webfont's own OS/2 xAvgCharWidth + hhea
   ascent/descent/lineGap against Arial's well-established reference metrics
   -- not guessed) so Arial-at-those-overrides takes up the same width and
   line-box height Inter/Plus Jakarta Sans do at the same font-size. Referenced
   in the --font-body/--font-display stacks below, between the real font and
   the generic system fallback. */
@font-face { font-family: 'Inter Fallback'; src: local('Arial'); ascent-override: 70.06%; descent-override: 17.44%; line-gap-override: 0%; size-adjust: 138.27%; }
@font-face { font-family: 'Plus Jakarta Sans Fallback'; src: local('Arial'); ascent-override: 78.32%; descent-override: 16.75%; line-gap-override: 0%; size-adjust: 132.53%; }

:root {
  --ink: #0a0f1f;
  --ink-soft: #16213e;
  --navy-2: #1b2747;
  --coral: #ff444c;
  --coral-dark: #e0323a;
  /* Text-safe coral: --coral is 3.4:1 against white, which fails WCAG AA
     for small text (needs 4.5:1) -- confirmed by a real audit flagging
     .eyebrow labels. This variant is 5.17:1, safely passing, same hue
     family. Use for small/default-weight coral text on light backgrounds;
     --coral itself stays fine for buttons/borders/backgrounds/hover
     accents, which aren't held to the same text-contrast bar. */
  --coral-text: #d02a33;
  --gold: #d4af37;
  --bg: #ffffff;
  --bg-soft: #f6f8fc;
  --bg-soft-2: #eef1f8;
  --border: #e1e5ee;
  --border-dark: rgba(255, 255, 255, 0.12);
  --text: #4a5268;
  --text-dim: #7b8299;
  --text-dark: #0a0f1f;
  --white: #ffffff;
  --shadow: 0 20px 50px rgba(10, 15, 31, 0.08);
  --shadow-sm: 0 8px 24px rgba(10, 15, 31, 0.06);
  --radius: 12px;
  --radius-sm: 8px;
  --container: 1200px;
  --font-display: 'Plus Jakarta Sans', 'Plus Jakarta Sans Fallback', 'Inter', -apple-system, sans-serif;
  --font-body: 'Inter', 'Inter Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --ease: cubic-bezier(0.16, 1, 0.3, 1);
  --glow-coral: rgba(255, 68, 76, 0.16);
  --glow-gold: rgba(212, 175, 55, 0.3);
}

/* Native cross-document view transitions — zero JS, zero routing change,
   no SEO impact (progressive enhancement, ignored by non-supporting browsers). */
@view-transition {
  navigation: auto;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
/* overflow-x: clip (not hidden) — hidden turns body into a scroll container in
   Chrome, which silently breaks position:sticky for descendants like .site-header. */
html, body { overflow-x: clip; max-width: 100%; }

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

body {
  margin: 0;
  font-family: var(--font-body);
  color: var(--text);
  line-height: 1.7;
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  font-size: 16px;
}

h1, h2, h3, h4, h5 {
  font-family: var(--font-display);
  color: var(--text-dark);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
  margin: 0 0 18px;
}

p { margin: 0 0 16px; }
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
ul { list-style: none; margin: 0; padding: 0; }
button { font-family: inherit; cursor: pointer; }
svg { display: block; }

.container {
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 28px;
}

section { padding: 120px 0; }
.section-soft { background: var(--bg-soft); }

.icon { width: 1em; height: 1em; fill: currentColor; display: inline-block; }

/* ---------- Typography helpers ---------- */
.h1 { font-size: clamp(38px, 5vw, 60px); }
.h2 { font-size: clamp(30px, 3.4vw, 42px); }
.h3 { font-size: clamp(20px, 2vw, 24px); }
.lead { font-size: 19px; color: var(--text); }
.small { font-size: 14px; }

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--coral-text);
  font-family: var(--font-display);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-size: 12.5px;
  margin-bottom: 16px;
}
.eyebrow::before {
  content: "";
  width: 18px;
  height: 2px;
  background: var(--coral);
  display: inline-block;
}

.section-header { max-width: 680px; margin-bottom: 64px; }
.section-header.center { margin-left: auto; margin-right: auto; text-align: center; }
.section-header p:last-child { margin-bottom: 0; }

/* Visually hidden but available to screen readers — used to give otherwise
   generic link text ("Learn more") a distinct accessible name. */
.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;
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 15px 28px;
  border-radius: 8px;
  font-weight: 600;
  font-size: 15px;
  font-family: var(--font-display);
  border: 1.5px solid transparent;
  transition: all 0.25s var(--ease);
  white-space: nowrap;
  position: relative;
  overflow: hidden;
}
.btn::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(115deg, transparent 40%, rgba(255,255,255,0.28) 50%, transparent 60%);
  transform: translateX(-120%);
  transition: transform 0.6s var(--ease);
  pointer-events: none;
}
.btn:hover::before { transform: translateX(120%); }
.btn-primary {
  background: var(--ink);
  color: var(--white);
  border-color: var(--ink);
}
.btn-primary:hover { background: var(--coral); border-color: var(--coral); transform: translateY(-2px); }
.btn-outline {
  border-color: var(--border);
  color: var(--text-dark);
  background: var(--white);
}
.btn-outline:hover { border-color: var(--ink); transform: translateY(-2px); }
.btn-on-dark { border-color: rgba(255,255,255,0.25); color: var(--white); background: transparent; }
.btn-on-dark:hover { background: var(--white); color: var(--ink); border-color: var(--white); }
.btn-gold { background: var(--gold); color: var(--ink); border-color: var(--gold); }
.btn-gold:hover { background: var(--white); border-color: var(--white); }

.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-weight: 600;
  font-family: var(--font-display);
  color: var(--text-dark);
  font-size: 15px;
  position: relative;
}
.link-arrow svg { transition: transform 0.25s var(--ease); width: 16px; height: 16px; }
.link-arrow:hover svg { transform: translateX(4px); }
.link-arrow:hover { color: var(--coral-text); }

/* ---------- Reveal on scroll ---------- */
[data-reveal] {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
[data-reveal].in-view { opacity: 1; transform: translateY(0); }

/* ---------- Preloader ---------- */
.loader-area {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #fff;
  transition: opacity 0.4s ease, visibility 0.4s ease;
}
.loader-area.hidden { opacity: 0; visibility: hidden; pointer-events: none; }
.bbt-loader {
  position: relative;
  width: 100px;
  height: 140px;
  margin: auto;
  background-image: url('/images/loader-bg.png');
  background-size: cover;
  background-repeat: no-repeat;
}
.bbt-loader img {
  width: 50px;
  position: absolute;
  left: 54%;
  top: 55px;
  transform: translateX(-50%);
  animation: bbt-spin 4s linear infinite;
}
@keyframes bbt-spin { 100% { transform: translateX(-50%) rotate(360deg); } }

/* ---------- Header / Nav ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(255, 255, 255, 0.92);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border);
}
.nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 28px;
  gap: 16px;
}
.brand-logo { height: 36px; width: auto; aspect-ratio: 96 / 36; }
.main-nav > ul { display: flex; gap: 2px; align-items: center; }
.main-nav > ul > li { position: relative; }
.main-nav > ul > li > a {
  display: flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 14.5px;
  color: var(--text-dark);
  padding: 10px 10px;
  border-radius: 6px;
  white-space: nowrap;
  transition: color 0.2s, background 0.2s;
}
.main-nav > ul > li > a:hover,
.main-nav > ul > li > a.active { color: var(--coral-text); background: var(--bg-soft); }
.main-nav .caret { width: 18px; height: 18px; margin-top: 0; }
.dropdown-toggle { display: none; }

.dropdown {
  position: absolute;
  top: calc(100% + 10px);
  left: 0;
  min-width: 240px;
  white-space: nowrap;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow);
  padding: 8px;
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px);
  transition: all 0.2s var(--ease);
}
.has-dropdown:hover .dropdown,
.has-dropdown:focus-within .dropdown { opacity: 1; visibility: visible; transform: translateY(0); }
.dropdown li a {
  display: block;
  padding: 11px 14px;
  border-radius: 6px;
  font-size: 14px;
  font-weight: 500;
  color: var(--text);
}
.dropdown li a:hover { background: var(--bg-soft); color: var(--coral-text); }

.nav-cta { flex-shrink: 0; padding: 11px 22px; font-size: 14px; }
.nav-toggle {
  display: none;
  flex-direction: column;
  gap: 5px;
  background: none;
  border: none;
  padding: 6px;
}
.nav-toggle span { width: 22px; height: 2px; background: var(--text-dark); transition: all 0.25s; }
.nav-toggle.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle.open span:nth-child(2) { opacity: 0; }
.nav-toggle.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* ---------- Breadcrumbs ---------- */
.breadcrumbs {
  padding: 18px 0;
  background: var(--bg-soft);
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: var(--header-h, 81px);
  z-index: 90;
}
.breadcrumbs ol { display: flex; flex-wrap: wrap; align-items: center; list-style: none; margin: 0; padding: 0; }
.breadcrumbs li { font-size: 13px; color: var(--text-dim); }
.breadcrumbs li:not(:last-child)::after { content: "/"; margin: 0 8px; color: var(--border); }
.breadcrumbs a { color: var(--text-dim); transition: color 0.2s; }
.breadcrumbs a:hover { color: var(--coral-text); }
.breadcrumbs li[aria-current] { color: var(--text-dark); font-weight: 600; }

/* ---------- Page hero (interior pages) ---------- */
.page-hero { padding: 64px 0 72px; background: var(--bg-soft); }
.page-hero .eyebrow { margin-bottom: 18px; }
.page-hero .lead { max-width: 640px; }

/* ---------- Home hero ---------- */
.hero { padding: 88px 0 100px; overflow: hidden; }
.hero-inner { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 48px; align-items: center; }
.hero-content .lead { max-width: 480px; margin-bottom: 34px; }
.hero-actions { display: flex; gap: 16px; flex-wrap: wrap; }

.hero-visual {
  position: relative;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  overflow: hidden;
  background: radial-gradient(circle at 50% 50%, var(--ink-soft) 0%, var(--ink) 72%);
  box-shadow: 0 0 90px 6px rgba(255, 68, 76, 0.14), 0 30px 70px rgba(10, 15, 31, 0.35);
}
.hero-visual::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    radial-gradient(circle at 50% 50%, var(--glow-coral) 0%, transparent 30%),
    radial-gradient(circle at 50% 50%, var(--glow-gold) 20%, transparent 55%);
  filter: blur(20px);
  animation: hero-glow-breathe 7s ease-in-out infinite;
  pointer-events: none;
}
@keyframes hero-glow-breathe { 0%, 100% { opacity: 0.75; transform: scale(1); } 50% { opacity: 1; transform: scale(1.05); } }
.hero-visual::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background-image: radial-gradient(circle, rgba(255, 255, 255, 0.14) 1px, transparent 1px);
  background-size: 24px 24px;
  background-position: center;
  mask-image: radial-gradient(circle at 50% 50%, #000 0%, #000 45%, transparent 78%);
  -webkit-mask-image: radial-gradient(circle at 50% 50%, #000 0%, #000 45%, transparent 78%);
  pointer-events: none;
}
.hero-visual svg {
  width: 100%;
  height: 100%;
  position: relative;
  z-index: 2;
  transform: translate(calc(var(--hero-mx, 0) * 1px), calc(var(--hero-my, 0) * 1px));
  transition: transform 0.35s var(--ease);
}
.hero-node { fill: var(--white); stroke: rgba(255, 255, 255, 0.3); stroke-width: 1.5; transition: stroke 0.25s var(--ease), filter 0.25s var(--ease); }
.hero-node:hover { stroke: var(--coral); filter: drop-shadow(0 0 8px var(--glow-coral)); cursor: default; }
.hero-node-core { fill: var(--coral); filter: drop-shadow(0 0 20px rgba(255, 68, 76, 0.75)); }
.hero-line { stroke: rgba(255, 255, 255, 0.16); stroke-width: 1.5; fill: none; }
.hero-line-active { stroke: var(--coral); stroke-width: 1.5; fill: none; stroke-dasharray: 6 6; animation: dash 20s linear infinite; }
@keyframes dash { to { stroke-dashoffset: -240; } }
.hero-label { font-family: var(--font-display); font-size: 11px; font-weight: 700; fill: rgba(255, 255, 255, 0.6); letter-spacing: 0.04em; }
.hero-label[font-size] { fill: var(--ink); letter-spacing: 0.02em; }
.hero-core-label { font-family: var(--font-display); font-size: 13px; font-weight: 800; fill: #fff; }
.hero-dot { fill: var(--gold); }
.pulse { animation: pulse 3s ease-in-out infinite; }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }

/* Traveling particles along hero connections (HTML overlay, same proven
   technique as .diagram-connector / .arch-connector particle flow) */
.hero-particles { position: absolute; inset: 0; z-index: 3; pointer-events: none; }
.hero-particle {
  position: absolute;
  width: 6px; height: 6px;
  margin: -3px 0 0 -3px;
  border-radius: 50%;
  background: var(--coral);
  box-shadow: 0 0 8px var(--glow-coral);
  left: var(--from-x);
  top: var(--from-y);
  opacity: 0;
  animation: hero-particle-flow 3.6s linear infinite;
  animation-delay: var(--delay, 0s);
}
@keyframes hero-particle-flow {
  0% { left: var(--from-x); top: var(--from-y); opacity: 0; }
  8% { opacity: 1; }
  92% { opacity: 1; }
  100% { left: var(--to-x); top: var(--to-y); opacity: 0; }
}

/* ---------- Hero slider ---------- */
/* Full-bleed track (each .hero-slide is 100% of the viewport width) with
   contained content inside — same reasoning as .services-slider's viewport/
   track split, except the slider itself isn't wrapped in .container (the
   track needs to slide edge-to-edge) so .container is applied per-slide and
   again around .slider-controls below. */
.hero-slider-viewport { overflow: hidden; }
.hero-slider-track { display: flex; transition: transform 0.55s var(--ease); }
.hero-slide { flex: 0 0 100%; min-width: 0; }
.hero-slider .slider-controls { margin-top: 36px; }
/* Off-screen slides keep running their CSS animations by default (translated
   out of view via .hero-slider-track's transform, but still "visible" as far
   as animation timers are concerned) -- pause them for slides that aren't
   current to avoid wasted paint/GPU work on content nobody can see. */
.hero-slide:not(.is-active) .hero-line-active,
.hero-slide:not(.is-active) .pulse,
.hero-slide:not(.is-active) .hero-particle { animation-play-state: paused; }
.hero-slide:not(.is-active) .hero-visual::before { animation-play-state: paused; }
/* Large centered glyph used in place of the full BigBox Core diagram on the
   promo slides (Get an Estimate / Project Discovery / Case Studies) — reuses
   the same dark circular .hero-visual panel and .hero-node-core glow treatment,
   just without the 6-node hub-and-spoke diagram since there's nothing to connect. */
.hero-core-glyph { font-family: var(--font-display); font-size: 76px; font-weight: 800; fill: #fff; }

/* ---------- Statement band (single centered line) ---------- */
.statement-band { padding: 72px 0; text-align: center; }
.statement-band .eyebrow { justify-content: center; }
.statement-band h2 { font-size: clamp(24px, 2.8vw, 32px); max-width: 760px; margin: 0 auto; }

/* ---------- Value row ---------- */
.value-row { border-top: 1px solid var(--border); }
.value-grid { display: grid; grid-template-columns: repeat(4, 1fr); }
.value-item { padding: 48px 32px 48px 0; border-right: 1px solid var(--border); }
.value-item:not(:first-child) { padding-left: 32px; }
.value-item:last-child { border-right: none; }
.value-item .index { font-family: var(--font-display); font-size: 12.5px; font-weight: 700; color: var(--coral-text); letter-spacing: 0.06em; margin-bottom: 14px; display: block; }
.value-item h3 { font-size: 18px; margin-bottom: 10px; }
.value-item p { font-size: 14.5px; margin: 0; color: var(--text); }

/* ---------- Four pillars ---------- */
.pillars { background: var(--bg-soft); }
.pillars-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.pillar {
  background: var(--white);
  padding: 40px 30px;
  transition: background 0.25s var(--ease), transform 0.2s var(--ease);
  display: flex;
  flex-direction: column;
  min-height: 270px;
  --tilt-x: 0deg;
  --tilt-y: 0deg;
  transform: perspective(900px) rotateX(var(--tilt-y)) rotateY(var(--tilt-x));
  will-change: transform;
}
.pillar:hover { background: var(--ink); transform: perspective(900px) rotateX(var(--tilt-y)) rotateY(var(--tilt-x)) translateY(-4px); }
.pillar:hover .pillar-tag,
.pillar:hover h3,
.pillar:hover p { color: var(--white); }
.pillar:hover .pillar-tag { color: var(--gold); }
.pillar:hover .link-arrow { color: var(--gold); }
.pillar-tag {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 13px;
  letter-spacing: 0.1em;
  color: var(--coral-text);
  margin-bottom: 20px;
}
.pillar h3 { font-size: 19px; margin-bottom: 12px; transition: color 0.25s; }
.pillar p { font-size: 14.5px; color: var(--text); flex-grow: 1; transition: color 0.25s; margin-bottom: 20px; }
.pillar .link-arrow { transition: color 0.25s; }
.pillar:hover .link-arrow svg { stroke: var(--gold); }

/* ---------- Problems / What we solve ---------- */
.problems-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.problem { background: var(--white); padding: 40px; }
.problem h3 { font-size: 18px; margin-bottom: 10px; display: flex; align-items: flex-start; gap: 12px; }
.problem h3 .q { color: var(--coral-text); font-family: var(--font-display); }
.problem p { font-size: 14.5px; margin: 0; padding-left: 26px; }

/* ---------- Process timeline ---------- */
.process { background: var(--ink); color: rgba(255,255,255,0.72); }
.process .section-header h2, .process .eyebrow { color: var(--white); }
.process .eyebrow { color: var(--gold); }
.process .eyebrow::before { background: var(--gold); }
.process-track { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0; position: relative; }
.process-track::before {
  content: "";
  position: absolute;
  top: 22px; left: 0; right: 0;
  height: 1px;
  background: var(--border-dark);
}
.process-step { padding-right: 24px; position: relative; }
.process-step .num {
  width: 44px; height: 44px;
  border-radius: 50%;
  background: var(--ink);
  border: 1.5px solid var(--border-dark);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 14px;
  color: var(--gold);
  margin-bottom: 24px;
  position: relative;
  z-index: 1;
}
.process-step h3 { color: var(--white); font-size: 17px; margin-bottom: 10px; }
.process-step p { font-size: 14px; margin: 0; color: rgba(255,255,255,0.6); }

/* ---------- Integration diagram ---------- */
.integration-diagram {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0;
  padding: 56px 40px;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow-x: auto;
}
.diagram-node {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  width: 140px;
  text-align: center;
}
.diagram-node .node-icon {
  width: 60px; height: 60px;
  border-radius: 14px;
  background: var(--bg-soft);
  border: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  color: var(--coral-text);
  font-size: 24px;
}
.diagram-node.center .node-icon { background: var(--ink); color: var(--gold); border-color: var(--ink); }
.diagram-node span { font-size: 13px; font-weight: 600; font-family: var(--font-display); color: var(--text-dark); }
.diagram-connector { flex: 1; height: 2px; position: relative; min-width: 30px; background: repeating-linear-gradient(90deg, var(--border) 0 6px, transparent 6px 12px); }
.diagram-connector::after {
  content: "";
  position: absolute;
  top: -3px; left: 0;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--coral);
  animation: flow 3.5s linear infinite;
}
@keyframes flow { 0% { left: 0; opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { left: calc(100% - 8px); opacity: 0; } }

/* ---------- Philosophy ---------- */
.philosophy-inner { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: start; }
.philosophy-statement .h2 { font-size: clamp(28px, 3vw, 36px); }
.philosophy-list { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 24px; }
.philosophy-list li {
  font-size: 14.5px;
  font-weight: 600;
  color: var(--text-dark);
  padding: 14px 0 14px 22px;
  border-top: 1px solid var(--border);
  position: relative;
}
.philosophy-list li::before {
  content: "";
  position: absolute;
  left: 0; top: 22px;
  width: 8px; height: 8px;
  background: var(--coral);
  border-radius: 2px;
}

/* ---------- Featured work / case studies ---------- */
.work-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; }
.case-card {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 36px;
  background: var(--white);
  transition: box-shadow 0.25s var(--ease), transform 0.25s var(--ease);
}
.case-card:hover { box-shadow: var(--shadow); transform: translateY(-4px); }
.case-card .case-label {
  font-family: var(--font-display);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--coral-text);
  margin-bottom: 14px;
}
.case-card h3 { font-size: 19px; margin-bottom: 18px; }
.case-field { margin-bottom: 14px; }
.case-field dt { font-size: 12px; font-weight: 700; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 4px; }
.case-field dd { font-size: 14.5px; margin: 0; color: var(--text); }
.case-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }
.case-tags span { font-size: 12.5px; font-weight: 600; padding: 5px 12px; border-radius: 20px; background: rgba(255, 68, 76, 0.08); color: var(--text-dark); }
.work-note {
  margin-top: 40px;
  padding: 22px 28px;
  border: 1px dashed var(--border);
  border-radius: var(--radius-sm);
  font-size: 14px;
  color: var(--text-dim);
  background: var(--bg-soft);
}

/* ---------- About considerations grid ---------- */
.considerations { display: flex; flex-wrap: wrap; gap: 12px; }
.considerations span {
  font-family: var(--font-display);
  font-size: 14px;
  font-weight: 600;
  padding: 12px 20px;
  border: 1px solid rgba(255, 68, 76, 0.3);
  border-radius: 40px;
  color: var(--text-dark);
}
.about-block { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 60px; align-items: start; }
.about-block + .about-block { margin-top: 88px; padding-top: 88px; border-top: 1px solid var(--border); }
.about-block h2 { font-size: clamp(26px, 2.6vw, 32px); }

/* ---------- CTA band ---------- */
.cta-band { position: relative; overflow: hidden; background: var(--ink); color: var(--white); text-align: center; }
.cta-band::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 50% 0%, rgba(255, 68, 76, 0.28) 0%, transparent 55%),
              radial-gradient(circle at 50% 0%, rgba(212, 175, 55, 0.24) 0%, transparent 35%);
  pointer-events: none;
}
.cta-band .container { position: relative; }
.cta-band h2 { color: var(--white); font-size: clamp(28px, 3.6vw, 44px); max-width: 720px; margin: 0 auto 20px; }
.cta-band p { color: rgba(255,255,255,0.65); max-width: 560px; margin: 0 auto 36px; font-size: 17px; }
.cta-band .btn-primary { background: var(--gold); color: var(--ink); border-color: var(--gold); }
.cta-band .btn-primary:hover { background: var(--white); border-color: var(--white); }

/* ---------- Services overview ---------- */
.services-list { display: flex; flex-direction: column; }
.service-row {
  display: grid;
  grid-template-columns: 90px 1fr 1fr auto;
  gap: 32px;
  align-items: center;
  padding: 40px 0;
  border-top: 1px solid var(--border);
  transition: background 0.2s;
}
.services-list .service-row:last-child { border-bottom: 1px solid var(--border); }
.service-row:hover { background: var(--bg-soft); }
.service-row .tag { font-family: var(--font-display); font-weight: 800; font-size: 12px; color: var(--coral-text); letter-spacing: 0.08em; }
.service-row h3 { font-size: 21px; margin: 0; }
.service-row p { font-size: 14.5px; margin: 0; color: var(--text); }

/* ---------- Service detail page ---------- */
.service-detail-inner { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: start; }
.capability-list { display: flex; flex-direction: column; gap: 0; }
.capability-list li {
  font-size: 15px;
  font-weight: 500;
  color: var(--text-dark);
  padding: 16px 0;
  border-top: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 12px;
}
.capability-list li:last-child { border-bottom: 1px solid var(--border); }
.capability-list li::before {
  content: "";
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--coral);
  flex-shrink: 0;
}
.core-message {
  background: var(--bg-soft);
  border-left: 3px solid var(--coral);
  padding: 28px 32px;
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  font-family: var(--font-display);
  font-size: 19px;
  font-weight: 700;
  color: var(--text-dark);
  margin: 32px 0;
}
.related-services { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 20px; }
.related-services a {
  display: block;
  padding: 24px;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 14.5px;
  color: var(--text-dark);
  transition: border-color 0.2s, box-shadow 0.2s;
}
.related-services a:hover { border-color: var(--ink); box-shadow: var(--shadow-sm); }

/* ---------- AI teaser (homepage) ---------- */
.ai-teaser { background: var(--ink); color: rgba(255,255,255,0.72); }
.ai-teaser-inner { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 56px; align-items: center; }
.ai-teaser h2 { color: var(--white); font-size: clamp(28px, 3.4vw, 40px); }
.ai-teaser .eyebrow { color: var(--gold); }
.ai-teaser .eyebrow::before { background: var(--gold); }
.ai-teaser p.lead { color: rgba(255,255,255,0.68); }
.ai-teaser-visual { display: flex; flex-direction: column; gap: 10px; }
.ai-teaser-row {
  display: flex; align-items: center; gap: 14px;
  padding: 16px 20px;
  background: rgba(255,255,255,0.04);
  border: 1px solid var(--border-dark);
  border-radius: var(--radius-sm);
  font-family: var(--font-display);
  font-size: 14px;
  font-weight: 600;
  color: rgba(255,255,255,0.85);
}
.ai-teaser-row .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--gold); flex-shrink: 0; }
.ai-teaser-row.accent { background: rgba(212,175,55,0.12); border-color: rgba(212,175,55,0.4); color: var(--white); }

/* ---------- Principles (3-up bordered grid, reuses .problem look) ---------- */
.principles-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.principles-grid .problem h3 { display: block; }

/* ---------- Opportunity rows (scenario -> capability) ---------- */
.opportunity-list { display: flex; flex-direction: column; }
.opportunity-row {
  display: grid;
  grid-template-columns: 1fr 32px auto;
  align-items: center;
  gap: 20px;
  padding: 28px 0;
  border-top: 1px solid var(--border);
}
.opportunity-list .opportunity-row:last-child { border-bottom: 1px solid var(--border); }
.opportunity-row .scenario h4 { margin: 0 0 4px; font-size: 16px; color: var(--text-dark); }
.opportunity-row .scenario p { margin: 0; font-size: 14px; color: var(--text-dim); }
.opportunity-row .arrow { color: var(--coral-text); display: flex; }
.opportunity-row .capability {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 13.5px;
  color: var(--text-dark);
  background: var(--white);
  border: 1px solid var(--border);
  padding: 10px 18px;
  border-radius: 30px;
  white-space: nowrap;
  justify-self: start;
}

/* ---------- AI capability clusters ---------- */
.ai-capability-list { display: flex; flex-direction: column; }
.ai-capability { padding: 40px 0; border-top: 1px solid var(--border); }
.ai-capability-list .ai-capability:last-child { border-bottom: 1px solid var(--border); }
.ai-capability-head { max-width: 640px; margin-bottom: 22px; }
.ai-capability-head h3 { font-size: 21px; margin-bottom: 8px; }
.ai-capability-head p { margin: 0; font-size: 15px; }
.ai-capability .pillar-tag { display: block; margin-bottom: 12px; }
.ai-capability .considerations span { background: var(--white); }

/* ---------- Workflow showcase (vertical timelines) ---------- */
.workflow-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; }
.workflow-chain h3 { font-size: 18px; margin-bottom: 24px; }
.workflow-step { position: relative; padding-left: 52px; padding-bottom: 30px; }
.workflow-step:last-child { padding-bottom: 0; }
.workflow-step::before {
  content: "";
  position: absolute;
  left: 17px; top: 36px; bottom: -30px;
  width: 2px;
  background: var(--border);
}
.workflow-step:last-child::before { display: none; }
.workflow-step .step-icon {
  position: absolute; left: 0; top: 0;
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--white);
  border: 1.5px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 13px;
  color: var(--coral-text);
  z-index: 1;
}
.workflow-step .step-icon svg { width: 17px; height: 17px; }
.workflow-step.ai .step-icon { background: var(--ink); border-color: var(--ink); color: var(--gold); }
.workflow-step.human .step-icon { background: var(--gold); border-color: var(--gold); color: var(--ink); }
.workflow-step p { margin: 0; font-size: 14.5px; font-weight: 600; color: var(--text-dark); padding-top: 6px; }

/* ---------- Architecture diagram (layered) ---------- */
.arch-diagram {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 56px 32px;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow-x: auto;
}
.arch-layer { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }
.arch-box {
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 14px 22px;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 13.5px;
  color: var(--text-dark);
  text-align: center;
  min-width: 130px;
  white-space: nowrap;
}
.arch-box.accent { background: var(--ink); color: var(--white); border-color: var(--ink); }
.arch-box.gold { background: rgba(212,175,55,0.16); border-color: var(--gold); color: var(--text-dark); }
.arch-connector { width: 2px; height: 38px; position: relative; background: repeating-linear-gradient(180deg, var(--border) 0 6px, transparent 6px 12px); }
.arch-connector::after {
  content: "";
  position: absolute;
  left: -3px; top: 0;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--coral);
  animation: flow-y 3s linear infinite;
}
@keyframes flow-y { 0% { top: 0; opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { top: calc(100% - 8px); opacity: 0; } }

/* ---------- Tech category grid ---------- */
.tech-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 24px; }
.tech-grid .security-card { background: var(--white); border: 1px solid var(--border); }
.tech-grid .security-card h3 { font-size: 15px; }
.tech-grid .security-card ul { margin: 0; padding: 0; list-style: none; }
.tech-grid .security-card li { font-size: 13.5px; color: var(--text); padding: 4px 0; }

/* ---------- Technical audit panel (illustrative only) ---------- */
.audit-panel {
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 44px 40px;
}
.audit-row {
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 16px 0;
  border-top: 1px solid var(--border);
}
.audit-panel .audit-row:first-child { border-top: none; padding-top: 0; }
.audit-panel .audit-row:last-child { padding-bottom: 0; }
.audit-label { width: 160px; flex-shrink: 0; font-family: var(--font-display); font-weight: 600; font-size: 14px; color: var(--text-dark); }
.audit-bar-track { flex: 1; height: 8px; background: var(--bg-soft-2); border-radius: 4px; overflow: hidden; }
.audit-bar-fill { height: 100%; border-radius: 4px; background: linear-gradient(90deg, var(--coral), var(--gold)); }
.audit-status { width: 118px; flex-shrink: 0; text-align: right; font-family: var(--font-display); font-weight: 700; font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-dim); }
.audit-status.attention { color: var(--coral-text); }

/* ---------- Analytics dashboard (illustrative only) ---------- */
.dashboard-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 20px; }
.dashboard-tile { background: var(--white); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 24px; }
.dashboard-tile .metric-label { font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-dim); margin-bottom: 16px; }
.dashboard-tile .metric-visual { height: 44px; display: flex; align-items: flex-end; gap: 4px; }
.dashboard-tile .metric-visual span { flex: 1; background: var(--bg-soft-2); border-radius: 2px 2px 0 0; }
.dashboard-tile .metric-visual span.hi { background: var(--gold); }
.dashboard-tile .metric-name { font-family: var(--font-display); font-weight: 600; font-size: 13.5px; color: var(--text-dark); margin-top: 14px; }
.dashboard-note { text-align: center; font-size: 13px; color: var(--text-dim); margin-top: 24px; }

/* ---------- Workflow 4-up grid (reuses .workflow-chain / .workflow-step) ---------- */
.workflow-grid-4 { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 40px 48px; }

/* ---------- Services slider (homepage) ---------- */
.services-slider { position: relative; }
.slider-viewport { overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius); background: var(--white); }
.slider-track { display: flex; transition: transform 0.55s var(--ease); }
.slide {
  flex: 0 0 100%;
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  gap: 48px;
  align-items: center;
  padding: 56px;
  min-height: 340px;
}
.slide-flow { display: flex; flex-direction: column; align-items: center; gap: 0; }
.flow-node { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.flow-icon {
  width: 56px; height: 56px;
  border-radius: 50%;
  background: var(--bg-soft);
  border: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  color: var(--coral-text);
  font-size: 22px;
}
.flow-node.center .flow-icon { background: var(--ink); color: var(--gold); border-color: var(--ink); }
.flow-node span { font-family: var(--font-display); font-weight: 600; font-size: 12.5px; color: var(--text-dim); }
.flow-connector { width: 2px; height: 34px; position: relative; background: repeating-linear-gradient(180deg, var(--border) 0 5px, transparent 5px 10px); }
.flow-connector::after {
  content: "";
  position: absolute;
  left: -3px; top: 0;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--coral);
  animation: flow-y 3s linear infinite;
}
.slide-content .pillar-tag { display: block; margin-bottom: 14px; }
.slide-content h3 { font-size: 24px; margin-bottom: 12px; }
.slide-content p { font-size: 15px; margin-bottom: 22px; }

.slider-controls { display: flex; align-items: center; justify-content: center; gap: 20px; margin-top: 28px; }
.slider-arrow {
  width: 42px; height: 42px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--white);
  color: var(--text-dark);
  display: flex; align-items: center; justify-content: center;
  transition: border-color 0.2s, color 0.2s, transform 0.2s;
  flex-shrink: 0;
}
.slider-arrow:hover { border-color: var(--ink); transform: translateY(-2px); }
.slider-arrow svg { width: 18px; height: 18px; }
.slider-dots { display: flex; gap: 9px; }
.slider-dots .dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--border);
  border: none;
  padding: 0;
  transition: background 0.2s, transform 0.2s;
}
.slider-dots .dot.active { background: var(--coral); transform: scale(1.3); }
.slider-pause {
  width: 36px; height: 36px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--white);
  color: var(--text-dim);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.slider-pause:hover { color: var(--text-dark); border-color: var(--ink); }
.slider-pause svg { width: 14px; height: 14px; }

@media (max-width: 767px) {
  .slide { grid-template-columns: 1fr; padding: 32px 24px; gap: 24px; text-align: center; min-height: auto; }
  .slide-flow { flex-direction: row; }
  .flow-connector { width: 26px; height: 2px; background: repeating-linear-gradient(90deg, var(--border) 0 5px, transparent 5px 10px); }
  .flow-connector::after { left: 0; top: -3px; animation-name: flow; }
  .flow-icon { width: 46px; height: 46px; font-size: 18px; }
  .slider-controls { gap: 14px; margin-top: 20px; }
}

/* ---------- Approach page detail ---------- */
.approach-steps { display: flex; flex-direction: column; }
.approach-step {
  display: grid;
  grid-template-columns: 120px 1fr;
  gap: 40px;
  padding: 48px 0;
  border-top: 1px solid var(--border);
}
.approach-steps .approach-step:last-child { border-bottom: 1px solid var(--border); }
.approach-step .num { font-family: var(--font-display); font-size: 42px; font-weight: 800; color: var(--bg-soft-2); -webkit-text-stroke: 1.5px var(--border); }
.approach-step h3 { font-size: 22px; margin-bottom: 12px; }
.approach-step p { font-size: 15.5px; max-width: 560px; margin: 0; }

/* ---------- Contact ---------- */
.contact-inner { display: grid; grid-template-columns: 0.85fr 1.15fr; gap: 64px; align-items: start; }
.contact-info dl { margin: 32px 0; }
.contact-info dt { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-dim); margin-bottom: 6px; }
.contact-info dd { margin: 0 0 24px; font-size: 16px; font-weight: 600; color: var(--text-dark); }
.contact-note { font-size: 14px; color: var(--text-dim); padding: 20px 22px; background: var(--bg-soft); border-radius: var(--radius-sm); }

.contact-form { background: var(--white); border: 1px solid var(--border); padding: 44px; border-radius: var(--radius); }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.form-group { margin-bottom: 20px; }
.form-group label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 8px; color: var(--text-dark); font-family: var(--font-display); }
.form-group .optional { color: var(--text-dim); font-weight: 400; }
.form-group input, .form-group select, .form-group textarea {
  width: 100%;
  padding: 13px 16px;
  border: 1px solid var(--border);
  border-radius: 6px;
  font-family: inherit;
  font-size: 14.5px;
  color: var(--text-dark);
  background: var(--white);
  transition: border-color 0.2s;
}
.form-group input:focus, .form-group select:focus, .form-group textarea:focus {
  outline: none;
  border-color: var(--coral);
  box-shadow: 0 0 0 3px rgba(255, 68, 76, 0.18);
}
.form-note { font-size: 14px; font-weight: 600; margin: 16px 0 0; min-height: 1.4em; }
.form-note.success { color: #1a9c5c; }
.form-note.error { color: #d64545; }
.human-check label { display: flex; align-items: center; gap: 6px; }
.human-check label::before {
  content: "";
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--coral);
  flex-shrink: 0;
}
.human-check input { max-width: 220px; letter-spacing: 0.08em; }
.captcha-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.captcha-row canvas {
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--bg-soft);
  cursor: default;
}
.captcha-refresh {
  width: 38px; height: 38px;
  flex-shrink: 0;
  border-radius: 6px;
  border: 1px solid var(--border);
  background: var(--white);
  color: var(--text-dim);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: color 0.2s, border-color 0.2s, transform 0.2s;
}
.captcha-refresh:hover { color: var(--coral-text); border-color: var(--coral); transform: rotate(80deg); }
.captcha-refresh svg { width: 16px; height: 16px; }

/* ---------- Footer ---------- */
.site-footer { background: var(--ink); color: rgba(255,255,255,0.6); position: relative; overflow: hidden; }
.footer-grid { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 40px; padding: 88px 28px 56px; }
.footer-logo { height: 32px; margin-bottom: 20px; filter: brightness(0) invert(1); }
.footer-brand p { font-size: 14.5px; max-width: 280px; }
.site-footer h4 { color: var(--white); font-size: 14px; margin-bottom: 22px; font-family: var(--font-display); letter-spacing: 0.02em; }
/* Footer columns use <h3> (not <h4>) to keep the page's heading hierarchy
   sequential -- there's no <h3> between the last <h2> and these headings
   elsewhere on the page, which a real accessibility audit flagged as a
   skipped level. Explicit font-size/margin here reproduce exactly what the
   browser's default <h4> rendering was, so this is a semantic-only change
   with zero visual difference. */
.footer-col h3 { font-size: 14px; margin-bottom: 22px; }
.footer-col ul { display: flex; flex-direction: column; gap: 13px; }
.footer-col a { font-size: 14.5px; transition: color 0.2s; }
.footer-col a:hover { color: var(--white); }
.footer-contact li { font-size: 14.5px; }
.footer-contact a:hover { color: var(--white); }
.footer-bottom { border-top: 1px solid var(--border-dark); }
.footer-bottom-inner { display: flex; justify-content: space-between; align-items: center; padding: 24px 28px; flex-wrap: wrap; gap: 14px; font-size: 13.5px; }
.footer-bottom-inner .footer-cta { color: var(--gold); font-weight: 600; font-family: var(--font-display); }
.footer-bottom-inner .footer-cta:hover { color: var(--white); }

/* ---------- Back to top ---------- */
.back-to-top {
  position: fixed;
  right: 26px; bottom: 26px;
  width: 46px; height: 46px;
  border-radius: 50%;
  background: var(--ink);
  color: var(--white);
  border: none;
  font-size: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow);
  opacity: 0;
  visibility: hidden;
  transform: translateY(10px);
  transition: all 0.3s ease;
  z-index: 90;
}
.back-to-top.show { opacity: 1; visibility: visible; transform: translateY(0); }
.back-to-top:hover { background: var(--coral); }

/* ---------- Side contact widget (homepage only) ---------- */
.side-contact {
  position: fixed;
  left: 0;
  top: calc(var(--header-h, 81px) + 16px);
  width: 340px;
  max-width: calc(100vw - 20px);
  max-height: calc(100vh - var(--header-h, 81px) - 32px);
  z-index: 95;
  transform: translateX(-115%);
  transition: transform 0.5s var(--ease);
  pointer-events: none;
}
.side-contact.open { transform: translateX(0); pointer-events: auto; }
.side-contact-inner {
  position: relative;
  background: var(--white);
  border: 1px solid var(--border);
  border-left: none;
  border-radius: 0 var(--radius) var(--radius) 0;
  box-shadow: var(--shadow);
  padding: 34px 30px;
  max-height: calc(100vh - var(--header-h, 81px) - 32px);
  overflow-y: auto;
}
.side-contact-close {
  position: absolute;
  top: 14px; right: 14px;
  width: 30px; height: 30px;
  border-radius: 50%;
  border: none;
  background: var(--bg-soft);
  color: var(--text-dim);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.2s, color 0.2s;
}
.side-contact-close:hover { background: var(--ink); color: var(--white); }
.side-contact-close svg { width: 14px; height: 14px; }
.side-contact-eyebrow {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 11.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--coral-text);
  margin-bottom: 10px;
  padding-right: 30px;
}
.side-contact-inner h3 { font-size: 20px; margin-bottom: 8px; padding-right: 20px; }
.side-contact-lead { font-size: 14px; color: var(--text); margin-bottom: 22px; }
.side-contact-form .form-group { margin-bottom: 14px; }
.side-contact-form label {
  display: block;
  font-size: 12.5px;
  font-weight: 600;
  margin-bottom: 6px;
  color: var(--text-dark);
  font-family: var(--font-display);
}
.side-contact-form input,
.side-contact-form textarea {
  width: 100%;
  padding: 11px 14px;
  border: 1px solid var(--border);
  border-radius: 6px;
  font-family: inherit;
  font-size: 14px;
  color: var(--text-dark);
  background: var(--white);
  resize: vertical;
  transition: border-color 0.2s;
}
.side-contact-form input:focus,
.side-contact-form textarea:focus {
  outline: none;
  border-color: var(--coral);
  box-shadow: 0 0 0 3px rgba(255, 68, 76, 0.15);
}
.side-contact-submit { width: 100%; justify-content: center; margin-top: 4px; }

.side-contact-tab {
  position: fixed;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 95;
  background: var(--ink);
  color: var(--white);
  border: none;
  border-radius: 0 10px 10px 0;
  padding: 20px 11px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: var(--shadow-sm);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.4s var(--ease), visibility 0.4s var(--ease), background 0.2s, transform 0.2s;
  animation: side-tab-idle-glow 3.2s ease-in-out infinite;
}
.side-contact-tab.show { opacity: 1; visibility: visible; }
.side-contact-tab:hover { background: var(--coral); transform: translateY(-50%) translateX(2px); }
.side-contact-tab-text {
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
@keyframes side-tab-idle-glow {
  0%, 100% { box-shadow: var(--shadow-sm); }
  50% { box-shadow: 0 0 18px 3px var(--glow-coral), var(--shadow-sm); }
}

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 991px) {
  section { padding: 88px 0; }
  .hero-inner { grid-template-columns: 1fr; }
  .hero-visual { max-width: 420px; margin: 0 auto; order: -1; }
  .value-grid { grid-template-columns: 1fr 1fr; }
  .value-item { border-right: none; border-bottom: 1px solid var(--border); padding: 32px 0; }
  .pillars-grid { grid-template-columns: 1fr 1fr; }
  .problems-grid { grid-template-columns: 1fr; }
  .principles-grid { grid-template-columns: 1fr; }
  .ai-teaser-inner { grid-template-columns: 1fr; }
  .ai-teaser-visual { order: -1; }
  .opportunity-row { grid-template-columns: 1fr; gap: 10px; text-align: left; }
  .opportunity-row .capability { justify-self: start; }
  .workflow-columns { grid-template-columns: 1fr; gap: 40px; }
  .arch-box { min-width: 110px; font-size: 12.5px; padding: 12px 16px; }
  .process-track { grid-template-columns: 1fr; gap: 40px; }
  .process-track::before { display: none; }
  .philosophy-inner { grid-template-columns: 1fr; }
  .work-grid { grid-template-columns: 1fr; }
  .about-block { grid-template-columns: 1fr; gap: 24px; }
  .service-detail-inner { grid-template-columns: 1fr; }
  .related-services { grid-template-columns: 1fr; }
  .contact-inner { grid-template-columns: 1fr; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .nav-cta { display: none; }
}

@media (max-width: 767px) {
  section { padding: 64px 0; }
  .page-hero { padding: 48px 0 56px; }
  .breadcrumbs { padding: 14px 0; }
  .hero { padding: 56px 0 64px; }
  .main-nav {
    position: fixed;
    top: 0; right: 0;
    width: 300px; max-width: 85vw; height: 100vh;
    background: var(--white);
    box-shadow: -10px 0 30px rgba(0,0,0,0.1);
    padding: 100px 28px 30px;
    transform: translateX(100%);
    transition: transform 0.3s ease;
    overflow-y: auto;
  }
  .main-nav.open { transform: translateX(0); }
  .main-nav > ul { flex-direction: column; align-items: stretch; gap: 4px; }
  .main-nav > ul > li > a { padding: 14px 4px; }
  .dropdown { position: static; opacity: 1; visibility: visible; transform: none; box-shadow: none; border: none; padding: 0 0 0 14px; display: none; }
  .has-dropdown.open .dropdown { display: block; }
  .has-dropdown { display: flex; flex-direction: column; }
  .has-dropdown > a { padding-right: 40px; }
  .dropdown-toggle {
    display: flex;
    align-items: center;
    justify-content: center;
    position: absolute;
    right: 0; top: 2px;
    width: 40px; height: 40px;
    background: none;
    border: none;
    color: var(--text-dark);
  }
  .dropdown-toggle svg { transition: transform 0.2s; }
  .has-dropdown.open .dropdown-toggle svg { transform: rotate(180deg); }
  .nav-toggle { display: flex; }
  .value-grid { grid-template-columns: 1fr; }
  .pillars-grid { grid-template-columns: 1fr; }
  .process-step { padding-right: 0; }
  .arch-diagram { padding: 32px 16px; }
  .arch-layer { gap: 10px; }
  .philosophy-list { grid-template-columns: 1fr; }
  .integration-diagram { padding: 32px 20px; }
  .diagram-node { width: 100px; }
  .diagram-node span { font-size: 11.5px; }
  .approach-step { grid-template-columns: 1fr; gap: 16px; }
  .form-row { grid-template-columns: 1fr; }
  .footer-grid { grid-template-columns: 1fr; padding: 64px 28px 30px; }
  .footer-bottom-inner { flex-direction: column; text-align: center; }
  .contact-form { padding: 28px; }
  .service-row { grid-template-columns: 1fr; gap: 10px; text-align: left; }
  .side-contact { width: 300px; }
  .side-contact-inner { padding: 28px 22px; }
  .side-contact-tab { padding: 16px 9px; }
  .side-contact-tab-text { font-size: 12px; }
}

/* ==========================================================================
   Estimate Engine -- homepage teaser + full wizard (pages/estimate.html).
   All numeric pricing lives in js/estimate-config.js, not here. Built from
   existing tokens/shapes: radio-card and checkbox-chip are new (no prior
   equivalent existed), everything else adapts an existing pattern --
   progress bar from .audit-bar-track/.audit-bar-fill's rounded-track/
   gradient-fill shape, sticky sidebar from .breadcrumbs's
   position:sticky/var(--header-h) pattern, cards from .case-card.
   ========================================================================== */

/* ---------- Homepage teaser ---------- */
.estimate-teaser { background: var(--bg-soft); }
.estimate-teaser-widget {
  max-width: 760px;
  margin: 0 auto;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 40px;
  box-shadow: var(--shadow-sm);
}
.estimate-teaser-services { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-bottom: 24px; }
.qe-service-pill {
  font-family: var(--font-display);
  font-size: 14px;
  font-weight: 600;
  padding: 12px 20px;
  border: 1.5px solid var(--border);
  border-radius: 40px;
  background: var(--white);
  color: var(--text-dark);
  transition: border-color 0.2s, color 0.2s, background 0.2s;
}
.qe-service-pill:hover { border-color: var(--coral); color: var(--coral-text); }
.qe-service-pill.active { background: var(--ink); border-color: var(--ink); color: var(--gold); }
.estimate-teaser-complexity { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-bottom: 28px; }
.qe-complexity-btn {
  font-family: var(--font-display);
  font-size: 13.5px;
  font-weight: 600;
  padding: 10px 18px;
  border: 1.5px solid var(--border);
  border-radius: var(--radius-sm);
  background: var(--bg-soft);
  color: var(--text-dim);
  transition: border-color 0.2s, color 0.2s, background 0.2s;
}
.qe-complexity-btn:hover { border-color: var(--coral); color: var(--text-dark); }
.qe-complexity-btn.active { background: var(--white); border-color: var(--coral); color: var(--coral-text); }
.estimate-teaser-result { text-align: center; padding-top: 24px; border-top: 1px solid var(--border); }
.qe-result-label { font-family: var(--font-display); font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-dim); margin-bottom: 8px; }
.qe-result-amount { font-family: var(--font-display); font-size: 40px; font-weight: 800; color: var(--text-dark); margin-bottom: 20px; }
.estimate-teaser-hint { text-align: center; color: var(--text-dim); font-size: 14px; margin-top: 4px; }

/* ---------- Full wizard layout ---------- */
.estimate-wizard-section { padding: 64px 0 96px; }
/* pages/project-discovery.html's hero has an in-page "Start Project Discovery"
   link (href="#discoveryWizard"), and every "Get an Estimate" link sitewide now
   points at estimate.html#estimateWizard so it lands straight on the interactive
   wizard instead of the page's own hero text. Without this, the browser's native
   anchor jump aligns the target's top edge with the viewport top, which lands
   directly behind the sticky header + sticky breadcrumb bar stacked on top of it,
   visually cutting off the wizard's own heading/progress bar (confirmed via a
   real user report -- the first, tighter buffer measured a clean numeric fix but
   still read as "touching"/cut off in practice, so this is deliberately generous
   rather than the minimum needed). scroll-margin-top reuses the same live-measured
   --header-h variable the breadcrumb bar itself uses, plus its own height, so this
   stays correct across breakpoints without hardcoding two numbers that could drift
   out of sync. */
#discoveryWizard,
#estimateWizard { scroll-margin-top: calc(var(--header-h, 81px) + 110px); }
.estimate-wizard-grid {
  display: grid;
  grid-template-columns: 1fr 340px;
  gap: 48px;
  align-items: start;
}
.estimate-config-col {
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 44px;
  min-height: 420px;
}
/* Project Discovery dropped its sticky sidebar/mobile bar (it only ever
   repeated the category/sub-option already shown in the step content, unlike
   the Estimate Engine's sidebar which carries a unique live $ figure) -- the
   wizard card is centered on its own instead of sitting in the two-column
   .estimate-wizard-grid. */
.discovery-wizard-centered { max-width: 840px; margin: 0 auto; }
.estimate-summary-col {
  position: sticky;
  top: calc(var(--header-h, 81px) + 24px);
  background: var(--ink);
  border-radius: var(--radius);
  padding: 32px;
  color: rgba(255, 255, 255, 0.85);
}
.estimate-summary-col .eyebrow { color: var(--gold); }
.estimate-summary-col .eyebrow::before { background: var(--gold); }
.estimate-summary-amount { font-family: var(--font-display); font-size: 30px; font-weight: 800; color: var(--white); margin: 10px 0 4px; line-height: 1.2; }
.estimate-summary-currency-note { font-size: 12.5px; color: rgba(255, 255, 255, 0.5); margin-bottom: 20px; }
.estimate-summary-services { list-style: none; padding: 0; margin: 0 0 20px; display: flex; flex-direction: column; gap: 8px; }
.estimate-summary-services li { font-size: 13.5px; font-weight: 600; color: rgba(255, 255, 255, 0.85); display: flex; align-items: center; gap: 8px; }
.estimate-summary-services li::before { content: "✓"; color: var(--gold); font-weight: 700; flex-shrink: 0; }
.estimate-summary-note { font-size: 12.5px; color: rgba(255, 255, 255, 0.55); line-height: 1.5; }

/* Light-background variant of .estimate-summary-services, for use in .estimate-config-col
   (e.g. Project Discovery's summary step) rather than the dark .estimate-summary-col sidebar. */
.discovery-summary-services { list-style: none; padding: 0; margin: 0 0 20px; display: flex; flex-direction: column; gap: 8px; }
.discovery-summary-services li { font-size: 14.5px; font-weight: 600; color: var(--text-dark); display: flex; align-items: center; gap: 8px; }
.discovery-summary-services li::before { content: "✓"; color: var(--coral-text); font-weight: 700; flex-shrink: 0; }

/* ---------- Step progress bar ---------- */
.estimate-progress { margin-bottom: 40px; }
.estimate-progress-labels { display: flex; justify-content: space-between; margin-bottom: 10px; }
.estimate-progress-labels span {
  font-family: var(--font-display);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-dim);
}
.estimate-progress-labels span.active { color: var(--coral-text); }
.estimate-progress-track { height: 6px; background: var(--bg-soft-2); border-radius: 3px; overflow: hidden; }
.estimate-progress-fill { height: 100%; border-radius: 3px; background: linear-gradient(90deg, var(--coral), var(--gold)); transition: width 0.4s var(--ease); }

/* ---------- Step transitions ---------- */
.estimate-step { animation: estimate-step-in 0.35s var(--ease); }
@keyframes estimate-step-in {
  from { opacity: 0; transform: translateX(16px); }
  to { opacity: 1; transform: translateX(0); }
}
.estimate-step h3 { font-size: 22px; margin-bottom: 6px; }
.estimate-step .estimate-step-help { color: var(--text-dim); font-size: 14px; margin-bottom: 24px; }
/* gap guarantees a minimum space between buttons even when justify-content:
   space-between runs out of free space to distribute -- happens on Project
   Discovery's summary step, which has 4 buttons (Back/Continue/Discuss/Start
   Over) in this same row, narrower still since the wizard card centered at
   max-width:760px instead of spanning the old two-column grid's wider column. */
.estimate-step-nav { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 12px; margin-top: 32px; padding-top: 24px; border-top: 1px solid var(--border); }

/* ---------- Radio-card / checkbox-chip selectors ---------- */
.estimate-option-group { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; margin-bottom: 8px; }
.estimate-option-group.list { grid-template-columns: 1fr; }
.radio-card, .checkbox-chip {
  display: block;
  cursor: pointer;
  border: 1.5px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 18px 20px;
  transition: border-color 0.2s, background 0.2s, transform 0.15s;
  background: var(--white);
}
.radio-card:hover, .checkbox-chip:hover { border-color: var(--coral); transform: translateY(-1px); }
.radio-card input, .checkbox-chip input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.radio-card .rc-label, .checkbox-chip .cc-label {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 14.5px;
  color: var(--text-dark);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.radio-card .rc-desc, .checkbox-chip .cc-desc { font-size: 13px; color: var(--text-dim); margin-top: 6px; line-height: 1.4; }
.radio-card .rc-check, .checkbox-chip .cc-check {
  width: 20px; height: 20px;
  border: 1.5px solid var(--border);
  border-radius: 50%;
  flex-shrink: 0;
  position: relative;
  transition: border-color 0.2s, background 0.2s;
}
.checkbox-chip .cc-check { border-radius: 5px; }
.radio-card input:checked ~ .rc-label .rc-check,
.checkbox-chip input:checked ~ .cc-label .cc-check { background: var(--coral); border-color: var(--coral); }
.radio-card input:checked ~ .rc-label .rc-check::after {
  content: ""; position: absolute; inset: 5px; border-radius: 50%; background: var(--white);
}
.checkbox-chip input:checked ~ .cc-label .cc-check::after {
  content: ""; position: absolute; left: 6px; top: 2px; width: 5px; height: 10px;
  border: solid var(--white); border-width: 0 2px 2px 0; transform: rotate(45deg);
}
.radio-card:has(input:checked), .checkbox-chip:has(input:checked) { border-color: var(--coral); background: rgba(255, 68, 76, 0.04); }
.radio-card input:focus-visible ~ .rc-label, .checkbox-chip input:focus-visible ~ .cc-label { outline: 2px solid var(--coral); outline-offset: 3px; border-radius: 4px; }

/* ---------- Info tooltip ---------- */
.estimate-info {
  display: inline-flex; align-items: center; justify-content: center;
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--bg-soft-2); color: var(--text-dim);
  font-size: 11px; font-weight: 700; font-family: var(--font-display);
  cursor: help; position: relative; margin-left: 6px; flex-shrink: 0;
}
.estimate-info:hover::after, .estimate-info:focus-visible::after {
  content: attr(data-tip);
  position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%);
  width: 220px; padding: 10px 12px; border-radius: 6px;
  background: var(--ink); color: var(--white); font-size: 12.5px; font-weight: 400;
  line-height: 1.4; text-align: left; z-index: 5;
}

/* ---------- Mode toggle (single vs multiple services) ---------- */
.estimate-mode-toggle { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 8px; }

/* ---------- Custom-scope info card (e.g. E-commerce) ---------- */
.estimate-custom-scope {
  border: 1.5px dashed var(--border);
  border-radius: var(--radius-sm);
  padding: 16px 20px;
  color: var(--text-dim);
  font-size: 13px;
  grid-column: 1 / -1;
}
.estimate-custom-scope strong { color: var(--text-dark); }

/* ---------- Breakdown & summary blocks (full-page summary step) ---------- */
.estimate-breakdown { list-style: none; padding: 0; margin: 0; }
.estimate-breakdown li { display: flex; justify-content: space-between; gap: 16px; padding: 12px 0; border-top: 1px solid var(--border); font-size: 14px; }
.estimate-breakdown li:first-child { border-top: none; }
.estimate-breakdown .bd-label { color: var(--text); }
.estimate-breakdown .bd-value { font-family: var(--font-display); font-weight: 600; color: var(--text-dark); white-space: nowrap; }
.estimate-breakdown-total { display: flex; justify-content: space-between; padding-top: 16px; margin-top: 8px; border-top: 2px solid var(--ink); font-family: var(--font-display); font-weight: 800; font-size: 16px; }

.estimate-service-block { border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 14px; overflow: hidden; }
.estimate-service-block summary {
  cursor: pointer; padding: 20px 24px; display: flex; justify-content: space-between; align-items: center;
  font-family: var(--font-display); font-weight: 700; font-size: 15px; list-style: none;
}
.estimate-service-block summary::-webkit-details-marker { display: none; }
.estimate-service-block summary .sb-range { color: var(--coral-text); font-weight: 700; }
.estimate-service-block[open] summary { border-bottom: 1px solid var(--border); }
.estimate-service-block .sb-body { padding: 20px 24px; }

.estimate-combined-total {
  background: var(--ink);
  border-radius: var(--radius);
  padding: 32px;
  text-align: center;
  margin-top: 8px;
}
.estimate-combined-total .eyebrow { color: var(--gold); justify-content: center; }
.estimate-combined-total .eyebrow::before { display: none; }
.estimate-combined-total .amount { font-family: var(--font-display); font-size: 36px; font-weight: 800; color: var(--white); margin: 8px 0; }
.estimate-combined-total .note { font-size: 13px; color: rgba(255, 255, 255, 0.55); }

/* ---------- Currency select + FX status ---------- */
.estimate-currency-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 20px; }
.estimate-currency-row select { width: auto; min-width: 140px; }
.estimate-fx-note { font-size: 12.5px; color: var(--text-dim); }
.estimate-fx-note.unavailable { color: var(--coral-text); }

/* ---------- Reference number + disclaimer ---------- */
.estimate-reference { font-family: var(--font-display); font-size: 13px; font-weight: 700; color: var(--text-dim); letter-spacing: 0.03em; margin-bottom: 16px; }
.estimate-disclaimer { font-size: 13px; color: var(--text-dim); line-height: 1.6; padding: 16px 20px; background: var(--bg-soft); border-radius: var(--radius-sm); }

/* ---------- FAQ (native details/summary) ---------- */
.estimate-faq-item { border-top: 1px solid var(--border); }
.estimate-faq-item:last-child { border-bottom: 1px solid var(--border); }
.estimate-faq-item summary {
  cursor: pointer; padding: 22px 4px; font-family: var(--font-display); font-weight: 700; font-size: 16px;
  color: var(--text-dark); list-style: none; display: flex; justify-content: space-between; align-items: center; gap: 16px;
}
.estimate-faq-item summary::-webkit-details-marker { display: none; }
.estimate-faq-item summary::after { content: "+"; font-size: 22px; color: var(--coral-text); flex-shrink: 0; transition: transform 0.2s; }
.estimate-faq-item[open] summary::after { transform: rotate(45deg); }
.estimate-faq-item p { padding: 0 4px 22px; margin: 0; color: var(--text); font-size: 14.5px; }

/* ---------- Mobile ---------- */
@media (max-width: 991px) {
  .estimate-wizard-grid { grid-template-columns: 1fr; }
  .estimate-summary-col { position: static; margin-top: 0; }
}
@media (max-width: 767px) {
  .estimate-config-col { padding: 28px 22px; }
  .estimate-teaser-widget { padding: 28px 20px; }
  .estimate-mode-toggle { grid-template-columns: 1fr; }
  .estimate-wizard-section { padding: 40px 0 120px; } /* extra bottom room for the sticky bar */
  .estimate-summary-col { display: none; } /* replaced by .estimate-summary-bar below */
  .estimate-summary-bar {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 96;
    background: var(--ink); color: var(--white); padding: 14px 20px;
    box-shadow: 0 -8px 24px rgba(10, 15, 31, 0.2);
  }
  .estimate-summary-bar .bar-amount { font-family: var(--font-display); font-weight: 800; font-size: 16px; }
  .estimate-summary-bar .bar-label { font-size: 11px; color: rgba(255, 255, 255, 0.55); text-transform: uppercase; letter-spacing: 0.04em; }
}
@media (min-width: 768px) {
  .estimate-summary-bar { display: none; }
}

/* ---------- Nav "Get an Estimate" highlight ---------- */
.main-nav .nav-estimate-link {
  display: inline-flex;
  align-items: center;
  position: relative;
  color: var(--coral-text);
  font-weight: 700;
  border: 1.5px solid var(--coral);
  border-radius: var(--radius-sm);
  padding: 6px 14px;
  margin: -6px 0;
  transition: background 0.2s, color 0.2s, box-shadow 0.2s, transform 0.15s;
}
.main-nav .nav-estimate-link:hover {
  background: var(--coral);
  color: var(--white);
  box-shadow: 0 4px 14px rgba(255, 68, 76, 0.35);
  transform: translateY(-1px);
}
.main-nav .nav-estimate-link:hover::before { animation: none; opacity: 0; }
/* Pulsing "pop" ring as a pseudo-element animating only opacity/transform
   (GPU-composited) instead of animating box-shadow directly on the link
   itself (paint-triggering, non-composited -- flagged by a Lighthouse
   "avoid non-composited animations" audit). Same visual read as an
   outward ring pulse. */
.main-nav .nav-estimate-link::before {
  content: "";
  position: absolute;
  inset: -1.5px;
  border: 1.5px solid var(--coral);
  border-radius: inherit;
  opacity: 0.5;
  transform: scale(1);
  animation: nav-estimate-glow 2.4s ease-in-out infinite;
  pointer-events: none;
}
@keyframes nav-estimate-glow {
  0%, 100% { opacity: 0.45; transform: scale(1); }
  50% { opacity: 0; transform: scale(1.22); }
}

/* ---------- Homepage teaser: eye-catching treatment ---------- */
.estimate-teaser-eyebrow-row { display: flex; align-items: center; justify-content: center; gap: 10px; margin-bottom: 16px; }
.estimate-teaser-eyebrow-row .eyebrow { margin-bottom: 0; }
.estimate-teaser-badge {
  font-family: var(--font-display);
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink);
  background: var(--gold);
  padding: 3px 9px;
  border-radius: 20px;
}
.estimate-teaser-widget {
  position: relative;
  border-color: rgba(255, 68, 76, 0.25);
  box-shadow: 0 0 0 1px rgba(255, 68, 76, 0.06), var(--shadow);
}

/* ---------- Fix: remove the stray default focus outline that appeared as a
   visible box around the step heading. tabindex="-1" + .focus() is applied
   programmatically on every step render purely so screen readers announce
   the new heading -- sighted/mouse users never need a visible ring here,
   and interactive controls (buttons, inputs) still get their own normal
   focus styles untouched. ---------- */
.estimate-step h3:focus { outline: none; }

/* ---------- Currency select: match the site's form-control theme instead
   of default browser chrome. The dropdown chevron is a real inline <svg>
   in a positioning wrapper, not a CSS data: background-image -- this
   site's CSP img-src is deliberately 'self' only, no data:, so a data-URI
   background image gets silently blocked (console-only, no layout error). */
.estimate-select-wrap { position: relative; display: inline-block; }
.estimate-select-wrap svg.select-chevron {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  width: 14px;
  height: 14px;
  color: var(--text-dim);
  pointer-events: none;
}
.estimate-currency-row select {
  appearance: none;
  -webkit-appearance: none;
  padding: 9px 34px 9px 14px;
  border: 1px solid var(--border);
  border-radius: 6px;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 14px;
  color: var(--text-dark);
  background: var(--white);
  cursor: pointer;
  transition: border-color 0.2s;
}
.estimate-currency-row select:hover { border-color: var(--coral); }
.estimate-currency-row select:focus {
  outline: none;
  border-color: var(--coral);
  box-shadow: 0 0 0 3px rgba(255, 68, 76, 0.18);
}

/* ---------- Converted-currency line, shown wherever the estimate amount
   appears (main summary card and the sticky sidebar/mobile bar). ---------- */
.estimate-converted-amount {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 15px;
  color: var(--coral-text);
  margin-top: 4px;
}
.estimate-summary-col .estimate-converted-amount { color: var(--gold); }
.estimate-summary-bar .estimate-converted-amount { color: var(--gold); font-size: 12.5px; margin-top: 2px; }

/* ==========================================================================
   Project Discovery -- homepage teaser + service/case-study entry links +
   full wizard page (pages/project-discovery.html). The wizard itself reuses
   the Estimate Engine's .radio-card/.checkbox-chip/.estimate-option-group/
   .estimate-step*/.estimate-progress*/.estimate-wizard-grid* classes
   verbatim (see js/project-discovery.js) -- only the handful of genuinely
   new shapes below get new rules.
   ========================================================================== */

/* ---------- Homepage teaser ---------- */
.discovery-teaser { background: var(--white); }
.discovery-teaser-grid.estimate-option-group { max-width: 900px; margin: 0 auto 28px; }
.discovery-teaser-grid .radio-card { text-align: center; font-family: var(--font-display); font-weight: 700; font-size: 14.5px; color: var(--text-dark); }
.discovery-teaser-grid .radio-card:hover { color: var(--coral-text); }

/* ---------- Secondary link inside a dark .cta-band (e.g. service pages'
   "Not sure exactly what you need? Try Project Discovery" line). .cta-band
   is --ink background, so this needs the dark-background legibility
   treatment (gold on hover), same rule used throughout the design system. */
.cta-band-secondary { margin-top: 18px; }
.cta-band-secondary a { color: rgba(255, 255, 255, 0.65); font-size: 14.5px; text-decoration: underline; text-underline-offset: 3px; transition: color 0.2s; }
.cta-band-secondary a:hover { color: var(--gold); }

/* ---------- Contextual "Have a similar need?" link on case-study cards ---------- */
.case-discovery-link { margin-top: 14px; }
.case-discovery-link a { font-size: 13.5px; font-weight: 600; color: var(--coral-text); }
.case-discovery-link a:hover { color: var(--coral-dark); }

/* ---------- Read-only Q&A recap shown above the lead-capture form ---------- */
.discovery-summary-recap { list-style: none; padding: 0; margin: 0 0 28px; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.discovery-summary-recap li { display: flex; justify-content: space-between; gap: 16px; padding: 12px 20px; border-top: 1px solid var(--border); font-size: 14px; }
.discovery-summary-recap li:first-child { border-top: none; }
.discovery-summary-recap .recap-label { color: var(--text-dim); }
.discovery-summary-recap .recap-value { font-family: var(--font-display); font-weight: 600; color: var(--text-dark); text-align: right; }

/* ---------- Complexity badge on the summary step ---------- */
.discovery-complexity-badge {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--font-display); font-weight: 700; font-size: 13px;
  padding: 8px 16px; border-radius: 40px;
  background: var(--ink); color: var(--gold);
  margin-bottom: 8px;
}

