/* ==========================================================================
   Intelligence Designed To Evolve
   Single-viewport, full-bleed video background. HTML + CSS + vanilla JS.
   ========================================================================== */

/* Self-hosted faces. Removing the three third-party stylesheets took
   ~3.2s of render-blocking and a 153KB icon webfont off the critical path. */
@font-face{
  font-family:"BubbledotICG-FinePos";
  src:url("fonts/bubbledot.woff2") format("woff2");
  font-weight:400;font-style:normal;font-display:swap;
}
@font-face{
  font-family:"Inter";
  src:url("fonts/inter-latin.woff2") format("woff2");
  font-weight:100 900;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* Fallback display face (optional local file). */
@font-face{
  font-family:"Geist Pixel Circle";
  src:url("fonts/GeistPixel-Circle.woff2") format("woff2");
  font-weight:400;
  font-display:swap;
}

:root{
  --bg:#000000;
  --text:#ffffff;
  --muted:#8e8e8e;
  --nav-text:#2e2e2e;
  --pill-dark:#28282a;
  --sign-in-text:#c8c8c8;
  --nav-shadow:0 4px 14px rgba(0,0,0,.16);
  --trust-bg:#28282a;
  --trust-border:rgba(255,255,255,.4);
  --trust-text:#c4c2c3;
  --font-sans:"Inter","Segoe UI",system-ui,sans-serif;
  --font-display:"BubbledotICG-FinePos","Geist Pixel Circle",monospace;
}

*,*::before,*::after{box-sizing:border-box}

html,body{height:100%}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-sans);
  height:100vh;
  height:100dvh;
  overflow:hidden;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;
  appearance:none;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}
ul{list-style:none;margin:0;padding:0}

/* ==========================================================================
   BACKGROUND VIDEO
   ========================================================================== */
.bg{position:absolute;inset:0;background:#000;overflow:hidden}
/* The poster frame lives here rather than on the <video> element. A video
   with a poster but no attached media is exactly the state iOS paints its
   own play button over; with no poster attribute there is nothing for it
   to decorate. Painted first, so the video covers it once it fades in. */
.bg::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:#000 url("assets/poster-d.webp") center/cover no-repeat;
}
/* Legibility scrim. Without this the headline lands on whatever the video
   happens to be showing — on mobile that is the bright horizon band, and
   white-on-pale is unreadable. Darkens behind the content column and at the
   top/bottom edges while leaving the artwork visible. */
.bg::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(120% 75% at 50% 46%, rgba(0,0,0,.62) 0%, rgba(0,0,0,.30) 45%, transparent 78%),
    linear-gradient(180deg, rgba(0,0,0,.55) 0%, rgba(0,0,0,.12) 26%, rgba(0,0,0,.28) 62%, rgba(0,0,0,.82) 100%);
}
@media (max-width:720px){
  .bg::after{
    /* tight ellipse over the text block only, so the artwork above it keeps
       its colour instead of going grey */
    background:
      radial-gradient(125% 42% at 50% 50%, rgba(0,0,0,.80) 0%, rgba(0,0,0,.46) 58%, transparent 88%),
      linear-gradient(180deg, rgba(0,0,0,.58) 0%, rgba(0,0,0,.34) 14%, rgba(0,0,0,.10) 30%, rgba(0,0,0,.24) 64%, rgba(0,0,0,.88) 100%);
  }
  /* A 16:9 source is height-fitted on a tall phone, so the full bright top of the
     frame lands on screen. Scale past cover to crop toward the darker mid-frame. */
  /* The phone gets a portrait master with the framing already baked in, so the
     old transform:scale(1.34) is dropped -- it was a further 34% upscale of an
     already heavily upscaled landscape frame. */
  .bg::before{background-image:url("assets/poster-m.webp")}
  /* viewport-fit=cover lets the page run under the home indicator; keep the
     stat panel's bottom edge clear of it. */
  .page{padding-bottom:calc(18px + env(safe-area-inset-bottom,0px))}
}
.bg-video{
  position:absolute;inset:0;
  width:100%;height:100%;
  object-fit:cover;
  pointer-events:none;
  z-index:0;
  /* Held invisible until playback actually begins. opacity:0 hides the element
     AND every piece of native shadow-DOM chrome it might draw, so a play glyph
     cannot appear no matter what the autoplay policy decides. If playback is
     refused outright, the poster layer above simply stays on screen. */
  opacity:0;
  transition:opacity .55s ease;
}
.bg-video.is-playing{opacity:1}
@media (prefers-reduced-motion:reduce){.bg-video{transition:none}}
/* This is a background plate, not a player. If a phone declines to autoplay it
   would otherwise paint its own play glyph over the artwork — suppress every
   piece of native chrome. Split into single rules so an unrecognised
   pseudo-element in one engine cannot invalidate the rest. */
