:root{--color-bg:#fff;--color-text:#171717;--color-text-muted:#4d4d4d;--color-text-subtle:#666;--color-text-placeholder:gray;--color-border:#ebebeb;--color-card:#fff;--color-card-soft:#fafafa;--color-tag-border:#171717;--color-button:#171717;--color-button-text:#fff;--color-button-hover:#4d4d4d;--color-link:#0072f5;--shadow-card-hover:#ebebeb 0px 2px 2px 0px;--font-sans:"Geist", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif;--font-mono:"Geist Mono", ui-monospace, SFMono-Regular, "Roboto Mono", Menlo, Monaco, "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace;--fs-display:48px;--fs-h1:40px;--fs-h2:32px;--fs-h3:24px;--fs-body:18px;--fs-body-sm:16px;--fs-mono-cap:13px;--lh-display:1.05;--lh-heading:1.2;--lh-body:1.56;--ls-display:-.05em;--ls-h1:-.06em;--ls-h2:-.04em;--ls-h3:-.04em;--ls-tight:-.02em;--max-w:1280px;--gutter:80px;--gutter-md:48px;--gutter-sm:24px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:28px;--space-8:32px;--space-9:36px;--space-10:40px;--radius-sm:6px;--radius-md:10px;--radius-lg:15px;--radius-pill:9999px;--fs-nav:var(--fs-body-sm)}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga" 1;-webkit-font-feature-settings:"liga" 1;text-rendering:optimizelegibility;margin:0}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}img{max-width:100%;height:auto;display:block}h1,h2,h3,h4,h5,h6,p{margin:0}.container{width:100%;max-width:var(--max-w);padding:0 var(--gutter);margin:0 auto}@media (width<=900px){.container{padding:0 var(--gutter-md)}:root{--fs-display:40px;--fs-h1:32px;--fs-h2:26px;--fs-h3:22px;--fs-body:17px}}@media (width<=600px){.container{padding:0 var(--gutter-sm)}:root{--fs-display:32px;--fs-h1:26px;--fs-h2:22px;--fs-h3:20px;--fs-body:16px}}.display{font-family:var(--font-sans);font-size:var(--fs-display);font-weight:600;line-height:var(--lh-display);letter-spacing:var(--ls-display)}.h1{font-family:var(--font-sans);font-size:var(--fs-h1);font-weight:600;line-height:var(--lh-heading);letter-spacing:var(--ls-h1)}.h2{font-family:var(--font-sans);font-size:var(--fs-h2);font-weight:600;line-height:var(--lh-heading);letter-spacing:var(--ls-h2)}.h3{font-family:var(--font-sans);font-size:var(--fs-h3);letter-spacing:var(--ls-h3);font-weight:600;line-height:1.33}.muted{color:var(--color-text-muted)}.subtle{color:var(--color-text-subtle)}.tag-row{flex-wrap:wrap;gap:8px;display:flex}.tag{border:1px solid var(--color-tag-border);border-radius:var(--radius-pill);background:var(--color-bg);color:var(--color-text);font-family:var(--font-mono);font-size:var(--fs-mono-cap);text-transform:uppercase;letter-spacing:0;white-space:nowrap;font-feature-settings:"liga" 1, "tnum" 1;align-items:center;padding:4px 24px;font-weight:500;display:inline-flex}.button{border-radius:var(--radius-sm);background:var(--color-button);color:var(--color-button-text);font-family:var(--font-sans);font-size:var(--fs-body-sm);letter-spacing:var(--ls-tight);border:1px solid var(--color-button);justify-content:center;align-items:center;padding:8px 16px;font-weight:500;transition:background-color .2s,border-color .2s,color .2s;display:inline-flex}.button:hover{background:var(--color-button-hover);border-color:var(--color-button-hover)}.button.ghost{background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border)}.button.ghost:hover{background:var(--color-card-soft);border-color:var(--color-border);color:var(--color-text)}.site-header{z-index:50;background:var(--color-bg);border-bottom:1px solid #0000;position:sticky;top:0}.site-header__inner{justify-content:space-between;align-items:center;height:78px;display:flex}.site-header__brand{letter-spacing:-.01em;color:var(--color-text);font-size:16px;font-weight:600}.site-header__nav{align-items:center;gap:40px;display:flex}.site-header__link{font-size:var(--fs-nav);color:var(--color-text-muted);padding:4px 0;transition:color .2s;position:relative}.site-header__link:hover,.site-header__link.is-active{color:var(--color-text)}.site-header__link.is-active:after{content:"";background:var(--color-text);height:1.5px;position:absolute;bottom:-2px;left:0;right:0}.site-header__lang{font-size:var(--fs-nav);color:var(--color-text-subtle);align-items:center;gap:6px;display:inline-flex}.site-header__lang .is-active{color:var(--color-text);font-weight:500}@media (width<=600px){.site-header__inner{height:64px}.site-header__nav{gap:20px}}.project-card{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-card);color:inherit;grid-template-columns:1fr 1fr;gap:32px;padding:24px;transition:border-color .25s,box-shadow .25s;display:grid}.project-card:hover{box-shadow:var(--shadow-card-hover)}.project-card--image-left .project-card__body{order:2}.project-card--image-left .project-card__cover{order:1}.project-card__body{flex-direction:column;gap:16px;padding:16px 8px 16px 16px;display:flex}.project-card__title{font-family:var(--font-sans);font-size:var(--fs-h3);letter-spacing:var(--ls-h3);color:var(--color-text);font-weight:600;line-height:1.33}.project-card__summary{font-family:var(--font-sans);font-size:var(--fs-body-sm);color:var(--color-text-muted);max-width:46ch;line-height:1.55}.project-card__tags{margin-top:auto;padding-top:12px}.project-card__cover{background:var(--color-card-soft);border:1px solid var(--color-border);border-radius:var(--radius-lg);min-height:240px;position:relative;overflow:hidden}.project-card__cover img{object-fit:cover;width:100%;height:100%;image-rendering:-webkit-optimize-contrast;image-rendering:high-quality;transform-origin:50%;will-change:transform;transition:transform .45s cubic-bezier(.2,.7,.2,1);display:block}.project-card:hover .project-card__cover img{transform:scale(1.05)}.project-card__cover:not(:has(img)){background-image:linear-gradient(135deg,#f4f4f4 0%,#fafafa 50%,#f4f4f4 100%)}@media (prefers-reduced-motion:reduce){.project-card__cover img{transition:none}.project-card:hover .project-card__cover img{transform:none}}@media (width<=800px){.project-card{grid-template-columns:1fr;gap:16px;padding:16px}.project-card--image-left .project-card__body,.project-card--image-left .project-card__cover{order:initial}.project-card__cover{min-height:180px}.project-card__body{padding:8px 4px}}.hero-grid{pointer-events:auto;border-radius:var(--radius-lg);background:#fff;position:absolute;inset:0;overflow:hidden}.hero-grid__canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.hero-grid__fade{pointer-events:none;background:radial-gradient(#fff0 55%,#ffffffd9 100%);position:absolute;inset:0}.home{padding-bottom:120px}.home__hero{isolation:isolate;align-items:center;width:100%;min-height:calc(100svh - 78px);padding:80px 0;display:flex;position:relative;overflow:hidden}.home__hero-inner{z-index:1;pointer-events:none;width:100%;position:relative;transform:translateY(-39px)}@media (width<=600px){.home__hero-inner{transform:translateY(-32px)}}.home__headline{max-width:900px}.home__work{flex-direction:column;gap:32px;padding-top:12px;display:flex}.home__work-title{font-family:var(--font-sans);font-size:var(--fs-h2);font-weight:600;line-height:var(--lh-heading);letter-spacing:var(--ls-h2);color:var(--color-text)}.home__cards{flex-direction:column;gap:24px;display:flex}.home__cta{justify-content:flex-start;margin-top:24px;display:flex}@media (width<=900px){.home__hero{padding:56px 0}.home__work{padding-top:12px}}@media (width<=600px){.home{padding-bottom:60px}.home__hero{min-height:calc(100svh - 64px);padding:40px 0}.home__work{padding-top:12px}}.projects{padding-top:24px;padding-bottom:120px}.projects__list{flex-direction:column;gap:24px;display:flex}@media (width<=600px){.projects{padding-bottom:60px}}.placeholder{flex-direction:column;gap:16px;padding-top:120px;padding-bottom:160px;display:flex}.placeholder__title{font-size:var(--fs-display)}.placeholder__note{font-size:var(--fs-body);max-width:46ch;color:var(--color-text-muted)}@media (width<=600px){.placeholder{padding-top:60px;padding-bottom:80px}}.hero{border:1px solid var(--color-border);border-radius:var(--radius-lg);width:100%;min-height:360px;position:relative;overflow:hidden}.hero img{object-fit:cover;width:100%;height:100%;display:block}.hero--soft{background:var(--color-card-soft)}.hero--dark{background:var(--color-text);border-color:var(--color-text)}@media (width<=800px){.hero{min-height:220px}}.feature-card{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-card);color:inherit;flex-direction:column;gap:18px;padding:20px;transition:border-color .25s,box-shadow .25s;display:flex}.feature-card:hover{box-shadow:var(--shadow-card-hover)}.feature-card__head{flex-direction:column;gap:8px;display:flex}.feature-card__title{font-family:var(--font-sans);font-size:var(--fs-h3);letter-spacing:var(--ls-h3);color:var(--color-text);margin:0;font-weight:600;line-height:1.33}.feature-card__blurb{font-family:var(--font-sans);font-size:var(--fs-body-sm);color:var(--color-text-muted);line-height:1.55}.feature-card__cover{background:var(--color-card-soft);border:1px solid var(--color-border);border-radius:var(--radius-lg);min-height:180px;position:relative;overflow:hidden}.feature-card__cover img{object-fit:cover;width:100%;height:100%;image-rendering:-webkit-optimize-contrast;image-rendering:high-quality;transform-origin:50%;will-change:transform;transition:transform .45s cubic-bezier(.2,.7,.2,1);display:block}.feature-card:hover .feature-card__cover img{transform:scale(1.05)}.feature-card__cover:not(:has(img)){background-image:linear-gradient(135deg,#f4f4f4 0%,#fafafa 50%,#f4f4f4 100%)}@media (prefers-reduced-motion:reduce){.feature-card__cover img{transition:none}.feature-card:hover .feature-card__cover img{transform:none}}.sonar-main{flex-direction:column;gap:64px;padding-top:24px;padding-bottom:120px;display:flex}.sonar-main__title{max-width:900px}.sonar-main__section-title{font-family:var(--font-sans);font-size:var(--fs-h2);font-weight:600;line-height:var(--lh-heading);letter-spacing:var(--ls-h2);color:var(--color-text);margin-bottom:20px}.sonar-main__overview{font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--color-text-muted);grid-template-columns:1fr 1fr;gap:64px;display:grid}.sonar-main__overview p+p{margin-top:16px}.sonar-main__features{flex-direction:column;gap:24px;display:flex}.sonar-main__grid{grid-template-columns:repeat(2,1fr);gap:24px;display:grid}@media (width<=800px){.sonar-main{gap:40px;padding-bottom:60px}.sonar-main__overview{grid-template-columns:1fr;gap:32px}.sonar-main__grid{grid-template-columns:1fr}}.case-study{padding-bottom:120px}.case-study__inner{flex-direction:column;gap:80px;padding-top:24px;display:flex}.case-study__header{flex-direction:column;gap:24px;display:flex}.case-study__title{max-width:900px}.case-study__hero{border-radius:6px;width:100%;min-height:360px;position:relative;overflow:hidden}.case-study__hero--soft{background:var(--color-card-soft)}.case-study__hero--dark{background:var(--color-text)}.case-study__hero img{object-fit:cover;width:100%;height:100%;display:block}.case-study__section{flex-direction:column;gap:80px;display:flex}.case-study__section-content,.case-study__sub-section{flex-direction:column;gap:24px;display:flex}.case-study__sub-section-title{font-family:var(--font-sans);font-size:var(--fs-body);font-weight:500;line-height:var(--lh-body);color:var(--color-text)}.case-study__section-text{flex-direction:column;gap:20px;max-width:880px;display:flex}.case-study__section-title{font-family:var(--font-sans);font-size:var(--fs-h2);font-weight:600;line-height:var(--lh-heading);letter-spacing:var(--ls-h2);color:var(--color-text)}.case-study__body{font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--color-text-muted)}.case-study__body p+p{margin-top:16px}.case-study__figure-frame{background:#fafafa;border-radius:6px;flex-direction:column;gap:24px;width:100%;padding:40px 6.6%;display:flex}.case-study__figure{margin:0;display:block}.case-study__figure--bordered{border:1px solid var(--color-border);border-radius:6px;overflow:hidden}.case-study__figure img{width:100%;height:auto;display:block}.case-study__platform-grid{align-items:flex-start;gap:26px;width:100%;display:flex}.case-study__platform-grid--three .case-study__platform-tile:first-child,.case-study__platform-grid--three .case-study__platform-tile:nth-child(2){flex:468}.case-study__platform-grid--three .case-study__platform-tile:nth-child(3){flex:122}.case-study__platform-grid--two{gap:86px}.case-study__platform-grid--two .case-study__platform-tile{flex:1}.case-study__platform-tile{flex-direction:column;align-items:center;gap:16px;min-width:0;margin:0;display:flex}.case-study__platform-tile img{border:1px solid var(--color-border);border-radius:6px;width:100%;height:auto;display:block}.case-study__platform-tile figcaption{font-family:var(--font-sans);font-size:var(--fs-body-sm);color:var(--color-text-placeholder);font-weight:400;line-height:1.5}@media (width<=800px){.case-study__figure-frame{gap:16px;padding:24px}.case-study__platform-grid{gap:16px}.case-study__platform-grid--two{gap:24px}.case-study__hero{min-height:220px}.case-study__inner,.case-study__section{gap:48px}.case-study{padding-bottom:60px}}.sonar-subnav{border-bottom:1px solid var(--color-border);background:var(--color-bg)}.sonar-subnav__inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:24px;padding-top:18px;padding-bottom:18px;display:flex}.sonar-subnav__back{font-size:var(--fs-nav);color:var(--color-text-muted);align-items:center;gap:6px;display:inline-flex}.sonar-subnav__back:hover{color:var(--color-text)}.sonar-subnav__tabs{flex-wrap:wrap;gap:22px;display:flex}.sonar-subnav__tab{font-size:var(--fs-nav);color:var(--color-text-muted);border-bottom:1.5px solid #0000;padding-bottom:4px;transition:color .2s}.sonar-subnav__tab:hover{color:var(--color-text)}.sonar-subnav__tab.is-active{color:var(--color-text);border-color:var(--color-text)}@media (width<=800px){.sonar-subnav__tabs{gap:14px}}
