html.site body{overflow-x:clip}.page{max-width:1200px;margin:0 auto;padding:0 24px}.tone-lilac{--tone:var(--lilac)}.tone-yellow{--tone:var(--yellow)}.tone-mint{--tone:var(--mint)}.tone-coral{--tone:var(--soft-coral)}.tone-periwinkle{--tone:var(--peri)}.tone-sand{--tone:var(--sand)}.section-title{letter-spacing:-.04em;margin:0 0 28px;font-size:clamp(34px,4.6vw,60px);font-weight:900;line-height:1}.chips{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.chip-item{font-family:var(--f-mono);border:1.5px solid;border-radius:40px;padding:6px 12px;font-size:11px;line-height:1.2}.masthead{z-index:20;background:var(--bg);position:sticky;top:0}@supports (animation-timeline:scroll()){.masthead{background:0 0;animation:linear both masthead-solid;animation-timeline:scroll(root);animation-range:0 96px}@keyframes masthead-solid{0%{background:color-mix(in oklch, var(--bg) 0%, transparent);-webkit-backdrop-filter:blur();backdrop-filter:blur();box-shadow:0 1px #0000}to{background:color-mix(in oklch, var(--bg) 84%, transparent);box-shadow:0 1px 0 var(--line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}}}.header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;max-width:1200px;margin:0 auto;padding:16px 24px;display:flex}.nav{flex-wrap:wrap;align-items:center;gap:20px;font-size:12.5px;font-weight:600;display:flex}.nav-link{text-decoration:none}.certs-btn{border:1.5px solid var(--fg);cursor:pointer;color:var(--fg);transition:color .16s var(--ease-out), background-color .16s var(--ease-out);background:0 0;border-radius:40px;padding:8px 14px;font-size:12px;font-weight:600;line-height:normal}.certs-btn:hover{color:var(--coral)}.certs-btn[aria-expanded=true]{background:var(--btn-bg);color:var(--btn-fg)}.lang{border:1.5px solid var(--fg);border-radius:40px;display:flex;overflow:hidden}.lang-opt{color:var(--fg);padding:9px 13px;font-size:11.5px;font-weight:700;line-height:normal;text-decoration:none}.lang-opt[aria-current=true],.lang-opt[aria-current=true]:hover{background:var(--btn-bg);color:var(--btn-fg)}.lang-opt:focus-visible{outline-offset:-4px}@media (max-width:720px){.masthead{position:relative}}.certs-wrap{opacity:0;visibility:hidden;max-width:1200px;transition:grid-template-rows .24s var(--ease-out), opacity .16s var(--ease-out), visibility 0s linear .24s;grid-template-rows:0fr;margin:0 auto;padding:0 24px;display:grid}.certs-wrap.is-open{opacity:1;visibility:visible;transition:grid-template-rows .3s var(--ease-out), opacity .22s var(--ease-out) 40ms, visibility 0s;grid-template-rows:1fr}.certs-clip{min-height:0;margin-right:-4px;padding:0 4px 6px 0;overflow:hidden}.certs-panel{background:var(--surface);box-shadow:4px 4px 0 var(--surface-shadow);border-radius:16px;max-height:70dvh;margin:4px 0;padding:18px 20px;overflow:auto}.certs-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.certs-close{color:var(--fg-soft);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:16px;line-height:1}.certs-close:hover{color:var(--coral)}.certs-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:10px;display:grid}.cert{background:var(--bg);color:var(--fg);border-radius:10px;flex-direction:column;gap:4px;padding:12px 14px;text-decoration:none;display:flex}.cert-name{font-size:13px;font-weight:600;line-height:1.35}.cert-meta{font-family:var(--f-mono);color:var(--fg-soft);font-size:9.5px}.dn-line{display:block}.dn-w{white-space:nowrap;display:inline-block}.dn-c{display:inline-block}@media (prefers-reduced-motion:no-preference){.dn-c{animation:dn-settle 1.1s var(--ease-out) both;animation-delay:calc(.12s + var(--d,0s) + var(--wd,0s) + var(--ld,0s))}.dn-c:nth-child(9n+1){--dx:-.3em;--dy:.42em;--r:-14deg}.dn-c:nth-child(9n+2){--dx:.18em;--dy:-.55em;--r:9deg}.dn-c:nth-child(9n+3){--dx:.36em;--dy:.22em;--r:18deg}.dn-c:nth-child(9n+4){--dx:-.12em;--dy:-.34em;--r:-8deg}.dn-c:nth-child(9n+5){--dx:.26em;--dy:.6em;--r:-20deg}.dn-c:nth-child(9n+6){--dx:-.4em;--dy:-.12em;--r:12deg}.dn-c:nth-child(9n+7){--dx:.08em;--dy:.5em;--r:6deg}.dn-c:nth-child(9n+8){--dx:-.22em;--dy:-.6em;--r:-16deg}.dn-c:nth-child(9n+9){--dx:.32em;--dy:-.28em;--r:22deg}.dn-c:nth-child(4n+2){--d:90ms}.dn-c:nth-child(4n+3){--d:30ms}.dn-c:nth-child(4n+4){--d:.15s}.dn-c:nth-child(7n+5){--d:.21s}.dn-line>span:nth-child(2) .dn-c{--wd:70ms}.dn-line>span:nth-child(3) .dn-c{--wd:.14s}.dn-line>span:nth-child(n+4) .dn-c{--wd:.2s}.dn-line:nth-child(2) .dn-c{--ld:.14s}@keyframes dn-settle{0%{opacity:0;transform:translate(var(--dx,0), var(--dy,0)) rotate(var(--r,0deg));filter:blur(6px)}35%{opacity:1}to{opacity:1;filter:blur();transform:none}}@keyframes rise{0%{opacity:0;filter:blur(4px);transform:translateY(10px)}}}.hero{grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr);align-items:center;gap:clamp(32px,5vw,64px);padding:clamp(32px,6vh,72px) 0 48px;display:grid}.eyebrow{font-family:var(--f-mono);letter-spacing:.18em;color:var(--fg-soft);margin:0 0 22px;font-size:11px}.hero-title{letter-spacing:-.05em;margin:0;font-size:clamp(44px,6.4vw,96px);font-weight:900;line-height:.92}.hero-title:lang(fr){font-size:clamp(40px,5.2vw,78px)}.stop{color:var(--coral)}.quip{font-family:var(--f-serif);color:var(--coral);transform-origin:0;margin:18px 0 0;font-size:19px;font-style:italic;display:inline-block;transform:rotate(-4deg)}.hero-sub{max-width:36ch;margin:22px 0 0;font-size:17px;font-weight:500;line-height:1.55}.hero-ctas{flex-wrap:wrap;align-items:center;gap:14px;margin:30px 0 0;display:flex}@media (prefers-reduced-motion:no-preference){.eyebrow{animation:rise .6s var(--ease-out) both}.plot{animation:rise .8s var(--ease-out) .2s both}.hero-sub{animation:rise .7s var(--ease-out) .65s both}.hero-ctas{animation:rise .7s var(--ease-out) .75s both}.now{animation:rise .7s var(--ease-out) .9s both}.quip:not(.quip--static){animation:stamp .52s var(--ease-out) 1.25s both}@keyframes stamp{0%{opacity:0;filter:blur(3px);transform:rotate(-12deg)scale(1.25)}}}.plot{margin:0}.plot-frame{aspect-ratio:1/.9;background:var(--surface);box-shadow:4px 4px 0 var(--surface-shadow);border-radius:16px;position:relative}.plot-canvas{--plot-a:var(--blue);--plot-b:var(--coral);--plot-grid:#1f2ad414;--plot-muted:#1f2ad438;touch-action:pan-y;cursor:crosshair;width:calc(100% - 40px);height:calc(100% - 40px);position:absolute;inset:20px}@media (prefers-color-scheme:dark){html.site .plot-canvas{--plot-a:#9aa2ff;--plot-grid:#fdf7e412;--plot-muted:#fdf7e43d}}.plot-axis{font-family:var(--f-mono);color:var(--fg-soft);font-size:10px;position:absolute}.plot-axis--x{bottom:4px;right:22px}.plot-axis--y{top:18px;left:6px}.plot-caption{justify-content:space-between;align-items:center;gap:16px;margin:16px 0 0;display:flex}.plot-hint{color:var(--fg-soft);max-width:38ch;font-size:13px;line-height:1.45}@media (hover:none){.plot-hint{display:none}.plot-caption{justify-content:flex-end}}.plot-btn{border:1.5px solid var(--fg);color:var(--fg);cursor:pointer;transition:color .16s var(--ease-out), transform .12s var(--ease-out);background:0 0;border-radius:40px;flex:none;padding:8px 14px;font-size:12px;font-weight:600;line-height:normal}.plot-btn:hover{color:var(--coral)}.plot-btn:active{transform:scale(.97)}.now{background:var(--surface);box-shadow:4px 4px 0 var(--surface-shadow);border-radius:16px;flex-wrap:wrap;align-items:center;gap:18px;margin:8px 0 0;padding:16px 20px;display:flex}.now-chip{font-family:var(--f-mono);letter-spacing:.14em;background:var(--yellow);color:var(--blue);white-space:nowrap;border-radius:30px;padding:6px 10px;font-size:10px}.now-text{font-size:14px;font-weight:500;line-height:1.5}.rv-wait{opacity:0;filter:blur(4px);transform:translateY(18px)}.rv-in{transition:opacity .6s var(--ease-out), transform .8s var(--ease-out), filter .6s var(--ease-out)}.projects{padding-top:clamp(72px,9vw,120px);scroll-margin-top:80px}.feature{background:var(--tone);color:var(--on-tone);border-radius:16px;padding:clamp(24px,4.4vw,56px)}.feature a:not(.btn-primary){color:var(--on-tone)}.feature :focus-visible{outline-color:var(--blue)}.feature-top{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:32px;display:grid}.feature-meta{margin:0 0 14px}.feature-title{overflow-wrap:break-word;letter-spacing:-.05em;margin:0;font-size:clamp(42px,7vw,96px);font-weight:900;line-height:.92}.feature-desc{max-width:52ch;margin:18px 0 0;font-size:16px;font-weight:500;line-height:1.55}.feature-stat{text-align:right;letter-spacing:-.045em;max-width:7ch;margin:0;font-size:clamp(36px,5.4vw,72px);font-weight:900;line-height:.9}.feature-top--long{grid-template-columns:minmax(0,1fr) minmax(0,38%)}.feature-stat-box{container-type:inline-size}.feature-stat--long{overflow-wrap:break-word;text-wrap:balance;max-width:none;line-height:.95;font-size:min(52px, var(--stat-fit))}.feature-stat--w8{--stat-fit:17cqi}.feature-stat--w10{--stat-fit:13.6cqi}.feature-stat--w12{--stat-fit:11.3cqi}.feature-stat--w15{--stat-fit:9cqi}.feature-stat--wmax{--stat-fit:6.8cqi}.pipeline{grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;gap:28px;margin:clamp(40px,5vw,64px) 0 0;padding:0;list-style:none;display:grid;position:relative}.pipeline:before{content:"";opacity:.3;transform-origin:0;background:currentColor;height:2px;position:absolute;top:5px;left:0;right:0}.pipe-step{position:relative}.pipe-node{background:currentColor;width:12px;height:12px;display:block}.pipe-step:last-child .pipe-node{background:var(--coral)}.pipe-label{margin:18px 0 8px}.pipe-body{margin:0;font-size:14px;font-weight:500;line-height:1.55}.rv-wait .pipeline:before{transform:scaleX(0)}.rv-wait .pipe-step{opacity:0;transform:translateY(12px)}.rv-in .pipeline:before{transition:transform 1.1s var(--ease-out) .25s}.rv-in .pipe-step{transition:opacity .5s var(--ease-out), transform .65s var(--ease-out);transition-delay:calc(.3s + var(--i,0) * .11s)}.pipe-step:nth-child(2){--i:1}.pipe-step:nth-child(3){--i:2}.pipe-step:nth-child(4){--i:3}.feature-foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;margin:clamp(36px,4vw,52px) 0 0;display:flex}.feature-actions{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.btn-on-tone,.btn-on-tone:hover{background:var(--blue);color:var(--cream)}.pill-on-tone{border-color:var(--blue)}.work{margin:clamp(80px,10vw,128px) 0 0}.index{border-top:1.5px solid var(--line);margin:0;padding:0;list-style:none}.index>li{border-bottom:1.5px solid var(--line)}.row{isolation:isolate;color:var(--fg);transition:color .28s var(--ease-out);grid-template-columns:40px minmax(0,1fr) minmax(0,220px) auto 24px;align-items:center;gap:24px;padding:28px 18px;text-decoration:none;display:grid;position:relative}.row:hover{color:var(--fg)}.row:before{content:"";z-index:-1;background:var(--tone);clip-path:inset(100% 0 0 round 16px);transition:clip-path .26s var(--ease-out);border-radius:16px;position:absolute;inset:6px 0}.row-num{font-family:var(--f-mono);color:var(--fg-soft);transition:color .28s var(--ease-out);font-size:12px}.row-main{display:block}.row-title{letter-spacing:-.04em;transition:transform .42s var(--ease-out);font-size:clamp(28px,3.6vw,48px);font-weight:900;line-height:1;display:block}.row-desc{max-width:54ch;color:var(--fg-soft);transition:color .28s var(--ease-out);margin-top:10px;font-size:14px;font-weight:500;line-height:1.5;display:block}.row-meta{flex-direction:column;gap:6px;display:flex}.row-tag{font-family:var(--f-mono);letter-spacing:.14em;font-size:10.5px}.row-stack{font-family:var(--f-mono);opacity:.75;font-size:10px;line-height:1.5}.row-badge{background:var(--btn-bg);color:var(--btn-fg);font-family:var(--f-mono);white-space:nowrap;border-radius:30px;justify-self:end;padding:7px 14px;font-size:11px}.row-arrow{opacity:0;transition:opacity .2s var(--ease-out), transform .3s var(--ease-out);font-size:22px;font-weight:600;transform:translate(-8px)}@media (hover:hover){.row:hover,.row:focus-visible{color:var(--on-tone)}.row:hover:before,.row:focus-visible:before{clip-path:inset(0 round 16px);transition:clip-path .42s var(--ease-swift)}.row:hover .row-num,.row:hover .row-desc,.row:focus-visible .row-num,.row:focus-visible .row-desc{color:var(--on-tone)}.row:hover .row-title,.row:focus-visible .row-title{transform:translate(10px)}.row:hover .row-arrow,.row:focus-visible .row-arrow{opacity:1;transform:none}.row:hover .row-badge,.row:focus-visible .row-badge{background:var(--blue);color:var(--cream)}}@media (hover:none){.row:before{clip-path:none;width:4px;inset:28px auto 28px 0}}.row:focus-visible{outline-offset:-2px;border-radius:16px}@media (max-width:880px){.row{grid-template-columns:32px minmax(0,1fr);gap:10px 14px;padding:24px 14px}.row-meta,.row-badge{grid-column:2}.row-badge{justify-self:start}.row-arrow{display:none}}.toolbox{margin:clamp(96px,12vw,160px) 0 0}.toolbox-title{margin-bottom:20px}.tool-lines{overflow:clip}.tool-line{letter-spacing:-.045em;flex-wrap:wrap;gap:0 .4em;margin:0;padding:0;font-size:clamp(34px,6vw,92px);font-weight:900;line-height:1.04;list-style:none;display:flex}.tool:nth-child(2n){color:#0000;-webkit-text-stroke:1.5px var(--fg)}.tool:not(:last-child):after{content:"*";color:var(--coral);-webkit-text-stroke:0;margin-left:.4em}@supports (animation-timeline:view()){@media (prefers-reduced-motion:no-preference){.tool-lines{margin-inline:calc(50% - 50vw)}.tool-line{white-space:nowrap;flex-wrap:nowrap;width:max-content;animation:none;animation-timeline:view();animation-range:cover}.tool-line--a{animation-name:drift-left}.tool-line--b{animation-name:drift-right}@keyframes drift-left{0%{transform:translate(6vw)}to{transform:translate(min(6vw,94vw - 100%))}}@keyframes drift-right{0%{transform:translate(min(6vw,94vw - 100%))}to{transform:translate(6vw)}}}}.case-layout{grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:start;gap:clamp(40px,6vw,96px);padding-top:32px;display:grid}.case-head{position:sticky;top:96px}.case-meta{font-family:var(--f-mono);letter-spacing:.16em;color:var(--fg-soft);margin:32px 0 14px;font-size:10.5px}.case-title{letter-spacing:-.05em;overflow-wrap:anywhere;margin:0;font-size:clamp(40px,4.6vw,64px);font-weight:900;line-height:.95}.case-lead{max-width:44ch;margin:20px 0 0;font-size:16px;font-weight:500;line-height:1.6}.case-stat{background:var(--tone);color:var(--on-tone);letter-spacing:-.04em;overflow-wrap:anywhere;border-radius:16px;max-width:100%;margin:26px 0 0;padding:14px 18px;font-size:clamp(26px,3vw,40px);font-weight:900;line-height:1;display:inline-block;transform:rotate(-2deg)}@media (prefers-reduced-motion:no-preference){.case-stat{animation:stamp-stat .52s var(--ease-out) .9s both}@keyframes stamp-stat{0%{opacity:0;filter:blur(3px);transform:rotate(-9deg)scale(1.2)}}}.case-actions{flex-wrap:wrap;gap:10px;margin:26px 0 0;display:flex}.case-actions:empty{display:none}.case-chips{margin-top:20px}.case-steps{margin:0;padding:72px 0 0 40px;list-style:none;position:relative}.case-steps:before{content:"";background:var(--tone);transform-origin:top;width:2px;position:absolute;top:80px;bottom:40px;left:6px}@supports (animation-timeline:view()){@media (prefers-reduced-motion:no-preference){.case-steps:before{animation:linear both rail-fill;animation-timeline:view();animation-range:entry 30% exit 30%}@keyframes rail-fill{0%{transform:scaleY(0)}}}}.case-step{padding:0 0 clamp(48px,6vw,80px);position:relative}.case-step:before{content:"";background:var(--tone);width:14px;height:14px;box-shadow:0 0 0 4px var(--bg);position:absolute;top:2px;left:-40px}.case-label{color:var(--fg-soft);margin:0 0 14px}.case-body{letter-spacing:-.01em;max-width:58ch;margin:0;font-size:clamp(18px,1.7vw,23px);font-weight:500;line-height:1.5}.case-step--result:before{background:var(--coral)}.case-step--result .case-body{background:var(--tone);color:var(--on-tone);border-radius:16px;padding:clamp(20px,2.6vw,32px);font-weight:600}.case-next{isolation:isolate;border:1.5px solid var(--line);color:var(--fg);transition:color .3s var(--ease-out), border-color .3s var(--ease-out);border-radius:16px;margin:clamp(48px,7vw,96px) 0 0;padding:clamp(32px,6vw,72px) clamp(24px,4vw,48px);text-decoration:none;display:block;position:relative}.case-next:hover{color:var(--fg)}.case-next:before{content:"";z-index:-1;background:var(--tone);clip-path:inset(0 100% 0 0 round 16px);transition:clip-path .3s var(--ease-out);border-radius:16px;position:absolute;inset:-1.5px}.case-next-label{margin-bottom:14px;display:block}.case-next-title{letter-spacing:-.05em;font-size:clamp(36px,6.4vw,92px);font-weight:900;line-height:.95;display:block}.case-next-title span{transition:transform .42s var(--ease-out);display:inline-block}@media (hover:hover){.case-next:hover,.case-next:focus-visible{color:var(--on-tone);border-color:#0000}.case-next:hover:before,.case-next:focus-visible:before{clip-path:inset(0 round 16px);transition:clip-path .52s var(--ease-swift)}.case-next:hover .case-next-title span,.case-next:focus-visible .case-next-title span{transform:translate(14px)}}@media (hover:none){.case-next{color:var(--on-tone);border-color:#0000}.case-next:before{clip-path:none}}.lost{min-height:60dvh;padding:clamp(48px,8vw,96px) 0 0}.lost-title{letter-spacing:-.05em;max-width:12ch;margin:0;font-size:clamp(44px,8vw,104px);font-weight:900;line-height:.92}.lost .btn-primary{margin-top:36px}.lost .quip{width:max-content;display:block}.about{background:var(--blue);color:var(--cream);margin-top:clamp(96px,12vw,160px);scroll-margin-top:20px}.about a{color:var(--cream)}.about :focus-visible{outline-color:var(--yellow)}.about-inner{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:clamp(32px,5vw,72px);max-width:1200px;margin:0 auto;padding:clamp(56px,8vw,96px) 24px;display:grid}.portrait{position:relative}.portrait-img{object-fit:cover;width:clamp(160px,20vw,240px);height:clamp(160px,20vw,240px);box-shadow:6px 6px 0 var(--coral);border-radius:16px;display:block}.say-hi{background:var(--yellow);color:var(--blue);width:72px;height:72px;font-family:var(--f-mono);border-radius:50%;justify-content:center;align-items:center;font-size:10.5px;font-weight:700;transition:transform .6s cubic-bezier(.34,1.56,.64,1);display:flex;position:absolute;bottom:-16px;right:-24px;transform:rotate(-12deg)}@media (hover:hover){.portrait:hover .say-hi{transform:rotate(10deg)scale(1.08)}}.about-hello{font-family:var(--f-serif);color:var(--yellow);margin:0 0 10px;font-size:19px;font-style:italic}.about-head{letter-spacing:-.04em;margin:0 0 16px;font-size:clamp(30px,4.4vw,56px);font-weight:900;line-height:1}.about-body{color:var(--tint);max-width:60ch;margin:0;font-size:15.5px;line-height:1.65}.about-links{flex-wrap:wrap;gap:10px;margin-top:26px;font-size:12.5px;font-weight:600;display:flex}.pill-email{background:var(--yellow);color:var(--blue);transition:background-color .18s var(--ease-out);border-radius:40px;padding:11px 18px;text-decoration:none}.about a.pill-email,.about a.pill-email:hover{color:var(--blue)}.pill-email:hover{background:var(--cream)}.pill-dark{border:1.5px solid var(--tint-2);transition:color .18s var(--ease-out), border-color .18s var(--ease-out);border-radius:40px;padding:10px 18px;text-decoration:none}.about a.pill-dark:hover{color:var(--yellow);border-color:var(--yellow)}.footer-line{max-width:1200px;font-family:var(--f-mono);letter-spacing:.12em;color:var(--tint-2);margin:0 auto;padding:0 24px 30px;font-size:10px}@media (max-width:960px){.hero{grid-template-columns:minmax(0,1fr);min-height:0;padding-top:32px}.hero-title:lang(fr){font-size:clamp(38px,9vw,72px)}.plot{max-width:560px}.case-layout{grid-template-columns:minmax(0,1fr)}.case-head{position:static}.case-steps{padding-top:16px}.case-steps:before{top:24px}}@media (max-width:760px){.feature-top,.feature-top--long{grid-template-columns:minmax(0,1fr)}.feature-stat{text-align:left;max-width:none}.pipeline{grid-template-columns:minmax(0,1fr);grid-auto-flow:row;gap:26px;padding-left:30px}.pipeline:before{transform-origin:top;width:2px;height:auto;inset:0 auto 0 5px}.rv-wait .pipeline:before{transform:scaleY(0)}.pipe-node{position:absolute;top:2px;left:-30px}.pipe-label{margin-top:0}.about-inner{grid-template-columns:minmax(0,1fr)}.portrait{justify-self:start}}@media (max-width:480px){.page,.header,.certs-wrap,.about-inner,.footer-line{padding-left:16px;padding-right:16px}.nav{gap:12px}.nav .pill{display:none}}