.bg-video::-webkit-media-controls{display:none!important}
.bg-video::-webkit-media-controls-panel{display:none!important}
.bg-video::-webkit-media-controls-start-playback-button{display:none!important;-webkit-appearance:none}
.bg-video::-webkit-media-controls-overlay-play-button{display:none!important;-webkit-appearance:none}
.bg-video::-webkit-media-controls-play-button{display:none!important}

/* ==========================================================================
   PAGE SHELL — header / hero / stats
   ========================================================================== */
.page{
  position:relative;
  display:flex;
  flex-direction:column;
  align-items:center;
  height:100vh;
  height:100dvh;
  overflow:hidden;
  padding:clamp(16px,2.4vh,28px) clamp(14px,3vw,32px);
}
.header,.hero,.stats,.mobile-menu{z-index:1}

/* ==========================================================================
   HEADER
   ========================================================================== */
.header{
  flex-shrink:0;
  width:100%;
  max-width:720px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:clamp(18px,2.8vw,28px);
  animation:slideDown .7s cubic-bezier(.22,1,.36,1) both;
}

.logo{
  flex:none;
  width:clamp(40px,4.4vw,46px);
  height:clamp(40px,4.4vw,46px);
  border-radius:50%;
  background:#fff;
  box-shadow:var(--nav-shadow);
  display:grid;
  place-items:center;
  transition:transform .25s cubic-bezier(.22,1,.36,1);
}
.logo:hover{transform:scale(1.04)}
.logo img{
  width:72%;
  height:72%;
  object-fit:contain;
}

.nav{flex:1;max-width:430px;min-width:0}
.nav-list{
  display:flex;
  align-items:center;
  justify-content:space-between;
  height:clamp(44px,5.2vw,48px);
  padding:4px 8px;
  background:#fff;
  border-radius:999px;
  box-shadow:var(--nav-shadow);
}
.nav-link{
  position:relative;
  display:block;
  padding:6px 10px 10px;
  font-family:var(--font-sans);
  font-weight:500;
  font-size:clamp(13px,1.4vw,15px);
  letter-spacing:-.01em;
  color:var(--nav-text);
  opacity:.5;
  white-space:nowrap;
  transition:opacity .2s ease;
}
.nav-link:hover{opacity:.75}
.nav-link.is-active{opacity:1}
/* three 3x3 dots under the active label */
.nav-link.is-active::after{
  content:"";
  position:absolute;
  left:50%;
  bottom:5px;
  width:3px;
  height:3px;
  margin-left:-1.5px;
  background:#000;
  box-shadow:-5px 0 0 0 #000, 5px 0 0 0 #000;
}

