@font-face{font-family:'Montserrat';font-style:normal;font-weight:400;
  font-display:swap;src:url('../fonts/montserrat-400.woff2') format('woff2')}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:500;
  font-display:swap;src:url('../fonts/montserrat-500.woff2') format('woff2')}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:600;
  font-display:swap;src:url('../fonts/montserrat-600.woff2') format('woff2')}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:700;
  font-display:swap;src:url('../fonts/montserrat-700.woff2') format('woff2')}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:800;
  font-display:swap;src:url('../fonts/montserrat-800.woff2') format('woff2')}


  /* ============================================================
     PALETTE — Taste Studios brand colours, applied as a theme
     token set that each section re-declares. Sections alternate
     light / tint / dark / red, Apple-style, and every component
     reads the tokens rather than hard-coding a colour.

       Brand Red      #CC0000   emphasis, headlines, CTAs
       Brand Silver   #B0B0B0   supporting, subtle accents
       Charcoal       #2D2D2D   text on light
       Mid Gray       #666666   secondary text, captions
       Off-White      #F5F5F5   background tint, cards, panels

     Two deviations, both forced by contrast (flagged to Nikko):
       - Brand Red is 2.34:1 on charcoal, so dark sections use a
         lightened red #FF3333 (5.33:1). Brand Red stays exact
         everywhere it sits on a light ground.
       - Brand Silver is 1.99:1 on Off-White, so silver is only
         ever used on dark grounds.
     ============================================================ */
  :root{
    --red:#CC0000; --red-lift:#FF3333; --silver:#B0B0B0;
    --charcoal:#2D2D2D; --mid:#666666; --off:#F5F5F5;
    --ink-deep:#111111; --dark:#161616; --dark-2:#1F1F1F;
    --ease:cubic-bezier(.22,.68,.28,1);
    --soft:cubic-bezier(.16,1,.3,1);   /* long tail, no snap at the end */
    /* fallbacks so anything outside a themed section still resolves these */
    --acc:var(--red); --acc-sm:var(--red); --fg:var(--charcoal); --fg2:var(--mid);
  }

  /* light ground (default) */
  .s{
    --bg:#FFFFFF; --fg:var(--charcoal); --fg2:var(--mid); --faint:var(--mid);
    --acc:var(--red); --on-acc:#FFFFFF;
    --card:var(--off); --card-hov:#EDEDED; --card-ln:rgba(45,45,45,.10);
    --hair:rgba(45,45,45,.13); --hair-2:rgba(45,45,45,.26);
    --hatch:rgba(45,45,45,.07);
  }
  .s.tint{ --bg:var(--off); --card:#FFFFFF; --card-hov:#FAFAFA; }
  .s.dark{
    --bg:var(--dark); --fg:var(--off); --fg2:var(--silver); --faint:#8A8A8A;
    --acc:var(--red-lift); --on-acc:#151515;
    --acc-sm:#FF5555;                /* 12px labels need more than --acc gives */
    --card:var(--dark-2); --card-hov:#282828; --card-ln:rgba(245,245,245,.11);
    --hair:rgba(245,245,245,.13); --hair-2:rgba(245,245,245,.26);
    --hatch:rgba(245,245,245,.045);
  }
  .s.red{
    --bg:var(--red); --fg:#FFFFFF; --fg2:#FFFFFF; --faint:#FFFFFF;
    --acc:#FFFFFF; --on-acc:var(--red);
    --hair:rgba(255,255,255,.24); --hair-2:rgba(255,255,255,.4);
  }
  .s{background:var(--bg);color:var(--fg)}

  *{box-sizing:border-box}
  html{scroll-behavior:smooth}
  /* clip, not hidden: 'hidden' turns <body> into a scroll container and breaks
     the hero's position:sticky pin; 'clip' stops sideways overflow the same way
     without that side effect. */
  body{margin:0;background:#FFFFFF;color:var(--charcoal);
    font-family:'Montserrat',system-ui,-apple-system,sans-serif;font-size:1rem;line-height:1.6;
    -webkit-font-smoothing:antialiased;overflow-x:clip}
  p{margin:0}
  .wrap{max-width:1220px;margin:0 auto;padding:0 30px}
  @media (max-width:640px){.wrap{padding:0 20px}}

  .banner{background:var(--ink-deep);border-bottom:1px solid rgba(255,255,255,.12);
    padding:9px 20px;font-size:0.75rem;letter-spacing:.12em;text-transform:uppercase;
    font-weight:700;color:#9A9A9A;text-align:center}
  .banner b{color:var(--red-lift)}

  /* ============ MOTION ============
     One rAF scroll loop drives everything scroll-linked: parallax
     inside image frames, the hero's depth fade, the word-by-word
     north star, the active section marker, the progress bar.
     Entrances are IntersectionObserver + CSS transitions.
     The marquee is a pure CSS animation.
     Everything switches off under prefers-reduced-motion. */

  .prog{position:fixed;top:0;left:0;height:2px;width:0;background:var(--red);z-index:90}

  [data-rise]{opacity:0;transform:translate3d(0,42px,0) scale(.99);
    transition:opacity .55s var(--ease),transform .66s var(--soft);transition-delay:var(--d,0ms)}
  [data-rise].in{opacity:1;transform:none}
  .line{display:block;overflow:hidden;padding-bottom:.1em}
  .line>span{display:block;transform:translateY(112%);
    transition:transform .6s var(--soft);transition-delay:var(--d,0ms)}
  .lit .line>span{transform:none}

  /* Image frame: the clip reveals the frame, the inner layer parallaxes.
     Two elements so the reveal and the parallax never fight over the
     same transform. The observer watches the wrapper, never the clipped
     box, because a fully clipped element reports no intersection. */
  .frame{position:relative;overflow:hidden;border:1px solid var(--hair)}
  .media .frame{clip-path:inset(0 0 100% 0);transition:clip-path .58s var(--ease)}
  .media.in .frame{clip-path:inset(0 0 0 0)}
  .frame .slot{position:absolute;inset:0;border:none}
  /* the 1.18 base scale exists only to give the parallax layer room to
     travel without exposing an edge, so it applies only where it parallaxes */
  .frame .slot[data-par]{transform:scale(1.18);will-change:transform}
  /* the placeholder .slot carries padding and a hatch for its label layout;
     an image must reset both or it paints inset inside its own background */
  img.slot{object-fit:cover;display:block;width:100%;height:100%;
    padding:0;background:none;gap:0}
  /* parallax is desktop-only, so don't pay for the layer anywhere else */
  /* Parallax is desktop-only; off touch/narrow, drop the base zoom too so the
     image sits at its true framing instead of a cropped 1.18 with no motion. */
  @media (pointer:coarse),(max-width:640px){.frame .slot[data-par]{transform:none;will-change:auto}}

  /* no static will-change here: the loop sets it only while the hero is
     actually moving, so the layer is not promoted for the whole page */

  /* North star, word by word */
  /* .70 not .34: an unlit word is a resting state if the reader stops here,
     so it has to clear 3:1 for large text on Brand Red on its own */
  .rw span{opacity:.70;transition:opacity .32s var(--ease)}
  .rw span.on{opacity:1}

  .mq{overflow:hidden;background:var(--ink-deep);padding:34px 0;position:relative}
  /* WCAG 2.2.2: motion that starts on its own and runs past 5s needs a way to
     stop it. Hidden until hover or keyboard focus, so the resting design is
     unchanged, and it stays visible while paused so it can be restarted. */
  .mq-toggle{position:absolute;right:16px;top:50%;transform:translateY(-50%);
    width:36px;height:36px;border-radius:50%;padding:0;cursor:pointer;
    display:grid;place-items:center;font:inherit;color:var(--off);
    background:rgba(17,17,17,.78);border:1px solid rgba(245,245,245,.34);
    backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
    opacity:0;transition:opacity .25s var(--ease),border-color .2s}
  .mq:hover .mq-toggle,.mq:focus-within .mq-toggle,
  .mq-toggle[aria-pressed="true"]{opacity:1}
  .mq-toggle:hover{border-color:var(--off)}
  .mq-toggle svg{width:13px;height:13px;fill:currentColor;display:block}
  .mq-toggle .ico-play{display:none}
  .mq-toggle[aria-pressed="true"] .ico-play{display:block}
  .mq-toggle[aria-pressed="true"] .ico-pause{display:none}
  .mq-track.paused{animation-play-state:paused}
  .mq-track{display:flex;align-items:center;gap:34px;width:max-content;
    animation:slide 40s linear infinite}
  .mq-track .w{font-family:'Montserrat',system-ui,sans-serif;font-weight:800;font-size:clamp(1.625rem,4.4vw,3.5rem);
    letter-spacing:-.024em;text-transform:lowercase;color:var(--off);white-space:nowrap;line-height:1.02}
  /* alternate solid and outlined so the line has rhythm rather than
     one flat run of grey */
  .mq-track .w.o{color:transparent;-webkit-text-stroke:1px rgba(245,245,245,.5)}
  @supports not (-webkit-text-stroke:1px #000){.mq-track .w.o{color:rgba(245,245,245,.5)}}
  .mq-track .dot{color:var(--red-lift);font-size:clamp(0.8125rem,1.4vw,1.125rem);line-height:1}
  @keyframes slide{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
  /* no hover auto-pause: with an explicit control it made "resume" look
     broken, because the cursor is still over the band after the click */

  @media (prefers-reduced-motion:reduce){
    html{scroll-behavior:auto}
    [data-rise],[data-rise].in{opacity:1;transform:none;transition:none}
    .line>span{transform:none;transition:none}
    .media .frame{clip-path:none;transition:none}
    .frame .slot{transform:none}
    .rw span{opacity:1}
    .mq-track{animation:none;width:auto;flex-wrap:wrap}
    .mq-toggle{display:none}          /* nothing is moving, so nothing to pause */
    .step[open] .step-body{transition:none;grid-template-rows:1fr}
    .step .tag,.step[open] .tag{opacity:1;transform:none;transition:none;transition-delay:0ms}
    .card,.brand,.btn,.nav-toggle,.nav-links{transition:none}
    .sec>.wrap{transform:none !important;opacity:1 !important}
    .prog{display:none}
  }
  /* Honor the two other environment signals Apple bakes in: when the reader
     asks for less transparency, drop the blur and make the floating chrome
     solid; when they ask for more contrast, solidify it and firm the edge. */
  @media (prefers-reduced-transparency:reduce){
    .nav{backdrop-filter:none;-webkit-backdrop-filter:none}
    .nav.stuck{background:rgb(var(--nav-bg))}
    .mq-toggle{backdrop-filter:none;-webkit-backdrop-filter:none;background:#111}
  }
  @media (prefers-contrast:more){
    .nav.stuck{background:rgb(var(--nav-bg));border-bottom-color:rgba(var(--nav-ln),.5)}
  }

  /* ============ TYPE ============ */
  h1,h2,h3,h4{font-family:'Montserrat',system-ui,sans-serif;margin:0;color:var(--fg);text-wrap:balance}
  h1{font-size:clamp(2.25rem,6.6vw,5rem);font-weight:700;line-height:1.04;letter-spacing:-.026em}
  h2{font-size:clamp(1.875rem,4.8vw,3.625rem);font-weight:700;line-height:1.06;letter-spacing:-.022em}
  h3{font-size:1.25rem;font-weight:700;line-height:1.28;letter-spacing:-.008em}
  h4{font-size:0.96875rem;font-weight:700;letter-spacing:-.003em}
  .accent{color:var(--acc)}
  .body{font-size:1.09375rem;line-height:1.62;color:var(--fg2);max-width:62ch}
  .body.lg{font-size:1.25rem;line-height:1.5;color:var(--fg);max-width:56ch}
  .small{font-size:0.90625rem;line-height:1.6;color:var(--fg2)}
  .eyebrow{font-size:0.75rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
    color:var(--faint);margin:0 0 20px}

  /* Sections settle in rather than hard-cutting: the loop drives a short
     lift and fade on the content block as the boundary crosses the
     viewport, then clears the inline styles so no layer is left promoted. */
  .sec>.wrap{transform:translate3d(0,0,0)}

  /* ============ S.0x spine ============ */
  .sec{padding:112px 0}
  @media (max-width:640px){.sec{padding:76px 0}}
  .rail{display:grid;grid-template-columns:110px 1fr;gap:34px;align-items:stretch}
  @media (max-width:900px){.rail{grid-template-columns:1fr;gap:16px}}
  .scol{position:relative}
  .snum{position:sticky;top:104px;font-family:'Montserrat',system-ui,sans-serif;font-weight:700;
    font-size:0.8125rem;letter-spacing:.14em;color:var(--faint);font-variant-numeric:tabular-nums;
    display:flex;align-items:center;gap:10px;transition:color .4s var(--ease)}
  .snum::after{content:'';flex:1;height:1px;background:var(--hair);transition:background .4s var(--ease)}
  .sec.active .snum{color:var(--acc)}
  .sec.active .snum::after{background:var(--acc)}
  @media (max-width:900px){.snum{position:static}.snum::after{display:none}}

  /* ============ nav ============ */
  /* The nav reads the section passing underneath it and re-themes, so it
     never sits on a light section as a heavy grey slab. .on-light is set
     by the scroll loop from the section currently under the bar. */
  .nav{position:sticky;top:0;z-index:40;
    --nav-bg:17,17,17; --nav-fg:#F5F5F5; --nav-fg2:var(--silver);
    --nav-acc:var(--red-lift); --nav-btn-fg:#151515; --nav-ln:255,255,255;
    background:var(--ink-deep);backdrop-filter:blur(16px) saturate(1.4);
    -webkit-backdrop-filter:blur(16px) saturate(1.4);border-bottom:1px solid transparent;
    transition:background .55s var(--ease),border-color .55s var(--ease),
      color .55s var(--ease)}
  .nav.on-light{--nav-bg:255,255,255; --nav-fg:var(--charcoal); --nav-fg2:var(--mid);
    --nav-acc:var(--red); --nav-btn-fg:#FFFFFF; --nav-ln:45,45,45}
  .nav.stuck{background:rgba(var(--nav-bg),.93);border-bottom-color:rgba(var(--nav-ln),.10)}
  /* Scroll-edge effect (Apple): a soft fade where content passes under the
     floating chrome, in place of a hard divider. Tinted with the nav's own
     ground so it reads correctly over both light and dark sections. */
  .nav::after{content:'';position:absolute;left:0;right:0;top:100%;height:14px;
    pointer-events:none;opacity:0;transition:opacity .55s var(--ease);
    background:linear-gradient(rgba(var(--nav-bg),.5),rgba(var(--nav-bg),0))}
  .nav.stuck::after{opacity:1}
  .nav-in{max-width:1220px;margin:0 auto;padding:0 30px;height:68px;display:flex;
    align-items:center;justify-content:space-between;gap:20px}
  /* ---- wordmark. Default is the supplied mark; data-mark="type" on <html>
     switches to the Montserrat lockup. Two logo files because the mark's
     Brand Silver measures 1.99:1 on white: exempt as a logo, but weak. ---- */
  .mark{display:flex;align-items:center;text-decoration:none;border:0}
  .mark-logo{height:26px;width:auto;display:none}
  .mark-type{display:none;font-family:'Montserrat',system-ui,sans-serif;font-weight:700;font-size:0.9375rem;
    letter-spacing:.055em;text-transform:uppercase;white-space:nowrap;
    color:var(--nav-fg);transition:color .55s var(--ease)}
  .mark-type i{font-style:normal;color:var(--nav-acc);margin-left:.34em;
    transition:color .55s var(--ease)}
  [data-mark="logo"] .mark-logo-dark{display:block}
  [data-mark="logo"] .nav.on-light .mark-logo-dark{display:none}
  [data-mark="logo"] .nav.on-light .mark-logo-light{display:block}
  [data-mark="type"] .mark-type{display:block}

  /* <picture> must not become the positioned box; the <img> stays the .slot */
  .frame picture{display:contents}

  /* ---- decision switches, all set on <html> ---- */
  [data-headings="caps"] h1,[data-headings="caps"] h2{
    text-transform:uppercase;letter-spacing:.005em}
  [data-darks="charcoal"] .s.dark{
    --bg:#2D2D2D;--card:#2D2D2D;--card-hov:#333333;
    --card-ln:rgba(176,176,176,.5);--hair:rgba(176,176,176,.35);--hair-2:rgba(176,176,176,.6)}
  [data-darks="charcoal"] .s.dark.hero,[data-darks="charcoal"] .mq,
  [data-darks="charcoal"] .banner{--bg:#2D2D2D;background:#2D2D2D}
  .nav-links{display:flex;gap:22px;font-size:0.84375rem;font-weight:600;color:var(--nav-fg2);
    transition:color .55s var(--ease)}
  /* padding lifts these to the 24px minimum target size */
  .nav-links a{color:inherit;text-decoration:none;padding:6px 4px;display:inline-block;
    background:linear-gradient(currentColor,currentColor) no-repeat 0 100%/0% 1.5px;
    transition:color .2s,background-size .3s var(--ease)}
  .nav .mobile-nav-cta,.nav-toggle{display:none}
  @media (hover:hover) and (pointer:fine){
    .nav-links a:hover{color:var(--nav-fg);background-size:100% 1.5px}}
  @media (max-width:860px){
    .nav-in{position:relative}
    .nav .nav-primary{display:none}
    .nav-toggle{display:grid;width:44px;height:44px;padding:0;border:1px solid rgba(var(--nav-ln),.22);
      background:transparent;color:var(--nav-fg);place-content:center;gap:7px;cursor:pointer;
      transition:border-color .2s,transform .1s var(--ease)}
    .nav-toggle:active{transform:scale(.96)}
    .nav-toggle span{display:block;width:20px;height:2px;background:currentColor;
      transition:transform .28s var(--soft)}
    .nav-toggle[aria-expanded="true"] span:first-child{transform:translateY(4.5px) rotate(45deg)}
    .nav-toggle[aria-expanded="true"] span:last-child{transform:translateY(-4.5px) rotate(-45deg)}
    .nav-links{position:absolute;top:100%;left:0;right:0;display:flex;flex-direction:column;gap:0;
      padding:10px 20px 20px;background:rgba(var(--nav-bg),.97);border-bottom:1px solid rgba(var(--nav-ln),.14);
      box-shadow:0 18px 36px rgba(0,0,0,.14);transform:translateY(-8px);transform-origin:top right;
      opacity:0;visibility:hidden;pointer-events:none;
      transition:opacity .22s var(--ease),transform .28s var(--soft),visibility 0s linear .28s}
    .nav.nav-open .nav-links{transform:none;opacity:1;visibility:visible;pointer-events:auto;
      transition:opacity .22s var(--ease),transform .28s var(--soft),visibility 0s}
    .nav-links a{display:flex;align-items:center;min-height:48px;padding:10px 2px;
      border-top:1px solid rgba(var(--nav-ln),.1);background:none}
    .nav-links a:first-child{border-top:0}
    .nav-links .mobile-nav-cta{display:flex;justify-content:center;margin-top:10px;padding:12px 18px;
      min-height:48px;background:var(--nav-acc);color:var(--nav-btn-fg);border:0;font-weight:700}
  }

  .btn{display:inline-flex;align-items:center;gap:9px;padding:14px 26px;border-radius:2px;
    font-family:'Montserrat',system-ui,sans-serif;font-size:0.875rem;font-weight:700;text-decoration:none;
    border:1px solid transparent;transition:transform .2s var(--ease),border-color .2s,background .2s,color .2s}
  @media (hover:hover) and (pointer:fine){.btn:hover{transform:translateY(-2px)}}
  /* Respond on press, not release — instant tactile feedback (Apple: directness) */
  .btn:active{transform:scale(.97);transition-duration:.1s}
  .btn-solid{background:var(--acc);color:var(--on-acc)}
  .btn-ghost{background:transparent;color:var(--fg);border-color:var(--hair-2)}
  .btn-ghost:hover{border-color:var(--fg)}
  .btn-sm{padding:10px 18px;font-size:0.8125rem}
  .nav .btn-solid{background:var(--nav-acc);color:var(--nav-btn-fg);
    transition:background .55s var(--ease),color .55s var(--ease),transform .2s var(--ease)}

  /* ============ hero ============ */
  .s.dark.hero{--bg:var(--ink-deep)}
  .hero{padding:112px 0 100px}
  @media (max-width:640px){.hero{padding:64px 0 60px}}
  .hero h1{max-width:15ch}
  .cta-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:40px}

  /* ============ image slots ============ */
  .slot{background:repeating-linear-gradient(135deg,var(--hatch) 0 10px,transparent 10px 20px),var(--card);
    display:flex;flex-direction:column;align-items:center;justify-content:center;
    text-align:center;padding:26px;gap:7px}
  .slot .k{font-size:0.75rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--acc)}
  .slot .d{font-size:0.8125rem;color:var(--fg2);max-width:34ch;line-height:1.5}
  .slot .r{font-size:0.75rem;color:var(--faint);font-variant-numeric:tabular-nums}
  .media{margin-top:66px}
  /* full-bleed: the hero image spans the whole viewport width (body has
     overflow-x:clip, so the 100vw break-out never adds a horizontal scrollbar) */
  .media-hero{position:relative;left:50%;transform:translateX(-50%);width:100vw}
  .media-hero .frame{aspect-ratio:21/9;border-left:0;border-right:0}
  @media (max-width:640px){.media-hero .frame{aspect-ratio:4/3}}
  .hero-video{width:100%;height:100%;object-fit:cover;background:var(--card)}

  .split{display:grid;grid-template-columns:1fr 1fr;gap:38px;align-items:center;margin-top:40px}
  @media (max-width:820px){.split{grid-template-columns:1fr;gap:24px}}
  .split .media{margin-top:0}
  .split .frame{aspect-ratio:3/2}

  /* ============ company story ============ */
  .about-grid{display:grid;grid-template-columns:1fr;gap:44px;margin-top:54px}
  .about-story{border-top:1px solid var(--hair-2);padding-top:24px}
  .about-story h3{font-size:clamp(1.3125rem,2.4vw,1.75rem);max-width:24ch;margin-bottom:14px}
  .about-story .body{font-size:1rem;max-width:70ch}
  /* the lead story carries the crucial "what we do" message, so give it room */
  .about-lead h3{font-size:clamp(1.4375rem,2.8vw,2rem)}
  .about-lead .body{font-size:1.09375rem}
  /* partner / incubator logo strip */
  .partners{display:flex;flex-wrap:wrap;align-items:center;gap:clamp(28px,4vw,52px);
    margin-top:30px;opacity:.85}
  .partners img{height:clamp(30px,3.4vw,44px);width:auto;display:block}
  @media (max-width:760px){.partners{gap:26px}.partners img{height:30px}}

  /* ============ cards ============ */
  .grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:44px}
  .grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:44px}
  @media (max-width:900px){.grid3,.grid4{grid-template-columns:1fr 1fr}}
  @media (max-width:600px){.grid3,.grid4{grid-template-columns:1fr}}
  .card{background:transparent;border:0;border-top:1px solid var(--hair-2);
    padding:26px 0 30px;transition:border-color .25s var(--ease),transform .25s var(--ease)}
  @media (hover:hover) and (pointer:fine){
    .card:hover{border-color:var(--acc);transform:translateY(-3px)}}
  .cn{font-family:'Montserrat',system-ui,sans-serif;font-weight:700;font-size:0.75rem;letter-spacing:.14em;
    color:var(--acc);display:block;margin-bottom:18px}
  .card h3{margin-bottom:10px}

  .brand{display:flex;flex-direction:column;text-decoration:none;color:inherit;
    background:var(--card);border:1px solid var(--card-ln);
    transition:border-color .25s,transform .25s var(--ease)}
  .brand:hover{border-color:var(--hair-2)}
  @media (hover:hover) and (pointer:fine){.brand:hover{transform:translateY(-4px)}}
  .brand:active{transform:scale(.99);transition-duration:.1s}
  .brand .frame{aspect-ratio:3/2;border:none;border-bottom:1px solid var(--card-ln)}
  .brand-body{padding:26px 26px 28px}
  .brand h3{margin-bottom:8px}
  .go{margin-top:18px;font-family:'Montserrat',system-ui,sans-serif;font-size:0.75rem;font-weight:700;
    letter-spacing:.12em;text-transform:uppercase;color:var(--acc-sm);display:inline-block}

  /* Both brands carry equal visual weight. Matching card geometry keeps the
     pair predictable across viewports while contain preserves every label. */
  .portfolio{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:44px}
  .portfolio .brand{overflow:hidden;height:100%}
  .portfolio .brand .frame{aspect-ratio:1;min-height:0}
  .portfolio .brand-body{display:flex;flex:1;flex-direction:column}
  .portfolio .go-link{align-self:flex-start;margin-top:auto;padding-top:18px}
  .portfolio .slot{object-fit:contain}
  .portfolio .brand-photo .slot{object-fit:cover}
  .portfolio .brand-graphic .frame{background:#FBF9F1}
  /* Both artworks are cream-background graphics with edge text that must not be
     cropped, but one is square and one is landscape. An equal cream mat around
     each makes them read as a matched, centred pair instead of one bleeding to
     the edge while the other letterboxes. */
  .portfolio .brand-graphic .slot{padding:6%}
  .portfolio-heading{font-size:clamp(1.625rem,3.2vw,2.5rem);line-height:1.08;
    letter-spacing:-.018em;margin-top:76px}
  .product-benefits{margin-top:36px}
  .distribution{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);
    gap:48px;align-items:start;border-top:1px solid var(--hair-2);margin-top:68px;padding-top:34px}
  .distribution h3{font-size:clamp(1.5625rem,3vw,2.3125rem);line-height:1.1;max-width:18ch}
  .distribution .body{font-size:1rem}
  @media (max-width:900px){.distribution{grid-template-columns:1fr;gap:20px}}
  @media (max-width:700px){
    .portfolio{grid-template-columns:1fr}
  }

  /* ============ careers ============ */
  .career-block{margin-top:10px}
  .career-areas{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--hair);
    margin-top:28px}
  .career-area{padding:25px 28px 27px 0;border-bottom:1px solid var(--hair)}
  .career-area:nth-child(even){padding-left:28px;padding-right:0;border-left:1px solid var(--hair)}
  .career-area h3,.career-area h4{margin-bottom:6px}
  .career-next{display:grid;grid-template-columns:1fr 1fr;gap:54px;border-top:1px solid var(--hair-2);
    margin-top:66px;padding-top:44px}
  .career-next h3{font-size:clamp(1.4375rem,2.8vw,2.125rem);line-height:1.12;margin-bottom:16px}
  .career-next .body{font-size:1rem}
  .career-next-page{margin-top:0;padding-top:0;border-top:0}
  .career-next-page h2{font-size:clamp(1.8125rem,4.2vw,3.125rem);margin-bottom:18px}
  .career-hero h1{max-width:13ch}
  /* Full-team photo band: shares the hero's ink ground so it reads as one
     unit, and sits outside #heroInner so it never inherits the hero's
     scroll-out fade (which was dimming it as it reached centre). */
  .s.dark.career-team{--bg:var(--ink-deep)}
  .career-team{padding:8px 0 clamp(64px,10vw,110px)}
  /* meet-the-founders feature: a portrait of the two founders beside a short intro */
  .career-founders{padding:clamp(72px,10vw,112px) 0}
  .career-founders .frame{aspect-ratio:5/4}
  .career-band h2{max-width:19ch}
  .career-page [aria-current="page"]{color:var(--nav-fg);border-bottom:1px solid var(--nav-acc)}
  @media (max-width:760px){
    .career-areas,.career-next{grid-template-columns:1fr}
    .career-area,.career-area:nth-child(even){padding:22px 0;border-left:0}
    .career-next{gap:42px}
  }

  /* ============ process accordion ============ */
  .steps{margin-top:44px;border-top:1px solid var(--hair)}
  .step{border-bottom:1px solid var(--hair)}
  .step summary{list-style:none;cursor:pointer;padding:26px 4px;display:grid;
    grid-template-columns:64px 1fr 28px;align-items:center;gap:18px;transition:background .2s}
  .step summary::-webkit-details-marker{display:none}
  .step summary:hover{background:var(--hatch)}
  .step .sn{font-family:'Montserrat',system-ui,sans-serif;font-weight:700;font-size:0.8125rem;
    letter-spacing:.12em;color:var(--acc);font-variant-numeric:tabular-nums}
  .step h3{font-size:clamp(1.3125rem,2.6vw,1.875rem);font-weight:700;letter-spacing:-.016em}
  .step .chev{justify-self:end;width:16px;height:16px;position:relative;transition:transform .3s var(--ease)}
  .step .chev::before,.step .chev::after{content:'';position:absolute;background:var(--fg2);
    left:50%;top:50%;transform:translate(-50%,-50%)}
  .step .chev::before{width:16px;height:1.5px}
  .step .chev::after{width:1.5px;height:16px;transition:opacity .3s}
  /* + -> - : spin a half turn (the bar stays horizontal at the end) while the
     vertical stroke fades, so the open marker is a clean minus, not a pipe. */
  .step[open] .chev{transform:rotate(180deg)}
  .step[open] .chev::after{opacity:0}
  /* The panel animates on the GPU-friendly grid-template-rows track (0fr->1fr)
     rather than height, so no per-frame layout. All padding lives on the inner
     row (min-height:0 lets it collapse to a true zero) and the outer box clips
     it, so nothing jumps at the end of the transition. The grid rule is scoped
     to [open] so a closed <details> stays natively hidden with no JS. */
  .step-body{overflow:hidden}
  .step[open] .step-body{display:grid;grid-template-rows:1fr;
    transition:grid-template-rows .34s var(--ease)}
  .step[open] .step-body.shut{grid-template-rows:0fr}
  .step-inner{padding:0 4px 30px 96px;display:flex;flex-wrap:wrap;gap:9px;
    min-height:0;overflow:hidden}
  .step .tag{opacity:0;transform:translateY(8px);
    transition:opacity .4s var(--ease),transform .4s var(--ease),border-color .2s,color .2s}
  .step[open] .tag{opacity:1;transform:none}
  .step.closing .tag{opacity:0;transform:translateY(8px);transition-delay:0ms}
  .step[open] .tag:nth-child(1){transition-delay:60ms}
  .step[open] .tag:nth-child(2){transition-delay:110ms}
  .step[open] .tag:nth-child(3){transition-delay:160ms}
  .step[open] .tag:nth-child(4){transition-delay:210ms}
  @media (max-width:640px){.step-inner{padding-left:4px}.step summary{grid-template-columns:52px 1fr 20px;gap:12px}}
  .tag{border:1px solid var(--hair-2);padding:8px 15px;font-size:0.8125rem;color:var(--fg2);
    transition:border-color .2s,color .2s}
  .tag:hover{border-color:var(--acc);color:var(--fg)}

  /* ============ values ============ */
  .values{display:grid;grid-template-columns:repeat(auto-fit,minmax(172px,1fr));gap:18px;margin-top:44px}
  @media (max-width:1180px) and (min-width:601px){.values{grid-template-columns:repeat(3,1fr)}}
  @media (max-width:600px){.values{grid-template-columns:1fr}}
  .val{border-top:2px solid var(--acc);padding-top:20px}
  .val .vn{font-family:'Montserrat',system-ui,sans-serif;font-weight:700;font-size:0.75rem;letter-spacing:.14em;
    color:var(--faint);display:block;margin-bottom:12px}
  .val h4,.val .vh{margin-bottom:9px}
  /* semantic level and visual size kept separate: these sit under the
     section h2, so they must be h3, but they read at h4 scale */
  .vh{font-size:0.96875rem;font-weight:700;letter-spacing:-.006em}
  /* wide single-column variant: full-bleed 2px red rules stripe too hard,
     so the rule drops to a hairline and the number carries the red */
  .val-wide{border-top-width:1px;border-top-color:var(--hair-2)}
  .val-wide .vn{color:var(--acc)}
  .crit-row{grid-template-columns:repeat(3,1fr)}
  @media (max-width:760px){.crit-row{grid-template-columns:1fr;gap:14px}}
  .media-team{margin-top:48px}
  .media-team .frame{aspect-ratio:3/2}

  /* ============ founders ============ */
  .people{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:44px;max-width:780px}
  @media (max-width:600px){.people{grid-template-columns:1fr}}
  .person{background:var(--card);border:1px solid var(--card-ln)}
  .person .frame{aspect-ratio:4/5;border:none;border-bottom:1px solid var(--card-ln)}
  .person-body{padding:26px}
  .role{font-family:'Montserrat',system-ui,sans-serif;font-size:0.75rem;font-weight:700;letter-spacing:.13em;
    text-transform:uppercase;color:var(--acc);margin:8px 0 12px}

  /* ============ quotes ============ */
  .quotes{display:grid;grid-template-columns:1fr 1fr;gap:48px;margin-top:44px}
  @media (max-width:820px){.quotes{grid-template-columns:1fr;gap:34px}}
  .q{font-family:'Montserrat',system-ui,sans-serif;font-weight:500;font-size:clamp(1.1875rem,2.3vw,1.6875rem);
    line-height:1.38;letter-spacing:-.014em;color:var(--fg);margin:0 0 20px}
  .cite{font-size:0.75rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--acc)}

  /* ============ Phase-1 additions ============ */
  /* proof strip */
  .proof{padding:clamp(40px,6vw,66px) 0}
  .proof-strip{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:24px;text-align:center}
  .proof-strip li{display:flex;flex-direction:column;gap:8px;align-items:center}
  .proof-num{font-size:clamp(2.6rem,6.4vw,4.25rem);font-weight:800;letter-spacing:-.02em;line-height:1;color:var(--fg)}
  .proof-lbl{font-size:0.8125rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}
  @media (max-width:600px){.proof-strip{grid-template-columns:1fr;gap:30px}}
  /* channel lead-in line */
  .lead-in{font-size:1.09375rem;font-weight:600;color:var(--fg);margin-top:40px;max-width:56ch}
  /* supplier trial programme */
  .program-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:22px;margin-top:44px}
  .pstep{border-top:2px solid var(--acc);padding-top:18px}
  .pstep .cn{color:var(--acc);display:block;margin-bottom:12px}
  .pstep h3{font-size:1.0625rem;line-height:1.25;letter-spacing:-.01em;margin-bottom:8px}
  @media (max-width:820px){.program-steps{grid-template-columns:1fr 1fr}}
  @media (max-width:520px){.program-steps{grid-template-columns:1fr}}
  /* what we range list */
  .range-list{list-style:none;margin:34px 0 0;padding:0;max-width:60ch}
  .range-list li{position:relative;padding:16px 0 16px 30px;border-top:1px solid var(--hair);
    font-size:1.09375rem;color:var(--fg)}
  .range-list li:last-child{border-bottom:1px solid var(--hair)}
  .range-list li::before{content:"";position:absolute;left:2px;top:24px;width:9px;height:9px;
    border-radius:50%;background:var(--acc)}
  /* footer entity / trading line */
  .foot-entity{font-size:0.8125rem;color:var(--fg2);margin-bottom:6px}
  /* outbound link demoted from red CTA to plain text */
  .go-link{margin-top:18px;display:inline-block;font-size:0.85rem;font-weight:600;
    color:var(--fg2);border-bottom:1px solid var(--hair-2)}
  .brand:hover .go-link{color:var(--fg);border-bottom-color:var(--fg2)}
  /* other ways: two pillars */
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:44px}
  @media (max-width:640px){.grid2{grid-template-columns:1fr}}
  /* credibility merged sub-blocks */
  .cred-quotes{margin-top:60px;border-top:1px solid var(--hair-2);padding-top:40px}
  .cred-values{margin-top:56px;border-top:1px solid var(--hair-2);padding-top:34px}
  .cred-values>h3{font-size:clamp(1.3125rem,2.4vw,1.75rem);margin-bottom:18px}
  /* value icons (line icons, brand red). The subtle divider lets the icon carry the accent. */
  .cred-values .val{border-top-color:var(--hair-2);text-align:center}
  .val-ico{display:block;width:32px;height:32px;color:var(--acc);margin:2px auto 14px}
  .val-ico svg{width:100%;height:100%;display:block}
  /* header utility slot (hidden until launch) */
  .nav-utility{font-size:0.8125rem;font-weight:600;color:var(--nav-fg2);text-decoration:none;white-space:nowrap}
  .nav-utility:hover{color:var(--nav-fg)}
  @media (max-width:860px){.nav-utility{display:none}}

  /* ============ north star ============ */
  .band{padding:150px 0;text-align:center}
  @media (max-width:640px){.band{padding:96px 0}}
  .band h2{max-width:22ch;margin:0 auto}

  /* ============ contact ============ */
  .contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:48px;margin-top:44px}
  @media (max-width:820px){.contact-grid{grid-template-columns:1fr;gap:28px}}
  .dl{border-top:1px solid var(--hair);padding-top:18px;margin-top:18px}
  .dl .lbl{font-size:0.75rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
    color:var(--faint);margin-bottom:6px}
  .dl .v{font-size:1.125rem;color:var(--fg)}
  .dl a{color:inherit;text-decoration:none;border-bottom:1px solid var(--hair-2);
    display:inline-block;padding-block:2px}
  .dl a:hover{border-bottom-color:var(--acc)}
  .socials{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px}
  .socials a{display:inline-flex;align-items:center;min-height:36px;padding:7px 12px;
    border:1px solid var(--hair-2);color:var(--fg2);font-size:0.75rem;font-weight:700;
    letter-spacing:.06em;text-decoration:none;transition:border-color .2s,color .2s}
  .socials a:hover{border-color:var(--acc);color:var(--fg)}

  .foot{padding:40px 0 56px;color:var(--fg2);font-size:0.78125rem}
  .foot .rule{height:1px;background:var(--hair);margin-bottom:26px}
  .foot a{color:inherit;text-decoration:none;border-bottom:1px solid var(--hair-2);
    display:inline-block;padding-block:2px}
  .foot a:hover{color:var(--fg);border-bottom-color:var(--acc)}
  a:focus-visible,.btn:focus-visible,summary:focus-visible{outline:3px solid var(--acc);outline-offset:3px}
  .nav a:focus-visible,.nav .btn:focus-visible{outline-color:var(--nav-acc)}
  /* on the red band a red ring would vanish, so invert it there */
  .s.red a:focus-visible,.s.red .btn:focus-visible{outline-color:#FFFFFF}
