/* ==========================================================================
   dmp — design system stylesheet
   Rebuilt to match the live dmpservice.ai markup exactly: Outfit + IBM Plex
   Mono, deep-space/radioactive/green-mist/pearl palette, flat elevation
   (1px borders only, no shadows), 80px dot-grid, 8px radius.
   ========================================================================== */

/* Fonts (Outfit + IBM Plex Mono) are loaded via a <link rel="stylesheet"> tag in
   each page's <head>, not @import here — @import is render-blocking and delays
   font discovery until this file is parsed. See gen_common.py head(). */

:root{
  --c-white:   #FFFFFF;
  --c-deep:    #121212;
  --c-deep-hover: #424242;
  --c-canvas:  #0E1110;   /* dark SECTION backgrounds only; --c-deep stays ink */
  --c-radioactive: #E3FF58;   /* LOUD accent: primary CTA, live dot, hero mark */
  --c-lime-deep:   #9BB80E;   /* QUIET accent: hover, active-secondary, inactive chip.
                                 2.27:1 on white — fill/border only on light; text OK on canvas (8.37:1) */
  --c-grey:    #8A928E;   /* 3.19:1 on white — ICONS + large/decorative ONLY, never small text */
  --c-grey-lt: #D3D8D4;   /* borders, dividers, muted text on dark */
  --c-chip:    #C7CEC7;   /* quiet FILLED chip + icon-tile surfaces */
  --c-ink-inv: #EDEFEC;   /* primary ink on dark */
  --c-secondary-hover: #EFF2EE;
  --c-success: #2E7D32;
  --c-destructive: #C62828;
  --c-focus:   #1A73E8;

  --c-deep-70: rgba(18,18,18,.72);  /* 7.6:1 on white — use for all small/mono text */
  --c-deep-55: rgba(18,18,18,.55);  /* 4.1:1 on white — large display numbers only, never small text */
  --c-deep-45: rgba(18,18,18,.45);  /* DECORATIVE ONLY — fails WCAG AA text contrast, never apply to text */

  --font-base: 'Outfit', 'Plus Jakarta Sans', system-ui, sans-serif;
  --font-mono: 'IBM Plex Mono', ui-monospace, monospace;

  --h1: clamp(42px, 6.4vw, 96px);
  --h2: clamp(34px, 4.6vw, 64px);
  --h3: clamp(24px, 2.2vw, 32px);
  --h4: clamp(28px, 2.6vw, 40px);
  --h-hero-c: clamp(28px, 3.3vw, 48px);

  --max: 1440px;
  --gap-page: 40px;

  --ease: cubic-bezier(.2,.7,.2,1);
  --ease-rise: cubic-bezier(.16,1,.3,1);

  --c-wash:  #F3F5F1;
  --c-paper: #FDFDFC;
  --sh-sm: 0 1px 2px rgba(18,18,18,.04), 0 6px 18px rgba(18,18,18,.05);
  --sh-md: 0 2px 4px rgba(18,18,18,.05), 0 12px 32px rgba(18,18,18,.09);
  --sh-lg: 0 4px 8px rgba(18,18,18,.05), 0 28px 80px rgba(18,18,18,.14);
}

*, *::before, *::after{ box-sizing:border-box; }
html{ scroll-behavior:smooth; }
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  *, *::before, *::after{ animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important; }
}
body{
  margin:0; font-family:var(--font-base); background:var(--c-white); color:var(--c-deep);
  -webkit-font-smoothing:antialiased; overflow-x:clip;
}
a{ color:var(--c-deep); text-decoration:none; }
a:hover{ color:var(--c-deep-hover); }
h1,h2,h3,h4,h5,h6,p,ul,ol,figure{ margin:0; padding:0; }
ul,ol{ list-style:none; }
img,svg{ display:block; max-width:100%; }
button{ font-family:inherit; cursor:pointer; background:none; border:none; padding:0; }
::selection{ background:var(--c-radioactive); color:var(--c-deep); }
:focus-visible{ outline:2px solid var(--c-focus); outline-offset:3px; transition:outline-offset 150ms var(--ease); }
a:focus-visible, button:focus-visible{ outline-offset:4px; }

.wrap{ max-width:var(--max); margin:0 auto; padding:0 var(--gap-page); }
@media (max-width:700px){ .wrap{ padding:0 20px; } }

.skip-link{
  position:absolute; left:-9999px; top:8px; background:var(--c-deep); color:var(--c-white);
  padding:12px 16px; border-radius:8px; font-size:16px; z-index:100;
}
.skip-link:focus{ left:24px; }