.signin{
  flex:none;
  display:inline-flex;
  align-items:center;
  height:clamp(44px,5.2vw,48px);
  padding:0 clamp(16px,2vw,22px);
  background:var(--pill-dark);
  color:var(--sign-in-text);
  border-radius:999px;
  box-shadow:var(--nav-shadow);
  font-weight:500;
  font-size:clamp(13px,1.4vw,15px);
  letter-spacing:-.01em;
  white-space:nowrap;
  transition:background .2s ease,color .2s ease,transform .2s ease;
}
.signin:hover{background:#323234;color:#fff;transform:translateY(-1px)}

.burger{display:none}

/* ==========================================================================
   HERO
   ========================================================================== */
.hero{
  flex:1;
  width:100%;
  max-width:900px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  min-height:0;
}

/* ---- trust row ---- */
.trust{
  --trust-size:clamp(36px,4.5vw,42px);
  display:inline-flex;
  align-items:center;
  margin-bottom:clamp(16px,2.5vh,26px);
}
.avatars{display:inline-flex;align-items:center}
.avatar{
  position:relative;
  width:var(--trust-size);
  height:var(--trust-size);
  padding:5px;
  border-radius:50%;
  background:var(--trust-bg);
  border:1px solid var(--trust-border);
  display:grid;
  place-items:center;
  transition:transform .35s cubic-bezier(.22,1,.36,1);
}
.avatar-inner{
  width:100%;
  height:100%;
  border-radius:50%;
  background:#fff;
  display:grid;
  place-items:center;
}
.avatar-inner .tico{
  width:calc(var(--trust-size) * .40);
  height:calc(var(--trust-size) * .40);
  color:#111;
  display:block;
}
.avatar.a1{z-index:1}
.avatar.a2{z-index:2;margin-left:calc(var(--trust-size) * -.42)}
.avatar.a3{z-index:4;margin-left:calc(var(--trust-size) * -.42)}
.trust:hover .avatar.a1{transform:translateY(-2px)}
.trust:hover .avatar.a2{transform:translateY(-4px)}
.trust:hover .avatar.a3{transform:translateY(-2px)}

.trust-pill{
  display:inline-flex;
  align-items:center;
  height:var(--trust-size);
  margin-left:calc(var(--trust-size) * -.42);
  padding-left:calc(var(--trust-size) * .58);
  padding-right:clamp(12px,1.6vw,16px);
  background:var(--trust-bg);
  border:1px solid var(--trust-border);
  border-radius:999px;
  color:var(--trust-text);
  font-weight:500;
  font-size:clamp(12px,1.4vw,13.5px);
  letter-spacing:-.01em;
  white-space:nowrap;
}

/* ---- headline ---- */
.headline{
  margin:0;
  text-shadow:0 2px 26px rgba(0,0,0,.55);
  font-family:var(--font-display);
  font-weight:400;
  color:#fff;
  font-size:clamp(28px,6.2vw,80px);
  letter-spacing:-.04em;
  line-height:1.12;
  white-space:nowrap;
  overflow:hidden;
}
.headline .line{
  display:block;
  opacity:0;
  transform:translateY(14px);
  animation:headlineFade .85s cubic-bezier(.22,1,.36,1) forwards;
}
.headline .line-1{animation-delay:.12s}
.headline .line-2{animation-delay:.3s}

/* ---- subhead ---- */
.subhead{
  margin:clamp(12px,1.8vh,18px) 0 0;
  text-shadow:0 1px 16px rgba(0,0,0,.6);
  max-width:min(500px,92%);
  font-size:clamp(calc(13.5px + 2pt),calc(1.55vw + 2pt),calc(16.5px + 2pt));
  font-weight:400;
  line-height:1.55;
  color:#d0d0d0;
  opacity:.8;
}

/* ---- CTA ---- */
.cta{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  margin-top:clamp(16px,2.4vh,26px);
  padding:clamp(11px,1.6vh,13px) clamp(22px,3vw,28px);
  background:#fff;
  color:#000;
  border-radius:999px;
  font-family:var(--font-sans);
  font-weight:600;
  font-size:clamp(13.5px,1.5vw,14.5px);
  letter-spacing:-.01em;
  box-shadow:0 0 0 1px rgba(255,255,255,.15),
             0 0 22px rgba(255,255,255,.32),
             0 0 44px rgba(255,255,255,.12);
  transition:transform .25s cubic-bezier(.22,1,.36,1),box-shadow .25s ease;
  animation-name:revealPulse;
}
.cta:hover{
  transform:translateY(-2px) scale(1.02);
  box-shadow:0 0 0 1px rgba(255,255,255,.25),
             0 0 30px rgba(255,255,255,.45),
             0 0 60px rgba(255,255,255,.2);
}

/* ==========================================================================
   STATS
   ========================================================================== */
.stats{
  flex-shrink:0;
  width:100%;
  max-width:920px;
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:clamp(10px,2vw,20px);
}
.stat{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px}
.stat-icon{
  font-family:var(--font-display);
  font-size:clamp(22px,3vw,33px);
  line-height:1;
  color:#fff;
}
.stat-value{
  font-family:var(--font-sans);
  font-weight:500;
  color:#fff;
  font-size:clamp(18px,2.2vw,26px);
  letter-spacing:-.025em;
  font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum" 1;
}
.stat-label{
  color:var(--muted);
  font-size:clamp(11px,1.2vw,12.5px);
  letter-spacing:-.01em;
}

/* ==========================================================================
   SHARED ENTRANCE
   ========================================================================== */
.anim{
  opacity:0;
  transform:translateY(22px) scale(.98);
  filter:blur(6px);
  animation:reveal .85s cubic-bezier(.22,1,.36,1) forwards;
  animation-delay:var(--d,0s);
}
/* the headline animates per line, not as a block */
.headline.anim{
  opacity:1;
  transform:none;
  filter:none;
  animation:none;
}

@keyframes reveal{
  to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}
}
@keyframes revealPulse{
  0%{opacity:0;transform:translateY(22px) scale(.98);filter:blur(6px)}
  70%{opacity:1;transform:translateY(0) scale(1.03);filter:blur(0)}
  100%{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}
}
@keyframes headlineFade{
  to{opacity:1;transform:translateY(0)}
}
@keyframes slideDown{
  from{opacity:0;transform:translateY(-18px)}
  to{opacity:1;transform:translateY(0)}
}

