/* ============================================================================
   Dynamic Captioning — styles
   ----------------------------------------------------------------------------
   • Design tokens (colours, accents) live in :root, with a [data-theme="light"]
     override. Dark is the default; the header toggle flips it (persisted in
     localStorage as "dc-theme").
   • Each service has an accent family applied with a context class:
       .s-cyan  .s-blue  .s-violet     →  sets --ac
     Everything inside then themes off var(--ac) and the --ac-NN tints.
   • Responsive is plain CSS media queries (desktop nav ≥ 901px).
   ========================================================================== */

/* ---- tokens --------------------------------------------------------------- */
:root{
  --bg:#18243A; --surface:#101A2A; --surface-2:#0F1828; --stat:#15213A;
  --header-bg:rgba(24,36,58,.72); --mnav-bg:rgba(24,36,58,.98);
  --text:#ECF1FA; --muted:#93A0B8; --soft:#AEBACE; --soft2:#8A97AD; --dim:#5B6981; --dim2:#7C89A0; --faint:#6b7c98; --media-ic:#46597a; --bullet:#D6DEEC;
  --panel:rgba(255,255,255,.035); --panel2:rgba(255,255,255,.025);
  --soft-bg:rgba(255,255,255,.04); --soft-bg2:rgba(255,255,255,.05); --hover:rgba(255,255,255,.06);
  --line:rgba(255,255,255,.08); --line2:rgba(255,255,255,.07); --line3:rgba(255,255,255,.1); --line4:rgba(255,255,255,.12); --line5:rgba(255,255,255,.14);
  --stripe:rgba(255,255,255,.035);
  --band:#1C2942; --band-line:rgba(255,255,255,.055);
  --px-scrim:rgba(16,26,42,.91); --px-scrim-2:rgba(16,26,42,.70); --px-filter:grayscale(.35) brightness(.62) contrast(1.04);
  --header-h:65px;
  --cyan:#35E0D0; --blue:#3F8CFF; --violet:#8079FF;
  --node-active:#221f43; --node-active-text:#ffffff;
  --shadow:0 30px 60px -20px rgba(0,0,0,.7);
  --glow1:rgba(63,140,255,.16); --glow2:rgba(53,224,208,.08); --glow3:rgba(128,121,255,.12);

  /* the active accent + derived tints (re-resolve under .s-cyan/.s-blue/.s-violet) */
  --ac:var(--cyan);
  --ac-06:color-mix(in srgb, var(--ac) 6%, transparent);
  --ac-10:color-mix(in srgb, var(--ac) 10%, transparent);
  --ac-12:color-mix(in srgb, var(--ac) 12%, transparent);
  --ac-14:color-mix(in srgb, var(--ac) 14%, transparent);
  --ac-16:color-mix(in srgb, var(--ac) 16%, transparent);
  --ac-22:color-mix(in srgb, var(--ac) 22%, transparent);
  --ac-24:color-mix(in srgb, var(--ac) 24%, transparent);
  --ac-40:color-mix(in srgb, var(--ac) 40%, transparent);
  --ac-45:color-mix(in srgb, var(--ac) 45%, transparent);
  --ac-50:color-mix(in srgb, var(--ac) 50%, transparent);
}
[data-theme="light"]{
  --bg:#EBF1F8; --surface:#FFFFFF; --surface-2:#E4EBF4; --stat:#FFFFFF;
  --header-bg:rgba(235,241,248,.82); --mnav-bg:rgba(235,241,248,.98);
  --text:#16243B; --muted:#54647D; --soft:#41526B; --soft2:#5E6E86; --dim:#93A0B2; --dim2:#76869B; --faint:#8E9EB2; --media-ic:#ABBACE; --bullet:#28384F;
  --panel:#FFFFFF; --panel2:#F6F9FC;
  --soft-bg:#FFFFFF; --soft-bg2:#EEF3F9; --hover:rgba(20,40,75,.05);
  --line:rgba(20,40,75,.1); --line2:rgba(20,40,75,.09); --line3:rgba(20,40,75,.14); --line4:rgba(20,40,75,.16); --line5:rgba(20,40,75,.16);
  --stripe:rgba(20,40,75,.045);
  --band:#F3F7FC; --band-line:rgba(20,40,75,.07);
  --px-scrim:rgba(238,243,249,.93); --px-scrim-2:rgba(238,243,249,.76); --px-filter:grayscale(.42) brightness(1.05) contrast(.94);
  --cyan:#0E9F8D; --blue:#2C6CDD; --violet:#5E51D0;
  --node-active:#E8E4FB; --node-active-text:#4A3FB0;
  --shadow:0 22px 48px -20px rgba(33,55,90,.26);
  --glow1:rgba(63,140,255,.10); --glow2:rgba(53,224,208,.07); --glow3:rgba(128,121,255,.08);
}

/* accent context */
.s-cyan{--ac:var(--cyan)}
.s-blue{--ac:var(--blue)}
.s-violet{--ac:var(--violet)}

/* ---- base ----------------------------------------------------------------- */
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0; background:var(--bg); color:var(--text);
  font-family:"IBM Plex Sans",sans-serif; line-height:1.6; -webkit-font-smoothing:antialiased;
  overflow-x:hidden; transition:background .4s ease,color .3s ease;
}
body::before{
  content:""; position:fixed; inset:0; z-index:0; pointer-events:none; transition:background .4s ease;
  background:
    radial-gradient(680px 420px at 80% -6%,var(--glow1),transparent 62%),
    radial-gradient(620px 460px at 5% 9%,var(--glow2),transparent 60%),
    radial-gradient(760px 620px at 50% 112%,var(--glow3),transparent 60%);
}
h1,h2,h3,h4{font-family:"Space Grotesk",sans-serif;font-weight:600;letter-spacing:-.025em;line-height:1.06;margin:0}
p{margin:0}
button{font-family:inherit}
a{color:inherit}
::selection{background:rgba(53,224,208,.3)}

/* reveal-on-scroll (JS adds .is-in) */
.reveal{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1);will-change:opacity,transform}
.reveal.is-in{opacity:1;transform:none}
@media (prefers-reduced-motion: reduce){ .reveal{opacity:1!important;transform:none!important;transition:none!important} }

/* staggered card entrance (JS tags the container, sets per-child delay) */
.stagger-item{opacity:0;transform:translateY(18px) scale(.985);
  transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1)}
.stagger-item.is-in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  .stagger-item{opacity:1!important;transform:none!important;transition:none!important;transition-delay:0ms!important}
}

/* ---- keyframes ------------------------------------------------------------ */
@keyframes wv{0%,100%{transform:scaleY(.16)}50%{transform:scaleY(1)}}
@keyframes pls{50%{opacity:.35}}
@keyframes bk{50%{opacity:0}}
@keyframes ovIn{from{opacity:0}to{opacity:1}}
@keyframes mdlIn{from{transform:translateY(16px) scale(.985);opacity:0}to{transform:none;opacity:1}}
@keyframes upIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes sweep{0%{left:-14%;opacity:0}12%{opacity:1}88%{opacity:1}100%{left:100%;opacity:0}}
@keyframes nodeOn{
  0%,52%,100%{box-shadow:0 0 0 0 rgba(128,121,255,0);border-color:var(--line5);color:var(--dim2);background:var(--stat)}
  10%,30%{box-shadow:0 0 18px 1px rgba(128,121,255,.55);border-color:var(--violet);color:var(--node-active-text);background:var(--node-active)}
}

/* ---- layout --------------------------------------------------------------- */
.wrap{max-width:1200px;margin:0 auto;padding-left:26px;padding-right:26px}
main{position:relative;z-index:1}