/* Cursor ring (magnet) */
#dmp-ring{
  position:fixed; top:0; left:0; width:40px; height:40px; border:1px solid var(--c-deep);
  border-radius:50%; pointer-events:none; z-index:90; opacity:0; transform:translate(-100px,-100px);
  mix-blend-mode:difference; background:transparent;
}
@media (hover:none){ #dmp-ring{ display:none; } }

/* Dot-grid textures */
.dotfield{ position:absolute; inset:0; background-image:radial-gradient(#121212 1px, transparent 1px); background-size:80px 80px; opacity:.2; }
.dotglow{ position:absolute; inset:0; background-image:radial-gradient(#121212 1.5px, transparent 1.5px); background-size:80px 80px; opacity:0; transition:opacity 400ms var(--ease); }

/* ==========================================================================
   Type utilities
   ========================================================================== */
.eyebrow{
  font-family:var(--font-mono); font-size:14px; letter-spacing:.08em; text-transform:uppercase; color:var(--c-deep-70);
}
.eyebrow--inv{ color:var(--c-lime-deep); }
.mono{ font-family:var(--font-mono); }
h1{ font-size:var(--h1); line-height:1.1; font-weight:300; letter-spacing:-.035em; }
h2{ font-size:var(--h2); line-height:1.2; font-weight:400; letter-spacing:-.025em; }
h3{ font-size:var(--h3); line-height:1.3; font-weight:500; }
h4{ font-size:var(--h4); line-height:1.2; font-weight:400; letter-spacing:-.02em; }
.lede{ font-size:22px; line-height:1.5; }
.text2{ font-size:20px; line-height:1.5; }
.text3{ font-size:16px; line-height:1.5; }
.flag{ font-family:var(--font-mono); font-size:14px; color:var(--c-destructive); }

mark.accent{ background:none; color:inherit; position:relative; white-space:nowrap; }

/* ==========================================================================
   Buttons
   ========================================================================== */
.btn{
  --tx:0px; --ty:0px;
  position:relative; overflow:hidden; isolation:isolate;
  font-size:16px; font-weight:500; padding:16px 28px; border-radius:8px; min-height:44px;
  display:inline-flex; align-items:center; gap:12px;
  transition:color 320ms var(--ease), transform 260ms var(--ease), border-color 320ms var(--ease);
  transform:translate(var(--tx),var(--ty)); white-space:nowrap;
}
.btn::before{
  content:''; position:absolute; inset:0; z-index:-1; transform:translateY(101%);
  transition:transform 380ms cubic-bezier(.65,0,.35,1);
}
.btn:hover::before{ transform:translateY(0); }
.btn:active{ transform:translate(var(--tx),var(--ty)) scale(.96); }

.btn-primary{ background:var(--c-deep); color:var(--c-white); }
.btn-primary::before{ background:var(--c-radioactive); }
.btn-primary:hover{ color:var(--c-deep); }
.btn-secondary{ background:var(--c-white); border:1px solid var(--c-deep); color:var(--c-deep); }
.btn-secondary::before{ background:var(--c-deep); }
.btn-secondary:hover{ color:var(--c-white); }
.btn-accent{ background:var(--c-radioactive); color:var(--c-deep); justify-content:space-between; }
.btn-accent::before{ background:var(--c-deep); }
.btn-accent:hover{ color:var(--c-lime-deep); }
.btn-inverse{ background:var(--c-white); color:var(--c-deep); }
.btn-inverse::before{ background:var(--c-radioactive); }
.btn-inverse:hover{ color:var(--c-deep); }
.btn-underline{
  font-size:16px; font-weight:500; display:inline-flex; align-items:center; gap:8px; min-height:44px;
  border-bottom:1px solid var(--c-deep); align-self:start; transition:gap 260ms var(--ease), color 260ms var(--ease);
}
.btn-underline:hover{ color:var(--c-deep-hover); gap:14px; }
.btn-small{ font-size:16px; font-weight:500; border:1px solid var(--c-deep); border-radius:8px; padding:16px 24px; min-height:44px; display:inline-flex; align-items:center; gap:8px; transition:background 250ms var(--ease), transform 260ms var(--ease); }
.btn-small:hover{ background:var(--c-secondary-hover); }
.btn-small:active{ transform:scale(.96); }

.btn-lg{ font-size:18px; padding:20px 36px; min-height:60px; gap:14px; }

.btn:disabled, .btn[aria-disabled="true"]{
  background:var(--c-chip); color:var(--c-deep-70); border-color:var(--c-grey-lt);
  cursor:not-allowed; pointer-events:none;
}
.btn:disabled::before{ display:none; }

/* ==========================================================================
   Header
   ========================================================================== */
header.site{
  position:sticky; top:0; z-index:80; background:rgba(255,255,255,.86);
  backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px); border-bottom:1px solid var(--c-deep);
}
header.site .bar{ height:80px; display:flex; align-items:center; gap:40px; }
.logo{ display:flex; align-items:center; gap:10px; }
.logo .mark{ width:26px; height:18px; flex:none; }
.logo .mark rect{ fill:var(--c-deep); transition:fill 200ms var(--ease); }
.logo .word{ font-size:22px; font-weight:500; letter-spacing:-.02em; line-height:1; color:var(--c-deep); transition:color 200ms var(--ease); }
.logo:hover .word{ color:var(--c-deep-hover); }
.logo--inv .mark rect{ fill:var(--c-white); }
.logo--inv .word{ color:var(--c-white); }
.logo--inv:hover .word{ color:var(--c-lime-deep); }

nav.desktop{ display:flex; gap:32px; font-size:16px; margin-left:8px; }
nav.desktop a{ padding:8px 0; border-bottom:1px solid transparent; }
nav.desktop a:hover{ border-bottom-color:var(--c-deep); color:var(--c-deep); }
.hdr-actions{ margin-left:auto; display:flex; align-items:center; gap:16px; }
.hdr-actions .login{ font-size:16px; padding:12px 8px; min-height:44px; display:inline-flex; align-items:center; }
.hdr-actions .btn-primary{ padding:14px 24px; }

.menubtn{ display:none; flex:0 0 44px; width:44px; height:44px; border:1px solid var(--c-deep); border-radius:8px; background:var(--c-white); flex-direction:column; align-items:center; justify-content:center; gap:5px; }
.menubtn span{ width:18px; height:1.5px; background:var(--c-deep); display:block; transition:transform 260ms var(--ease), opacity 200ms var(--ease); }
.menubtn[aria-expanded="true"] span:nth-child(1){ transform:translateY(6.5px) rotate(45deg); }
.menubtn[aria-expanded="true"] span:nth-child(2){ opacity:0; }
.menubtn[aria-expanded="true"] span:nth-child(3){ transform:translateY(-6.5px) rotate(-45deg); }

#dmp-mobile-nav{
  display:grid; grid-template-rows:0fr; background:var(--c-white); opacity:0; visibility:hidden;
  transition:grid-template-rows 360ms var(--ease), opacity 240ms var(--ease), visibility 0s linear 360ms;
}
#dmp-mobile-nav.open{ grid-template-rows:1fr; opacity:1; visibility:visible; transition:grid-template-rows 360ms var(--ease), opacity 240ms var(--ease); }
#dmp-mobile-nav .inner{ display:grid; min-height:0; overflow:hidden; padding:0 20px 20px; border-top:1px solid var(--c-deep); }
#dmp-mobile-nav a{ font-size:20px; padding:18px 0; border-bottom:1px solid var(--c-grey-lt); min-height:44px; }
#dmp-mobile-nav .btn-primary{ margin-top:12px; justify-content:center; }

@media (min-width:1081px){ .menubtn, #dmp-mobile-nav{ display:none !important; } }
@media (max-width:1080px){ nav.desktop{ display:none !important; } .hdr-actions .btn-primary{ display:none !important; } .menubtn{ display:inline-flex; } }

/* ==========================================================================
   Sections generic
   ========================================================================== */
section{ border-bottom:1px solid var(--c-deep); position:relative; }
section:last-of-type{ border-bottom:none; }
.sec-pad{ padding:120px 0; }
@media (max-width:700px){ .sec-pad{ padding:72px 0 !important; } }

.row-2col{ display:grid; grid-template-columns:minmax(0,1.05fr) minmax(0,1fr); gap:64px; align-items:center; }
.row-2col--wide{ grid-template-columns:minmax(0,.85fr) minmax(0,1fr); gap:80px; align-items:start; }
.row-2col--bench{ grid-template-columns:minmax(0,.8fr) minmax(0,1fr); gap:64px; align-items:center; }
.row-2col--story{ grid-template-columns:minmax(0,1fr) minmax(0,.9fr); gap:80px; align-items:center; }
.row-2col--trust{ grid-template-columns:minmax(0,.8fr) minmax(0,1fr); gap:80px; }
.row-2col--faq{ grid-template-columns:minmax(0,.7fr) minmax(0,1fr); gap:80px; }
@media (max-width:1080px){
  .row-2col, .row-2col--wide, .row-2col--bench, .row-2col--story, .row-2col--trust, .row-2col--faq{ grid-template-columns:minmax(0,1fr) !important; gap:48px !important; }
}

.row-3col{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:24px; }
.row-4col{ display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:16px; }
@media (max-width:1080px){ .row-3col,.row-4col{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:700px){ .row-3col,.row-4col{ grid-template-columns:minmax(0,1fr) !important; } }

/* ==========================================================================
   Hero
   ========================================================================== */
.hero{ position:relative; overflow:hidden; }
.hero::before{
  content:''; position:absolute; top:-20%; right:-10%; width:900px; height:900px; z-index:0;
  background:radial-gradient(circle, rgba(227,255,88,.5) 0%, rgba(227,255,88,.14) 45%, transparent 72%);
  pointer-events:none;
}
.hero .wrap{ position:relative; z-index:1; }
.hero-grid{ min-height:720px; padding:96px 0 64px; }
@media (max-width:1080px){ .hero-grid{ min-height:0; padding:64px 0 48px; } }

.hero-badge{
  display:inline-flex; align-items:center; gap:12px; border:1px solid var(--c-deep); border-radius:8px;
  padding:8px 12px 8px 8px; font-size:16px; margin-bottom:32px;
}
.hero-badge .tag{ background:var(--c-radioactive); border-radius:4px; padding:4px 8px; font-family:var(--font-mono); font-size:14px; letter-spacing:.04em; }

.rise-line{ display:block; overflow:hidden; }
.rise-line span{ display:block; transform:translateY(110%); }
.hero h1{ max-width:15ch; }
.underline-wrap{ position:relative; white-space:nowrap; }
.underline-wrap .u{ position:absolute; left:0; right:0; bottom:6px; height:14px; background:var(--c-radioactive); z-index:-1; display:block; transform:scaleX(0); transform-origin:left; }

.hero .lede{ max-width:52ch; margin-top:32px; }
.hero-ctas{ display:flex; flex-wrap:wrap; gap:16px; margin-top:40px; }
.hero-tags{
  display:flex; flex-wrap:wrap; gap:32px; margin-top:48px; padding-top:32px; border-top:1px solid var(--c-grey-lt);
  font-family:var(--font-mono); font-size:14px; letter-spacing:.04em; text-transform:uppercase;
}

.hero-panel{
  position:relative; border:none; background:transparent;
  height:520px; overflow:visible; perspective:1400px;
}
.hero-panel-inner{
  position:absolute; inset:0; transform-style:preserve-3d;
  transition:transform 500ms cubic-bezier(.2,.7,.2,1);
  transform:rotateY(-6deg) rotateX(3deg) scale(1.01);
}
.hero-panel:hover .hero-panel-inner{ transform:rotateY(-2deg) rotateX(1deg) scale(1.015); }
@media (prefers-reduced-motion: reduce){ .hero-panel-inner{ transform:none !important; transition:none; } }
@media (max-width:1080px){ .hero-panel{ perspective:none; } .hero-panel-inner{ transform:none !important; } }

/* ---- Real product mockup: browser-chrome app frame ---- */
.app-frame{
  position:absolute; inset:0; border:1px solid var(--c-deep); border-radius:12px; overflow:hidden;
  background:var(--c-white); display:flex; flex-direction:column;
}
.app-chrome{
  display:flex; align-items:center; gap:8px; padding:14px 16px; border-bottom:1px solid var(--c-deep);
  background:var(--c-chip); flex:none;
}
.app-chrome .dot{ width:8px; height:8px; border-radius:50%; border:1px solid var(--c-deep); background:var(--c-white); flex:none; }
.app-chrome .sample-tag{
  margin-left:auto; font-family:var(--font-mono); font-size:11px; letter-spacing:.04em; text-transform:uppercase;
  color:var(--c-deep-70); border:1px solid var(--c-deep-70); border-radius:4px; padding:2px 8px; flex:none;
}
.app-chrome .url{
  margin-left:8px; font-family:var(--font-mono); font-size:12px; color:var(--c-deep-70);
  background:var(--c-white); border:1px solid var(--c-deep); border-radius:4px; padding:5px 12px; flex:1; max-width:280px;
}
.app-body{ display:grid; grid-template-columns:60px 1fr; flex:1; min-height:0; }
.app-sidebar{ border-right:1px solid var(--c-deep); background:var(--c-white); display:flex; flex-direction:column; align-items:center; gap:16px; padding:20px 0; }
.app-sidebar .ic{ width:32px; height:32px; border-radius:8px; display:flex; align-items:center; justify-content:center; }
.app-sidebar .ic svg{ width:16px; height:16px; }
.app-sidebar .ic.active{ background:var(--c-deep); }
.app-sidebar .ic.active svg{ stroke:var(--c-white); }
.app-main{ padding:24px; overflow:hidden; display:flex; flex-direction:column; gap:20px; }

.app-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; }
.app-head .t{ font-size:18px; font-weight:500; }
.app-head .live{ display:flex; align-items:center; gap:6px; font-family:var(--font-mono); font-size:12px; text-transform:uppercase; letter-spacing:.04em; color:var(--c-deep-70); }
.app-head .live .dot{ width:6px; height:6px; border-radius:50%; background:var(--c-success); animation:dmp-blink 2s ease-in-out infinite; }

.app-compare .row{ margin-bottom:14px; opacity:0; transform:translateX(-12px); animation:dmp-rowin 600ms var(--ease) forwards; }
.app-compare .row:nth-child(1){ animation-delay:200ms; }
.app-compare .row:nth-child(2){ animation-delay:400ms; }
.app-compare .row .lbl{ display:flex; justify-content:space-between; font-family:var(--font-mono); font-size:12px; color:var(--c-deep-70); margin-bottom:6px; }
.app-compare .row .lbl b{ font-family:var(--font-base); font-size:14px; color:var(--c-deep); font-weight:500; }
.app-compare .track{ height:10px; background:var(--c-chip); border-radius:4px; overflow:hidden; }
.app-compare .fill{ height:100%; border-radius:4px; transform-origin:left; transform:scaleX(0); animation:dmp-fillin 900ms var(--ease) forwards; }
.app-compare .row:nth-child(1) .fill{ animation-delay:500ms; }
.app-compare .row:nth-child(2) .fill{ animation-delay:700ms; }
.app-compare .fill--deep{ background:var(--c-deep); }
.app-compare .fill--lime{ background:var(--c-lime-deep); }

.app-table{ border:1px solid var(--c-deep); border-radius:8px; overflow:hidden; opacity:0; animation:dmp-rowin 600ms var(--ease) 900ms forwards; }
.app-table .tr{ display:grid; grid-template-columns:1fr auto auto; gap:12px; align-items:center; padding:10px 14px; font-size:13px; }
.app-table .tr + .tr{ border-top:1px solid var(--c-grey-lt); }
.app-table .tr .p{ font-family:var(--font-mono); color:var(--c-deep-70); }
.app-table .chip{
  display:inline-block; border:1px solid var(--c-deep); border-radius:4px; background:var(--c-white);
  font-family:var(--font-mono); font-size:11px; padding:2px 8px; line-height:1.5;
}
.app-table .chip--won{ background:var(--c-lime-deep); border-color:var(--c-deep); }

/* ---- Envelope cards (bid evaluation mockup) ---- */
.app-envelopes{ display:grid; gap:12px; }
.app-env{
  border:1px solid var(--c-deep); border-radius:8px; padding:14px 16px;
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  opacity:0; transform:translateY(10px); animation:dmp-rowin2 550ms var(--ease) forwards;
}
.app-env:nth-child(1){ animation-delay:200ms; }
.app-env:nth-child(2){ animation-delay:550ms; }
.app-env:nth-child(3){ animation-delay:900ms; }
.app-env .name{ font-size:14px; font-weight:500; }
.app-env .sub{ font-family:var(--font-mono); font-size:11px; color:var(--c-deep-70); margin-top:2px; }
.app-env .state{ font-family:var(--font-mono); font-size:11px; border:1px solid var(--c-deep); border-radius:4px; padding:3px 8px; flex:none; }
.app-env--done .state{ background:var(--c-lime-deep); }
.app-env--locked{ background:var(--c-chip); }
.app-env--locked .state{ background:var(--c-white); color:var(--c-deep-70); }
@keyframes dmp-rowin2{ to{ opacity:1; transform:translateY(0); } }

/* ---- Forecast bars (demand planning mockup) ---- */
.app-forecast{ display:flex; align-items:flex-end; gap:10px; height:140px; border-bottom:1px solid var(--c-deep); padding-bottom:1px; }
.app-forecast .bar{
  flex:1; border:1px solid var(--c-deep); border-radius:3px 3px 0 0; border-bottom:none;
  background:var(--c-chip); transform-origin:bottom; transform:scaleY(0);
  animation:dmp-fillin-v 700ms var(--ease) forwards;
}
.app-forecast .bar--now{ background:var(--c-deep); }
.app-forecast .bar:nth-child(1){ animation-delay:150ms; }
.app-forecast .bar:nth-child(2){ animation-delay:280ms; }
.app-forecast .bar:nth-child(3){ animation-delay:410ms; }
.app-forecast .bar:nth-child(4){ animation-delay:540ms; }
.app-forecast .bar:nth-child(5){ animation-delay:670ms; }
.app-forecast-labels{ display:flex; gap:10px; margin-top:8px; }
.app-forecast-labels span{ flex:1; text-align:center; font-family:var(--font-mono); font-size:11px; color:var(--c-deep-70); }
@keyframes dmp-fillin-v{ to{ transform:scaleY(1); } }
@media (prefers-reduced-motion: reduce){
  .app-env, .app-forecast .bar{ animation:none !important; opacity:1 !important; transform:none !important; }
}

@keyframes dmp-rowin{ to{ opacity:1; transform:translateX(0); } }
@keyframes dmp-fillin{ to{ transform:scaleX(1); } }
@media (prefers-reduced-motion: reduce){
  .app-compare .row, .app-compare .fill, .app-table{ animation:none !important; opacity:1 !important; transform:none !important; }
}

/* Trusted-by marquee */
.marquee-sec{ background:var(--c-canvas); color:var(--c-ink-inv); overflow:hidden; }
.marquee-row{ display:flex; align-items:center; gap:40px; padding:24px 0; }
.marquee-label{ flex:none; padding-left:40px; font-family:var(--font-mono); font-size:14px; letter-spacing:.08em; text-transform:uppercase; color:var(--c-radioactive); }
.marquee-mask{ flex:1; overflow:hidden; -webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent); mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent); }
.marquee-track{ display:flex; gap:56px; width:max-content; animation:dmp-marquee 32s linear infinite; }
.marquee-track span{ font-size:20px; font-weight:300; white-space:nowrap; color:var(--c-white); opacity:.85; }

/* Problem list */
.problem-list{ display:grid; border-top:1px solid var(--c-deep); }
.problem-item{ border-bottom:1px solid var(--c-deep); padding:28px 0; display:grid; grid-template-columns:44px minmax(0,1fr); gap:20px; align-items:start; }
.problem-item .num{ font-family:var(--font-mono); font-size:14px; letter-spacing:.04em; color:var(--c-deep-70); padding-top:8px; }
.problem-item .ic{ width:44px; height:44px; border-radius:8px; background:var(--c-chip); display:flex; align-items:center; justify-content:center; flex:none; }
.problem-item .ic svg{ width:20px; height:20px; }

/* Modules */
.mod-card{ position:relative; overflow:hidden; isolation:isolate; border:1px solid var(--c-deep); border-radius:8px; padding:32px; background:var(--c-white); display:flex; flex-direction:column; transition:background 250ms var(--ease), transform 250ms var(--ease), border-color 250ms var(--ease); }
.mod-card:hover{ background:var(--c-lime-deep); transform:translateY(-8px); border-color:var(--c-deep); }
.mod-card::after{
  content:attr(data-n); position:absolute; right:-.12em; bottom:-.32em; z-index:-1;
  font-size:168px; font-weight:300; line-height:1; letter-spacing:-.05em; color:var(--c-grey-lt);
  transition:color 250ms var(--ease), transform 400ms var(--ease); transform:translateY(0);
}
.mod-card:hover::after{ color:rgba(18,18,18,.14); transform:translateY(-6px); }
.mod-top{ display:flex; align-items:center; justify-content:space-between; gap:16px; }
.mod-top .num{ font-family:var(--font-mono); font-size:14px; letter-spacing:.04em; color:var(--c-deep-70); }
.mod-top .tag{ font-family:var(--font-mono); font-size:14px; letter-spacing:.04em; border:1px solid var(--c-deep); border-radius:4px; padding:2px 8px; transition:background 250ms var(--ease), color 250ms var(--ease); }
.mod-card:hover .mod-top .tag{ background:var(--c-deep); color:var(--c-lime-deep); }
.mod-card h3{ font-size:var(--h4); font-weight:400; letter-spacing:-.02em; margin-top:24px; line-height:1.2; }
.mod-card p{ font-size:16px; line-height:1.5; margin-top:12px; min-height:72px; }
.mod-viz{ display:grid; grid-template-columns:repeat(4,1fr); gap:8px; align-items:end; height:72px; margin-top:24px; border-bottom:1px solid var(--c-deep); }
.mod-viz .bar{ border:1px solid var(--c-deep); border-bottom:none; border-radius:2px 2px 0 0; transform-origin:bottom; }
.mod-points{ display:grid; gap:8px; margin-top:20px; }
.mod-points li{ font-size:16px; line-height:1.5; display:grid; grid-template-columns:20px minmax(0,1fr); gap:8px; }
.mod-points .dash{ font-family:var(--font-mono); }

.integration-card{ border:1px solid var(--c-deep); border-radius:8px; background:var(--c-canvas); color:var(--c-white); padding:32px; display:flex; flex-direction:column; justify-content:space-between; gap:32px; }
.integration-card h3{ font-size:var(--h4); font-weight:400; letter-spacing:-.02em; margin-top:24px; color:var(--c-white); }
.integration-card p{ font-size:16px; line-height:1.5; margin-top:12px; color:var(--c-grey-lt); }

/* Benchmark */
.bench-sec{ background:var(--c-chip); }
.counters{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; margin-top:40px; }
@media (max-width:700px){ .counters{ grid-template-columns:1fr; } }
.counter-card{ border:1px solid var(--c-deep); border-radius:8px; background:var(--c-white); padding:20px; }

/* ---- Team card: photo, name/title always visible, full bio on hover/focus ---- */
.team-card{
  position:relative; border:1px solid var(--c-deep); border-radius:8px; overflow:hidden;
  aspect-ratio:3/4; background:var(--c-chip);
}
.team-card img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:top center; }
.team-card .id{
  position:absolute; left:0; right:0; bottom:0; padding:16px;
  background:linear-gradient(to top, rgba(18,18,18,.88) 0%, rgba(18,18,18,.55) 60%, transparent 100%);
  transition:opacity 280ms var(--ease);
}
.team-card .id h3{ font-size:18px; font-weight:500; color:var(--c-white); line-height:1.2; }
.team-card .id p{ font-size:13px; color:var(--c-grey-lt); margin-top:2px; }
.team-card .bio{
  position:absolute; inset:0; background:var(--c-canvas); color:var(--c-white); padding:20px;
  display:flex; align-items:center;
  opacity:0; transform:translateY(10px); transition:opacity 280ms var(--ease), transform 280ms var(--ease);
  pointer-events:none;
}
.team-card .bio p{ font-size:13px; line-height:1.5; color:var(--c-grey-lt); }
.team-card:hover .id, .team-card:focus-within .id{ opacity:0; }
.team-card:hover .bio, .team-card:focus-within .bio{ opacity:1; transform:translateY(0); pointer-events:auto; }
.team-card:focus-within{ outline:2px solid var(--c-radioactive); outline-offset:2px; }
@media (max-width:700px){
  /* touch devices: no reliable hover, so keep bio reachable via tap-to-toggle instead of hidden forever */
  .team-card .bio{ position:static; opacity:1; transform:none; pointer-events:auto; background:var(--c-white); color:var(--c-deep); border-top:1px solid var(--c-deep); }
  .team-card .bio p{ color:var(--c-deep-70); }
  .team-card{ aspect-ratio:auto; }
  .team-card img{ position:static; aspect-ratio:3/2; }
  .team-card .id{ position:static; background:none; padding:16px 16px 0; }
  .team-card .id h3, .team-card .id p{ color:var(--c-deep); }
  .team-card .id p{ color:var(--c-deep-70); }
}
@media (prefers-reduced-motion: reduce){ .team-card .id, .team-card .bio{ transition:none; } }
.counter-card .num{ font-size:40px; line-height:1.2; font-weight:300; letter-spacing:-.02em; }
.counter-card .lbl{ font-size:16px; line-height:1.5; margin-top:8px; }

.chart-card{ border:1px solid var(--c-deep); border-radius:8px; background:var(--c-white); padding:24px; }
.chart-head{ display:flex; align-items:baseline; justify-content:space-between; gap:16px; margin-bottom:24px; }
.chart-head .t{ font-size:24px; font-weight:500; }
.chart-head .m{ font-family:var(--font-mono); font-size:14px; color:var(--c-deep-70); }
.chart-bars{ display:grid; grid-template-columns:repeat(12,1fr); gap:8px; align-items:end; height:220px; border-bottom:1px solid var(--c-deep); padding-bottom:1px; }
.chart-bars .bar{ border:1px solid var(--c-deep); border-bottom:none; border-radius:2px 2px 0 0; transform-origin:bottom; }
.chart-q{ display:flex; justify-content:space-between; margin-top:12px; font-family:var(--font-mono); font-size:14px; color:var(--c-deep-70); }
.chart-legend{ display:flex; gap:24px; margin-top:20px; padding-top:20px; border-top:1px solid var(--c-grey-lt); font-size:16px; }
.chart-legend span{ display:inline-flex; align-items:center; gap:8px; }
.swatch{ width:12px; height:12px; display:block; }

/* How it works */
.steps{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:0; margin-top:64px; border-top:1px solid var(--c-deep); }
@media (max-width:1080px){ .steps{ grid-template-columns:1fr; } }
.step{ border-bottom:1px solid var(--c-deep); border-right:1px solid var(--c-deep); padding:40px; }
.step:last-child{ border-right:none; }
@media (max-width:1080px){ .step{ border-right:none !important; padding:32px 0 !important; } }
.step-head{ display:flex; align-items:center; gap:16px; }
.step-head .n{ font-size:32px; font-weight:500; line-height:1.3; }
.step-head .rule{ flex:1; height:1px; background:var(--c-deep); display:block; }
.step-head .dot{ width:12px; height:12px; border-radius:50%; background:var(--c-lime-deep); border:1px solid var(--c-deep); display:block; animation:dmp-blink 2.4s ease-in-out infinite; }
.step h3{ font-size:var(--h3); font-weight:500; margin-top:32px; }
.step p{ font-size:20px; line-height:1.5; margin-top:16px; }
.step .meta{ font-family:var(--font-mono); font-size:14px; color:var(--c-deep-70); margin-top:24px; display:block; }

/* Industries */
.ind-card{ position:relative; overflow:hidden; isolation:isolate; border:1px solid var(--c-deep); border-radius:8px; padding:28px; display:flex; flex-direction:column; gap:16px; min-height:320px; background:var(--c-white); transition:background 250ms var(--ease), transform 250ms var(--ease); }
.ind-card:hover{ background:var(--c-lime-deep); transform:translateY(-8px); }
.ind-card::after{
  content:attr(data-n); position:absolute; right:-.1em; bottom:-.3em; z-index:-1;
  font-size:132px; font-weight:300; line-height:1; color:var(--c-grey-lt);
  transition:color 250ms var(--ease), transform 400ms var(--ease);
}
.ind-card:hover::after{ color:rgba(18,18,18,.14); transform:translateY(-6px); }
.ind-card .ic{ width:44px; height:44px; border-radius:8px; background:var(--c-chip); display:flex; align-items:center; justify-content:center; transition:background 250ms var(--ease); }
.ind-card:hover .ic{ background:var(--c-deep); }
.ind-card:hover .ic svg path{ stroke:var(--c-lime-deep); }
.ind-card .ic svg{ width:20px; height:20px; }
.ind-card .code{ font-family:var(--font-mono); font-size:14px; letter-spacing:.04em; color:var(--c-deep-70); }
.ind-card p{ font-size:16px; line-height:1.5; }
.ind-card .kw{ margin-top:auto; font-family:var(--font-mono); font-size:14px; border-top:1px solid var(--c-deep); padding-top:16px; }

/* Story */
.story-sec{ background:var(--c-canvas); color:var(--c-ink-inv); }
.story-sec blockquote{ font-size:var(--h-hero-c); line-height:1.2; font-weight:300; letter-spacing:-.02em; margin-top:24px; }
.story-sec .lede{ margin-top:32px; color:var(--c-grey-lt); }
.story-table{ border:1px solid var(--c-white); border-radius:8px; padding:32px; display:grid; gap:0; }
.story-row{ display:flex; justify-content:space-between; gap:24px; padding:20px 0; border-bottom:1px solid var(--c-deep-hover); font-size:20px; }
.story-row:last-child{ border-bottom:none; }
.story-row .k{ color:var(--c-grey-lt); }
.story-row .v{ font-weight:500; text-align:right; }

/* Trust */
.trust-item{ border:1px solid var(--c-deep); border-radius:8px; padding:24px; background:var(--c-chip); }
.trust-item .ic{ width:36px; height:36px; border-radius:8px; background:var(--c-white); border:1px solid var(--c-deep); display:flex; align-items:center; justify-content:center; margin-bottom:16px; }
.trust-item .ic svg{ width:18px; height:18px; }
.trust-item p{ font-size:16px; line-height:1.5; margin-top:8px; }

/* ---- Architecture diagram (data flow into the independent registry) ---- */
.arch-diagram{ border:1px solid var(--c-deep); border-radius:12px; padding:40px 24px; background:var(--c-white); }
.arch-diagram .row{ display:flex; justify-content:center; gap:16px; }
.arch-box{ border:1px solid var(--c-deep); border-radius:8px; padding:10px 16px; font-family:var(--font-mono); font-size:13px; text-align:center; background:var(--c-white); }
.arch-box--hub{ background:var(--c-deep); color:var(--c-white); padding:14px 20px; font-weight:500; }
.arch-box--accent{ border-color:var(--c-deep); position:relative; }
.arch-box--accent::after{ content:''; position:absolute; inset:-4px; border:1px solid var(--c-lime-deep); border-radius:11px; pointer-events:none; }
.arch-diagram svg.arch-lines{ display:block; width:100%; height:56px; }
.arch-diagram svg.arch-lines path{ fill:none; stroke:var(--c-deep-70); stroke-width:1.4; stroke-dasharray:3 4; }

/* ---- Access mockup (permission table inside app chrome) ---- */
.access-table{ width:100%; border-collapse:collapse; font-size:13px; }
.access-table th{ text-align:left; font-family:var(--font-mono); font-weight:500; font-size:12px; letter-spacing:.03em; text-transform:uppercase; color:var(--c-deep-70); padding-bottom:12px; border-bottom:1px solid var(--c-deep); }
.access-table td{ padding:12px 8px 12px 0; border-bottom:1px solid var(--c-grey-lt); }
.access-table td:first-child{ font-weight:500; }
.access-table .state{ display:inline-flex; align-items:center; gap:6px; font-family:var(--font-mono); font-size:12px; }
.access-table .state svg{ width:14px; height:14px; flex:none; }

/* ---- Certification badge ---- */
.cert-badge{ display:flex; align-items:center; gap:20px; border:1px solid var(--c-deep); border-radius:8px; padding:20px 24px; background:var(--c-white); }
.cert-badge .seal{ width:64px; height:64px; flex:none; }
.cert-badge .t{ font-size:16px; font-weight:500; }
.cert-badge .s{ font-family:var(--font-mono); font-size:12px; color:var(--c-deep-70); margin-top:2px; }

/* FAQ */
.faq-list{ display:grid; gap:0; border-top:1px solid var(--c-deep); }
.faq-item{ border-bottom:1px solid var(--c-deep); }
.faq-btn{ width:100%; background:transparent; border:none; padding:32px 0; display:flex; align-items:center; justify-content:space-between; gap:24px; min-height:44px; font-family:inherit; color:var(--c-deep); text-align:left; }
.faq-btn .q{ font-size:var(--h3); font-weight:500; }
.faq-btn .icon{ font-size:32px; font-weight:300; line-height:1; transition:transform 300ms var(--ease); flex:none; }
.faq-item[data-open="true"] .icon{ transform:rotate(45deg); }
.faq-panel{ display:grid; grid-template-rows:0fr; opacity:0; transition:grid-template-rows 400ms var(--ease), opacity 300ms var(--ease); }
.faq-item[data-open="true"] .faq-panel{ grid-template-rows:1fr; opacity:1; }
.faq-panel p{ overflow:hidden; min-height:0; font-size:20px; line-height:1.5; max-width:62ch; padding-bottom:32px; }

/* Final CTA */
.cta-sec{ text-align:center; }
.cta-inner{ padding:160px 0; display:flex; flex-direction:column; align-items:center; gap:32px; position:relative; z-index:1; }
.cta-inner h2{ max-width:22ch; }
.cta-inner .lede{ max-width:56ch; }
@media (max-width:700px){ .cta-inner{ padding:96px 0; } }

.cta-sec--lime{ background:var(--c-radioactive); border-bottom:none; }
.cta-sec--lime h2, .cta-sec--lime .lede{ color:var(--c-deep); }
.cta-sec--lime .lede{ opacity:.78; }
.cta-sec--lime .btn-secondary{ background:var(--c-deep); color:var(--c-white); border-color:var(--c-deep); }
.cta-sec--lime .btn-secondary::before{ background:var(--c-white); }
.cta-sec--lime .btn-secondary:hover{ color:var(--c-deep); }
.cta-sec--lime .btn-primary::before{ background:var(--c-white); }
.cta-sec--lime .btn-primary:hover{ color:var(--c-deep); }
.cta-sec--lime .dotfield{ background-image:radial-gradient(#121212 1px, transparent 1px); opacity:.14; }

/* ==========================================================================
   Footer
   ========================================================================== */
footer.site{ background:var(--c-canvas); color:var(--c-ink-inv); }
.foot-top{ padding:80px 0 40px; display:grid; grid-template-columns:minmax(0,1.4fr) repeat(3,minmax(0,1fr)); gap:48px; }
@media (max-width:1080px){ .foot-top{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:700px){ .foot-top{ grid-template-columns:1fr; } }
footer address{ font-style:normal; font-size:16px; line-height:1.5; margin-top:24px; color:var(--c-grey-lt); }
footer address a{ color:var(--c-lime-deep); }
.foot-col h2{ font-size:16px; font-weight:500; color:var(--c-lime-deep); font-family:var(--font-mono); letter-spacing:.08em; text-transform:uppercase; }
.foot-col ul{ display:grid; gap:12px; margin-top:20px; font-size:16px; }
.foot-col a{ color:var(--c-grey-lt); }
.foot-col a:hover{ color:var(--c-white); }
.foot-bottom{ padding:24px 0 40px; border-top:1px solid var(--c-deep-hover); display:flex; flex-wrap:wrap; gap:24px; justify-content:space-between; font-size:16px; color:var(--c-grey-lt); }
.foot-legal{ display:flex; flex-wrap:wrap; gap:24px; }
.foot-legal a{ color:var(--c-grey-lt); }
.foot-legal a:hover{ color:var(--c-white); }
footer a{ display:inline-flex; align-items:center; min-height:44px; }

/* ==========================================================================
   Reveal / motion primitives
   ========================================================================== */
[data-reveal]{ opacity:0; transform:translateY(28px); }
[data-reveal].on{ opacity:1; transform:none; transition:opacity 700ms var(--ease), transform 700ms var(--ease); }

@keyframes dmp-marquee{ from{ transform:translateX(0); } to{ transform:translateX(-50%); } }
@keyframes dmp-blink{ 0%,45%{ opacity:1; } 55%,100%{ opacity:.15; } }

/* ==========================================================================
   Page-header (interior pages)
   ========================================================================== */
.page-hero{ padding:96px 0 80px; }
.page-hero .eyebrow{ margin-bottom:24px; }
.page-hero h1{ max-width:20ch; margin-top:0; }
.page-hero .lede{ margin-top:24px; max-width:60ch; }
.breadcrumb{ font-family:var(--font-mono); font-size:14px; color:var(--c-deep-70); display:flex; gap:8px; align-items:center; margin-bottom:24px; }
.breadcrumb a:hover{ color:var(--c-deep); }

.capability-list{ display:grid; gap:0; border-top:1px solid var(--c-deep); margin-top:40px; }
.capability-item{ border-bottom:1px solid var(--c-deep); padding:24px 0; display:grid; grid-template-columns:32px minmax(0,1fr); gap:16px; }
.capability-item .mk{ font-family:var(--font-mono); color:var(--c-deep-70); }

/* ---- Capability deep-dive cards (icon + heading + rich description) ---- */
.detail-grid{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:24px; margin-top:40px; }
@media (max-width:900px){ .detail-grid{ grid-template-columns:1fr; } }
.detail-card{ border:1px solid var(--c-deep); border-radius:8px; padding:28px; background:var(--c-white); transition:background 250ms var(--ease), transform 250ms var(--ease); }
.detail-card:hover{ background:var(--c-chip); transform:translateY(-4px); }
.detail-card .ic{ width:44px; height:44px; border-radius:8px; background:var(--c-chip); display:flex; align-items:center; justify-content:center; margin-bottom:16px; transition:background 250ms var(--ease); }
.detail-card:hover .ic{ background:var(--c-lime-deep); }
.detail-card .ic svg{ width:20px; height:20px; }
.detail-card h3{ font-size:22px; font-weight:500; letter-spacing:-.01em; }
.detail-card p{ font-size:15px; line-height:1.55; color:var(--c-deep-70); margin-top:10px; }
.detail-card .for{ display:block; margin-top:14px; font-family:var(--font-mono); font-size:12px; letter-spacing:.03em; text-transform:uppercase; color:var(--c-deep-70); }

.tag-pill{ display:inline-flex; border:1px solid var(--c-deep); border-radius:4px; padding:2px 8px; font-family:var(--font-mono); font-size:14px; }

.blog-card{ border:1px solid var(--c-deep); border-radius:8px; padding:28px; display:flex; flex-direction:column; gap:12px; background:var(--c-white); transition:background 250ms var(--ease), transform 250ms var(--ease); }
.blog-card:hover{ background:var(--c-chip); transform:translateY(-6px); }
.blog-card .ic{ width:40px; height:40px; border-radius:8px; background:var(--c-chip); display:flex; align-items:center; justify-content:center; transition:background 250ms var(--ease); }
.blog-card:hover .ic{ background:var(--c-lime-deep); }
.blog-card .ic svg{ width:19px; height:19px; }
.blog-card .cat{ font-family:var(--font-mono); font-size:14px; letter-spacing:.04em; text-transform:uppercase; color:var(--c-deep-70); }
.blog-card h3{ font-size:28px; font-weight:400; letter-spacing:-.01em; line-height:1.25; }
.blog-card p{ font-size:16px; line-height:1.5; }

.legal-body h2{ font-size:28px; font-weight:500; margin-top:48px; margin-bottom:16px; }
.legal-body p, .legal-body li{ font-size:18px; line-height:1.6; color:var(--c-deep-70); }
.legal-body ul{ display:grid; gap:8px; margin-top:12px; padding-left:20px; list-style:disc; }
.legal-body p + p{ margin-top:16px; }
.legal-flag{ border:1px solid var(--c-destructive); border-radius:8px; padding:20px 24px; background:#FDECEC; color:var(--c-destructive); font-family:var(--font-mono); font-size:14px; margin-bottom:48px; }

.empty-state{
  border:1px dashed var(--c-deep); border-radius:8px; padding:48px 32px;
  display:flex; flex-direction:column; align-items:flex-start; gap:16px;
  background:var(--c-secondary-hover);
}
.empty-state .ico{
  width:40px; height:40px; border:1px solid var(--c-deep); border-radius:50%;
  display:flex; align-items:center; justify-content:center; flex:none; background:var(--c-white);
}
.empty-state .ico svg{ width:18px; height:18px; }
.empty-state h3{ font-size:20px; font-weight:500; }
.empty-state p{ font-size:16px; line-height:1.5; color:var(--c-deep-70); max-width:52ch; margin-top:-8px; }

article.post img{ border:1px solid var(--c-deep); border-radius:8px; }

/* ==========================================================================
   New Form-inspired motion & layout system
   Borrowed structural rhythm: percentage loader, oversized display
   typography, editorial floating image/dashboard inserts, full-bleed
   accent band as a closing signature, image marquee as section divider,
   sticky stacking "story" panels. Colors/fonts stay 100% dmp (Outfit +
   IBM Plex Mono, Deep Space / Radioactive / Green Mist / Pearl / White).
   ========================================================================== */

/* ---- Display stat band (editorial, muted, oversized) ---- */
.stat-band{ padding-block:96px; border-bottom:1px solid var(--c-deep); }
.stat-band .wrap{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:48px; }
@media (max-width:900px){ .stat-band .wrap{ grid-template-columns:1fr; gap:56px; } }
.stat-band figure{ margin:0; }
.stat-band .num{
  font-size:clamp(56px,7vw,120px); font-weight:300; line-height:.95; letter-spacing:-.03em;
  color:var(--c-deep-55); font-variant-numeric:tabular-nums;
}
.stat-band .lbl{ margin-top:16px; font-size:16px; line-height:1.4; max-width:24ch; }

.stat-band--dark{ background:var(--c-canvas); color:var(--c-ink-inv); border-bottom:none; }
.stat-band--dark .num{ color:var(--c-radioactive); }
.stat-band--dark .lbl{ color:var(--c-grey-lt); }

/* ---- Giant statement (typographic signature moment) ---- */
.statement{ position:relative; padding-block:160px; overflow:hidden; isolation:isolate; }
.statement::before{
  content:'05'; position:absolute; right:-.05em; top:50%; transform:translateY(-50%) rotate(-6deg); z-index:-1;
  font-family:var(--font-mono); font-size:min(46vw,520px); font-weight:400; line-height:1; color:var(--c-grey-lt);
}
.statement p{
  font-size:clamp(36px,6.4vw,96px); font-weight:300; line-height:1.06; letter-spacing:-.03em;
  max-width:14ch;
}
.statement mark{ background:var(--c-radioactive); color:var(--c-deep); padding:0 .12em; border-radius:.12em; }
@media (max-width:900px){ .statement::before{ font-size:min(70vw,380px); opacity:.6; } }
@media (max-width:700px){ .statement{ padding-block:96px; } }

/* ---- Floating editorial inserts (dashboard tiles or duotone photos) ---- */
.float-field{ position:relative; }
.float-insert{
  --drift:0px; --tilt:0deg;
  position:relative; border:1px solid var(--c-deep); border-radius:14px; overflow:hidden;
  background:var(--c-white); will-change:transform;
  transform:translateY(var(--drift)) rotate(var(--tilt));
}
.float-insert img{ display:block; width:100%; height:100%; object-fit:cover; }
.float-insert figcaption{
  position:absolute; left:0; right:0; bottom:0; padding:8px 16px;
  background:rgba(18,18,18,.72); color:var(--c-white); font-family:var(--font-mono);
  font-size:12px; letter-spacing:.03em; display:flex; justify-content:space-between; gap:8px;
}
.float-insert--tile{ padding:16px; display:flex; flex-direction:column; gap:8px; background:var(--c-white); }
.float-insert--tile .k{ font-family:var(--font-mono); font-size:12px; color:var(--c-deep-70); letter-spacing:.04em; text-transform:uppercase; }
.float-insert--tile .v{ font-size:20px; font-weight:500; }

.img-duotone{
  filter:grayscale(1) contrast(1.05) brightness(.92) sepia(.35) hue-rotate(45deg) saturate(2.4);
}

/* ---- Image marquee (section divider, duotone tiles) ---- */
.img-marquee-sec{ overflow:hidden; border-bottom:1px solid var(--c-deep); background:var(--c-canvas); }
.img-marquee{ display:flex; gap:16px; width:max-content; padding:16px 0; animation:dmp-marquee 40s linear infinite; }
.img-marquee .tile{ flex:none; width:280px; height:180px; border-radius:8px; overflow:hidden; border:1px solid var(--c-deep-hover); position:relative; }
.img-marquee .tile img{ width:100%; height:100%; object-fit:cover; }
.img-marquee .tile .lbl{
  position:absolute; left:10px; bottom:10px; font-family:var(--font-mono); font-size:12px; color:var(--c-white);
  background:rgba(18,18,18,.6); padding:4px 8px; border-radius:4px; letter-spacing:.03em;
}

/* ---- Sticky "story" stacking panels (How it works upgrade) ---- */
.sticky-story{ position:relative; }
.sticky-panel{
  position:sticky; top:0; min-height:100vh; display:flex; align-items:center;
  border-bottom:1px solid var(--c-deep); background:var(--c-white);
  padding-block:64px;
}
.sticky-panel .wrap{ display:grid; grid-template-columns:120px 1fr; gap:48px; align-items:center; }
.sticky-panel .n{ font-size:clamp(40px,6vw,88px); font-weight:300; color:var(--c-deep-55); line-height:1; }
.sticky-panel h3{ font-size:var(--h2); font-weight:400; letter-spacing:-.02em; max-width:16ch; }
.sticky-panel p{ font-size:20px; line-height:1.5; margin-top:16px; max-width:52ch; }
.sticky-panel .meta{ font-family:var(--font-mono); font-size:14px; color:var(--c-deep-70); margin-top:20px; display:block; }
@media (max-width:900px){
  .sticky-panel{ min-height:0; padding-block:56px; }
  .sticky-panel .wrap{ grid-template-columns:1fr; gap:16px; }
  .sticky-story{ position:static; }
  .sticky-panel{ position:static; }
}

/* ---- Scroll prompt ---- */
.scroll-prompt{ display:inline-flex; align-items:center; gap:8px; font-family:var(--font-mono); font-size:12px; letter-spacing:.08em; text-transform:uppercase; color:var(--c-deep-70); }
.scroll-prompt .line{ width:1px; height:28px; background:var(--c-deep-70); position:relative; overflow:hidden; }
.scroll-prompt .line::after{ content:''; position:absolute; top:-100%; left:0; width:100%; height:100%; background:var(--c-deep); animation:dmp-scroll-line 1.8s ease-in-out infinite; }
@keyframes dmp-scroll-line{ 0%{ top:-100%; } 50%{ top:0; } 100%{ top:100%; } }

/* ---- Back to top ---- */
.back-to-top{
  position:fixed; right:24px; bottom:24px; z-index:60; width:52px; height:52px; border-radius:50%;
  background:var(--c-deep); color:var(--c-white); display:flex; align-items:center; justify-content:center;
  opacity:0; transform:translateY(12px); pointer-events:none; transition:opacity 300ms var(--ease), transform 300ms var(--ease), background 200ms var(--ease);
}
.back-to-top.show{ opacity:1; transform:translateY(0); pointer-events:auto; }
.back-to-top:hover{ background:var(--c-deep-hover); }
.back-to-top svg{ width:18px; height:18px; }
@media (max-width:700px){ .back-to-top{ right:16px; bottom:16px; width:44px; height:44px; } }


/* ==========================================================================
   Hero v2 — compact split hero: dot-grid mask, double-bezel board, module
   chips driving the mockup. Namespaced under .hero-v2 / hv2- / .mchip.
   ========================================================================== */
.hero-v2{position:relative;padding:64px 0 88px;overflow:clip}
.hero-v2::before{content:"";position:absolute;inset:0;background-image:radial-gradient(circle,rgba(18,18,18,.30) 1.3px,transparent 1.6px);background-size:64px 64px;-webkit-mask-image:radial-gradient(90% 90% at 30% 20%,#000 30%,transparent 75%);mask-image:radial-gradient(90% 90% at 30% 20%,#000 30%,transparent 75%)}
.hero-v2::after{content:"";position:absolute;inset:auto -10% -45% 35%;height:80%;background:radial-gradient(55% 55% at 60% 60%,rgba(227,255,88,.42),transparent 70%);z-index:0;filter:blur(2px)}
.hero-v2 .hv2-grid{position:relative;z-index:1;display:grid;grid-template-columns:1.02fr 1.15fr;gap:56px;align-items:center}
.hero-v2 h1{font-weight:600;font-size:clamp(36px,4.2vw,58px);line-height:1.05;letter-spacing:-.018em;margin-top:22px}
.hv2-u{position:relative;white-space:nowrap}
.hv2-u::after{content:"";position:absolute;left:0;right:0;bottom:.04em;height:.14em;background:var(--c-radioactive);z-index:-1;border-radius:3px;transform:scaleX(0);transform-origin:left;animation:hv2-draw .8s var(--ease-rise) .5s forwards}
@keyframes hv2-draw{to{transform:scaleX(1)}}
.hero-v2 .lede{margin-top:18px;max-width:46ch}
.hv2-badge{display:inline-flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:12px;letter-spacing:.05em;border:1px solid var(--c-deep);border-radius:999px;padding:7px 15px;background:var(--c-white);box-shadow:0 1px 2px rgba(18,18,18,.05),0 4px 12px rgba(18,18,18,.05)}
.hv2-badge i{width:8px;height:8px;border-radius:50%;background:var(--c-radioactive);border:1px solid var(--c-deep);animation:hv2-pulse 2.6s var(--ease-rise) infinite}
@keyframes hv2-pulse{50%{box-shadow:0 0 0 5px rgba(227,255,88,.45)}}
.hv2-chips{display:flex;flex-wrap:wrap;gap:9px;margin-top:26px}
.hv2-chips p{width:100%;font-family:var(--font-mono);font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--c-deep-70);margin-bottom:2px}
.mchip{font-family:var(--font-base);font-size:13.5px;font-weight:500;color:var(--c-deep);padding:9px 16px;border:1px solid var(--c-deep);border-radius:999px;background:var(--c-white);cursor:pointer;transition:transform .18s var(--ease-rise),box-shadow .2s var(--ease-rise),background .2s var(--ease-rise)}
.mchip:hover{transform:translateY(-2px);box-shadow:0 1px 2px rgba(18,18,18,.05),0 4px 12px rgba(18,18,18,.05)}
.mchip:active{transform:scale(.97)}
.mchip[aria-pressed="true"]{background:var(--c-lime-deep);box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 4px 12px rgba(18,18,18,.06)}
.mchip:focus-visible{outline:2px solid var(--c-focus);outline-offset:2px}
.hv2-cta{display:flex;align-items:center;gap:20px;margin-top:30px}
.hv2-btn{display:inline-flex;align-items:center;gap:12px;background:var(--c-deep);color:var(--c-white);font-weight:600;font-size:15.5px;padding:9px 9px 9px 26px;border-radius:999px;text-decoration:none;box-shadow:var(--sh-md);transition:transform .25s var(--ease-rise),box-shadow .25s var(--ease-rise)}
.hv2-btn:hover{transform:translateY(-2px);color:var(--c-white);box-shadow:var(--sh-lg)}
.hv2-btn i{width:38px;height:38px;border-radius:50%;background:var(--c-radioactive);color:var(--c-deep);display:grid;place-items:center;font-style:normal;font-size:16px;transition:transform .3s var(--ease-rise)}
.hv2-btn:hover i{transform:translateX(3px)}
.hv2-micro{font-size:13px;color:var(--c-deep-70);line-height:1.45}
.hv2-stage{position:relative}
.hv2-shell{background:linear-gradient(180deg,#F2F3EE,#E8EAE2);border:1px solid rgba(18,18,18,.14);border-radius:22px;padding:10px;box-shadow:var(--sh-lg)}
.hv2-board{background:var(--c-white);border:1px solid rgba(18,18,18,.16);border-radius:14px;overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.hv2-top{display:flex;align-items:center;gap:8px;padding:11px 16px;border-bottom:1px solid var(--c-grey-lt);font-family:var(--font-mono);font-size:11.5px;color:var(--c-deep-70);background:linear-gradient(180deg,var(--c-paper),#F7F8F4)}
.hv2-top i{width:9px;height:9px;border-radius:50%;background:var(--c-chip);box-shadow:inset 0 1px 1px rgba(18,18,18,.12)}
.hv2-title{margin-left:8px}
.hv2-sample{margin-left:auto;background:var(--c-chip);border-radius:4px;padding:3px 9px}
.hv2-row{display:grid;grid-template-columns:2fr 1.1fr .9fr .9fr;gap:6px;align-items:center;padding:12px 16px;border-bottom:1px solid var(--c-grey-lt);font-size:13.5px;transition:background .3s var(--ease-rise)}
.hv2-row:last-child{border-bottom:none}
.hv2-head{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.05em;color:var(--c-deep-70);text-transform:uppercase;background:var(--c-wash)}
.hv2-row.is-hl{background:linear-gradient(90deg,rgba(227,255,88,.5),rgba(227,255,88,.18))}
.hv2-row:not(.hv2-head):hover{background:var(--c-wash)}
.hv2-row.is-hl:hover{background:linear-gradient(90deg,rgba(227,255,88,.55),rgba(227,255,88,.22))}
.hv2-pill{font-family:var(--font-mono);font-size:11px;padding:4px 11px;border-radius:999px;border:1px solid var(--c-deep);width:max-content;transition:background .35s var(--ease-rise),color .35s var(--ease-rise)}
.hv2-pill.is-sealed{background:var(--c-deep);color:var(--c-white)}
.hv2-pill.is-norm{background:var(--c-chip)}
.hv2-pill.is-award{background:var(--c-lime-deep)}
.hv2-pill.is-open{background:var(--c-white)}
.hv2-av{display:flex}
.hv2-av b{width:25px;height:25px;border-radius:50%;border:1.5px solid var(--c-white);background:var(--c-chip);display:grid;place-items:center;font-size:10px;font-weight:600;margin-left:-7px;box-shadow:0 1px 2px rgba(18,18,18,.08)}
.hv2-av b:first-child{margin-left:0}
.hv2-av b:nth-child(2){background:var(--c-chip)}
.hv2-av b:nth-child(3){background:var(--c-lime-deep)}
.hv2-val{font-family:var(--font-mono);font-size:12px;text-align:right}
.hv2-fcard{position:absolute;background:var(--c-white);border:1px solid rgba(18,18,18,.7);border-radius:12px;padding:12px 14px;font-size:12.5px;line-height:1.45;max-width:225px;box-shadow:var(--sh-md);animation:hv2-bob 5.5s var(--ease-rise) infinite alternate}
.hv2-fcard .t{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--c-deep-70);display:flex;align-items:center;gap:7px;margin-bottom:6px}
.hv2-fcard .t i{width:7px;height:7px;border-radius:50%;background:var(--c-radioactive);border:1px solid var(--c-deep)}
.hv2-fcard b{font-weight:600}
.hv2-fa{top:-24px;right:-18px}
.hv2-fb{bottom:-22px;left:-26px;animation-delay:1.4s}
@keyframes hv2-bob{to{transform:translateY(-10px)}}
@media (max-width:960px){
  .hero-v2 .hv2-grid{grid-template-columns:1fr}
  .hv2-fa{right:6px}.hv2-fb{left:6px}
}
@media (prefers-reduced-motion:reduce){
  .hv2-u::after{transform:scaleX(1);animation:none}
  .hv2-badge i,.hv2-fcard{animation:none}
}

/* ==========================================================================
   v2 flow layer — smooth section transitions + depth upgrade.
   Removes hard section rules; sections flow via background washes, masked
   dot fields, and inset dark/lime "islands" with large radii.
   ========================================================================== */
section{ border-bottom:none; }
.sec-pad{ padding:110px 0; }

/* soft wash + masked dots behind the modules section, fading both ways */
#solutions{ background:linear-gradient(180deg, transparent, var(--c-wash) 14%, var(--c-wash) 86%, transparent); }
#solutions::before{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background-image:radial-gradient(circle, rgba(18,18,18,.20) 1.2px, transparent 1.5px);
  background-size:64px 64px;
  -webkit-mask-image:linear-gradient(180deg, transparent, #000 18%, #000 62%, transparent 92%);
  mask-image:linear-gradient(180deg, transparent, #000 18%, #000 62%, transparent 92%);
}
#solutions .wrap{ position:relative; z-index:1; }

/* benchmark + industries sections: gentle washes instead of rules */
.bench-sec{ background:linear-gradient(180deg, transparent, rgba(211,216,212,.35) 20%, rgba(211,216,212,.35) 80%, transparent); }
#industries{ background:linear-gradient(180deg, transparent, var(--c-wash) 16%, var(--c-wash) 84%, transparent); }

/* dark and lime bands become inset islands so the page flows around them */
.stat-band--dark, .statement, .cta-sec--lime{
  border-radius:28px;
  margin-inline:clamp(14px, 2.6vw, 40px);
  overflow:clip;
}
@media (max-width:700px){
  .stat-band--dark, .statement, .cta-sec--lime{ border-radius:20px; margin-inline:10px; }
}

/* cards: radius + layered soft shadows + lift (lime hover fill preserved) */
.mod-card, .ind-card, .integration-card{
  border-radius:18px;
  border-color:rgba(18,18,18,.18);
  box-shadow:var(--sh-sm);
}
.mod-card:hover, .ind-card:hover{
  box-shadow:var(--sh-lg);
}
.mod-card--sub{
  background:var(--c-wash);
  border-style:dashed;
}
.app-frame{
  border-radius:14px;
  overflow:hidden;
  box-shadow:0 2px 4px rgba(18,18,18,.04), 0 16px 44px rgba(18,18,18,.10);
}
.trust-item, .faq-item{ border-radius:14px; }
@media (prefers-reduced-motion:reduce){
  .mod-card:hover, .ind-card:hover{ transform:none; }
}


/* v2 module-page hero: split layout, dot mask, glow, shell board */
.page-hero--v2{position:relative;overflow:clip;padding-bottom:72px}
.page-hero--v2::before{content:"";position:absolute;inset:0;background-image:radial-gradient(circle,rgba(18,18,18,.28) 1.3px,transparent 1.6px);background-size:64px 64px;-webkit-mask-image:radial-gradient(85% 90% at 28% 18%,#000 28%,transparent 74%);mask-image:radial-gradient(85% 90% at 28% 18%,#000 28%,transparent 74%)}
.page-hero--v2::after{content:"";position:absolute;inset:auto -12% -55% 42%;height:90%;background:radial-gradient(55% 55% at 60% 60%,rgba(227,255,88,.38),transparent 70%);z-index:0;filter:blur(2px)}
.page-hero--v2 .wrap{position:relative;z-index:1}
.ph-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:56px;align-items:center;margin-top:8px}
.page-hero--v2 h1{font-weight:600;letter-spacing:-.018em;line-height:1.06}
.hv2-mark{background:linear-gradient(transparent 62%,var(--c-radioactive) 62%);border-radius:2px}
.ph-cta{margin-top:28px}
@media (max-width:960px){.ph-grid{grid-template-columns:1fr}}


/* impeccable audit fixes: focus visibility, touch targets, board mobile collapse */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.hv2-btn:focus-visible, .faq-btn:focus-visible, .btn-underline:focus-visible,
.blog-card:focus-visible, .mod-card:focus-visible, .ind-card:focus-visible,
.tag-pill:focus-visible{outline:2px solid var(--c-focus);outline-offset:3px;border-radius:8px}
@media (max-width:700px){
  .mchip{padding:12px 18px;min-height:44px}
  .btn-underline{min-height:44px;display:inline-flex;align-items:center}
}
@media (max-width:640px){
  .hv2-row{grid-template-columns:1.7fr 1fr .9fr}
  .hv2-row .hv2-av, .hv2-head span:nth-child(3){display:none}
}


/* viz-split: every mockup pairs with descriptive text */
.viz-split{display:grid;grid-template-columns:.85fr 1.15fr;gap:56px;align-items:center}
.viz-split.flip{grid-template-columns:1.15fr .85fr}
.viz-split .ill{margin:0}
@media (max-width:960px){.viz-split,.viz-split.flip{grid-template-columns:1fr}}


/* Solutions mega menu */
.nav-mega{position:relative;display:inline-flex}
.nav-mega-btn{display:inline-flex;align-items:center;gap:7px;background:none;border:0;font:inherit;color:var(--c-deep);cursor:pointer;padding:6px 0;position:relative}
.nav-mega-btn::after{content:"";position:absolute;left:0;right:100%;bottom:0;height:2px;background:var(--c-lime-deep);transition:right .25s var(--ease-rise)}
.nav-mega.open .nav-mega-btn::after{right:0}
.nav-mega-btn .chev{width:11px;height:8px;transition:transform .25s var(--ease-rise)}
.nav-mega.open .chev{transform:rotate(180deg)}
.nav-mega-btn:focus-visible{outline:2px solid var(--c-focus);outline-offset:3px;border-radius:6px}
.mega-panel{position:absolute;top:calc(100% + 14px);left:50%;transform:translateX(-50%) translateY(8px);width:640px;background:var(--c-white);border:1px solid rgba(18,18,18,.16);border-radius:16px;box-shadow:var(--sh-lg);padding:14px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s var(--ease-rise),transform .22s var(--ease-rise),visibility 0s .22s;z-index:80}
.mega-panel::before{content:"";position:absolute;top:-14px;left:0;right:0;height:14px}
/* Opening is React's alone — see the note at the top of components/header/MegaMenu.tsx.
   :hover and :focus-within used to open the panel too, which meant a click that
   closed it was immediately overruled by the pointer still resting on the button. */
.nav-mega.open .mega-panel{opacity:1;visibility:visible;pointer-events:auto;transform:translateX(-50%) translateY(0);transition:opacity .22s var(--ease-rise),transform .22s var(--ease-rise)}
.mega-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.mega-item{display:flex;gap:14px;align-items:flex-start;padding:14px;border-radius:12px;text-decoration:none;color:var(--c-deep);transition:background .18s var(--ease-rise)}
.mega-item:hover{background:var(--c-wash)}
.mega-item:focus-visible{outline:2px solid var(--c-focus);outline-offset:-2px}
.mi-ic{flex:none;width:38px;height:38px;border-radius:10px;background:var(--c-lime-deep);border:1px solid var(--c-deep);display:grid;place-items:center}
.mi-ic svg{width:19px;height:19px}
.mi-tx{display:block;min-width:0}
.mi-tx b{display:block;font-weight:600;font-size:15px;letter-spacing:-.005em}
.mi-tx i{display:block;font-style:normal;font-size:13px;line-height:1.45;color:var(--c-deep-70);margin-top:3px}
.mi-sub{display:block;margin-top:7px}
.mi-sub a{font-family:var(--font-mono);font-size:12px;color:var(--c-deep);text-decoration:none;border-bottom:1px solid var(--c-radioactive);padding-bottom:1px}
.mi-sub a:hover{background:var(--c-lime-deep)}
.mega-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;border-top:1px solid var(--c-grey-lt);margin-top:12px;padding:12px 14px 2px}
.mega-note{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.05em;color:var(--c-deep-70);text-transform:uppercase}
@media (max-width:1080px){.nav-mega{display:none}}
/* mobile sub-links */
.msub-group{display:grid}
#dmp-mobile-nav .msub{font-size:16px;padding:12px 0 12px 18px;color:var(--c-deep-70);border-bottom:1px solid var(--c-grey-lt)}
#dmp-mobile-nav .msub--nested{padding-left:34px;font-size:14.5px}


/* Two-pane mega menu + zoom robustness */
.mega-panel--2p{left:0;transform:translateY(8px);width:min(720px,calc(100vw - 48px));max-height:calc(100vh - 120px);overflow:auto}
.nav-mega.open .mega-panel--2p{transform:translateY(0)}
.mega-cols{display:grid;grid-template-columns:218px 1fr;gap:10px}
.mega-mods{display:grid;gap:4px;align-content:start;border-right:1px solid var(--c-grey-lt);padding-right:10px}
.mm-btn{display:flex;align-items:center;gap:11px;width:100%;text-align:left;background:none;border:1px solid transparent;border-radius:10px;padding:11px 12px;font:inherit;font-size:14.5px;font-weight:500;color:var(--c-deep);cursor:pointer;transition:background .15s var(--ease-rise)}
.mm-btn:hover{background:var(--c-wash)}
.mm-btn.is-on{background:var(--c-lime-deep);border-color:var(--c-deep)}
.mm-btn:focus-visible{outline:2px solid var(--c-focus);outline-offset:2px}
.mm-ic{flex:none;width:20px;height:20px;display:grid;place-items:center}
.mm-ic svg{width:18px;height:18px}
.mega-caps{position:relative;min-height:230px}
.mc-pane{display:none;padding:4px 6px}
.mc-pane.is-on{display:grid;gap:2px;align-content:start;animation:mc-in .18s var(--ease-rise)}
@keyframes mc-in{from{opacity:0;transform:translateX(6px)}to{opacity:1;transform:none}}
.mc-head{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14.5px;color:var(--c-deep);text-decoration:none;padding:8px 10px;border-radius:8px}
.mc-head:hover{background:var(--c-wash)}
.mc-head span{transition:transform .2s var(--ease-rise)}
.mc-head:hover span{transform:translateX(3px)}
.mc-link{display:block;font-size:13.5px;color:var(--c-deep-70);text-decoration:none;padding:7px 10px;border-radius:8px;transition:background .15s var(--ease-rise),color .15s var(--ease-rise)}
.mc-link:hover{background:var(--c-wash);color:var(--c-deep)}
.mc-link:focus-visible,.mc-head:focus-visible,.mc-subhead:focus-visible{outline:2px solid var(--c-focus);outline-offset:-2px}
.mc-subhead{display:block;font-family:var(--font-mono);font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--c-deep);text-decoration:none;margin-top:10px;padding:7px 10px;border-top:1px solid var(--c-grey-lt)}
.mc-subhead:hover{color:var(--c-deep)}
.mc-link--sub{padding-left:22px}
@media (prefers-reduced-motion:reduce){.mc-pane.is-on{animation:none}}
/* zoom robustness */
.wrap{padding-inline:clamp(16px,3vw,40px)}
.hv2-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
img,svg{max-width:100%}
.hv2-fcard{max-width:min(225px,42vw)}

/* kept from duplicate run: anchor highlight + media guard */
.detail-card:target{outline:2px solid var(--c-radioactive);outline-offset:3px;background:rgba(227,255,88,.14)}
img{max-width:100%;height:auto}


/* official brand lockup */
.logo img{height:38px;width:auto;display:block}
.logo--inv img{filter:invert(1)}
@media (max-width:700px){.logo img{height:32px}}

/* --- Control Room: decorative icon strokes use the cool mid grey (non-text, AA n/a) --- */
.app-sidebar .ic svg{ stroke:var(--c-grey); }
.problem-item .ic svg{ stroke:var(--c-grey); }
.trust-item .ic svg{ stroke:var(--c-grey); }
.blog-card .ic svg{ stroke:var(--c-grey); }
.detail-card .ic svg{ stroke:var(--c-grey); }

/* ================= Spade-anatomy v2 homepage (namespaced sp-) ================= */
#sp-home{
  --sp-white:#FFFFFF; --sp-deep:#121212; --sp-canvas:#0E1110;
  --sp-lime:#E3FF58; --sp-lime-deep:#9BB80E;
  --sp-grey:#8A928E; --sp-grey-lt:#D3D8D4; --sp-chip:#C7CEC7;
  --sp-wash:#F3F5F1; --sp-ink-inv:#EDEFEC;
  --sp-deep70:rgba(18,18,18,.72); --sp-deep45:rgba(18,18,18,.45);
  --sp-fb:'Outfit',system-ui,sans-serif; --sp-fm:'IBM Plex Mono',monospace;
  --sp-ease:cubic-bezier(.16,1,.3,1); --sp-max:1320px;
}



.sp-wrap{max-width:var(--sp-max);margin:0 auto;padding:0 32px}
[data-r]{opacity:0;transform:translateY(26px);transition:opacity .7s var(--sp-ease),transform .7s var(--sp-ease)}
[data-r].sp-in{opacity:1;transform:none}
.sp-mlabel{font-family:var(--sp-fm);font-size:12px;letter-spacing:.14em;text-transform:uppercase}
.sp-mlabel::before{content:"\25B8 ";}

/* ============ header ============ */
.sp-hd{position:sticky;top:0;z-index:80;background:rgba(255,255,255,.86);backdrop-filter:blur(12px)}
.sp-hd .sp-wrap{display:flex;align-items:center;height:74px;gap:44px}
.sp-hd .sp-logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--sp-deep)}
.sp-hd .sp-logo svg{height:24px}
.sp-hd .sp-logo b{font-weight:600;font-size:20px}
.sp-hd nav{display:flex;gap:30px;font-family:var(--sp-fm);font-size:14px}
.sp-hd nav a{color:var(--sp-deep);text-decoration:none;padding:4px 0}
.sp-hd nav a:hover{box-shadow:0 2px 0 var(--sp-lime-deep)}
.sp-hd .sp-cta{margin-left:auto;font-family:var(--sp-fm);font-size:14px;background:var(--sp-wash);border-radius:8px;padding:11px 20px;color:var(--sp-deep);text-decoration:none;border:1px solid transparent}
.sp-hd .sp-cta:hover{background:var(--sp-lime);border-color:var(--sp-deep)}

/* ============ REAL dmp APP UI COMPONENT ============ */
.sp-app{background:var(--sp-white);border-radius:14px;overflow:hidden;box-shadow:0 2px 6px rgba(18,18,18,.06),0 30px 80px rgba(18,18,18,.16);font-family:var(--sp-fb);color:var(--sp-deep);text-align:left}
.sp-app-top{display:flex;align-items:center;gap:16px;padding:12px 18px;border-bottom:1px solid var(--sp-grey-lt)}
.sp-app-top .sp-burger{display:grid;gap:4px}
.sp-app-top .sp-burger i{width:18px;height:2px;background:var(--sp-deep);border-radius:2px}
.sp-app-top svg{height:20px}
.sp-app-top .sp-right{margin-left:auto;display:flex;align-items:center;gap:18px;font-size:11px;color:var(--sp-deep70)}
.sp-app-top .sp-who{display:flex;align-items:center;gap:9px;color:var(--sp-deep)}
.sp-app-top .sp-who i{width:26px;height:26px;border-radius:50%;background:var(--sp-chip)}
.sp-app-top .sp-who b{display:block;font-size:11.5px;font-weight:600;line-height:1.2}
.sp-app-top .sp-who span{display:block;font-size:9.5px;color:var(--sp-deep70)}
.sp-app-crumb{font-size:11px;color:var(--sp-deep70);padding:10px 18px 0}
.sp-app-body{display:grid;grid-template-columns:150px 1fr;gap:0}
.sp-app-side{padding:14px;border-right:1px solid var(--sp-grey-lt);font-size:10.5px}
.sp-app-side h5,.sp-app-side .sp-app-label{margin:0 0 8px;font-size:10.5px;font-weight:600}
.sp-app-side .sp-chk{display:flex;align-items:center;gap:7px;color:var(--sp-deep70);padding:3px 0}
.sp-app-side .sp-chk i{width:11px;height:11px;border:1.4px solid var(--sp-deep45);border-radius:3px}
.sp-app-side .sp-chk.sp-on i{background:var(--sp-lime);border-color:var(--sp-deep)}
.sp-app-side .sp-sel{margin:6px 0 12px;border:1px solid var(--sp-grey-lt);border-radius:7px;padding:6px 8px;color:var(--sp-deep45);display:flex;justify-content:space-between}
.sp-app-main{padding:14px 16px;min-width:0;overflow-x:auto}
.sp-app-search{display:flex;gap:10px;margin-bottom:12px}
.sp-app-search .sp-box{flex:1;border:1px solid var(--sp-grey-lt);border-radius:9px;padding:8px 12px;font-size:11px;color:var(--sp-deep45)}
.sp-app-search .sp-go{background:var(--sp-deep);color:var(--sp-white);border-radius:9px;padding:8px 16px;font-size:11px}
.sp-app-add{display:flex;justify-content:flex-end;margin-bottom:10px}
.sp-app-add span{background:var(--sp-deep);color:var(--sp-white);border-radius:8px;padding:7px 12px;font-size:10.5px}
.sp-app-tbl{width:100%;min-width:420px;border-collapse:collapse;font-size:10.5px}
.sp-app-tbl th{text-align:left;font-weight:600;padding:8px 10px;background:var(--sp-wash);white-space:nowrap}
.sp-app-tbl td{padding:9px 10px;border-bottom:1px solid var(--sp-wash);vertical-align:middle;transition:background .4s var(--sp-ease),opacity .4s var(--sp-ease)}
.sp-app-tbl tr.sp-hl td{background:rgba(227,255,88,.45)}
.sp-app-tbl tr.sp-dim td{opacity:.28}
.sp-app-pill{display:inline-block;font-family:var(--sp-fm);font-size:9px;border:1px solid var(--sp-deep);border-radius:999px;padding:2px 8px;white-space:nowrap;transition:background .4s var(--sp-ease),color .4s var(--sp-ease)}
.sp-app-pill.sp-sealed{background:var(--sp-deep);color:var(--sp-white)}
.sp-app-pill.sp-norm{background:var(--sp-chip)}
.sp-app-pill.sp-ok{background:var(--sp-lime)}
.sp-app-pill.sp-open{background:var(--sp-white)}
.sp-app-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:10px 4px 0;font-size:10px;color:var(--sp-deep70)}
.sp-app-foot .sp-pg{width:20px;height:20px;border-radius:5px;background:var(--sp-lime);display:grid;place-items:center;color:var(--sp-deep);font-family:var(--sp-fm)}
.sp-app .sp-sample{position:absolute;top:10px;right:12px;font-family:var(--sp-fm);font-size:9px;letter-spacing:.08em;background:var(--sp-chip);border-radius:4px;padding:3px 8px;z-index:2}
.sp-appwrap{position:relative}
/* floating spec cards */
.sp-spec{font-family:var(--sp-fm);font-size:11px;line-height:1.6;background:rgba(255,255,255,.72);border:1px solid var(--sp-deep);padding:11px 13px;backdrop-filter:blur(3px);position:relative}
.sp-spec .sp-lb{color:var(--sp-deep70);letter-spacing:.06em}
.sp-spec .sp-lb::before{content:"\25B8 ";color:var(--sp-deep)}
.sp-tick::before,.sp-tick::after,.sp-tick .sp-c::before,.sp-tick .sp-c::after{content:"";position:absolute;width:8px;height:8px;border:1px solid var(--sp-deep)}
.sp-tick::before{top:-1px;left:-1px;border-right:0;border-bottom:0}
.sp-tick::after{top:-1px;right:-1px;border-left:0;border-bottom:0}
.sp-tick .sp-c::before{bottom:-1px;left:-1px;border-right:0;border-top:0}
.sp-tick .sp-c::after{bottom:-1px;right:-1px;border-left:0;border-top:0}

/* ============ hero ============ */
.sp-hero{padding-bottom:118px;background:radial-gradient(120% 80% at 78% 18%, rgba(227,255,88,.16) 0%, transparent 58%),radial-gradient(90% 70% at 8% 6%, rgba(255,255,255,.9) 0%, transparent 60%),linear-gradient(180deg,var(--sp-wash),#E9EDE7);border-radius:0 0 26px 26px;padding:76px 0 90px;position:relative;overflow:clip}
.sp-hero .sp-hgrid{display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(32px,4.5vw,64px);align-items:center;max-width:var(--sp-max);margin:0 auto;padding:0 32px}
.sp-hero h1{font-weight:500;font-size:clamp(38px,4.4vw,68px);line-height:1.04;letter-spacing:-.025em;text-align:left;max-width:13ch;margin:0}
.sp-hero .sp-lede{text-align:left;font-size:17.5px;line-height:1.6;color:var(--sp-deep70);max-width:44ch;margin:22px 0 0}
.sp-hero .sp-cta-row{text-align:left;margin:28px 0 0}
.sp-btn{display:inline-block;font-family:var(--sp-fm);font-size:14.5px;background:var(--sp-deep);color:var(--sp-white);border-radius:9px;padding:14px 26px;text-decoration:none;transition:transform .25s var(--sp-ease),background .25s var(--sp-ease),color .25s var(--sp-ease)}
.sp-btn:hover{transform:translateY(-2px);background:var(--sp-lime);color:var(--sp-deep)}
.sp-hero .sp-stage{position:relative;width:100%;perspective:1400px}
.sp-hero .sp-appwrap{transform:rotateX(calc(14deg * (1 - var(--hp,0)))) translateY(calc(20px * (1 - var(--hp,0))));transform-origin:top center;transition:transform .1s linear}
.sp-hero .sp-spec{position:absolute;background:var(--sp-white);z-index:3;max-width:225px;box-shadow:0 10px 30px rgba(18,18,18,.12)}
.sp-hero .sp-spec.sp-sA{left:10px;top:-36px}
.sp-hero .sp-spec.sp-sB{right:12px;top:-36px}
.sp-hero .sp-spec.sp-sC{left:-14px;bottom:-28px}
.sp-topo-corner{position:absolute;width:190px;right:-40px;bottom:-58px;opacity:.55;pointer-events:none}
.sp-trustline{position:relative;z-index:2;text-align:center;font-family:var(--sp-fm);font-size:12.5px;letter-spacing:.04em;color:var(--sp-deep70);margin-top:64px}
.sp-logostrip{display:flex;gap:52px;justify-content:center;align-items:center;margin-top:20px;filter:grayscale(1);opacity:.8}
.sp-logostrip img{height:30px}
.sp-logotext{font-weight:600;font-size:21px;letter-spacing:.03em;color:var(--sp-deep70)}

/* ============ hero line-field + activity card ============ */
#lineField{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;-webkit-mask-image:linear-gradient(180deg,transparent 0%,transparent 46%,#000 68%,#000 92%,transparent 100%),linear-gradient(90deg,transparent 0%,rgba(0,0,0,.35) 26%,#000 46%);mask-image:linear-gradient(180deg,transparent 0%,transparent 46%,#000 68%,#000 92%,transparent 100%),linear-gradient(90deg,transparent 0%,rgba(0,0,0,.35) 26%,#000 46%);-webkit-mask-composite:source-in;mask-composite:intersect}
/* hairline horizon so the skyline reads as intent, not noise */
.sp-hero::after{content:'';position:absolute;left:0;right:0;bottom:14%;height:1px;background:linear-gradient(90deg,transparent,rgba(18,18,18,.13) 22%,rgba(18,18,18,.13) 88%,transparent);z-index:0}
.sp-hero .sp-hgrid,.sp-hero .sp-trustline,.sp-hero .sp-logostrip{position:relative;z-index:2}
.sp-hero .sp-stage .sp-appwrap{position:relative;z-index:2}
.sp-field-label{position:absolute;left:32px;bottom:18px;font-family:var(--sp-fm);font-size:11px;letter-spacing:.16em;color:var(--sp-deep70);opacity:.5;transition:opacity .45s var(--sp-ease);z-index:1}
.sp-field-label::before{content:"\25B8 "}
.sp-ai-card{position:absolute;right:-12px;bottom:-38px;z-index:4;background:var(--sp-white);border:1px solid var(--sp-grey-lt);border-radius:12px;box-shadow:0 18px 50px rgba(18,18,18,.22);padding:14px 16px;max-width:252px}
.sp-ai-card .sp-t{display:flex;align-items:center;gap:7px;font-family:var(--sp-fm);font-size:9.5px;letter-spacing:.1em;color:var(--sp-deep70);margin-bottom:6px}
.sp-ai-card .sp-t i{width:7px;height:7px;border-radius:50%;background:var(--sp-lime);border:1px solid var(--sp-deep);animation:aip 2s var(--sp-ease) infinite}
@keyframes aip{50%{opacity:.35}}
.sp-ai-card b{font-size:12.5px;font-weight:500;display:block;line-height:1.45;transition:opacity .35s var(--sp-ease)}
@media (max-width:980px){#lineField,.sp-field-label,.sp-ai-card{display:none}}

/* ============ dark island + statement ============ */
.sp-island{background:var(--sp-canvas);color:var(--sp-ink-inv);border-radius:26px;margin:26px clamp(12px,2vw,30px);overflow:clip;position:relative}
.sp-stmt{min-height:100vh;display:grid;place-items:center;position:relative;padding:120px 32px}
.sp-stmt .sp-txt{font-weight:500;font-size:clamp(30px,3.9vw,58px);line-height:1.15;letter-spacing:-.02em;text-align:center;max-width:23ch;position:relative;z-index:2}
.sp-stmt .sp-txt em{font-style:normal;color:var(--sp-lime)}
.sp-pchip{position:absolute;will-change:transform,opacity;z-index:1}
.sp-pchip .sp-spec{background:rgba(255,255,255,.04);border-color:rgba(227,255,88,.5);color:var(--sp-grey-lt)}
.sp-pchip .sp-spec .sp-lb{color:rgba(205,210,186,.7)}
.sp-pchip .sp-spec .sp-lb::before{color:var(--sp-lime)}
.sp-pchip .sp-mini{background:var(--sp-white);color:var(--sp-deep);border-radius:11px;box-shadow:0 12px 36px rgba(0,0,0,.4);padding:12px 15px;display:flex;gap:11px;align-items:center;min-width:230px}
.sp-pchip .sp-mini .sp-ic{width:32px;height:32px;border-radius:8px;background:var(--sp-lime);border:1px solid var(--sp-deep);display:grid;place-items:center;font-family:var(--sp-fm);font-size:12px}
.sp-pchip .sp-mini b{display:block;font-size:13px;font-weight:600}
.sp-pchip .sp-mini span{font-family:var(--sp-fm);font-size:9.5px;color:var(--sp-deep70)}
.sp-pchip .sp-mini .sp-amt{margin-left:auto;font-weight:600;font-size:15px}

/* ============ SCROLL STORY (pinned, staged) ============ */
.sp-story{position:relative;height:min(1600px,178vh)}
.sp-story--light{background:var(--sp-wash);border-radius:26px;margin:26px clamp(12px,2vw,30px);overflow:clip}
.sp-story .sp-pin{position:sticky;top:0;min-height:100vh;display:grid;grid-template-columns:.9fr 1.3fr;gap:56px;align-items:center;padding:0 56px;overflow:clip}
.sp-story .sp-steps{position:relative;min-height:300px}
.sp-story .sp-step{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;opacity:0;transform:translateY(26px);transition:opacity .5s var(--sp-ease),transform .5s var(--sp-ease);pointer-events:none}
.sp-story .sp-step.sp-on{opacity:1;transform:none;pointer-events:auto}
.sp-story .sp-step .sp-mlabel{color:var(--sp-deep70)}
.sp-story .sp-step h2{font-weight:500;font-size:clamp(28px,3vw,44px);line-height:1.08;letter-spacing:-.02em;margin-top:16px;color:var(--sp-deep)}
.sp-story .sp-step p{font-size:16px;line-height:1.65;color:var(--sp-deep70);margin-top:14px;max-width:42ch}
.sp-story .sp-step .sp-go{display:inline-block;font-family:var(--sp-fm);font-size:13px;margin-top:22px;padding:11px 20px;border-radius:9px;border:1.5px solid var(--sp-lime);color:var(--sp-lime);text-decoration:none;background:rgba(227,255,88,.12)}
.sp-story .sp-step .sp-go:hover{background:var(--sp-lime);color:var(--sp-deep)}
.sp-story .sp-prog{position:absolute;left:56px;bottom:44px;display:flex;gap:8px}
.sp-story .sp-prog i{width:34px;height:3px;border-radius:2px;background:rgba(18,18,18,.14);overflow:hidden;position:relative}
.sp-story .sp-prog i::after{content:"";position:absolute;inset:0;background:var(--sp-lime-deep);transform:scaleX(var(--k,0));transform-origin:left}
.sp-story .sp-appwrap{max-width:640px;justify-self:center;width:100%}
.sp-story .sp-overlaycard{position:absolute;right:6%;top:12%;z-index:3;background:var(--sp-white);border-radius:12px;box-shadow:0 16px 50px rgba(0,0,0,.45);padding:14px 16px;font-size:12.5px;max-width:240px;opacity:0;transform:translateY(14px);transition:opacity .5s var(--sp-ease),transform .5s var(--sp-ease)}
.sp-story .sp-overlaycard.sp-on{opacity:1;transform:none}
.sp-story .sp-overlaycard b{font-weight:600}
.sp-story .sp-overlaycard .sp-t{font-family:var(--sp-fm);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--sp-deep70);display:block;margin-bottom:5px}
/* stage-driven element visibility inside the app */
.sp-app [data-stage]{opacity:0;transition:opacity .5s var(--sp-ease)}
.sp-app [data-stage].sp-on{opacity:1}
.sp-app tr[data-stage]{transition:opacity .5s var(--sp-ease)}
.sp-app tr[data-stage]:not(.sp-on) td{opacity:0}

/* ============ feature sections ============ */
.sp-feat{padding:110px 48px;display:grid;grid-template-columns:.9fr 1.25fr;gap:56px;align-items:center;position:relative}
.sp-feat.sp-flip{grid-template-columns:1.25fr .9fr}
.sp-feat .sp-eyebrow{display:flex;align-items:center;gap:12px;font-family:var(--sp-fm);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase}
.sp-feat .sp-eyebrow .sp-ic{width:30px;height:30px;border-radius:8px;background:var(--sp-lime);display:grid;place-items:center;border:1px solid var(--sp-deep)}
.sp-feat .sp-eyebrow .sp-ic svg{width:16px;height:16px;stroke:var(--sp-deep);fill:none;stroke-width:1.8}
.sp-feat h2{font-weight:500;font-size:clamp(28px,3.2vw,46px);line-height:1.08;letter-spacing:-.02em;margin-top:20px;max-width:16ch}
.sp-feat .sp-p{font-size:16px;line-height:1.65;margin-top:16px;max-width:44ch}
.sp-feat .sp-go{display:inline-block;font-family:var(--sp-fm);font-size:13.5px;font-weight:500;margin-top:26px;padding:13px 24px;border-radius:9px;text-decoration:none;transition:transform .2s var(--sp-ease),background .2s var(--sp-ease)}
.sp-feat .sp-go:hover{transform:translateY(-2px)}
.sp-statchip{display:inline-flex;align-items:baseline;gap:14px;border-radius:10px;padding:13px 17px;margin-top:40px;font-family:var(--sp-fm)}
.sp-statchip b{font-size:23px;font-weight:600}
.sp-statchip span{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase}
.sp-feat--dark{color:var(--sp-ink-inv)}
.sp-feat--dark .sp-eyebrow{color:var(--sp-grey-lt)}
.sp-feat--dark .sp-p{color:rgba(255,255,255,.78)}
.sp-feat--dark .sp-go{background:rgba(227,255,88,.14);color:var(--sp-lime);border:1.5px solid var(--sp-lime)}
.sp-feat--dark .sp-go:hover{background:var(--sp-lime);color:var(--sp-deep);border-color:var(--sp-lime)}
.sp-feat--dark .sp-statchip{background:rgba(227,255,88,.12);color:var(--sp-lime)}
.sp-feat--grid{background-image:linear-gradient(rgba(18,18,18,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(18,18,18,.06) 1px,transparent 1px);background-size:64px 64px}
.sp-feat--grid .sp-go{background:var(--sp-white);color:var(--sp-deep);border:1.5px solid var(--sp-deep)}
.sp-feat--grid .sp-go:hover{background:var(--sp-lime)}
.sp-feat--grid .sp-statchip{background:var(--sp-wash);border:1px solid var(--sp-grey-lt)}
.sp-feat .sp-appwrap{width:100%}
.sp-feat .sp-spec.sp-fA{position:absolute;right:-16px;top:-22px;z-index:3}
.sp-feat .sp-spec.sp-fB{position:absolute;left:-18px;bottom:-20px;z-index:3}
/* scroll-scrub: rows appear as feature scrolls through viewport */
.sp-scrub [data-k]{opacity:0;transform:translateY(10px);transition:opacity .45s var(--sp-ease),transform .45s var(--sp-ease)}
.sp-scrub.sp-s1 [data-k="1"],.sp-scrub.sp-s2 [data-k="1"],.sp-scrub.sp-s3 [data-k="1"],
.sp-scrub.sp-s2 [data-k="2"],.sp-scrub.sp-s3 [data-k="2"],
.sp-scrub.sp-s3 [data-k="3"]{opacity:1;transform:none}

/* ============ carousel ============ */
/* ============ industries: pinned scroll reveal ============ */
.sp-inds{height:380vh;position:relative}
.sp-cpin{position:sticky;top:0;min-height:100vh;display:flex;flex-direction:column;justify-content:center;gap:44px;overflow:clip;padding:60px clamp(18px,3vw,48px) 40px}
.sp-inds h2{font-weight:500;font-size:clamp(30px,4vw,54px);letter-spacing:-.02em;line-height:1.05;text-align:center;max-width:18ch;margin:0 auto}
.sp-irow{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:clamp(32px,4.5vw,60px);align-items:center;width:100%;max-width:1140px;margin:0 auto}
.sp-ipanels{position:relative;min-height:300px;min-width:0}
.sp-ipanel{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;opacity:0;transform:translateY(22px);transition:opacity .5s var(--sp-ease),transform .5s var(--sp-ease);pointer-events:none}
.sp-ipanel.sp-on{opacity:1;transform:none;pointer-events:auto}
.sp-ipanel .sp-lbl{font-family:var(--sp-fm);font-size:12px;letter-spacing:.12em}
.sp-ipanel .sp-lbl::before{content:"\25B8 "}
.sp-ipanel h3{font-weight:600;font-size:clamp(22px,2.3vw,30px);margin-top:10px;letter-spacing:-.01em}
.sp-ipanel .sp-itxt{font-size:15.5px;line-height:1.65;color:var(--sp-deep70);margin-top:12px;max-width:46ch}
.sp-ipanel .sp-lm{font-family:var(--sp-fm);font-size:13px;color:var(--sp-deep);text-decoration:none;display:inline-block;align-self:flex-start;margin-top:20px;border:1.5px solid var(--sp-deep);border-radius:9px;padding:11px 20px;background:var(--sp-white);transition:background .2s var(--sp-ease),transform .2s var(--sp-ease)}
.sp-ipanel .sp-lm::before{content:"\25B8 "}
.sp-ipanel .sp-lm:hover{background:var(--sp-lime);transform:translateY(-2px)}
.sp-iframe{position:relative;margin:0;width:100%;max-width:560px;aspect-ratio:4/3;border-radius:16px;overflow:hidden;border:1px solid var(--sp-deep);box-shadow:0 20px 60px rgba(18,18,18,.16);justify-self:center;background:var(--sp-wash)}
.sp-iimg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.05);opacity:0;transform:translateY(14px) scale(1.02);transition:opacity .55s var(--sp-ease),transform .55s var(--sp-ease)}
.sp-iimg.sp-on{opacity:1;transform:none}
.sp-iimg[data-fb]{visibility:hidden}
.sp-ilime{position:absolute;inset:0;background:rgba(227,255,88,.34);mix-blend-mode:multiply;pointer-events:none;z-index:1}
.sp-iframe.sp-fb .sp-ilime{display:none}
.sp-iflabel{position:absolute;inset:0 0 36px 0;display:grid;place-items:center;font-family:var(--sp-fm);font-size:13px;letter-spacing:.16em;color:var(--sp-deep70);opacity:0;transition:opacity .3s var(--sp-ease)}
.sp-iframe.sp-fb .sp-iflabel{opacity:1}
.sp-iframe figcaption{position:absolute;left:0;right:0;bottom:0;z-index:2;display:flex;justify-content:space-between;gap:12px;background:rgba(18,18,18,.85);color:var(--sp-white);font-family:var(--sp-fm);font-size:10.5px;letter-spacing:.04em;padding:9px 13px}
.sp-iframe figcaption b{font-weight:500}
.sp-dots{display:flex;gap:10px;justify-content:center}
.sp-dots button{width:11px;height:11px;border-radius:50%;border:1.5px solid var(--sp-deep);background:transparent;cursor:pointer;padding:0;transition:background .25s var(--sp-ease)}
.sp-dots button[aria-current="true"]{background:var(--sp-lime)}
@media (max-width:960px){
  .sp-inds{height:auto}
  .sp-cpin{position:static;min-height:0}
  .sp-irow{grid-template-columns:1fr}
  .sp-ipanels{position:static;min-height:0;display:grid;gap:36px}
  .sp-ipanel{position:static;opacity:1;transform:none;pointer-events:auto}
  .sp-iframe{order:-1}
  .sp-dots{display:none}
}
/* ============ proof ============ */
.sp-proof{padding:120px 48px}
.sp-proof .sp-head{display:flex;justify-content:space-between;align-items:end;gap:24px;flex-wrap:wrap;color:var(--sp-white)}
.sp-proof h2{font-weight:500;font-size:clamp(30px,3.4vw,50px);letter-spacing:-.02em;line-height:1.06;max-width:14ch}
.sp-proof .sp-see{font-family:var(--sp-fm);font-size:13.5px;color:var(--sp-grey-lt);text-decoration:none}
.sp-proof .sp-see::before{content:"\25B8 "}
.sp-proof .sp-grid{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:26px;margin-top:60px}
.sp-qcard{background:#26290F;border-radius:16px;padding:36px;color:var(--sp-white);clip-path:polygon(0 0,94% 0,100% 8%,100% 100%,6% 100%,0 92%)}
.sp-qcard p{font-weight:500;font-size:20px;line-height:1.5}
.sp-qcard .sp-who{font-family:var(--sp-fm);font-size:11.5px;color:var(--sp-grey-lt);margin-top:22px;letter-spacing:.06em}
.sp-scard{position:relative;padding:26px 22px;color:var(--sp-white);display:flex;flex-direction:column}
.sp-scard .sp-tickw::before,.sp-scard .sp-tickw::after,.sp-scard .sp-tickw .sp-c::before,.sp-scard .sp-tickw .sp-c::after{border-color:var(--sp-lime)}
.sp-scard .sp-k{font-family:var(--sp-fm);font-size:11px;letter-spacing:.08em;color:var(--sp-grey-lt);line-height:1.7}
.sp-scard .sp-k::before{content:"\25B8 STAT\A";white-space:pre;color:var(--sp-lime)}
.sp-scard .sp-n{margin-top:auto;font-weight:500;font-size:clamp(44px,4.4vw,70px);letter-spacing:-.02em}
.sp-tickw{position:absolute;inset:0}
.sp-tickw::before,.sp-tickw::after,.sp-tickw .sp-c::before,.sp-tickw .sp-c::after{content:"";position:absolute;width:12px;height:12px;border:1px solid var(--sp-lime)}
.sp-tickw::before{top:0;left:0;border-right:0;border-bottom:0}
.sp-tickw::after{top:0;right:0;border-left:0;border-bottom:0}
.sp-tickw .sp-c::before{bottom:0;left:0;border-right:0;border-top:0}
.sp-tickw .sp-c::after{bottom:0;right:0;border-left:0;border-top:0}

/* ============ final + footer ============ */
.sp-final{min-height:86vh;display:grid;place-items:center;text-align:center;position:relative;padding:130px 32px 60px}
.sp-final h2{font-weight:500;font-size:clamp(38px,5.4vw,80px);line-height:1.06;letter-spacing:-.025em;color:var(--sp-white);max-width:15ch}
.sp-final h2 em{font-style:normal;color:var(--sp-lime)}
.sp-cta-card{position:relative;z-index:2;background:linear-gradient(165deg,var(--sp-wash),#EAEDDE);border-radius:24px;padding:clamp(48px,7vw,84px) clamp(24px,5vw,72px);max-width:860px;margin:0 auto;text-align:center;color:var(--sp-deep);box-shadow:0 40px 120px rgba(0,0,0,.45)}
.sp-cta-pill{display:inline-block;font-family:var(--sp-fm);font-size:11.5px;letter-spacing:.14em;border:1px solid var(--sp-deep);border-radius:999px;padding:8px 16px;background:var(--sp-white)}
.sp-cta-card h2{font-weight:500;font-size:clamp(34px,4.6vw,62px);line-height:1.05;letter-spacing:-.025em;color:var(--sp-deep);max-width:16ch;margin:26px auto 0}
.sp-cta-mark{background:linear-gradient(transparent 60%,var(--sp-lime) 60%);border-radius:2px;padding:0 2px}
.sp-cta-sub{font-size:16.5px;line-height:1.65;color:var(--sp-deep70);max-width:52ch;margin:18px auto 0}
.sp-cta-btnrow{margin-top:34px}
.sp-cta-btnrow .sp-btn{margin:0}

.sp-topo-sm{position:absolute;width:210px;animation:spin 46s linear infinite}
.sp-topo-sm.sp-t1{left:7%;top:12%}
.sp-topo-sm.sp-t2{right:5%;bottom:28%;animation-direction:reverse;width:250px}
@keyframes spin{to{transform:rotate(360deg)}}
.sp-ft{padding:40px 48px 56px;color:var(--sp-white);display:grid;grid-template-columns:repeat(3,1fr) 1.4fr;gap:40px;border-top:1px solid rgba(255,255,255,.12)}
.sp-ft h4{font-family:var(--sp-fm);font-size:11.5px;letter-spacing:.14em;color:var(--sp-grey-lt);text-transform:uppercase;margin:0 0 16px}
.sp-ft a{display:block;color:var(--sp-white);text-decoration:none;font-size:14.5px;padding:5px 0}
.sp-ft a:hover{color:var(--sp-lime)}
.sp-ft .sp-nl label{font-family:var(--sp-fm);font-size:13px;display:block;margin-bottom:12px}
.sp-ft .sp-nl .sp-box{display:flex;border:1px solid rgba(255,255,255,.35);border-radius:8px;overflow:hidden}
.sp-ft .sp-nl input{flex:1;background:transparent;border:0;color:var(--sp-white);font-family:var(--sp-fm);font-size:13px;padding:12px 14px;outline:none}
.sp-ft .sp-nl button{background:transparent;border:0;border-left:1px solid rgba(255,255,255,.35);color:var(--sp-lime);font-size:16px;padding:0 16px;cursor:pointer}
.sp-legal{padding:0 48px 40px;display:flex;gap:24px;justify-content:flex-end;font-family:var(--sp-fm);font-size:12px}
.sp-legal a{color:var(--sp-grey-lt);text-decoration:none}

@media (max-width:980px){
  .sp-hero .sp-hgrid{grid-template-columns:1fr;gap:40px}
  .sp-hero h1,.sp-hero .sp-lede{max-width:none}
  .sp-feat,.sp-feat.sp-flip{grid-template-columns:1fr;padding:76px 22px}
  .sp-story .sp-pin{grid-template-columns:1fr;padding:0 22px;align-content:center;gap:28px}
  .sp-story .sp-steps{min-height:200px}
  .sp-hero .sp-spec.sp-sA,.sp-hero .sp-spec.sp-sB,.sp-hero .sp-spec.sp-sC{display:none}
  .sp-proof .sp-grid{grid-template-columns:1fr}
  .sp-ft{grid-template-columns:1fr 1fr}
  .sp-hd nav{display:none}
  .sp-app-body{grid-template-columns:1fr}
  .sp-app-side{display:none}
}
@media (max-width:1200px){.sp-ai-card{right:-6px;bottom:-16px;max-width:220px}}
@media (max-height:740px){.sp-story .sp-pin{align-content:center}.sp-story .sp-step h2{font-size:clamp(24px,2.6vw,36px)}.sp-story .sp-step p{font-size:14.5px}}
@media (max-width:960px){.sp-carousel{height:auto}.sp-cpin{position:static;min-height:0;padding:80px 0 40px}}
@media (max-width:640px){.sp-wrap,.sp-feat{padding-left:18px;padding-right:18px}.sp-proof{padding:80px 18px}.sp-final{padding:100px 18px 50px}.sp-ft{padding:32px 18px 44px;grid-template-columns:1fr}.sp-legal{padding:0 18px 32px;justify-content:flex-start;flex-wrap:wrap}}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  [data-r]{opacity:1;transform:none}
  .sp-pchip{transform:none!important;opacity:1!important}
  .sp-hero .sp-appwrap{transform:none}
  .sp-story{height:auto}
  .sp-story .sp-pin{position:static;min-height:0;padding:80px 22px}
  .sp-story .sp-step{position:static;opacity:1;transform:none;margin-bottom:34px}
  .sp-app [data-stage],.sp-story .sp-overlaycard{opacity:1;transform:none}
  .sp-scrub [data-k]{opacity:1;transform:none}
}

#sp-home .sp-flagship{font-family:var(--sp-fm);font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--sp-deep70);margin:0 0 18px}
#sp-home .sp-flagship::before{content:"\25B8 "}
#sp-home h1{font-weight:500;font-size:clamp(40px,5.1vw,74px);line-height:1.0;letter-spacing:-.032em;max-width:15ch;margin:0}
#sp-home .sp-h2sub{font-weight:400;font-size:clamp(16px,1.32vw,19px);line-height:1.55;color:var(--sp-deep70);max-width:38ch;margin:26px 0 0}

/* --- SAMPLE DATA disclosure tag: always legible, never behind a spec card --- */
#sp-home .sp-app{position:relative}
#sp-home .sp-sample{position:absolute;top:42px;right:14px;bottom:auto;left:auto;z-index:6;
  background:var(--sp-chip);color:var(--sp-deep);border-radius:4px;padding:3px 8px;
  font-family:var(--sp-fm);font-size:9px;letter-spacing:.08em}
#sp-home .sp-hero .sp-spec.sp-sA{left:-6px;top:-58px}
#sp-home .sp-hero .sp-spec.sp-sB{right:0;top:-58px}
#sp-home .sp-hero .sp-spec.sp-sC{left:-26px;bottom:-34px}


/* ===================== Final CTA — decision moment on canvas =====================
   Was a full-viewport #E3FF58 block (667px of the loudest brand colour, against a
   60/30/10 kit that caps it at 10%) carrying two identical black buttons, so the
   primary action had no visual priority. Now: dark canvas, radioactive reserved
   for the single primary button, secondary demoted to a quiet link.            */
.cta-final{ position:relative; background:var(--c-canvas); color:var(--c-ink-inv);
  padding:clamp(88px,9vw,140px) 0; overflow:hidden; border-bottom:none; }
.cta-final-glow{ position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(58% 62% at 50% 0%, rgba(227,255,88,.13) 0%, transparent 62%); }
.cta-final-inner{ position:relative; z-index:1; max-width:820px; text-align:center; }
.cta-final-eyebrow{ font-family:var(--font-mono); font-size:11px; font-weight:700;
  letter-spacing:.18em; text-transform:uppercase; color:var(--c-radioactive); margin:0 0 22px; }
.cta-final-eyebrow::before{ content:"\25B8  "; }
.cta-final h2{ font-size:clamp(32px,4.1vw,58px); font-weight:400; line-height:1.06;
  letter-spacing:-.028em; margin:0; color:var(--c-ink-inv); }
.cta-final-lede{ font-size:clamp(15.5px,1.2vw,17.5px); line-height:1.65;
  color:var(--c-grey-lt); max-width:62ch; margin:26px auto 0; }
.cta-final-list{ list-style:none; margin:34px auto 0; padding:0; display:flex;
  flex-wrap:wrap; gap:10px 12px; justify-content:center; }
.cta-final-list li{ font-family:var(--font-mono); font-size:12.5px; letter-spacing:.02em;
  color:var(--c-ink-inv); border:1px solid rgba(227,255,88,.28); border-radius:999px;
  padding:8px 16px; background:rgba(227,255,88,.06); }
.cta-final-actions{ display:flex; flex-wrap:wrap; align-items:center; justify-content:center;
  gap:14px 28px; margin-top:44px; }
.cta-final .btn-accent{ background:var(--c-radioactive); color:var(--c-deep); border:none;
  font-weight:700; padding:17px 32px; border-radius:8px; gap:12px;
  box-shadow:0 10px 30px rgba(227,255,88,.16); }
.cta-final .btn-accent:hover{ transform:translateY(-2px); box-shadow:0 16px 44px rgba(227,255,88,.24); }
.cta-final-alt{ font-family:var(--font-mono); font-size:13.5px; color:var(--c-grey-lt);
  text-decoration:none; border-bottom:1px solid rgba(211,216,212,.34); padding-bottom:3px;
  transition:color 200ms var(--ease), border-color 200ms var(--ease); }
.cta-final-alt span{ margin-left:7px; display:inline-block; transition:transform 200ms var(--ease); }
.cta-final-alt:hover{ color:var(--c-lime-deep); border-color:var(--c-lime-deep); }
.cta-final-alt:hover span{ transform:translateX(4px); }
.cta-final-note{ font-size:13.5px; line-height:1.55; color:var(--c-grey);
  max-width:52ch; margin:34px auto 0; }
@media (max-width:640px){
  .cta-final-actions{ flex-direction:column; gap:18px; }
  .cta-final .btn-accent{ width:100%; justify-content:center; }
}


/* ---- Final CTA: animated field. All motion is transform/opacity only (GPU),
       on absolutely-positioned pseudo layers, never on the scrolling container. ---- */
.cta-fx{ position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:0; }
.cta-fx > span{ position:absolute; display:block; }

/* drifting registry grid — oversized so the translate never exposes an edge */
.cta-fx-grid{ inset:-40% -20%; opacity:.5;
  background-image:radial-gradient(rgba(211,216,212,.16) 1px, transparent 1px);
  background-size:34px 34px;
  -webkit-mask-image:radial-gradient(70% 62% at 50% 46%, #000 0%, transparent 78%);
  mask-image:radial-gradient(70% 62% at 50% 46%, #000 0%, transparent 78%);
  animation:cta-drift 26s linear infinite; will-change:transform; }
@keyframes cta-drift{ from{ transform:translate3d(0,0,0); } to{ transform:translate3d(34px,34px,0); } }

/* breathing accent glow */
.cta-fx-glow{ left:50%; top:-28%; width:min(1100px,92vw); aspect-ratio:1.6/1;
  transform:translateX(-50%); border-radius:50%;
  background:radial-gradient(closest-side, rgba(227,255,88,.17), transparent 72%);
  animation:cta-breathe 9s ease-in-out infinite; will-change:transform,opacity; }
@keyframes cta-breathe{ 0%,100%{ transform:translateX(-50%) scale(1); opacity:.85; }
  50%{ transform:translateX(-50%) scale(1.11); opacity:1; } }

/* signal lines sweeping the field, echoing the hero skyline */
.cta-fx-line{ left:0; width:42%; height:1px;
  background:linear-gradient(90deg, transparent, rgba(227,255,88,.34), transparent);
  opacity:0; will-change:transform,opacity; }
.cta-fx-line.l1{ top:13%; animation:cta-sweep 7.5s var(--ease) infinite; }
.cta-fx-line.l2{ top:90%; animation:cta-sweep 9.5s var(--ease) infinite 2.4s; }
.cta-fx-line.l3{ top:6%;  animation:cta-sweep 11s var(--ease) infinite 4.8s; }
@keyframes cta-sweep{ 0%{ transform:translate3d(-45%,0,0); opacity:0; }
  16%{ opacity:.5; } 84%{ opacity:.5; } 100%{ transform:translate3d(240%,0,0); opacity:0; } }

/* pulsing nodes — the "live registry" tell */
.cta-fx-node{ width:5px; height:5px; border-radius:50%; background:var(--c-radioactive);
  box-shadow:0 0 0 0 rgba(227,255,88,.5); will-change:transform,opacity; }
.cta-fx-node.n1{ left:9%;  top:22%; animation:cta-pulse 4.2s ease-out infinite; }
.cta-fx-node.n2{ left:91%; top:17%; animation:cta-pulse 4.2s ease-out infinite 1.4s; }
.cta-fx-node.n3{ left:88%; top:78%; animation:cta-pulse 4.2s ease-out infinite 2.8s; }
@keyframes cta-pulse{ 0%{ transform:scale(.7); opacity:.35; box-shadow:0 0 0 0 rgba(227,255,88,.45); }
  45%{ transform:scale(1); opacity:1; } 100%{ transform:scale(.9); opacity:.3;
  box-shadow:0 0 0 16px rgba(227,255,88,0); } }

@media (prefers-reduced-motion: reduce){
  .cta-fx-grid,.cta-fx-glow,.cta-fx-line,.cta-fx-node{ animation:none; }
  .cta-fx-line{ opacity:.5; transform:none; }
}

/* tightened copy rhythm now that the block is half the length */
.cta-final-lede{ max-width:46ch; margin-top:22px; }
.cta-final-list{ margin-top:28px; }
.cta-final-actions{ margin-top:38px; }
.cta-final-note{ margin-top:26px; font-family:var(--font-mono); font-size:12px;
  letter-spacing:.04em; color:var(--c-grey); }


/* ================= Mosaic hero: drifting dmp UI tiles behind the copy =================
   Paramount-style tile field, built from synthetic dmp-styled miniatures rather than
   product screenshots (those carry client names, staff names and third-party marks).
   Motion is transform-only on the column tracks; the scrim guarantees text contrast. */
.hero-mosaic{ position:relative; background:var(--c-canvas); color:var(--c-ink-inv);
  border-radius:0; overflow:hidden; padding:0;
  min-height:min(880px,100dvh); display:grid; place-items:center; }
.hm-field{ position:absolute; inset:-8% -2%; display:grid;
  grid-template-columns:repeat(6,1fr); gap:16px; pointer-events:none; z-index:0;
  transform:rotate(-4deg) scale(1.16); transform-origin:center; }
.hm-col{ overflow:hidden; }
.hm-track{ display:flex; flex-direction:column; gap:16px; will-change:transform;
  animation:hm-scroll linear infinite; }
@keyframes hm-scroll{ from{ transform:translate3d(0,0,0); } to{ transform:translate3d(0,-50%,0); } }
.hm-col.c1 .hm-track{ animation-duration:64s; }
.hm-col.c2 .hm-track{ animation-duration:82s; animation-direction:reverse; }
.hm-col.c3 .hm-track{ animation-duration:72s; }
.hm-col.c4 .hm-track{ animation-duration:92s; animation-direction:reverse; }
.hm-col.c5 .hm-track{ animation-duration:68s; }
.hm-col.c6 .hm-track{ animation-duration:88s; animation-direction:reverse; }

/* --- the miniature cards --- */
.hm-shot{ width:100%; height:auto; display:block; flex:none; border-radius:10px;
  box-shadow:0 10px 30px rgba(0,0,0,.42); }
.hm-card{ background:var(--c-white); border-radius:9px; padding:11px 12px; flex:none;
  display:flex; flex-direction:column; gap:6px; box-shadow:0 8px 24px rgba(0,0,0,.35); }
.hm-card > i{ display:flex; }
.hm-top{ align-items:center; gap:7px; border-bottom:1px solid var(--c-grey-lt); padding-bottom:6px; }
.hm-top b{ width:16px; height:5px; background:var(--c-deep); border-radius:2px; flex:none; }
.hm-top s{ text-decoration:none; font-family:var(--font-mono); font-size:8px;
  letter-spacing:.06em; text-transform:uppercase; color:var(--c-deep); }
.hm-row{ align-items:center; gap:6px; font-size:7.5px; color:var(--c-deep); }
.hm-row b{ font-weight:500; flex:1; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hm-row s{ text-decoration:none; color:var(--c-grey); flex:none; }
.hm-pill{ font-style:normal; font-family:var(--font-mono); font-size:6.5px; border-radius:99px;
  padding:2px 6px; border:1px solid var(--c-deep); flex:none; }
.hm-pill.ok{ background:var(--c-radioactive); } .hm-pill.warn{ background:var(--c-chip); }
.hm-pill.open{ background:var(--c-white); } .hm-pill.seal{ background:var(--c-deep); color:var(--c-white); }
.hm-bars{ align-items:flex-end; gap:4px; height:46px; }
.hm-bars i{ flex:1; background:var(--c-deep); border-radius:2px 2px 0 0; }
.hm-bars i:nth-child(2n){ background:var(--c-radioactive); }
.hm-score{ align-items:baseline; gap:5px; }
.hm-score u{ text-decoration:none; font-size:22px; font-weight:600; color:var(--c-deep); line-height:1; }
.hm-score s{ text-decoration:none; font-family:var(--font-mono); font-size:7.5px; color:var(--c-grey); }
.hm-line{ height:4px; border-radius:2px; background:var(--c-grey-lt); }
.hm-line.w80{ width:80%; } .hm-line.w70{ width:70%; } .hm-line.w60{ width:60%; } .hm-line.w45{ width:45%; }
.hm-heat{ display:grid !important; grid-template-columns:repeat(5,1fr); gap:3px; }
.hm-cell{ aspect-ratio:1; border-radius:2px; }
.hm-cell.ok{ background:var(--c-radioactive); } .hm-cell.warn{ background:var(--c-chip); }
.hm-cell.bad{ background:var(--c-deep); }
.hm-wf{ flex-direction:column; gap:4px; }
.hm-wf u{ height:8px; border-radius:2px; display:block; }
.hm-wf u.a{ width:96%; background:var(--c-deep); } .hm-wf u.b{ width:34%; background:var(--c-radioactive); }
.hm-wf u.c{ width:74%; background:var(--c-grey-lt); }

/* --- scrim: the tiles are texture, the copy is the message --- */
.hm-scrim{ position:absolute; inset:0; z-index:1; pointer-events:none;
  background:
    radial-gradient(66% 58% at 50% 46%, rgba(14,17,16,.95) 0%, rgba(14,17,16,.80) 40%, rgba(14,17,16,.46) 72%, rgba(14,17,16,.26) 100%),
    linear-gradient(180deg, rgba(14,17,16,.88) 0%, transparent 22%, transparent 52%,
      rgba(14,17,16,.72) 74%, rgba(14,17,16,.96) 88%, var(--c-canvas) 100%); }
/* the field itself dissolves before the section ends, so nothing crosses the seam */
.hm-field{ -webkit-mask-image:linear-gradient(180deg,#000 0%,#000 62%,transparent 92%);
  mask-image:linear-gradient(180deg,#000 0%,#000 62%,transparent 92%); }
/* hero and the dark island that follows become one continuous surface */
/* hero flows straight into the dark island: no side margin, no top radius, no gap */
.hero-mosaic + .sp-island{ margin:0 0 26px; border-radius:0 0 26px 26px; }
.hero-mosaic{ margin-bottom:0; }
.hm-field{ opacity:.62; filter:saturate(.62) contrast(1.02) brightness(1.02); }

/* --- copy --- */
.hm-copy{ position:relative; z-index:2; text-align:center; padding-block:clamp(90px,10vw,140px); }
.hm-eyebrow{ font-family:var(--font-mono); font-size:11px; font-weight:700; letter-spacing:.18em;
  text-transform:uppercase; color:var(--c-radioactive); margin:0 0 24px; }
.hm-eyebrow::before{ content:"\25B8  "; }
.hero-mosaic h1{ font-weight:400; font-size:clamp(40px,6vw,86px); line-height:1.0;
  letter-spacing:-.034em; margin:0 auto; max-width:15ch; color:var(--c-ink-inv); }
.hm-sub{ font-size:clamp(16px,1.35vw,19.5px); line-height:1.55; color:var(--c-grey-lt);
  max-width:46ch; margin:28px auto 0; }
.hm-actions{ display:flex; flex-wrap:wrap; gap:14px 28px; align-items:center;
  justify-content:center; margin-top:40px; }
.hero-mosaic .btn-accent{ background:var(--c-radioactive); color:var(--c-deep); border:none;
  font-weight:700; padding:17px 32px; border-radius:8px; gap:12px;
  box-shadow:0 10px 34px rgba(227,255,88,.20); }
.hero-mosaic .btn-accent:hover{ transform:translateY(-2px); box-shadow:0 18px 50px rgba(227,255,88,.28); }
.hm-alt{ font-family:var(--font-mono); font-size:13.5px; color:var(--c-grey-lt); text-decoration:none;
  border-bottom:1px solid rgba(211,216,212,.34); padding-bottom:3px;
  transition:color 200ms var(--ease), border-color 200ms var(--ease); }
.hm-alt span{ margin-left:7px; display:inline-block; transition:transform 200ms var(--ease); }
.hm-alt:hover{ color:var(--c-lime-deep); border-color:var(--c-lime-deep); }
.hm-alt:hover span{ transform:translateX(4px); }
.hm-trust{ font-family:var(--font-mono); font-size:11.5px; letter-spacing:.05em;
  color:var(--c-grey); margin:52px auto 0; }
.hm-sample{ display:block; margin-top:14px; font-family:var(--font-mono); font-size:9.5px;
  letter-spacing:.09em; text-transform:uppercase; color:var(--c-grey); }

@media (max-width:900px){
  .hm-field{ grid-template-columns:repeat(4,1fr); }
  .hm-field .hm-col.c5, .hm-field .hm-col.c6{ display:none; }
  .hm-sample{ position:static; display:block; margin-top:26px; }
}
@media (prefers-reduced-motion: reduce){ .hm-track{ animation:none; } }


/* ===== Pinned sections: clear the sticky header, never exceed the viewport ===== */
:root{ --hdr-h:81px; }
.sp-story .sp-pin,
.sp-cpin{ top:0; min-height:100dvh; padding-top:calc(var(--hdr-h) + 20px); box-sizing:border-box; }
.sp-cpin{ padding-bottom:40px; gap:clamp(18px,2.6vh,40px); justify-content:flex-start; }
.sp-inds h2{ font-size:clamp(26px,3.1vw,46px); max-width:20ch; }
.sp-irow{ align-items:center; flex:1; min-height:0; }
/* frame is height-led so it can never run past the fold; aspect-ratio derives the width */
.sp-iframe{ height:min(430px, calc(100dvh - var(--hdr-h) - 300px)); width:auto; max-width:560px;
  aspect-ratio:4/3; margin-inline:auto; }
.sp-story .sp-appwrap{ max-height:calc(100dvh - var(--hdr-h) - 140px); }
.sp-story .sp-app{ max-height:100%; }
@media (max-width:900px){
  .sp-iframe{ height:auto; width:100%; }
  .sp-story .sp-pin,.sp-cpin{ padding-top:calc(var(--hdr-h) + 12px); }
}


/* ===================== Final CTA on white =====================
   Light surface, deep ink, radioactive reserved for the one primary button.
   --c-lime-deep is 2.27:1 on white so it is used only as fill/line/node here,
   never as text; all copy is --c-deep or --c-deep-70. */
.cta-final{ background:var(--c-white); color:var(--c-deep); border-top:1px solid var(--c-grey-lt); }
.cta-final-glow{ background:radial-gradient(58% 62% at 50% 0%, rgba(227,255,88,.30) 0%, transparent 64%); }
.cta-final-eyebrow{ color:var(--c-deep-70); }
.cta-final h2{ color:var(--c-deep); }
.cta-final-lede{ color:var(--c-deep-70); }
.cta-final-list li{ color:var(--c-deep); border:1px solid var(--c-grey-lt);
  background:var(--c-wash); }
.cta-final-alt{ color:var(--c-deep-70); border-bottom-color:var(--c-grey-lt); }
.cta-final-alt:hover{ color:var(--c-deep); border-bottom-color:var(--c-deep); }
.cta-final-note{ color:var(--c-grey); }
.cta-final .btn-accent{ box-shadow:0 8px 24px rgba(18,18,18,.10); }
.cta-final .btn-accent:hover{ box-shadow:0 14px 34px rgba(18,18,18,.14); }

/* animated field, retuned for a light ground */
.cta-fx-grid{ background-image:radial-gradient(rgba(18,18,18,.13) 1px, transparent 1px); opacity:.75; }
.cta-fx-line{ background:linear-gradient(90deg, transparent, rgba(155,184,14,.55), transparent); }
.cta-fx-node{ background:var(--c-lime-deep); box-shadow:0 0 0 0 rgba(155,184,14,.45); }
@keyframes cta-pulse{ 0%{ transform:scale(.7); opacity:.35; box-shadow:0 0 0 0 rgba(155,184,14,.4); }
  45%{ transform:scale(1); opacity:1; } 100%{ transform:scale(.9); opacity:.3;
  box-shadow:0 0 0 16px rgba(155,184,14,0); } }


/* ===================== Sitewide visual language, aligned to the new home =====================
   The home page mockups use a soft, layered, borderless card: 14px radius, hairline
   grey-lt separators, mono micro-labels, pill states, and a two-stage shadow instead of
   a hard 1px ink outline. These rules bring the older schematic and mockup components on
   the other 49 pages onto the same language. CSS-led on purpose: the site is tokenised,
   so one sheet reaches every page without touching 50 files. */

/* --- app mockup frames (14 pages) --- */
.app-frame, .hv2-board{
  border:none !important; border-radius:14px !important;
  background:var(--c-white);
  box-shadow:0 2px 6px rgba(18,18,18,.06), 0 30px 80px rgba(18,18,18,.16) !important; }
.app-sidebar{ border-right:1px solid var(--c-grey-lt) !important; }
.app-table .tr + .tr{ border-top:1px solid var(--c-grey-lt); }
.app-frame .app-top, .hv2-top{ border-bottom:1px solid var(--c-grey-lt) !important; }

/* --- schematic diagrams (17 pages) --- */
.arch-diagram{ background:var(--c-wash); border:1px solid var(--c-grey-lt); border-radius:16px;
  padding:clamp(28px,3.2vw,44px) clamp(20px,3vw,40px);
  box-shadow:0 1px 2px rgba(18,18,18,.04), 0 18px 44px rgba(18,18,18,.07); }
.arch-lines path{ stroke:var(--c-grey) !important; stroke-dasharray:3 5; opacity:.85; }
.arch-box{ border:1px solid var(--c-grey-lt) !important; background:var(--c-white) !important;
  border-radius:8px; font-family:var(--font-mono); font-size:12.5px; letter-spacing:.02em;
  padding:11px 17px; box-shadow:0 1px 2px rgba(18,18,18,.05); transition:transform 200ms var(--ease); }
.arch-box:hover{ transform:translateY(-2px); }
.arch-box--hub{ background:var(--c-canvas) !important; color:var(--c-ink-inv) !important;
  border-color:var(--c-canvas) !important; font-weight:600;
  box-shadow:0 6px 20px rgba(18,18,18,.22); }
.arch-box--accent::after{ inset:-5px; border:1px solid var(--c-radioactive); border-radius:12px; }

/* --- section rhythm: match the home page's macro-whitespace and heading scale --- */
.sec-pad{ padding-block:clamp(88px,8vw,132px); }
.sec-pad > .wrap > .eyebrow,
.eyebrow{ font-family:var(--font-mono); font-size:11px; font-weight:700;
  letter-spacing:.18em; text-transform:uppercase; }
.sec-pad h2{ letter-spacing:-.028em; line-height:1.06; }

/* --- cards pick up the softer elevation rather than a hard outline --- */
.detail-card, .blog-card, .trust-item{
  border:1px solid var(--c-grey-lt) !important; border-radius:16px;
  box-shadow:0 1px 2px rgba(18,18,18,.04), 0 14px 36px rgba(18,18,18,.06);
  transition:transform 220ms var(--ease), box-shadow 220ms var(--ease); }
.detail-card:hover, .blog-card:hover{
  box-shadow:0 2px 4px rgba(18,18,18,.05), 0 22px 54px rgba(18,18,18,.10); }


/* ===================== Contact: photo hero + direct form ===================== */
.ct-hero{ position:relative; min-height:440px; display:grid; align-items:end; color:var(--c-ink-inv); overflow:hidden;
  background:radial-gradient(70% 90% at 82% 20%, rgba(227,255,88,.10), transparent 60%),
  radial-gradient(50% 70% at 12% 80%, rgba(155,184,14,.10), transparent 60%), var(--c-canvas); }
.ct-photo{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  opacity:.38; filter:saturate(.6); }
.ct-scrim{ position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(14,17,16,.72) 0%, rgba(14,17,16,.38) 45%, rgba(14,17,16,.88) 100%); }
.ct-hero-in{ position:relative; z-index:1; padding-block:56px 64px; }
.crumbs--inv, .crumbs--inv a{ color:var(--c-grey-lt); }
.ct-hero h1{ font-size:clamp(34px,4.6vw,64px); font-weight:400; letter-spacing:-.03em;
  line-height:1.04; max-width:16ch; margin-top:18px; }
.ct-lede{ margin-top:18px; font-size:clamp(15.5px,1.25vw,18px); line-height:1.6;
  color:var(--c-grey-lt); max-width:46ch; }

.ct-form-sec{ padding-block:clamp(64px,7vw,104px); background:var(--c-white); }
.ct-grid{ display:grid; grid-template-columns:1.2fr .8fr; gap:clamp(32px,4vw,72px); align-items:start; }
.ct-form{ display:flex; flex-direction:column; gap:22px; }
.ct-form label{ display:flex; flex-direction:column; gap:9px; font-family:var(--font-mono);
  font-size:11.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--c-deep-70); }
.ct-form input, .ct-form textarea{ font-family:var(--font-sans); font-size:15.5px; color:var(--c-deep);
  border:1px solid var(--c-grey-lt); border-radius:9px; padding:14px 16px; background:var(--c-wash);
  transition:border-color 180ms var(--ease), background 180ms var(--ease); }
.ct-form input:focus, .ct-form textarea:focus{ outline:none; border-color:var(--c-deep); background:var(--c-white); }
.ct-row{ display:grid; grid-template-columns:1fr 1fr; gap:18px; }
.ct-form .btn-accent{ align-self:flex-start; background:var(--c-radioactive); color:var(--c-deep);
  border:none; font-weight:700; padding:16px 30px; border-radius:8px; gap:11px; }
.ct-note{ font-size:13.5px; color:var(--c-grey); margin:0; }
.ct-note a{ color:var(--c-deep); }
.ct-side{ display:flex; flex-direction:column; gap:16px; position:sticky; top:110px; }
.ct-card{ border:1px solid var(--c-grey-lt); border-radius:16px; padding:26px;
  box-shadow:0 1px 2px rgba(18,18,18,.04), 0 14px 36px rgba(18,18,18,.06); }
.ct-card--dark{ background:var(--c-canvas); color:var(--c-ink-inv); border-color:var(--c-canvas); }
.ct-dot{ display:block; width:9px; height:9px; border-radius:50%; background:var(--c-radioactive);
  box-shadow:0 0 0 5px rgba(227,255,88,.18); margin-bottom:14px; }
.ct-card-t{ font-weight:600; font-size:16px; letter-spacing:-.01em; }
.ct-card-s{ margin-top:9px; font-size:14px; line-height:1.6; color:var(--c-grey); }
.ct-card--dark .ct-card-s{ color:var(--c-grey-lt); }
@media(max-width:860px){ .ct-grid{ grid-template-columns:1fr; } .ct-row{ grid-template-columns:1fr; } .ct-side{ position:static; } }

/* ===================== Learn-more expanders (solutions + reused) ===================== */
details.xp{ border-top:1px solid var(--c-grey-lt); }
details.xp summary{ list-style:none; cursor:pointer; display:flex; align-items:center; gap:12px;
  padding:18px 0; font-family:var(--font-mono); font-size:13px; letter-spacing:.06em; color:var(--c-deep); }
details.xp summary::-webkit-details-marker{ display:none; }
details.xp summary::after{ content:"+"; margin-left:auto; font-size:19px; color:var(--c-grey);
  transition:transform 200ms var(--ease); }
details.xp[open] summary::after{ transform:rotate(45deg); }
details.xp .xp-body{ padding:0 0 22px; font-size:15px; line-height:1.7; color:var(--c-deep-70); max-width:60ch; }

/* ===================== Blog: visual cards + see more ===================== */
.bl-hero{ position:relative; background:var(--c-canvas); color:var(--c-ink-inv); overflow:hidden;
  padding-block:clamp(64px,8vw,110px); }
.bl-hero .wrap{ position:relative; z-index:2; }
.bl-hero h1{ font-size:clamp(36px,5vw,70px); font-weight:400; letter-spacing:-.032em; max-width:15ch; }
.bl-hero p{ margin-top:18px; color:var(--c-grey-lt); font-size:clamp(15.5px,1.25vw,18px); max-width:46ch; line-height:1.6; }
.bl-tags{ position:absolute; inset:0; pointer-events:none; opacity:.5; z-index:1; }
.bl-tags span{ position:absolute; font-family:var(--font-mono); font-size:11.5px; letter-spacing:.08em;
  border:1px solid rgba(227,255,88,.30); color:rgba(227,255,88,.75); border-radius:999px; padding:7px 14px;
  background:rgba(227,255,88,.05); animation:bl-float 14s ease-in-out infinite; will-change:transform; }
.bl-tags span:nth-child(2n){ animation-duration:18s; animation-delay:-6s; border-color:rgba(211,216,212,.22); color:rgba(211,216,212,.6); background:transparent; }
@keyframes bl-float{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-16px); } }
@media (prefers-reduced-motion:reduce){ .bl-tags span{ animation:none; } }

.bl-thumb{ position:relative; height:172px; border-radius:12px 12px 0 0; overflow:hidden;
  background:var(--c-canvas); display:grid; place-items:center; }
.bl-thumb i{ position:absolute; display:block; border-radius:3px; background:rgba(227,255,88,.85); }
.bl-thumb.v0 i:nth-child(1){ left:14%; bottom:20%; width:9%; height:26%; }
.bl-thumb.v0 i:nth-child(2){ left:27%; bottom:20%; width:9%; height:44%; }
.bl-thumb.v0 i:nth-child(3){ left:40%; bottom:20%; width:9%; height:34%; background:rgba(211,216,212,.5); }
.bl-thumb.v0 i:nth-child(4){ left:53%; bottom:20%; width:9%; height:56%; }
.bl-thumb.v1 i{ height:3px; background:rgba(211,216,212,.5); }
.bl-thumb.v1 i:nth-child(1){ left:16%; top:32%; width:52%; }
.bl-thumb.v1 i:nth-child(2){ left:16%; top:46%; width:64%; background:rgba(227,255,88,.85); }
.bl-thumb.v1 i:nth-child(3){ left:16%; top:60%; width:38%; }
.bl-thumb.v1 i:nth-child(4){ left:16%; top:74%; width:58%; }
.bl-thumb.v2 i{ width:16%; height:16%; border-radius:50%; background:transparent; border:2px solid rgba(227,255,88,.8); }
.bl-thumb.v2 i:nth-child(1){ left:20%; top:30%; }
.bl-thumb.v2 i:nth-child(2){ left:44%; top:52%; border-color:rgba(211,216,212,.5); }
.bl-thumb.v2 i:nth-child(3){ left:64%; top:26%; }
.bl-thumb.v2 i:nth-child(4){ left:38%; top:22%; width:2px; height:2px; background:rgba(227,255,88,.9); border:none; }
.bl-thumb .bl-k{ position:absolute; left:14px; bottom:12px; font-family:var(--font-mono); font-size:10px;
  letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.85); }
.bl-more-wrap{ text-align:center; margin-top:44px; }
.bl-hidden{ display:none; }

.btn-ghost{ display:inline-flex; align-items:center; gap:9px; font-weight:600; font-size:15px;
  padding:14px 26px; border-radius:8px; border:1px solid var(--c-grey-lt); color:var(--c-deep);
  background:var(--c-white); cursor:pointer; font-family:var(--font-sans);
  transition:border-color 180ms var(--ease), transform 180ms var(--ease); }
.btn-ghost:hover{ border-color:var(--c-deep); transform:translateY(-1px); }
.blog-card{ overflow:hidden; }
.blog-card:has(.bl-thumb){ padding-top:0; }
.blog-card .bl-thumb{ margin:-1px -1px 18px; border-radius:15px 15px 0 0; }


/* ===================== .ui-app: the new real-UI mockup component ===================== */
.ui-app{ background:var(--c-white); border-radius:14px; overflow:hidden;
  box-shadow:0 2px 6px rgba(18,18,18,.06), 0 30px 80px rgba(18,18,18,.16); }
.ui-top{ display:flex; align-items:center; gap:14px; padding:12px 16px;
  border-bottom:1px solid var(--c-grey-lt); background:var(--c-wash); }
.ui-dots{ display:flex; gap:6px; }
.ui-dots i{ width:9px; height:9px; border-radius:50%; background:var(--c-grey-lt); }
.ui-url{ font-family:var(--font-mono); font-size:11.5px; color:var(--c-grey);
  border:1px solid var(--c-grey-lt); border-radius:6px; padding:5px 12px; background:var(--c-white); }
.ui-sample{ margin-left:auto; font-family:var(--font-mono); font-size:9px; letter-spacing:.1em;
  background:var(--c-chip); color:var(--c-deep); border-radius:4px; padding:3px 8px; }
.ui-body{ padding:18px 20px 16px; }
.ui-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.ui-head b{ font-size:14.5px; font-weight:600; letter-spacing:-.01em; }
.ui-live{ font-family:var(--font-mono); font-size:10px; letter-spacing:.12em; color:var(--c-lime-deep); }
.ui-row{ display:grid; grid-template-columns:1.5fr .8fr 1fr .7fr; gap:12px; align-items:center;
  padding:11px 4px; font-size:13px; color:var(--c-deep); border-top:1px solid var(--c-grey-lt); }
.ui-row--head{ font-family:var(--font-mono); font-size:10.5px; letter-spacing:.08em;
  text-transform:uppercase; color:var(--c-grey); border-top:none; }
.ui-row--alert{ background:rgba(227,255,88,.14); border-radius:6px; }
.ui-pill{ font-family:var(--font-mono); font-size:10px; border:1px solid var(--c-grey-lt);
  border-radius:999px; padding:3px 10px; justify-self:start; }
.ui-pill.ok{ background:var(--c-radioactive); border-color:var(--c-deep); }
.ui-pill.warn{ background:var(--c-chip); }
.ui-foot{ margin-top:12px; font-family:var(--font-mono); font-size:10.5px; color:var(--c-grey); }


/* ---- blog: real photography ---- */
.bl-hero--photo{ position:relative; }
.bl-hero-img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  opacity:.30; filter:saturate(.55); z-index:0; }
.bl-hero-scrim{ position:absolute; inset:0; z-index:1;
  background:linear-gradient(180deg, rgba(14,17,16,.68) 0%, rgba(14,17,16,.42) 48%, rgba(14,17,16,.90) 100%); }
.bl-hero .bl-tags{ z-index:2; } .bl-hero .wrap{ z-index:3; }
.bl-thumb{background:radial-gradient(80% 90% at 70% 20%, rgba(227,255,88,.14), transparent 60%), var(--c-canvas);}
.bl-thumb--img img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  filter:saturate(.75); transition:transform 400ms var(--ease); }
.blog-card:hover .bl-thumb{background:radial-gradient(80% 90% at 70% 20%, rgba(227,255,88,.14), transparent 60%), var(--c-canvas);}
.bl-thumb--img img{ transform:scale(1.04); }
.bl-shade{ position:absolute; inset:0;
  background:linear-gradient(180deg, transparent 40%, rgba(14,17,16,.78) 100%); }
.blog-card:has(.bl-thumb) .ic{ display:none; }  /* icon tile is redundant under a photo thumb */

/* ==================== global vertical rhythm ====================
   Measured gaps showed heading-to-lede collapsing to 0 in several sections.
   One scale, everywhere: eyebrow 14px above heading, heading 18px above its
   lede, lede 26px above what follows. Sections keep the clamp() block pad. */
main .eyebrow + h1, main .eyebrow + h2{ margin-top:14px; }
main h1 + p, main h2 + p{ margin-top:18px; }
main h2 + .text2, main h2 + .lede{ margin-top:18px; }
main section .lede, main section .text2{ margin-bottom:0; }
main p + .btn, main p + .cta-row, main p + a.btn{ margin-top:26px; }
details.xp{ margin-top:22px; }
/* blog hub specifics: hero breathes before the filter row, filters before grid */
.bl-hero{ padding-block:clamp(72px,8.5vw,120px) clamp(84px,9vw,128px); }
.bl-filter-row, .blog-filters{ margin-top:44px; }
.blog-grid{ margin-top:36px; }


/* ============ Spade-style stratified figure in the statement band ============
   28 line-drawn slab layers forming an organic form. Each layer draws in on
   scroll (staggered) then breathes on its own slow drift. Transform/opacity
   only; everything off under reduced motion. */
.sp-stmt{ position:relative; }
.sp-strata-wrap{ position:absolute; inset:0; display:grid; place-items:center;
  pointer-events:none; z-index:0; }
.sp-strata{ height:min(78%, 560px); width:auto; opacity:.9; }
.st-layer{ fill:rgba(227,255,88,.05); stroke:rgba(227,255,88,.34); stroke-width:1.1;
  opacity:0; transform:translateY(14px);
  transition:opacity .8s var(--ease), transform .9s var(--ease);
  transition-delay:calc(var(--i) * 45ms); }
.st-layer:nth-child(3n){ stroke:rgba(211,216,212,.30); fill:rgba(211,216,212,.03); }
.sp-stmt.st-in .st-layer{ opacity:1; transform:none;
  animation:st-drift 9s ease-in-out infinite; animation-delay:calc(var(--i) * -0.45s); }
@keyframes st-drift{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-5px); } }
/* the statement text floats above the figure */
.sp-stmt .sp-txt{ position:relative; z-index:2; }
.sp-stmt .sp-pchip{ z-index:3; }
@media (prefers-reduced-motion: reduce){
  .st-layer{ transition:none; opacity:1; transform:none; }
  .sp-stmt.st-in .st-layer{ animation:none; } }


/* ---- modules: four abreast, no integration card ---- */
#solutions .row-3col{ grid-template-columns:repeat(4, minmax(0,1fr)); gap:18px; }
@media (max-width:1100px){ #solutions .row-3col{ grid-template-columns:repeat(2, minmax(0,1fr)); } }
@media (max-width:640px){ #solutions .row-3col{ grid-template-columns:1fr; } }
#solutions .mod-card{ min-width:0; }

/* ---- feature sections: module name is the headline, benefit is the lead ---- */
.sp-modname{ font-size:clamp(30px,3.4vw,52px); }
.sp-feat-lead{ font-family:var(--sp-fm, var(--font-mono)); font-size:clamp(14px,1.15vw,16.5px);
  letter-spacing:.02em; color:var(--c-radioactive); margin-top:14px; }
.sp-feat--dark .sp-feat-lead{ color:var(--c-radioactive); }
.sp-feat--grid .sp-feat-lead{ color:var(--c-lime-deep); }


/* ---- ui-app inside capability cards: two new layouts + fit ---- */
.ui-app--cap{ margin-top:22px; }
.ui-app--cap .ui-row{ font-size:12px; padding:9px 4px; gap:10px; }
.ui-app--cap .ui-head b{ font-size:13.5px; }
/* review list (Vendors to Review anatomy from the SPM screenshots) */
.ui-rev{ display:grid; grid-template-columns:auto auto 1fr auto; align-items:center; gap:10px;
  border:1px solid var(--c-grey-lt); border-left:3px solid var(--c-grey-lt);
  border-radius:8px; padding:10px 12px; margin-top:8px; font-size:12px; }
.ui-rev b{ font-weight:600; white-space:nowrap; }
.ui-rev s{ text-decoration:none; color:var(--c-grey); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ui-rev em{ font-style:normal; font-weight:700; font-family:var(--font-mono); font-size:12px; }
.ui-rev.bad{ border-left-color:var(--c-deep); background:rgba(18,18,18,.03); }
.ui-rev.warn{ border-left-color:var(--c-lime-deep); background:rgba(155,184,14,.05); }
.ui-rev.ok{ border-left-color:var(--c-radioactive); }
.ui-rev .ui-pill{ font-size:9px; }
.ui-rev .ui-pill.bad{ background:var(--c-deep); color:var(--c-white); border-color:var(--c-deep); }
/* KPI-style bars (Category Level anatomy from the screenshots) */
.ui-bar{ display:grid; grid-template-columns:1fr auto; align-items:center; gap:8px 12px; margin-top:12px; font-size:12.5px; }
.ui-bar span{ grid-column:1; font-weight:500; }
.ui-bar em{ grid-column:2; grid-row:1; font-style:normal; font-family:var(--font-mono); font-weight:700; color:var(--c-lime-deep); }
.ui-bar i{ grid-column:1/-1; display:block; height:7px; border-radius:99px; background:var(--c-wash);
  border:1px solid var(--c-grey-lt); overflow:hidden; }
.ui-bar u{ display:block; height:100%; border-radius:99px; background:var(--c-radioactive);
  border-right:1px solid var(--c-deep); }


/* ---- negotiation dashboard mockup (matches the product's summary anatomy) ---- */
.ui-nego{ display:grid; grid-template-columns:1fr auto 1fr; gap:14px; align-items:center;
  padding:14px 4px 16px; border-bottom:1px solid var(--c-grey-lt); }
.ui-nego-col{ text-align:center; }
.ui-nego-col s, .ui-nego-mid s{ display:block; text-decoration:none; font-family:var(--font-mono);
  font-size:9px; letter-spacing:.1em; text-transform:uppercase; color:var(--c-grey); }
.ui-nego-col b{ display:block; font-size:19px; font-weight:700; letter-spacing:-.02em; margin-top:4px; }
.ui-nego-col--to b{ color:var(--c-lime-deep); }
.ui-nego-mid{ text-align:center; }
.ui-nego-mid em{ display:block; font-style:normal; font-size:26px; font-weight:800; letter-spacing:-.03em; }
.ui-nego-saved{ display:block; margin-top:9px; border:1px dashed var(--c-lime-deep); border-radius:8px;
  padding:7px 12px; font-size:11px; }
.ui-nego-saved b{ font-weight:700; }
.ui-nego-saved i{ display:block; font-style:normal; font-family:var(--font-mono); font-size:9.5px;
  color:var(--c-grey); margin-top:3px; }
.ui-nego-split{ display:flex; height:9px; border-radius:99px; overflow:hidden; margin-top:14px;
  border:1px solid var(--c-grey-lt); }
.ui-nego-split i.a{ background:var(--c-radioactive); }
.ui-nego-split i.b{ background:var(--c-lime-deep); }
.ui-nego-split i.c{ background:var(--c-grey-lt); }
.ui-nego-legend{ display:flex; flex-wrap:wrap; gap:8px 18px; margin-top:10px;
  font-family:var(--font-mono); font-size:10px; color:var(--c-deep-70); }
.ui-nego-legend u{ display:inline-block; width:9px; height:9px; border-radius:3px;
  text-decoration:none; margin-right:6px; vertical-align:-1px; }
.ui-nego-legend u.a{ background:var(--c-radioactive); } .ui-nego-legend u.b{ background:var(--c-lime-deep); }
.ui-nego-legend u.c{ background:var(--c-grey-lt); }


/* ===== Industries: native 2x2 grid (was a 3,420px pinned scrub) ===== */
.sp-inds--grid{ height:auto; padding-block:clamp(72px,7.5vw,116px); background:var(--c-white); }
.sp-inds--grid h2{ text-align:left; max-width:22ch; margin:0; }
.ind-grid{ display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-top:44px; }
.ind-card{ display:flex; flex-direction:column; text-decoration:none; color:inherit;
  border:1px solid var(--c-grey-lt); border-radius:16px; overflow:hidden; background:var(--c-white);
  box-shadow:0 1px 2px rgba(18,18,18,.04), 0 14px 36px rgba(18,18,18,.06);
  transition:transform 220ms var(--ease), box-shadow 220ms var(--ease); }
.ind-card:hover{ transform:translateY(-3px);
  box-shadow:0 2px 4px rgba(18,18,18,.05), 0 24px 56px rgba(18,18,18,.10); }
.ind-media{ position:relative; display:block; aspect-ratio:21/9;
  background:radial-gradient(70% 90% at 70% 20%, rgba(227,255,88,.16), transparent 60%), var(--c-canvas); }
.ind-media img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; filter:saturate(.72); }
.ind-body{ display:flex; flex-direction:column; gap:10px; padding:22px 24px 26px; }
.ind-lbl{ font-family:var(--font-mono); font-size:11px; letter-spacing:.14em; color:var(--c-lime-deep); }
.ind-card h3{ font-size:clamp(19px,1.7vw,24px); font-weight:600; letter-spacing:-.015em; margin:0; }
.ind-card p{ margin:0; font-size:14.5px; line-height:1.6; color:var(--c-deep-70); }
.ind-go{ margin-top:6px; font-family:var(--font-mono); font-size:13px; }
.ind-go span{ display:inline-block; margin-left:6px; transition:transform 200ms var(--ease); }
.ind-card:hover .ind-go span{ transform:translateX(4px); }
@media(max-width:820px){ .ind-grid{ grid-template-columns:1fr; } }


/* ---- author entity ---- */
.author-hero{ display:flex; gap:26px; align-items:center; margin-top:26px; }
.author-photo{ border-radius:16px; flex:none; }
.author-links{ list-style:none; padding:0; margin:18px 0 0; display:grid; gap:10px; }
.author-links a{ color:var(--c-deep); text-decoration:none; border-bottom:1px solid var(--c-grey-lt); padding-bottom:2px; }
.author-links a:hover{ border-color:var(--c-deep); }
.author-card{ display:flex; gap:16px; align-items:center; margin-top:44px; border:1px solid var(--c-grey-lt);
  border-radius:14px; padding:18px 20px; background:var(--c-wash); }
.author-card img{ border-radius:10px; flex:none; }
.ac-name{ margin:0; font-weight:600; font-size:15px; }
.ac-name a{ color:inherit; }
.ac-bio{ margin:4px 0 0; font-size:13.5px; color:var(--c-grey); }

/* persistent module badge on the pinned story */
.sp-story .sp-pin{ position:sticky; }
.sp-story-mod{ position:absolute; top:calc(var(--hdr-h) + 26px); left:56px; z-index:3;
  font-family:var(--font-mono); font-size:11.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--c-lime-deep); margin:0; }
.sp-story-mod a{ color:inherit; text-decoration:none; border-bottom:1px solid currentColor; padding-bottom:2px; }
.sp-story-mod a:hover{ color:var(--c-deep); }
@media(max-width:900px){ .sp-story-mod{ left:24px; } }


/* ---- AEO: In-short box + Updated label ---- */
.inshort{ margin:26px 0 4px; border:1px solid var(--c-grey-lt); border-left:4px solid var(--c-radioactive);
  border-radius:12px; background:var(--c-wash); padding:16px 20px; }
.inshort .is-k{ display:block; font-family:var(--font-mono); font-size:10.5px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--c-lime-deep); margin-bottom:8px; }
.inshort p{ margin:0; font-size:15.5px; line-height:1.6; color:var(--c-deep); max-width:66ch; }
.upd{ font-family:var(--font-mono); font-size:inherit; color:var(--c-lime-deep); }

/* hero: all three headline levels centre-aligned, including wrapped lines */
.hm-copy, .hm-copy h1{ text-align:center; }
.hm-copy h1{ margin-inline:auto; }


/* ============ module pages: dark homepage-style hero + statement band ============ */
.mp-hero{ background:
  radial-gradient(64% 80% at 84% 8%, rgba(227,255,88,.11), transparent 62%),
  radial-gradient(44% 60% at 8% 92%, rgba(155,184,14,.09), transparent 60%),
  var(--c-canvas);
  color:var(--c-ink-inv); padding-block:clamp(56px,6.5vw,96px); }
.mp-hero .breadcrumb, .mp-hero .breadcrumb a, .mp-hero .crumbs, .mp-hero .crumbs a{ color:var(--c-grey-lt); }
.mp-hero .eyebrow{ color:var(--c-radioactive); }
.mp-hero h1{ color:var(--c-ink-inv); }
.mp-hero .lede{ color:var(--c-grey-lt); }
.mp-hero .hv2-mark{ background:none; color:var(--c-radioactive); }
.mp-hero .hv2-btn{ background:var(--c-radioactive); color:var(--c-deep); border-color:var(--c-radioactive); }
.mp-hero .ph-stage{ perspective:none; }
.ui-app--hero{ box-shadow:0 2px 8px rgba(0,0,0,.35), 0 40px 100px rgba(0,0,0,.5); }
.mp-hero .btn-underline{ color:var(--c-ink-inv); }

.mp-band{ padding-block:clamp(28px,3.5vw,52px); }
.mp-band .wrap{ background:
  radial-gradient(70% 120% at 88% 0%, rgba(227,255,88,.10), transparent 60%), var(--c-canvas);
  border-radius:28px; color:var(--c-ink-inv); padding:clamp(44px,5vw,80px) clamp(28px,4vw,72px); }
.mp-band-big{ font-size:clamp(24px,2.9vw,42px); font-weight:400; letter-spacing:-.025em;
  line-height:1.18; max-width:26ch; margin:0; }
.mp-band-sub{ margin:18px 0 0; font-size:clamp(14.5px,1.15vw,17px); line-height:1.6;
  color:var(--c-grey-lt); max-width:58ch; }

.ui-app{ color:var(--c-deep); }   /* never inherit inverted text inside the app frame */

/* ============================================================================
   DESIGN REVIEW — Gunel, 10–11 September 2026 ("docs/records/Landing Page.pptx")
   ============================================================================
   Appended as one block rather than edited in place above. The rules above are
   the signed-off prototype; everything here is a deliberate change on top of
   it, so the whole review is reviewable, revertable and diffable as a unit.
   Numbers match the comment order in the deck.

   Several of these are contrast fixes, not preferences — the deck says
   "kontrast tələbini ödəmir" ("does not meet the contrast requirement").
   ========================================================================= */

:root{
  --c-cta-hover:   #EEFF99;  /* 1  primary (accent) CTA hover fill            */
  --c-card-hover:  #CDD2BA;  /* 10 card + blog card hover surface             */
  --c-icon-hover:  #87915F;  /* 11 capability icon tile on hover              */
  --c-live:        #738A00;  /* 12 LIVE + percentage figures, darker to read  */
}

/* --- 1. CTA hovers -------------------------------------------------------
   The accent (lime) CTA lightens on hover; the black CTA on a white
   background goes to #424242 rather than flipping to lime.               */
.btn-accent::before{ background:var(--c-cta-hover); }
.btn-accent:hover{ color:var(--c-deep); }
.btn-primary::before{ background:var(--c-deep-hover); }
.btn-primary:hover{ color:var(--c-white); }

/* --- 2. Text-button hover ------------------------------------------------
   Black on light backgrounds, accent on dark ones.                       */
.btn-underline:hover{ color:var(--c-deep); }
.sp-feat--dark .btn-underline:hover,
.bench-sec .btn-underline:hover,
.cta-final .btn-underline:hover,
.mp-hero .btn-underline:hover{ color:var(--c-radioactive); }

/* --- 3 + 7. Module cards on hover ----------------------------------------
   The hover fill stays as it was; the text goes white. Black-on-lime was
   the contrast failure the review flags twice.                           */
.mod-card:hover h3,
.mod-card:hover p,
.mod-card:hover .num,
.mod-card:hover .mod-points li,
.mod-card:hover .mod-points span{ color:var(--c-white); }
.mod-card:hover .btn-underline{ color:var(--c-white); }
/* The oversized ghost digit behind the text was a dark tint; against white
   copy it read as a smudge, so it follows the text. */
.mod-card:hover::after{ color:rgba(255,255,255,.24); }

/* --- 4. ...but the text button inside a hovered card goes black -------- */
.mod-card .btn-underline:hover,
.mod-card:hover .btn-underline:hover{ color:var(--c-deep); }

/* --- 5. Footer ------------------------------------------------------------
   Column headings take the accent colour; the address email behaves like
   every other footer link instead of being a bare mailto.                */
/* The headings are h2, and the base rule already tints them --c-lime-deep
   (#9BB80E); the review asks for the brighter accent. */
footer.site .foot-col h2,
footer.site .foot-col h4{ color:var(--c-radioactive); }
footer.site address a{
  color:var(--c-grey-lt);
  text-decoration:underline;
  text-underline-offset:3px;
  transition:color 150ms var(--ease);
}
footer.site address a:hover{ color:var(--c-white); }

/* --- 6. Mega menu module list --------------------------------------------
   The active/hover state matches the quiet treatment used by the links in
   the right-hand column, and the label is no longer flush to the edge.   */
.mm-btn{ padding-left:12px; }
.mm-btn.is-on{
  background:var(--c-wash);
  border-color:transparent;
  font-weight:600;
}
.mc-link, .mc-head, .mc-subhead{ padding-left:12px; }

/* --- 10 + 11. Capability cards and their icon tiles --------------------- */
.detail-card:hover{ background:var(--c-card-hover); }
.detail-card .ic{ background:var(--c-card-hover); }
.detail-card:hover .ic{ background:var(--c-icon-hover); }
.detail-card:hover .ic svg{ stroke:var(--c-white); }
.ui-sample, .app-chrome .sample-tag{ background:var(--c-card-hover); }

/* --- 12. Live labels and percentage figures ------------------------------
   #9BB80E on white is 2.6:1. #738A00 is 4.6:1 and passes AA.             */
.ui-live, .app-head .live{ color:var(--c-live); }
/* Same failure, same fix: the figures inside the white UI mockups. */
.ui-bar em,
.ui-nego-col--to b,
.ui-app .ui-pct{ color:var(--c-live); }

/* --- 13. White text on every card hover, not just some ----------------- */
.ind-card:hover h3,
.ind-card:hover p,
.ind-card:hover .code,
.ind-card:hover .kw,
.ind-card:hover .ind-go{ color:var(--c-white); }

/* --- 21. Key capabilities sits evenly between its neighbours -------------
   Measured: 120px above the eyebrow, 235px below the list. The gap below is
   two section paddings back to back (115.2 + 115.2); the gap above is one,
   because the band above carries its own padding inside its dark fill. This
   drops the list section's own bottom padding so both gaps read as 120px. */
.sec-pad:has(.capability-list){ padding-bottom:0; }

/* --- 14. One radius for the primary CTA, everywhere -------------------- */
.btn, .btn-lg, .hv2-btn{ border-radius:8px; }

/* --- 17. "Learn more" disclosure -----------------------------------------
   It snapped open. A grid-row transition animates the open and close
   without needing a measured height.                                     */
details.xp .xp-body{
  display:grid;
  grid-template-rows:0fr;
  padding-block:0;
  transition:grid-template-rows 320ms var(--ease), padding-block 320ms var(--ease);
}
details.xp .xp-body > *{ overflow:hidden; min-height:0; }
details.xp[open] .xp-body{ grid-template-rows:1fr; padding-bottom:22px; }
details.xp summary{ transition:color 150ms var(--ease); }
details.xp summary:hover{ color:var(--c-deep); }

/* --- 18. Blog cards -------------------------------------------------------
   The thumbnail fills the card's width — side padding read badly against
   the top corner radius — and the card hover uses the review's surface.  */
.blog-card:hover{ background:var(--c-card-hover); }
/* The card is padding:28px / border:1px, and the thumb only pulled back the
   1px border -- so it sat 28px in on each side and the top corner radii read
   as a mismatched double curve. Pull it the full inset instead. */
.blog-card .bl-thumb{ margin:-1px -29px 18px; border-radius:15px 15px 0 0; }

/* --- 19. "See more articles" ---------------------------------------------
   Centred, with real space above the footer, styled as the secondary CTA
   it is rather than as a third button style.                             */
.bl-more-wrap{
  display:flex;
  justify-content:center;
  margin:56px auto 96px;
}
#bl-more{
  border:1px solid var(--c-deep);
  border-radius:8px;
  background:transparent;
  color:var(--c-deep);
  padding:14px 28px;
  font-size:15px;
  transition:background 200ms var(--ease), color 200ms var(--ease);
}
#bl-more:hover{ background:var(--c-deep); color:var(--c-white); }

/* --- 20. Team cards -------------------------------------------------------
   The bio no longer covers the portrait. It sits under the name and role in
   the same gradient panel, revealed on hover by growing the panel rather than
   replacing the card. The old overlay rules are neutralised here.        */
.team-card .bio{ display:none; }
.team-card .id{
  opacity:1 !important;
  transition:padding-top 260ms var(--ease), background 260ms var(--ease);
}
.team-card .id .bio-line{
  display:grid;
  grid-template-rows:0fr;
  margin-top:0;
  transition:grid-template-rows 300ms var(--ease), margin-top 300ms var(--ease);
}
.team-card .id .bio-line p{
  overflow:hidden;
  min-height:0;
  font-size:13px;
  line-height:1.5;
  color:var(--c-grey-lt);
}
.team-card:hover .id .bio-line,
.team-card:focus-within .id .bio-line{
  grid-template-rows:1fr;
  margin-top:10px;
}
@media (max-width:860px){
  .team-card .id .bio-line{ grid-template-rows:1fr; margin-top:10px; }
  .team-card .id .bio-line p{ color:var(--c-deep-70); }
}

/* --- 5 + 6. Demand Planning module section -------------------------------
   Two review points on the homepage's pinned Demand Planning section:

     * its module entry should be presented like the other three (icon tile,
       MODULE label, name, Learn more) rather than as an inline link;
     * its background should match the Contract Management section.

   The markup change is in HomePage.tsx. These rules give the pinned section
   the same grid ground as .sp-feat--grid, and place the new header above the
   scroll-driven steps without disturbing the pin.                        */
.sp-story--light{
  background-color:var(--c-paper);
  background-image:
    linear-gradient(rgba(18,18,18,.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(18,18,18,.06) 1px, transparent 1px);
  background-size:64px 64px;
}
/* The module header lives in the pin's LEFT grid column together with the
   steps, so it is wrapped in .sp-storycol -- .sp-pin is a two-column grid and
   loose children would each claim a cell of their own.  The header itself is
   given the same treatment as the .sp-feat headers on the other three modules;
   those rules are scoped to .sp-feat, so they are restated here rather than
   widened (widening .sp-go would also hit the "Parse"/"Search" buttons inside
   the mock app, which are .sp-go too). */
.sp-story .sp-pin > .sp-storycol{
  display:flex; flex-direction:column; justify-content:center; min-width:0;
}
.sp-story .sp-pin > .sp-storycol > .sp-eyebrow{
  display:flex; align-items:center; gap:12px;
  font-family:var(--sp-fm); font-size:12.5px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--sp-deep70); margin-bottom:14px;
}
.sp-story .sp-pin > .sp-storycol > .sp-eyebrow .sp-ic{
  width:30px; height:30px; border-radius:8px; background:var(--sp-lime);
  border:1px solid var(--sp-deep); display:grid; place-items:center; flex:0 0 auto;
}
.sp-story .sp-pin > .sp-storycol > .sp-eyebrow .sp-ic svg{
  width:16px; height:16px; stroke:var(--sp-deep); fill:none; stroke-width:1.8;
}
.sp-story .sp-pin > .sp-storycol > .sp-modname{
  font-weight:500; line-height:1.08; letter-spacing:-.02em;
  color:var(--sp-deep); margin:0 0 18px;
}
.sp-story .sp-pin > .sp-storycol > .sp-go{
  align-self:flex-start; display:inline-block; margin:0 0 34px;
  font-family:var(--sp-fm); font-size:13.5px; font-weight:500;
  padding:13px 24px; border-radius:8px; text-decoration:none;
  background:var(--c-white); color:var(--sp-deep); border:1.5px solid var(--sp-deep);
  transition:transform .2s var(--sp-ease), background .2s var(--sp-ease);
}
.sp-story .sp-pin > .sp-storycol > .sp-go:hover{
  transform:translateY(-2px); background:var(--c-cta-hover);
}
/* The steps were the column; now they sit under the header, so they no longer
   need to reserve the full column height. */
.sp-story .sp-pin > .sp-storycol > .sp-steps{ min-height:260px; }
@media(max-width:980px){
  .sp-story .sp-pin > .sp-storycol > .sp-steps{ min-height:220px; }
}

/* ============================================================================
   MOTION — presentation for the React motion components (September 2026)
   ============================================================================
   The prototype's main.js wrote these as inline styles. The components now
   publish only an order index or a scroll progress; timing and mapping live
   here with the rest of the design. Appended as one block, like the design
   review above.
   ========================================================================= */

/* ScrollReveal — entrances stagger by document order, repeating every six. */
[data-reveal],
[data-reveal].on{ transition-delay:calc(var(--reveal-order, 0) * 60ms); }

/* ScrollReveal — chart bars grow from their base, staggered across the page.
   The no-script block shows them at full height. */
[data-bar]{
  transform-origin:bottom;
  transform:scaleY(0);
  transition:transform 900ms cubic-bezier(.16,1,.3,1) calc(var(--bar-order, 0) * 55ms);
}
[data-bar].on{ transform:scaleY(1); }

/* StatementSection — each chip drifts at its own --depth and fades toward the
   band's edges. --stmt-progress is .5 with the band centred in the viewport,
   which is also the resting value without JavaScript. */
.sp-stmt .sp-pchip{
  --stmt-offset:calc(var(--stmt-progress, .5) - .5);
  transform:translateY(calc(var(--stmt-offset) * -340px * var(--depth, 0)));
  opacity:max(0, 1 - max(var(--stmt-offset), -1 * var(--stmt-offset)) * 2.1);
}

/* ============================================================================
   DESIGN REVIEW 2 — Fidan Aliyeva, 20 September 2026 ("Home page.pdf")
   ============================================================================
   Same discipline as Gunel's block above: appended, labelled per item, never
   edited into the prototype lines. Item numbers are the A-numbers in
   docs/todo.md; docs/records/design-reviews.md carries the record of what each one
   asked for and how it was verified.
   ========================================================================= */

/* --- A1 (+ C6). Header links: every underline is lime, the current section
       too. The Solutions button already drew a 2px lime line when open; the
       plain links drew a 1px black one on hover.                           */
nav.desktop a{ border-bottom-width:2px; }
nav.desktop a:hover,
nav.desktop a[aria-current="page"]{ border-bottom-color:var(--c-lime-deep); }
.nav-mega-btn[aria-current="page"]::after{ right:0; }

/* --- A2. One hover treatment across the menu: the wash fill and the same
       lime line, on the module tabs and on the links beside them.        */
.mm-btn:hover,
.mm-btn.is-on,
.mc-head:hover,
.mc-link:hover{ box-shadow:inset 0 -2px 0 var(--c-lime-deep); }

/* --- A3. Room to breathe in the panel ----------------------------------- */
.mega-cols{ gap:24px; }
.mega-mods{ gap:6px; padding-right:16px; }
.mc-link{ padding-top:9px; padding-bottom:9px; }
.mc-head{ margin-bottom:4px; }
.mc-subhead{ margin-top:16px; padding-top:12px; }

/* --- A4. The nested group's heading reads like the other links, not as a
       mono uppercase label.                                              */
.mc-subhead{
  font-family:inherit; font-size:13.5px; font-weight:600;
  letter-spacing:0; text-transform:none; color:var(--c-deep);
}

/* --- A29. The header shows the page through it ------------------------- */
header.site{ background:rgba(255,255,255,.72); }

/* --- A19 + A20. Fidan's colours replace Gunel's #10/#11 --------------------
       Card hover surfaces go to #E2E5D7 everywhere. The icon tile keeps
       #CDD2BA at rest and turns white on hover with a dark glyph. The SAMPLE
       DATA tag stays #CDD2BA: it followed the icon colour, not the surface. */
:root{
  --c-card-hover:  #E2E5D7;
  --c-icon-rest:   #CDD2BA;
  --c-icon-hover:  #FFFFFF;
}
.detail-card .ic,
.blog-card .ic,
.ui-sample, .app-chrome .sample-tag{ background:var(--c-icon-rest); }
.detail-card:hover .ic,
.blog-card:hover .ic{ background:var(--c-icon-hover); }
.detail-card:hover .ic svg,
.blog-card:hover .ic svg{ stroke:var(--c-deep); }

/* --- A10. A hovered module card's border is grey, like the homepage industry
       cards' — the two sat side by side in the review with one black and one
       grey. Applies to the company page's principle cards, which are the same
       component.                                                          */
.mod-card:hover{ border-color:var(--c-grey-lt); }

/* --- A11. On hover the copy is white and the tag reads black on white ---- */
.mod-card:hover .mod-top .tag{
  background:var(--c-white); color:var(--c-deep); border-color:var(--c-white);
}

/* --- A12. The text button's line follows its text: white with white copy on
       a hovered card, black when the button itself is hovered.           */
.btn-underline{ border-bottom-color:currentColor; }

/* --- A13. The lime label on the homepage industry cards survives the hover - */
.ind-card:hover .ind-lbl{ color:var(--c-white); }

/* --- A27. ...and so does the divider above the keyword on /industries/ ---- */
.ind-card:hover .kw{ border-top-color:var(--c-white); }

/* --- A18. A deep-linked capability card is marked quietly, not in yellow -- */
.detail-card:target{ outline:1px solid var(--c-grey); outline-offset:3px; }
.detail-card:target:not(:hover){ background:var(--c-white); }

/* --- A25. A lone last card sits in the middle of its row ------------------ */
.detail-grid > .detail-card:last-child:nth-child(odd){
  grid-column:1 / -1; width:calc(50% - 12px); justify-self:center;
}
@media (max-width:900px){
  .detail-grid > .detail-card:last-child:nth-child(odd){ width:auto; }
}

/* --- A6. The magnetic pull on the demo buttons is gentler and eased over a
       longer curve (the pull strength itself is in CursorRing.tsx).     */
.btn[data-magnet]{
  transition:color 320ms var(--ease), transform 480ms var(--ease-rise), border-color 320ms var(--ease);
}

/* --- A7. Secondary buttons are off-white everywhere ---------------------- */
:root{ --c-secondary:#FBFBF9; }
.sp-feat--grid .sp-go,
.sp-story .sp-pin > .sp-storycol > .sp-go,
#bl-more,
.btn-ghost,
.btn-small{ background:var(--c-secondary); }
.sp-feat--dark .sp-go{ background:var(--c-secondary); color:var(--sp-deep); border-color:var(--c-secondary); }
.sp-feat--dark .sp-go:hover{ background:var(--c-cta-hover); color:var(--sp-deep); border-color:var(--c-cta-hover); }

/* --- A8. Arrows the size of the demo button's ---------------------------- */
.btn-underline > span[aria-hidden="true"],
.ind-go > span,
.hm-alt > span,
.cta-final-alt > span,
.mc-head > span{ font-size:1.3em; line-height:1; }

/* --- A9. The three nodes in the closing CTA are the accent yellow -------- */
.cta-fx-node{ width:7px; height:7px; background:var(--c-radioactive); box-shadow:0 0 0 0 rgba(227,255,88,.6); }
@keyframes cta-pulse-yellow{
  0%{ transform:scale(.7); opacity:.6; box-shadow:0 0 0 0 rgba(227,255,88,.6); }
  45%{ transform:scale(1); opacity:1; }
  100%{ transform:scale(.9); opacity:.55; box-shadow:0 0 0 16px rgba(227,255,88,0); }
}
@media (prefers-reduced-motion: no-preference){
  .cta-fx-node.n1, .cta-fx-node.n2, .cta-fx-node.n3{ animation-name:cta-pulse-yellow; }
}

/* --- A26. Softer motion: a smaller lift on hover, a longer curve, and the
       shadow and border transitioning with everything else.            */
.mod-card, .ind-card{
  transition:background 360ms var(--ease-rise), color 360ms var(--ease-rise),
             border-color 360ms var(--ease-rise), transform 360ms var(--ease-rise),
             box-shadow 360ms var(--ease-rise);
}
.detail-card, .blog-card{
  transition:background 360ms var(--ease-rise), transform 360ms var(--ease-rise),
             box-shadow 360ms var(--ease-rise);
}
@media (prefers-reduced-motion: no-preference){
  .mod-card:hover, .ind-card:hover, .blog-card:hover{ transform:translateY(-4px); }
  .detail-card:hover{ transform:translateY(-2px); }
}

/* --- A21 + A24. On module pages the left column of a two-column band sits
       level with the middle of what it introduces: "How it connects" beside
       its stacked cards, and the extra bands beside their prose.        */
.bench-sec .row-2col--wide,
main section[aria-labelledby] .row-2col--wide{ align-items:center; }

/* --- A23. FAQ: the heading starts level with the first question -------- */
.row-2col--faq{ align-items:start; }

/* --- A16 + A14. The Demand Planning story no longer pins or swaps its
       captions: the three steps read as one column beside the finished mock
       app, in the rhythm of the three bands that follow. The padding is
       symmetric and shorter, so the grid ground shows the same rows above and
       below the content, and the module cards above sit closer.        */
#solutions.sec-pad{ padding-bottom:64px; }
.sp-story--light{ margin-top:0; }
.sp-story.sp-story--static{ height:auto; }
.sp-story.sp-story--static .sp-pin{
  position:static; min-height:0; padding:72px 56px; align-items:center;
}
.sp-story.sp-story--static .sp-pin > .sp-storycol > .sp-steps{
  position:static; min-height:0; display:grid; gap:30px;
}
.sp-story.sp-story--static .sp-step{
  position:static; opacity:1; transform:none; pointer-events:auto; transition:none;
}
.sp-story.sp-story--static .sp-appwrap,
.sp-story.sp-story--static .sp-app{ max-height:none; }
.sp-story.sp-story--static .sp-overlaycard{ opacity:1; transform:none; }
@media (max-width:980px){
  .sp-story.sp-story--static .sp-pin{ padding:56px 22px; }
}
/* A17: the bands alternate sides. The order is decided in HomePage.tsx; this
   only keeps the flipped column widths for the two that moved right. */

/* --- A28. "See more articles" sits under the grid, before the closing CTA,
       and folds the list back as "See less". No arrow.                   */
.bl-more-wrap{ margin:48px auto 0; }

/* --- Core Web Vitals: the hero is painted on arrival --------------------
   Lighthouse (20 September 2026, mobile simulation against staging) put LCP
   at 3–7 s with the hero <h1> as the element: [data-reveal] starts at
   opacity:0 and is revealed by JavaScript after hydration, so the largest
   text on the page did not count as painted until its fade finished. Hero
   elements now start visible and keep only the upward slide; everything
   below the fold still fades in as before.                              */
.page-hero [data-reveal],
.mp-hero [data-reveal],
.bl-hero [data-reveal],
.ct-hero [data-reveal],
.hm-copy [data-reveal],
.author-hero[data-reveal]{ opacity:1; }


/* =============================================================================
   ICONS — 21 September 2026
   -----------------------------------------------------------------------------
   Arrows were characters: "→" and "›". Outfit has no arrow, so every one fell
   back to whatever the visitor's system offered — thin on one machine, heavy
   on the next, and never the same weight as the text beside it. They are now
   Lucide icons (lucide-static 1.47.0, ISC; /assets/icons/).

   Drawn in CSS, not in the markup. All 542 link and button arrows on the site
   are the same thing — a lone "→" in <span aria-hidden="true"> — so the span
   keeps its character and is painted over with the icon as a mask filled with
   currentColor. The page structure does not change, the colour, the hover
   slide and the transitions that already target these spans keep working, and
   a browser without mask support still shows the character.

   .gly is the same treatment for the few places a component adds the span
   itself: the "›" before a nested menu entry or number, and two arrows that
   were bare text.
   ========================================================================== */
@supports ((-webkit-mask-image:url("")) or (mask-image:url(""))){
  .btn > span[aria-hidden="true"],
  .btn-underline > span[aria-hidden="true"],
  .cta-final-alt > span[aria-hidden="true"],
  .hm-alt > span[aria-hidden="true"],
  .mc-head > span[aria-hidden="true"],
  .ind-go > span[aria-hidden="true"],
  .gly{
    display:inline-block; flex:none;
    width:1em; height:1em; font-size:1.2em; line-height:1;
    overflow:hidden; white-space:nowrap; text-indent:110%;
    /* Centre of the box on the label's x-height midline, which is where a
       real arrow glyph sits. `middle` is defined as exactly that, so it
       follows whatever font the label is set in; the first pass used a fixed
       offset and landed on the capital-letter midline, 1.5-2px too high
       beside lowercase text. The hair of lift is for the capitals and
       ascenders a sentence-case label still carries. */
    vertical-align:middle; position:relative; top:-.03em;
    background-color:currentColor;
    -webkit-mask:var(--ico, url("/assets/icons/arrow-right.svg")) center / contain no-repeat;
            mask:var(--ico, url("/assets/icons/arrow-right.svg")) center / contain no-repeat;
  }
  .gly--chev{ --ico:url("/assets/icons/chevron-right.svg"); font-size:1.05em; }

  /* Flex parents ignore vertical-align and centre the box on the line box,
     which in Outfit sits well above the x-height midline. `top`, not a
     transform: several of these spans already slide on hover with one. */
  .btn > span[aria-hidden="true"],
  .btn-underline > span[aria-hidden="true"],
  .mc-head > span[aria-hidden="true"]{ top:.075em; }

  /* "2 → 1" on the homepage: between bold lining figures, so the heavier
     stroke, centred on the digits rather than on lowercase. */
  .gly--stat{ --ico:url("/assets/icons/arrow-right-bold.svg"); }
  .sp-statchip b .gly--stat{ font-size:.84em; margin:0 .22em; top:-.1em; }

  /* The module hero's demo button carries its arrow in a filled circle, so the
     circle keeps the background and the icon goes on a pseudo-element. */
  .hv2-btn > i[aria-hidden="true"]{ font-size:0; }
  /* On the module hero the circle is lime on a lime button — invisible — so
     it only pushed the arrow 22px from the label and left it riding high.
     There the arrow sits beside the label like the homepage's demo button. */
  .mp-hero .hv2-btn{ padding:9px 26px; min-height:56px; gap:14px; }
  .mp-hero .hv2-btn > i[aria-hidden="true"]{ width:20px; height:20px; background:none; position:relative; top:1.5px; }
  .mp-hero .hv2-btn > i[aria-hidden="true"]::before{ width:20px; height:20px; }
  .hv2-btn > i[aria-hidden="true"]::before{
    content:""; width:18px; height:18px; background-color:currentColor;
    -webkit-mask:url("/assets/icons/arrow-right.svg") center / contain no-repeat;
            mask:url("/assets/icons/arrow-right.svg") center / contain no-repeat;
  }

  /* A mask is a background, and forced-colours mode removes backgrounds. */
  @media (forced-colors:active){
    .btn > span[aria-hidden="true"], .btn-underline > span[aria-hidden="true"],
    .cta-final-alt > span[aria-hidden="true"], .hm-alt > span[aria-hidden="true"],
    .mc-head > span[aria-hidden="true"], .ind-go > span[aria-hidden="true"], .gly,
    .hv2-btn > i[aria-hidden="true"]::before{ forced-color-adjust:none; background-color:CanvasText; }
  }
}


/* =============================================================================
   MARKERS AND MENU HOVER — 21 September 2026 (Nihad)
   ========================================================================== */

/* --- The mark before a mono label -------------------------------------------
   It was "▸", a character in `content` that no loaded font has, so it came
   from a system fallback: a different size and height on every machine. Drawn
   as a triangle it was at least consistent, but at 5 by 7 pixels a triangle is
   a smudge, and Nihad asked for something else. It is a short bar now, in the
   accent: crisp at any size because it is axis-aligned, and the same lime line
   the header and the menu use for "this one". Where the label is already in
   the accent (the hero, the stat cards) the bar takes the label's colour.    */
.sp-mlabel::before,
.sp-spec .sp-lb::before,
.sp-field-label::before,
.sp-ipanel .sp-lbl::before,
.sp-ipanel .sp-lm::before,
.sp-proof .sp-see::before,
#sp-home .sp-flagship::before,
.cta-final-eyebrow::before,
.hm-eyebrow::before{
  content:""; display:inline-block;
  width:1.5em; height:2px; border-radius:1px; margin-right:.8em;
  background:var(--c-lime-deep);
  /* on the capitals' midline: `middle` is the x-height midline, so lift it */
  vertical-align:middle; position:relative; top:-.1em;
}
.hm-eyebrow::before, .sp-proof .sp-see::before{ background:currentColor; }
/* Small labels inside the mock screens: a shorter bar, or it crowds the card. */
.sp-spec .sp-lb::before, .sp-field-label::before,
.sp-ipanel .sp-lbl::before, .sp-ipanel .sp-lm::before{ width:1em; margin-right:.6em; }
/* This one carries a word too ("STAT", on its own line), so the bar is a
   background on that line rather than the whole pseudo-element.             */
.sp-scard .sp-k::before{
  content:"STAT"; display:block; white-space:normal;
  padding-left:2.3em;
  background:linear-gradient(currentColor,currentColor) left calc(50% - .02em) / 1.5em 2px no-repeat;
}

/* --- "2 → 1" on the homepage -------------------------------------------------
   A prototype bug, visible since the first build: the chip's label rule is
   `.sp-statchip span`, which also catches the two counters inside <b>, so the
   "2" and the "1" rendered at the label's 10.5px beside a 23px arrow. The
   other chips keep their figure as bare text in <b> and were never affected. */
.sp-statchip b span{ font-size:inherit; letter-spacing:0; text-transform:none; }

/* --- Mega menu hover, second pass -------------------------------------------
   Two things were wrong underneath, both from the prototype. The panel's links
   live inside `nav.desktop`, so its rule for the top-level links —
   `nav.desktop a{ padding:8px 0; border-bottom:… }`, specificity 0,1,2 — has
   always beaten the side padding designed for them (0,1,0): the label sat
   flush against the hover box, and both review blocks' padding fixes never
   took effect. And on hover they picked up the nav's bottom border, which
   follows their rounded corners and reads as a smile under the row; the inset
   box-shadow added for the module tabs did the same.

   Now: the panel's links are scoped out of the top-level rule, rows have room
   at the sides and hug their label, the wash fades in, and the lime line is a
   straight bar that grows from the left under the label, clear of the corners. */
nav.desktop .mega-caps a{ border-bottom:0; }
nav.desktop .mc-head{ padding:9px 16px; width:fit-content; max-width:100%; }
nav.desktop .mc-link{ padding:9px 16px; width:fit-content; max-width:100%; }
nav.desktop .mc-link--sub{ padding-left:28px; }
/* The nested group's heading ("› Bid evaluation") is a link like the rest and
   takes the same hover. It used to carry the group's divider as its own
   border-top, which a hover box would have swallowed, so the divider is its
   own element now (.mc-rule, rendered by MegaMenu before the heading).      */
.mc-rule{ display:block; height:1px; background:var(--c-grey-lt); margin:14px 0 8px; }
nav.desktop .mc-subhead{
  padding:9px 16px; margin-top:0; border-top:0; border-radius:8px;
  width:fit-content; max-width:100%;
}
.mc-subhead:hover{ background:var(--c-wash); }
.mm-btn{ padding:12px 16px; }

.mm-btn:hover, .mm-btn.is-on, .mc-head:hover, .mc-link:hover{ box-shadow:none; }
.mm-btn, .mc-head, .mc-link, .mc-subhead{
  position:relative;
  transition:background-color .24s var(--ease), color .24s var(--ease);
}
.mm-btn::after, .mc-head::after, .mc-link::after, .mc-subhead::after{
  content:""; position:absolute; left:16px; right:16px; bottom:5px;
  height:2px; border-radius:1px; background:var(--c-lime-deep);
  transform:scaleX(0); transform-origin:left center;
  transition:transform .34s var(--ease-rise); pointer-events:none;
}
.mc-link--sub::after{ left:28px; }
.mm-btn:hover::after, .mm-btn.is-on::after,
.mc-head:hover::after, .mc-link:hover::after, .mc-subhead:hover::after{ transform:scaleX(1); }

/* The top-level links changed colour of their line with no transition at all. */
nav.desktop > a{ transition:border-bottom-color .24s var(--ease), color .24s var(--ease); }

@media (prefers-reduced-motion:reduce){
  .mm-btn, .mc-head, .mc-link, .mc-subhead, nav.desktop > a,
  .mm-btn::after, .mc-head::after, .mc-link::after, .mc-subhead::after{ transition:none; }
}


/* =============================================================================
   HEADER ON A PHONE, AND THE HERO — 21 September 2026 (Nihad)
   ========================================================================== */
:root{ --hdr-h:81px; }

/* --- The header was 102px tall on a phone -------------------------------------
   80px of bar, and 21px of nothing under it: the closed menu collapses with
   grid-template-rows:0fr, but its inner box kept 20px of bottom padding and a
   1px top border, and a grid row cannot shrink below its item's padding and
   border. A prototype bug. The padding and the border now exist only while
   the menu is open, and the bar itself is 64px where the hamburger shows.   */
#dmp-mobile-nav .inner{ transition:padding-bottom 360ms var(--ease); }
#dmp-mobile-nav:not(.open) .inner{ padding-bottom:0; border-top-width:0; }
@media (max-width:1080px){
  :root{ --hdr-h:65px; }
  header.site .bar{ height:64px; }
}

/* --- The hamburger ------------------------------------------------------------
   Its bars were 1.5px tall. Box backgrounds snap to device pixels, so a 1.5px
   bar paints as 1px or as 2px depending on where it falls, and the middle one
   came out thicker than its neighbours. 2px bars on whole-pixel offsets, a
   little wider, and a quiet border so the icon reads before its box.        */
.menubtn{ border-color:var(--c-grey-lt); gap:5px; transition:border-color .24s var(--ease); }
.menubtn:hover, .menubtn[aria-expanded="true"]{ border-color:var(--c-deep); }
.menubtn span{ width:20px; height:2px; border-radius:1px; }
.menubtn[aria-expanded="true"] span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
.menubtn[aria-expanded="true"] span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }

/* --- The hero fills what is visible ---------------------------------------------
   It was min(880px, 100dvh) tall under an 81px sticky header, with the dark
   continuing into the next section: on a 1080px screen the copy sat 60px above
   the middle of what looked like the hero, over 290px of nothing; on a 900px
   one it ran under the fold. Now it is exactly the viewport less the header
   (svh, so a phone's URL bar does not make it jump), capped for very tall
   screens, and the copy is centred in what the visitor actually sees.       */
.hero-mosaic{
  min-height:min(1100px, calc(100vh - var(--hdr-h)));
  min-height:min(1100px, calc(100svh - var(--hdr-h)));
}
.hm-copy{ padding-block:clamp(64px, min(10vw, 11vh), 140px); }
#after-hero{ scroll-margin-top:var(--hdr-h); }

/* --- "There is more below" --------------------------------------------------- */
.hm-scroll{
  position:absolute; left:50%; bottom:clamp(20px,3.4vh,40px); z-index:3;
  width:44px; height:44px; margin-left:-22px; border-radius:50%;
  display:grid; place-items:center;
  color:var(--c-ink-inv); border:1px solid rgba(255,255,255,.26);
  background:rgba(18,18,18,.28); -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
  transition:border-color .24s var(--ease), color .24s var(--ease), background-color .24s var(--ease);
  animation:hm-bob 2.6s var(--ease) infinite;
}
.hm-scroll:hover, .hm-scroll:focus-visible{ color:var(--c-radioactive); border-color:var(--c-radioactive); }
.hm-scroll:focus-visible{ outline:2px solid var(--c-radioactive); outline-offset:3px; }
.hm-scroll .gly{ --ico:url("/assets/icons/arrow-down.svg"); font-size:20px; top:0; vertical-align:top; }
@keyframes hm-bob{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(7px); } }
/* Too short a window and it would sit on the caption above it. */
@media (max-height:800px){ .hm-scroll{ display:none; } }
@media (prefers-reduced-motion:reduce){ .hm-scroll{ animation:none; } }


/* =============================================================================
   OUTBOUND LINKS — 21 September 2026 (Nihad)
   -----------------------------------------------------------------------------
   Every link that leaves the site opens in a new tab (frontend/lib/links.ts).
   A new tab should not be a surprise to someone who cannot see it open, so the
   link says so to assistive technology: generated content is part of a link's
   accessible name, and this is clipped to nothing on screen. No selector on
   the site already used ::after on an outbound link.                         */
a[target="_blank"]::after{
  content:" (opens in a new tab)";
  position:absolute; width:1px; height:1px; margin:-1px; padding:0;
  overflow:hidden; clip-path:inset(50%); white-space:nowrap; border:0;
}


/* =============================================================================
   FOUR MODULES — 21 September 2026 (Nihad)
   -----------------------------------------------------------------------------
   "How it connects" lists all four modules on every module page, this page's
   own included, so the numbers always run 01 to 04 and the heading's count
   matches what is under it. The page's own card is marked rather than hidden. */
.bench-sec .mod-card[aria-current="page"]{
  border-color:var(--c-lime-deep);
  box-shadow:inset 3px 0 0 var(--c-lime-deep);
}
.bench-sec .mod-card[aria-current="page"] .tag{
  background:var(--c-radioactive); border-color:var(--c-deep); color:var(--c-deep);
}


/* =============================================================================
   HEROES THAT FIT THE SCREEN — 21 September 2026 (Nihad)
   -----------------------------------------------------------------------------
   "In some displays too big, while in some the white part is visible." The
   page headings were sized from the window's width alone — 96px on anything
   1500px wide — so on a 1080p laptop, where the browser leaves about 850px of
   height, a module page's five- or six-line heading pushed its own button 100
   to 330px under the fold. And the module hero was as tall as its content, so
   on a tall display it ended early and the white section showed beneath it.

   Headings now also answer to the window's height, everywhere. The module hero
   (the dark one with the app screen) is exactly what is visible under the
   header, like the homepage's: its breadcrumb stays at the top and the copy and
   the screen are centred in the rest. On a phone the content is taller than
   the screen, as it should be, and nothing here changes that.               */
:root{ --h1:clamp(42px, min(6.4vw, 9.4vh), 96px); }

.page-hero--v2{
  --h1:clamp(40px, min(5.4vw, 7.8vh), 88px);
  padding-top:clamp(36px, 6vh, 96px); padding-bottom:clamp(32px, 5.5vh, 72px);
}
.page-hero--v2 .lede{ margin-top:clamp(14px, 2.4vh, 24px); }
@media (min-width:1081px){
  .page-hero--v2{
    display:flex;
    min-height:calc(100vh - var(--hdr-h));
    min-height:calc(100svh - var(--hdr-h));
  }
  .page-hero--v2 > .wrap{ display:flex; flex-direction:column; width:100%; }
  .page-hero--v2 .ph-grid{ margin-block:auto; padding-block:clamp(8px, 2vh, 24px); }
}


/* =============================================================================
   LEGAL LABELS — 21 September 2026 (Nihad)
   The three legal entries in the footer are labels until counsel signs the
   texts off (lib/navigation.ts, FOOTER_LEGAL). Quieter than a link, no pointer. */
.foot-legal-off{ color:var(--c-grey-lt); opacity:.5; cursor:default; }