/* ==========================================================================
   MOBILE  (<= 720px)
   ========================================================================== */
@media (max-width:720px){
  .nav{display:none}
  .signin{display:none}

  .header{justify-content:space-between;max-width:none}
  .logo{width:48px;height:48px}

  .burger{
    display:grid;
    place-items:center;
    width:48px;
    height:48px;
    border-radius:50%;
    background:var(--pill-dark);
    box-shadow:var(--nav-shadow);
    transition:background .25s ease;
  }
  .burger-bars{position:relative;display:block;width:18px;height:14px}
  .burger-bars i{
    position:absolute;left:0;
    width:18px;height:1.5px;
    background:#fff;border-radius:2px;
    transition:transform .3s cubic-bezier(.22,1,.36,1),opacity .2s ease,background .25s ease;
  }
  .burger-bars i:nth-child(1){top:0}
  .burger-bars i:nth-child(2){top:6.25px}
  .burger-bars i:nth-child(3){top:12.5px}

  .burger[aria-expanded="true"]{background:#fff}
  .burger[aria-expanded="true"] .burger-bars i{background:#000}
  .burger[aria-expanded="true"] .burger-bars i:nth-child(1){transform:translateY(6.5px) rotate(45deg)}
  .burger[aria-expanded="true"] .burger-bars i:nth-child(2){opacity:0}
  .burger[aria-expanded="true"] .burger-bars i:nth-child(3){transform:translateY(-6.5px) rotate(-45deg)}

  /* the dot-matrix face reads visually smaller than its point size, so it
     needs more of it on small screens to stay the dominant element */
  .headline{font-size:clamp(34px,8.6vw,48px);letter-spacing:-.07em;line-height:1.08}
  .subhead{font-size:15px;max-width:min(400px,90%);line-height:1.5}
  .trust{--trust-size:36px}
  /* Four loose text blobs read as an afterthought on a phone. Bind them into a
     single glass panel with a hairline cross so the footer carries the same
     weight as the hero. */
  .stats{
    grid-template-columns:repeat(2,1fr);
    gap:0;
    border-radius:22px;
    border:1px solid rgba(255,255,255,.10);
    background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.015));
    -webkit-backdrop-filter:blur(20px) saturate(135%);
    backdrop-filter:blur(20px) saturate(135%);
    box-shadow:0 10px 34px rgba(0,0,0,.42),inset 0 1px 0 rgba(255,255,255,.09);
    overflow:hidden;
  }
  /* the *, #, %, < glyphs turn to specks at this size — the number and
     label carry the row perfectly well without them */
  .stat-icon{display:none}
  .stat{gap:5px;padding:16px 8px}
  .stat:nth-child(odd){border-right:1px solid rgba(255,255,255,.09)}
  .stat:nth-child(-n+2){border-bottom:1px solid rgba(255,255,255,.09)}
  .stat-value{
    font-size:27px;
    font-weight:500;
    letter-spacing:-.035em;
    text-shadow:0 1px 14px rgba(0,0,0,.5);
  }
  .stat-label{
    font-size:9.5px;
    font-weight:500;
    text-transform:uppercase;
    letter-spacing:.16em;
    line-height:1.2;
    color:rgba(255,255,255,.5);
  }
}

