/* ============================================================
   SARTECH — B2B light theme (Clearbit-style handoff)
   Hanken Grotesk · monocolour navy + muted steel on white
   ============================================================ */

:root {
  /* ink */
  --ink: #0C1322;
  --body: #52607a;
  --body-2: #5a6678;
  --label: #42506a;
  --muted: #6b7790;
  --faint: #94a0b3;

  /* brand */
  --navy: #01296A;
  --navy-deep: #011E4F;
  --blue: #01296A;
  --blue-2: #01296A;
  --cyan: #4F7F9F;
  --cyan-ink: #3D6480;
  --cyan-light: #D6E2EC;

  /* surfaces */
  --bg: #ffffff;
  --bg-alt: #F6F8FC;
  --bg-soft: #FBFCFE;

  /* lines */
  --line: #E9EDF4;
  --line-2: #E5EAF2;
  --line-soft: #EEF1F7;
  --line-input: #DCE3EF;

  /* chips */
  --chip: #F2F5FA;
  --chip-line: #E7ECF4;
  --chip-blue: #EEF3FB;
  --chip-blue-line: #E0E8F4;

  --grad-accent: linear-gradient(100deg, #01296A 0%, #01296A 100%);
  --grad-navy: linear-gradient(135deg, #01296A, #011E4F);
  --conic: conic-gradient(from 160deg, #01296A, #4F7F9F, #01296A);

  --font: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --max: 1200px;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 88px; -webkit-text-size-adjust: 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;
  }
}

body {
  margin: 0;
  font-family: var(--font);
  color: var(--ink);
  background: var(--bg);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}
body.is-locked { overflow: hidden; }

a { color: inherit; text-decoration: none; }
h1, h2, h3, h4, p { margin: 0; }
img { max-width: 100%; display: block; }
::selection { background: rgba(0, 112, 217, 0.26); }

a:focus-visible, button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible {
  outline: none;
}

@keyframes sartech-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* ---------- scroll progress ---------- */
.progress {
  position: fixed; inset: 0 0 auto 0; height: 2px; z-index: 200; background: transparent; pointer-events: none;
}
.progress span {
  display: block; height: 100%; width: 0%;
  background: linear-gradient(90deg, #0070D9, #0070D9);
}

/* ---------- layout ---------- */
.section { max-width: var(--max); margin: 0 auto; padding: 104px 28px; }
.band { background: var(--bg-alt); border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft); }

.head { max-width: 760px; margin: 0 auto 56px; text-align: center; }
.head--products, .head--narrow { max-width: 720px; margin-bottom: 52px; }
.kicker {
  font-size: 15px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--cyan-ink); margin-bottom: 14px;
}
.h2 { font-size: 48px; line-height: 1.06; letter-spacing: -0.03em; font-weight: 800; color: var(--ink); }
.head .lead { font-size: 18px; color: var(--body); margin-top: 16px; max-width: 600px; margin-left: auto; margin-right: auto; }

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  font-family: inherit; font-weight: 700; cursor: pointer; border: 1px solid transparent;
  transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease), background 0.2s var(--ease), border-color 0.2s var(--ease);
}
.btn svg { width: 17px; height: 17px; }
.btn--primary {
  background: #0070D9; color: #fff; padding: 15px 26px; border-radius: 8px; font-size: 15.5px;
}
.btn--primary:hover { transform: translateY(-2px); box-shadow: 0 14px 30px rgba(16, 40, 63, 0.26); }
.btn--outline {
  background: transparent; color: var(--navy); padding: 15px 26px; border-radius: 8px; font-size: 15.5px; border-color: #D8E0EC;
}
.btn--outline:hover { border-color: #0070D9; background: rgba(0, 112, 217, 0.04); }
.btn--sm { padding: 12px 20px; border-radius: 8px; font-size: 14.5px; }
.btn--sm svg { width: 16px; height: 16px; }
.btn--block { width: 100%; padding: 15px; border-radius: 8px; font-size: 15.5px; }
.btn--light { background: #fff; color: var(--navy); padding: 15px 28px; border-radius: 8px; font-size: 15.5px; }
.btn--light:hover { transform: translateY(-2px); background: #f4f7fd; box-shadow: 0 14px 30px rgba(0, 0, 0, 0.28); }

/* ---------- CTA banner ---------- */
.cta { position: relative; overflow: hidden; background: #10283F; color: #fff; border-radius: 12px; padding: 72px 48px; text-align: center; }
.cta__inner { position: relative; }
.cta h2 { font-size: clamp(30px, 3.8vw, 46px); line-height: 1.08; letter-spacing: -0.03em; font-weight: 800; color: #fff; }
.cta p { font-size: 18px; color: rgba(255, 255, 255, 0.72); margin: 16px auto 0; max-width: 560px; }
.cta .btn { margin-top: 30px; }

/* ============================================================
   HEADER
   ============================================================ */
.header {
  position: sticky; top: 0; z-index: 120;
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  background: rgba(255, 255, 255, 0); box-shadow: 0 0 0 rgba(16, 40, 63, 0);
  transition: background 0.3s, box-shadow 0.3s;
}
.header.is-scrolled {
  background: rgba(255, 255, 255, 0.6);
  -webkit-backdrop-filter: saturate(180%) blur(16px);
  backdrop-filter: saturate(180%) blur(16px);
  box-shadow: 0 1px 0 var(--line-soft), 0 8px 24px rgba(16, 40, 63, 0.06);
}
.headerbar {
  max-width: var(--max); margin: 0 auto; padding: 16px 28px;
  display: flex; align-items: center; justify-content: space-between; gap: 24px;
}
.brand { display: flex; align-items: center; }
.brand img { height: 32px; width: auto; }
.nav { display: flex; gap: 36px; margin-left: auto; font-size: 15px; font-weight: 600; letter-spacing: 0.02em; color: #3a4459; }
.nav a { transition: color 0.2s; }
.nav a:hover, .nav a.is-active { color: var(--navy); }
.header-actions { display: flex; align-items: center; gap: 12px; }
.header-actions .btn--primary { padding: 11px 19px; border-radius: 8px; font-size: 14.5px; }
/* division switcher (always-visible way to jump to the other division) */
.division-switch { display: inline-flex; align-items: center; gap: 7px; font-size: 13.5px; font-weight: 600; color: var(--navy); padding: 10px 13px; border-radius: 8px; transition: background 0.2s, color 0.2s; }
.division-switch svg { width: 15px; height: 15px; transition: transform 0.2s var(--ease); }
.division-switch:hover { background: rgba(0, 112, 217, 0.05); }
.division-switch:hover svg { transform: translateX(3px); }
.drawer__division { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 10px; padding: 13px 8px; font-size: 16px; font-weight: 700; color: var(--navy); border-top: 1px solid #E3EBF3; }
.drawer__division svg { width: 16px; height: 16px; }
.menu-btn {
  display: none; background: #F7FAFD; border: 1px solid #E4E9F2; border-radius: 9px;
  width: 42px; height: 42px; cursor: pointer; align-items: center; justify-content: center; color: var(--blue-2);
}

/* mobile drawer */
.drawer-scrim {
  position: fixed; inset: 0; z-index: 130; background: rgba(8, 16, 30, 0.5);
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); display: none; justify-content: flex-end;
}
body.nav-open .drawer-scrim { display: flex; }
.drawer { width: 280px; height: 100%; background: #fff; padding: 28px 24px; display: flex; flex-direction: column; gap: 6px; }
.drawer a { padding: 13px 8px; font-size: 17px; font-weight: 600; border-bottom: 1px solid #E3EBF3; }
.drawer a.drawer__cta { margin-top: 14px; text-align: center; background: #0070D9; color: #fff; border-radius: 10px; font-weight: 700; border-bottom: 0; }

/* ============================================================
   HERO
   ============================================================ */
.hero { position: relative; overflow: hidden; }
.hero__wash { position: absolute; inset: 0; background: radial-gradient(120% 95% at 50% 42%, rgba(255, 255, 255, 0.97) 0%, rgba(255, 255, 255, 0.9) 50%, rgba(255, 255, 255, 0.78) 100%); }
.hero__fade { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 24%, rgba(255, 255, 255, 0) 62%, #ffffff 100%); }
.hero__inner { position: relative; max-width: var(--max); margin: 0 auto; padding: 96px 28px 80px; }
.hero__copy { max-width: 760px; margin: 0 auto; text-align: center; }
.pill {
  display: inline-flex; align-items: center; gap: 9px; padding: 7px 15px; border: 1px solid #DCE6F0;
  border-radius: 100px; background: rgba(255, 255, 255, 0.7); font-size: 12.5px; font-weight: 700;
  color: var(--blue-2); margin-bottom: 26px;
}
.pill i { width: 7px; height: 7px; border-radius: 50%; background: var(--cyan); box-shadow: 0 0 0 4px rgba(0, 112, 217, 0.18); }
.h1 { font-size: clamp(34px, 4.8vw, 56px); line-height: 1.08; letter-spacing: -1.2px; font-weight: 800; color: var(--ink); }
.grad-text { color: var(--navy); }
[data-theme="dark"] .grad-text { color: #6ea8ff; }
.hero__lead { margin: 26px auto 0; font-size: 19px; line-height: 1.6; color: var(--body); max-width: 560px; font-weight: 500; }
.hero__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 13px; margin-top: 34px; }
.hero__checks { display: flex; flex-wrap: wrap; justify-content: center; gap: 22px; margin-top: 42px; font-size: 13.5px; font-weight: 600; color: var(--muted); }
.hero__checks span { display: inline-flex; align-items: center; gap: 7px; }
.check-ic { width: 15px; height: 15px; flex: none; color: var(--cyan-ink); }

/* ============================================================
   LOGO STRIP
   ============================================================ */
.logos { padding: 44px 0; }
.logos__label { text-align: center; font-size: 12px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--faint); margin-bottom: 24px; }
.logos__band { background: var(--bg-soft); border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft); padding: 26px 0; }
.logos__viewport { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.logos__track { display: flex; width: max-content; align-items: center; gap: 64px; animation: sartech-marquee 38s linear infinite; }
.logos:hover .logos__track { animation-play-state: paused; }
.logos__track img { height: 34px; width: auto; flex: none; }
.logos--industries { padding: 56px 0 0; }
.logos--industries .logos__band { background: var(--bg); border: 1px solid var(--line-soft); border-radius: 16px; }
[data-theme="dark"] .logos--industries .logos__band { background: rgba(255, 255, 255, 0.02); border-color: rgba(255, 255, 255, 0.08); }

/* ============================================================
   CARD GRIDS
   ============================================================ */
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }

/* about / purpose card */
.card { background: #fff; border: 1px solid var(--line); border-radius: 16px; padding: 30px; }
/* technical-capacity spec card (reuses .card) */
.spec-card__k { display: block; font-size: 12px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--cyan-ink); margin-bottom: 11px; }
.spec-card__v { font-size: 16px; color: var(--ink); line-height: 1.5; }
.card__num { font-size: 15px; font-weight: 700; letter-spacing: -0.01em; color: var(--blue-2); margin-bottom: 18px; }
.card h3 { font-size: 21px; font-weight: 700; letter-spacing: -0.02em; color: var(--ink); margin-bottom: 10px; }
.card p { font-size: 15px; color: var(--body-2); }

/* ============================================================
   PRODUCTS
   ============================================================ */
.product-card { background: #fff; border: 1px solid var(--line-2); border-radius: 20px; overflow: hidden; display: flex; flex-direction: column; }
.product-card__inner { padding: 28px; display: flex; flex-direction: column; flex: 1; }
.tag {
  align-self: flex-start; background: var(--chip-blue); border: 1px solid var(--chip-blue-line); color: var(--blue-2);
  font-size: 11.5px; font-weight: 700; padding: 6px 11px; border-radius: 8px; margin-bottom: 16px;
}
.product-card h3 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 10px; }
.product-card > .product-card__inner > p { font-size: 15.5px; color: var(--body-2); margin-bottom: 18px; }
.spec-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 24px; }
.spec-chips span { font-size: 12.5px; font-weight: 600; color: var(--label); background: var(--chip); border: 1px solid var(--chip-line); padding: 6px 11px; border-radius: 7px; }
.product-card .btn { margin-top: auto; align-self: flex-start; }

/* ============================================================
   CAPABILITIES
   ============================================================ */
.cap-card {
  background: #fff; border: 1px solid var(--line); border-radius: 16px; padding: 26px;
  transition: border-color 0.25s var(--ease), box-shadow 0.25s var(--ease), opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
.cap-card:hover { border-color: #CFE3F5; box-shadow: 0 14px 30px rgba(16, 40, 63, 0.07); }
.cap-card__ic {
  display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px;
  background: linear-gradient(135deg, #EAF4FC, #EAF4FC); font-size: 15px; font-weight: 700; letter-spacing: -0.01em;
  color: var(--blue-2); margin-bottom: 18px;
}
.cap-card h3 { font-size: 18px; font-weight: 700; letter-spacing: -0.015em; margin-bottom: 8px; }
.cap-card p { font-size: 14.5px; color: var(--body-2); }

/* process flow (dark panel) */
.process { background: #10283F; border-radius: 12px; padding: 48px; color: #fff; position: relative; overflow: hidden; }
.process__inner { position: relative; text-align: center; }
.process .kicker { color: var(--cyan-ink); margin-bottom: 12px; }
.process h3 { font-size: 32px; font-weight: 800; letter-spacing: -0.025em; margin-bottom: 8px; }
.process__sub { font-size: 16px; color: rgba(255, 255, 255, 0.7); max-width: 520px; margin: 0 auto 44px; }
.process__steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; text-align: left; }
.process-step { border-top: 1px solid rgba(255, 255, 255, 0.14); padding-top: 20px; }
.process-step__num { font-size: 15px; font-weight: 700; letter-spacing: -0.01em; color: #0070D9; margin-bottom: 12px; }
.process-step strong { display: block; font-size: 16.5px; font-weight: 700; letter-spacing: -0.01em; margin-bottom: 8px; }
.process-step p { font-size: 13.5px; color: rgba(255, 255, 255, 0.66); line-height: 1.55; }

/* ============================================================
   INDUSTRIES
   ============================================================ */
.industry-card {
  text-align: center; background: #fff; border: 1px solid var(--line-2); border-radius: 18px; padding: 34px 20px;
  cursor: pointer; font-family: inherit; display: flex; flex-direction: column; align-items: center; gap: 18px;
  transition: border-color 0.25s var(--ease), box-shadow 0.25s var(--ease), transform 0.25s var(--ease);
}
.industry-card:hover { border-color: #CFE3F5; box-shadow: 0 18px 38px rgba(16, 40, 63, 0.1); transform: translateY(-5px); }
.industry-card__ic { display: flex; align-items: center; justify-content: center; width: 54px; height: 54px; border-radius: 14px; background: linear-gradient(135deg, #EAF4FC, #EAF4FC); border: 1px solid #DCE6F0; }
.industry-card__ic svg { width: 24px; height: 24px; color: var(--blue-2); transition: transform 0.3s var(--ease); }
.industry-card span { font-size: 16px; font-weight: 700; letter-spacing: -0.01em; color: var(--ink); line-height: 1.3; }

/* ============================================================
   QUALITY (dark panel)
   ============================================================ */
.quality-panel { background: #10283F; color: #fff; border-radius: 12px; padding: 72px 48px; position: relative; overflow: hidden; }
.quality-panel__inner { position: relative; }
.quality-head { max-width: 780px; margin: 0 auto 52px; text-align: center; }
.quality-head .kicker { color: var(--cyan-ink); }
.quality-head .h2 { color: #fff; }
.quality-head .sub { font-size: 18px; color: rgba(255, 255, 255, 0.62); margin-top: 16px; }
.quality-head .lead { font-size: 15.5px; color: rgba(255, 255, 255, 0.7); margin-top: 20px; line-height: 1.7; max-width: 660px; margin-left: auto; margin-right: auto; }
.quality-badges { display: flex; gap: 32px; margin-top: 26px; justify-content: center; flex-wrap: wrap; }
.quality-badges strong { display: inline-flex; align-items: center; gap: 9px; font-size: 14px; font-weight: 700; letter-spacing: 0.02em; color: #dbe7f5; }
.quality-badges strong svg { width: 18px; height: 18px; color: var(--cyan); flex: none; }
.quality-item { background: rgba(255, 255, 255, 0.055); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 12px; padding: 24px; }
.quality-item span { display: block; font-size: 16px; font-weight: 700; color: #fff; margin-bottom: 8px; }
.quality-item p { font-size: 13.5px; color: rgba(255, 255, 255, 0.6); line-height: 1.55; }

/* ============================================================
   CONTACT
   ============================================================ */
.contact-grid { display: grid; grid-template-columns: 0.85fr 1.15fr; gap: 24px; align-items: stretch; }
.contact-aside { background: #10283F; color: #fff; border-radius: 12px; padding: 34px; position: relative; overflow: hidden; }
.contact-aside__inner { position: relative; }
.contact-aside h3 { font-size: 22px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 12px; }
.contact-aside > .contact-aside__inner > p { font-size: 15px; color: rgba(255, 255, 255, 0.72); margin-bottom: 26px; }
.contact-methods { display: flex; flex-direction: column; gap: 12px; }
.contact-methods a { display: flex; align-items: center; gap: 12px; background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 12px; padding: 13px 16px; font-size: 14.5px; font-weight: 600; transition: background 0.2s; }
.contact-methods a:hover { background: rgba(255, 255, 255, 0.1); }
.contact-methods svg { width: 18px; height: 18px; flex: none; stroke: var(--cyan-ink); }
.nda { margin-top: 26px; padding-top: 22px; border-top: 1px solid rgba(255, 255, 255, 0.12); }
.nda strong { font-size: 14px; color: #EAF4FC; }
.nda p { font-size: 13px; color: rgba(255, 255, 255, 0.6); margin-top: 5px; }

.form { background: #fff; border: 1px solid var(--line-2); border-radius: 20px; padding: 34px; display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.field { display: flex; flex-direction: column; gap: 7px; }
.field--wide { grid-column: 1 / -1; }
.field > span { font-size: 13px; font-weight: 600; color: var(--label); }
.field input, .field textarea, .field select {
  font-family: inherit; font-size: 15px; padding: 12px 14px; border: 1px solid var(--line-input);
  border-radius: 10px; background: #F7FAFD; color: var(--ink); outline: none; transition: border-color 0.2s, background 0.2s, box-shadow 0.2s;
}
.field input:focus, .field textarea:focus, .field select:focus { border-color: #0070D9; background: #fff; box-shadow: 0 0 0 3px rgba(16, 40, 63, 0.12); }
.field textarea { resize: vertical; }
.field select {
  appearance: none; -webkit-appearance: none; cursor: pointer; padding-right: 38px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2342506a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 13px center; background-size: 16px;
}
.field--file input { font-size: 13.5px; color: var(--body-2); padding: 11px 14px; border: 1px dashed #CBD5E6; cursor: pointer; }
.field--file input::file-selector-button {
  margin-right: 12px; padding: 8px 14px; border: 1px solid var(--chip-blue-line); border-radius: 8px;
  background: var(--chip-blue); color: var(--blue-2); font-family: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer;
}
.field__hint { font-size: 12px; color: var(--faint); }
.form .btn { grid-column: 1 / -1; }

/* ============================================================
   FOOTER
   ============================================================ */
.footer { background: #10283F; color: #fff; }
.footer__inner { max-width: var(--max); margin: 0 auto; padding: 64px 28px 32px; }
.footer__grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.2fr; gap: 40px; }
.footer__brand { height: 26px; width: auto; margin-bottom: 18px; }
.footer__about p { font-size: 14.5px; color: rgba(255, 255, 255, 0.6); max-width: 300px; }
.footer__iso { font-size: 12px; font-weight: 700; color: var(--cyan-ink); margin-top: 16px; letter-spacing: 0.04em; }
.footer__col h3 { font-size: 13px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: rgba(255, 255, 255, 0.5); margin-bottom: 16px; }
.footer__col > div, .footer__links { display: flex; flex-direction: column; gap: 11px; font-size: 14.5px; color: rgba(255, 255, 255, 0.78); }
.footer__links a { transition: color 0.2s; }
.footer__links a:hover { color: #fff; }
.footer__links p { color: rgba(255, 255, 255, 0.55); font-size: 13.5px; }
.division-link {
  display: inline-flex; align-items: center; gap: 8px; margin-top: 18px; padding: 11px 16px;
  border: 1px solid rgba(214, 226, 236, 0.3); border-radius: 10px; background: rgba(255, 255, 255, 0.05);
  color: var(--cyan-ink); font-size: 13.5px; font-weight: 700;
  transition: background 0.2s, border-color 0.2s, transform 0.2s;
}
.division-link svg { width: 16px; height: 16px; transition: transform 0.2s; }
.division-link:hover { background: rgba(255, 255, 255, 0.1); border-color: var(--cyan-ink); transform: translateY(-1px); }
.division-link:hover svg { transform: translateX(4px); }
.footer__bottom { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 10px; margin-top: 48px; padding-top: 24px; border-top: 1px solid rgba(255, 255, 255, 0.1); font-size: 13px; color: rgba(255, 255, 255, 0.5); }
.footer__bottom p:last-child { font-weight: 600; }

/* ---------- back-to-top ---------- */
.to-top {
  position: fixed; right: 25px; bottom: 84px; z-index: 91;
  width: 48px; height: 48px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: #fff; border: 1px solid var(--line-2); color: var(--navy);
  cursor: pointer; box-shadow: 0 8px 24px rgba(16, 40, 63, 0.16);
  opacity: 0; visibility: hidden; transform: translateY(8px);
  transition: opacity 0.25s var(--ease), transform 0.25s var(--ease), background 0.3s, border-color 0.3s, color 0.3s;
}
.to-top.is-visible { opacity: 1; visibility: visible; transform: none; }
.to-top:hover { transform: translateY(-2px) scale(1.06); border-color: #0070D9; }
.to-top svg { width: 20px; height: 20px; }

/* ============================================================
   MODAL
   ============================================================ */
.modal { position: fixed; inset: 0; z-index: 160; background: rgba(7, 15, 34, 0.55); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); display: none; align-items: flex-start; justify-content: center; padding: 40px 20px; overflow-y: auto; }
.modal.is-open { display: flex; }
.modal__panel { background: #fff; border-radius: 22px; max-width: 760px; width: 100%; overflow: hidden; box-shadow: 0 40px 90px rgba(7, 15, 34, 0.4); position: relative; margin: auto; }
.modal__close { position: absolute; top: 18px; right: 18px; z-index: 5; width: 38px; height: 38px; border-radius: 50%; border: 1px solid #E4E9F2; background: #fff; color: var(--navy); font-size: 20px; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.modal__close:hover { background: #F4F7FC; }
.pm-header { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 20px; padding: 38px 38px 28px; background: linear-gradient(135deg, #ECF2FE, #DAE6FA); border-bottom: 1px solid #D2DEF0; }
.pm-header--industry { display: block; }
.pm-header .kicker { font-size: 12px; letter-spacing: 0.14em; margin-bottom: 14px; }
.pm-header h3 { font-size: 28px; font-weight: 800; letter-spacing: -0.025em; margin-bottom: 12px; }
.pm-header > div > p, .pm-header__sub { font-size: 15px; color: var(--body); }

.pm-body { padding: 32px 38px 38px; }
.pm-body > p { font-size: 15px; color: var(--label); margin-bottom: 14px; line-height: 1.7; }
.pm-body h4 { font-size: 14px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--navy); margin: 26px 0 14px; }

.pm-cta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; margin-top: 28px; padding: 22px; background: #F4F7FC; border-radius: 14px; }
.pm-cta strong { display: block; font-size: 15px; color: var(--ink); }
.pm-cta span { font-size: 13.5px; color: var(--body-2); }
.pm-cta a { display: inline-flex; align-items: center; gap: 9px; background: #0070D9; color: #fff; padding: 13px 22px; border-radius: 8px; font-size: 14.5px; font-weight: 700; }
.pm-cta a svg { width: 16px; height: 16px; }

/* ============================================================
   REVEAL
   ============================================================ */
[data-reveal] { opacity: 0; transform: translateY(26px); transition: opacity 0.85s cubic-bezier(0.16, 1, 0.3, 1), transform 0.85s cubic-bezier(0.16, 1, 0.3, 1); will-change: opacity, transform; }
[data-reveal].is-visible { opacity: 1; transform: none; }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 980px) {
  .nav { display: none; }
  .menu-btn { display: flex; }
  .header-actions .btn--primary { display: none; }
  .division-switch { display: none; }
  .grid-2 { grid-template-columns: 1fr; }
  .quality-panel { padding: 48px 28px; }
  .contact-grid { grid-template-columns: 1fr; }
  .footer__grid { grid-template-columns: 1fr 1fr; }
  .footer__about { grid-column: 1 / -1; }
  .process__steps { grid-template-columns: 1fr 1fr; }
  .pm-header { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
  .section { padding: 76px 20px; }
  .hero__inner { padding: 80px 20px 64px; }
  .h2 { font-size: 32px; }
  .grid-3, .grid-2, .grid-4 { grid-template-columns: 1fr; }
  .form { grid-template-columns: 1fr; }

  .process { padding: 36px 24px; }
  .process__steps { grid-template-columns: 1fr; }
  .quality-panel { padding: 44px 24px; }
  .footer__grid { grid-template-columns: 1fr; }
  .footer__bottom { flex-direction: column; }
  /* center card icon/number, heading and text on mobile */
  .card, .cap-card, .process-step { text-align: center; }
  .cap-card__ic, .spec-card .card__num { margin-left: auto; margin-right: auto; }
}

/* ============================================================
   DARK MODE
   ============================================================ */
[data-theme="dark"] {
  --bg: #0c111b; --bg-alt: #0f1521; --bg-soft: #0e131e;
  --ink: #eef2f8; --body: #b4bece; --body-2: #9aa6b6; --label: #c5cedb; --muted: #8b96a7; --faint: #6c7686;
  --line: rgba(255, 255, 255, 0.09); --line-2: rgba(255, 255, 255, 0.12); --line-soft: rgba(255, 255, 255, 0.06); --line-input: rgba(255, 255, 255, 0.16);
  --chip: rgba(255, 255, 255, 0.05); --chip-line: rgba(255, 255, 255, 0.1);
  --chip-blue: rgba(1, 41, 106, 0.2); --chip-blue-line: rgba(1, 41, 106, 0.4);
  --grad-navy: linear-gradient(135deg, #00255E, #00163C);
}
[data-theme="dark"] body { background: var(--bg); }
/* surfaces */
[data-theme="dark"] .card,
[data-theme="dark"] .product-card,
[data-theme="dark"] .cap-card,
[data-theme="dark"] .industry-card,
[data-theme="dark"] .form,
[data-theme="dark"] .modal__panel,
[data-theme="dark"] .theme-toggle { background: #131a27; }
[data-theme="dark"] .theme-toggle { color: #eef2f8; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45); }
[data-theme="dark"] .to-top { background: #131a27; color: #eef2f8; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45); }
[data-theme="dark"] .theme-toggle .ic-moon { display: none; }
[data-theme="dark"] .theme-toggle .ic-sun { display: block; }
/* header + nav */
[data-theme="dark"] .header.is-scrolled { background: rgba(12, 17, 27, 0.6); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 26px rgba(0, 0, 0, 0.45); }
[data-theme="dark"] .nav { color: var(--body); }
[data-theme="dark"] .nav a:hover, [data-theme="dark"] .nav a.is-active { color: #fff; }
[data-theme="dark"] .menu-btn { background: rgba(255, 255, 255, 0.05); border-color: rgba(255, 255, 255, 0.14); }
[data-theme="dark"] .menu-btn svg { color: #eef2f8; }
[data-theme="dark"] .drawer { background: #0f1521; }
[data-theme="dark"] .drawer a { border-color: rgba(255, 255, 255, 0.08); }
/* hero */
[data-theme="dark"] .hero__wash { background: radial-gradient(120% 95% at 50% 42%, rgba(12, 17, 27, 0.82) 0%, rgba(12, 17, 27, 0.9) 50%, rgba(12, 17, 27, 0.97) 100%); }
[data-theme="dark"] .hero__fade { background: linear-gradient(180deg, rgba(12, 17, 27, 0.6) 0%, rgba(12, 17, 27, 0) 24%, rgba(12, 17, 27, 0) 76%, var(--bg) 100%); }
[data-theme="dark"] .pill { background: rgba(255, 255, 255, 0.05); border-color: rgba(255, 255, 255, 0.14); color: #bcd0ff; }
/* dark carousel; logos sit on uniform light cards that float on the dark band */
[data-theme="dark"] .logos__band { background: transparent; border-top-color: rgba(255, 255, 255, 0.08); border-bottom-color: rgba(255, 255, 255, 0.08); }
[data-theme="dark"] .logos__track { gap: 26px; }
[data-theme="dark"] .logos__track img {
  width: 158px; height: 56px; object-fit: contain; padding: 13px 22px;
  background: #fff; border-radius: 12px; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.28);
}
/* buttons */
[data-theme="dark"] .btn--primary { background: #01296A; }
[data-theme="dark"] .btn--primary:hover { box-shadow: 0 14px 30px rgba(1, 41, 106, 0.45); }
[data-theme="dark"] .btn--outline { background: #131a27; color: #eef2f8; border-color: rgba(255, 255, 255, 0.16); }
/* icon chips */
[data-theme="dark"] .cap-card__ic,
[data-theme="dark"] .industry-card__ic { background: linear-gradient(135deg, rgba(1, 41, 106, 0.22), rgba(79, 127, 159, 0.12)); border-color: rgba(255, 255, 255, 0.1); }
[data-theme="dark"] .industry-card__ic svg { color: #9fc2ff; }
[data-theme="dark"] .card__num, [data-theme="dark"] .cap-card__ic { color: #9fc2ff; }
/* form */
[data-theme="dark"] .field input, [data-theme="dark"] .field textarea, [data-theme="dark"] .field select { background: #1a2332; color: #eef2f8; border-color: rgba(255, 255, 255, 0.16); }
[data-theme="dark"] .field input:focus, [data-theme="dark"] .field textarea:focus, [data-theme="dark"] .field select:focus { background: #1f2a3b; }
[data-theme="dark"] .field select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b3bdcc' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); }
[data-theme="dark"] .field--file input { border-color: rgba(255, 255, 255, 0.18); }
[data-theme="dark"] .field--file input::file-selector-button { background: rgba(1, 41, 106, 0.22); border-color: rgba(1, 41, 106, 0.4); color: #bcd0ff; }
/* modal */
[data-theme="dark"] .modal__close { background: #131a27; color: #eef2f8; border-color: rgba(255, 255, 255, 0.16); }
[data-theme="dark"] .modal__close:hover { background: #1a2332; }
[data-theme="dark"] .pm-header { background: linear-gradient(135deg, #16233f, #101a33); border-color: rgba(255, 255, 255, 0.08); }

[data-theme="dark"] .pm-cta { background: rgba(255, 255, 255, 0.04); }

/* ============================================================
   CONTACT PAGE
   ============================================================ */
/* solid header over the dark page-hero */
.has-dark-hero .header { background: rgba(255, 255, 255, 0.92); -webkit-backdrop-filter: saturate(160%) blur(14px); backdrop-filter: saturate(160%) blur(14px); box-shadow: 0 1px 0 var(--line-soft); }
[data-theme="dark"] .has-dark-hero .header { background: rgba(12, 17, 27, 0.85); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06); }

.page-hero {
  position: relative; overflow: hidden; padding: 150px 28px 92px;
  background: radial-gradient(1100px 640px at 50% -14%, var(--bg-alt), var(--bg) 60%);
}
.page-hero .mask { position: absolute; inset: 0; background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px); background-size: 54px 54px; -webkit-mask-image: radial-gradient(800px 500px at 50% 30%, #000, transparent 78%); mask-image: radial-gradient(800px 500px at 50% 30%, #000, transparent 78%); pointer-events: none; opacity: 0.6; }
.page-hero .inner { position: relative; z-index: 2; max-width: 820px; margin: 0 auto; text-align: center; }
.eyebrow2 { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 700; letter-spacing: 2.5px; text-transform: uppercase; color: var(--cyan-ink); margin-bottom: 20px; }
.eyebrow2 span { width: 24px; height: 2px; background: var(--cyan); }
.page-hero h1 { font-size: clamp(34px, 4.8vw, 56px); line-height: 1.08; font-weight: 800; letter-spacing: -1.2px; color: var(--ink); margin-bottom: 20px; }
.page-hero p { font-size: clamp(16px, 1.6vw, 18.5px); line-height: 1.65; color: var(--muted); max-width: 640px; margin: 0 auto; }

.info-card { display: flex; flex-direction: column; background: #10283F; border-radius: 12px; padding: 34px 34px 20px; color: #fff; box-shadow: 0 18px 45px rgba(7, 38, 48, 0.12); }
.info-card h3 { font-size: 21px; font-weight: 700; margin-bottom: 10px; letter-spacing: -0.3px; }
.ic-sub { font-size: 14.5px; line-height: 1.65; color: rgba(255, 255, 255, 0.7); margin-bottom: 26px; }
.info-row { display: flex; align-items: center; gap: 14px; padding: 15px 0; border-top: 1px solid rgba(255, 255, 255, 0.12); color: #fff; }
.ir-ic { width: 38px; height: 38px; border-radius: 10px; background: rgba(255, 255, 255, 0.08); display: flex; align-items: center; justify-content: center; color: var(--cyan-ink); flex-shrink: 0; }
.ir-ic svg { width: 18px; height: 18px; }

.ir-k { display: block; font-size: 11px; color: rgba(255, 255, 255, 0.5); font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; }
.ir-v { font-size: 15px; font-weight: 600; }
.info-note { margin-top: auto; padding: 16px 18px; background: rgba(0, 112, 217, 0.1); border: 1px solid rgba(0, 112, 217, 0.25); border-radius: 12px; }
.in-t { font-size: 12px; font-weight: 700; color: var(--cyan-ink); letter-spacing: 0.3px; margin-bottom: 4px; }
.in-d { font-size: 13px; line-height: 1.55; color: rgba(255, 255, 255, 0.7); }

.form-card { display: flex; flex-direction: column; background: #fff; border: 1px solid var(--line); border-radius: 12px; padding: 34px 34px 20px; box-shadow: 0 1px 2px rgba(16, 40, 63, 0.04); }
.form-card form { display: flex; flex-direction: column; gap: 16px; flex: 1; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.form-card .field { display: flex; flex-direction: column; }
.form-card .field label { display: block; font-size: 13px; font-weight: 600; color: var(--ink); margin-bottom: 7px; }
.form-card .field input, .form-card .field select, .form-card .field textarea { width: 100%; padding: 13px 15px; border: 1px solid var(--line-2); border-radius: 11px; font-size: 14.5px; color: var(--ink); font-family: inherit; background: #fff; outline: none; transition: border-color 0.2s, box-shadow 0.2s; }
.form-card .field input:focus, .form-card .field select:focus, .form-card .field textarea:focus { border-color: #0070D9; box-shadow: 0 0 0 3px rgba(16, 40, 63, 0.14); }
.form-card .field textarea { min-height: 130px; resize: vertical; }
.form-card .field select { appearance: none; -webkit-appearance: none; cursor: pointer; padding-right: 40px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2374859B' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 15px center; }
.form-card .field .file-label { display: flex; align-items: center; gap: 12px; padding: 13px 16px; border: 1.5px dashed var(--line-2); border-radius: 11px; cursor: pointer; background: var(--bg-alt); transition: border-color 0.2s; font-size: 13.5px; font-weight: 400; color: var(--muted); margin-bottom: 0; }
.form-card .field .file-label:hover { border-color: #0070D9; }
.fl-ic { width: 34px; height: 34px; border-radius: 9px; background: #fff; border: 1px solid var(--line-2); display: flex; align-items: center; justify-content: center; color: var(--navy); flex-shrink: 0; }
.file-hint { font-size: 11.5px; color: var(--muted); margin-top: 7px; }
.form-submit { margin-top: 14px; display: inline-flex; align-items: center; justify-content: center; gap: 10px; background: #0070D9; color: #fff; font-size: 15.5px; font-weight: 700; padding: 15px; border: none; border-radius: 8px; cursor: pointer; font-family: inherit; box-shadow: 0 14px 30px -14px rgba(16, 40, 63, 0.7); transition: transform 0.2s, box-shadow 0.2s; }
.form-submit:hover { transform: translateY(-2px); box-shadow: 0 18px 36px -14px rgba(10, 37, 87, 0.7); }
.form-submit svg { width: 18px; height: 18px; flex-shrink: 0; }
.form-card.is-sent form { display: none; }
.form-success { display: none; flex-direction: column; align-items: center; text-align: center; padding: 30px 10px; }
.form-card.is-sent .form-success { display: flex; }
.fs-ic { width: 64px; height: 64px; border-radius: 50%; background: rgba(0, 112, 217, 0.14); display: flex; align-items: center; justify-content: center; color: var(--cyan); margin-bottom: 18px; }
.form-success h3 { font-size: 21px; font-weight: 700; color: var(--ink); margin-bottom: 10px; }
.form-success p { font-size: 15px; line-height: 1.65; color: var(--muted); max-width: 380px; }

.direct-card { text-align: center; background: var(--bg-alt); border: 1px solid var(--line); border-radius: 12px; padding: 46px 32px; max-width: 760px; margin: 0 auto; }
.direct-card h2 { font-size: clamp(24px, 3vw, 32px); font-weight: 700; color: var(--ink); letter-spacing: -0.5px; margin-bottom: 12px; }
.direct-card > p { font-size: 15.5px; line-height: 1.6; color: var(--body); max-width: 540px; margin: 0 auto 28px; }
.direct-btns { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.btn-call { display: inline-flex; align-items: center; gap: 10px; background: #0070D9; color: #fff; padding: 16px 28px; font-size: 15.5px; font-weight: 700; border-radius: 8px; transition: transform 0.2s, box-shadow 0.2s; }
.btn-call:hover { transform: translateY(-2px); box-shadow: 0 14px 30px rgba(10, 37, 87, 0.26); }
.btn-call svg { width: 20px; height: 20px; }

.map-label { display: flex; align-items: center; justify-content: center; gap: 10px; margin: 0 0 18px; font-size: 12px; font-weight: 700; letter-spacing: 2.5px; text-transform: uppercase; color: var(--cyan-ink); }
.map-label .bar { width: 26px; height: 2px; background: var(--cyan-ink); }
.map-actions { display: flex; justify-content: center; margin-top: 24px; }
.map-embed { position: relative; border-radius: 12px; overflow: hidden; border: 1px solid var(--line); box-shadow: 0 1px 2px rgba(16, 40, 63, 0.04); height: 400px; background: var(--bg-alt); }
.map-embed iframe { width: 100%; height: 100%; border: 0; display: block; filter: grayscale(0.2); }

/* contact page — dark mode */
[data-theme="dark"] .form-card { background: #131a27; border-color: rgba(255, 255, 255, 0.1); }
[data-theme="dark"] .form-card .field label { color: #eef2f8; }
[data-theme="dark"] .form-card .field input, [data-theme="dark"] .form-card .field select, [data-theme="dark"] .form-card .field textarea { background: #1a2332; color: #eef2f8; border-color: rgba(255, 255, 255, 0.16); }
[data-theme="dark"] .form-card .field select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b3bdcc' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 15px center; }
[data-theme="dark"] .form-card .field .file-label { background: #1a2332; border-color: rgba(255, 255, 255, 0.16); color: rgba(226, 232, 240, 0.7); }
[data-theme="dark"] .fl-ic { background: #131a27; border-color: rgba(255, 255, 255, 0.14); color: var(--cyan-ink); }
[data-theme="dark"] .form-success h3 { color: #eef2f8; }
[data-theme="dark"] .direct-card { background: #131a27; border-color: rgba(255, 255, 255, 0.1); }
[data-theme="dark"] .map-embed { border-color: rgba(255, 255, 255, 0.1); }
[data-theme="dark"] .map-embed iframe { filter: grayscale(0.3) invert(0.92) hue-rotate(185deg); }

@media (max-width: 980px) { .form-row { grid-template-columns: 1fr; } .page-hero { padding: 124px 20px 72px; } }

/* ---- Sartech contact identity (distinct from the template) ---- */
.page-hero h1 .accent { color: var(--navy); }
.hero-iso { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: 24px; }
.hero-iso strong { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 500; letter-spacing: 0.04em; color: var(--blue-2); background: var(--bg-alt); border: 1px solid var(--line); padding: 8px 14px; border-radius: 10px; }
[data-theme="dark"] .hero-iso strong { color: #D6E2EC; background: rgba(255, 255, 255, 0.06); border-color: rgba(214, 226, 236, 0.3); }
.info-card { position: relative; overflow: hidden; }
.info-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, #0070D9, #0070D9); }
.ir-k { font-size: 10.5px; letter-spacing: 0.12em; }

/* ---- Motion polish (Phosphor icon micro-interactions) ---- */
.btn svg, .form-submit svg, .division-link svg, .pm-cta a svg { transition: transform 0.25s var(--ease); }
.btn:hover svg, .form-submit:hover svg, .division-link:hover svg, .pm-cta a:hover svg { transform: translateX(3px); }
.industry-card__ic { transition: transform 0.3s var(--ease), border-color 0.3s var(--ease), background 0.3s var(--ease); }
.industry-card:hover .industry-card__ic { transform: translateY(-3px); border-color: rgba(0, 112, 217, 0.55); }
.industry-card:hover .industry-card__ic svg { transform: scale(1.1); }
.to-top svg { transition: transform 0.25s var(--ease); }
.to-top:hover svg { transform: translateY(-2px); }
@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1; transform: none; transition: none; }
  .btn svg, .form-submit svg, .industry-card__ic, .industry-card__ic svg, .to-top svg { transition: none; }
}

/* ---- Contact form consent line ---- */
.form-consent { display: flex; align-items: flex-start; gap: 10px; font-size: 12px; line-height: 1.55; color: var(--muted); margin: auto 0 0; cursor: pointer; }
.form-consent input[type="checkbox"] { flex-shrink: 0; width: 17px; height: 17px; margin: 1px 0 0; accent-color: #0070D9; cursor: pointer; }
.form-consent a { color: var(--blue); font-weight: 600; }
.form-consent a:hover { text-decoration: underline; }

/* ---- Footer legal links ---- */
.footer__legal { display: flex; align-items: center; gap: 8px; }
.footer__legal a { color: rgba(255, 255, 255, 0.6); transition: color 0.2s; }
.footer__legal a:hover { color: #fff; }
.footer__legal span { opacity: 0.4; }

/* ---- Legal pages (Privacy / Terms) ---- */
.legal { max-width: 840px; margin: 0 auto; }
.legal .updated { display: inline-block; font-size: 12.5px; color: var(--muted); border: 1px solid var(--line); border-radius: 8px; padding: 6px 12px; margin-bottom: 26px; }
.legal h2 { font-size: 20px; font-weight: 700; color: var(--ink); margin: 34px 0 12px; letter-spacing: -0.01em; }
.legal h2:first-of-type { margin-top: 0; }
.legal p { font-size: 15px; line-height: 1.72; color: var(--body); margin: 0 0 14px; }
.legal ul { margin: 0 0 16px; padding: 0; list-style: none; }
.legal li { position: relative; padding-left: 22px; font-size: 15px; line-height: 1.7; color: var(--body); margin-bottom: 7px; }
.legal li::before { content: ""; position: absolute; left: 3px; top: 10px; width: 6px; height: 6px; border-radius: 50%; background: #0070D9; }
.legal a { color: var(--blue); font-weight: 600; }
.legal a:hover { text-decoration: underline; }
.legal strong { color: var(--ink); font-weight: 600; }
.legal .legal-contact { margin-top: 10px; padding: 20px 22px; background: var(--bg-alt); border: 1px solid var(--line); border-radius: 14px; }
.legal .legal-contact p { margin: 3px 0; }
.legal .legal-note { margin-top: 28px; padding-top: 18px; border-top: 1px solid var(--line); font-size: 13px; color: var(--muted); }

/* ============================================================
   HOME VIDEO HERO — full-height, left-aligned, video background
   (scoped to .has-video-hero so only the homepage is affected)
   ============================================================ */
.has-video-hero .hero {
  min-height: 100vh; min-height: 100svh;
  margin-top: -74px;
  display: flex; align-items: center;
}
.hero__video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; filter: saturate(0.9) brightness(1.03); }
/* light wash so the hero reads like the contact hero (dark/navy text on a light bg) */
.hero__overlay {
  position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(180deg, rgba(238,243,249,0.78) 0%, rgba(238,243,249,0.66) 52%, rgba(238,243,249,0.82) 100%);
}
.has-video-hero .hero__inner { position: relative; z-index: 2; width: 100%; padding-top: 104px; padding-bottom: 64px; }
.has-video-hero .hero__copy { max-width: 720px; margin: 0 auto; text-align: center; }
.has-video-hero .h1 { color: var(--navy); }
.has-video-hero .grad-text { color: var(--navy); }
.has-video-hero .hero__lead { color: var(--body); margin-left: auto; margin-right: auto; }
.has-video-hero .hero__actions { justify-content: center; }

@media (max-width: 700px) {
  .has-video-hero .hero__inner { padding-top: 100px; padding-bottom: 52px; }
  .hero__overlay {
    background: linear-gradient(180deg, rgba(2,13,36,0.72) 0%, rgba(2,13,36,0.45) 38%, rgba(2,13,36,0.35) 64%, rgba(2,13,36,0.82) 100%);
  }
}

/* Center only the Associated Molding & Tooling section */
#molding-support .head { margin-left: auto; margin-right: auto; text-align: center; }
#molding-support .head .lead { margin-left: auto; margin-right: auto; }

/* ===== Contact page: full-bleed image hero with the nav floating over it (like the home hero) ===== */
.has-image-hero .page-hero {
  min-height: 100vh; min-height: 100svh;
  margin-top: -74px;
  display: flex; align-items: center;
  padding: 104px 28px 56px;
  overflow: hidden;
  background-color: var(--bg-alt);
}
.has-image-hero .page-hero .mask { display: none; }
.contact-page .page-hero h1 { color: var(--navy); }
.contact-page .page-hero .inner { position: relative; z-index: 2; max-width: 1200px; margin: 0 auto; padding-left: 28px; padding-right: 28px; text-align: center; }
.contact-page .page-hero p { margin-left: auto; margin-right: auto; }
.contact-page .hero-iso { justify-content: center; }
@media (max-width: 860px) {
  .has-image-hero .page-hero { background-size: 150%; background-position: top 84px right -25%; padding-top: 118px; }
}

/* ===== Contact page: two-column outro (text left, map right) ===== */
.contact-outro-wrap .map-label { justify-content: flex-start; margin: 0 0 22px; }
.contact-outro { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: stretch; }
.contact-outro .direct-card { text-align: left; max-width: none; margin: 0; padding: 0; background: transparent; border: 0; box-shadow: none; display: flex; flex-direction: column; justify-content: center; }
.contact-outro .direct-card > p { margin-left: 0; margin-right: 0; max-width: none; }
.contact-outro .direct-btns { justify-content: flex-start; }
.contact-outro .outro-map { display: flex; flex-direction: column; }
.contact-outro .map-label { justify-content: flex-start; }
.contact-outro .map-embed { flex: 1; height: auto; min-height: 340px; }
@media (max-width: 980px) { .contact-outro { grid-template-columns: 1fr; } .contact-outro .map-embed { min-height: 320px; } }

/* ===== Molding: Technical Capacity spec cards match the Capabilities cap-cards above ===== */
.spec-card { padding: 26px; transition: border-color 0.25s var(--ease), box-shadow 0.25s var(--ease), opacity 0.7s var(--ease), transform 0.7s var(--ease); }
.spec-card:hover { border-color: #CFE3F5; box-shadow: 0 14px 30px rgba(16, 40, 63, 0.07); }
.spec-card .card__num { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px; background: linear-gradient(135deg, #EAF4FC, #EAF4FC); color: var(--blue-2); margin-bottom: 18px; }
.spec-card .card__num svg { width: 22px; height: 22px; }
.spec-card .spec-card__k { font-size: 18px; font-weight: 700; letter-spacing: -0.015em; text-transform: none; color: var(--ink); margin-bottom: 8px; }
.spec-card .spec-card__v { font-size: 14.5px; color: var(--body-2); line-height: 1.6; }
[data-theme="dark"] .spec-card .card__num { background: linear-gradient(135deg, rgba(1, 41, 106, 0.22), rgba(79, 127, 159, 0.12)); }

/* ===== Hero text entrance animation (video heroes) — staggered rise + blur-to-sharp ===== */
@keyframes heroReveal {
  0% { opacity: 0; transform: translateY(34px); filter: blur(10px); }
  55% { filter: blur(0); }
  100% { opacity: 1; transform: translateY(0); filter: blur(0); }
}
.has-video-hero .hero__copy > * { opacity: 0; animation: heroReveal 1s var(--ease) both; }
.has-video-hero .hero__copy > .h1 { animation-delay: 0.15s; }
.has-video-hero .hero__copy > .hero__lead { animation-delay: 0.4s; }
.has-video-hero .hero__copy > .hero__actions { animation-delay: 0.65s; }
/* Contact page hero shares the same staggered entrance */
.contact-page .page-hero .inner > * { opacity: 0; animation: heroReveal 1s var(--ease) both; }
.contact-page .page-hero .inner > h1 { animation-delay: 0.1s; }
.contact-page .page-hero .inner > p { animation-delay: 0.3s; }
@media (prefers-reduced-motion: reduce) {
  .has-video-hero .hero__copy > *,
  .contact-page .page-hero .inner > * { animation: none; opacity: 1; }
}
/* Contact page: form + sections under the hero reveal with the same rise + blur as the hero */
.contact-page [data-reveal] { transform: translateY(34px); filter: blur(8px); transition: opacity 1s var(--ease), transform 1s var(--ease), filter 1s var(--ease); }
.contact-page [data-reveal].is-visible { transform: none; filter: none; }

/* Contact hero: three trust badges under the heading */
.hero-badges { display: flex; flex-wrap: wrap; justify-content: center; margin-top: 40px; }
.contact-page .page-hero .inner > .hero-badges { animation-delay: 0.5s; }
.hero-badge { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 11px; padding: 4px 30px; }
.hero-badge:not(:last-child) { border-right: 1px solid var(--line-2); }
.hero-badge__ic { width: 50px; height: 50px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: rgba(0, 112, 217, 0.09); color: var(--blue); flex: none; }
.hero-badge__ic svg { width: 24px; height: 24px; }
.hero-badge__t strong { display: block; font-size: 15px; font-weight: 700; color: var(--ink); letter-spacing: -0.01em; }
.hero-badge__t span { font-size: 12.5px; color: var(--muted); }
@media (max-width: 860px) {
  .hero-badges { gap: 18px 0; margin-top: 30px; }
  .hero-badge { padding: 4px 18px; }
}
@media (max-width: 480px) {
  .hero-badge:not(:last-child) { border-right: 0; }
  .hero-badge { padding: 4px 14px; }
}

/* ============================================================
   COLUMN THEME - institutional minimal restyle (per DESIGN.md)
   Cloud canvas / indigo navy / steel text / hairlines / 8px radii
   (additive override layer - delete this block, or git restore
   at checkpoint d99ce28, to fully revert)
   ============================================================ */

:root {
  /* remap Sartech tokens to the Column palette */
  --ink: #01296A;
  --body: #7c7f88;
  --body-2: #7c7f88;
  --label: #3b3e47;
  --muted: #7c7f88;
  --faint: #a9acb6;

  --navy: #01296A;
  --navy-deep: #011E4F;
  --blue: #01296A;
  --blue-2: #01296A;
  --cyan: #4F7F9F;
  --cyan-ink: #3D6480;
  --cyan-light: #D6E2EC;

  --bg: #ffffff;
  --bg-alt: #f6f6f8;
  --bg-soft: #f6f6f8;

  --line: #e3e4e8;
  --line-2: #e3e4e8;
  --line-soft: #ececef;
  --line-input: #e3e4e8;

  --chip: #f6f6f8;
  --chip-line: #e3e4e8;
  --chip-blue: #f6f6f8;
  --chip-blue-line: #e3e4e8;

  --grad-accent: linear-gradient(100deg, #01296A, #01296A);
  --grad-navy: linear-gradient(180deg, #011E4F, #011E4F);

  --font: "Plus Jakarta Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
}

body { font-feature-settings: "cv11"; }
::selection { background: rgba(0, 112, 217, 0.22); }

/* ---- type scale (Column: tight tracking at display sizes, w500/600) ---- */
.h1, .page-hero h1 { font-size: clamp(36px, 4.4vw, 56px); line-height: 1.06; font-weight: 600; letter-spacing: -0.03em; }
.h2 { font-size: clamp(30px, 3.3vw, 44px); line-height: 1.1; font-weight: 600; letter-spacing: -0.02em; }
.head .lead, .lead { font-size: 17px; line-height: 1.55; color: var(--body); }
.hero__lead { font-size: 18px; line-height: 1.5; color: var(--body); font-weight: 400; }
.page-hero p { font-size: 18px; color: var(--body); }
.grad-text, .page-hero h1 .accent { color: var(--ink); }

/* kicker labels removed */
.kicker { display: none; }

/* ---- header / nav ---- */
.header.is-scrolled { background: rgba(255, 255, 255, 0.92); box-shadow: 0 1px 0 var(--line); }
.nav { font-size: 14px; font-weight: 400; color: #10283F; gap: 28px; }
.nav a:hover, .nav a.is-active { color: var(--ink); }
.division-switch { font-size: 14px; font-weight: 400; color: #10283F; padding: 8px 10px; }
.division-switch:hover { color: var(--ink); background: transparent; }

/* ---- buttons (8px radius, 14px w500, Column shadow tokens) ---- */
.btn { font-weight: 500; }
.btn--primary { background: #0070D9; background-image: none; padding: 12px 20px; border-radius: 8px; font-size: 14px;
  box-shadow: rgba(16, 40, 63, 0.1) 0 1px 3px, rgba(16, 40, 63, 0.05) 0 1px 0, rgba(255,255,255,0.14) 0 1px 0 inset; }
.btn--primary:hover { transform: translateY(-1px); box-shadow: rgba(16, 40, 63, 0.05) 0 8px 16px, rgba(16, 40, 63, 0.05) 0 4px 8px; }
.btn--outline { padding: 12px 20px; border-radius: 8px; font-size: 14px; border: 1px solid #0070D9; color: #10283F; background: transparent; }
.btn--outline:hover { background: rgba(0, 112, 217, 0.04); border-color: #0070D9; }
.btn--sm { padding: 10px 16px; font-size: 13.5px; border-radius: 8px; }
.btn--light { border-radius: 8px; font-size: 14px; padding: 12px 20px; }
.header-actions .btn--primary { padding: 10px 16px; font-size: 14px; }
.btn svg { width: 15px; height: 15px; }

/* ---- hero: near-invisible video under cloud-canvas wash ---- */
.hero__video { filter: saturate(0.85) brightness(0.98); }
.hero__overlay {
  background:
    radial-gradient(120% 90% at 50% 46%, rgba(246,248,251,0.86) 0%, rgba(246,248,251,0.62) 46%, rgba(246,248,251,0.4) 100%),
    linear-gradient(180deg, rgba(246,248,251,0.5) 0%, rgba(246,248,251,0.28) 40%, rgba(246,248,251,0.62) 100%);
}
.has-video-hero .hero::after, .has-image-hero .page-hero::after { background: linear-gradient(180deg, rgba(255,255,255,0), var(--bg)); height: 90px; }
.has-video-hero .hero__copy { max-width: 780px; }
/* tighten the full-height hero so content sits closer to the next section */
.has-video-hero .hero { min-height: 76vh; min-height: 76svh; }
.has-video-hero .hero__inner { padding-top: 92px; padding-bottom: 32px; }
.has-image-hero .page-hero { min-height: 82vh; min-height: 82svh; }
#about.section { padding-top: 64px; }

/* section rhythm */
.section { padding: 96px 28px; }
.band { border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft); }
.head { margin-bottom: 48px; }

/* ---- cards: white, hairline + whisper shadow, 8px, 24px padding ---- */
.card, .cap-card, .product-card, .form-card, .industry-card {
  border-radius: 12px; border: none;
  box-shadow: rgba(18,22,30,0.024) 0 1px 4px, rgba(18,22,30,0.05) 0 1px 0, #E3EBF3 0 0 0 1px;
}
.card, .cap-card { padding: 24px; background: #fff; transition: box-shadow 0.25s var(--ease), transform 0.25s var(--ease); }
.card:hover, .cap-card:hover { box-shadow: rgba(16, 40, 63, 0.05) 0 8px 16px, rgba(16, 40, 63, 0.05) 0 4px 8px, #E3EBF3 0 0 0 1px; }
.card h3 { font-size: 18px; font-weight: 600; letter-spacing: -0.01em; }
.card p { font-size: 14.5px; line-height: 1.55; }
.cap-card h3 { font-size: 16px; font-weight: 600; letter-spacing: -0.01em; }
.cap-card p { font-size: 14px; }

/* icon / number chips: quiet canvas squares; numbers go mono-seafoam (data language) */
.card__num { color: #10283F; margin-bottom: 16px; }
.cap-card__ic { width: 38px; height: 38px; border-radius: 8px; background: #F7FAFD; border: 1px solid #E3EBF3;
  color: #0070D9; font-family: var(--font); font-size: 14px; font-weight: 600; letter-spacing: -0.01em; margin-bottom: 16px; }
.spec-card .card__num { width: 38px; height: 38px; border-radius: 8px; background: #F7FAFD; border: 1px solid #E3EBF3; color: #10283F; }
.spec-card .card__num svg { width: 20px; height: 20px; }
.spec-card .spec-card__k { font-size: 16px; font-weight: 600; }
.spec-card .spec-card__v { font-size: 14px; }

/* product cards */
.product-card { border-radius: 12px; background: #fff; }
.product-card h3 { font-size: 22px; font-weight: 600; letter-spacing: -0.015em; }
.spec-chips span { background: #F7FAFD; border-color: #E3EBF3; color: #10283F; border-radius: 6px; font-weight: 500; }

/* industries */
.industry-card { border-radius: 12px; padding: 28px 18px; gap: 14px; }
.industry-card:hover { border-color: transparent; transform: translateY(-3px);
  box-shadow: rgba(16, 40, 63, 0.05) 0 8px 16px, rgba(16, 40, 63, 0.05) 0 4px 8px, #E3EBF3 0 0 0 1px; }
.industry-card__ic { width: 44px; height: 44px; border-radius: 8px; background: #F7FAFD; border: 1px solid #E3EBF3; }
.industry-card__ic svg { width: 21px; height: 21px; color: #10283F; }
.industry-card span { font-size: 14.5px; font-weight: 500; color: #10283F; }

/* logo strip: bare canvas, grayscale steel */
.logos__band { background: transparent; border: none; padding: 12px 0; }
.logos--industries .logos__band { background: transparent; border: none; border-radius: 0; }
.logos__label { color: #8A96A3; font-size: 11px; letter-spacing: 0.16em; }
.logos__track { gap: 56px; }
.logos__track img { height: 30px; filter: none; opacity: 1; transition: transform 0.25s var(--ease); }
.logos__track img:hover { transform: scale(1.06); }

/* ---- process: dark panel -> light bordered panel, mono-seafoam step numbers ---- */
.process { background: #fff; color: var(--label); border-radius: 8px; padding: 48px;
  box-shadow: rgba(18,22,30,0.024) 0 1px 4px, rgba(18,22,30,0.05) 0 1px 0, #E3EBF3 0 0 0 1px; }
.process .kicker { color: var(--ink); }
.process h3 { color: var(--ink); font-size: clamp(26px, 2.6vw, 34px); font-weight: 600; letter-spacing: -0.02em; }
.process__sub { color: var(--body); }
.process-step { border-top: 1px solid #E3EBF3; }
.process-step__num { color: #0070D9; font-family: var(--font); font-size: 15px; font-weight: 600; letter-spacing: -0.01em; }
.process-step strong { color: var(--ink); font-size: 15.5px; font-weight: 600; }
.process-step p { color: var(--body); }

/* ---- quality: normal LIGHT section (only the CTA above the footer stays dark) ---- */
.quality-panel { background: transparent; border-radius: 0; padding: 0; overflow: visible; }
.quality-head .h2 { color: var(--ink); font-weight: 600; letter-spacing: -0.02em; }
.quality-head .sub { color: var(--body); }
.quality-head .lead { color: var(--body); }
.quality-badges strong { color: var(--ink); font-weight: 500; }
.quality-badges strong svg { color: var(--cyan-ink); }
.quality-item { background: #fff; border-radius: 8px; border: none;
  box-shadow: rgba(18,22,30,0.024) 0 1px 4px, rgba(18,22,30,0.05) 0 1px 0, #E3EBF3 0 0 0 1px;
  transition: box-shadow 0.25s var(--ease), transform 0.25s var(--ease); }
.quality-item:hover { transform: translateY(-3px); box-shadow: rgba(16, 40, 63, 0.06) 0 8px 16px, rgba(16, 40, 63, 0.05) 0 4px 8px, #E3EBF3 0 0 0 1px; }
.quality-item span { color: var(--ink); }
.quality-item p { color: var(--body); }
/* CTA (above footer) keeps the deep-navy inversion */
.cta { background: #10283F; border-radius: 8px; }
.cta h2 { font-weight: 600; letter-spacing: -0.02em; }
.info-card { border-radius: 8px; box-shadow: none; }
.info-card::before { background: linear-gradient(90deg, #0070D9, #0070D9); }

/* forms */
.form-card { padding: 24px; }
.field input, .field textarea, .field select { border-radius: 8px; border-color: #E3EBF3; }
.field input:focus, .field textarea:focus, .field select:focus { border-color: #0070D9; box-shadow: 0 0 0 3px rgba(16, 40, 63, 0.08); }
.form-submit { border-radius: 8px; background: #0070D9; font-size: 14px; font-weight: 500; }
.file-label { border-radius: 8px; }
.map-embed { border-radius: 8px; }
.map-label { color: #52606D; letter-spacing: 0.14em; font-size: 11px; }

/* contact hero badges: square chips, hairline dividers */
.hero-badge__ic { border-radius: 8px; background: #fff; border: 1px solid #E3EBF3; color: #10283F; box-shadow: rgba(18,22,30,0.04) 0 1px 3px; }
.hero-badge__t strong { font-size: 14px; font-weight: 600; color: var(--ink); }
.hero-badge__t span { color: #52606D; }
.hero-badge:not(:last-child) { border-right: 1px solid #E3EBF3; }

/* ---- footer: light canvas, steel links, hairline top ---- */
.footer { background: #F7FAFD; color: var(--label); border-top: 1px solid var(--line); }
.footer__brand { content: url("sartech-logo.svg?v=1"); }
.footer__about p { color: #52606D; }
.footer__iso { color: #0070D9; font-weight: 500; }
.footer__col h3 { color: #8A96A3; font-weight: 500; font-size: 12px; letter-spacing: 0.12em; }
.footer__col > div, .footer__links { color: #10283F; font-size: 14px; }
.footer__links a:hover { color: #10283F; }
.footer__links p { color: #52606D; }
.division-link { border: 1px solid #0070D9; border-radius: 8px; background: transparent; color: #10283F; font-weight: 500; font-size: 13.5px; }
.division-link:hover { background: rgba(0, 112, 217, 0.04); border-color: #0070D9; }
.footer__bottom { border-top: 1px solid #E3EBF3; color: #8A96A3; }
.footer__bottom p:last-child { font-weight: 500; color: #52606D; }
.footer__legal a { color: #52606D; }
.footer__legal a:hover { color: #10283F; }
.footer__legal span { opacity: 1; color: #cbcccf; }

/* progress bar + floating buttons */
.progress span { background: linear-gradient(90deg, #0070D9, #0070D9); }
.to-top { border-color: #E3EBF3; border-radius: 8px; box-shadow: rgba(16, 40, 63, 0.05) 0 8px 16px, rgba(16, 40, 63, 0.05) 0 4px 8px; }

/* contact outro */
.direct-card h2 { font-weight: 600; letter-spacing: -0.02em; }
.contact-outro .map-label { color: #52606D; }

/* page-hero (contact) mask grid: quieter */
.page-hero .mask { opacity: 0.35; }

/* reveal: smaller, calmer */
[data-reveal] { transform: translateY(18px); }
.contact-page [data-reveal] { transform: translateY(18px); filter: blur(4px); }

/* drawer */
.drawer a { font-weight: 500; font-size: 16px; }
.drawer__cta { border-radius: 8px; }
.drawer__division { color: #10283F; font-weight: 500; }

/* ============================================================
   HERO MATCH — replicate the live deployed dark video hero
   (height/colors/overlay/gap exactly as sartech-website.vercel.app)
   ============================================================ */
.has-video-hero .hero { min-height: 100vh; min-height: 100svh; margin-top: -80px; }
.has-image-hero .page-hero { margin-top: -80px; }
.has-video-hero .hero__inner { padding-top: 110px; padding-bottom: 64px; }
.hero__video { filter: saturate(0.9) brightness(0.9); }
.hero__overlay {
  background:
    linear-gradient(90deg, rgba(2,13,36,0.9) 0%, rgba(2,13,36,0.6) 44%, rgba(2,13,36,0.22) 100%),
    linear-gradient(180deg, rgba(2,13,36,0.6) 0%, rgba(2,13,36,0) 26%, rgba(2,13,36,0) 60%, rgba(2,13,36,0.7) 100%);
}
.has-video-hero .h1 { color: #fff; font-size: clamp(38px, 4.6vw, 62px); line-height: 1.03; letter-spacing: -0.035em; font-weight: 800; }
.has-video-hero .grad-text { color: #EAF4FC; }
.has-video-hero .hero__lead { color: rgba(255,255,255,0.85); }
.has-video-hero .btn--outline { background: rgba(255,255,255,0.06); color: #fff; border-color: rgba(255,255,255,0.38); }
.has-video-hero .btn--outline:hover { border-color: #fff; background: rgba(255,255,255,0.14); }
.has-video-hero .hero::after { display: none; }
#about.section { padding-top: 104px; }

/* header floating over the dark hero: white nav + light logo (until scrolled) */
.has-video-hero .header:not(.is-scrolled) .nav { color: rgba(255,255,255,0.82); }
.has-video-hero .header:not(.is-scrolled) .nav a:hover,
.has-video-hero .header:not(.is-scrolled) .nav a.is-active { color: #fff; }
.has-video-hero .header:not(.is-scrolled) .division-switch { color: #fff; }
.has-video-hero .header:not(.is-scrolled) .division-switch:hover { background: transparent; color: #fff; }
.has-video-hero .header:not(.is-scrolled) .menu-btn { background: rgba(255,255,255,0.12); border-color: rgba(255,255,255,0.3); }
.has-video-hero .header:not(.is-scrolled) .menu-btn svg { color: #fff; }
/* no backdrop blur while the header floats over the hero */
.has-video-hero .header:not(.is-scrolled),
.has-image-hero .header:not(.is-scrolled) { -webkit-backdrop-filter: none; backdrop-filter: none; }

/* ============================================================
   HOME HERO -> match the CONTACT hero (light bg, navy text)
   (overrides the dark hero-match block above; delete to revert)
   ============================================================ */
/* light wash over the photo so navy text reads (like the contact hero) */
.hero__video { filter: saturate(0.85) brightness(1.04); }
.hero__overlay {
  background:
    radial-gradient(120% 95% at 50% 46%, rgba(246,248,251,0.9) 0%, rgba(246,248,251,0.76) 46%, rgba(246,248,251,0.58) 100%),
    linear-gradient(180deg, rgba(246,248,251,0.62) 0%, rgba(246,248,251,0.46) 42%, rgba(246,248,251,0.72) 100%);
}
/* heading + accent navy, subhead steel — same type as the contact hero */
.has-video-hero .h1 { color: var(--navy); font-size: clamp(36px, 4.4vw, 56px); line-height: 1.06; letter-spacing: -0.03em; font-weight: 600; }
.has-video-hero .grad-text { color: var(--navy); }
.has-video-hero .hero__lead { color: var(--body); font-size: 18px; }
.has-video-hero .btn--outline { background: transparent; color: #10283F; border-color: #0070D9; }
.has-video-hero .btn--outline:hover { background: rgba(0, 112, 217, 0.04); border-color: #0070D9; }
/* header over the LIGHT hero: dark nav + dark logo (revert the white treatment) */
.has-video-hero .header:not(.is-scrolled) .nav { color: #10283F; }
.has-video-hero .header:not(.is-scrolled) .nav a:hover,
.has-video-hero .header:not(.is-scrolled) .nav a.is-active { color: var(--navy); }
.has-video-hero .header:not(.is-scrolled) .brand img { content: normal; }
.has-video-hero .header:not(.is-scrolled) .division-switch { color: #10283F; }
.has-video-hero .header:not(.is-scrolled) .division-switch:hover { color: var(--navy); }
.has-video-hero .header:not(.is-scrolled) .menu-btn { background: #F7FAFD; border-color: #E4E9F2; }
.has-video-hero .header:not(.is-scrolled) .menu-btn svg { color: #10283F; }

/* ============================================================
   SPLIT HERO (Stripe / Mercury style) — text on a clean panel,
   photo crisp on the right with no wash. Home page only.
   ============================================================ */
.hero--split {
  /* share the landing viewport with the clients carousel below it:
     header (~76px) + hero + clients band (~174px) = 100svh, so both
     the hero and the carousel are visible on load */
  min-height: calc(100svh - 76px - 174px);
  margin-top: 0; overflow: visible; background: var(--bg-alt);
  display: flex; align-items: center;
}
.hero--split .hero__inner {
  width: 100%; max-width: var(--max); margin: 0 auto;
  padding: 48px 28px;
  display: grid; grid-template-columns: 1.02fr 0.98fr; gap: 56px; align-items: center;
}
.hero--split .hero__copy { max-width: 560px; margin: 0; text-align: left; }
.hero--split .h1 {
  color: var(--navy); font-size: clamp(34px, 3.5vw, 50px);
  line-height: 1.08; letter-spacing: -0.02em; font-weight: 600;
}
.hero--split .grad-text { color: var(--navy); }
.hero--split .hero__lead { color: var(--body); font-size: 18px; line-height: 1.55; margin: 22px 0 0; max-width: 520px; }
.hero--split .hero__actions { justify-content: flex-start; margin-top: 32px; }
.hero--split .hero__media { position: relative; }
/* auto-rotating photo gallery inside the hero card (cross-fade + slow zoom) */
.hero-gallery {
  position: relative; width: 100%; aspect-ratio: 3 / 2; overflow: hidden;
  border-radius: 12px;
  box-shadow:
    rgba(0,0,0,0.02) 0 40px 32px, rgba(0,0,0,0.03) 0 22px 18px,
    rgba(0,0,0,0.03) 0 12px 10px, rgba(0,0,0,0.04) 0 7px 5px, rgba(0,0,0,0.07) 0 3px 2px;
}
.hero-gallery__slide {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  opacity: 0; transform: scale(1.06);
  transition: opacity 1s ease;
  will-change: opacity, transform;
}
.hero-gallery__slide.is-active {
  opacity: 1; transform: scale(1);
  transition: opacity 1s ease, transform 6s ease-out;
}
.hero-gallery__dots {
  position: absolute; left: 0; right: 0; bottom: 12px; z-index: 2;
  display: flex; justify-content: center; gap: 7px;
}
.hero-gallery__dot {
  width: 7px; height: 7px; padding: 0; border: none; border-radius: 50%;
  background: rgba(255,255,255,0.55); cursor: pointer;
  transition: background 0.3s, width 0.3s;
}
.hero-gallery__dot:hover { background: rgba(255,255,255,0.85); }
.hero-gallery__dot.is-active { width: 18px; border-radius: 4px; background: #fff; }
@media (prefers-reduced-motion: reduce) {
  .hero-gallery__slide,
  .hero-gallery__slide.is-active { transition: opacity 0.4s ease; transform: none; }
}
/* the split hero is a normal light section — About sits right below it */
.has-split-hero #about.section { padding-top: 88px; }
@media (max-width: 900px) {
  .hero--split { min-height: auto; display: block; }
  .hero--split .hero__inner { grid-template-columns: 1fr; gap: 30px; padding: 56px 20px 64px; }
  .hero--split .hero__copy { max-width: none; }
  .hero-gallery { aspect-ratio: 16 / 11; }
}

/* ============================================================
   MODERN LAYOUT PASS — stats band + asymmetric About
   Breaks the repeated "centered header + card grid" rhythm.
   Additive & self-contained; delete this block to revert.
   ============================================================ */

/* -- Stats band (sits right below the hero) -- */
/* stats strip shares the hero's light background and sits under it */
.stats-band { background: var(--bg-alt); }
.stats-band__inner {
  max-width: 980px; margin: 0 auto; padding: 4px 28px 12px;
  display: grid; grid-template-columns: repeat(4, 1fr); align-items: center;
}
.stat { position: relative; text-align: center; padding: 10px 20px; }
.stat + .stat::before {
  content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 1px; height: 44px; background: var(--line);
}
.stat__num {
  font-size: 44px; font-weight: 700; line-height: 1;
  letter-spacing: -0.025em; color: var(--navy);
}
.stat__num span {
  font-size: 0.42em; font-weight: 600; color: var(--cyan-ink);
  margin-left: 3px; letter-spacing: 0;
}
.stat__label { margin-top: 9px; font-size: 12.5px; line-height: 1.35; color: var(--body); }
@media (max-width: 760px) {
  .stats-band__inner { grid-template-columns: repeat(2, 1fr); gap: 0; padding: 6px 16px; }
  .stat + .stat::before { display: none; }
  .stat { padding: 22px 12px; }
  .stat:nth-child(odd) { border-right: 1px solid var(--line); }
  .stat:nth-child(n+3) { border-top: 1px solid var(--line); }
  .stat__num { font-size: 30px; }
}

/* -- Asymmetric About: intro on the left, values stacked on the right -- */
.about-layout {
  display: grid; grid-template-columns: 0.92fr 1.08fr; gap: 60px; align-items: center;
}
.about-intro { text-align: left; }
.section-eyebrow {
  display: block; margin: 0 0 14px;
  font-size: 13px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--cyan-ink);
}
.about-intro .h2 { text-align: left; margin: 0; max-width: none; }
.about-intro .lead { text-align: left; margin: 20px 0 0; max-width: 470px; }
.about-values { display: grid; gap: 16px; }
.about-value {
  display: grid; grid-template-columns: auto 1fr; gap: 18px; align-items: start;
  padding: 22px 24px; background: var(--bg);
  border: 1px solid var(--line); border-radius: 12px;
  transition: border-color 0.25s, box-shadow 0.25s, transform 0.25s;
}
.about-value:hover {
  border-color: #cfd9ea;
  box-shadow: 0 12px 30px rgba(16, 40, 63, 0.06);
  transform: translateY(-2px);
}
.about-value__ic {
  width: 28px; height: 28px; flex: none; margin-top: 2px;
  display: grid; place-items: center;
  color: var(--cyan-ink); background: none;
}
.about-value__ic svg { width: 28px; height: 28px; }
.about-value h3 { margin: 2px 0 6px; font-size: 17px; }
.about-value p { margin: 0; }
@media (max-width: 900px) {
  .about-layout { grid-template-columns: 1fr; gap: 30px; }
  .about-intro .lead { max-width: none; }
}

/* -- Clients carousel band (moved up to sit under the hero) -- */
.clients-band { background: var(--bg); border-bottom: 1px solid var(--line); }
.clients-band__inner { max-width: var(--max); margin: 0 auto; padding: 0 28px; }
.clients-band .logos--industries { padding: 38px 0; }
@media (max-width: 760px) {
  .clients-band__inner { padding: 0 20px; }
  .clients-band .logos--industries { padding: 30px 0; }
}

/* molding hero: a little shorter than the shared split hero */
.hero--split.hero--compact { min-height: calc(100svh - 76px - 270px); }

/* industry cards used as page links (home teaser) */
a.industry-card { text-decoration: none; color: inherit; }

/* centered primary nav: logo | nav (centered) | actions */
.headerbar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; }
.headerbar .nav { margin: 0; justify-self: center; }
.headerbar .header-actions { justify-self: end; }
@media (max-width: 980px) {
  /* nav is hidden here, so drop the centre column: logo left, menu button right */
  .headerbar { grid-template-columns: 1fr auto; }
}

/* capability / option numbers: plain text, no box */
.cap-card__ic { width: auto; height: auto; background: none; border: none; border-radius: 0; padding: 0; display: block; font-size: 15px; line-height: 1; margin-bottom: 14px; }

/* About value cards: soft shadow instead of a visible border (Polaris-style) */
.about-value {
  border-color: rgba(16, 40, 63, 0.05); border-radius: 16px; background: #fff;
  box-shadow: rgba(16, 40, 63, 0.08) 0 15px 35px;
}
.about-value:hover {
  border-color: rgba(16, 40, 63, 0.05);
  box-shadow: rgba(16, 40, 63, 0.12) 0 18px 40px;
}

/* all cards: soft shadow instead of hairline border (Polaris-style) */
.card, .cap-card, .product-card, .form-card, .industry-card, .quality-item, .spec-card, .process {
  border: 1px solid rgba(16, 40, 63, 0.05); border-radius: 16px; background: #fff;
  box-shadow: rgba(16, 40, 63, 0.08) 0 15px 35px;
}
.card:hover, .cap-card:hover, .industry-card:hover, .quality-item:hover, .spec-card:hover {
  border-color: rgba(16, 40, 63, 0.05);
  box-shadow: rgba(16, 40, 63, 0.12) 0 18px 40px;
}

/* spec chips: flat tint, no border */
.spec-chips span { border: none; background: #f1f4f9; }

/* industry card icons: bare icon, no box */
.industry-card__ic { background: none; border: none; width: auto; height: auto; border-radius: 0; }
.industry-card__ic svg { width: 28px; height: 28px; }
.industry-card:hover .industry-card__ic { border-color: transparent; }

/* borderless secondary button (trial on the capabilities teaser) */
.btn--soft, .btn--soft:hover { border-color: transparent; background: #EAF4FC; color: var(--navy); }
.btn--soft:hover { background: #e3e9f3; }

/* secondary buttons: borderless soft tint; subtle hover (no cyan outline) */
.btn--outline { border-color: transparent; background: #EAF4FC; color: var(--navy); box-shadow: none; }
.btn--outline:hover, .btn--outline:focus-visible {
  border-color: transparent; background: #e3e9f3; color: var(--navy);
  transform: translateY(-1px); box-shadow: rgba(16, 40, 63, 0.08) 0 6px 14px;
}

/* focus ring: subtle navy halo instead of the cyan outline */
a:focus-visible, button:focus-visible, .btn:focus-visible {
  outline: none; box-shadow: 0 0 0 3px rgba(16, 40, 63, 0.16);
}
.btn--primary:focus-visible { box-shadow: 0 0 0 3px rgba(16, 40, 63, 0.28); }

/* ONE hover effect for every card — same as the About value cards */
.card, .cap-card, .product-card, .industry-card, .quality-item, .spec-card, .about-value {
  transition: transform 0.25s var(--ease), box-shadow 0.25s var(--ease);
}
.card:hover, .cap-card:hover, .product-card:hover, .industry-card:hover, .quality-item:hover, .spec-card:hover, .about-value:hover {
  transform: translateY(-2px);
  border-color: rgba(16, 40, 63, 0.05);
  box-shadow: rgba(16, 40, 63, 0.12) 0 18px 40px;
}
/* no secondary icon animation on hover — keep the single lift effect */
.industry-card:hover .industry-card__ic, .industry-card:hover .industry-card__ic svg { transform: none; }

/* remaining cyan interaction effects -> same navy treatment */
.to-top:hover { border-color: transparent; box-shadow: rgba(16, 40, 63, 0.12) 0 18px 40px; }
.field input:focus, .field textarea:focus, .field select:focus,
.form-card .field input:focus, .form-card .field select:focus, .form-card .field textarea:focus {
  border-color: rgba(0, 112, 217, 0.35); box-shadow: 0 0 0 3px rgba(16, 40, 63, 0.10);
}
.form-card .field .file-label:hover { border-color: rgba(0, 112, 217, 0.35); }

/* static (non-clickable) industry cards on the home teaser: hover lift only */
.industry-card--static { cursor: default; }

/* hover = lift only; no extra/darker shadow on anything */
.card:hover, .cap-card:hover, .product-card:hover, .industry-card:hover, .quality-item:hover, .spec-card:hover, .about-value:hover {
  box-shadow: rgba(16, 40, 63, 0.08) 0 15px 35px; /* unchanged from rest state */
}
.btn--primary:hover, .btn--outline:hover, .btn--outline:focus-visible, .btn--light:hover, .to-top:hover, .btn-call:hover {
  box-shadow: none;
}

/* About certifications: no cards below the badges, so drop the heading's grid margin */
#certifications .quality-head { margin-bottom: 0; }

/* process steps: no divider lines */
.process-step { border-top: none; padding-top: 0; }

/* contact info card: no top accent line, bare icons (no squares) */
.info-card::before { display: none; }

.ir-ic svg { width: 20px; height: 20px; }

/* --- accessibility & copy polish --- */
/* softer confidentiality note: no outline */
.info-note { border: none; background: rgba(255, 255, 255, 0.07); }
/* darker body/muted greys for WCAG AA contrast on white (#555b66 ~ 6.7:1) */
:root { --body: #555b66; --body-2: #555b66; --muted: #5f6570; }
/* keyboard skip link: hidden until focused */
.skip-link { position: absolute; left: 16px; top: -64px; z-index: 1000; background: #0070D9; color: #fff; padding: 10px 14px; border-radius: 8px; font-weight: 600; font-size: 14px; transition: top 0.2s; }
.skip-link:focus { top: 16px; outline: none; box-shadow: 0 0 0 3px rgba(16, 40, 63, 0.28); }

/* confidentiality note: fully flat (no box) */
.info-note { background: none; padding: 0; }
/* contact hero badge icons: bare icons, no circles */
.hero-badge__ic { background: none; border: none; box-shadow: none; width: auto; height: auto; border-radius: 0; }
.hero-badge__ic svg { width: 26px; height: 26px; }

/* contact info rows: no divider lines */
.info-row { border-top: none; }

/* secondary buttons: plain text links — dark by default, blue on hover, no box */
.btn--outline, .btn--outline:hover, .btn--outline:focus-visible {
  background: none; border: none; box-shadow: none; transform: none; padding-left: 4px; padding-right: 4px;
}
.btn--outline { color: #10283F; font-weight: 600; transition: color 0.2s var(--ease); }
.btn--outline:hover, .btn--outline:focus-visible { color: #10283F; }

/* ============================================================
   ACCESSIBILITY LAYER — WCAG 2.2 AA contrast, focus, targets
   ============================================================ */
/* --- text contrast --- */
:root { --faint: #6b707b; --muted: #555b66; }
.logos__label { color: #52606D; }
.eyebrow2 { color: #52606D; }
.map-label, .contact-outro .map-label, .hero-badge__t span, .legal .updated { color: #52606D; }
.footer-title, .footer__col h3 { display: block; font-size: 12px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: #10283F; margin-bottom: 16px; }
.footer__about p, .footer__col > div, .footer__links, .footer__links p { color: #52606D; }
.footer__links a { color: #52606D; }
.footer__links a:hover, .footer__links a:focus-visible { color: #10283F; }
.footer__bottom, .footer__bottom p:last-child, .footer__legal a { color: #52606D; }
.footer__legal a:hover, .footer__legal a:focus-visible { color: #10283F; }

/* --- form boundaries (3:1 non-text contrast) --- */
.field input, .field textarea, .field select,
.form-card .field input, .form-card .field select, .form-card .field textarea,
.file-label { border-color: #8A96A3; }
.field input:hover, .field textarea:hover, .field select:hover,
.form-card .field input:hover, .form-card .field select:hover, .form-card .field textarea:hover,
.file-label:hover { border-color: #52606D; }
.field input:focus, .field textarea:focus, .field select:focus,
.form-card .field input:focus, .form-card .field select:focus, .form-card .field textarea:focus {
  border-color: #0070D9; box-shadow: none;
}
.form-hint { font-size: 12.5px; line-height: 1.5; color: #52606D; margin: 6px 0 0; }
form > .form-hint:first-child { margin: 0 0 14px; }
.form-error { display: flex; gap: 6px; align-items: flex-start; font-size: 12.5px; line-height: 1.5; color: #b42318; font-weight: 600; margin-top: 6px; }
.form-error::before { content: "\26A0"; flex: none; }
.field.has-error input, .field.has-error select, .field.has-error textarea,
.form-card .field.has-error input, .form-card .field.has-error select, .form-card .field.has-error textarea { border-color: #b42318; border-width: 2px; }
.form-consent.has-error { outline: 2px solid #b42318; outline-offset: 6px; border-radius: 4px; }
.form-status, .form-alert { display: none; font-size: 14px; line-height: 1.55; padding: 12px 14px; border-radius: 8px; margin-top: 14px; }
.form-status:not(:empty) { display: block; background: #EAF4FC; color: #10283F; }
.form-alert:not(:empty) { display: block; background: #fdecea; color: #8a1c12; border: 1px solid #b42318; }
.form-consent input[type="checkbox"] { width: 22px; height: 22px; accent-color: #0070D9; }
.form-consent { min-height: 44px; align-items: center; }
.file-label { min-height: 44px; }
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

.form-consent input[type="checkbox"]:focus-visible { box-shadow: 0 0 0 2px #ffffff, 0 0 0 5px #0070D9 !important; }
.file-label:focus-within { border-color: #0070D9; box-shadow: 0 0 0 3px #ffffff, 0 0 0 6px #0070D9; }
@media (forced-colors: active) { a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline-color: Highlight; } }

/* --- active page: colour + underline + weight (not colour alone) --- */
.nav a.is-active, .drawer a.is-active {
  font-weight: 700; text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 6px; text-decoration-color: #10283F;
}

/* --- interactive target sizes (>= 44px) --- */
.menu-btn { min-width: 44px; min-height: 44px; }
.modal__close { width: 44px; height: 44px; }
.to-top { min-width: 44px; min-height: 44px; }
.hero-gallery__dot { position: relative; }
.hero-gallery__dot::before { content: ""; position: absolute; left: 50%; top: 50%; width: 44px; height: 44px; transform: translate(-50%, -50%); }
.hero-gallery__dots { bottom: 14px; align-items: center; gap: 10px; }
.hero-gallery__pause {
  position: absolute; right: 12px; bottom: 10px; z-index: 3; width: 44px; height: 44px; border-radius: 50%;
  border: 0; background: rgba(0, 30, 77, 0.72); color: #fff; cursor: pointer; display: grid; place-items: center;
}
.hero-gallery__pause:hover { background: rgba(0, 30, 77, 0.9); }
.hero-gallery__pause svg { width: 16px; height: 16px; }
/* headings promoted for hierarchy keep their original styling */
.process h2 { font-size: clamp(26px, 2.6vw, 34px); font-weight: 600; letter-spacing: -0.02em; margin-bottom: 8px; color: var(--ink); }
.product-card h2 { font-size: 22px; font-weight: 600; letter-spacing: -0.015em; margin-bottom: 10px; }
.info-card h2 { font-size: 21px; font-weight: 700; margin-bottom: 10px; letter-spacing: -0.3px; color: #fff; }
.form-success h2 { font-size: 21px; font-weight: 700; color: var(--ink); margin-bottom: 10px; }
main:focus { outline: none; }

/* placeholder text: comfortably above 4.5:1 on white */
::placeholder { color: #52606D; opacity: 1; }
.field input::placeholder, .field textarea::placeholder, .form-card .field input::placeholder, .form-card .field textarea::placeholder { color: #52606D; opacity: 1; }

/* ============================================================
   IMAGE QUALITY & CLIENT-LOGO STANDARDISATION LAYER
   Additive override layer — appended per project convention.
   ============================================================ */

/* hero slides: intentional framing per photograph.
   When the high-res hero-cleanroom.webp / hero-assembly.webp files arrive,
   only the <img src> values in index.html (and the preload href) change —
   these rules and the layout stay as-is. */
.hero-gallery__slide--cleanroom { object-position: center 45%; }
.hero-gallery__slide--assembly { object-position: center; }

/* --- standard client-logo slot: 160x64, artwork max 140x38, contained --- */
.logos__track, [data-theme="dark"] .logos__track { gap: 0; }
.client-logo {
  width: 160px; height: 64px; flex: 0 0 160px; margin: 0 24px;
  display: flex; align-items: center; justify-content: center;
}
.logos__track .client-logo img {
  display: block; width: auto; height: auto;
  max-width: 140px; max-height: 38px; object-fit: contain;
  flex: none; transition: transform 0.25s var(--ease);
}
.logos__track .client-logo img:hover { transform: scale(1.06); }
/* documented per-logo modifier for visually unbalanced marks (none needed yet):
   .client-logo--wide img { max-height: 30px; } */

/* narrower edge fade so fully visible logos stay readable */
.logos__viewport {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 48px, #000 calc(100% - 48px), transparent);
  mask-image: linear-gradient(90deg, transparent, #000 48px, #000 calc(100% - 48px), transparent);
}

/* pause the marquee on hover (existing) and on keyboard focus inside the section */
.logos:focus-within .logos__track { animation-play-state: paused; }

/* reduced motion: no marquee — clean centred wrapping row, duplicates hidden */
@media (prefers-reduced-motion: reduce) {
  .logos__track { animation: none; width: auto; flex-wrap: wrap; justify-content: center; row-gap: 10px; }
  .logos__viewport { -webkit-mask-image: none; mask-image: none; }
  .client-logo[aria-hidden="true"] { display: none; }
}

/* mobile: 132x56 slots, artwork max 116x34 */
@media (max-width: 640px) {
  .client-logo { width: 132px; height: 56px; flex: 0 0 132px; margin: 0 14px; }
  .logos__track .client-logo img { max-width: 116px; max-height: 34px; }
}

/* ============================================================
   COLOUR SYSTEM — monocolour navy logo alignment
   Central tokens. --color-* is the source of truth; the older
   --navy/--cyan names are kept as aliases so existing rules keep
   working. Appended per project convention (later rules win).
   ============================================================ */
:root {
  /* brand */
  --color-primary: #01296A;          /* exact navy sampled from the approved logo */
  --color-primary-hover: #011E4F;    /* darker navy for hover/pressed */
  --color-primary-soft: #EEF2F8;    /* very light navy tint */

  /* muted steel accent — max ~5% of the interface */
  --color-accent: #4F7F9F;          /* non-text use only (4.31:1 on white) */
  --color-accent-ink: #3D6480;  /* small text / icons (6.30:1 on white) */
  --color-accent-soft: #EAF1F5;

  /* neutrals */
  --color-background: #FFFFFF;
  --color-background-soft: #F7F8FA;
  --color-surface: #FFFFFF;
  --color-text: #202833;
  --color-text-muted: #65717D;
  --color-border: #DCE3E8;
  --color-white: #FFFFFF;

  /* legacy aliases -> new system (keeps every existing rule valid) */
  --navy: var(--color-primary);
  --navy-deep: var(--color-primary-hover);
  --blue: var(--color-primary);
  --blue-2: var(--color-primary);
  --cyan: var(--color-accent);
  --cyan-ink: var(--color-accent-ink);
  --cyan-light: #D6E2EC;
  --ink: var(--color-text);
  --grad-accent: linear-gradient(100deg, var(--color-primary), var(--color-primary));
}

/* primary buttons: solid navy, darker navy on hover, no glow */
.btn--primary { background: #0070D9; color: var(--color-white); }
.btn--primary:hover { background: #0051A9; }

/* secondary buttons keep their locked plain-text treatment (dark -> navy on
   hover, no box). Only the hover colour is sourced from the new navy, which
   the rules above already carry — nothing to override here. */

/* active navigation indicator: navy (underline + weight already carry it) */
.nav a.is-active, .drawer a.is-active { color: var(--color-primary); text-decoration-color: var(--color-primary); }
.nav a:hover { color: var(--color-primary); }

/* small uppercase section labels: muted steel that still passes 4.5:1 */
.kicker, .eyebrow2, .section-eyebrow, .map-label, .spec-card__k, .in-t, .footer__iso { color: var(--color-accent-ink); }
.eyebrow2 span, .map-label .bar { background: var(--color-accent); }

/* decorative dot: steel, subtle navy ring instead of a cyan glow */
.pill i { background: var(--color-accent); box-shadow: 0 0 0 4px rgba(16, 40, 63, 0.10); }

/* icon tiles / notes: soft steel wash, steel border */
.industry-card__ic, .spec-card .card__num { background: var(--color-accent-soft); border-color: var(--color-border); }
.info-note { background: var(--color-accent-soft); border-color: #CFE3F5; }
.fs-ic { background: var(--color-primary-soft); color: var(--color-primary); }

/* links: navy, steel underline on hover */
.form-consent a, .legal a { color: var(--color-primary); }
.form-consent a:hover, .legal a:hover { text-decoration-color: var(--color-accent); }

/* --- main headings in primary navy (dark-background heroes keep their
       white/inverted treatment via higher-specificity rules above) --- */
.h1, .h2, .page-hero h1, .grad-text, .page-hero h1 .accent,
.quality-head .h2, .process h2, .product-card h2, .form-success h2 { color: var(--color-primary); }
.legal h2, .direct-card h2 { color: var(--color-primary); }
/* card / sub headings in primary navy (none sit on dark panels) */
.card h3, .cap-card h3, .product-card h3, .contact-aside h3, .about-value h3,
.process h3, .pm-header h3, .form-success h3, .industry-card h3, main h3, main h4 { color: var(--color-primary); }

/* .info-note sits inside the dark navy .info-card — keep it a translucent
   light panel, not the light steel wash used on white sections */
.info-note { background: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.18); }
.in-t { color: #EAF4FC; }
/* confidentiality note: no box — sits directly on the card background */
.info-note { background: none; border: none; border-radius: 0; box-shadow: none; }
/* title-like elements that aren't heading tags (card/step titles) */
.quality-item span, .process-step strong, .hero-badge__t strong { color: var(--color-primary); }

/* ============================================================
   PRODUCT DETAIL PAGES (/products/<slug>)
   Reuses the existing tokens, cards, buttons and spacing system.
   ============================================================ */
.pdp-hero-wrap { padding-bottom: 56px; }

.pdp-hero { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
.pdp-hero__copy .kicker { margin-bottom: 12px; }
.pdp-hero__copy .h1 { margin: 0; }
.pdp-hero__copy .lead { font-size: 17px; color: var(--body); margin: 18px 0 0; max-width: 520px; }
.pdp-hero .hero__actions { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; margin-top: 30px; }

.pdp-figure { margin: 0; aspect-ratio: 16 / 10; background: var(--color-primary-soft);
  border: 1px solid var(--color-border); border-radius: 16px; padding: 30px; display: grid; place-items: center; }
.pdp-figure img { width: 100%; height: 100%; object-fit: contain; display: block; }

.pdp-subnav { border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); background: var(--color-surface); }
.pdp-subnav__inner { max-width: var(--max); margin: 0 auto; padding: 0 28px; display: flex; gap: 28px;
  overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; }
.pdp-subnav__inner::-webkit-scrollbar { display: none; }
.pdp-subnav a { flex: none; white-space: nowrap; padding: 15px 2px; font-size: 13.5px; font-weight: 600;
  color: var(--color-text-muted); border-bottom: 2px solid transparent; transition: color .2s, border-color .2s; }
.pdp-subnav a:hover { color: var(--color-primary); border-bottom-color: var(--color-accent); }
@media (min-width: 901px) { .pdp-subnav { position: sticky; top: 76px; z-index: 40; } }

.pdp-section { scroll-margin-top: 150px; }
@media (max-width: 900px) { .pdp-section { scroll-margin-top: 96px; } }
.pdp-page .head--narrow { margin-bottom: 34px; }
.pdp-prose { max-width: 760px; margin: 0 auto; }
.pdp-prose p { font-size: 16.5px; line-height: 1.7; color: var(--body); margin-bottom: 16px; }
.pdp-prose p:last-child { margin-bottom: 0; }

.pdp-feature-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px 34px; }
.pdp-feature { display: flex; gap: 12px; align-items: flex-start; font-size: 15.5px; line-height: 1.5; color: var(--color-text); }
.pdp-feature svg { width: 17px; height: 17px; flex: none; margin-top: 3px; color: var(--color-accent); }

.pdp-table-wrap { max-width: 860px; margin: 0 auto; }
.spec-table { width: 100%; border-collapse: collapse; font-size: 15px; }
.spec-table th, .spec-table td { text-align: left; padding: 15px 18px; border-bottom: 1px solid var(--color-border); vertical-align: top; }
.spec-table thead th { font-size: 11.5px; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--color-accent-ink); border-bottom: 2px solid var(--color-border); padding-bottom: 12px; }
.spec-table tbody th { width: 38%; font-weight: 600; color: var(--color-primary); }
.spec-table tbody td { color: var(--body); }
.spec-table tbody tr:last-child th, .spec-table tbody tr:last-child td { border-bottom: none; }

.pdp-apps { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; }
.pdp-apps li { padding: 12px 20px; background: var(--color-background-soft); border: 1px solid var(--color-border);
  border-radius: 10px; font-size: 15px; font-weight: 600; color: var(--color-primary); }

.pdp-process { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(6, 1fr); gap: 20px; }
.pdp-step__n { display: inline-grid; place-items: center; width: 30px; height: 30px; border-radius: 50%;
  background: #0070D9; color: var(--color-white); font-size: 13px; font-weight: 700; margin-bottom: 12px; }
.pdp-step strong { display: block; font-size: 15px; font-weight: 700; color: var(--color-primary); margin-bottom: 6px; }
.pdp-step p { font-size: 13.5px; line-height: 1.55; color: var(--body); margin: 0; }

.pdp-note { text-align: center; margin-top: 28px; font-size: 15px; color: var(--body); }
.pdp-note a { color: var(--color-primary); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }

.pdp-related { display: flex; flex-wrap: wrap; gap: 24px; align-items: center; justify-content: space-between;
  padding: 28px 30px; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 16px; }
.pdp-related h3 { margin: 0 0 8px; font-size: 20px; }
.pdp-related p { margin: 0; font-size: 15px; color: var(--body); max-width: 620px; }

.pdp-cta-actions { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; }
.btn--ghost-light { color: var(--color-white); font-weight: 600; }
.btn--ghost-light:hover { text-decoration: underline; text-underline-offset: 4px; }

@media (max-width: 900px) {
  .pdp-hero { grid-template-columns: 1fr; gap: 30px; }
  .pdp-hero__copy .lead { max-width: none; }
  .pdp-figure { padding: 22px; }
  .pdp-feature-grid { grid-template-columns: 1fr; gap: 14px; }
  .pdp-process { grid-template-columns: 1fr; gap: 22px; }
  .pdp-related { flex-direction: column; align-items: flex-start; }
}
@media (max-width: 620px) {
  .spec-table th, .spec-table td { padding: 12px 10px; font-size: 14px; }
  .spec-table tbody th { width: 42%; }
  .pdp-subnav__inner { padding: 0 20px; gap: 22px; }
  .pdp-apps { justify-content: flex-start; }
}
@media (prefers-reduced-motion: reduce) {
  .pdp-subnav a { transition: none; }
}

/* product pages: drop the hard border lines — match the site's borderless
   card/chip treatment (soft navy shadow, no visible outline) */
.pdp-figure { border: none; }
.pdp-subnav { border-top: none; border-bottom: none; }
.spec-table thead th { border-bottom: none; padding-bottom: 8px; }
.spec-table tbody th, .spec-table tbody td { border-bottom-color: rgba(16, 40, 63, 0.07); }
.pdp-related { border: none; box-shadow: rgba(16, 40, 63, 0.08) 0 15px 35px; }
.pdp-apps li { border: none; background: #f1f4f9; }
.spec-table tbody th, .spec-table tbody td { border-bottom: none; }

/* section nav: centre the links as a group whenever they fit. "safe" falls back
   to start-packed once they overflow, so the horizontal scroll on small screens
   can still reach the first item. The media query is the fallback for browsers
   without "safe" alignment. */
.pdp-subnav__inner { justify-content: safe center; }
@media (min-width: 901px) {
  .pdp-subnav__inner { justify-content: center; }
}

/* section nav: active item matches the header nav treatment (navy + underline).
   Weight is left unchanged so the centred row does not shift while scrolling. */
.pdp-subnav a.is-active {
  color: var(--color-primary);
  text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 6px;
  text-decoration-color: var(--color-primary);
  border-bottom-color: transparent;
}

/* ============================================================
   PDP REFINEMENT LAYER — premium pass over the product pages
   ============================================================ */
/* overview: two concise paragraphs + three proof rows */
.pdp-overview { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 48px; align-items: start; max-width: 1040px; margin: 0 auto; }
.pdp-overview .pdp-prose { margin: 0; max-width: none; }
.pdp-proofs { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
.pdp-proof { display: flex; gap: 12px; align-items: flex-start; padding: 16px 18px; background: var(--color-background-soft); border: 1px solid var(--color-border); border-radius: 10px; font-size: 15px; font-weight: 600; color: var(--color-primary); }
.pdp-proof svg { width: 17px; height: 17px; flex: none; margin-top: 2px; color: var(--color-accent-ink); }

/* specification table: light header band, thin row separators */
.spec-table thead th { background: var(--color-accent-soft); border-bottom: none; padding: 12px 18px; }
.spec-table thead th:first-child { border-radius: 8px 0 0 8px; }
.spec-table thead th:last-child { border-radius: 0 8px 8px 0; }
.spec-table tbody th, .spec-table tbody td { border-bottom: 1px solid rgba(16, 40, 63, 0.08); }
.spec-table tbody tr:last-child th, .spec-table tbody tr:last-child td { border-bottom: none; }
@media (max-width: 620px) {
  .spec-table thead { display: none; }
  .spec-table, .spec-table tbody, .spec-table tr, .spec-table th, .spec-table td { display: block; width: 100%; }
  .spec-table tbody th { padding: 14px 0 3px; border-bottom: none; }
  .spec-table tbody td { padding: 0 0 14px; border-bottom: 1px solid rgba(16, 40, 63, 0.08); font-size: 14.5px; }
  .spec-table tbody tr:last-child td { border-bottom: none; }
}

/* configuration cards: quiet border card, no hover lift */
.pdp-page .cap-card { border: 1px solid var(--color-border); border-radius: 10px; box-shadow: rgba(16, 40, 63, 0.04) 0 4px 12px; transition: none; }
.pdp-page .cap-card:hover { transform: none; border-color: var(--color-border); box-shadow: rgba(16, 40, 63, 0.04) 0 4px 12px; }
@media (max-width: 1024px) and (min-width: 641px) { .pdp-page #options .grid-3 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .pdp-page #options .grid-3 { grid-template-columns: 1fr; } }

/* typical applications: non-clickable cards with line icons */
.pdp-app-grid { list-style: none; margin: 0 auto; padding: 0; display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; max-width: 1100px; }
.pdp-app-card { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 12px; padding: 24px 14px; background: var(--color-background-soft); border: 1px solid var(--color-border); border-radius: 10px; font-size: 14.5px; font-weight: 600; line-height: 1.4; color: var(--color-text); min-height: 118px; }
.pdp-app-card svg { width: 26px; height: 26px; color: var(--color-accent-ink); flex: none; }
@media (max-width: 1024px) and (min-width: 641px) { .pdp-app-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .pdp-app-grid { grid-template-columns: 1fr; } }

/* development process: 3x2 connected workflow */
.pdp-process { grid-template-columns: repeat(3, 1fr); gap: 22px; max-width: 1040px; margin: 0 auto; counter-reset: none; }
.pdp-step { padding: 24px; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 10px; }
@media (max-width: 1024px) and (min-width: 641px) { .pdp-process { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .pdp-process { grid-template-columns: 1fr; } }

/* quality: four proof blocks */
.pdp-quality-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px; max-width: 1040px; margin: 0 auto; }
.pdp-qblock { display: flex; gap: 14px; align-items: flex-start; padding: 24px; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 10px; }
.pdp-qblock svg { width: 19px; height: 19px; flex: none; margin-top: 3px; color: var(--color-accent-ink); }
.pdp-qblock h3 { margin: 0 0 6px; font-size: 16.5px; }
.pdp-qblock p { margin: 0; font-size: 14.5px; line-height: 1.6; color: var(--body); }
@media (max-width: 760px) { .pdp-quality-grid { grid-template-columns: 1fr; } }

/* information-required checklist reuses the feature grid, centred */
.pdp-feature-grid--info { max-width: 900px; margin: 0 auto; }

@media (max-width: 900px) {
  .pdp-overview { grid-template-columns: 1fr; gap: 28px; }
}

/* product pages: back to the site's borderless card language — no outlines,
   soft navy shadow carries the card edge */
.pdp-page .cap-card,
.pdp-app-card,
.pdp-step,
.pdp-qblock,
.pdp-proof {
  border: none;
  box-shadow: rgba(16, 40, 63, 0.08) 0 15px 35px;
}
.pdp-page .cap-card:hover { border: none; box-shadow: rgba(16, 40, 63, 0.08) 0 15px 35px; }
.pdp-app-card, .pdp-proof { background: #fff; }
/* section headings on product pages: restore the site's standard breathing room */
.pdp-page .head--narrow { margin-bottom: 56px; }
/* anchor landing: the section's own top padding already provides the gap
   below the sticky bars, so drop the extra scroll-margin */
.pdp-section { scroll-margin-top: 0; }
@media (max-width: 900px) { .pdp-section { scroll-margin-top: 0; } }
/* feature / checklist grids: shrink to content and centre as a block so the
   list sits visually centred under the heading instead of hugging the left */
.pdp-feature-grid { width: max-content; max-width: 100%; margin: 0 auto; grid-template-columns: repeat(2, minmax(0, auto)); column-gap: 64px; }
@media (max-width: 900px) { .pdp-feature-grid { width: auto; grid-template-columns: 1fr; } }

/* numbered badges site-wide: navy circle, matching the product-page process steps */
.cap-card__ic, .process-step__num {
  display: inline-grid; place-items: center; width: 30px; height: 30px;
  border-radius: 50%; background: #0070D9; color: #fff;
  font-size: 13px; font-weight: 700; line-height: 1;
  border: none; padding: 0; margin-bottom: 14px;
}

/* one hover site-wide: 2px lift, shadow unchanged — extended to the process
   steps and the product-page cards that were missing it */
.process-step, .pdp-step, .pdp-qblock, .pdp-app-card, .pdp-proof, .pdp-page .cap-card {
  transition: transform 0.25s var(--ease);
}
.process-step:hover, .pdp-step:hover, .pdp-qblock:hover, .pdp-app-card:hover, .pdp-proof:hover,
.pdp-page .cap-card:hover {
  transform: translateY(-2px);
}

/* ============================================================
   INDUSTRY MODAL REFINEMENT — mono-navy application summaries
   ============================================================ */
.modal {
  /* No backdrop blur: a small blur radius smears each card's soft shadow into
     a halo, which reads as a visible border around every card behind the
     scrim. A slightly deeper flat scrim dims the page cleanly instead. */
  background: rgba(7, 21, 39, 0.58);
  -webkit-backdrop-filter: none; backdrop-filter: none;
  display: flex; visibility: hidden; opacity: 0; pointer-events: none;
  transition: opacity 0.2s ease, visibility 0.2s ease;
}
.modal.is-open { visibility: visible; opacity: 1; pointer-events: auto; }
.modal__panel {
  width: min(720px, calc(100vw - 32px));
  max-width: none;
  max-height: min(85vh, 760px);
  border: 1px solid var(--color-border);
  border-radius: 18px;
  background: var(--color-white);
  box-shadow: 0 24px 70px rgba(4, 30, 66, 0.18);
  overflow: hidden;
  display: flex; flex-direction: column;
  transform: scale(0.98); opacity: 0;
  transition: transform 0.2s ease, opacity 0.2s ease;
}
.modal.is-open .modal__panel { transform: scale(1); opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .modal, .modal__panel { transition: none; }
  .modal__panel { transform: none; }
}
.modal__panel [data-modal-content] { overflow-y: auto; min-height: 0; }

.modal__close {
  top: 16px; right: 16px; width: 44px; height: 44px;
  background: var(--color-white); color: var(--color-primary);
  border: 1px solid var(--color-border);
}
.modal__close:hover { background: var(--color-background-soft); }

.im-header { padding: 30px 32px 26px; background: var(--color-accent-soft); }
.im-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; border-radius: 10px;
  background: var(--color-white); color: var(--color-primary); margin-bottom: 16px;
}
.im-icon svg { width: 24px; height: 24px; }
.im-eyebrow {
  font-size: 11.5px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--color-accent-ink); margin: 0 0 8px;
}
.im-header h2 { font-size: 27px; font-weight: 700; letter-spacing: -0.02em; color: var(--color-primary); margin: 0 0 10px; }
.im-summary { font-size: 15px; line-height: 1.6; color: var(--color-text-muted); max-width: 58ch; margin: 0; }

.im-body { padding: 30px 32px; background: var(--color-white); display: grid; grid-template-columns: 1fr 1fr; gap: 28px 36px; }
.im-label {
  font-size: 12px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--color-primary); margin: 0 0 12px;
}
.im-group > p { font-size: 14.5px; line-height: 1.65; color: var(--body); margin: 0; }
.im-reqs { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.im-reqs li { display: flex; gap: 10px; align-items: flex-start; font-size: 14.5px; line-height: 1.5; color: var(--body); }
.im-reqs svg { width: 15px; height: 15px; flex: none; margin-top: 3px; color: var(--color-accent-ink); }

.im-footer {
  padding: 22px 32px; background: var(--color-background-soft);
  border-top: 1px solid var(--color-border);
  display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap;
}
.im-footer strong { display: block; font-size: 15px; color: var(--color-primary); margin-bottom: 3px; }
.im-footer span { font-size: 13.5px; color: var(--color-text-muted); }

@media (max-width: 640px) {
  .modal { padding: 16px; }
  .im-header { padding: 24px 22px 20px; }
  .im-body { padding: 24px 22px; grid-template-columns: 1fr; gap: 22px; }
  .im-footer { padding: 20px 22px; flex-direction: column; align-items: stretch; }
  .im-footer .btn { justify-content: center; }
  .im-header h2 { font-size: 23px; }
}

/* ============================================================
   CONTACT HERO — full-bleed drawing-folder background
   Page-specific; does not affect .page-hero on other pages.
   ============================================================ */
.contact-page .contact-hero {
  /* dimensions now come from .page-hero--immersive; the hero starts at the
     very top behind the nav and the content clears it with padding */
  margin-top: calc(-1 * var(--header-h));
  display: flex; align-items: center;
  padding: 0 28px;
  overflow: hidden;
  background-color: #efeeec;           /* matches the photograph's paper surface */
}
.contact-page .contact-hero .mask { display: none; }

/* content sits in the clear left column (the folder starts at ~54% of the image) */
.contact-page .contact-hero .inner {
  width: min(52%, 680px);
  max-width: none;
  margin: 0;
  padding-left: 0; padding-right: 0;
  text-align: center;
  position: relative; z-index: 2;
}
.contact-page .contact-hero__eyebrow {
  font-size: 12px; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--color-primary); margin: 0 0 14px;
}
.contact-page .contact-hero h1 {
  font-size: clamp(38px, 5vw, 68px); line-height: 1.04; letter-spacing: -0.03em;
  color: var(--color-primary); margin: 0 0 18px;
}
.contact-page .contact-hero__description {
  font-size: 18px; line-height: 1.6; color: var(--muted);   /* #555b66: AA on the paper-toned photo */
  max-width: 560px; margin: 0 auto;
}
.contact-page .contact-hero .hero-badges {
  display: flex; flex-wrap: wrap; justify-content: center; gap: 18px 34px; margin-top: 34px;
}
.contact-page .contact-hero .hero-badge {
  display: flex; align-items: center; gap: 11px; text-align: left;
  background: none; border: none; box-shadow: none; padding: 0;
}
.contact-page .contact-hero .hero-badge__ic {
  width: auto; height: auto; background: none; border-radius: 0;
  color: var(--color-primary); flex: none;
}
.contact-page .contact-hero .hero-badge__ic svg { width: 22px; height: 22px; }
.contact-page .contact-hero .hero-badge__t strong { display: block; font-size: 14.5px; font-weight: 600; color: var(--color-primary); }
.contact-page .contact-hero .hero-badge__t span { font-size: 13px; color: var(--muted); }

/* laptop / tablet landscape.
   The photo is 16:9.4; once the hero is taller than width/1.78 the cover crop
   eats into the clear left side, so cap the height to the image ratio and
   narrow the column to keep text well clear of the folder. */
@media (max-width: 1200px) {
  .contact-page .contact-hero { padding: 0; }
  .contact-page .contact-hero .inner { width: min(46%, 480px); }
  .contact-page .contact-hero__description { font-size: 17px; max-width: 460px; }
  .contact-page .contact-hero .hero-badges { gap: 14px 22px; }
  .contact-page .contact-hero .hero-badge__t strong { font-size: 14px; }
  .contact-page .contact-hero .hero-badge__t span { font-size: 12.5px; }
}
/* the Contact hero is image-only: same tiers as every other immersive hero,
   with the folder kept in frame by the shared focal position */
@media (max-width: 860px) {
  .contact-page .contact-hero { padding: 0; background-size: cover; background-position: center right; }
}

/* ============================================================
   IMMERSIVE HERO SYSTEM
   One shared component for the marketing pages. Page modifiers set only
   the background image, focal point and overlay strength.
   Dark heroes get the white nav treatment; .hero-light keeps the navy nav.
   ============================================================ */
:root { --header-h: 76px; }

.page-hero--immersive {
  position: relative; width: 100%;
  height: 70vh; height: 70svh;                 /* svh with a vh fallback */
  min-height: 500px; max-height: 760px;
  margin-top: calc(-1 * var(--header-h));      /* starts at the very top, behind the nav */
  padding: 0 28px;
  display: flex; align-items: center;
  overflow: hidden;
  background-color: #10283F;
  background-image: var(--hero-image, none);
  background-size: cover;
  background-repeat: no-repeat;
  background-position: var(--hero-position, center);
}
.page-hero--immersive .mask { display: none; }
.page-hero--immersive .inner {
  position: relative; z-index: 2;
  width: 100%; max-width: var(--max); margin: 0 auto;
  padding-top: var(--header-h);
}
/* readability scrim for image-backed dark heroes (none on the navy surface) */
.page-hero--immersive::before {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: var(--hero-overlay, none);
}

/* copy on the navy surface */
.has-immersive-hero:not(.hero-light) .page-hero--immersive h1 { color: #fff; }
.has-immersive-hero:not(.hero-light) .page-hero--immersive h1 .accent { color: #fff; }
.has-immersive-hero:not(.hero-light) .page-hero--immersive p { color: rgba(255, 255, 255, 0.84); }

/* --- navigation merged with the hero (dark heroes only) --- */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) {
  background: linear-gradient(180deg, rgba(5, 20, 43, 0.72) 0%, rgba(5, 20, 43, 0.32) 55%, rgba(5, 20, 43, 0) 100%);
  -webkit-backdrop-filter: none; backdrop-filter: none;
  box-shadow: none;
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav { color: rgba(255, 255, 255, 0.88); }
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav a:hover,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav a.is-active {
  color: #fff; text-decoration-color: #fff;
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary {
  background: transparent; border: 1px solid rgba(255, 255, 255, 0.55); color: #fff;
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary:hover {
  background: rgba(255, 255, 255, 0.12);
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .menu-btn {
  color: #fff; border: 1px solid rgba(255, 255, 255, 0.4); background: rgba(255, 255, 255, 0.10);
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) a:focus-visible,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) button:focus-visible {
  box-shadow: 0 0 0 3px rgba(5, 20, 43, 0.9), 0 0 0 6px #fff !important;
}
/* scrolled state falls through to the existing white header + navy wordmark */
.header { transition: background 0.2s ease, box-shadow 0.2s ease; }
@media (prefers-reduced-motion: reduce) { .header { transition: none; } }

/* --- page modifiers: background + focal point only --- */
.page-hero--about      { --hero-position: center; }
.page-hero--products   { --hero-position: center center; }
.page-hero--capabilities { --hero-position: center; }
.page-hero--industries { --hero-position: center; }
.page-hero--quality    { --hero-position: center; }
.page-hero--contact    { --hero-position: center right; }

/* --- responsive tiers --- */
@media (max-width: 1024px) {
  .page-hero--immersive { height: 58vh; height: 58svh; min-height: 430px; max-height: 620px; }
}
@media (max-width: 640px) {
  .page-hero--immersive { height: 50vh; height: 50svh; min-height: 360px; max-height: 480px; padding: 0 20px; }
}
/* the mobile drawer must stay solid over the image */
.drawer { background: var(--color-surface); }

/* dimension overrides: outrank the older `.has-image-hero .page-hero` sizing */
.has-immersive-hero .page-hero--immersive {
  height: 70vh; height: 70svh; min-height: 500px; max-height: 760px;
}
@media (max-width: 1024px) {
  .has-immersive-hero .page-hero--immersive { height: 58vh; height: 58svh; min-height: 430px; max-height: 620px; }
}
@media (max-width: 640px) {
  .has-immersive-hero .page-hero--immersive { height: 50vh; height: 50svh; min-height: 360px; max-height: 480px; }
}
/* On small screens a long H1 must never be clipped behind the nav, so the
   hero keeps 50svh as a floor and grows if the copy needs more room. */
@media (max-width: 640px) {
  .has-immersive-hero .page-hero--immersive {
    height: auto; min-height: 50svh; max-height: none;
    padding-top: 8px; padding-bottom: 34px;
  }
}

/* ============================================================
   PAGE INTRO — shared introduction block below the image-only hero
   ============================================================ */
.page-intro {
  background: var(--color-surface);
  padding: clamp(52px, 4.2vw, 62px) 24px clamp(72px, 6vw, 96px);
  text-align: center;
}
.page-intro__inner { width: min(1056px, 100%); margin-inline: auto; }
.page-intro__eyebrow {
  font-size: 12px; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--color-primary); margin: 0 0 14px;
}
.page-intro h1 {
  margin: 0;
  font-size: clamp(32px, 4vw, 58px); line-height: 1.08; letter-spacing: -0.03em;
  color: var(--color-primary);
}
.page-intro__description {
  max-width: 820px; margin: 22px auto 0;
  color: var(--muted); font-size: clamp(16px, 1.4vw, 20px); line-height: 1.7;
}
/* contact information points: one centred row, icons only */
.page-intro__points {
  display: flex; flex-wrap: wrap; justify-content: center; align-items: flex-start;
  gap: 22px 56px; margin-top: 40px;
}
.page-intro__points .hero-badge {
  display: flex; align-items: center; gap: 11px; text-align: left;
  background: none; border: none; box-shadow: none; padding: 0;
}
.page-intro__points .hero-badge__ic {
  width: auto; height: auto; background: none; border-radius: 0;
  color: var(--color-primary); flex: none;
}
.page-intro__points .hero-badge__ic svg { width: 22px; height: 22px; }
.page-intro__points .hero-badge__t strong { display: block; font-size: 14.5px; font-weight: 600; color: var(--color-primary); }
.page-intro__points .hero-badge__t span { font-size: 13px; color: var(--muted); }

@media (max-width: 1024px) {
  .page-intro { padding: clamp(48px, 5vw, 56px) 24px clamp(60px, 6vw, 76px); }
  .page-intro h1 { font-size: clamp(32px, 4.4vw, 46px); }
  .page-intro__points { gap: 20px 38px; margin-top: 34px; }
}
@media (max-width: 640px) {
  .page-intro { padding: 42px 20px 60px; }
  .page-intro h1 { font-size: clamp(30px, 8vw, 38px); }
  .page-intro__description { font-size: 16.5px; margin-top: 20px; }
  .page-intro__points { flex-direction: column; align-items: center; gap: 16px; margin-top: 32px; }
  .page-intro__points .hero-badge { width: max-content; max-width: 100%; }
}

/* ============================================================
   CONTACT HERO ARTWORK — supplied SVG, used unmodified
   Contact-page only; global hero behaviour is untouched.
   ============================================================ */
.contact-page .contact-hero {
  /* the artwork carries its own navy field; the section matches it exactly
     so the contained artwork never shows a seam against the section */
  background-color: #023279;
  background-image: none;
}
/* The artwork is a 2.4:1 band whose icons sit below its own centre (the empty
   upper area is intentional). Sizing by width keeps it undistorted, then it is
   nudged up so the ICON ROW lands on the hero's vertical centre. The exposed
   area is the same navy as the section, so the shift is invisible.
   shift = 10.94% of the artwork height = 4.56vw */
.contact-hero__art {
  position: absolute; left: 0; z-index: 1;
  width: 100%; height: auto;
  top: 50%;
  transform: translateY(calc(-50% - 4.56vw));
  display: block;
}

/* The wordmark PNGs carried ~40px of invisible transparent haze below the
   letters, so a mathematically centred box put the letters ~5px high. The
   assets are now trimmed to their ink; these heights keep the rendered
   wordmark the same visual size as before. */
.brand img { height: 26px; }
.footer__brand { height: 21px; }

/* ============================================================
   CONTACT FORM — single centred column (info card and map removed)
   ============================================================ */
.contact-grid { display: block; }
.contact-page .form-card {
  width: 100%; max-width: 800px; margin: 0 auto;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 12px;
  box-shadow: rgba(16, 40, 63, 0.04) 0 4px 14px;
  padding: clamp(28px, 3.5vw, 44px);
}
.contact-page .section { padding-top: 8px; padding-bottom: clamp(72px, 7vw, 104px); }
@media (max-width: 720px) {
  .contact-page .form-card { border: none; box-shadow: none; padding: 4px 0 0; }
}
/* contact form: no card — plain content at the site's standard width,
   matching the footer and every other section; map sits directly below */
.contact-page .form-card {
  max-width: none; padding: 0;
  background: none; border: none; box-shadow: none; border-radius: 0;
}
.contact-page .map-embed { margin-top: clamp(40px, 4vw, 56px); height: 380px; }
@media (max-width: 720px) {
  .contact-page .map-embed { height: 300px; }
}
/* map heading: same rhythm as other section headings, tighter above the map */
.contact-page .contact-map-head { margin: clamp(56px, 5vw, 76px) auto 24px; }
/* Contact Us over a dark hero: plain white text, no outlined box
   (matches the site's borderless button language) */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary {
  background: transparent; border: none; box-shadow: none; color: #fff;
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary:hover {
  background: transparent;
  text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 6px;
}
/* Header "Contact Us": plain text, no box, on light headers too.
   Padding is kept so the touch target stays full size. */
.header-actions .btn--primary {
  background: transparent; border: none; box-shadow: none;
  color: var(--color-primary);
}
.header-actions .btn--primary:hover {
  background: transparent;
  text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 6px;
}
/* Header "Contact Us" reads as a CTA: bolder and slightly larger than the
   nav links, but borderless in both the navy and white variations. */
.header-actions .btn--primary {
  font-weight: 700;
  font-size: 15px;
  letter-spacing: 0.01em;
}

/* ============================================================
   HEADER "CONTACT US" CTA — two variations, identical geometry
   Navy on light headers; white over the navy heroes.
   ============================================================ */
.header-actions .btn--primary {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  height: 44px; padding: 0 22px; border-radius: 6px;
  font-size: 14px; font-weight: 600; letter-spacing: 0.2px; line-height: 1;
  transition: background-color 0.25s ease, border-color 0.25s ease,
              box-shadow 0.25s ease, color 0.25s ease;
  /* navy variation (white / light headers) */
  background: #0070D9;
  color: #fff;
  border: 1px solid #0070D9;
  box-shadow: none;
}
.header-actions .btn--primary .btn__arrow {
  width: 14px; height: 14px; flex: none;
  transition: transform 0.25s ease;
}
.header-actions .btn--primary:hover {
  background: #0051A9;                 /* slightly lighter navy */
  border-color: #0051A9;
  box-shadow: 0 2px 8px rgba(16, 40, 63, 0.18);
  text-decoration: none;
}

/* white variation — over the navy immersive heroes */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary {
  background: #fff;
  color: var(--color-primary);
  border: 1px solid #fff;
  box-shadow: none;
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary:hover {
  background: #eef2f7;                 /* very light blue-grey */
  border-color: #eef2f7;
  box-shadow: none;
  text-decoration: none;
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary:hover .btn__arrow {
  transform: translateX(3px);
}

@media (prefers-reduced-motion: reduce) {
  .header-actions .btn--primary,
  .header-actions .btn--primary .btn__arrow { transition: none; }
  .has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary:hover .btn__arrow { transform: none; }
}
/* Mobile: the header CTA is hidden below 1024px by the existing layout and the
   drawer CTA takes its place — match its type and geometry (layout unchanged). */
.drawer a.drawer__cta {
  min-height: 44px; display: flex; align-items: center; justify-content: center;
  border-radius: 6px; font-size: 14px; font-weight: 600; letter-spacing: 0.2px;
  background: #0070D9; color: #fff; border: 1px solid #0070D9;
}
/* keep the existing layout: header CTA stays hidden below 1024px (drawer takes over) */
@media (max-width: 1024px) { .header-actions .btn--primary { display: none; } }

/* ============================================================
   PRODUCTS DROPDOWN — desktop menu + mobile accordion
   ============================================================ */
.nav-item--dropdown { position: relative; display: inline-flex; align-items: center; gap: 6px; }
.nav-caret {
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; padding: 0; border: none; background: none;
  color: inherit; cursor: pointer;
}
.nav-caret svg { width: 12px; height: 12px; transition: transform 0.2s ease; }
.nav-item--dropdown.is-open > .nav-caret svg,
.nav-item--dropdown:hover > .nav-caret svg,
.nav-item--dropdown:focus-within > .nav-caret svg { transform: rotate(180deg); }

.nav-dropdown {
  position: absolute; top: calc(100% + 10px); left: 0; z-index: 210;
  min-width: 210px; padding: 6px 0;
  background: #fff;
  border: 1px solid rgba(7, 51, 111, 0.10);
  border-radius: 8px;
  box-shadow: rgba(16, 40, 63, 0.12) 0 14px 34px;
  display: flex; flex-direction: column;
  opacity: 0; visibility: hidden; transform: translateY(4px);
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
}
/* hover bridge so the pointer never crosses a dead gap */
.nav-dropdown::before { content: ""; position: absolute; left: 0; right: 0; top: -12px; height: 12px; }
.nav-item--dropdown.is-open > .nav-dropdown,
.nav-item--dropdown:hover > .nav-dropdown,
.nav-item--dropdown:focus-within > .nav-dropdown {
  opacity: 1; visibility: visible; transform: translateY(0);
}
.nav-dropdown a {
  display: block; padding: 10px 16px; text-align: left;
  font-size: 14px; font-weight: 600; letter-spacing: 0.01em;
  color: var(--color-primary);
  border-left: 2px solid transparent;
  text-decoration: none;
}
.nav-dropdown a:hover { background: #eef2f7; color: var(--color-primary); border-left-color: #0070D9; }
.nav-dropdown a.is-active { text-decoration: none; }

/* mobile drawer accordion */
.drawer-sub { display: flex; flex-direction: column; }
.drawer-sub__row { display: flex; align-items: center; }
.drawer-sub__row a { flex: 1; }
.drawer-sub__row .nav-caret { width: 44px; height: 44px; color: var(--color-primary); }
.drawer-sub__menu { display: none; flex-direction: column; padding-left: 18px; }
.drawer-sub.is-open .drawer-sub__menu { display: flex; }
.drawer-sub.is-open .drawer-sub__row .nav-caret svg { transform: rotate(180deg); }
.drawer-sub__menu a { font-size: 15px; }
/* dropdown hover/selected: solid navy fill with white text, no edge accent */
.nav-dropdown a { border-left: none; }
.nav-dropdown a:hover,
.nav-dropdown a.is-active {
  background: #0070D9; color: #fff; border-left: none;
}
/* dropdown items, Polaris-style: dark text by default, navy on hover -
   colour change only, no fill */
.nav-dropdown a,
.drawer-sub__menu a { color: #10283F; }
.nav-dropdown a:hover,
.nav-dropdown a.is-active,
.drawer-sub__menu a:hover,
.drawer-sub__menu a.is-active {
  background: none; color: var(--color-primary);
}
.nav-dropdown a { transition: color 0.2s ease; }
/* the white overlay-nav link colour must not leak into the dropdown panel,
   which is always white */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav .nav-dropdown a { color: #10283F; }
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav .nav-dropdown a:hover,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav .nav-dropdown a.is-active {
  color: var(--color-primary); text-decoration: none;
}

/* home joins the immersive hero system: navy surface, intro below */
.page-hero--home { --hero-position: center; }
.page-intro__actions { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 16px; margin-top: 34px; }
/* the split-hero rule that pinned the clients band into the first viewport no longer applies */

/* ============================================================
   TYPOGRAPHY SCALE — matched to polarisgrids.com's computed sizes
   (Polaris: H1/H2 44.8->32, H3 28.8->24, body 20->17.6 @1.6,
    nav 16/400, buttons 14-15, footer 12.8/13.6.)
   Sizing and line-height only; families, weights and colours unchanged.
   ============================================================ */
:root {
  --fs-h1:      clamp(32px, 2.2vw + 13px, 45px);   /* page headings   */
  --fs-h2:      clamp(30px, 2.1vw + 14px, 44px);   /* section headings*/
  --fs-h3-lg:   clamp(19px, 0.35vw + 16px, 21px);  /* large card titles */
  --fs-h3:      clamp(17px, 0.3vw + 14.5px, 18.5px); /* card titles   */
  --fs-body:    clamp(17px, 0.45vw + 13.5px, 20px);/* paragraphs    */
  --fs-small:   clamp(14.5px, 0.2vw + 13px, 15.5px); /* supporting    */
  --fs-nav:     16px;
  --lh-tight:   1.12;
  --lh-heading: 1.2;
  --lh-body:    1.62;
}

/* page headings */
.page-intro h1, .h1, .page-hero h1, .pdp-hero__copy .h1 {
  font-size: var(--fs-h1); line-height: var(--lh-tight); text-wrap: balance;
}
/* section headings */
.h2, .head .h2, .quality-head .h2, .process h2, .legal h2, .direct-card h2,
.im-header h2, .cta h2 {
  font-size: var(--fs-h2); line-height: var(--lh-heading); text-wrap: balance;
}
.legal h2, .im-header h2 { font-size: clamp(22px, 1vw + 14px, 27px); } /* sub-scale kept */
.cta h2 { font-size: clamp(26px, 1.4vw + 16px, 34px); }
/* large card titles */
.product-card h2, .info-card h2, .contact-aside h3, .pdp-related h3, .pm-header h3 {
  font-size: var(--fs-h3-lg); line-height: 1.3;
}
/* card / feature titles */
.card h3, .cap-card h3, .about-value h3, .pdp-qblock h3, .fl-card h3,
.quality-item span, .process-step strong, .pdp-step strong {
  font-size: var(--fs-h3); line-height: 1.35;
}
/* body copy and leads */
.head .lead, .page-intro__description, .pdp-prose p, .legal p, .about-intro .lead,
.page-hero p, .hero__lead, .im-summary {
  font-size: var(--fs-body); line-height: var(--lh-body);
}
/* supporting text inside cards and lists */
.card p, .cap-card p, .about-value p, .pdp-step p, .pdp-qblock p,
.pdp-feature, .im-reqs li, .im-group > p, .pdp-proof, .quality-item + p, .legal li {
  font-size: var(--fs-small); line-height: 1.55;
}
/* navigation */
.nav { font-size: var(--fs-nav); }
.nav-dropdown a { font-size: 15px; }
/* footer: links up to Polaris's ~13.6, titles stay small caps */
.footer__links a, .footer__links span, .footer__about p { font-size: 14px; }
/* section-nav hover: same underline as the selected state (2px, 6px offset,
   right under the label) instead of a border at the bar's bottom edge */
.pdp-subnav a { border-bottom: none; }
.pdp-subnav a:hover {
  border-bottom: none;
  color: var(--color-primary);
  text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 6px;
  text-decoration-color: var(--color-primary);
}

/* ============================================================
   HOME HERO PHOTOGRAPH + NAVY GRADIENT OVERLAY
   ============================================================ */
.page-hero--home .hero__image,
.page-hero--about .hero__image,
.page-hero--capabilities .hero__image {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: cover; object-position: center center;
  display: block;
}
/* back-to-top: sits in the corner now that the WhatsApp FAB it used to
   stack above is gone */
.to-top { bottom: 22px; }

/* ============================================================
   MOBILE MENU — polarisgrids-style
   Bare hamburger (no box); the menu opens as a full-width white
   panel under the header. Markup, JS, focus trap and inert
   behaviour unchanged.
   ============================================================ */
.menu-btn,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .menu-btn {
  background: none; border: none; box-shadow: none; border-radius: 0;
  position: relative;
}
/* hamburger becomes an X while the menu is open */
body.nav-open .menu-btn svg { display: none; }
body.nav-open .menu-btn::before,
body.nav-open .menu-btn::after {
  content: ""; position: absolute; left: 50%; top: 50%;
  width: 18px; height: 2px; background: currentColor; border-radius: 1px;
}
body.nav-open .menu-btn::before { transform: translate(-50%, -50%) rotate(45deg); }
body.nav-open .menu-btn::after  { transform: translate(-50%, -50%) rotate(-45deg); }

/* full-width panel below the header instead of a right-side drawer */
.drawer-scrim {
  top: var(--header-h); inset: var(--header-h) 0 0 0;
  background: none; -webkit-backdrop-filter: none; backdrop-filter: none;
  justify-content: stretch;
}
.drawer {
  width: 100%; height: 100%;
  padding: 18px 24px 28px;
  gap: 0;
  opacity: 0; transform: translateY(-8px);
  transition: opacity 0.18s ease, transform 0.18s ease;
}
body.nav-open .drawer { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .drawer { transition: none; transform: none; } }
.drawer a { border-bottom: none; padding: 14px 2px; font-size: 17px; font-weight: 600; }
.drawer a.drawer__cta { margin-top: 18px; }
/* the menu button sits in the header above the panel, so tapping it again closes */
body.nav-open .header { background: #fff; }
body.nav-open .header .menu-btn { color: var(--color-primary); }
body.nav-open .header .brand img { content: url("sartech-logo.svg?v=1"); }
/* while the menu is open the header must go solid white even in the
   overlay state (these outrank the immersive overlay rules) */
body.nav-open .header,
.has-immersive-hero.nav-open .header:not(.is-scrolled) { background: #fff; box-shadow: 0 1px 0 var(--line-soft); }
.has-immersive-hero.nav-open .header:not(.is-scrolled) .menu-btn { color: var(--color-primary); background: none; border: none; }
.has-immersive-hero.nav-open .header:not(.is-scrolled) .brand img { content: url("sartech-logo.svg?v=1"); }
.has-immersive-hero.nav-open .header:not(.is-scrolled) .nav { color: #3a4459; }

/* ============================================================
   HOME HERO — LOOPING CLIP REEL
   Four navy-graded factory clips play in sequence behind the existing
   navy gradient scrim. Two stacked <video> layers crossfade: the
   incoming layer sits on top and fades 0 -> 1, so the footage never
   dips toward the background mid-switch. The poster <img> stays as the
   base layer, which is what no-JS, reduced-motion and blocked-autoplay
   visitors keep seeing.
   ============================================================ */
.page-hero--home .hero-video {
  position: absolute; inset: 0; z-index: 0;
  overflow: hidden;
  /* deliberately transparent: both layers start at opacity 0, so the
     poster <img> underneath carries the hero until the first clip fades in */
}
.page-hero--home .hero-video[hidden],
.page-hero--home .hero-video__nav[hidden] { display: none; }

.hero-video__layer {
  position: absolute; inset: 0; z-index: 1;
  width: 100%; height: 100%;
  object-fit: cover; object-position: center center;
  opacity: 0;
  transition: opacity 900ms cubic-bezier(0.4, 0, 0.2, 1);
  will-change: opacity;
  pointer-events: none;
}
/* the layer being faded IN always sits above the one going out */
.hero-video__layer.is-front { z-index: 2; }
.hero-video__layer.is-visible { opacity: 1; }

/* clip indicator — one hairline per clip, the current one fills as it plays */
.page-hero--home .hero-video__nav {
  position: absolute; z-index: 3;
  left: 50%; bottom: 28px; transform: translateX(-50%);
  display: flex; gap: 10px;
  pointer-events: none;
}
.hero-video__bar {
  display: block; width: 36px; height: 3px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.3);
  overflow: hidden;
}
.hero-video__bar::after {
  content: ""; display: block;
  width: 100%; height: 100%;
  border-radius: inherit;
  background: #fff;
  transform: scaleX(var(--clip-progress, 0));
  transform-origin: left center;
}
/* clips already watched stay filled until the reel loops back around */
.hero-video__bar.is-done { --clip-progress: 1; }

@media (max-width: 640px) {
  .page-hero--home .hero-video__nav { bottom: 20px; gap: 8px; }
  .hero-video__bar { width: 26px; }
}

@media (prefers-reduced-motion: reduce) {
  .page-hero--home .hero-video,
  .page-hero--home .hero-video__nav { display: none !important; }
}
/* contact hero: supplied navy illustration. Its own navy field fills the
   section so the contained artwork shows no seam; the composition is
   centred, so no vertical nudge is needed. */
.contact-page .contact-hero { background-color: #012C7F; }
.contact-hero__art { top: 0; transform: none; height: 100%; object-fit: contain; object-position: center; }
/* Industries hero: supplied device line-up on its own navy field. Contained
   so no product is cropped, and no gradient scrim so the devices stay clear. */
.page-hero--industries { background-color: #013075; }
.page-hero--industries .hero__art {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: contain; object-position: center;
  display: block;
}

/* ============================================================
   CONTACT HERO — layered parallax animation
   Base plate plus five movable parts, composited back to the
   same artwork the static illustration showed. Motion is pure
   CSS transform/opacity (compositor only, no JS, no video).
   ============================================================ */

/* The stage reproduces `object-fit: contain` for a *box* rather than an
   image: the frame takes the smaller of the container's two fitting widths,
   so the artwork is never cropped and never distorted, and the percentage
   coordinates below stay locked to the artwork at every size. */
.contact-hero__stage {
  position: absolute; inset: 0; z-index: 1;
  container-type: size;
  pointer-events: none;
}
.contact-hero__frame {
  position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 100%;                 /* fallback where container units are absent */
  aspect-ratio: 1804 / 872;
  --amp: 1;                    /* motion intensity — raise for a livelier idle */
}
@supports (width: 1cqw) {
  .contact-hero__frame { width: min(100cqw, 100cqh * 1804 / 872); }
}
.contact-hero__base { display: block; width: 100%; height: auto; user-select: none; }

.ch-layer {
  position: absolute; height: auto;
  will-change: transform; backface-visibility: hidden;
  animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1);
  animation-iteration-count: infinite;
}
/* Each part rocks on the pivot it would really turn about, on a slightly
   different period, so the group never falls into visible lockstep. */
.ch-layer--left {
  left: 22.7273%; top: 34.8624%; width: 7.8714%;
  transform-origin: 109% 41%;
  animation-name: chRockLeft; animation-duration: 7.6s;
}
.ch-layer--right {
  left: 67.6275%; top: 33.9450%; width: 10.4767%;
  transform-origin: 58% 96.5%;
  animation-name: chRockRight; animation-duration: 8.4s; animation-delay: -3.2s;
}
.ch-layer--center {
  left: 42.5721%; top: 20.5275%; width: 15.2439%;
  transform-origin: 59% 78%;
  animation-name: chRockCenter; animation-duration: 7.9s; animation-delay: -1.9s;
}
.ch-bubble {
  left: 56.0421%; top: 20.7569%; width: 7.2616%;
  animation-name: chBubbleFloat; animation-duration: 8.1s; animation-delay: -2.6s;
}
.ch-bubble__body { display: block; width: 100%; height: auto; }
.ch-dot {
  position: absolute; top: 30.435%; width: 20.611%; height: auto;
  transform-origin: 50% 50%;
  will-change: transform, opacity;
  animation: chDotPulse 2.7s cubic-bezier(0.45, 0, 0.55, 1) infinite;
}
.ch-dot--1 { left: 19.084%; }
.ch-dot--2 { left: 39.695%; animation-delay: 0.3s; }
.ch-dot--3 { left: 60.305%; animation-delay: 0.6s; }

@keyframes chRockLeft {
  0%, 100% { transform: translateZ(0) rotate(calc(var(--amp) * -0.42deg)) translateX(calc(var(--amp) * -0.6px)); }
  50%      { transform: translateZ(0) rotate(calc(var(--amp) *  0.40deg)) translateX(calc(var(--amp) *  0.9px)); }
}
@keyframes chRockRight {
  0%, 100% { transform: translateZ(0) rotate(calc(var(--amp) *  0.40deg)) translateX(calc(var(--amp) *  1.2px)); }
  50%      { transform: translateZ(0) rotate(calc(var(--amp) * -0.44deg)) translateX(calc(var(--amp) * -1.4px)); }
}
@keyframes chRockCenter {
  0%, 100% { transform: translateZ(0) rotate(calc(var(--amp) *  0.38deg)) translateX(calc(var(--amp) *  1.1px)); }
  50%      { transform: translateZ(0) rotate(calc(var(--amp) * -0.42deg)) translateX(calc(var(--amp) * -1.3px)); }
}
@keyframes chBubbleFloat {
  0%, 100% { transform: translateZ(0) translate3d(calc(var(--amp) * -0.5px), calc(var(--amp) *  1.6px), 0); }
  50%      { transform: translateZ(0) translate3d(calc(var(--amp) *  0.7px), calc(var(--amp) * -2.2px), 0); }
}
@keyframes chDotPulse {
  0%, 62%, 100% { opacity: 0.62; transform: translateZ(0) scale(1); }
  22%           { opacity: 1;    transform: translateZ(0) scale(1.1); }
}

/* Reduced motion: the artwork still composites correctly, it simply rests. */
@media (prefers-reduced-motion: reduce) {
  .ch-layer, .ch-dot { animation: none !important; transform: none !important; }
  .ch-dot { opacity: 1; }
}
/* Quality hero. Focal point sits right of centre: the operator and the work in
   their hands are in the right third, and a centred cover crop would drop them
   entirely at phone widths. Navy scrim, as on every hero. */
.page-hero--quality .hero__image {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: cover; object-position: 82% center;
  display: block;
}



/* Capabilities hero: contained, not cropped - the two figures sit at the far
   edges of the scene and a cover crop would drop them. The section takes the
   artwork's own field so the contained edges show no seam. */
.page-hero--capabilities { background-color: #FCFCFD; }
.page-hero--capabilities .hero__image {
  object-fit: contain; object-position: center;
}

/* Products hero: contained, not cropped - the two figures sit at the far edges
   of the scene and a cover crop keeps only 52% of the width at 390px. */
.page-hero--products {
  /* the artwork's own field, so the contained edges show no seam */
  background-color: #FBFAFB;
}
.page-hero--products .hero__image {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: contain; object-position: center;
  display: block;
}


/* ============================================================
   CAREERS
   Built from the existing tokens and components: .section, .band,
   .head, .cap-card, .grid-3 / .grid-4, .form-card and .btn all come
   from the shared system. Only the job list, the empty state and the
   About-page entry point needed new rules.
   ============================================================ */

/* A shorter section for the compact blocks (hiring process, careers teaser). */
.section--tight { padding-top: 72px; padding-bottom: 72px; }

/* Hiring process: title-only cards, so they stay compact rather than
   stretching to the height of a card that expects body copy. */
.process-steps .cap-card { padding: 22px; }
.process-steps .cap-card h3 { margin-bottom: 0; }

/* ---- job openings ---- */
.job-list { display: grid; gap: 20px; }
.job-card {
  background: #fff; border: 1px solid var(--line); border-radius: 16px; padding: 26px 28px;
  display: grid; gap: 14px;
  transition: border-color 0.25s var(--ease), box-shadow 0.25s var(--ease),
              opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
.job-card:hover { border-color: #CFE3F5; box-shadow: 0 14px 30px rgba(16, 40, 63, 0.07); }
.job-card__top h3 { font-size: 19px; font-weight: 700; letter-spacing: -0.015em; margin-bottom: 4px; }
.job-card__dept { font-size: 13.5px; font-weight: 600; color: var(--color-accent-ink, #0070D9); margin: 0; }
.job-card__meta { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px 28px; }
.job-card__meta li { font-size: 14px; color: var(--body-2); }
.job-card__meta span {
  display: block; font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em;
  text-transform: uppercase; color: var(--faint); margin-bottom: 2px;
}
.job-card__desc { font-size: 14.5px; color: var(--body-2); margin: 0; }
.job-card__apply { justify-self: start; }

/* ---- empty state ---- */
.job-empty {
  background: var(--bg-alt); border: 1px solid var(--line-soft); border-radius: 16px;
  padding: clamp(36px, 5vw, 56px) 28px; text-align: center;
}
.job-empty h3 { font-size: 21px; font-weight: 700; letter-spacing: -0.015em; margin-bottom: 10px; }
.job-empty p { font-size: 15.5px; color: var(--body-2); max-width: 560px; margin: 0 auto 26px; }

/* The application form is the scroll target, so it clears the sticky header
   and its own heading rather than landing flush under the bar. */
#career-application { scroll-margin-top: 190px; }

/* ---- About-page entry point: deliberately quieter than the enquiry CTA ---- */
.work-with-us {
  background: var(--bg-alt); border: 1px solid var(--line-soft); border-radius: 12px;
  padding: clamp(32px, 4vw, 46px); text-align: center;
}
.work-with-us p { font-size: 16px; color: var(--body-2); max-width: 560px; margin: 14px auto 24px; }

@media (max-width: 860px) {
  .process-steps { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .job-card { padding: 22px; }
  .job-card__meta { gap: 10px 20px; }
  #career-application { scroll-margin-top: 140px; }
}

/* Careers hero: contained, not cropped - the three figures run to the right
   edge of the scene and a cover crop keeps only 52% of the width at 390px. */
.page-hero--careers {
  /* the artwork's own field, so the contained edges show no seam */
  background-color: #F6F4F5;
}
.page-hero--careers .hero__image {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: contain; object-position: center;
  display: block;
}

/* Header container widened using the same formula as the Prismatech site:
   a half-viewport-relative width, so the logo and the Contact Us button move
   outward as the screen grows instead of stopping at a fixed 1200px. Wider
   than the old container at every size, narrower than full bleed. */
.headerbar { max-width: calc(50% + 590px); }

/* Careers artwork sits lower in the hero. Contained, it is height-limited at
   desktop and fills all 630px, so object-position has no slack to work with -
   the offset has to come off the top of the box. The topmost figure was
   landing 22px down, behind the 76px header; a 60px inset puts it at 80px.
   Below 769px the artwork is width-limited and already clears the bar. */
@media (min-width: 769px) {
  .page-hero--careers .hero__image {
    top: 60px;
    /* height must shrink with the inset - height:100% alone would push the
       artwork past the hero and let overflow:hidden clip its lower edge. */
    height: calc(100% - 60px);
  }
}

/* Legal pages: drop the boxes from the last-updated stamp and the contact
   block, in line with the site's no-visible-border rule for cards. The
   contact block keeps its soft tint so it still reads as a distinct panel. */
.legal .updated { border: none; padding: 0; }
.legal .legal-contact { border: none; }

/* Legal contact block: its 22px padding was indenting the text 22px past the
   surrounding copy. Pull the panel outward by the same amount so the tint
   still frames the text but the text itself sits on the column edge. Narrower
   inset on small screens so the band does not crowd the viewport edge. */
.legal .legal-contact { margin-inline: -22px; }
/* The 840px column only has 22px of slack each side once the viewport reaches
   940px (840 + 2x28 gutter + 2x22 bleed). Below that a full -22px bleed would
   push the panel against the viewport edge, so use a smaller inset - the text
   still aligns, and the band keeps clear of the edge. */
@media (max-width: 939px) {
  .legal .legal-contact { margin-inline: -14px; padding-inline: 14px; }
}

/* =====================================================================
   PLAIN LAYER (2026-09-08). Every page except Contact is plain: white
   background + text. No card boxes, borders, rules, shadows, grey bands,
   table lines, icon tiles or grid patterns. Contact keeps its form UI.
   Scoped with body:not(.contact-page); !important beats earlier layers.
   ===================================================================== */
body:not(.contact-page) { background: #fff !important; }

/* 1. Boxes, cards, bands, panels: no border, no shadow, no tint */
body:not(.contact-page) :is(
  .card, .cap-card, .about-value, .product-card, .industry-card, .quality-item,
  .process, .process-step, .spec-card, .info-card, .info-note, .direct-card,
  .band, .stats-band, .clients-band, .work-with-us, .job-empty, .legal-contact,
  .legal .updated, .hero-iso strong, .spec-chips span, .pill, .form-status,
  .form-card, .file-label, .fl-ic, .fs-ic, .footer, .footer__bottom,
  .im-header, .im-body, .im-footer, .pdp-subnav, .pdp-apps li, .pdp-proof, .pdp-app-card,
  .pdp-step, .pdp-qblock, .pdp-figure, .pdp-related, .modal__panel, .modal__close, .drawer,
  .nav-dropdown, .nav-dropdown a, .header, .header.is-scrolled, .menu-btn,
  .btn--soft, .btn--outline, .btn--ghost, .division-link, .cta, .to-top,
  table, thead, tbody, tr, th, td
) {
  border: 0 !important;
  box-shadow: none !important;
  background-color: transparent !important;
  background-image: none !important;
}
/* floating layers still need a white ground to be readable */
body:not(.contact-page) :is(.modal__panel, .drawer, .nav-dropdown, .header.is-scrolled, body.nav-open .header) {
  background-color: #fff !important;
}
body:not(.contact-page) .modal { background-color: rgba(7, 21, 39, 0.58) !important; }
/* the dropdown floats over content: keep its soft shadow so it stays legible */
body:not(.contact-page) .nav-dropdown { box-shadow: rgba(16, 40, 63, 0.12) 0 14px 34px !important; }

/* 2. Cards sit flush on the column, no inner padding, no hover lift */
body:not(.contact-page) :is(
  .card, .cap-card, .about-value, .product-card, .industry-card, .quality-item,
  .process-step, .spec-card, .info-card, .info-note, .direct-card, .work-with-us,
  .job-empty, .legal-contact, .pdp-proof, .pdp-app-card, .pdp-step, .pdp-qblock, .pdp-related,
  .form-card:not(.careers-form-card)
) { padding: 0 !important; border-radius: 0 !important; }
body:not(.contact-page) .legal .legal-contact { margin-inline: 0 !important; }
body:not(.contact-page) :is(.card, .cap-card, .about-value, .product-card, .industry-card,
  .quality-item, .process-step, .spec-card, .pdp-proof, .pdp-app-card, .pdp-step,
  .pdp-qblock, .pdp-page .cap-card, .btn--soft, .btn--outline):hover { transform: none !important; }
body:not(.contact-page) .product-card { overflow: visible !important; }
body:not(.contact-page) .info-card::before { display: none !important; }

/* 3. Icon tiles and number badges become bare navy glyphs */
body:not(.contact-page) :is(.cap-card__ic, .process-step__num, .pdp-step__n, .industry-card__ic,
  .spec-card .card__num, .ir-ic, .fs-ic, .fl-ic) {
  background: transparent !important; border: 0 !important; box-shadow: none !important;
  color: var(--color-primary, #10283F) !important; width: auto !important; height: auto !important;
}
body:not(.contact-page) :is(.cap-card__ic, .industry-card__ic, .fs-ic) svg { color: var(--color-primary, #10283F) !important; }

/* 4. Lines: dividers, stat separators, decorative bars, hero grid, hr */
body:not(.contact-page) :is(.eyebrow2 span, .map-label .bar, .page-hero .mask, .progress, hr) { display: none !important; }
body:not(.contact-page) .stat + .stat::before { display: none !important; }
body:not(.contact-page) .header.is-scrolled { box-shadow: none !important; }
body:not(.contact-page) .pill i { box-shadow: none !important; }

/* 5. CTA block: no navy box, plain navy heading on white */
body:not(.contact-page) .cta { padding: 24px 0 !important; color: var(--color-text, #10283F) !important; }
body:not(.contact-page) .cta h2 { color: var(--color-primary, #10283F) !important; }
body:not(.contact-page) .cta p { color: var(--body-2, #52606D) !important; }

/* 6. Secondary buttons become plain navy text links; primary button stays */
body:not(.contact-page) :is(.btn--soft, .btn--outline, .btn--ghost) {
  color: var(--color-primary, #10283F) !important; padding-inline: 0 !important;
}
body:not(.contact-page) :is(.btn--soft, .btn--outline, .btn--ghost):hover { text-decoration: underline; }
body:not(.contact-page) .btn--primary {
  background-color: #0070D9 !important; color: #fff !important; box-shadow: none !important;
}
body:not(.contact-page) .to-top { background-color: #0070D9 !important; color: #fff !important; }

/* 7. Careers form: keep usable field outlines, drop the grey file box */
body:not(.contact-page) .file-label { padding-inline: 0 !important; }

/* =====================================================================
   PRISMATECH LAYOUT PARITY (2026-09-08)
   Ports the Prismatech site's layout system to Sartech: 1180px column,
   90px section rhythm, centred 760px section heads, centred cards with the
   icon stacked above the title, 20px grid gutters, 4-up process steps,
   96px CTA band and the same footer grid + breakpoints.
   Layout only - Sartech keeps its own palette, typography and the plain
   white treatment. Contact page and the transparent hero nav are excluded.
   ===================================================================== */

/* --- 1. column width: 1200 -> 1180 --- */
:root { --max: 1180px; }

/* --- 2. section rhythm: 90px, small bands 84px --- */
body:not(.contact-page) .section { padding: 90px 28px; }
body:not(.contact-page) .band.section,
body:not(.contact-page) .section--sm { padding: 84px 28px; }
body:not(.contact-page) #about.section { padding-top: 90px; }

/* --- 3. section head: 760px, centred, 44px below --- */
body:not(.contact-page) :is(.head, .head--narrow, .head--products) {
  max-width: 760px; margin: 0 auto 44px; text-align: center;
}
body:not(.contact-page) :is(.head .h2, .head h2, .h2) {
  font-size: clamp(30px, 3vw, 48px); line-height: 1.2; font-weight: 600;
  letter-spacing: -0.8px; text-align: center; margin-bottom: 16px;
}
body:not(.contact-page) :is(.head .lead, .lead) {
  font-size: 18px; line-height: 1.6; text-align: center;
  max-width: 640px; margin-left: auto; margin-right: auto;
}

/* --- 4. grid gutters: 20px --- */
body:not(.contact-page) :is(.grid-2, .grid-3, .grid-4) { gap: 20px; }

/* --- 5. cards: 24px padding, centred, icon stacked above the title --- */
body:not(.contact-page) :is(.cap-card, .card, .quality-item,
  .industry-card, .spec-card, .pdp-app-card, .pdp-page .cap-card) {
  padding: 24px !important; text-align: center;
}
body:not(.contact-page) :is(.cap-card, .card, .quality-item,
  .industry-card, .spec-card) > * { margin-left: auto; margin-right: auto; }
body:not(.contact-page) :is(.cap-card__ic, .industry-card__ic, .spec-card .card__num) {
  width: 50px !important; height: 50px !important;
  display: flex !important; align-items: center; justify-content: center;
  margin: 0 auto 20px !important; font-size: 15px; font-weight: 600;
}
body:not(.contact-page) :is(.cap-card__ic, .industry-card__ic) svg { width: 24px; height: 24px; }
body:not(.contact-page) :is(.cap-card, .card, .industry-card, .spec-card) h3 {
  font-size: 20px; font-weight: 600; letter-spacing: -0.2px; margin-bottom: 9px;
}
body:not(.contact-page) :is(.cap-card, .card, .industry-card, .spec-card) p {
  font-size: 15px; line-height: 1.6;
}
body:not(.contact-page) .quality-item span {
  display: block; font-size: 20px; font-weight: 600; letter-spacing: -0.2px; margin-bottom: 9px;
}
body:not(.contact-page) .quality-item p { font-size: 15px; line-height: 1.6; }

/* --- 6. process steps: 4-up, centred, number above --- */
body:not(.contact-page) .process { padding: 0 !important; }
body:not(.contact-page) .process .grid-4 { gap: 16px; margin-top: 46px; }
body:not(.contact-page) :is(.process-step, .pdp-step) {
  padding: 24px 22px !important; text-align: center;
}
body:not(.contact-page) :is(.process-step__num, .pdp-step__n) {
  width: 42px !important; height: 42px !important;
  display: flex !important; align-items: center; justify-content: center;
  margin: 0 auto 18px !important; font-size: 15px; font-weight: 600;
}
body:not(.contact-page) :is(.process-step strong, .pdp-step strong) {
  display: block; font-size: 16.5px; font-weight: 600;
  letter-spacing: -0.2px; margin-bottom: 9px;
}
body:not(.contact-page) :is(.process-step p, .pdp-step p) { font-size: 13.8px; line-height: 1.6; }

/* --- 7. CTA band: 96px, centred 760px inner --- */
body:not(.contact-page) .cta { padding: 96px 28px !important; text-align: center; }
body:not(.contact-page) .cta__inner { max-width: 760px; margin: 0 auto; }
body:not(.contact-page) .cta h2 {
  font-size: clamp(30px, 3vw, 48px); line-height: 1.2; font-weight: 600;
  letter-spacing: -1px; margin-bottom: 16px;
}
body:not(.contact-page) .cta p { font-size: 17px; line-height: 1.65; max-width: 520px; margin: 0 auto 32px; }
body:not(.contact-page) .cta .btn { margin-top: 0; }

/* --- 8. footer: 72/30 padding, 44px gutters --- */
body:not(.contact-page) .footer__inner { padding: 72px 28px 30px; }
body:not(.contact-page) .footer__grid { gap: 44px; }
body:not(.contact-page) .footer__bottom { margin-top: 48px; padding-top: 24px; }

/* --- 9. hero copy block: Prismatech's 920px centred inner --- */
body:not(.contact-page) .page-intro__inner { width: min(920px, 100%); text-align: center; }

/* --- 10. breakpoints, matched to Prismatech --- */
@media (max-width: 900px) {
  body:not(.contact-page) :is(.grid-3, .grid-4) { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 860px) {
  body:not(.contact-page) .footer__grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 700px) {
  body:not(.contact-page) .grid-2 { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  body:not(.contact-page) :is(.section, .cta, .page-hero) { padding-left: 20px; padding-right: 20px; }
  body:not(.contact-page) :is(.grid-2, .grid-3, .grid-4) { grid-template-columns: 1fr; }
  body:not(.contact-page) .footer__grid { grid-template-columns: 1fr; }
}

/* --- 11. icon-beside-text rows follow Prismatech's .feat, not its .card --- */
body:not(.contact-page) .about-value {
  display: flex; gap: 14px; align-items: flex-start;
  padding: 16px 0 !important; text-align: left;
}
body:not(.contact-page) .about-value__ic {
  width: 26px !important; height: 26px !important; flex-shrink: 0;
  display: flex !important; align-items: center; justify-content: center; margin: 0 !important;
}
body:not(.contact-page) .about-value__ic svg { width: 15px; height: 15px; }
body:not(.contact-page) .about-value h3 { font-size: 16px; font-weight: 600; margin-bottom: 4px; }
body:not(.contact-page) .about-value p { font-size: 14.5px; line-height: 1.6; }

/* =====================================================================
   NAV + HEADER CTA CORRECTIONS (2026-09-08)
   - active nav link: no underline, navy like the rest of the nav
   - nav links resting colour back to the brand navy
   - header Contact CTA: drop the white outline over the dark heroes
   Dark immersive heroes keep their white nav (re-stated explicitly here,
   because the rules below are more specific than the inherited colour).
   ===================================================================== */

/* --- 1. active page: weight only, no underline --- */
.nav a.is-active, .drawer a.is-active {
  text-decoration: none !important;
  font-weight: 700;
}

/* --- 2. nav links in the brand navy (light heroes, scrolled, inner pages) --- */
.nav a,
.nav a:hover,
.nav a.is-active { color: var(--color-primary); }

/* --- 3. dark immersive heroes keep the white nav --- */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav a { color: rgba(255, 255, 255, 0.88); }
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav a:hover,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav a.is-active { color: #fff; }

/* --- 4. header Contact CTA: no white outline over the dark heroes --- */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary:hover {
  border: none !important;
}

/* =====================================================================
   NAV BAR: ALWAYS SOLID WHITE (Prismatech pattern, 2026-09-08)
   Prismatech ships every page with <header class="nav scrolled">, so its
   bar is opaque white over the hero rather than transparent. Same here:
   one header treatment on every page and every hero, dark or light, with
   the navy wordmark, navy links and the selected page in navy + bold.
   This replaces the earlier transparent-over-hero treatment.
   ===================================================================== */

/* --- 1. the bar itself: opaque white everywhere, no scroll swap --- */
.header,
.header.is-scrolled,
.has-immersive-hero .header,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) {
  background: #fff !important;
  background-image: none !important;
  -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
  box-shadow: none !important;
}

/* --- 2. navy wordmark on every page (drop the white knockout swap) --- */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .brand img,
.has-video-hero .header:not(.is-scrolled) .brand img {
  content: url("sartech-logo.svg?v=1") !important;
}

/* --- 3. links navy, selected page navy + bold, never white --- */
.header .nav,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav,
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav a:not(.is-active),
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .nav a:not(.is-active):hover,
.has-video-hero .header:not(.is-scrolled) .nav a:not(.is-active),
.has-video-hero .header:not(.is-scrolled) .nav a:not(.is-active):hover {
  color: var(--color-primary) !important;
}
.nav a.is-active { color: var(--color-primary) !important; font-weight: 700; }

/* --- 4. menu button + Contact CTA: one light treatment everywhere --- */
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .menu-btn,
.has-video-hero .header:not(.is-scrolled) .menu-btn {
  color: var(--color-primary) !important;
  background: transparent !important; border: none !important;
}
.has-immersive-hero:not(.hero-light) .header:not(.is-scrolled) .header-actions .btn--primary,
.has-video-hero .header:not(.is-scrolled) .header-actions .btn--primary {
  background: #0070D9 !important; color: #fff !important; border: none !important;
}

/* --- 5. the hero now starts below the bar instead of behind it, so an
         opaque header no longer crops the top of the artwork --- */
.page-hero--immersive { margin-top: 0 !important; }
.page-hero--immersive .inner { padding-top: 0 !important; }

/* =====================================================================
   FIX: header Contact CTA resized by 2px on scroll (2026-09-08)
   The base rule gives the CTA `border: 1px solid var(--color-primary)`.
   The always-white nav layer removed that border only for the un-scrolled
   dark-hero state, so scrolling re-applied it and the button grew 2px
   wider. The border is navy on a navy fill (invisible) and the user had
   already asked for it gone, so drop it in every state instead.
   ===================================================================== */
.header-actions .btn--primary,
.header-actions .btn--primary:hover,
.header-actions .btn--primary:focus,
.header-actions .btn--primary:focus-visible,
.header.is-scrolled .header-actions .btn--primary,
.header.is-scrolled .header-actions .btn--primary:hover {
  border: none !important;
}

/* =====================================================================
   NUMBER BADGES: CIRCULAR BORDER (2026-09-08)
   Every step/capability number gets a navy ring again. Audited across all
   pages: .cap-card__ic, .process-step__num and .pdp-step__n only ever
   contain a number, so they can be targeted directly. Icon badges
   (.industry-card__ic, .about-value__ic) hold SVGs and stay bare.
   Filled navy disc with the number in white, as it was originally.
   SPECIFICITY NOTE: the plain and layout layers above target these with
   `body:not(.contact-page) :is(... , .spec-card .card__num, ...)`. :is()
   takes the specificity of its MOST specific argument, and that list
   contains a two-class argument, so those rules score (0,3,1) - a bare
   `.cap-card__ic` loses to them even with !important. Hence the repeated
   class plus `html body` here, which scores (0,3,2).
   ===================================================================== */
html body .cap-card__ic.cap-card__ic.cap-card__ic,
html body .process-step__num.process-step__num.process-step__num,
html body .pdp-step__n.pdp-step__n.pdp-step__n {
  box-sizing: border-box !important;
  width: 40px !important; height: 40px !important;
  display: flex !important; align-items: center !important; justify-content: center !important;
  margin: 0 auto 18px !important;
  padding: 0 !important;
  border: none !important;
  border-radius: 50% !important;
  background: #0070D9 !important;
  color: #fff !important;
  font-size: 14.5px; font-weight: 700; line-height: 1;
  flex: none;
}

/* =====================================================================
   ABOUT BLOCK ALIGNMENT (2026-09-08)
   The section carried two stacked headings (the centred section head plus
   an "Application-specific..." headline inside the left column). The inner
   headline is gone from index.html and about.html, so the section now has
   one heading. What is left is a two-column body: intro copy on the left,
   Vision / Mission / Commitment on the right.

   The layout-parity layer centres every .lead, which left the intro copy
   centred against a left-aligned values column - the misalignment the user
   flagged. Align both columns left and to the top so their first lines sit
   on the same baseline.
   ===================================================================== */
html body .about-layout { align-items: start; }
html body .about-intro { text-align: left; }
/* .about-intro repeated so this scores (0,3,2) and outranks the parity
   layer's `body:not(.contact-page) :is(.head .lead, .lead)` at (0,3,1),
   which centres the text and auto-centres the block inside its column. */
html body .about-intro.about-intro .lead {
  text-align: left !important;
  max-width: none !important;
  margin: 0 0 18px !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
html body .about-intro.about-intro .lead:last-child { margin-bottom: 0 !important; }
/* first row of values lines up with the first line of the intro copy */
html body .about-values > .about-value:first-child { padding-top: 0 !important; }

@media (max-width: 900px) {
  html body .about-layout { gap: 34px; }
}

/* =====================================================================
   PRISMATECH PARITY, PART 2 (2026-09-08)
   Matches Prismatech's proportions: the About block, the hero type scale
   and the Contact page's column and form widths. Selectors are weighted
   (repeated class + `html body`) because the plain/layout layers reach
   these through `body:not(.contact-page) :is(..., .two .classes, ...)`,
   which scores (0,3,1) and beats a normal selector even with !important.
   ===================================================================== */

/* --- 1. About block = Prismatech's "What drives our work":
         one centred 760px intro, then centred cards, icon above --- */
html body .about-layout {
  display: block !important;
  max-width: none;
}
html body .about-intro.about-intro {
  max-width: 760px;
  margin: 0 auto 44px;
  text-align: center;
}
html body .about-intro.about-intro .lead {
  text-align: center !important;
  max-width: none !important;
  margin: 0 auto 16px !important;
}
html body .about-intro.about-intro .lead:last-child { margin-bottom: 0 !important; }

html body .about-values {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr) !important;
  gap: 20px !important;
}
html body .about-values .about-value.about-value {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  text-align: center !important;
  padding: 24px !important;
}
html body .about-values .about-value.about-value .about-value__ic {
  width: 50px !important; height: 50px !important;
  margin: 0 auto 20px !important;
  display: flex !important; align-items: center; justify-content: center;
}
html body .about-values .about-value.about-value .about-value__ic svg { width: 24px; height: 24px; }
html body .about-values .about-value.about-value h3 {
  font-size: 20px; font-weight: 600; letter-spacing: -0.2px; margin-bottom: 9px;
}
html body .about-values .about-value.about-value p { font-size: 15px; line-height: 1.6; }
@media (max-width: 900px) {
  html body .about-values { grid-template-columns: 1fr 1fr !important; }
}
@media (max-width: 560px) {
  html body .about-values { grid-template-columns: 1fr !important; }
}

/* --- 2. hero type scale: Prismatech's page-hero h1 and lead --- */
html body .page-intro h1 {
  font-size: clamp(34px, 3.4vw, 56px);
  line-height: 1.2;
  font-weight: 600;
  letter-spacing: -1px;
}
html body .page-intro__description {
  font-size: clamp(16px, 1.5vw, 20px);
  line-height: 1.6;
  max-width: 640px;
  margin-left: auto; margin-right: auto;
}

/* --- 3. Contact page: same 90px rhythm and a centred 820px form ---
         (the plain/layout layers exclude .contact-page, so it kept the
          old full-bleed form; the form's own UI is untouched) --- */
html body.contact-page .section { padding: 90px 28px; }
html body.contact-page .form-card {
  max-width: 820px;
  margin-left: auto; margin-right: auto;
}
html body.contact-page .field input,
html body.contact-page .field select,
html body.contact-page .field textarea,
html body.contact-page .field .file-label { border-radius: 8px; }
html body.contact-page .form-submit {
  align-self: flex-start;
  width: auto;
  padding: 11px 28px;
  font-size: 15px;
  border-radius: 8px;
}
@media (max-width: 560px) {
  html body.contact-page .section { padding-left: 20px; padding-right: 20px; }
  html body.contact-page .form-submit { align-self: stretch; width: 100%; }
  html body.contact-page .form-row { grid-template-columns: 1fr; }
}

/* =====================================================================
   CLIENT LOGO MARQUEE: FULL BLEED (2026-09-08)
   Prismatech puts its marquee straight in a bare <section>, outside the
   1180px .wrap, so the strip runs the whole viewport and the edge mask
   fades it into the page. Sartech's was boxed inside .clients-band__inner
   at 1180px. Drop that constraint on every breakpoint; the track is far
   wider than the viewport (logos are duplicated) so the loop stays
   seamless, and the centred label is unaffected.
   ===================================================================== */
html body .clients-band__inner {
  max-width: none;
  padding-left: 0;
  padding-right: 0;
}

/* =====================================================================
   FOOTER SOCIALS + SUBMIT BUTTON (2026-09-08)
   Both taken from Prismatech. Its icons sit on a dark navy footer, so the
   colours are re-based here for Sartech's white one: navy at rest, each
   brand colour on hover, same 22px size, 18px gap and 2px lift.
   NOTE: like Prismatech's, these are <span> placeholders with no href -
   no real profile URLs are known. Supply them and they become <a>.
   ===================================================================== */
html body .footer .social { display: flex; gap: 18px; margin-top: 22px; }
html body .footer .social span {
  display: inline-flex;
  color: var(--color-primary);
  cursor: default;
  transition: color 0.2s, transform 0.2s;
}
html body .footer .social span:hover { transform: translateY(-2px); }
html body .footer .social .so-youtube:hover   { color: #FF0000; }
html body .footer .social .so-linkedin:hover  { color: #0A66C2; }
html body .footer .social .so-x:hover         { color: #0F1419; }
html body .footer .social svg { width: 22px; height: 22px; }

/* Submit button: Prismatech's geometry, on every form (Contact + Careers).
   Was full-bleed on Careers; now auto width, aligned left, full width on
   phones the way Prismatech's is. */
html body .form-submit {
  align-self: flex-start;
  width: auto;
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 11px 28px;
  font-size: 15px;
  font-weight: 600;
  border-radius: 8px;
}
@media (max-width: 560px) {
  html body .form-submit { align-self: stretch; width: 100%; }
}


/* =====================================================================
   MOBILE MENU = PRISMATECH PATTERN (2026-09-09)
   Sartech already used the same shape (full white panel below the fixed
   header, fading in, scroll locked, accordion sub-menu, CTA at the foot),
   so this aligns the details to Prismatech's: 15px/600 rows on a 28px
   line at 16px vertical padding, a 15/25 panel inset, a plain opacity
   fade with no slide, 14px/500 sub-links indented 14px, and an 8px-radius
   full-width CTA. Breakpoint stays 980px, not Prismatech's 900px, because
   Sartech's nav carries more items and wraps sooner.
   Colours are unchanged: the active row stays navy per this site's own
   convention rather than adopting Prismatech's brighter accent.
   ===================================================================== */
html body .drawer { padding: 15px 25px 28px; }
html body .drawer,
html body.nav-open .drawer {
  transform: none;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}

/* top-level rows */
html body .drawer a {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 15px; font-weight: 600; line-height: 28px;
  padding: 16px 0;
}

/* accordion row + chevron */
html body .drawer .drawer-sub__row a { padding: 13px 0; }
/* the button keeps the site's 44px minimum tap target; only the glyph
   inside it shrinks to Prismatech's 13px */
html body .drawer .drawer-sub__row .nav-caret {
  width: 44px; height: 44px; min-width: 44px; min-height: 44px;
  flex-shrink: 0;
  display: flex; align-items: center; justify-content: flex-end;
}
html body .drawer .drawer-sub__row .nav-caret svg { width: 13px; height: 13px; }

/* sub-links: lighter, smaller, indented */
html body .drawer .drawer-sub__menu { padding: 0 0 10px 14px; }
html body .drawer .drawer-sub__menu a {
  font-size: 14px; font-weight: 500; line-height: 24px; padding: 9px 0;
}

/* CTA at the foot of the panel */
html body .drawer a.drawer__cta {
  justify-content: center;
  margin-top: 18px;
  padding: 14px;
  border-radius: 8px;
  line-height: 1.2;
}

/* =====================================================================
   HEADER WHITE ON EVERY BODY CLASS (2026-09-09)
   The always-white nav layer's strongest selector needs body.has-immersive-hero,
   so on pages using another body class (privacy, terms, the 404) the plain
   layer's `body:not(.contact-page) :is(... .header.is-scrolled ...)` at
   (0,3,1) won and left the header transparent at scroll-top. Invisible over a
   white page, but wrong. Repeated class scores (0,3,2) and settles it.
   ===================================================================== */
html body .header.header.header,
html body.nav-open .header.header.header {
  background: #fff !important;
  background-color: #fff !important;
}

/* =====================================================================
   FORM HONEYPOT (2026-09-10)
   Anti-spam decoy field on the Contact and Careers forms. Off-screen rather
   than display:none so automated form fillers still see (and fill) it;
   real visitors and screen readers never do (aria-hidden, tabindex -1).
   ===================================================================== */
.hp-field { position: absolute !important; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; }

/* =====================================================================
   SELF-HOSTED FONT
   Manrope (OFL), the brand typeface from the Sartech Brand Kit v1.0
   (2026-09-17, replaces Plus Jakarta Sans). One variable woff2 per subset,
   weights 400-700, served from /fonts so font-src stays 'self'. The latin
   file is preloaded on every page; latin-ext only downloads if a page
   uses a character from its range.
   ===================================================================== */
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("fonts/manrope-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: "Manrope";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("fonts/manrope-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;
}

/* =====================================================================
   TEXTAREA CHARACTER COUNTER (2026-09-10)
   The Project description and the careers Short Message now carry a
   maxlength, with the count shown faintly inside the bottom-right of the
   field. Added by script.js, so a no-JS visitor still gets the hard cap
   from the attribute and simply sees no counter.
   Right inset clears the resize grip; the counter carries the field's own
   background so text scrolling underneath cannot show through it.
   ===================================================================== */
.form-card .field.has-counter { position: relative; }
.form-card .field.has-counter textarea { padding-bottom: 32px; }
.form-card .field.has-counter .char-count {
  position: absolute;
  right: 22px;
  bottom: 11px;
  padding: 1px 5px;
  border-radius: 5px;
  background: #fff;
  font-size: 11.5px;
  line-height: 1.5;
  font-variant-numeric: tabular-nums;
  color: var(--muted);
  pointer-events: none;
  transition: color 0.15s;
}
.form-card .field.has-counter .char-count.is-near { color: #b45309; }
.form-card .field.has-counter .char-count.is-full { color: #b42318; font-weight: 600; }
/* script.js wraps the textarea in .ta-box and puts the counter inside that,
   so the counter is anchored to the box itself and the error line appended
   below the field can no longer end up underneath it (it used to be pushed
   onto the error text). */
.form-card .field .ta-box { position: relative; display: block; }
.form-card .field .ta-box textarea { display: block; }

/* =====================================================================
   MOBILE WORDMARK, SIZED LIKE POLARISGRIDS.COM (2026-09-10)
   Measured on their mobile header at 375px: logo 96x19.06, menu glyph
   16x13 - so their mark stands about 1.47x the height of the menu icon
   rather than matching it. Sartech's menu icon renders at 20px on a 256
   viewBox with bars spanning y 56-200, i.e. 144/256 * 20px = 11.25px of
   ink, so 16px gives the same 1.42x relationship. The PNG is trimmed to
   its ink (899x128), so the CSS height is the letter height: 16px tall,
   112px wide, 30% of a 375px screen against their 26%. Their mark carries
   an icon beside the word and is far less wide per unit height, which is
   why width cannot match as well as the proportion does.
   ===================================================================== */
@media (max-width: 980px) {
  html body .header .brand img { height: 16px; }
}

/* =====================================================================
   FOOTER SEPARATED ON EVERY PAGE (2026-09-10)
   The footer's soft grey ground and hairline top edge were only surviving
   on Contact: the plain layer strips background and border from .footer on
   body:not(.contact-page) at (0,3,1) !important. The user asked for the
   Contact treatment site-wide, so this restores it for all pages. Repeated
   class + html body scores (0,3,2) to clear that layer.
   This is a deliberate, narrow exception to the plain rule: the footer is
   the one band that reads as a separate region rather than a card.
   ===================================================================== */
html body .footer.footer.footer {
  background-color: #F7FAFD !important;
  border-top: 1px solid var(--line) !important;
}
html body .footer__bottom.footer__bottom.footer__bottom {
  border-top: 1px solid #E3EBF3 !important;
}

/* =====================================================================
   SUCCESS TICK: NO DISC (2026-09-10)
   The "thank you" panel drew its tick on a 64px light-navy circle. The
   circle is gone; the glyph stays navy at the same 64px so nothing else
   in the panel shifts.
   This also fixes the Careers form, where the tick was INVISIBLE: the
   plain layer forces width/height:auto on .fs-ic for every page except
   Contact, and the inline <svg> carries no width attribute, so it
   collapsed to 0x0 and a successful applicant saw no tick at all.
   Repeated class + html body scores (0,3,2) to clear that layer.
   ===================================================================== */
html body .form-card .fs-ic.fs-ic {
  background: none !important;
  background-color: transparent !important;
  border-radius: 0 !important;
  width: 64px !important;
  height: 64px !important;
  color: var(--color-primary) !important;
}
html body .form-card .fs-ic.fs-ic svg {
  width: 64px !important;
  height: 64px !important;
  display: block;
  color: var(--color-primary) !important;
}

/* =====================================================================
   HEADER WORDMARK NEVER DISTORTS (2026-09-10)
   Between ~981px and ~1180px the centred nav leaves the logo's grid column
   narrower than the wordmark. The global img{max-width:100%} then clamped
   its WIDTH while the fixed 26px HEIGHT stayed, so the letters were
   squashed sideways (aspect 4.3 at 1000px against the true 7.02). It was
   already slightly off at 1000px, and adding Careers to the nav made it
   worse. object-fit:contain draws the artwork in proportion inside the same
   box, so in the tight range the wordmark simply renders smaller, and from
   ~1180px up it is full size exactly as before. The box itself does not
   change, so nothing else in the header moves or collides.
   ===================================================================== */
html body .header .brand img {
  object-fit: contain;
  object-position: left center;
}

/* =====================================================================
   FLOATING BUTTONS: CAREERS + BACK TO TOP (2026-09-10)
   Prismatech's bottom-right pair (WhatsApp below, back-to-top above) with
   a Careers button in the brand-colour slot. Sartech used to have exactly
   this stack; the WhatsApp FAB was removed and back-to-top slid into the
   corner.
   BUG FIXED HERE: back-to-top was INVISIBLE on every page except Contact.
   The plain layer strips .to-top to background:transparent at (0,3,1)
   !important, which beat the navy fill meant for it at (0,2,1), while that
   rule's white icon colour survived - a white arrow on nothing. The
   strip's heaviest :is() argument is two classes (.header.is-scrolled),
   so it scores (0,3,1): the override needs the class THREE times plus
   html body to reach (0,3,2). Two repeats is only (0,2,2) and loses on
   background, border and shadow while still winning colour and radius,
   which makes it look half-fixed - that exact mistake was made first.
   Both are 48px circles (>=44px tap target): back-to-top white with a navy
   arrow, Careers navy with a white briefcase. Careers is always shown and
   is left off careers.html itself; back-to-top still appears after 400px
   of scroll (script.js) and stacks above Careers wherever Careers exists,
   via the sibling combinator, so on /careers it keeps the corner.
   Layering: header 120, drawer scrim 130 and modal 160 all sit above these
   (z 91), so an open menu or modal always covers them.
   ===================================================================== */
html body .to-top.to-top.to-top {
  right: 22px !important;
  bottom: 22px !important;
  width: 48px;
  height: 48px;
  border-radius: 50% !important;
  background-color: #fff !important;
  color: var(--color-primary, #10283F) !important;
  border: 1px solid #E3EBF3 !important;
  box-shadow: 0 6px 18px rgba(16, 40, 63, 0.14) !important;
}
html body .careers-float ~ .to-top.to-top { bottom: 82px !important; }

html body .careers-float.careers-float {
  position: fixed;
  right: 22px;
  bottom: 22px;
  z-index: 91;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #0070D9 !important;
  color: #fff !important;
  border: 0 !important;
  box-shadow: 0 6px 18px rgba(16, 40, 63, 0.24) !important;
  text-decoration: none;
  transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
html body .careers-float.careers-float svg { width: 21px; height: 21px; }
html body .careers-float.careers-float:hover { transform: translateY(-2px); }

/* "Careers" label beside the button: mouse and trackpad only, since touch
   has no hover and a tap goes straight to the page anyway */
.careers-float__label {
  position: absolute;
  right: calc(100% + 10px);
  top: 50%;
  transform: translate(4px, -50%);
  padding: 6px 10px;
  border-radius: 6px;
  background: #0070D9;
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s, transform 0.15s;
}
@media (hover: hover) and (pointer: fine) {
  .careers-float:hover .careers-float__label,
  .careers-float:focus-visible .careers-float__label { opacity: 1; transform: translate(0, -50%); }
}

/* out of the way while the mobile menu is open (they are inert then too) */
body.nav-open .careers-float,
body.nav-open .to-top { opacity: 0 !important; visibility: hidden !important; }

@media (prefers-reduced-motion: reduce) {
  html body .careers-float.careers-float,
  .careers-float__label { transition: none; }
  html body .careers-float.careers-float:hover { transform: none; }
}

/* =====================================================================
   FOOTER = POLARIS-SIMPLE (2026-09-10)
   Modelled on polarisgrids.com: column one is the logo, then address,
   phone and email (phone and email are tap-to-call / tap-to-email links),
   the ISO line and the social icons; then Products, Company and a Legal
   column. The bottom bar is the copyright line only. Removed on request:
   the company description paragraph and the tagline.
   Desktop grid only - the existing 2-column (<=900px) and 1-column
   (<=560px) footer rules still govern smaller screens, so this is scoped
   to min-width 901px rather than overriding them.
   ===================================================================== */
@media (min-width: 901px) {
  html body .footer .footer__grid { grid-template-columns: 1.7fr 1fr 1fr 1fr; }
}
.footer__contact p { margin: 0; font-size: 14px; line-height: 1.6; color: #52606D; max-width: 300px; }
.footer__contact .footer__contact-label {
  margin-top: 14px; font-size: 12px; font-weight: 600; letter-spacing: 0.12em;
  text-transform: uppercase; color: var(--color-primary, #10283F);
}
.footer__contact .footer__contact-label:first-child { margin-top: 0; }
.footer__contact a { color: #52606D; transition: color 0.2s; }
.footer__contact a:hover, .footer__contact a:focus-visible { color: var(--color-primary, #10283F); }
html body .footer .footer__bottom { display: block; text-align: center; }
/* the copyright is now the only <p> in the bar, so the old tagline rule
   .footer__bottom p:last-child (weight 500/600) was catching it */
html body .footer .footer__bottom p { font-weight: 400; }

/* Footer contact block without its Address / Phone / Email labels
   (removed on request 2026-09-10): a small gap keeps the three lines apart. */
.footer__contact p + p { margin-top: 10px; }

/* =====================================================================
   CONSENT ERROR BELOW THE ROW (2026-09-10)
   script.js now places the consent error AFTER the consent label instead
   of inside its flex row, where it was a squeezed third column on phones.
   Indented to line up with the consent text (22px box + 10px gap) and
   pushed clear of the 6px red outline drawn round the row in error.
   ===================================================================== */
.form-consent + .form-error { margin: 14px 0 0 32px; }

/* =====================================================================
   HUMAN CHECK (Cloudflare Turnstile, 2026-09-10)
   Sits between the consent row and the status line on both forms. It uses
   interaction-only appearance, so for almost every visitor nothing shows;
   when Cloudflare does want a click, a full-width box appears here.
   While invisible, a negative margin cancels the form 16px row gap so the
   empty widget adds no space above the button. script.js adds .is-shown
   when Cloudflare is about to show a challenge, restoring normal spacing.
   ===================================================================== */
.form-card .cf-turnstile { margin-top: -16px; }
.form-card .cf-turnstile.is-shown { margin-top: 0; }

/* =====================================================================
   CAREERS FORM WIDTH ON PHONES (2026-09-11)
   The careers form card has no border, background or shadow, yet it kept
   24px side padding (the plain layer that zeroes card padding skips it).
   On a 375px phone that left the fields 287px wide, narrower than the
   300px minimum of the Cloudflare human check, so its box stuck out past
   the fields. Dropping the side padding on phones gives the form the full
   column (335px at 375, 320px at 360) and lines the fields up with the
   section heading. Desktop keeps its padding.
   ===================================================================== */
@media (max-width: 600px) {
  html body .form-card.careers-form-card { padding-left: 0; padding-right: 0; }
}

/* =====================================================================
   FOOTER SOCIAL LINKS (2026-09-11)
   LinkedIn is now a real link (https://www.linkedin.com/company/sartechindia/).
   The placeholder rules above only style <span>, so links get the same look:
   navy icon, 22px, brand colour and a 2px lift on hover, plus a pointer
   cursor and a visible keyboard focus ring. YouTube and X are still
   <span> placeholders until their profile URLs exist (Instagram was removed
   2026-10-03).
   ===================================================================== */
html body .footer .social a {
  display: inline-flex;
  color: var(--color-primary);
  text-decoration: none;
  cursor: pointer;
  border-radius: 4px;
  transition: color 0.2s, transform 0.2s;
}
html body .footer .social a:hover { transform: translateY(-2px); }
html body .footer .social a.so-linkedin:hover { color: #0A66C2; }
html body .footer .social a:focus-visible { outline: 2px solid #0070D9; outline-offset: 3px; }

/* =====================================================================
   PRISMATECH TEXT WIDTHS (2026-09-14)
   Headings, subheadings and body copy use the same desktop widths as the
   Prismatech site, so text fills the 1180px container instead of sitting
   in narrow 520-840px columns:
     page title block 1100, intro paragraph 900,
     section heading block 1100 with its lead paragraph full width,
     About intro paragraphs 900, CTA block 1000 (its paragraph stays 520,
     as on Prismatech), legal pages the full content width (Prismatech
     .prose), product overview prose 900.
   Prismatech narrows section heads to 820px at 1500px and wider; that
   part is deliberately not copied.
   Specificity: each rule beats the older plain/layout layers, which top
   out at (0,3,1), without !important.
   ===================================================================== */
html body .page-intro__inner.page-intro__inner { width: min(1100px, 100%); }
html body .page-intro__description.page-intro__description { max-width: 900px; }
html body .head.head.head { max-width: 1100px; }
html body .head.head .lead.lead { max-width: none; }
html body .quality-head.quality-head { max-width: 1100px; }
html body .quality-head.quality-head :is(.lead, .sub) { max-width: none; }
html body .about-intro.about-intro.about-intro { max-width: 900px; }
html body .cta .cta__inner.cta__inner { max-width: 1000px; }
html body .process__sub.process__sub { max-width: 1100px; }
html body .work-with-us.work-with-us p { max-width: 1100px; }
html body .legal.legal { max-width: none; }
html body .pdp-prose { max-width: 900px; }

/* Legal and 404 title block (plain .page-hero with .inner, used by privacy,
   terms and 404 only) gets the same widths as the other page titles:
   1100px block, 900px line under the heading, like Prismatech legal pages.
   The contact page keeps its own 1200px .contact-page .page-hero .inner. */
html body:not(.contact-page) .page-hero .inner.inner { max-width: 1100px; }
html body:not(.contact-page) .page-hero .inner p { max-width: 900px; }

/* 404 page (2026-09-14): the text-to-buttons gap was 192px (hero padding
   92 + section padding 48 + actions margin 34). Now about 40px. Scoped to
   the .not-found-actions section so privacy/terms, which share the
   has-dark-hero body class, are untouched. */
html body .page-hero:has(+ .not-found-actions) { padding-bottom: 24px; }
html body .section.not-found-actions { padding-top: 0; }
html body .not-found-actions .page-intro__actions { margin-top: 0; }


/* =====================================================================
   PRODUCT HERO: STACKED AND CENTRED (2026-09-16)
   Both product pages had a two-column hero (copy left, image right).
   Now: image on top (centred, max 760px), then kicker, heading and lead
   centred beneath it. `order: -1` moves the figure visually without
   moving the <h1> down in the markup.
   ===================================================================== */
html body .pdp-hero.pdp-hero {
  grid-template-columns: 1fr;
  gap: 30px;
  justify-items: center;
  text-align: center;
}
html body .pdp-hero .pdp-figure { order: -1; width: 100%; max-width: 760px; }
html body .pdp-hero .pdp-hero__copy { max-width: 900px; text-align: center; }
html body .pdp-hero .pdp-hero__copy .lead {
  max-width: 900px; margin-left: auto; margin-right: auto; text-align: center;
}

/* Product sub-nav (Overview / Features / ...) is sticky under the header, so
   it needs a solid white ground - page text was scrolling through it. The
   plain layer clears .pdp-subnav backgrounds with !important, so this rule
   needs both higher specificity and !important. Still borderless. */
html body .pdp-subnav.pdp-subnav.pdp-subnav { background-color: #fff !important; }
/* NOTE: the class is repeated THREE times on purpose. The plain layer's
   :is(...) list contains two-class arguments (e.g. .legal .updated), so
   :is() takes (0,2,0) and the whole rule scores (0,3,1) - a two-class
   override at (0,2,2) loses to it even with !important. */

/* =====================================================================
   HEADING / TEXT CONSISTENCY PASS (2026-09-16)
   1. Page titles were 49px on the marketing pages (.page-intro h1, which a
      later layer scales by viewport) but 45px on privacy, terms and the two
      product pages, which still used the base --fs-h1. All four now use the
      same scale.
   2. Legal body copy was 20px across the full 1124px content width, giving
      very long lines. Prismatech sets its full-width .prose at 16.5px/1.78;
      the legal pages now match that.
   ===================================================================== */
html body .page-hero h1,
html body .pdp-hero__copy .h1 { font-size: clamp(34px, 3.4vw, 56px); }
html body .legal.legal p,
html body .legal.legal li { font-size: 16.5px; line-height: 1.78; }

/* =====================================================================
   PAGE HERO BAND (2026-09-16)
   Shared, reusable hero used by Products, Capabilities and Industries.
   The page passes its artwork as a property on the section itself:
     <section class="hero-band" style="--hero-band-image: url('x.webp')">
       <div class="hero-band__inner"><h1>..</h1><p class="hero-band__text">..</p></div>
     </section>
   The artwork is purely decorative, so it is a CSS background with no
   <img> and nothing for a screen reader to announce. Text stays real HTML.
   Desktop holds the artwork's 3:1 shape so both edge illustrations stay
   visible; phones drop the image for a pale ground behind centred copy.
   ===================================================================== */
.hero-band {
  position: relative;
  display: flex; align-items: center; justify-content: center;
  width: 100%;
  padding: clamp(56px, 7vw, 96px) 28px;
  background-color: #EAF4FC;                      /* pale blue, matches the art */
  background-image: var(--hero-band-image, none);
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
}
.hero-band__inner { width: 100%; max-width: 560px; margin: 0 auto; text-align: center; }
html body .hero-band h1 {
  margin: 0;
  color: var(--color-primary);
  font-size: clamp(30px, 3.2vw, 50px);
  line-height: 1.14; letter-spacing: -1px; font-weight: 600;
  text-wrap: balance;
}
html body .hero-band h1 .accent { color: inherit; }
html body .hero-band .hero-band__text {
  margin: 16px auto 0; max-width: 520px;
  color: var(--body-2);
  font-size: clamp(16px, 1.25vw, 19px); line-height: 1.65;
}
/* desktop: keep the 3:1 band so neither glass panel is cropped away */
@media (min-width: 981px) {
  .hero-band { aspect-ratio: 3 / 1; min-height: 340px; max-height: 560px; padding-block: 40px; }
}
@media (min-width: 1400px) {
  .hero-band__inner { max-width: 640px; }
  html body .hero-band .hero-band__text { max-width: 600px; }
}
/* tablet: shallower band and narrower copy, clear of the illustrations */
@media (min-width: 641px) and (max-width: 980px) {
  .hero-band { aspect-ratio: 5 / 2; min-height: 300px; padding: 44px 24px; }
  .hero-band__inner { max-width: 440px; }
  html body .hero-band .hero-band__text { max-width: 420px; }
}
/* phones: artwork hidden so it never competes with the text */
@media (max-width: 640px) {
  .hero-band { background-image: none; background-color: #F7FAFD; padding: 52px 20px 44px; }
  .hero-band__inner { max-width: 100%; }
  html body .hero-band .hero-band__text { max-width: 100%; }
}

/* ============================================================
   CAREERS HERO - new isometric artwork (2026-09-16)
   The artwork is cropped to its own edges, so the hero field has
   to match its white canvas or a seam shows at the contained
   edges. The old warm-grey field belonged to the previous image.
   ============================================================ */
html body .page-hero--careers.page-hero--careers { background-color: #fff; }

/* The previous artwork carried its own top padding; this one starts
   ~24px from the frame, so the inset that clears the 76px header has
   to grow. Contained and height-limited at desktop, the scaled top
   margin is only ~16px, so 76px of inset lands the artwork at ~92px. */
@media (min-width: 769px) {
  html body .page-hero--careers.page-hero--careers .hero__image {
    top: 76px;
    height: calc(100% - 76px);
  }
}

/* ============================================================
   CONTACT HERO - new support illustration (2026-09-16)
   Replaces the layered navy parallax artwork. The illustration
   is cropped to its own edges on a white canvas, so the hero
   field turns white and the image is contained and centred, the
   same treatment the careers hero uses.
   ============================================================ */
html body.contact-page .contact-hero.contact-hero {
  background-color: #fff;
  background-image: none;
}
html body.contact-page .contact-hero.contact-hero .hero__image {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: contain; object-position: center;
  display: block;
}
/* clear the 76px header, as on careers */
@media (min-width: 769px) {
  html body.contact-page .contact-hero.contact-hero .hero__image {
    top: 76px;
    height: calc(100% - 76px);
  }
}

/* ============================================================
   HOME HERO - keep the operator in frame on phones and tablets
   The worker sits in the right third of the photo (hands ~63%,
   face ~81% of its width). A centred cover crop keeps only the
   middle 38-60% below 981px, which cut them out. 88% keeps the
   face, hands and the press they work at in frame from 360px up.
   ============================================================ */
@media (max-width: 980px) {
  html body .page-hero--home .hero__image { object-position: 88% center; }
}

/* ============================================================
   HERO BAND ON PHONES - show the cover artwork
   The phone rule above switched the artwork off. The cover's
   graphics sit in its top-left and bottom-right corners with an
   empty centre, so it can stay behind the text. A little more
   vertical padding lets both corners show above and below it.
   ============================================================ */
@media (max-width: 640px) {
  html body .hero-band.hero-band {
    background-image: var(--hero-band-image, none);
    background-size: cover;
    background-position: center;
    padding: 68px 20px 60px;
  }
}

/* ============================================================
   ILLUSTRATED HEROES ON PHONES - image in normal flow
   Contact and Careers contained their artwork inside a hero whose
   height follows the screen height (min 50svh), so the artwork
   floated at a different spot on every phone, with empty bands
   above and below it or tucked up under the header. Below 769px
   the image now sits in flow at its own proportions, full width,
   straight under the header, and the page intro follows it.
   ============================================================ */
@media (max-width: 768px) {
  html body.contact-page .contact-hero.contact-hero,
  html body .page-hero--careers.page-hero--careers {
    display: block;
    height: auto; min-height: 0; max-height: none;
    margin-top: 0;
    padding: 16px 20px 0;
  }
  html body.contact-page .contact-hero.contact-hero .hero__image,
  html body .page-hero--careers.page-hero--careers .hero__image {
    position: relative; inset: auto; top: auto;
    width: 100%; max-width: 560px; height: auto;
    margin: 0 auto;
  }
}

/* ============================================================
   ONE HERO SIZE ON PHONES (2026-09-16)
   Every page's hero is the same box below 641px: full screen
   width, directly under the header, and one shared height that
   scales with the screen width. Before this, heroes ran from
   257px to 422px tall on the same 390px phone.
   - photo heroes (Home, About): the photo covers the box
   - illustrated heroes (Careers, Contact) and product pages:
     the artwork is contained and centred in the box
   - text heroes (Products, Capabilities, Industries, Privacy,
     Terms, 404): copy centred; the box only grows if a very
     narrow screen cannot fit the copy
   ============================================================ */
@media (max-width: 640px) {
  :root { --m-hero-h: clamp(280px, 82vw, 380px); }

  /* photo heroes */
  html body .page-hero--home.page-hero--home,
  html body .page-hero--about.page-hero--about {
    height: var(--m-hero-h); min-height: 0; max-height: none;
    margin-top: 0; padding: 0;
  }

  /* illustrated heroes */
  html body .page-hero--careers.page-hero--careers,
  html body.contact-page .contact-hero.contact-hero {
    position: relative; display: block;
    height: var(--m-hero-h); min-height: 0; max-height: none;
    margin-top: 0; padding: 0;
  }
  html body .page-hero--careers.page-hero--careers .hero__image,
  html body.contact-page .contact-hero.contact-hero .hero__image {
    position: absolute; top: 16px; left: 20px; right: auto; bottom: auto;
    width: calc(100% - 40px); height: calc(100% - 32px); max-width: none;
    margin: 0; object-fit: contain; object-position: center;
  }

  /* text heroes: Products, Capabilities, Industries */
  html body .hero-band.hero-band {
    min-height: var(--m-hero-h); height: auto;
    padding: 28px 20px;
  }

  /* text heroes: Privacy, Terms, 404 */
  html body section.page-hero:not(.page-hero--immersive) {
    display: flex; align-items: center; justify-content: center;
    min-height: var(--m-hero-h); height: auto;
    margin-top: 0; padding: 28px 20px;
    box-sizing: border-box;
  }
  html body section.page-hero:not(.page-hero--immersive) .inner { width: 100%; }

  /* product pages: the product image gets the same box */
  html body .pdp-hero-wrap.pdp-hero-wrap { padding-top: 0; }
  /* minmax(0, 1fr): a plain 1fr column grows to the image's natural
     width (1200px+), which pushed the page into sideways scroll */
  html body .pdp-hero.pdp-hero { grid-template-columns: minmax(0, 1fr); }
  html body .pdp-hero.pdp-hero > * { min-width: 0; }
  html body .pdp-hero.pdp-hero .pdp-figure {
    display: flex; align-items: center; justify-content: center;
    width: calc(100% + 40px); max-width: none; margin: 0 -20px;
    height: var(--m-hero-h); padding: 16px 20px; box-sizing: border-box;
  }
  html body .pdp-hero.pdp-hero .pdp-figure img {
    width: 100%; height: 100%; min-width: 0; max-width: 100%; object-fit: contain;
  }
}

/* ======================================================================
   SARTECH BRAND SYSTEM v1.0 (2026-09-17)
   From Sartech_Brand_Kit_v1.0: new S-mark logo, palette and Manrope.
   - Midnight Navy carries text and authority, Sartech Blue carries
     recognition: buttons, number discs, icons, focus and active states.
   - Steel for body copy, Mist and Cloud for tinted surfaces.
   - Manrope: headings SemiBold 600, UI and labels Medium 500, body 400.
   - Logo: supplied gradient artwork only, never below 160px wide.
   Earlier layers were re-pointed in place (navy fills to blue, navy text
   to midnight); this layer re-bases every shared token onto the kit.
   ====================================================================== */
:root {
  /* brand kit tokens, as supplied in Sartech_Brand_Tokens.css */
  --sartech-blue: #0070d9;
  --sartech-signal-blue: #0085e9;
  --sartech-deep-blue: #0051a9;
  --sartech-midnight-navy: #10283f;
  --sartech-steel: #52606d;
  --sartech-mist: #eaf4fc;
  --sartech-cloud: #f7fafd;
  --sartech-white: #ffffff;
  --sartech-gradient: linear-gradient(180deg, #0085e9 0%, #0051a9 100%);
  --sartech-font: "Manrope", system-ui, -apple-system, "Segoe UI", sans-serif;

  /* site tokens re-based onto the kit */
  --font: var(--sartech-font);
  --color-primary: var(--sartech-midnight-navy);
  --color-primary-hover: var(--sartech-deep-blue);
  --color-primary-soft: var(--sartech-mist);
  --color-accent: var(--sartech-blue);
  --color-accent-ink: var(--sartech-blue);
  --color-accent-soft: var(--sartech-mist);
  --color-background: var(--sartech-white);
  --color-background-soft: var(--sartech-cloud);
  --color-surface: var(--sartech-white);
  --color-text: var(--sartech-midnight-navy);
  --color-text-muted: var(--sartech-steel);
  --color-border: #dce6f0;

  --ink: var(--sartech-midnight-navy);
  --label: var(--sartech-midnight-navy);
  --body: var(--sartech-steel);
  --body-2: var(--sartech-steel);
  --muted: var(--sartech-steel);
  --faint: #8a96a3;

  --navy: var(--sartech-midnight-navy);
  --navy-deep: var(--sartech-midnight-navy);
  --blue: var(--sartech-blue);
  --blue-2: var(--sartech-blue);
  --cyan: var(--sartech-blue);
  --cyan-ink: var(--sartech-blue);
  --cyan-light: var(--sartech-mist);

  --bg: var(--sartech-white);
  --bg-alt: var(--sartech-cloud);
  --bg-soft: var(--sartech-cloud);
  --line: #e3ebf3;
  --line-2: #e3ebf3;
  --line-soft: #edf2f7;
  --line-input: #dce6f0;
  --chip: var(--sartech-cloud);
  --chip-line: #e3ebf3;
  --chip-blue: var(--sartech-mist);
  --chip-blue-line: #dce6f0;

  --grad-accent: linear-gradient(100deg, var(--sartech-blue), var(--sartech-blue));
  --grad-navy: linear-gradient(180deg, var(--sartech-midnight-navy), var(--sartech-midnight-navy));
  --conic: conic-gradient(from 160deg, var(--sartech-blue), var(--sartech-signal-blue), var(--sartech-blue));
}

html body { font-family: var(--sartech-font); font-weight: 400; }
html body ::selection { background: rgba(0, 112, 217, 0.18); }

/* --- type weights: headings 600, UI and labels 500, body 400 --- */
html body :is(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3) { font-weight: 600 !important; }
html body :is(.btn, .form-submit, .drawer__cta, .nav a, .nav-dropdown a, .drawer a,
  .field label, .form-consent, .kicker, .pdp-subnav a, .spec-chips span, .pill) { font-weight: 500 !important; }
/* the current page in the nav: SemiBold and Sartech Blue */
html body .nav a.is-active,
html body .nav a[aria-current="page"],
html body .drawer a.is-active,
html body .drawer a[aria-current="page"] { font-weight: 600 !important; color: var(--sartech-blue) !important; }
/* Display line height from the kit: 56 / 64 */
html body :is(h1, .h1) { line-height: 1.143 !important; }

/* --- recognition blue on icons and small accents --- */
html body :is(.industry-card__ic, .about-value__ic, .hero-badge__ic) svg { color: var(--sartech-blue); }

/* --- logo: supplied artwork, 160px minimum width (4.59:1, so 35px tall) --- */
html body .header .brand img { height: 36px; width: auto; }
@media (max-width: 980px) {
  html body .header .brand img { height: 35px; }
}
html body .footer__brand,
html body .footer .footer__brand { height: 36px; width: auto; }

/* ======================================================================
   HEADER: SOLID WHITE (2026-09-17)
   The transparent-at-the-top header (Polaris-style, with the hero sliding
   up behind it) was removed at the user's request the same day. The bar
   is solid white on every page and at every scroll position, heroes start
   below it, and a soft shadow appears once the page scrolls.
   ====================================================================== */
html body .header.header.header.header {
  background: #fff !important;
  background-color: #fff !important;
  background-image: none !important;
  box-shadow: none !important;
  transition: box-shadow 0.3s ease;
}
html body .header.header.header.header.is-scrolled { box-shadow: 0 4px 28px rgba(16, 40, 63, 0.07) !important; }

/* ======================================================================
   BACK TO TOP: SARTECH BLUE ON HOVER AND PRESS (2026-09-17)
   White circle at rest; hover, keyboard focus and press fill it with
   Sartech Blue and a white arrow (Deep Blue while pressed).
   ====================================================================== */
html body .to-top.to-top.to-top {
  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, opacity 0.25s ease, transform 0.25s ease;
}
html body .to-top.to-top.to-top:is(:hover, :focus-visible) {
  background-color: var(--sartech-blue) !important;
  border-color: var(--sartech-blue) !important;
  color: #fff !important;
}
html body .to-top.to-top.to-top:active {
  background-color: var(--sartech-deep-blue) !important;
  border-color: var(--sartech-deep-blue) !important;
  color: #fff !important;
}

/* menu icon on the white bar */
html body .header.header.header.header .headerbar .menu-btn { color: var(--sartech-blue) !important; } /* (0,6,2): beats the old image-hero rule (0,5,0) */

/* ======================================================================
   POLARIS-STYLE COLOUR (2026-09-17), in Sartech colours
   Measured on polarisgrids.com: every heading in a deep blue (#0A3690),
   nav links and carets in the brand blue (#144BBD), dropdown items in a
   dark neutral, body copy in slate. Mapped onto the brand kit:
   - headings (page, section, card, footer titles): Deep Blue #0051A9
   - nav links, dropdown carets, menu icon, phone menu links: Sartech Blue
   - dropdown and phone sub-menu items: Midnight Navy, Sartech Blue on hover
   - body copy stays Steel; white still sits over the Home/About photos
     (those rules were raised to (0,8,3) so these cannot override them)
   ====================================================================== */
html body :is(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3) { color: var(--sartech-deep-blue) !important; }

/* top-level nav on the white bar */
html body .header.header.header.header .nav.nav.nav > a,
html body .header.header.header.header .nav.nav.nav > .nav-item > a,
html body .header.header.header.header .nav.nav.nav > .nav-item > .nav-caret {
  color: var(--sartech-blue) !important;
}
html body .header.header.header.header .nav.nav.nav > a:hover,
html body .header.header.header.header .nav.nav.nav > .nav-item > a:hover {
  color: var(--sartech-deep-blue) !important;
}

/* dropdown panel items */
html body .header .nav .nav-dropdown.nav-dropdown a { color: var(--sartech-midnight-navy) !important; }
html body .header .nav .nav-dropdown.nav-dropdown a:hover,
html body .header .nav .nav-dropdown.nav-dropdown a.is-active { color: var(--sartech-blue) !important; background: none !important; }

/* phone menu */
html body .drawer.drawer > a:not(.drawer__cta),
html body .drawer.drawer .drawer-sub__row > a,
html body .drawer.drawer .drawer-sub__row .nav-caret { color: var(--sartech-blue) !important; }
html body .drawer.drawer .drawer-sub__menu a { color: var(--sartech-midnight-navy) !important; }
html body .drawer.drawer .drawer-sub__menu a:hover,
html body .drawer.drawer .drawer-sub__menu a.is-active { color: var(--sartech-blue) !important; }
/* footer column titles are <p class="footer-title">, not headings */
html body .footer .footer-title.footer-title { color: var(--sartech-deep-blue) !important; }
/* the closing call-to-action band's heading is pinned by the plain layer
   at (0,2,2) !important; this outranks it */
html body:not(.contact-page) .cta.cta h2 { color: var(--sartech-deep-blue) !important; }

/* item titles that are not heading tags take the heading blue too:
   home Quality & Testing items, Capabilities process steps, and the
   How It Works steps on both product pages */
html body .quality-item.quality-item > span,
html body .process-step.process-step > strong,
html body .pdp-step.pdp-step > strong { color: var(--sartech-deep-blue) !important; }

/* ABOUT: intro and "Who We Are" merged into one block (2026-09-17);
   the Vision / Mission / Commitment cards follow it at Home's 44px gap */
html body .page-intro--about.page-intro--about { padding-bottom: 0 !important; }
html body .section#company { padding-top: 44px !important; }

/* the bar is content-sized: between ~981 and ~1049px the Contact button
   hides and it shrank to 68px, so heroes pulled up by --header-h (76px)
   started 8px above the viewport. Hold it at 76px at every width. */
html body .header .headerbar { min-height: var(--header-h); box-sizing: border-box; }

/* ======================================================================
   LUCIDE ICONS (2026-09-17)
   Every interface icon is now a Lucide line icon (24px grid, round caps),
   inlined as SVG; only the four social brand marks keep their logos.
   One treatment for the icon-over-title cards (Home + Industries
   industry cards, Vision / Mission / Commitment, product application
   cards): a 32px Sartech Blue icon with a 1.75 stroke, 14px above a
   Deep Blue SemiBold title. The old 50px empty tile is gone, which is
   what left the labels floating far below their icons.
   ====================================================================== */
html body .lucide { flex-shrink: 0; }

html body .industry-card__ic.industry-card__ic.industry-card__ic,
html body .about-value__ic.about-value__ic.about-value__ic {
  width: auto !important; height: auto !important;
  background: none !important; border: 0 !important; box-shadow: none !important;
  margin: 0 auto 14px !important; padding: 0 !important;
  color: var(--sartech-blue) !important;
  display: flex !important; justify-content: center;
}
html body .industry-card__ic.industry-card__ic.industry-card__ic svg,
html body .about-value__ic.about-value__ic.about-value__ic svg,
html body .pdp-app-card.pdp-app-card.pdp-app-card svg {
  width: 32px !important; height: 32px !important;
  stroke-width: 1.75;
  color: var(--sartech-blue) !important;
}
/* industry and application titles read as card titles */
html body .industry-card.industry-card.industry-card > span,
html body .pdp-app-card.pdp-app-card.pdp-app-card > span {
  color: var(--sartech-deep-blue) !important;
  font-weight: 600 !important;
  font-size: 16px !important;
  line-height: 1.4;
}
html body button.industry-card.industry-card:hover > span { color: var(--sartech-blue) !important; }
/* one 14px icon-to-title gap: the cards are flex columns with a 14px gap,
   so the icon wrapper itself carries no bottom margin */
html body .industry-card.industry-card .industry-card__ic.industry-card__ic.industry-card__ic { margin: 0 auto !important; width: auto !important; height: auto !important; min-height: 0 !important; }
html body .about-value.about-value .about-value__ic.about-value__ic.about-value__ic { margin: 0 auto !important; width: auto !important; height: auto !important; min-height: 0 !important; }
html body .about-value.about-value h3 { margin-top: 0 !important; }
html body .pdp-app-card.pdp-app-card.pdp-app-card { gap: 14px !important; }

/* new high-resolution logo (Logo Main, 4.40:1): 36px tall is 158px wide,
   so phones use 36px too to stay at the kit's ~160px minimum */
@media (max-width: 980px) {
  /* matched to prismatech.co.in, whose phone header logo is 33px tall
     (148.5 x 33 at 390px wide); ours is 147 x 33 at the same width */
  html body .header .brand img { height: 33px; }
}

/* ======================================================================
   PRODUCT PAGES: COVER HERO WITH THE PRODUCT PHOTO (2026-09-17)
   Monochrome LCD and LED Backlight open with the same hero-band cover as
   Products, Capabilities and Industries, but the band holds the product
   photo; the page title (h1) and its description sit under the
   Product Overview heading, where the photo was first placed.
   ====================================================================== */
html body .hero-band__inner--figure.hero-band__inner--figure { max-width: 760px; height: 100%; display: flex; align-items: center; justify-content: center; }
html body .hero-band__figure { margin: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; }
html body .hero-band__figure img { width: 100%; height: auto; max-height: 100%; object-fit: contain; display: block; }
@media (min-width: 981px) {
  /* the band is clamp(340px, 33.333vw, 560px) tall with 40px padding top and bottom */
  html body .hero-band__figure,
  html body .hero-band__figure img { max-height: min(360px, calc(clamp(340px, 33.333vw, 560px) - 100px)); }
}
/* the LCD photo sits on a white background; multiply lets the cover show
   through the white so no white box appears (the backlight PNG is already
   transparent) */
html body .hero-band__figure img[src*="sartech-monochrome-lcd"] { mix-blend-mode: multiply; }
@media (max-width: 980px) {
  html body .hero-band__figure img { max-height: 240px; }
}
@media (max-width: 640px) {
  html body .hero-band__figure img { max-height: 220px; }
}

html body .pdp-title { max-width: 900px; margin: 0 auto 44px; text-align: center; }
html body .pdp-title h1 { margin: 0; font-size: clamp(34px, 3.4vw, 56px); line-height: 1.143; letter-spacing: -1px; }
html body .pdp-title .pdp-title__text { margin: 16px auto 0; font-size: clamp(16px, 1.5vw, 20px); line-height: 1.6; color: var(--sartech-steel); }
@media (max-width: 640px) {
  html body .pdp-title { margin-bottom: 28px; }
}

/* phone header gutters matched to prismatech.co.in: 20px each side
   (ours were 28px, so the logo sat 8px further in) */
@media (max-width: 980px) {
  html body .header .headerbar { padding-left: 20px; padding-right: 20px; }
}

/* Careers "Why Sartech" cards: same icon treatment as the Vision / Mission /
   Commitment and industry cards — a 32px Sartech Blue Lucide icon, 14px above
   the title. Uses its own class because .cap-card__ic is the numbered badge. */
html body .cap-card__glyph {
  display: flex; justify-content: center;
  margin: 0 0 14px; padding: 0; color: var(--sartech-blue);
}
html body .cap-card__glyph svg {
  width: 32px; height: 32px; stroke-width: 1.75; color: var(--sartech-blue);
}
