*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:16px;line-height:1.6;overflow-x:hidden}
body.is-loading{overflow:hidden}
body.reduced-motion *,body.reduced-motion *::before,body.reduced-motion *::after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}
::selection{background:rgba(139,77,255,.42);color:#fff}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
img{display:block;max-width:100%}
h1,h2,h3,h4,p,ul,dl,blockquote{margin:0}
ul{padding:0;list-style:none}
.container{width:var(--container);margin-inline:auto}
.section{position:relative;padding:132px 0;content-visibility:auto;contain-intrinsic-size:1px 900px}
.eyebrow{display:flex;align-items:center;gap:10px;color:var(--blue-2);font-size:.73rem;font-weight:800;letter-spacing:.15em;text-transform:uppercase}
.eyebrow::before{content:"";width:26px;height:1px;background:currentColor}
.gradient-text{background:var(--gradient);-webkit-background-clip:text;background-clip:text;color:transparent}
.outline-text{-webkit-text-stroke:1px rgba(255,255,255,.56);color:transparent}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip-link{position:fixed;top:8px;left:8px;z-index:9999;padding:10px 14px;background:#fff;color:#000;border-radius:8px;transform:translateY(-150%);transition:.2s}
.skip-link:focus{transform:none}
.site-noise{position:fixed;inset:0;z-index:90;pointer-events:none;opacity:.025;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.6'/%3E%3C/svg%3E")}
.pointer-light{position:fixed;width:520px;height:520px;border-radius:50%;left:var(--pointer-x,50%);top:var(--pointer-y,50%);transform:translate(-50%,-50%);background:radial-gradient(circle,rgba(83,102,255,.105),transparent 68%);pointer-events:none;z-index:0}
.scroll-progress{position:fixed;z-index:130;top:0;left:0;width:100%;height:2px;background:rgba(255,255,255,.04)}
.scroll-progress span{display:block;width:0;height:100%;background:var(--gradient)}
.reveal{opacity:0;transform:translateY(24px);transition:opacity .8s var(--ease),transform .8s var(--ease)}
.reveal.is-visible{opacity:1;transform:none}
.cursor{display:none;position:fixed;z-index:1000;pointer-events:none;left:0;top:0;transform:translate(-50%,-50%)}
.cursor--dot{width:5px;height:5px;background:#fff;border-radius:50%}
.cursor--ring{width:38px;height:38px;border:1px solid rgba(255,255,255,.5);border-radius:50%;transition:width .25s var(--ease),height .25s var(--ease),background .25s,border-color .25s}
.cursor--ring span{display:none;font-size:.61rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.cursor--ring.is-active{width:72px;height:72px;background:rgba(10,11,25,.75);border-color:rgba(255,255,255,.72);backdrop-filter:blur(12px);display:grid;place-items:center}
.cursor--ring.is-active span{display:block}
@media (hover:hover) and (pointer:fine){
  .cursor{display:block}
  body{cursor:none}
  a,button,input,select,textarea{cursor:none}

  /* A native <dialog> is rendered above normal z-index layers. Show the
     operating-system cursor while a case study is open, then restore the
     custom cursor as soon as it closes. */
  body.case-study-open{cursor:default}
  body.case-study-open .cursor{opacity:0;visibility:hidden}
  .project-modal:open,.project-modal:open *{cursor:auto!important}
  .project-modal:open a,.project-modal:open button{cursor:pointer!important}
  .project-modal::backdrop{cursor:default}
}