/* ==========================================================================
   MOBILE MENU
   ========================================================================== */
.menu-overlay{
  position:fixed;inset:0;z-index:40;
  background:rgba(0,0,0,.62);
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  animation:overlayIn .28s ease both;
}
.menu-overlay[hidden]{display:none}

.mobile-menu{
  position:fixed;
  top:calc(clamp(16px,2.4vh,28px) + 48px + 12px);
  left:50%;
  transform:translateX(-50%);
  z-index:50;
  width:min(calc(100% - 28px),420px);
  background:#fff;
  border-radius:28px;
  padding:22px 18px 20px;
  box-shadow:0 20px 60px rgba(0,0,0,.45);
  animation:menuIn .38s cubic-bezier(.22,1,.36,1) both;
}
.mobile-menu[hidden]{display:none}

.mobile-list{display:flex;flex-direction:column}
.mobile-link{
  position:relative;
  display:block;
  padding:14px 8px 18px;
  text-align:center;
  color:var(--nav-text);
  font-weight:500;
  font-size:17px;
  letter-spacing:-.01em;
  opacity:.55;
  animation:linkIn .42s cubic-bezier(.22,1,.36,1) both;
  animation-delay:calc(.08s + var(--i,0) * .05s);
}
.mobile-link:hover{opacity:.8}
.mobile-link.is-active{opacity:1}
.mobile-link.is-active::after{
  content:"";
  position:absolute;left:50%;bottom:8px;
  width:3px;height:3px;margin-left:-1.5px;
  background:#000;
  box-shadow:-5px 0 0 0 #000, 5px 0 0 0 #000;
}
.mobile-signin{
  display:flex;
  align-items:center;
  justify-content:center;
  width:100%;
  height:50px;
  margin-top:10px;
  background:var(--pill-dark);
  color:var(--sign-in-text);
  border-radius:999px;
  font-weight:500;
  font-size:15px;
  letter-spacing:-.01em;
  animation:linkIn .42s cubic-bezier(.22,1,.36,1) both;
  animation-delay:calc(.08s + var(--i,0) * .05s);
}
.mobile-signin:hover{background:#323234;color:#fff}

body.menu-open{overflow:hidden}

@keyframes overlayIn{from{opacity:0}to{opacity:1}}
@keyframes menuIn{
  from{opacity:0;transform:translateX(-50%) translateY(-14px) scale(.96)}
  to{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}
}
@keyframes linkIn{
  from{opacity:0;transform:translateY(8px)}
  to{opacity:.55;transform:translateY(0)}
}

/* ==========================================================================
   NARROW  (<= 420px)
   ========================================================================== */
@media (max-width:420px){
  .headline{letter-spacing:-.09em;line-height:1.04}
  .trust{--trust-size:34px}
  .trust-pill{font-size:12px}
}

/* ==========================================================================
   SHORT VIEWPORTS  (<= 700px tall)
   ========================================================================== */
@media (max-height:700px){
  .trust{margin-bottom:12px}
  .subhead{margin-top:10px}
  .cta{margin-top:14px}
  .stats{gap:8px}
}

/* ==========================================================================
   REDUCED MOTION
   ========================================================================== */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms!important;
    animation-iteration-count:1!important;
    animation-delay:0ms!important;
    transition-duration:.001ms!important;
    transition-delay:0ms!important;
  }
  .anim{opacity:1!important;transform:none!important;filter:none!important}
  .headline .line{opacity:1!important;transform:none!important}
  .headline{color:#fff}
  .header{opacity:1!important;transform:none!important}
  .mobile-link{opacity:.55}
  .mobile-link.is-active{opacity:1}
}