/* --- alternating section shading -------------------------------------------
   Every other top-level section sits on a subtly different hex so the page
   reads as distinct bands. The tint is painted by a full-bleed pseudo-element
   (no clip-path, so reveal animations aren't cut off), and vertical padding is
   normalised so band edges land evenly between sections. */
#view>section:not(.hero){padding-block:54px!important;position:relative;isolation:isolate}
#view>section:not(.hero):nth-of-type(even)::before{
  content:"";position:absolute;inset:0;left:50%;width:100vw;transform:translateX(-50%);
  background:var(--band);border-block:1px solid var(--band-line);
  z-index:-1;pointer-events:none;transition:background .4s ease}
.row{display:flex;flex-wrap:wrap;gap:40px;align-items:center}
.row--top{align-items:flex-start}
.grid{display:grid;gap:15px;grid-template-columns:repeat(auto-fill,minmax(var(--min,290px),1fr))}
.grid--fit{grid-template-columns:repeat(auto-fit,minmax(var(--min,220px),1fr))}

/* ---- type helpers --------------------------------------------------------- */
.eyebrow{font-family:"IBM Plex Mono",monospace;font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--cyan)}
.eyebrow--ac{color:var(--ac)}
.mono-label{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ac)}
.mono-label--cyan{color:var(--cyan)}
.mono-label--blue{color:var(--blue)}
.grad-text{background:linear-gradient(110deg,var(--cyan),var(--blue) 55%,var(--violet));-webkit-background-clip:text;background-clip:text;color:transparent}
.lede{color:var(--muted);font-size:17.5px}
.balance{text-wrap:balance}
.br-lg{display:none}
@media (min-width:760px){.br-lg{display:inline}}

/* ---- buttons -------------------------------------------------------------- */
.btn{
  font-family:"Space Grotesk",sans-serif;font-weight:600;font-size:15px;
  padding:13px 22px;border-radius:11px;border:none;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  color:var(--text);background:none;transition:transform .2s ease,background .2s ease,border-color .2s ease;
}
.btn svg{width:16px;height:16px}
.btn--primary{background:linear-gradient(110deg,var(--cyan),var(--blue));color:#04121a;box-shadow:0 10px 28px -8px rgba(53,224,208,.6)}
.btn--primary:hover{transform:translateY(-1px)}
.btn--ghost{background:var(--soft-bg2);border:1px solid var(--line3);color:var(--text);font-weight:500}
.btn--ghost:hover{background:var(--hover)}
.btn--dark{background:var(--text);color:var(--bg)}
.btn--dark:hover{transform:translateY(-1px)}
.btn--sm{font-size:14px;padding:10px 18px;border-radius:10px}
.btn--block{width:100%;font-size:16px;padding:15px;border-radius:12px}

/* ---- cards / panels ------------------------------------------------------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:24px}
.panel{background:var(--panel2);border:1px solid var(--line2);border-radius:18px;padding:28px 26px}

/* icon badge (accent square) */
.ibadge{flex:none;border-radius:11px;display:flex;align-items:center;justify-content:center;color:var(--ac);background:var(--ac-12);border:1px solid var(--ac-24)}
.ibadge svg{stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.ibadge--42{width:42px;height:42px}
.ibadge--42 svg{width:21px;height:21px}
.ibadge--46{width:46px;height:46px;border-radius:12px}
.ibadge--46 svg{width:23px;height:23px}
.ibadge--40{width:40px;height:40px}
.ibadge--40 svg{width:20px;height:20px}

/* service card (clickable) */
.svc-card{
  text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:22px;cursor:pointer;
  display:flex;flex-direction:column;gap:8px;color:var(--text);
  transition:transform .2s,border-color .2s,background .2s;
}
.svc-card:hover{transform:translateY(-4px);border-color:var(--ac-45);background:var(--hover)}
.svc-card__head{display:flex;align-items:center;gap:11px}
.svc-card h3{font-size:17.5px;font-weight:600;line-height:1.2}
.svc-card__blurb{color:var(--soft2);font-size:13.5px;flex:1}
.svc-card__more{display:inline-flex;align-items:center;gap:5px;font-family:"Space Grotesk",sans-serif;font-size:13px;font-weight:500;color:var(--ac)}
.svc-card__more svg{width:13px;height:13px}
.svc-card--lg{padding:24px;gap:10px}
.svc-card--lg h3{font-size:19px}
.svc-card--lg .svc-card__blurb{font-size:14px}

/* chips */
.chip{font-family:"IBM Plex Sans",sans-serif;font-size:15.5px;font-weight:500;color:var(--soft);background:var(--soft-bg2);border:1px solid var(--line3);padding:12px 22px;border-radius:30px;cursor:pointer;transition:color .2s,border-color .2s}
.chip:hover{color:var(--text);border-color:color-mix(in srgb,var(--cyan) 55%,transparent);background:color-mix(in srgb,var(--cyan) 10%,transparent)}
.chip--mono{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--soft);background:var(--soft-bg2);border:1px solid var(--line);padding:5px 11px;border-radius:30px;cursor:default}
.chip--std{font-family:"IBM Plex Mono",monospace;font-size:11.5px;color:var(--soft);background:var(--soft-bg2);border:1px solid var(--line3);padding:5px 12px;border-radius:8px;cursor:default}
.tag-cloud{display:flex;flex-wrap:wrap;gap:8px}
.lang-tag{font-family:"IBM Plex Sans",sans-serif;font-size:13px;color:var(--soft);background:var(--soft-bg);border:1px solid var(--line3);padding:6px 13px;border-radius:30px}

/* bullet lists */
.bullets{margin-top:14px;display:flex;flex-direction:column}
.bullet{display:flex;gap:10px;padding:8px 0;border-top:1px solid var(--line);color:var(--bullet);font-size:13.5px}
.bullet__tick{color:var(--ac);flex:none;margin-top:2px}
.bullet__tick svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}

