
:root{
  --canvas:#FBFCFE; --surface:#FFFFFF; --sunk:#F2F6FD;
  --deep:#000F33; --deep2:#001861; --deep3:#012077;
  --navy:#00247C; --blue:#0057F6; --blue-br:#3D8BFF; --glow:#7FB0FF; --green:#0F8A5C;
  --tint:#E7F0FF; --ink:#08101F; --body:#3A4256; --muted:#6E7891; --rule:#E2E8F5;
  --on-deep:#EAF1FF; --on-deep-mut:#9FB4DC;
  --oct:polygon(50% 0%,85.36% 14.64%,100% 50%,85.36% 85.36%,50% 100%,14.64% 85.36%,0% 50%,14.64% 14.64%);
  --markmask:url("../media/oct.png");
  --mk:url("../media/oct.png");
  --col:min(1160px,calc(100vw - 40px));
  --sh:0 1px 2px rgba(6,20,60,.05),0 18px 46px -18px rgba(6,20,60,.22);
  --shx:0 30px 90px -30px rgba(0,40,140,.55);
  /* which wordmark the solid header shows, and the light door's surface: both flip
     with the theme, so they are tokens rather than duplicated rule blocks */
  --lt-solid:0; --dk-solid:1;
  --doorA:linear-gradient(150deg,#F2F7FF,#E6EFFE); --doorA-bd:#D5E3FC;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --canvas:#05080F; --surface:#0D1421; --sunk:#090F1B;
  --navy:#9DB6FF; --blue:#7BA3FF; --tint:#12203A; --green:#3FBF8B;
  --ink:#EEF3FC; --body:#BEC7DA; --muted:#8590A6; --rule:#1C2536;
  --sh:0 1px 2px rgba(0,0,0,.5),0 18px 46px -18px rgba(0,0,0,.8);
  --lt-solid:1; --dk-solid:0;
  --doorA:linear-gradient(150deg,#101B2F,#0B1425); --doorA-bd:#1E2A42;
}}
:root[data-theme="dark"]{
  --canvas:#05080F; --surface:#0D1421; --sunk:#090F1B;
  --navy:#9DB6FF; --blue:#7BA3FF; --tint:#12203A; --green:#3FBF8B;
  --ink:#EEF3FC; --body:#BEC7DA; --muted:#8590A6; --rule:#1C2536;
  --sh:0 1px 2px rgba(0,0,0,.5),0 18px 46px -18px rgba(0,0,0,.8);
  --lt-solid:1; --dk-solid:0;
  --doorA:linear-gradient(150deg,#101B2F,#0B1425); --doorA-bd:#1E2A42;
}
*{box-sizing:border-box}

body{margin:0;background:var(--canvas);color:var(--body);
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.65;
  -webkit-font-smoothing:antialiased;overflow-x:hidden}
img,video{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
h1,h2,h3{font-family:Rubik,"Helvetica Neue",Arial,sans-serif;color:var(--ink);margin:0;
  line-height:1.04;letter-spacing:-.025em;text-wrap:balance}
h1{font-weight:600;font-size:clamp(33px,5.2vw,66px);text-transform:uppercase;letter-spacing:-.03em}
h2{font-weight:600;font-size:clamp(27px,4vw,46px);text-transform:uppercase}
h3{font-weight:500;font-size:17px;letter-spacing:-.005em;text-transform:none}
p{margin:0}
.wrap{width:var(--col);margin:0 auto}
.mono{font-family:"IBM Plex Mono",ui-monospace,monospace}
.eyebrow{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--muted)}
.b{color:var(--blue)} .bl{color:var(--glow)}
.oct{display:inline-block;flex:none;background:currentColor;
  -webkit-mask:var(--mk) center/contain no-repeat;mask:var(--mk) center/contain no-repeat}
.sub{font-size:clamp(17px,1.5vw,20px);max-width:56ch;margin-top:18px}
.support{margin-top:15px;max-width:62ch;color:var(--muted);font-size:15.5px}
.btn{display:inline-flex;align-items:center;gap:10px;background:linear-gradient(150deg,#0F63FF,#0043D6);
  color:#fff;font-weight:600;font-size:14.5px;padding:14px 28px;border-radius:11px;border:0;cursor:pointer;
  font-family:inherit;box-shadow:0 1px 0 rgba(255,255,255,.22) inset,0 10px 26px -12px rgba(0,60,200,.9);
  transition:box-shadow .22s,transform .22s,filter .22s}
.btn:hover{filter:brightness(1.08);transform:translateY(-2px);
  box-shadow:0 1px 0 rgba(255,255,255,.28) inset,0 16px 34px -12px rgba(0,60,200,1)}
.btn::before{content:"";width:9px;height:9px;background:currentColor;flex:none;
  -webkit-mask:var(--mk) center/contain no-repeat;mask:var(--mk) center/contain no-repeat;opacity:.85}
.btn.sq{padding:11px 20px;font-size:13.5px}
.btn.ghost{background:rgba(255,255,255,.07);color:var(--on-deep);border:1.5px solid rgba(255,255,255,.3);
  border-radius:11px;padding:12.5px 24px;box-shadow:none}
.btn.ghost::before{opacity:.55}
.btn.ghost:hover{background:rgba(255,255,255,.13)}
.btn.outline{background:transparent;color:var(--blue);border:1.5px solid var(--blue);
  clip-path:none;border-radius:10px;padding:12.5px 24px}

/* ribbon + header */
.ribbon{background:#000C28;color:#8FA9DF;font-family:"IBM Plex Mono",monospace;font-size:10.5px;
  letter-spacing:.14em;text-transform:uppercase;text-align:center;padding:8px 16px;position:fixed;top:0;left:0;right:0;z-index:55}
header.site{position:fixed;top:var(--rib,30px);left:0;right:0;z-index:50;transition:background .3s,box-shadow .3s,border-color .3s;
  border-bottom:1px solid transparent}
header.site.solid{background:color-mix(in srgb,var(--canvas) 92%,transparent);
  backdrop-filter:blur(14px);border-bottom-color:var(--rule)}
.hrow{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 0}
.brand{position:relative;height:30px;flex:none}
.brand img{height:30px;width:auto;transition:opacity .3s}
.brand .dk{position:absolute;inset:0;opacity:0}
header.solid .brand .lt{opacity:var(--lt-solid)} header.solid .brand .dk{opacity:var(--dk-solid)}
nav.main{display:flex;gap:28px;font-size:14px;font-weight:500;color:rgba(255,255,255,.82)}
header.solid nav.main{color:var(--body)}
nav.main a{position:relative;padding:4px 0}
nav.main a::after{content:"";position:absolute;left:0;right:100%;bottom:0;height:1.5px;
  background:var(--blue-br);transition:right .28s ease}
nav.main a:hover::after{right:0}
@media(max-width:900px){nav.main{display:none}}

/* ===== HERO ===== */
.hero{position:relative;background:var(--deep);color:var(--on-deep);isolation:isolate;overflow:hidden;
  padding:calc(var(--rib,30px) + 62px + 48px) 0 0}
/* three of our own installations, butted together and cross-faded at the seams so they
   read as one continuous scene rather than a pasted picture */
.hero-scene{position:absolute;inset:0;z-index:0;overflow:hidden}
.hero-scene img{position:absolute;top:0;height:100%;object-fit:cover;
  filter:saturate(.62) contrast(1.05) brightness(.86);opacity:.72}
.hs-a{left:0;width:46%;object-position:50% 40%;
  -webkit-mask-image:linear-gradient(90deg,#000 50%,transparent 100%);
          mask-image:linear-gradient(90deg,#000 50%,transparent 100%)}
.hs-b{left:25%;width:52%;object-position:52% 42%;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 28%,#000 68%,transparent 100%);
          mask-image:linear-gradient(90deg,transparent 0,#000 28%,#000 68%,transparent 100%)}
.hs-c{right:0;width:46%;object-position:50% 45%;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 44%);
          mask-image:linear-gradient(90deg,transparent 0,#000 44%)}
.hero-scene::after{content:"";position:absolute;inset:0;background:
  radial-gradient(72% 62% at 16% 0%,rgba(0,52,168,.46),transparent 66%),
  radial-gradient(50% 44% at 96% 24%,rgba(70,130,255,.20),transparent 72%),
  linear-gradient(100deg,rgba(0,10,38,.93) 0%,rgba(0,11,42,.78) 34%,rgba(0,12,45,.42) 68%,rgba(0,12,45,.30) 100%),
  linear-gradient(180deg,rgba(0,11,40,.30) 0%,rgba(0,12,45,.52) 46%,var(--deep) 94%)}
/* the same dot field as the canvas, laid over the picture so the seams sit under one light */
.hero-scan{position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.17;mix-blend-mode:screen;
  background-image:radial-gradient(rgba(140,185,255,.9) .9px,transparent 1.3px);background-size:16px 16px;
  animation:scandrift 24s linear infinite}
@keyframes scandrift{to{background-position:0 -192px}}
#leds{position:absolute;inset:0;z-index:2;width:100%;height:100%;opacity:.95}
.hero-glow{position:absolute;inset:0;z-index:3;pointer-events:none;background:
  radial-gradient(44% 38% at 12% 6%,rgba(0,87,246,.30),transparent 70%),
  radial-gradient(36% 32% at 90% 20%,rgba(127,176,255,.18),transparent 72%),
  radial-gradient(68% 44% at 52% 106%,rgba(0,87,246,.16),transparent 72%);
  animation:bloom 15s ease-in-out infinite alternate}
@keyframes bloom{from{opacity:.66;transform:scale(1)}to{opacity:1;transform:scale(1.06)}}
.hero-in{position:relative;z-index:4;display:grid;grid-template-columns:1.14fr .86fr;
  gap:clamp(28px,4.6vw,64px);align-items:center;padding-bottom:clamp(40px,5vw,64px)}
@media(max-width:980px){.hero-in{grid-template-columns:1fr;gap:44px}}
.chips{display:flex;gap:9px;flex-wrap:wrap;margin:0 0 26px;padding:0;list-style:none}
.chips li{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.14em;
  color:var(--glow);border:1px solid rgba(127,176,255,.34);border-radius:999px;padding:6px 14px;
  background:rgba(0,87,246,.12);box-shadow:inset 0 0 20px -10px rgba(127,176,255,.8)}
/* the name, not a slogan: the wordmark at hero scale, lit */
.markwrap{position:relative;display:block;width:min(660px,94%);margin:2px 0 6px;
  opacity:0;transform:translateY(26px);animation:wrise 1s cubic-bezier(.2,.7,.3,1) .08s forwards}
.heromark{display:block;width:100%;
  filter:drop-shadow(0 0 52px rgba(127,176,255,.5)) drop-shadow(0 14px 44px rgba(0,36,124,.65));
  animation:markglow 7s ease-in-out infinite alternate}
@keyframes markglow{
  from{filter:drop-shadow(0 0 34px rgba(127,176,255,.34)) drop-shadow(0 14px 44px rgba(0,36,124,.6))}
  to{filter:drop-shadow(0 0 66px rgba(127,176,255,.62)) drop-shadow(0 14px 44px rgba(0,36,124,.7))}}
/* a light sweeps across the letterforms, masked to the artwork itself */
.markwrap::after{content:"";position:absolute;inset:0;pointer-events:none;
  -webkit-mask:var(--markmask) left center/contain no-repeat;
          mask:var(--markmask) left center/contain no-repeat;
  background:linear-gradient(104deg,transparent 38%,rgba(255,255,255,.9) 50%,transparent 62%);
  background-size:260% 100%;background-repeat:no-repeat;
  animation:sheen 8s cubic-bezier(.5,0,.5,1) 1.4s infinite}
@keyframes sheen{0%,58%{background-position:190% 0}100%{background-position:-90% 0}}
@keyframes wrise{to{opacity:1;transform:none}}
.hero .lede{color:var(--on-deep-mut);margin-top:22px;font-size:clamp(17px,1.6vw,20px);max-width:52ch}
.hero-cta{display:flex;gap:13px;flex-wrap:wrap;margin-top:34px}
.stage{position:relative}
.stage .card{border-radius:14px;overflow:hidden;border:1px solid rgba(127,176,255,.24);
  box-shadow:var(--shx);background:#0C1220;transform:perspective(1400px) rotateY(-7deg) rotateX(2deg);
  transition:transform .6s cubic-bezier(.2,.7,.3,1)}
.stage:hover .card{transform:perspective(1400px) rotateY(-3deg) rotateX(1deg) translateY(-4px)}
.stage .bar{display:flex;align-items:center;gap:8px;padding:10px 13px;background:#141A26;
  border-bottom:1px solid rgba(255,255,255,.07)}
.stage .bar i{width:9px;height:9px;border-radius:50%;background:#39404E;display:block}
.stage .live{margin-left:auto;font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.16em;
  color:#7BE3B0;display:flex;align-items:center;gap:6px}
.stage .live .live-dot{width:6px;height:6px;border-radius:50%;background:#3BD98A;display:block;
  box-shadow:0 0 9px #3BD98A;animation:pulse 2.2s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}
.totem{position:absolute;right:-16px;bottom:-52px;width:31%;max-width:190px;border-radius:12px;
  overflow:hidden;border:1px solid rgba(127,176,255,.3);box-shadow:var(--shx);
  animation:float 9s ease-in-out infinite alternate}
@keyframes float{from{transform:translateY(-8px)}to{transform:translateY(8px)}}
@media(max-width:980px){.totem{display:none}}
.hstats{position:relative;z-index:4;display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));
  gap:1px;background:rgba(255,255,255,.13);border-top:1px solid rgba(255,255,255,.13)}
.hstats div{background:var(--deep);padding:24px 22px}
.hstats b{display:block;font-family:Rubik,sans-serif;font-weight:600;font-size:30px;color:var(--glow);
  line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.hstats span{display:block;margin-top:9px;font-family:"IBM Plex Mono",monospace;font-size:10px;
  letter-spacing:.15em;text-transform:uppercase;color:var(--on-deep-mut)}

/* marquee */
.marq{background:var(--deep);padding:0 0 34px;overflow:hidden;position:relative}
.marq::before,.marq::after{content:"";position:absolute;top:0;bottom:0;width:110px;z-index:2;pointer-events:none}
.marq::before{left:0;background:linear-gradient(90deg,var(--deep),transparent)}
.marq::after{right:0;background:linear-gradient(270deg,var(--deep),transparent)}
.marq .lbl{width:var(--col);margin:0 auto 18px;color:var(--on-deep-mut)}
.track{display:flex;gap:14px;width:max-content;animation:slide 46s linear infinite}
.marq:hover .track{animation-play-state:paused}
@keyframes slide{to{transform:translateX(-50%)}}
.track img{height:190px;width:auto;border-radius:10px;opacity:.86;
  border:1px solid rgba(255,255,255,.1);transition:opacity .3s,transform .3s}
.track img:hover{opacity:1;transform:translateY(-4px)}

/* sections */
section{padding:clamp(64px,7vw,102px) 0}
.shead{display:flex;align-items:center;gap:11px;margin-bottom:14px}
.shead .oct{width:15px;height:15px;color:var(--blue)}
.dark{background:linear-gradient(150deg,var(--deep) 0%,var(--deep2) 58%,var(--deep3) 100%);
  color:var(--on-deep);position:relative;overflow:hidden}
.dark h2,.dark h3{color:#fff}
.dark .eyebrow{color:var(--on-deep-mut)} .dark .shead .oct{color:var(--glow)}
.dark .support{color:var(--on-deep-mut)}
.dark::before{content:"";position:absolute;inset:0;pointer-events:none;background:
  radial-gradient(40% 46% at 88% 8%,rgba(127,176,255,.16),transparent 70%),
  radial-gradient(44% 40% at 4% 96%,rgba(0,87,246,.24),transparent 70%)}
.dark::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.09;
  background-image:radial-gradient(rgba(140,185,255,.9) 1px,transparent 1.4px);background-size:19px 19px;
  animation:scandrift 30s linear infinite}
.dark > *{position:relative;z-index:1}

.split{display:grid;gap:clamp(30px,4.4vw,60px);grid-template-columns:repeat(auto-fit,minmax(330px,1fr));
  align-items:center}
.shot{border-radius:14px;overflow:hidden;border:1px solid var(--rule);box-shadow:var(--sh)}
.dark .shot{border-color:rgba(127,176,255,.22);box-shadow:var(--shx)}

/* doors */
.doors{display:grid;gap:18px;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));margin-top:34px}
.door{position:relative;border-radius:20px;padding:36px 32px;display:flex;flex-direction:column;gap:14px;
  overflow:hidden;transition:transform .3s,box-shadow .3s}
.door:hover{transform:translateY(-4px);box-shadow:var(--sh)}
.door.a{background:var(--doorA);border:1px solid var(--doorA-bd)}
.door.b{background:linear-gradient(150deg,var(--deep2),var(--deep3));color:var(--on-deep-mut);
  border:1px solid rgba(127,176,255,.2)}
.door.b h3{color:#fff}
.door .oct{width:44px;height:44px}
.door.a .oct{color:var(--blue)} .door.b .oct{color:var(--glow)}
.door h3{font-family:Rubik,sans-serif;font-weight:600;font-size:22px;text-transform:uppercase;letter-spacing:-.01em}
.door p{font-size:15px}
.door .go{margin-top:auto;padding-top:6px;font-weight:600;font-size:14px}
.door.a .go{color:var(--blue)} .door.b .go{color:var(--glow)}

/* features */
.feats{display:grid;gap:2px;grid-template-columns:repeat(auto-fit,minmax(298px,1fr));
  background:var(--rule);border:1px solid var(--rule);border-radius:20px;overflow:hidden;margin-top:38px}
.feat{background:var(--surface);padding:30px 28px;display:flex;gap:16px;align-items:flex-start;
  transition:background .25s}
.feat:hover{background:var(--tint)}
.hold{width:48px;height:48px;flex:none;display:grid;place-items:center;background:var(--tint);clip-path:var(--oct)}
.feat:hover .hold{background:var(--blue)}
.hold svg{width:22px;height:22px;stroke:var(--blue);fill:none;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;transition:stroke .25s}
.feat:hover .hold svg{stroke:#fff}
.feat h3{margin-bottom:5px}
.feat p{font-size:14.5px;color:var(--muted);line-height:1.55}

/* dual layer */
.demo{display:grid;gap:clamp(28px,4vw,54px);grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  align-items:center;margin-top:34px}
.screen{background:#080D18;border:10px solid #131A29;border-radius:14px;aspect-ratio:16/10;
  position:relative;overflow:hidden;box-shadow:var(--shx)}
.layer{position:absolute;inset:0;transition:opacity .45s,transform .45s}
.pres{background:
    radial-gradient(120% 90% at 88% 12%,rgba(255,255,255,.22),transparent 58%),
    repeating-linear-gradient(115deg,rgba(255,255,255,.05) 0 2px,transparent 2px 9px),
    linear-gradient(140deg,#001861,#0057F6 58%,#3D8BFF);
  display:flex;flex-direction:column;justify-content:center;padding:8%;color:#fff}
.pres .k{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.2em;opacity:.8}
.pres .h{font-family:Rubik,sans-serif;font-weight:600;font-size:clamp(19px,3.2vw,32px);
  text-transform:uppercase;line-height:1.04;margin-top:8px;letter-spacing:-.025em}
.pres .s{margin-top:10px;font-size:12.5px;opacity:.85;max-width:26ch}
.touch{position:absolute;right:13px;bottom:13px;width:38px;height:38px;background:rgba(255,255,255,.2);
  clip-path:var(--oct);display:grid;place-items:center;border:0;cursor:pointer;
  animation:tap 2.6s ease-in-out infinite}
@keyframes tap{0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}
.touch svg{width:17px;height:17px;stroke:#fff;fill:none;stroke-width:1.8}
.app{background:#0A1120;padding:5%;display:grid;grid-template-columns:repeat(3,1fr);gap:3.6%;
  align-content:center;opacity:0;transform:translateY(10px);pointer-events:none}
.tile{background:#141F35;border:1px solid #1E2C48;border-radius:10px;aspect-ratio:1;display:flex;
  flex-direction:column;align-items:center;justify-content:center;gap:8px;color:#9FB6E8;font-size:10.5px;
  text-align:center;padding:6px}
.tile .oct{width:21px;height:21px;color:var(--blue-br)}
.screen.on .app{opacity:1;transform:none;pointer-events:auto}
.screen.on .pres{opacity:0;transform:scale(1.03)}
.toggles{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap}
.tog{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  padding:10px 18px;border-radius:30px;border:1.5px solid rgba(255,255,255,.2);
  background:rgba(255,255,255,.05);color:var(--on-deep-mut);cursor:pointer;font-family:inherit}
.tog[aria-pressed="true"]{border-color:var(--glow);color:#fff;background:rgba(0,87,246,.28)}
.proof{display:grid;grid-template-columns:auto 1fr;gap:26px;align-items:center;margin-top:44px;
  border-top:1px solid rgba(255,255,255,.14);padding-top:34px}
@media(max-width:700px){.proof{grid-template-columns:1fr}}
.proof video{width:210px;border-radius:12px;border:1px solid rgba(127,176,255,.28);box-shadow:var(--shx)}

/* verticals */
.verts{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(228px,1fr));margin-top:38px}
.vert{border-radius:16px;overflow:hidden;background:var(--surface);border:1px solid var(--rule);
  transition:transform .3s,box-shadow .3s}
.vert:hover{transform:translateY(-4px);box-shadow:var(--sh)}
.vert .ph{overflow:hidden;aspect-ratio:4/3;position:relative}
.vert img{width:100%;height:100%;object-fit:cover;transition:transform .6s}
.vert:hover img{transform:scale(1.07)}
.vert .cap{padding:18px 20px 22px}
.vert h3{font-family:Rubik,sans-serif;font-weight:600;font-size:15.5px;text-transform:uppercase}
.vert p{font-size:13.5px;color:var(--muted);margin-top:6px;line-height:1.5}

/* partner */
.roles{display:grid;gap:18px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));margin-top:36px}
.role{border-radius:20px;padding:30px 28px;background:var(--surface);border:1px solid var(--rule)}
.role.you{border-top:3px solid var(--blue)} .role.us{border-top:3px solid var(--green)}
.role .tag{display:inline-block;font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:#fff;padding:7px 16px;border-radius:30px}
.role.you .tag{background:var(--blue)} .role.us .tag{background:var(--green)}
.role ul{list-style:none;margin:20px 0 0;padding:0}
.role li{padding:13px 0;border-top:1px solid var(--rule);font-size:14.5px}
.role li b{display:block;color:var(--ink);font-family:Rubik,sans-serif;font-weight:500;font-size:14.5px}
.role li span{color:var(--muted);font-size:13.5px;line-height:1.5}
.wl{display:grid;gap:2px;grid-template-columns:repeat(auto-fit,minmax(164px,1fr));background:var(--rule);
  border:1px solid var(--rule);border-radius:16px;overflow:hidden;margin-top:20px}
.wl div{background:var(--surface);padding:20px 18px}
.wl b{display:block;font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--blue);margin-bottom:7px}
.wl span{font-size:13.5px;color:var(--body);line-height:1.5}

/* contact */
.contact{display:grid;gap:38px;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));margin-top:34px}
.dl{display:grid;grid-template-columns:112px 1fr;gap:2px 20px;font-size:15px}
.dl dt{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--on-deep-mut);padding-top:6px}
.dl dd{margin:0;color:#fff;padding-top:3px}
.lead{background:rgba(255,255,255,.05);border:1px solid rgba(127,176,255,.2);border-radius:18px;
  padding:26px;display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap}
.lead img{width:84px;height:84px;border-radius:12px;object-fit:cover;flex:none}
.lead h3{font-family:Rubik,sans-serif;font-weight:600;font-size:15.5px;text-transform:uppercase;color:var(--on-deep)}
.lead p{font-size:14px;color:var(--on-deep-mut);margin-top:9px}

footer.site{border-top:1px solid rgba(255,255,255,.12);background:#000B22;padding:44px 0 40px;color:#8FA3CC}
.frow{display:flex;justify-content:space-between;gap:26px;flex-wrap:wrap;align-items:flex-start}
.fbrand{display:flex;flex-direction:column;align-items:flex-start;gap:14px}
.fbrand img{height:30px;width:auto}
.fnote{font-size:13px;max-width:44ch;line-height:1.6}

/* reveal: transform only, text always readable */
.rv{transform:translateY(16px);transition:transform .7s cubic-bezier(.2,.75,.3,1)}
.rv.in{transform:none}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .rv{transform:none}
  .hero h1 .w{opacity:1;transform:none}
}

/* ============ navigation: mega menu ============ */
.navwrap{position:relative}
nav.main .drop{background:none;border:0;font:inherit;color:inherit;cursor:pointer;padding:4px 0;
  display:inline-flex;align-items:center;gap:6px}
nav.main .drop svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2.2;
  transition:transform .25s}
nav.main .drop[aria-expanded="true"] svg{transform:rotate(180deg)}
.mega{position:absolute;top:calc(100% + 14px);left:50%;transform:translateX(-50%) translateY(-6px);
  width:min(940px,calc(100vw - 40px));background:var(--surface);border:1px solid var(--rule);
  border-radius:18px;box-shadow:0 30px 70px -26px rgba(6,20,60,.4);padding:22px;z-index:60;
  opacity:0;visibility:hidden;transition:opacity .22s,transform .22s,visibility .22s}
.mega[data-open="true"]{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
.megagrid{display:grid;gap:6px;grid-template-columns:repeat(auto-fit,minmax(258px,1fr))}
/* scoped to .megagrid on purpose: `.mega a:hover{background:...}` (0,2,1) outranks
   `.btn`/`.btn:hover` (0,1,0 / 0,2,0), so it repainted the mega footer's Request-a-demo
   button pale blue and dropped its gradient -- white text on near-white, i.e. the button
   vanished under the cursor. Never style bare `a` inside a component that also holds buttons. */
.mega .megagrid a{display:flex;gap:13px;align-items:flex-start;padding:13px 14px;border-radius:12px;
  transition:background .18s}
.mega .megagrid a:hover{background:var(--tint)}
.mega .hold{width:38px;height:38px}
.mega .hold svg{width:18px;height:18px}
.mega .mtx{display:block;min-width:0}
.mega .mtx b,.mega .mtx .nav-title{display:block;color:var(--ink);font-family:Rubik,sans-serif;font-weight:500;font-size:14px;
  line-height:1.3}
.mega .mtx span{font-size:12.5px;color:var(--muted);line-height:1.45;display:block;margin-top:3px}
.megafoot{margin-top:14px;padding-top:14px;border-top:1px solid var(--rule);display:flex;
  justify-content:space-between;gap:14px;flex-wrap:wrap;align-items:center}
.megafoot p{font-size:13px;color:var(--muted);max-width:52ch}
.scrim{position:fixed;inset:0;z-index:45;background:transparent;display:none}
.scrim[data-open="true"]{display:block}

/* mobile drawer */
.burger{display:none;background:none;border:0;cursor:pointer;padding:8px;color:inherit}
.burger span{display:block;width:22px;height:2px;background:currentColor;border-radius:2px}
.burger span + span{margin-top:5px}
@media(max-width:900px){
  .burger{display:block}
  .drawer{position:fixed;inset:0;z-index:70;background:var(--canvas);padding:22px;overflow:auto;
    display:none;flex-direction:column;gap:6px}
  .drawer[data-open="true"]{display:flex}
  .drawer .grp{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.16em;
    text-transform:uppercase;color:var(--muted);margin:18px 0 4px}
  .drawer a{padding:11px 4px;font-size:16px;color:var(--ink);border-bottom:1px solid var(--rule)}
  .drawer .close{align-self:flex-end;background:none;border:0;font-size:26px;color:var(--ink);cursor:pointer}
}
@media(min-width:901px){.drawer{display:none!important}}

/* ============ routed views ============ */
/* the generic `section` rule must not apply to the view wrappers themselves,
   or every page opens with a band of page background above its hero */
[data-view]{display:none;padding:0}
[data-view].on{display:block;animation:viewin .5s cubic-bezier(.2,.7,.3,1)}
@keyframes viewin{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}

/* ============ sub-page hero ============ */
.phero{position:relative;overflow:hidden;
  background:linear-gradient(150deg,var(--deep) 0%,var(--deep2) 62%,var(--deep3) 100%);
  color:var(--on-deep);padding:calc(var(--rib,30px) + 62px + 54px) 0 clamp(46px,5vw,70px)}
.phero::before{content:"";position:absolute;inset:0;pointer-events:none;background:
  radial-gradient(46% 52% at 8% 0%,rgba(0,87,246,.34),transparent 68%),
  radial-gradient(40% 40% at 96% 20%,rgba(127,176,255,.16),transparent 72%)}
.phero::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.10;
  background-image:radial-gradient(rgba(140,185,255,.9) 1px,transparent 1.4px);background-size:19px 19px;
  animation:scandrift 30s linear infinite}
.phero .wrap{position:relative;z-index:1;display:grid;gap:clamp(28px,4vw,56px);
  grid-template-columns:1.04fr .96fr;align-items:center}
@media(max-width:940px){.phero .wrap{grid-template-columns:1fr}}
.phero h1{color:#fff;font-size:clamp(30px,4.4vw,54px)}
.phero .lede{color:var(--on-deep-mut);margin-top:20px;font-size:clamp(16.5px,1.5vw,19px);max-width:52ch}
.crumb{display:flex;align-items:center;gap:9px;margin-bottom:16px}
.crumb .oct{width:13px;height:13px;color:var(--glow)}
.pshot{border-radius:14px;overflow:hidden;border:1px solid rgba(127,176,255,.26);
  box-shadow:var(--shx);background:#0C1220}
.pshot img{width:100%;display:block}
.pshot.frame{padding:11px 12px 0;background:#141A26}
.pshot .bar{display:flex;gap:7px;padding:0 2px 10px}
.pshot .bar i{width:9px;height:9px;border-radius:50%;background:#39404E;display:block}

/* ============ sub-page body ============ */
.pbody{padding:clamp(56px,6vw,86px) 0}
.plist{display:grid;gap:2px;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));
  background:var(--rule);border:1px solid var(--rule);border-radius:20px;overflow:hidden}
.plist .feat{background:var(--surface)}
.pquote{font-family:Rubik,sans-serif;font-weight:500;font-size:clamp(19px,2.3vw,26px);line-height:1.34;
  color:var(--ink);border-left:3px solid var(--blue);padding:4px 0 4px 22px;margin:40px 0 0;max-width:44ch;
  letter-spacing:-.012em}
.checks{list-style:none;margin:26px 0 0;padding:0;display:grid;gap:11px}
.checks li{display:flex;gap:11px;align-items:flex-start;font-size:15px}
.checks .oct{width:17px;height:17px;color:var(--blue);flex:none;margin-top:4px}
.phones{display:flex;gap:16px;flex-wrap:wrap;justify-content:center}
.phones img{width:min(220px,29vw);border-radius:16px;border:1px solid var(--rule);box-shadow:var(--sh)}
.dark .phones img{border-color:rgba(127,176,255,.24);box-shadow:var(--shx)}

/* data-flow diagram */
.flow{display:grid;gap:14px;grid-template-columns:1fr auto 1fr auto 1fr;align-items:center;margin-top:36px}
@media(max-width:940px){.flow{grid-template-columns:1fr;gap:12px}.flow .arrow{transform:rotate(90deg)}}
.flowcol{display:grid;gap:8px}
.fcard{background:var(--surface);border:1px solid var(--rule);border-radius:13px;padding:13px 15px;
  display:flex;gap:11px;align-items:center;transition:transform .25s,border-color .25s}
.fcard:hover{transform:translateY(-2px);border-color:var(--blue)}
.fcard .ftx{min-width:0}
.fcard .ftx b{font-family:Rubik,sans-serif;font-weight:500;font-size:13.5px;color:var(--ink);display:block}
.fcard .ftx span{font-size:12px;color:var(--muted);display:block;line-height:1.4}
.fcard .hold{width:34px;height:34px}.fcard .hold svg{width:16px;height:16px}
.hub{background:linear-gradient(150deg,var(--deep2),var(--deep3));border-radius:18px;padding:26px 22px;
  text-align:center;color:#fff;box-shadow:var(--shx)}
.hub .oct{width:44px;height:44px;color:#fff;margin:0 auto 12px;display:block}
.hub b{font-family:Rubik,sans-serif;font-weight:600;font-size:16px;letter-spacing:.02em;display:block}
.hub span{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.2em;color:var(--glow);
  display:block;margin-top:6px}
.arrow{color:var(--blue);font-size:20px;text-align:center;opacity:.7}

/* related / next */
.related{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin-top:14px}
.rel{background:var(--surface);border:1px solid var(--rule);border-radius:16px;padding:22px;
  transition:transform .25s,box-shadow .25s;display:block}
.rel:hover{transform:translateY(-3px);box-shadow:var(--sh)}
.rel b{display:block;font-family:Rubik,sans-serif;font-weight:500;font-size:15.5px;color:var(--ink)}
.rel span{font-size:13px;color:var(--muted);display:block;margin-top:5px;line-height:1.5}
.rel .go{color:var(--blue);font-size:13px;font-weight:600;display:block;margin-top:11px}

/* cta band */
.ctaband{background:linear-gradient(125deg,var(--deep2),var(--deep3));border-radius:22px;
  padding:clamp(30px,4vw,46px);color:#DCE6FF;display:flex;gap:28px;flex-wrap:wrap;
  align-items:center;justify-content:space-between}
.ctaband h2{color:#fff;font-size:clamp(21px,2.6vw,31px)}
.ctaband p{color:#A9BDE8;margin-top:10px;max-width:46ch;font-size:15px}

/* footer sitemap */
.fmap{display:grid;gap:26px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  padding:34px 0;border-bottom:1px solid rgba(255,255,255,.1)}
.fmap h4,.fmap .footer-label{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.17em;text-transform:uppercase;
  color:#6F82AC;margin:0 0 12px;font-weight:400}
.fmap a{display:block;font-size:13.5px;color:#B9C6E2;padding:5px 0}
.fmap a:hover{color:#fff}
/* social profile link */
.fmap a.social-link{display:inline-flex;align-items:center;gap:8px;margin-top:3px;color:#B9C6E2}
.fmap a.social-link:hover{color:#fff}
.social-link svg{width:17px;height:17px;flex:none;fill:currentColor}


.rule{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;
  padding:9px 15px;border-radius:30px;border:1.5px solid var(--rule);background:var(--surface);
  color:var(--blue);box-shadow:0 1px 2px rgba(6,20,60,.05)}

/* the icon holder must keep its own display; bare element selectors outrank a
   single class, which is how the mega menu flattened it to display:block */
.hold{display:grid;place-items:center}
.oct{display:inline-block}

/* ============ showcase band ============ */
.showband{padding:clamp(56px,6vw,88px) 0}
.showstage{position:relative;margin-top:36px;display:flex;justify-content:center}
.showstage::before{content:"";position:absolute;left:6%;right:6%;top:8%;bottom:-8%;border-radius:50%;
  background:radial-gradient(closest-side,rgba(0,87,246,.5),rgba(127,176,255,.16) 58%,transparent 78%);
  filter:blur(54px);animation:bloom 13s ease-in-out infinite alternate;pointer-events:none}
.showstage img{position:relative;max-width:min(900px,100%);border-radius:14px;
  border:1px solid rgba(127,176,255,.2);box-shadow:var(--shx);
  animation:sdrift 12s ease-in-out infinite alternate}
@keyframes sdrift{from{transform:translateY(-9px)}to{transform:translateY(9px)}}
.feat{transition:background .25s,transform .25s}
.feat:hover{transform:translateY(-2px)}

a.vert{display:block;color:inherit}

/* ============ the demo screen plays real content ============ */
.cyc{position:absolute;inset:0;overflow:hidden}
.cyc img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;
  transition:opacity 1.1s ease, transform 7s linear;transform:scale(1.03)}
.cyc img.on{opacity:1;transform:scale(1)}
/* .layer is already position:absolute -- do not re-declare position here */
.pres .k{position:absolute;left:5%;top:6%;z-index:2;
  background:rgba(0,12,45,.55);padding:5px 11px;border-radius:20px;backdrop-filter:blur(4px)}
.cyccap{position:absolute;left:5%;bottom:6%;z-index:2;font-family:"IBM Plex Mono",monospace;
  font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:#fff;
  background:rgba(0,12,45,.55);padding:6px 12px;border-radius:20px;backdrop-filter:blur(4px)}
.app{padding:0!important;display:block!important}
.appshot{width:100%;height:100%;object-fit:cover;display:block}
/* a slow drift on showcase stills, so nothing on the page is completely static */
@media (prefers-reduced-motion:no-preference){
  .showstage img{animation:sdrift 12s ease-in-out infinite alternate, kb 26s ease-in-out infinite alternate}
  @keyframes kb{from{transform:scale(1)}to{transform:scale(1.035)}}
}
.showstage video{position:relative;box-shadow:var(--shx);border:1px solid rgba(127,176,255,.2)}

.screen{max-width:440px}
/* read by a screen reader and by a crawler, never painted -- the homepage's H1 is
   the lockup image, so the sentence that names the product lives here */
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ================================================================
   Header controls: theme toggle and language switcher
   ================================================================ */
.hdrtools{display:flex;align-items:center;gap:8px}
.themetog{width:34px;height:34px;flex:none;border-radius:10px;cursor:pointer;display:grid;
  place-items:center;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.22);
  color:var(--on-deep);transition:background .2s ease,transform .2s ease,color .3s,border-color .3s}
.themetog:hover{background:rgba(255,255,255,.2);transform:translateY(-1px)}
.themetog svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
header.solid .themetog{background:var(--tint);border-color:var(--rule);color:var(--blue)}
/* the sun shows in light, the moon in dark -- all three theme states covered */
.themetog .t-moon{display:none}
:root[data-theme="dark"] .themetog .t-sun{display:none}
:root[data-theme="dark"] .themetog .t-moon{display:block}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .themetog .t-sun{display:none}
  :root:not([data-theme="light"]) .themetog .t-moon{display:block}
}
:root[data-theme="light"] .themetog .t-sun{display:block}
:root[data-theme="light"] .themetog .t-moon{display:none}
.themetog svg{transition:transform .45s cubic-bezier(.2,.8,.3,1)}
.themetog:hover .t-sun{transform:rotate(52deg)}
.themetog:hover .t-moon{transform:rotate(-18deg)}

/* ---- language switcher: flags, and a menu that unfolds under the cursor ---- */
.langsw{position:relative;flex:none}
.lgcur{display:flex;align-items:center;gap:7px;height:34px;padding:0 9px;cursor:pointer;
  border-radius:10px;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.22);
  color:var(--on-deep);font:inherit;font-size:12px;font-weight:600;letter-spacing:.06em;
  transition:background .2s,transform .2s,color .3s,border-color .3s}
.lgcur:hover{background:rgba(255,255,255,.2);transform:translateY(-1px)}
header.solid .lgcur{background:var(--tint);border-color:var(--rule);color:var(--blue)}
.lgcode{font-family:"IBM Plex Mono",monospace;text-transform:uppercase}
.lgchev{width:10px;height:10px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;
  transition:transform .28s ease;opacity:.75}
.langsw:hover .lgchev,.langsw:focus-within .lgchev{transform:rotate(180deg)}
/* the flag itself: a real little flag, and it ripples when the switcher is hovered */
.flag{width:21px;height:14px;flex:none;border-radius:2.5px;overflow:hidden;display:block;
  box-shadow:0 0 0 1px rgba(0,0,0,.16),0 1px 3px rgba(0,0,0,.28);
  transition:transform .32s cubic-bezier(.2,.8,.3,1),box-shadow .32s}
.flag svg{display:block;width:100%;height:100%}
.langsw:hover .lgcur .flag,.langsw:focus-within .lgcur .flag{
  transform:scale(1.14) rotate(-3deg);box-shadow:0 0 0 1px rgba(0,0,0,.16),0 4px 10px rgba(0,0,0,.34)}
.lgmenu .flag{width:24px;height:16px}
@keyframes flagwave{
  0%  {transform:perspective(70px) rotateY(0deg) skewY(0deg)}
  28% {transform:perspective(70px) rotateY(11deg) skewY(-2.2deg)}
  56% {transform:perspective(70px) rotateY(-9deg) skewY(1.8deg)}
  80% {transform:perspective(70px) rotateY(5deg) skewY(-.9deg)}
  100%{transform:perspective(70px) rotateY(0deg) skewY(0deg)}
}
.lgmenu{position:absolute;top:calc(100% + 9px);right:0;min-width:210px;max-height:min(72vh,520px);overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;z-index:70;
  background:var(--surface);border:1px solid var(--rule);border-radius:14px;padding:6px;
  box-shadow:0 24px 54px -22px rgba(6,20,60,.46);
  opacity:0;visibility:hidden;transform:translateY(-8px) scale(.97);transform-origin:top right;
  transition:opacity .2s ease,transform .24s cubic-bezier(.2,.8,.3,1),visibility .24s}
.langsw:hover .lgmenu,.langsw:focus-within .lgmenu,.lgmenu[data-open="true"]{
  opacity:1;visibility:visible;transform:translateY(0) scale(1)}
/* a hover bridge, so the menu does not close in the gap under the button */
.langsw::after{content:"";position:absolute;top:100%;right:0;width:100%;height:12px}
.lgmenu a{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:9px;
  font-size:13.5px;font-weight:500;color:var(--ink);
  opacity:0;transform:translateX(7px);transition:background .16s,opacity .26s ease,transform .26s ease}
.langsw:hover .lgmenu a,.langsw:focus-within .lgmenu a,.lgmenu[data-open="true"] a{
  opacity:1;transform:none}
.langsw:hover .lgmenu a:nth-child(2),.langsw:focus-within .lgmenu a:nth-child(2){transition-delay:.06s}
.lgmenu a:hover{background:var(--tint)}
.lgmenu a:hover .flag{animation:flagwave .7s ease both}
.lgmenu a .lgname{flex:1;min-width:0}
.lgmenu a .lgtick{width:14px;height:14px;flex:none;color:var(--blue);opacity:0;
  fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;
  transition:opacity .2s}
.lgmenu a[aria-current="true"]{color:var(--blue);font-weight:600}
.lgmenu a[aria-current="true"] .lgtick{opacity:1}
@media (prefers-reduced-motion:reduce){
  .flag,.lgmenu,.lgmenu a,.themetog svg{transition:none!important;animation:none!important}
}
@media(max-width:520px){.hdrtools .btn.sq{display:none}}

/* the same two controls, repeated at the foot of the mobile drawer */
.drawtools{display:flex;align-items:center;gap:10px;margin-top:22px;padding-top:18px;
  border-top:1px solid var(--rule)}
.drawtools .themetog,.drawtools .lgcur{background:var(--tint);border-color:var(--rule);color:var(--blue)}

/* ================================================================
   Cookie consent -- nothing is stored until a choice is made, and
   refusing is exactly as many clicks as accepting
   ================================================================ */
.ckwrap{position:fixed;left:0;right:0;bottom:0;z-index:300;padding:clamp(10px,2vw,18px);
  pointer-events:none;animation:ckIn .34s cubic-bezier(.2,.8,.3,1) both}
@keyframes ckIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.ckwrap{animation:none}}
.ck{pointer-events:auto;width:var(--col);margin:0 auto;background:var(--surface);
  border:1px solid var(--rule);border-radius:18px;box-shadow:0 30px 70px -24px rgba(8,21,42,.55);
  padding:clamp(16px,2.2vw,22px) clamp(18px,2.4vw,26px);display:flex;flex-wrap:wrap;
  align-items:center;gap:clamp(14px,2.4vw,30px);justify-content:space-between}
.ck-copy{flex:1 1 420px;min-width:0}
.ck-copy h2{font-family:Rubik,sans-serif;font-weight:600;font-size:17px;letter-spacing:-.01em;
  color:var(--ink);margin:0 0 6px;text-transform:none}
.ck-copy p{margin:0;font-size:14.5px;line-height:1.6;color:var(--muted);max-width:74ch}
.ck-more{display:inline-block;margin-top:8px;font-size:13.5px;font-weight:600;color:var(--blue)}
.ck-more:hover{text-decoration:underline}
.ck-acts{display:flex;flex-wrap:wrap;align-items:center;gap:10px;flex:0 0 auto}
.ck-acts .btn{padding:11px 20px;font-size:14px}
.ck-custom{background:none;border:0;cursor:pointer;font:inherit;font-size:13.5px;font-weight:600;
  color:var(--muted);text-decoration:underline;padding:6px 4px}
.ck-custom:hover{color:var(--ink)}
@media (max-width:620px){.ck-acts{width:100%}.ck-acts .btn{flex:1 1 auto;justify-content:center}}
.ckscrim{position:fixed;inset:0;z-index:310;display:grid;place-items:center;
  padding:clamp(12px,4vh,44px) clamp(12px,4vw,44px);overflow-y:auto;
  background:rgba(3,8,20,.76);-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}
body.ck-open{overflow:hidden}
.ckpanel{width:min(600px,100%);background:var(--surface);border:1px solid var(--rule);
  border-radius:18px;overflow:hidden;box-shadow:0 40px 90px -30px rgba(0,0,0,.6)}
.ckp-head{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:20px 22px;border-bottom:1px solid var(--rule)}
.ckp-head h2{font-family:Rubik,sans-serif;font-weight:600;font-size:19px;margin:0;color:var(--ink);
  text-transform:none}
.ckp-head .x{width:34px;height:34px;border-radius:50%;flex:none;background:var(--sunk);
  border:1px solid var(--rule);color:var(--body);cursor:pointer;display:grid;place-items:center;
  transition:background .2s,transform .2s}
.ckp-head .x:hover{background:var(--tint);transform:rotate(90deg)}
.ckp-head .x svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round}
.ckp-body{padding:6px 22px}
.ckrow{display:flex;align-items:flex-start;gap:18px;justify-content:space-between;
  padding:18px 0;border-bottom:1px solid var(--rule)}
.ckrow:last-child{border-bottom:0}
.ckrow b{display:block;font-family:Rubik,sans-serif;font-size:15.5px;color:var(--ink);margin-bottom:5px}
.ckrow p{margin:0;font-size:13.8px;line-height:1.58;color:var(--muted);max-width:56ch}
.ckfixed{flex:none;font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--blue);background:var(--tint);border:1px solid var(--rule);
  border-radius:999px;padding:5px 11px;white-space:nowrap}
.cksw{flex:none;position:relative;display:inline-block;width:46px;height:26px;cursor:pointer}
.cksw input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.cksw span{position:absolute;inset:0;border-radius:999px;background:var(--rule);
  transition:background .22s ease;pointer-events:none}
.cksw span::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;
  border-radius:50%;background:#fff;transition:transform .22s cubic-bezier(.2,.8,.3,1);
  box-shadow:0 1px 3px rgba(0,0,0,.35)}
.cksw input:checked + span{background:var(--blue)}
.cksw input:checked + span::after{transform:translateX(20px)}
.cksw input:focus-visible + span{box-shadow:0 0 0 3px rgba(61,139,255,.4)}
.ckp-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;
  padding:18px 22px;border-top:1px solid var(--rule);background:var(--sunk)}
.ckp-foot a{font-size:13.5px;font-weight:600;color:var(--blue)}
.ckp-foot a:hover{text-decoration:underline}
.ckp-acts{display:flex;flex-wrap:wrap;gap:10px}
.ckp-acts .btn{padding:10px 18px;font-size:14px}
.ckp-acts .btn.outline{border-radius:11px}
@media (max-width:560px){
  .ckp-foot{flex-direction:column;align-items:stretch}
  .ckp-acts .btn{flex:1 1 auto;justify-content:center}
}

/* ================================================================
   Privacy & cookies page
   ================================================================ */
.pv{display:grid;gap:18px;margin-top:34px}
.pvcard{background:var(--surface);border:1px solid var(--rule);border-radius:18px;
  padding:26px 28px;box-shadow:var(--sh)}
.pvcard h3{margin-bottom:9px;font-size:18px;font-family:Rubik,sans-serif;font-weight:600}
.pvcard p{font-size:15px;line-height:1.7;color:var(--body)}
.pvcard p + p{margin-top:11px}
.pvtable{width:100%;border-collapse:collapse;margin-top:16px;font-size:14px}
.pvtable th,.pvtable td{text-align:left;padding:11px 12px;border-bottom:1px solid var(--rule);
  vertical-align:top}
.pvtable th{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted);font-weight:400}
.pvtable td:first-child{font-family:"IBM Plex Mono",monospace;font-size:12.5px;color:var(--ink);
  white-space:nowrap}
.pvtable tr:last-child td{border-bottom:0}

/* the contact card's heading is the page's only section heading, so it is an h2 --
   sized like the h3 it replaced, because that is what the layout wants */
.lead .lead-h{font-family:Rubik,sans-serif;font-weight:500;font-size:17px;color:var(--on-deep);
  letter-spacing:-.005em;text-transform:none;line-height:1.3;margin:0 0 5px}

/* footer legal row: the privacy link, the cookie re-opener, and the one disclosure
   that used to live in the prototype ribbon */
.flegal{display:flex;flex-wrap:wrap;align-items:center;gap:10px 22px;margin-top:26px;
  padding-top:18px;border-top:1px solid rgba(255,255,255,.1);font-size:13px}
.flegal a,.flink{color:#8FA3CC;transition:color .2s}
.flegal a:hover,.flink:hover{color:var(--glow)}
.flink{background:none;border:0;padding:0;font:inherit;font-size:13px;cursor:pointer;
  text-decoration:underline;text-underline-offset:3px}
.frender{color:#6E82AA;margin-left:auto;text-align:right;max-width:48ch}
@media(max-width:700px){.frender{margin-left:0;text-align:left}}

/* ---- things the artifact wrapper used to supply and a real page must not assume ----
   `.ckscrim{display:grid}` beats the browser's own `[hidden]{display:none}`,
   so without this rule the cookie preferences panel covers every page. */
[hidden]{display:none!important}
:root{color-scheme:light}
:root[data-theme="dark"]{color-scheme:dark}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){color-scheme:dark}}

/* live build: no prototype ribbon, so the header starts at the top */
:root{--rib:0px}
nav.main a[aria-current="page"]{color:var(--blue-br)}
nav.main a[aria-current="page"]::after{right:0}

/* Product differentiation comparison */
.compare-block{margin-top:clamp(44px,6vw,76px)}
.compare-intro{max-width:850px;color:var(--muted);font-size:clamp(17px,1.55vw,20px);line-height:1.7;margin:12px 0 24px}
.compare-table{border:1px solid var(--line);border-radius:22px;overflow:hidden;background:var(--card);box-shadow:0 18px 50px rgba(5,31,78,.08)}
.compare-table>div{display:grid;grid-template-columns:1fr 1.35fr;gap:20px;padding:17px 22px;border-top:1px solid var(--line);align-items:center}
.compare-table>div:first-child{border-top:0}
.compare-table .compare-head{background:var(--deep);color:#fff;font-weight:800;text-transform:uppercase;letter-spacing:.05em;font-size:13px}
.compare-table strong{color:var(--ink);font-weight:800}
.compare-table>div:not(.compare-head)>span{color:var(--muted)}
.compare-note{margin:18px 4px 0;font-weight:750;color:var(--ink)}
@media(max-width:700px){.compare-table>div{grid-template-columns:1fr;gap:5px;padding:15px 17px}.compare-table .compare-head{display:none}.compare-table>div:not(.compare-head)>span{font-size:13px;text-transform:uppercase;letter-spacing:.04em}}

/* Final language-switcher polish: larger, readable flags */
.flag{width:30px!important;height:21px!important;display:inline-flex!important;align-items:center;justify-content:center;overflow:visible!important;border-radius:3px;font-size:22px;line-height:1;box-shadow:none!important}
.lgmenu .flag{width:30px!important;height:21px!important;font-size:22px}
.lgcur{height:38px;padding:0 10px;gap:8px}

/* Simplified Chinese typography: use local CJK fonts so the site stays polished even where Google Fonts is unavailable. */
html[lang="zh-CN"] body,
html[lang="zh-CN"] h1,html[lang="zh-CN"] h2,html[lang="zh-CN"] h3,
html[lang="zh-CN"] .door h3,html[lang="zh-CN"] .pres .h,html[lang="zh-CN"] .vert h3,
html[lang="zh-CN"] .role li b,html[lang="zh-CN"] .lead h3,html[lang="zh-CN"] .mega .mtx b,
html[lang="zh-CN"] .mega .mtx .nav-title,html[lang="zh-CN"] .pquote,html[lang="zh-CN"] .fcard .ftx b,
html[lang="zh-CN"] .hub b,html[lang="zh-CN"] .rel b,html[lang="zh-CN"] .ck-copy h2,
html[lang="zh-CN"] .ckp-head h2,html[lang="zh-CN"] .ckrow b,html[lang="zh-CN"] .pvcard h3,
html[lang="zh-CN"] .lead .lead-h{
  font-family:"PingFang SC","Microsoft YaHei","Noto Sans CJK SC","Source Han Sans SC",system-ui,sans-serif;
}
html[lang="zh-CN"] .eyebrow,html[lang="zh-CN"] .drawer .grp,html[lang="zh-CN"] .fmap .footer-label,
html[lang="zh-CN"] .rule,html[lang="zh-CN"] .role .tag,html[lang="zh-CN"] .wl b,html[lang="zh-CN"] .dl dt,
html[lang="zh-CN"] .hstats span,html[lang="zh-CN"] .chips li,html[lang="zh-CN"] .ckfixed{
  letter-spacing:.06em;text-transform:none;
}


/* Comparison v2 - make the baseline-vs-ScreenSoft difference unmistakable */
.compare-table{border-color:rgba(10,40,90,.14);box-shadow:0 22px 60px rgba(5,31,78,.12)}
.compare-table .compare-head{background:linear-gradient(90deg,#eef2f6 0,#eef2f6 42.55%,var(--deep) 42.55%,var(--deep) 100%);color:var(--ink);padding-block:0}
.compare-table .compare-head>span{padding:18px 22px;display:block}
.compare-table .compare-head>span:first-child{color:#778392}
.compare-table .compare-head>span:last-child{color:#fff}
.compare-table>div:not(.compare-head){padding:0;gap:0;background:linear-gradient(90deg,rgba(238,242,246,.58) 0,rgba(238,242,246,.58) 42.55%,rgba(44,115,255,.035) 42.55%,rgba(44,115,255,.035) 100%)}
.compare-table>div:not(.compare-head)>span,.compare-table>div:not(.compare-head)>strong{min-height:62px;display:flex;align-items:center;padding:15px 22px}
.compare-table>div:not(.compare-head)>span{color:#7a8593;font-weight:650;position:relative;padding-left:48px}
.compare-table>div:not(.compare-head)>span::before{content:"–";position:absolute;left:22px;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;background:#e2e7ec;color:#7c8792;font-weight:900;line-height:1}
.compare-table>div:not(.compare-head)>strong{color:var(--ink);font-weight:850;border-left:1px solid rgba(44,115,255,.13);position:relative;padding-left:58px}
.compare-table>div:not(.compare-head)>strong::before{content:"✓";position:absolute;left:22px;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:#e8f8ef;color:#119652;font-size:15px;font-weight:950;box-shadow:inset 0 0 0 1px rgba(17,150,82,.16)}
.compare-table>div:not(.compare-head):hover strong{background:rgba(44,115,255,.045)}
@media(max-width:700px){
 .compare-table>div:not(.compare-head){background:var(--card);padding:0;gap:0}
 .compare-table>div:not(.compare-head)>span,.compare-table>div:not(.compare-head)>strong{min-height:auto;padding-top:13px;padding-bottom:13px}
 .compare-table>div:not(.compare-head)>span{background:#f1f4f7;padding-left:46px}
 .compare-table>div:not(.compare-head)>strong{background:rgba(44,115,255,.04);border-left:0;padding-left:54px;font-size:15px}
 .compare-table>div:not(.compare-head)>span::before{left:18px}
 .compare-table>div:not(.compare-head)>strong::before{left:18px}
}