/* ==========================================================================
   PANELS — Company Brain / Case Studies / Contact
   The page is one locked viewport, so these open over it rather than
   scrolling it. Nav buttons drive them; scrim, Escape and X all close.
   ========================================================================== */
.panel-scrim{
  position:fixed;inset:0;z-index:60;
  background:rgba(0,0,0,.68);
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
  animation:overlayIn .28s ease both;
}
.panel-scrim[hidden]{display:none}

.panel{
  position:fixed;
  top:50%;left:50%;
  transform:translate(-50%,-50%);
  z-index:70;
  width:min(calc(100% - 28px),660px);
  max-height:min(84vh,84dvh);
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  background:rgba(16,16,18,.94);
  border:1px solid rgba(255,255,255,.14);
  border-radius:26px;
  box-shadow:0 30px 90px rgba(0,0,0,.6);
  padding:clamp(26px,4vw,40px);
  color:#fff;
  animation:panelIn .42s cubic-bezier(.22,1,.36,1) both;
}
.panel[hidden]{display:none}
.panel--wide{width:min(calc(100% - 28px),880px)}
.panel--narrow{width:min(calc(100% - 28px),480px)}

.panel-x{
  position:absolute;top:14px;right:16px;
  width:38px;height:38px;
  display:grid;place-items:center;
  border-radius:50%;
  background:rgba(255,255,255,.08);
  color:#fff;
  font-size:22px;line-height:1;
  transition:background .18s ease,transform .18s ease;
}
.panel-x:hover{background:rgba(255,255,255,.18);transform:scale(1.06)}

.panel-k{
  margin:0 0 10px;
  font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(255,255,255,.5);font-weight:500;
}
.panel-t{
  margin:0;
  font-family:var(--font-display);
  font-weight:400;
  font-size:clamp(24px,3.4vw,36px);
  letter-spacing:-.05em;
  line-height:1.15;
}
.panel-lede{
  margin:14px 0 0;
  font-size:15.5px;line-height:1.6;
  color:rgba(255,255,255,.68);
  max-width:56ch;
}

.panel-rows{margin-top:26px;display:grid;gap:2px}
.prow{
  display:flex;gap:16px;
  padding:18px 0;
  border-top:1px solid rgba(255,255,255,.1);
}
.prow-n{
  flex:none;
  font-family:var(--font-display);
  font-size:15px;
  color:rgba(255,255,255,.42);
  padding-top:2px;
}
.prow h3{margin:0 0 6px;font-size:16.5px;font-weight:600;letter-spacing:-.015em}
.prow p{margin:0;font-size:14.5px;line-height:1.6;color:rgba(255,255,255,.66)}

/* Group label above each set of cards, so production work and in-build work
   read as two deliberate groups rather than one undifferentiated list. */