/* media placeholder (striped) */
.media-ph{position:relative;aspect-ratio:16/9;border-radius:16px;overflow:hidden;border:1px solid var(--line);background:var(--surface-2);background-image:repeating-linear-gradient(135deg,var(--stripe) 0 14px,transparent 14px 28px)}
.media-ph__center{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ac)}
.media-ph__play{width:58px;height:58px;border-radius:50%;background:var(--ac-16);border:1px solid var(--ac-50);display:flex;align-items:center;justify-content:center}
.media-ph__play svg{width:22px;height:22px;fill:currentColor}
.media-ph__ic svg{width:34px;height:34px;fill:none;stroke:var(--media-ic);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
.media-ph__tag{position:absolute;left:13px;bottom:11px;font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.04em;color:var(--faint)}

/* inline HLS player + lightbox */
.media-ph--live{background:#000;background-image:none}
.media-ph__vid{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.media-ph--img{background:#000;background-image:none}

/* image reveal: a soft wipe up, the photo settling out of a slight push-in,
   with a single light sweep across the frame as it lands */
.reveal-img{clip-path:inset(0 0 100% 0);transition:clip-path 1s cubic-bezier(.22,.68,.24,1)}
.reveal-img .media-ph__img{transform:scale(1.07);transform-origin:50% 55%;
  transition:transform 1.6s cubic-bezier(.22,.68,.24,1),filter 1.2s ease}
.reveal-img.is-in{clip-path:inset(0 0 0 0)}
.reveal-img.is-in .media-ph__img{transform:scale(1)}
.media-ph__sheen{position:absolute;inset:0;pointer-events:none;opacity:0;
  background:linear-gradient(105deg,transparent 38%,rgba(255,255,255,.16) 50%,transparent 62%);
  transform:translateX(-60%)}
.reveal-img.is-in .media-ph__sheen{animation:sheen 1.5s cubic-bezier(.3,.6,.2,1) .35s 1}
@keyframes sheen{
  0%{opacity:0;transform:translateX(-60%)}
  25%{opacity:1}
  100%{opacity:0;transform:translateX(60%)}
}
@media (prefers-reduced-motion:reduce){
  .reveal-img{clip-path:none!important;transition:none!important}
  .reveal-img .media-ph__img{transform:none!important;transition:none!important}
  .media-ph__sheen{display:none}
}
.media-ph__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.media-ph__fallback{display:none}
.media-ph--live.is-failed{background:var(--surface-2);background-image:repeating-linear-gradient(135deg,var(--stripe) 0 1px,transparent 1px 9px)}
.media-ph--live.is-failed .media-ph__vid{display:none}
.media-ph--live.is-failed .media-ph__fallback{display:flex;align-items:center;justify-content:center;position:absolute;inset:0}
.media-ph__pop{position:absolute;right:11px;bottom:11px;display:inline-flex;align-items:center;gap:7px;
  background:rgba(8,14,24,.66);border:1px solid rgba(255,255,255,.18);color:#fff;border-radius:9px;
  padding:8px 12px;font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.06em;text-transform:uppercase;
  cursor:pointer;backdrop-filter:blur(6px);transition:background .2s,border-color .2s}
.media-ph__pop:hover{background:rgba(8,14,24,.85);border-color:var(--ac-50)}
.media-ph__pop svg{width:15px;height:15px}

.video-overlay{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  padding:clamp(16px,4vw,54px);background:rgba(6,10,18,.82);backdrop-filter:blur(10px)}
.video-overlay.is-hidden{display:none}
.video-overlay__frame{width:min(1180px,100%);aspect-ratio:16/9;border-radius:16px;overflow:hidden;
  border:1px solid var(--line3);background:#000;box-shadow:var(--shadow)}
.video-overlay__frame video{width:100%;height:100%;display:block;background:#000}
.video-overlay__close{position:absolute;top:clamp(12px,2.4vw,26px);right:clamp(12px,2.4vw,26px);
  width:42px;height:42px;display:flex;align-items:center;justify-content:center;border-radius:11px;
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);color:#fff;cursor:pointer;transition:background .2s}
.video-overlay__close:hover{background:rgba(255,255,255,.2)}
.video-overlay__close svg{width:20px;height:20px}

/* CTA band (repeated closing call to action) */
.cta-band{background:linear-gradient(150deg,rgba(53,224,208,.08),rgba(128,121,255,.08));border:1px solid var(--line3);border-radius:22px;padding:clamp(40px,6vw,72px) 40px;text-align:center}
.cta-band h2{font-size:clamp(28px,4.2vw,48px);font-weight:700;max-width:19ch;margin-inline:auto;text-wrap:balance}
.cta-band p{color:var(--muted);font-size:17px;margin:16px auto 28px;max-width:520px}
.cta-row{display:flex;gap:13px;justify-content:center;flex-wrap:wrap}

/* ============================================================================
   HEADER
   ========================================================================== */
.site-header{position:sticky;top:0;z-index:80;background:var(--header-bg);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}
.header-inner{height:64px;display:flex;align-items:center;justify-content:space-between;gap:18px}
.brand{display:flex;align-items:center;gap:11px;background:none;border:none;cursor:pointer;color:var(--text);font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:17px;letter-spacing:-.02em;white-space:nowrap;flex:none;padding:0}
.brand-mark{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,var(--cyan),var(--blue));position:relative;flex:none;box-shadow:0 0 18px rgba(53,224,208,.45)}
.brand-logo{height:30px;width:auto;flex:none;display:block}
.brand-logo--light-theme{display:none}
[data-theme="light"] .brand-logo--dark-theme{display:none}
[data-theme="light"] .brand-logo--light-theme{display:block}
.brand-mark i{position:absolute;left:7px;height:2.4px;border-radius:3px;background:#06121a}
.brand-mark i:nth-child(1){top:9px;width:14px}
.brand-mark i:nth-child(2){top:13px;width:9px}
.brand-mark i:nth-child(3){top:17px;width:12px}

.nav{display:flex;align-items:center;gap:2px}
.nav-link{background:none;border:none;color:var(--soft);font-family:"IBM Plex Sans",sans-serif;font-size:14.5px;cursor:pointer;padding:9px 11px;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.nav-link:hover{color:var(--text)}
.nav-link .chev{width:11px;height:11px;fill:none}
.nav-services{position:relative}

/* mega menu */
.mega{
  position:absolute;top:100%;left:50%;transform:translateX(-50%);width:760px;max-width:92vw;
  background:var(--surface);border-left:1px solid var(--line3);border-right:1px solid var(--line3);border-bottom:1px solid var(--line3);
  border-top:12px solid transparent;border-radius:16px;padding:20px;box-shadow:var(--shadow);
  display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px;
  opacity:0;visibility:hidden;pointer-events:none;transition:opacity .14s ease;
}
.nav-services:hover .mega,.mega.open{opacity:1;visibility:visible;pointer-events:auto;animation:ovIn .14s ease}
.nav-services.is-dismissed .mega{opacity:0!important;visibility:hidden!important;pointer-events:none!important;animation:none!important}
.mega-label{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ac);margin-bottom:10px;padding-left:6px}
.mega-item{display:flex;gap:11px;align-items:flex-start;text-align:left;width:100%;background:none;border:none;cursor:pointer;padding:9px 8px;border-radius:9px;color:var(--text);font-family:"IBM Plex Sans",sans-serif}
.mega-item:hover{background:var(--hover)}
.mega-ic{width:30px;height:30px;flex:none;border-radius:8px;background:var(--ac-12);display:flex;align-items:center;justify-content:center;color:var(--ac);margin-top:1px}
.mega-ic svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.mega-item__title{display:block;font-size:13.5px;font-weight:500;line-height:1.25}
.mega-item__tag{display:block;font-size:11px;color:var(--dim2);margin-top:2px;line-height:1.3}

.header-actions{display:flex;align-items:center;gap:12px}
.theme-toggle{position:relative;width:54px;height:28px;flex:none;border-radius:999px;border:1px solid var(--line3);background:var(--soft-bg2);cursor:pointer;display:flex;align-items:center;justify-content:space-between;padding:0 6px}
.theme-toggle svg{width:13px;height:13px;color:var(--dim2)}
.theme-knob{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:linear-gradient(135deg,var(--cyan),var(--blue));box-shadow:0 2px 6px rgba(0,0,0,.3);transition:transform .26s cubic-bezier(.2,.7,.2,1)}
[data-theme="light"] .theme-knob{transform:translateX(26px)}

.hamburger{background:var(--soft-bg2);border:1px solid var(--line3);border-radius:10px;width:42px;height:42px;display:none;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer}
.hamburger span{width:18px;height:2px;background:var(--text);border-radius:2px}

/* ============================================================================
   HERO (home)
   ========================================================================== */
/* quote ribbon above the hero */
.ribbon{display:flex;align-items:stretch;gap:0;border-block:1px solid var(--line);background:var(--panel);overflow:hidden}
.ribbon-anchor{flex:none;display:flex;align-items:center;padding:0 22px;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:13px;letter-spacing:-.01em;color:var(--text);background:var(--soft-bg);border-right:1px solid var(--line);white-space:nowrap}
.ribbon-track{flex:1;min-width:0;overflow:hidden;padding-block:11px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 60px,#000 calc(100% - 60px),transparent);mask-image:linear-gradient(90deg,transparent,#000 60px,#000 calc(100% - 60px),transparent)}
.ribbon-run{display:flex;align-items:center;gap:18px;width:max-content;animation:ribbon 64s linear infinite}
.ribbon:hover .ribbon-run{animation-play-state:paused}
.ribbon-q{font-family:"IBM Plex Mono",monospace;font-size:12px;letter-spacing:.02em;color:var(--soft2);white-space:nowrap}
.ribbon-sep{color:var(--cyan);font-size:12px;opacity:.7}
@keyframes ribbon{to{transform:translateX(-50%)}}
@media (max-width:620px){.ribbon-anchor{display:none}}
@media (prefers-reduced-motion:reduce){.ribbon-run{animation:none}}

.hero{padding-block:60px 24px}
.hero-head{text-align:center;max-width:850px;margin:0 auto 40px}
.hero-pill{display:inline-flex;align-items:center;gap:9px;font-family:"IBM Plex Mono",monospace;font-size:11.5px;letter-spacing:.06em;color:var(--soft);background:var(--soft-bg);border:1px solid var(--line);padding:7px 15px;border-radius:40px;margin-bottom:24px}
.dot{width:8px;height:8px;border-radius:50%;background:var(--cyan);box-shadow:0 0 10px var(--cyan);animation:pls 1.6s infinite}
.dot--red{background:#ff4d4d;box-shadow:0 0 10px #ff4d4d;animation:pls 1.4s infinite}
.hero-h1{max-width:760px;margin:0 auto}
.hero h1{font-size:clamp(30px,4.6vw,58px);font-weight:700;letter-spacing:-.035em;white-space:nowrap}
.hero-tag{font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:clamp(15px,1.5vw,19px);letter-spacing:-.01em;color:var(--soft);margin-top:14px}
.hero-sub{font-size:18.5px;color:var(--muted);max-width:600px;margin:18px auto 30px}
@media (max-width:560px){.hero h1{white-space:normal}}
.hero-cta{display:flex;gap:13px;justify-content:center;flex-wrap:wrap}

.bento{display:flex;flex-wrap:wrap;gap:16px}
.demo{flex:2 1 460px;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:24px 26px;min-height:320px;display:flex;flex-direction:column}
.demo-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.demo-head .label{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--cyan)}
.live-tag{display:flex;align-items:center;gap:8px;font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#ff6b6b}
.wave{display:flex;align-items:center;gap:3px;height:52px;margin-bottom:18px}
.wave i{flex:1;height:100%;border-radius:3px;background:linear-gradient(180deg,var(--cyan),var(--blue));transform:scaleY(.16);opacity:.85;animation:wv 1s ease-in-out infinite}
.cap-stream{flex:1;display:flex;flex-direction:column;justify-content:flex-end}
.cap{font-family:"IBM Plex Mono",monospace;font-size:15.5px;line-height:1.55}
.cap .prev{color:var(--dim)}
.caret{display:inline-block;width:8px;height:16px;background:var(--cyan);margin-left:3px;vertical-align:-3px;box-shadow:0 0 8px var(--cyan);animation:bk 1s steps(1) infinite}
.demo-foot{display:flex;gap:22px;flex-wrap:wrap;margin-top:18px;padding-top:16px;border-top:1px solid var(--line);font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.05em;color:var(--dim)}
.demo-foot b{color:var(--cyan);font-weight:500}
.bento-side{flex:1 1 280px;display:flex;flex-direction:column;gap:16px}
.bento-mini{flex:1;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:24px;display:flex;flex-direction:column;justify-content:center}
.bento-mini .big{font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:42px;letter-spacing:-.03em;line-height:1}
.bento-mini p{color:var(--muted);font-size:14px;margin-top:10px}
.bento-mini .label{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--cyan);margin-bottom:14px}
.bento-mini--quote{justify-content:space-between;gap:16px}
.hero-quote{font-family:"Space Grotesk",sans-serif;font-size:19px;line-height:1.35;letter-spacing:-.02em;color:var(--text);margin:0;transition:opacity .4s ease;text-wrap:pretty}
.hero-quote::before{content:"\201C";color:var(--cyan);margin-right:2px}
.hero-quote::after{content:"\201D";color:var(--cyan);margin-left:1px}
.quote-dots{display:flex;gap:6px}
.quote-dots i{width:14px;height:2px;border-radius:2px;background:var(--line3);transition:background .3s ease}
.quote-dots i.on{background:var(--cyan)}

/* positioning / proof cards */
.proof{flex:1 1 340px;min-width:280px;display:flex;flex-direction:column;gap:14px}
.proof-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:22px;display:flex;align-items:center;gap:18px}
.proof-card b{font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:34px;line-height:1;flex:none}
.proof-card span{color:var(--soft2);font-size:14px}

/* "The Missing Layer" */
.ml-grid{display:grid;grid-template-columns:1fr auto 1fr;align-items:stretch;gap:18px}
.ml-panel{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:30px 28px 26px;overflow:hidden}
.ml-panel::before{content:"";position:absolute;inset:0 0 auto 0;height:3px}
.ml-panel--human::before{background:linear-gradient(90deg,var(--cyan),color-mix(in srgb,var(--cyan) 30%,transparent))}
.ml-panel--ai::before{background:linear-gradient(90deg,var(--blue),color-mix(in srgb,var(--violet) 55%,transparent))}
.ml-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.ml-head h3{font-family:"IBM Plex Mono",monospace;font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:500}
.ml-head svg{width:26px;height:26px;flex:none;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ml-panel--human .ml-head h3,.ml-panel--human .ml-head svg{color:var(--cyan);stroke:var(--cyan)}
.ml-panel--ai .ml-head h3,.ml-panel--ai .ml-head svg{color:var(--blue);stroke:var(--blue)}
.ml-lede{color:var(--dim2);font-size:14px;font-style:italic;margin-bottom:20px}
.ml-list{list-style:none;display:flex;flex-direction:column;gap:18px}
.ml-item{display:flex;gap:13px;align-items:flex-start}
.ml-item svg{width:20px;height:20px;flex:none;margin-top:2px;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ml-panel--human .ml-item svg{stroke:var(--cyan)}
.ml-panel--ai .ml-item svg{stroke:var(--blue)}
.ml-item b{display:block;font-size:16.5px;font-weight:600;letter-spacing:-.01em;margin-bottom:4px}
.ml-item span{display:block;color:var(--muted);font-size:14.5px;line-height:1.5;text-wrap:pretty}
.ml-arrow{display:flex;align-items:center;color:var(--cyan)}
.ml-arrow svg{width:30px;height:30px}
.ml-insight{display:flex;align-items:flex-start;gap:14px;margin-top:18px;padding:22px 26px;border:1px solid var(--line3);border-radius:16px;background:linear-gradient(120deg,color-mix(in srgb,var(--cyan) 9%,transparent),color-mix(in srgb,var(--violet) 9%,transparent))}
.ml-insight svg{width:22px;height:22px;flex:none;margin-top:1px;fill:none;stroke:var(--cyan);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ml-insight p{font-size:16px;line-height:1.55;color:var(--soft);text-wrap:pretty}
.ml-insight b{color:var(--cyan);font-weight:600}
@media (max-width:900px){
  .ml-grid{grid-template-columns:1fr}
  .ml-arrow{justify-content:center;transform:rotate(90deg)}
}

/* S1 — persistent service bar */
.svc-bar.is-hidden{display:none}
.svc-bar{position:sticky;top:var(--header-h);z-index:40;background:var(--header-bg);border-bottom:1px solid var(--line)}
.nav-cta{white-space:nowrap}
.svc-bar__wrap{display:flex;align-items:center;gap:2px}
.svc-bar__inner{flex:1;min-width:0;display:flex;gap:6px;overflow-x:auto;padding-block:9px;scroll-behavior:smooth;scrollbar-width:none}
.svc-bar__nav{flex:none;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:none;border-radius:7px;background:none;color:var(--dim2);cursor:pointer;transition:opacity .2s,color .18s,background .18s}
.svc-bar__nav svg{width:16px;height:16px}
.svc-bar__nav--next svg{transform:rotate(180deg)}
.svc-bar__nav:hover{color:var(--text);background:var(--hover)}
.svc-bar__nav.is-off{opacity:.22;pointer-events:none}
.svc-bar__inner::-webkit-scrollbar{display:none}
.svc-bar__item{display:inline-flex;align-items:center;gap:7px;flex:none;background:none;border:1px solid transparent;border-radius:9px;padding:7px 12px;color:var(--soft2);font-family:"IBM Plex Sans",sans-serif;font-size:13px;white-space:nowrap;cursor:pointer;transition:color .18s,background .18s,border-color .18s}
.svc-bar__item .ic{display:flex}
.svc-bar__item svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.8}
.svc-bar__item:hover{color:var(--text);background:var(--hover);border-color:var(--line3)}
.svc-bar__item.is-active{color:var(--ac);border-color:var(--ac-45);background:color-mix(in srgb,var(--ac) 10%,transparent)}
@media (max-width:900px){.svc-bar{position:static}}

/* H6 — defensible block */
.defensible{flex:1 1 340px;min-width:290px;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:28px 26px}
.def-list{list-style:none;display:flex;flex-direction:column;gap:16px}
.def-item{display:flex;gap:12px;align-items:flex-start;color:var(--soft);font-size:15.5px;line-height:1.5;text-wrap:pretty}
.def-item svg{width:19px;height:19px;flex:none;margin-top:2px;color:var(--cyan)}

/* S3 — per-section sales CTA */
.sec-cta{display:flex;flex-wrap:wrap;gap:22px;align-items:center;justify-content:space-between;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:26px 28px}
.sec-cta h3{font-size:20px;font-weight:600;letter-spacing:-.01em;margin-bottom:6px}
.sec-cta p{color:var(--muted);font-size:14.5px;max-width:52ch;text-wrap:pretty}
.sec-cta__row{display:flex;gap:11px;flex-wrap:wrap}
.card-cta{display:inline-flex;align-items:center;gap:7px;margin-top:16px;background:none;border:none;padding:0;color:var(--ac);font-family:"IBM Plex Mono",monospace;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.card-cta svg{width:15px;height:15px}
.card-cta:hover{filter:brightness(1.2)}

/* N2 — ownership (About) */
.own{background:linear-gradient(150deg,color-mix(in srgb,var(--cyan) 8%,transparent),color-mix(in srgb,var(--violet) 8%,transparent));border:1px solid var(--line3);border-radius:22px;padding:clamp(28px,4vw,44px)}
.own__head{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-end;justify-content:space-between;margin-bottom:20px}
.own__ticker{font-family:"IBM Plex Mono",monospace;font-size:12px;letter-spacing:.12em;color:var(--cyan);border:1px solid var(--line3);border-radius:8px;padding:7px 13px;white-space:nowrap}
.own__body{color:var(--soft);font-size:16px;line-height:1.65;max-width:78ch;text-wrap:pretty}
.own__pillars{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:20px;margin-top:28px;padding-top:26px;border-top:1px solid var(--line)}
.own-pillar h4{font-size:16px;font-weight:600;margin:12px 0 6px}
.own-pillar p{color:var(--soft2);font-size:13.5px;line-height:1.5;text-wrap:pretty}

/* N3 — FAQ + lead gate */
.faq-list{display:flex;flex-direction:column;gap:14px}
.faq{display:flex;gap:16px;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:24px 26px}
.faq h3{font-size:17.5px;font-weight:600;margin-bottom:8px;letter-spacing:-.01em}
.faq p{color:var(--muted);font-size:15px;line-height:1.6;max-width:78ch;text-wrap:pretty}
.gate{background:var(--panel);border:1px solid var(--line3);border-radius:22px;padding:clamp(26px,3.6vw,40px)}
.gate.is-open{border-color:var(--ac-45)}
.gate__head{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-end;justify-content:space-between;margin-bottom:26px}
.gate__badge{display:inline-flex;align-items:center;gap:8px;font-family:"IBM Plex Mono",monospace;font-size:11.5px;letter-spacing:.06em;color:var(--cyan);border:1px solid var(--line3);border-radius:8px;padding:8px 13px;white-space:nowrap}
.gate__badge svg{width:15px;height:15px}
.gate__body{position:relative}
.gate__body.is-locked>.grid{filter:blur(5px);opacity:.5;pointer-events:none;user-select:none}
.gate__veil{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}

/* hero promo card → The Missing Layer */
.ml-promo{display:flex;align-items:center;gap:14px;width:100%;text-align:left;cursor:pointer;
  background:linear-gradient(135deg,color-mix(in srgb,var(--cyan) 12%,transparent),color-mix(in srgb,var(--violet) 12%,transparent));
  border:1px solid var(--line3);border-radius:16px;padding:18px 20px;color:var(--text);font-family:inherit;
  transition:border-color .2s,transform .2s,background .3s}
.ml-promo:hover{border-color:var(--ac-45);transform:translateY(-2px)}
.ml-promo__ic{display:flex;align-items:center;justify-content:center;flex:none;width:40px;height:40px;border-radius:11px;background:var(--soft-bg2);border:1px solid var(--line3)}
.ml-promo__ic svg{width:21px;height:21px;fill:none;stroke:var(--cyan);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ml-promo__txt{display:flex;flex-direction:column;gap:3px;min-width:0}
.ml-promo__txt b{font-size:15.5px;font-weight:600;letter-spacing:-.01em}
.ml-promo__txt span{color:var(--muted);font-size:13px;line-height:1.4}
.ml-promo__go{display:flex;flex:none;margin-left:auto;color:var(--cyan);transition:transform .2s}
.ml-promo__go svg{width:18px;height:18px}
.ml-promo:hover .ml-promo__go{transform:translateX(3px)}

/* stats band */
.stat-band{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:16px;overflow:hidden}
.stat{background:var(--stat);padding:26px 22px;text-align:center}
.stat b{display:block;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:30px;letter-spacing:-.02em}
.stat span{color:var(--soft2);font-size:12.5px;margin-top:5px;display:block}

/* compliance callout */
.compliance{background:linear-gradient(150deg,color-mix(in srgb,var(--blue) 12%,transparent),color-mix(in srgb,var(--violet) 12%,transparent));border:1px solid var(--line3);border-radius:22px;padding:clamp(36px,5vw,60px);display:flex;flex-wrap:wrap;gap:30px;align-items:center;justify-content:space-between}
.compliance h2{font-size:clamp(28px,3.6vw,42px)!important;margin:14px 0 14px!important}
.compliance p{font-size:17px!important}
.compliance .chip--std{font-size:12.5px;padding:7px 14px}

/* ============================================================================
   SERVICE DETAIL
   ========================================================================== */
.back-link{display:inline-flex;align-items:center;gap:6px;background:none;border:none;color:var(--dim2);font-family:"IBM Plex Mono",monospace;font-size:11.5px;letter-spacing:.04em;cursor:pointer;margin-bottom:22px}
.back-link:hover{color:var(--text)}
.back-link svg{width:13px;height:13px;fill:none}
.define{background:var(--ac-06);border:1px solid var(--ac-22);border-radius:16px;padding:26px 28px;max-width:880px}
.define p{font-size:16px;color:var(--soft);line-height:1.7}
.cover-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:24px;display:flex;flex-direction:column}
.cover-card__head{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.cover-card h3{font-size:18px;font-weight:600;line-height:1.2}
.cover-card__tag{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--ac);margin-top:3px}
.cover-card__body{color:var(--soft2);font-size:14px;margin:8px 0 0}

/* file formats */
.fmt{display:flex;gap:13px;align-items:flex-start;background:var(--soft-bg);border:1px solid var(--line3);border-radius:12px;padding:14px 16px}
.fmt code{font-family:"IBM Plex Mono",monospace;font-size:12px;font-weight:500;color:var(--ac);background:var(--ac-12);border-radius:7px;padding:5px 9px;flex:none}
.fmt span{color:var(--soft2);font-size:13px;padding-top:2px}

/* why-us points grid (service detail) */
.points-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px}
.points-grid h4{font-size:15.5px;font-weight:600;margin-bottom:5px}
.points-grid p{color:var(--soft2);font-size:13px}

/* AD process diagram */
.process{position:relative;padding-top:4px}
.process-track{position:absolute;top:31px;left:34px;right:34px;height:2px;background:var(--line3);overflow:hidden;border-radius:2px}
.process-sweep{position:absolute;top:-2px;width:14%;height:6px;border-radius:3px;background:linear-gradient(90deg,transparent,var(--violet),var(--cyan),transparent);animation:sweep 5s linear infinite}
.process-row{position:relative;display:flex;justify-content:space-between;gap:8px}
.process-step{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;gap:9px;max-width:165px}
.process-node{width:54px;height:54px;border-radius:50%;border:1.5px solid var(--line5);display:flex;align-items:center;justify-content:center;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:18px;color:var(--dim2);background:var(--stat);animation:nodeOn 5s ease-in-out infinite}
.process-step h4{font-size:13.5px;font-weight:600;color:var(--text)}
.process-step p{color:var(--soft2);font-size:12px;line-height:1.4}
.process-note{margin-top:24px;padding-top:20px;border-top:1px solid var(--line2);color:var(--soft);font-size:14px;max-width:820px}
/* mobile vertical timeline */
.process-vert{display:none}
.process-vrow{display:flex;gap:15px;align-items:flex-start}
.process-vline{display:flex;flex-direction:column;align-items:center;align-self:stretch}
.process-vnode{width:42px;height:42px;flex:none;border-radius:50%;border:1.5px solid var(--ac-50);display:flex;align-items:center;justify-content:center;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:16px;color:var(--ac);background:var(--ac-10)}
.process-vbar{flex:1;width:2px;background:var(--line3);margin:4px 0}
.process-vrow .body{padding-bottom:20px}
.process-vrow .body h4{font-size:15px;font-weight:600;margin-bottom:4px}
.process-vrow .body p{color:var(--soft2);font-size:13px}

/* services overview category groups */
.cat-head{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.cat-head .dot{width:10px;height:10px;background:var(--ac);box-shadow:0 0 12px var(--ac);animation:none}
.cat-head h2{font-size:20px;font-weight:600}
.cat-head .rule{flex:1;height:1px;background:var(--line)}
.promise{background:var(--panel2);border:1px solid var(--line2);border-radius:20px;padding:clamp(28px,4vw,44px);text-align:center}
.promise h2{font-size:clamp(28px,4vw,46px);font-weight:700}
.promise p{color:var(--muted);font-size:16px;margin:16px auto 0;max-width:560px}

/* ============================================================================
   ABOUT
   ========================================================================== */
.mission{flex:1 1 320px;min-width:280px;background:var(--ac-06);border:1px solid var(--ac-22);border-radius:18px;padding:28px}

/* ============================================================================
   CONTACT
   ========================================================================== */
.form-card{flex:2 1 540px;min-width:320px;background:var(--surface);border:1px solid var(--line3);border-radius:20px;padding:clamp(24px,3vw,36px)}
.form-stack{display:flex;flex-direction:column;gap:18px}
.field-row{display:flex;gap:14px;flex-wrap:wrap}
.field{flex:1 1 200px;display:block}
.field--full{flex-basis:100%;display:block}
.field__label{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim2);display:block;margin-bottom:7px}
.input,.textarea{width:100%;background:var(--soft-bg);border:1px solid var(--line4);border-radius:10px;padding:12px 13px;color:var(--text);font-family:"IBM Plex Sans",sans-serif;font-size:14px;outline:none}
.input:focus,.textarea:focus{border-color:var(--ac-50)}
.textarea{resize:vertical}
.chip-group{display:flex;flex-wrap:wrap;gap:8px}
.select-chip{font-family:"IBM Plex Sans",sans-serif;font-size:13px;padding:9px 14px;border-radius:9px;cursor:pointer;transition:all .15s;background:var(--soft-bg);border:1px solid var(--line4);color:var(--soft)}
.select-chip.on{background:rgba(53,224,208,.14);border:1px solid rgba(53,224,208,.5);color:var(--cyan);font-weight:500}
.contact-side{flex:1 1 280px;min-width:260px;display:flex;flex-direction:column;gap:16px}
.next-step{display:flex;gap:13px;margin-bottom:16px}
.next-step__n{width:30px;height:30px;flex:none;border-radius:50%;border:1.5px solid var(--ac-50);color:var(--cyan);display:flex;align-items:center;justify-content:center;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:14px}
.next-step h4{font-size:14.5px;font-weight:600;margin-bottom:3px}
.next-step p{color:var(--soft2);font-size:13px}
.form-success{text-align:center;padding:40px 8px}
.success-tick{width:64px;height:64px;border-radius:50%;background:var(--ac-14);border:1px solid var(--ac-40);display:flex;align-items:center;justify-content:center;margin:0 auto 20px;color:var(--cyan)}
.success-tick svg{width:28px;height:28px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}

/* ============================================================================
   FOOTER
   ========================================================================== */
.site-footer{position:relative;z-index:1;border-top:1px solid var(--line);padding:52px 26px 32px;margin-top:40px}
.footer-inner{max-width:1200px;margin:0 auto}
.footer-top{display:flex;flex-wrap:wrap;gap:40px;justify-content:space-between;padding-bottom:36px;border-bottom:1px solid var(--line)}
.footer-about{max-width:300px}
.footer-about p{color:var(--soft2);font-size:14px}
.footer-brand{display:flex;align-items:center;gap:10px;background:none;border:none;cursor:pointer;color:var(--text);font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:16px;margin-bottom:12px;padding:0}
.footer-brand .sq{width:26px;height:26px;border-radius:7px;background:linear-gradient(135deg,var(--cyan),var(--blue));flex:none}
.footer-cols{display:flex;gap:48px;flex-wrap:wrap}
.footer-cols h5{font-family:"Space Grotesk",sans-serif;font-size:13px;font-weight:600;margin:0 0 14px}
.footer-link{display:block;background:none;border:none;color:var(--soft2);font-size:14px;cursor:pointer;padding:0 0 9px;font-family:"IBM Plex Sans",sans-serif;text-align:left}
.footer-link:hover{color:var(--cyan)}
.footer-bot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-top:22px;font-family:"IBM Plex Mono",monospace;font-size:11.5px;color:var(--dim);letter-spacing:.04em}

/* ============================================================================
   OVERLAYS — back-to-top, quote modal, mobile nav
   ========================================================================== */
.to-top{position:fixed;right:22px;bottom:22px;z-index:90;width:46px;height:46px;border-radius:14px;background:var(--surface);border:1px solid var(--line3);color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow);animation:upIn .22s ease}
.to-top:hover{transform:translateY(-2px)}
.to-top svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.up-fab{right:80px;width:auto;padding:0 15px;gap:9px;font-family:"IBM Plex Mono",monospace;font-size:12px;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}
@media (max-width:560px){.up-fab span{display:none}.up-fab{width:46px;padding:0;right:78px}}

.modal-overlay{position:fixed;inset:0;z-index:140;background:rgba(4,6,11,.7);backdrop-filter:blur(6px);animation:ovIn .18s ease;display:flex;align-items:center;justify-content:center;padding:20px}
.modal{width:560px;max-width:100%;max-height:92vh;overflow-y:auto;background:var(--surface);border:1px solid var(--line4);border-radius:20px;padding:32px;animation:mdlIn .24s cubic-bezier(.2,.7,.2,1)}
.modal-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:22px}
.modal-head h3{font-size:24px;font-weight:700}
.modal-head p{color:var(--muted);font-size:14px;margin-top:6px}
.link-btn{background:none;border:none;color:var(--cyan);font-size:14px;cursor:pointer;padding:0;font-family:"IBM Plex Sans",sans-serif;text-decoration:underline}
.icon-btn{width:36px;height:36px;border-radius:9px;background:var(--soft-bg2);border:1px solid var(--line3);color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center}
.icon-btn:hover{background:var(--hover)}
.icon-btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round}

/* ---- upload modal (above every other layer) -------------------------------- */
.up-overlay{position:fixed;inset:0;z-index:400;background:rgba(4,6,11,.72);backdrop-filter:blur(6px);
  animation:ovIn .18s ease;display:flex;align-items:center;justify-content:center;padding:20px}
.up-overlay.is-hidden{display:none}
.up-modal{position:relative;z-index:401;width:min(78vw,1180px);height:auto;min-width:min(340px,100%);max-height:calc(100vh - 40px);
  display:flex;flex-direction:column;overflow:hidden;
  background:var(--surface);border:1px solid var(--line4);border-radius:20px;
  animation:mdlIn .24s cubic-bezier(.2,.7,.2,1)}
.up-modal__head{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:16px 18px;border-bottom:1px solid var(--line)}
.up-modal__title{font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:16px;letter-spacing:-.01em}
.up-modal__body{position:relative;flex:1;min-height:0;background:#fff;display:flex;align-items:flex-start;justify-content:space-between;
  gap:16px;overflow:hidden;padding:16px 16px 16px 10px}
.up-modal__aside{flex:1;min-width:0;padding-right:24px;display:flex;flex-direction:column;gap:22px}
.up-modal__brand{display:flex;align-items:center;gap:16px}
.up-modal__logo{flex:none;width:min(155px,34%);height:auto;display:block}
.up-modal__welcome{font-family:"Space Grotesk",sans-serif;font-size:clamp(17px,1.6vw,22px);font-weight:700;
  line-height:1.25;letter-spacing:-.02em;color:#0b2b52;text-wrap:pretty}
.up-modal__blurb{font-family:"IBM Plex Sans",sans-serif;font-size:15px;line-height:1.6;color:#33415a;
  max-width:56ch;text-wrap:pretty}
.up-modal__help{margin-top:64px;display:flex;flex-direction:column;gap:2px;font-family:"IBM Plex Sans",sans-serif;font-size:15px;line-height:1.55}
.up-modal__help strong{font-family:"Space Grotesk",sans-serif;font-weight:700;color:#0b2b52}
.up-modal__help span{color:#33415a}
.up-modal__help a{margin-top:7px;color:#1263c8;font-weight:600;text-decoration:underline;text-underline-offset:3px}
@media (max-width:980px){.up-modal__welcome{font-size:16px}
  .up-modal__blurb,.up-modal__help{font-size:13.5px}.up-modal__aside{gap:16px}.up-modal__help{margin-top:44px}}
@media (max-width:820px){.up-modal__aside{display:none}}
/* the Box widget renders a ~420px-tall card at the TOP of its own document and
   is cross-origin, so we can't center inside it — instead the iframe is sized to
   hug that card and centred in the white body. */
/* max-width is pulled in to the card's own width: the Box page centres its card,
   so any extra iframe width shows as slack that keeps it off the edge. */
/* The Box widget always prints its own heading (falling back to the account
   owner's name when title= is blank) and it is cross-origin, so it can't be
   styled — the frame is offset inside a clipping wrapper to crop that row off. */
/* clip is inset on every side so the widget card's own 1px frame is cropped too */
.up-frame-clip{position:relative;flex:none;width:100%;max-width:400px;height:351px;max-height:calc(100vh - 220px);overflow:hidden}
.up-modal__body iframe{position:absolute;top:-72px;left:-16px;display:block;width:432px;height:444px;border:0}

@media (max-width:820px){
  .up-modal{width:94vw}
  .up-modal__body{padding:14px}
  .up-frame-clip{max-width:400px}
}

/* the upload modal is intentionally dark in BOTH themes — the dark tokens are
   re-declared on the overlay so the light theme can't repaint it. */
[data-theme="light"] .up-overlay{
  --surface:#101A2A; --text:#ECF1FA; --muted:#93A0B8; --soft2:#8A97AD; --dim2:#7C89A0;
  --soft-bg:rgba(255,255,255,.04); --soft-bg2:rgba(255,255,255,.05); --hover:rgba(255,255,255,.06);
  --line:rgba(255,255,255,.08); --line3:rgba(255,255,255,.1); --line4:rgba(255,255,255,.12);
  --cyan:#35E0D0; --blue:#3F8CFF; --violet:#8079FF;
  background:rgba(4,6,11,.72)}
[data-theme="light"] .up-modal{color:var(--text)}

/* prettier upload wrapper */
.up-modal{box-shadow:0 40px 90px rgba(0,0,0,.45)}
.up-modal::before{content:"";position:absolute;inset:0 0 auto;height:3px;
  background:linear-gradient(90deg,var(--cyan),var(--blue),var(--violet));z-index:2}
.up-modal__head{align-items:center;justify-content:flex-start;gap:12px;padding:18px 20px 15px;
  background:linear-gradient(180deg,color-mix(in srgb,var(--cyan) 7%,transparent),transparent)}
.up-modal__head-ic{flex:none;width:54px;height:54px;border-radius:14px;display:flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--cyan) 14%,transparent);
  border:1px solid color-mix(in srgb,var(--cyan) 32%,transparent);color:var(--cyan)}
.up-modal__head-ic svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.up-modal__head-txt{display:flex;flex-direction:column;gap:4px;min-width:0;margin-right:auto}
.up-modal__sub{color:var(--muted);font-size:12.5px;line-height:1.45}
.up-modal__foot{display:flex;flex-wrap:wrap;gap:6px 18px;justify-content:space-between;
  padding:11px 20px;border-top:1px solid var(--line);background:var(--soft-bg2)}
.up-modal__note{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.02em;color:var(--dim2)}
.up-modal__note a{color:var(--cyan)}

/* inline upload prompt inside the contact + quote forms */
.up-drop{display:flex;align-items:center;gap:14px;width:100%;text-align:left;cursor:pointer;
  padding:16px 18px;border-radius:14px;font-family:"IBM Plex Sans",sans-serif;
  border:1.5px dashed color-mix(in srgb,var(--ac,var(--cyan)) 45%,transparent);
  background:color-mix(in srgb,var(--ac,var(--cyan)) 6%,transparent);
  transition:background .18s ease,border-color .18s ease,transform .18s ease}
.up-drop:hover{background:color-mix(in srgb,var(--ac,var(--cyan)) 11%,transparent);
  border-color:var(--ac,var(--cyan));transform:translateY(-1px)}
.up-drop__ic{flex:none;width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--ac,var(--cyan)) 16%,transparent);color:var(--ac,var(--cyan))}
.up-drop__ic svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.up-drop__txt{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.up-drop__txt strong{font-family:"Space Grotesk",sans-serif;font-size:14.5px;font-weight:700;color:var(--text)}
.up-drop__txt span{color:var(--muted);font-size:12.8px;line-height:1.45}
.up-drop__go{flex:none;font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--ac,var(--cyan))}
@media (max-width:620px){.up-drop{flex-wrap:wrap}.up-drop__go{width:100%;padding-left:54px}}
/* contact page: the prompt sits beside the page title */
.contact-head{display:flex;align-items:center;gap:32px;justify-content:space-between}
.contact-head .up-drop{flex:none;width:330px;flex-wrap:wrap;margin-top:60px}
.contact-head .up-drop__go{width:100%;padding-left:54px}
@media (max-width:900px){.contact-head{flex-direction:column;gap:22px}.contact-head .up-drop{width:100%;margin-top:0}}

/* the mid-form reminder */
.up-nudge{position:fixed;z-index:350;right:22px;bottom:22px;width:min(340px,calc(100vw - 32px));
  display:flex;gap:13px;padding:16px 16px 15px;border-radius:16px;
  background:var(--surface);border:1px solid var(--line4);
  box-shadow:0 24px 60px rgba(0,0,0,.4);animation:nudgeIn .3s cubic-bezier(.2,.75,.25,1)}
.up-nudge::before{content:"";position:absolute;inset:0 0 auto;height:3px;border-radius:16px 16px 0 0;
  background:linear-gradient(90deg,var(--cyan),var(--blue))}
@keyframes nudgeIn{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
.up-nudge__ic{flex:none;width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--cyan) 15%,transparent);color:var(--cyan)}
.up-nudge__ic svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.up-nudge__body{flex:1;min-width:0}
.up-nudge__body strong{display:block;font-family:"Space Grotesk",sans-serif;font-size:14px;font-weight:700;margin-bottom:4px}
.up-nudge__body p{color:var(--muted);font-size:12.6px;line-height:1.5;margin-bottom:11px}
.up-nudge__row{display:flex;align-items:center;gap:14px}
.up-nudge__row .link-btn{font-size:12.5px}
.up-nudge__x{position:absolute;top:8px;right:8px;width:26px;height:26px;border:none;background:none;
  color:var(--dim2);cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:7px}
.up-nudge__x:hover{background:var(--hover);color:var(--text)}
.up-nudge__x svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round}
@media (max-width:620px){.up-nudge{right:12px;left:12px;bottom:12px;width:auto}}
@media (prefers-reduced-motion:reduce){.up-nudge{animation:none}}

.footer-mail{margin-top:10px}
.footer-mail a{color:var(--cyan);font-size:13.5px}

.mobile-nav{position:fixed;inset:0;z-index:160;background:var(--mnav-bg);backdrop-filter:blur(8px);animation:ovIn .18s ease;overflow-y:auto;padding:20px 24px 40px}
.mnav-top{display:flex;justify-content:space-between;align-items:center;height:44px;margin-bottom:14px}
.mnav-top span{font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:16px}
.mnav-top .icon-btn{width:42px;height:42px;border-radius:10px}
.mnav-top .icon-btn svg{width:18px;height:18px}
.m-link{width:100%;text-align:left;background:none;border:none;border-top:1px solid var(--line);padding:18px 2px;color:var(--text);font-family:"Space Grotesk",sans-serif;font-size:20px;font-weight:600;cursor:pointer;display:block}
.m-group{display:flex;justify-content:space-between;align-items:center}
.m-group .sign{color:var(--cyan);font-size:24px}
.m-sub{padding:0 4px 14px}
.m-sub__item{display:flex;gap:11px;align-items:center;width:100%;text-align:left;background:none;border:none;color:var(--soft);font-size:15px;padding:10px 0;cursor:pointer;font-family:"IBM Plex Sans",sans-serif}
.m-sub__item .ic{color:var(--ac)}
.m-sub__item .ic svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.m-cta{margin-top:24px}
.contact-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:24px}
.contact-card .name{display:flex;align-items:center;gap:10px;font-family:"Space Grotesk",sans-serif;font-weight:700;font-size:16px;margin-bottom:10px}
.contact-card .name .sq{width:24px;height:24px;border-radius:7px;background:linear-gradient(135deg,var(--cyan),var(--blue));flex:none}

.is-hidden{display:none!important}

/* ============================================================================
   RESPONSIVE
   ========================================================================== */
@media (max-width:1040px){
  .nav{display:none}
  .nav-cta{display:none}
  .hamburger{display:flex}
}
@media (min-width:721px){
  .process-vert{display:none!important}
}
@media (max-width:720px){
  .process-horiz{display:none!important}
  .process-vert{display:block}
}
@media (max-width:560px){
  .footer-cols{gap:32px}
  .demo-foot{gap:14px}
}


/* ==========================================================================
   DRILL-DOWN HIERARCHY
   Overview and detail pages covered the same ground with nothing saying which
   was which. Breadcrumbs, depth cues, and cross-axis links declare the
   relationship so the repetition reads as structure, not duplication.
   ========================================================================== */
.crumbs{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:20px;font-family:"IBM Plex Mono",monospace;font-size:11.5px;letter-spacing:.04em}
.crumbs__link{background:none;border:none;padding:0;cursor:pointer;color:var(--dim2);font:inherit;letter-spacing:inherit;transition:color .18s}
.crumbs__link:hover{color:var(--text)}
.crumbs__sep{color:var(--dim);opacity:.55}
.crumbs__here{color:var(--soft)}

.depth-note{margin-top:18px;color:var(--dim2);font-size:13.5px;line-height:1.55;max-width:62ch;text-wrap:pretty}
.depth-tag{display:inline-block;vertical-align:middle;margin-left:14px;transform:translateY(-2px);font-family:"IBM Plex Mono",monospace;font-size:10.5px;font-weight:400;letter-spacing:.14em;text-transform:uppercase;color:var(--ac);background:var(--ac-06);border:1px solid var(--ac-22);border-radius:20px;padding:5px 11px}

/* service coverage card → the industry card covering the same ground */
.xlink{display:inline-flex;align-items:center;gap:8px;margin-top:16px;background:none;border:none;padding:0;cursor:pointer;color:var(--soft2);font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.05em;text-align:left;transition:color .18s}
.xlink:hover{color:var(--ac)}
.xlink svg{width:13px;height:13px;flex:none;fill:none}
.xlink__k{color:var(--dim);text-transform:uppercase;letter-spacing:.14em}

/* industry card → the service pages carrying the detail */
.ind-svcs{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
.ind-svcs__lab{display:block;font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim2);margin-bottom:11px}
.ind-svcs__row{display:flex;flex-wrap:wrap;gap:8px}
.ind-svc{display:inline-flex;align-items:center;gap:6px;font-family:"IBM Plex Sans",sans-serif;font-size:12.5px;color:var(--soft);background:var(--soft-bg2);border:1px solid var(--line);border-radius:20px;padding:6px 13px;cursor:pointer;transition:color .18s,border-color .18s,background .18s}
.ind-svc svg{width:12px;height:12px;fill:none;opacity:.55}
.ind-svc:hover{color:var(--text);border-color:var(--ac-50);background:var(--ac-06)}
.ind-svc:hover svg{opacity:1}


/* ==========================================================================
   PARALLAX PHOTO SECTIONS (home)
   A full-bleed photo layer replaces the flat band tint on two home sections.
   The image is oversized and translated on scroll; the scrim is theme-driven
   so body copy keeps its contrast in both light and dark.
   ========================================================================== */
#view>section.has-px::before{display:none}
.px-bg{position:absolute;inset:0;left:50%;width:100vw;transform:translateX(-50%);z-index:-1;overflow:hidden;pointer-events:none;border-block:1px solid var(--band-line)}
.px-bg__img{position:absolute;left:0;top:-15%;width:100%;height:130%;object-fit:cover;filter:var(--px-filter);will-change:transform;transition:filter .4s ease}
.px-bg__scrim{position:absolute;inset:0;background:linear-gradient(100deg,var(--px-scrim) 0%,var(--px-scrim) 42%,var(--px-scrim-2) 100%);transition:background .4s ease}
@media (prefers-reduced-motion:reduce){.px-bg__img{transform:none!important;will-change:auto}}
