/* Signify layer on top of the original Webflow build.
   Keeps the existing type (BDO Grotesk / Roboto Mono), beige and black.
   Motion lives in three places only: the first-visit intro, the scroll-driven hero, and the phone menu. */
:root{
  --sf-beige:#f8f7f3; --sf-ink:#0a0a0a; --sf-muted:#6b6b6b; --sf-line:#dddddd;
  --sf-navy:#10286b; --sf-accent:#9cc0f0; --sf-accent-ink:#4470b4; --sf-grey:#ecebe6;
  --sf-ease:cubic-bezier(.23,1,.32,1); --sf-ease-io:cubic-bezier(.77,0,.175,1); --sf-drawer:cubic-bezier(.32,.72,0,1);
}

/* logo in the nav pill */
.navbar .sf-logo{display:block;height:24px;width:auto}

/* floating nav pill, fixed from the first frame. During the intro it waits above the viewport and drops in on the reveal. */
.navbar{position:fixed!important;inset:0 0 auto!important;padding:14px 0 0!important;background:transparent!important;transition:transform 800ms var(--sf-ease)}
html.sf-intro .navbar{transform:translateY(-140%)}
.navbar .navbar_component{position:relative;max-width:min(980px,calc(100vw - 24px));margin-inline:auto;justify-content:space-between;background:rgba(12,12,12,.84);-webkit-backdrop-filter:blur(18px) saturate(140%);backdrop-filter:blur(18px) saturate(140%);border-radius:14px;padding:8px 8px 8px 18px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.09),0 24px 50px -28px rgba(0,0,0,.6)}
.navbar .navbar_logo-wrap{top:0}
/* phone menu: the nav pill itself grows down into the menu. Desktop keeps every link in the pill. */
.sf-burger,.sf-menu{display:none}
.sf-menu-scrim{position:fixed;inset:0;z-index:0;background:rgba(10,10,10,.45);opacity:0;pointer-events:none;transition:opacity 300ms ease}
@media (max-width:991px){
  .navbar .navbar_links-wrap{display:none!important}
  .navbar .navbar_logo-wrap{position:relative;z-index:2}
  .navbar .navbar_component{z-index:1}
  .sf-burger{position:relative;z-index:2;display:grid;place-content:center;gap:6px;width:40px;height:40px;margin-left:auto;padding:0;border:0;border-radius:10px;background:transparent;color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
  .sf-burger span{display:block;width:22px;height:2px;border-radius:2px;background:currentColor;transition:transform 380ms var(--sf-drawer)}
  .navbar.sf-open .sf-burger span:first-child{transform:translateY(4px) rotate(45deg)}
  .navbar.sf-open .sf-burger span:last-child{transform:translateY(-4px) rotate(-45deg)}
  html.sf-menu-on .navbar .navbar_component{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none}
  .sf-menu{display:block;position:absolute;inset:0 0 auto;z-index:1;padding:calc(var(--sf-bar,56px) + 6px) 18px 18px;border-radius:14px;background-color:rgba(12,12,12,.84);-webkit-backdrop-filter:blur(18px) saturate(140%);backdrop-filter:blur(18px) saturate(140%);box-shadow:inset 0 0 0 1px rgba(255,255,255,.09);clip-path:inset(0 0 calc(100% - var(--sf-bar,56px)) 0 round 14px);transition:clip-path 340ms var(--sf-ease),border-radius 340ms var(--sf-ease),background-color 340ms var(--sf-ease)}
  .navbar.sf-open .sf-menu{clip-path:inset(0 0 0 0 round 20px);border-radius:20px;background-color:rgba(12,12,12,.94);transition-duration:520ms;transition-timing-function:var(--sf-drawer)}
  .sf-menu-list{list-style:none;margin:0;padding:0}
  .sf-menu-list a{display:flex;align-items:baseline;gap:14px;padding:12px 2px;border-top:1px solid rgba(255,255,255,.08);color:#fff;text-decoration:none;font-size:clamp(30px,9vw,44px);font-weight:500;line-height:1.05;letter-spacing:-.035em}
  .sf-menu-n{font-family:'Roboto Mono',monospace;font-size:11px;letter-spacing:.06em;color:rgba(255,255,255,.45)}
  .sf-menu-list a[aria-current] .sf-menu-n{color:var(--sf-accent)}
  .sf-menu-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:16px;border-top:1px solid rgba(255,255,255,.08)}
  .sf-menu-tel{color:rgba(255,255,255,.82);font-size:16px;font-weight:500;text-decoration:none}
  .sf-menu-cta{display:inline-flex;align-items:center;height:44px;padding:0 22px;border-radius:999px;background:var(--sf-beige);color:var(--sf-ink);font-size:15px;font-weight:500;text-decoration:none;transition:transform 160ms var(--sf-ease)}
  .sf-menu-cta:active{transform:scale(.97)}
  .sf-menu-list li,.sf-menu-foot{opacity:0;transform:translateY(-8px);filter:blur(4px);transition:opacity 160ms ease,transform 160ms ease,filter 160ms ease}
  .navbar.sf-open .sf-menu-list li,.navbar.sf-open .sf-menu-foot{opacity:1;transform:none;filter:none;transition:opacity 420ms var(--sf-ease),transform 420ms var(--sf-ease),filter 420ms var(--sf-ease);transition-delay:calc(90ms + var(--i) * 45ms)}
  html.sf-menu-open{overflow:hidden}
  html.sf-menu-open .sf-menu-scrim{opacity:1;pointer-events:auto}
}
.sf-nav-tel{color:rgba(255,255,255,.82);font-size:14px;font-weight:500;letter-spacing:.01em;text-decoration:none;padding:0 14px;white-space:nowrap;transition:color 200ms ease}
.sf-nav-tel:hover{color:#fff}
@media (min-width:992px){
  .navbar .navbar_links-wrap{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;padding:0 0 0 8px;gap:12px}
}
@media (max-width:991px){
  .navbar .navbar_links-wrap{background:rgba(12,12,12,.92)}
  .sf-nav-tel{padding:12px 0;font-size:16px}
}

/* capabilities dropdown inside the nav, the container grows to hold it */

/* hero film: a frame sequence scrubbed by scroll on a canvas, pinned for three scenes. Nothing but the picture at first; the headlines rise over it. */
.sf-hero{position:relative;background:var(--sf-ink);color:#fff}
.sf-hero-pin{position:relative;height:100vh;height:100svh;overflow:hidden}
.sf-hero-stage{position:absolute;inset:0}
.sf-hero-media{position:absolute;inset:0;transition:transform 1800ms var(--sf-ease)}
html.sf-intro .sf-hero-media{transform:scale(1.08)}
.sf-hero-poster,.sf-film{position:absolute;inset:0;width:100%;height:100%}
.sf-hero-poster{object-fit:cover;object-position:50% 48%}
.sf-film{opacity:0;transition:opacity 400ms ease}
.sf-film.on{opacity:1}
.sf-hero-line .sf-w{display:inline-block;white-space:nowrap}
.sf-hero-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,10,10,.42) 0%,rgba(10,10,10,0) 28%,rgba(10,10,10,0) 60%,rgba(10,10,10,.55) 100%);pointer-events:none}
.sf-hero-dark{position:absolute;inset:0;background:var(--sf-ink);opacity:0;pointer-events:none}
.sf-hero-copy{position:absolute;inset:0;display:grid;place-items:end center;text-align:center;padding:0 clamp(16px,4vw,56px) clamp(72px,13vh,150px)}
.sf-hero-line{grid-area:1/1;margin:0;max-width:16ch;text-wrap:balance;font-size:clamp(38px,6.2vw,108px);line-height:1;letter-spacing:-.035em;font-weight:500;color:#fff;text-shadow:0 2px 40px rgba(0,0,0,.35);will-change:transform,opacity}
html.sf-js .sf-hero-line{opacity:0}
.sf-hero-line.sf-l2{max-width:none}
.sf-hero-title{font:inherit;letter-spacing:inherit;line-height:inherit;margin:0;color:inherit;text-shadow:inherit}
.sf-l3{display:grid;justify-items:center;gap:clamp(22px,3vw,40px)}
.sf-hero-sub{margin:0;font-family:"Roboto mono",monospace;font-size:clamp(11px,1vw,14px);letter-spacing:.22em;text-transform:uppercase;color:rgba(255,255,255,.78);text-shadow:none}
.sf-hero-cta{display:inline-flex;align-items:center;height:56px;padding:0 30px;border-radius:999px;background:#fff;color:var(--sf-ink);font-size:17px;font-weight:500;letter-spacing:-.01em;text-decoration:none;text-shadow:none;transition:transform 160ms var(--sf-ease),background-color 200ms ease}
.sf-hero-cta:hover{background:#f1efe9}
.sf-hero-cta:active{transform:scale(.97)}
/* static hero: reduced motion, or GSAP missing */
.sf-hero.sf-static .sf-hero-pin{height:auto;min-height:100svh}
.sf-hero.sf-static .sf-film{display:none}
.sf-hero.sf-static .sf-hero-copy{position:relative;min-height:100svh;padding-top:140px;padding-bottom:96px;gap:48px;align-content:center}
.sf-hero.sf-static .sf-hero-line{grid-area:auto;opacity:1!important}
.sf-hero.sf-static .sf-hero-dark{opacity:.55}

/* first-visit intro: light grey, faint panel outlines drifting, the mark pops in and the wordmark writes itself out, then it wipes up into the hero.
   html.sf-intro is set by an inline head script so the cover is there before first paint. */
html.sf-intro{overflow:hidden}
html.sf-intro::after{content:"";position:fixed;inset:0;z-index:10000;background:var(--sf-grey)}
.sf-intro-wrap{position:fixed;inset:0;z-index:10001;display:grid;place-items:center;background:var(--sf-grey);overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none;clip-path:inset(0 0 0 0);-webkit-clip-path:inset(0 0 0 0);transition:clip-path 900ms var(--sf-ease-io),-webkit-clip-path 900ms var(--sf-ease-io)}
.sf-intro-wrap.sf-intro-out{clip-path:inset(0 0 100% 0);-webkit-clip-path:inset(0 0 100% 0);pointer-events:none}
.sf-intro-bg{position:absolute;inset:-10%;width:120%;height:120%;pointer-events:none}
.sf-intro-bg rect{fill:none;stroke:rgba(10,10,10,.1);stroke-width:1;vector-effect:non-scaling-stroke}
.sf-intro-bg g{animation:sf-drift 7s ease-in-out infinite alternate}
.sf-intro-bg g:nth-child(2){animation-duration:9s;animation-direction:alternate-reverse}
.sf-intro-bg g:nth-child(3){animation-duration:11s}
@keyframes sf-drift{to{transform:translate(14px,-10px)}}
.sf-intro-mark{position:relative;transition:transform 700ms var(--sf-ease-io),opacity 500ms ease}
.sf-intro-out .sf-intro-mark{transform:translateY(-40px);opacity:0}
/* one lockup image: clipped to the mark at first (its left third), then the clip slides open and the wordmark writes out */
.sf-intro-mark img{display:block;width:clamp(200px,22vw,290px);height:auto;opacity:0;transform:scale(.6);clip-path:inset(0 67% 0 0);-webkit-clip-path:inset(0 67% 0 0);transition:opacity 520ms var(--sf-ease),transform 520ms var(--sf-ease)}
.sf-intro-in .sf-intro-mark img{opacity:1;transform:scale(1)}
.sf-intro-go .sf-intro-mark img{clip-path:inset(0 0 0 0);-webkit-clip-path:inset(0 0 0 0);transition:opacity 520ms var(--sf-ease),transform 520ms var(--sf-ease),clip-path 700ms var(--sf-ease),-webkit-clip-path 700ms var(--sf-ease)}

.sf-hero-cta:focus-visible,.sf-nav-tel:focus-visible,.sf-burger:focus-visible,.sf-menu a:focus-visible{outline:2px solid var(--sf-accent);outline-offset:3px}

/* shared motifs, one implementation for every section */
/* seam tab: a section's own colour tabs down into the one below it. Set --notch to the section's background. */
.sf-notch{position:relative;z-index:2}
.sf-notch::after{content:"";position:absolute;left:50%;bottom:-48px;width:min(62vw,960px);height:48px;transform:translateX(-50%);background:var(--notch,var(--sf-ink));clip-path:polygon(0 0,100% 0,calc(100% - 44px) 100%,44px 100%);pointer-events:none}
/* the hero ends in the same tab shape, but cut from the hero itself: beige shoulders rise into its bottom edge, so the tab is filled with the film */
.sf-dent::after{content:"";position:absolute;z-index:3;left:0;right:0;bottom:0;height:48px;--w:min(62vw,960px);--s:44px;background:var(--sf-beige);clip-path:polygon(0 0,calc(50% - var(--w) / 2) 0,calc(50% - var(--w) / 2 + var(--s)) 100%,calc(50% + var(--w) / 2 - var(--s)) 100%,calc(50% + var(--w) / 2) 0,100% 0,100% 100%,0 100%);pointer-events:none}
@media (max-width:767px){.sf-dent::after{height:28px;--w:72vw;--s:24px}}
@media (max-width:767px){.sf-notch::after{bottom:-28px;height:28px;width:72vw;clip-path:polygon(0 0,100% 0,calc(100% - 24px) 100%,24px 100%)}}
/* faint 1px grid behind logo walls and the like */
.sf-gridbg{background-image:linear-gradient(var(--sf-line) 1px,transparent 1px),linear-gradient(90deg,var(--sf-line) 1px,transparent 1px);background-size:var(--grid,140px) var(--grid,140px);background-position:center top}

/* small fixes */
.buy-template{display:none!important}
.w-dyn-empty{display:none!important}

@media (prefers-reduced-motion:reduce){
  .navbar,.sf-hero-media,.sf-film,.sf-menu,.sf-burger span{transition:none}
  .sf-menu-list li,.sf-menu-foot{transform:none!important;filter:none!important}
  .sf-intro-bg g{animation:none}
}