.cases-group{
  margin:30px 0 0;
  font-size:10.5px;font-weight:500;
  letter-spacing:.15em;text-transform:uppercase;
  color:rgba(255,255,255,.42);
  display:flex;align-items:center;gap:12px;
}
.cases-group::after{
  content:"";flex:1;height:1px;
  background:linear-gradient(90deg,rgba(255,255,255,.16),transparent);
}
.cases-group:first-of-type{margin-top:26px}
.cases-group + .cases{margin-top:13px}
.cases{margin-top:26px;display:grid;gap:14px}
@media(min-width:820px){.cases{grid-template-columns:repeat(3,1fr)}}
.case{
  display:flex;flex-direction:column;
  background:rgba(255,255,255,.04);
  border:1px solid rgba(255,255,255,.1);
  border-radius:16px;
  padding:20px 18px;
  transition:border-color .25s ease,background .25s ease;
}
.case:hover{border-color:rgba(255,255,255,.22);background:rgba(255,255,255,.07)}
.case-k{margin:0 0 10px;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.45)}
.case h3{margin:0 0 9px;font-size:17px;font-weight:600;letter-spacing:-.02em}
.case-d{margin:0;font-size:14px;line-height:1.55;color:rgba(255,255,255,.66)}
.case blockquote{
  margin:18px 0 0;padding:0 0 0 13px;
  border-left:2px solid rgba(255,255,255,.28);
  font-size:14px;line-height:1.55;color:rgba(255,255,255,.86);
}
.case-by{margin:12px 0 0;font-size:11.5px;letter-spacing:.06em;color:rgba(255,255,255,.5)}
/* In-build cards carry a live link instead of a quote; margin-top:auto pins it
   to the bottom so the three line up regardless of copy length. */
.case--build{
  background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.022));
}
.case-link{
  margin-top:auto;padding-top:16px;
  display:inline-flex;align-items:center;gap:7px;
  min-height:24px;
  font-size:12.5px;font-weight:500;letter-spacing:.01em;
  color:rgba(255,255,255,.62);
  transition:color .2s ease;
}
.case-link:hover,.case-link:focus-visible{color:#fff}
.case-arrow{
  font-size:11px;line-height:1;
  transition:transform .2s cubic-bezier(.22,1,.36,1);
}
.case-link:hover .case-arrow{transform:translate(2px,-2px)}
@media (prefers-reduced-motion:reduce){.case-arrow{transition:none}}

.panel-cta{margin-top:28px;display:flex;flex-wrap:wrap;align-items:center;gap:12px 18px}
.panel-cta--stack{margin-top:24px}
.pbtn{
  display:inline-flex;align-items:center;justify-content:center;
  height:46px;padding:0 24px;border-radius:999px;
  font-size:14.5px;font-weight:600;letter-spacing:-.01em;
  transition:transform .2s cubic-bezier(.22,1,.36,1),background .2s ease,box-shadow .2s ease,color .2s ease;
}
.pbtn-p{
  background:#fff;color:#000;
  box-shadow:0 0 0 1px rgba(255,255,255,.15),0 0 22px rgba(255,255,255,.28);
}
.pbtn-p:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 0 0 1px rgba(255,255,255,.3),0 0 34px rgba(255,255,255,.42)}
.pbtn-s{
  background:transparent;color:rgba(255,255,255,.78);
  border:1px solid rgba(255,255,255,.22);font-weight:500;
}
.pbtn-s:hover{color:#fff;border-color:rgba(255,255,255,.5)}
.panel-cta--stack .pbtn{width:100%}
.panel-note{margin:18px 0 0;font-size:12.5px;color:rgba(255,255,255,.45)}

/* nav triggers are <button> now — keep them identical to the links */
.nav-link,.mobile-link{font-family:var(--font-sans);text-align:center;width:100%}
.nav-list .nav-link{width:auto}
button.signin{font-family:var(--font-sans)}

body.panel-open{overflow:hidden}

@keyframes panelIn{
  from{opacity:0;transform:translate(-50%,-50%) translateY(12px) scale(.97)}
  to{opacity:1;transform:translate(-50%,-50%) translateY(0) scale(1)}
}

@media (prefers-reduced-motion:reduce){
  .panel,.panel-scrim{animation:none!important}
}
