@font-face{font-family:Instrument Sans;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/instrument-sans-latin-500-normal-Dk9ku72i.woff2)format("woff2")}@font-face{font-family:"Source Sans 3";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/source-sans-3-latin-400-normal-DQi5PRDE.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2")}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--paper:#f4f0e6;--ink:#172033;--blue:#1e4e8c;--blue-deep:#173e70;--graphite:#3e4b5c;--hairline:#ddd4c6;--contour:#cfc6b6;--font-display:"Instrument Sans", sans-serif;--font-text:"Source Sans 3", sans-serif;--font-meta:"IBM Plex Mono", ui-monospace, monospace;--type-display:clamp(2.8rem, 5.2vw, 4.5rem);--type-display-narrow:clamp(2.4rem, 11vw, 3.15rem);--type-text:1.0625rem;--type-text-narrow:1rem;--type-meta:.75rem;--measure:38ch;--grid-columns:12;--grid-gutter:24px;--grid-margin:max(1.5rem, min(5vw, 4.5rem));--content-max:88rem;--nav-height:4.25rem;--duration-short:.35s;--duration-medium:.8s;--duration-long:1.6s;--ease:cubic-bezier(.22, 1, .36, 1);font-family:var(--font-text);font-size:var(--type-text);line-height:var(--text-line,1.55)}body{color:var(--ink);background:var(--paper);margin:0;overflow-x:clip}header,main{width:min(var(--content-max), calc(100% - 2 * var(--grid-margin)));margin:0 auto}main{z-index:1;position:relative}header{z-index:2;min-height:var(--nav-height);background:0 0;justify-content:space-between;align-items:center;gap:1.5rem 2rem;display:flex;position:relative}nav ol{flex-wrap:wrap;gap:.35rem 1.35rem;margin:0;padding:0;list-style:none;display:flex}nav a{color:#172d50;font-size:.95rem;text-decoration:none}nav a:hover,nav a.is-current{color:var(--blue)}.availability{color:var(--graphite);white-space:nowrap;align-items:center;gap:.55rem;margin:0;font-size:.9rem;display:flex}.availability-dot{background:var(--blue);border-radius:50%;width:.45rem;height:.45rem}.hero{box-sizing:border-box;min-height:calc(100svh - var(--nav-height));align-items:center;padding:2.5rem 0 3.5rem;display:flex;position:relative}.contours{z-index:0;pointer-events:none;width:100%;height:calc(100svh + 14rem);position:absolute;top:0;left:0;overflow:hidden;-webkit-mask-image:linear-gradient(#000 0 calc(100% - 18rem),#0000 100%);mask-image:linear-gradient(#000 0 calc(100% - 18rem),#0000 100%)}.contours-fallback,.contours-live{width:100%;height:100%;display:block;position:absolute;inset:0}.contour-sheet{width:0;height:0;position:absolute;overflow:hidden}.contours-fallback{opacity:.38;stroke-width:1.4px;-webkit-mask-image:linear-gradient(90deg,#0000 0 54%,#000 86%);mask-image:linear-gradient(90deg,#0000 0 54%,#000 86%)}.contours-live{display:none}.contours.is-live .contours-live{display:block}.contours.is-live .contours-fallback{display:none}.hero-copy{z-index:1;width:min(58rem,72%);position:relative}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.03em;font-weight:500}h1{color:#172d50;letter-spacing:-.042em;margin:0;font-size:clamp(3.15rem,5.05vw,5.2rem);line-height:1.08}.hero-cycle{color:var(--blue);vertical-align:baseline;display:grid}.hero-cycle span{opacity:0;transition:opacity .45s var(--ease), transform .45s var(--ease);grid-area:1/1;transform:translateY(.28em)}.hero-cycle span.is-on{opacity:1;transform:none}h2{margin:0;font-size:1.2rem;line-height:1.2}h3{margin:0;font-size:1.35rem;line-height:1.2}.lead{color:#243652;max-width:42ch;margin:1.85rem 0 0;font-size:1.2rem;line-height:1.6}.actions{flex-wrap:wrap;align-items:center;gap:.85rem 1.75rem;margin-top:2.35rem;display:flex}.button,.actions .text-link{font-family:var(--font-display);letter-spacing:-.01em;transition:background var(--duration-short) var(--ease), border-color var(--duration-short) var(--ease), color var(--duration-short) var(--ease);border-radius:0;align-items:center;gap:.55rem;font-size:1rem;font-weight:500;line-height:1;text-decoration:none;display:inline-flex}.button{color:var(--paper);background:#172d50;border:1px solid #172d50;border-radius:999px;padding:.78rem 1.25rem}.button:hover{background:#10223d;border-color:#10223d}.actions .text-link{color:#243652;background:0 0;border-bottom:1px solid #c8bfb0;padding:.2rem 0 .28rem}.actions .text-link:hover{color:#172d50;background:0 0;border-bottom-color:#172d50}.text-link{color:var(--ink);border-bottom:1px solid var(--hairline);padding-bottom:.12rem;text-decoration:none}.text-link:hover{color:var(--blue);border-bottom-color:var(--blue)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}#scene-root{position:absolute;inset:0}#scene-root canvas{pointer-events:none;width:100%;height:100%;display:block}.band{z-index:2;border-top:1px solid var(--hairline);width:min(64rem,82%);margin:4.5rem auto 0;padding-top:2rem;scroll-margin-top:1.5rem;position:relative}#projects.band{border-top-color:#0000;width:min(76rem,100% - 9rem)}#projects .section-lead{max-width:40rem;color:var(--graphite);text-align:center;margin:.15rem auto 1.6rem}.band h2{color:var(--graphite);font-family:var(--font-meta);letter-spacing:.12em;text-align:center;text-transform:uppercase;transition:color var(--duration-short) var(--ease);margin-bottom:.85rem;font-size:1.2rem;font-weight:400;line-height:1.4}.band h2.is-current{color:var(--blue)}.band .statement{max-width:34ch;color:var(--ink);font-family:var(--font-display);letter-spacing:-.03em;text-wrap:balance;margin-bottom:.35rem;font-size:clamp(1.55rem,2.5vw,2.05rem);font-weight:500;line-height:1.18}#home{scroll-margin-top:1rem}.band p{max-width:46ch;margin:0}#about h2{margin-bottom:1.15rem}.about-lead{text-align:left;width:min(40rem,100%);margin-inline:auto}.about-lead p+p{margin-top:.9rem}.about-lead .statement{max-width:28ch;font-size:1.2rem;font-weight:500;line-height:1.35}.parcours{--rail:color-mix(in srgb, var(--blue-deep) 46%, var(--contour));--lane-a:.4rem;--lane-b:2.05rem;--node:.52rem;--node-y:.42rem;--step-gap:1.45rem;text-align:left;width:min(43.45rem,100%);margin:2.1rem auto 0;padding:0;list-style:none}.parcours p{max-width:58ch}.parcours-step{padding-bottom:var(--step-gap);grid-template-columns:2.7rem minmax(0,1fr);column-gap:.85rem;display:grid}.parcours-step:last-child{padding-bottom:0}.graph{position:relative}.graph:before{content:"";left:var(--lane-a);top:0;bottom:calc(var(--step-gap) * -1);background:var(--rail);width:1px;position:absolute;transform:translate(-50%)}.parcours-step:first-child .graph:before{top:.4rem}.parcours-step:last-child .graph:before{height:.4rem;bottom:auto}.graph:after{content:"";z-index:1;left:var(--lane-a);box-sizing:border-box;width:var(--node);height:var(--node);border:1.5px solid var(--blue);background:var(--paper);border-radius:50%;position:absolute;top:.16rem;transform:translate(-50%)}.is-mark .graph:after{background:var(--blue)}.is-branch .graph:after{left:var(--lane-b);background:var(--paper)}.lane-v,.lane-h{background:var(--rail);position:absolute}.lane-v{left:var(--lane-b);top:0;bottom:calc(var(--step-gap) * -1);width:1px;transform:translate(-50%)}.lane-h{left:var(--lane-a);width:calc(var(--lane-b) - var(--lane-a));height:1px}.is-split .lane-v,.is-rejoin .lane-v{left:var(--lane-a);width:calc(var(--lane-b) - var(--lane-a));box-sizing:border-box;border-right:1px solid var(--rail);background:0 0;transform:none}.is-split .lane-v{border-top:1px solid var(--rail);border-top-right-radius:.7rem;top:.4rem}.is-split .lane-h,.is-rejoin .lane-h{display:none}.is-rejoin .lane-v{bottom:calc(var(--step-gap) * -1 - var(--node-y));border-bottom:1px solid var(--rail);border-bottom-right-radius:.7rem}.is-branch .lane-v,.is-branch .graph:after{left:calc(var(--lane-b) - .5px)}.parcours h3{letter-spacing:-.02em;font-size:1.12rem}.is-mark h3{font-size:1.32rem}.parcours .parcours-meta{max-width:none;color:var(--graphite);font-family:var(--font-meta);letter-spacing:.01em;flex-wrap:wrap;gap:.12rem .75rem;margin-top:.22rem;font-size:.75rem;line-height:1.45;display:flex}.parcours-note{color:var(--ink);margin-top:.4rem;font-size:1.02rem;line-height:1.45}.is-mark .parcours-note{font-size:1.125rem}.parcours-note .text-link{white-space:nowrap;margin-left:.35rem}#contact.band{padding-top:4.25rem;padding-bottom:4.5rem}.contact-close{width:100%}.contact-kicker{justify-content:space-between;align-items:center;gap:1rem;display:flex}#contact h2{color:var(--graphite);letter-spacing:.14em;text-align:left;margin:0;font-size:.75rem}.contact-mark{color:#172d50;display:inline-flex}#contact h3{color:#172d50;letter-spacing:-.03em;max-width:none;margin-top:.85rem;font-size:clamp(1.7rem,2.4vw,2.05rem);line-height:1.15}.contact-close>p{color:#243652;max-width:46rem;margin-top:.45rem;font-size:1.05rem;line-height:1.45}.contact-actions{flex-wrap:wrap;align-items:center;gap:.85rem 1.35rem;margin-top:1.35rem;display:flex}.contact-mail-link,.contact-linkedin{font-family:var(--font-display);letter-spacing:-.01em;align-items:center;gap:.5rem;font-size:.95rem;font-weight:500;line-height:1;text-decoration:none;display:inline-flex}.contact-mail-link{color:var(--paper);background:#172d50;border-radius:4px;padding:.72rem .9rem}.contact-mail-link:hover{background:#10223d}.contact-linkedin{color:#243652}.contact-linkedin:hover{color:#172d50}.contact-foot{border-top:1px solid var(--hairline);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.45rem 1.5rem;margin-top:1.55rem;padding-top:.95rem;display:flex}.contact-sign,.contact-mail{max-width:none;color:var(--graphite);align-items:center;gap:.55rem;margin:0;font-size:.95rem;line-height:1.4;display:flex}.contact-dot{background:var(--blue);border-radius:50%;width:.45rem;height:.45rem}.contact-mail{font-family:var(--font-meta);-webkit-user-select:all;user-select:all;font-size:.85rem}.project-nav{grid-template-columns:1fr;align-items:center;display:grid}.project-arrow{border:1px solid var(--hairline);width:2.25rem;height:2.25rem;color:var(--ink);font:inherit;cursor:pointer;background:0 0;border-radius:999px;justify-content:center;align-items:center;padding:0;line-height:1;display:none}.projects,.skills{margin:0;padding:0;list-style:none}.projects{gap:1.5rem;display:grid}.projects.is-enhanced{grid-template-columns:minmax(0,.58fr) minmax(0,1.84fr) minmax(0,.58fr);align-items:start;gap:1.25rem 1.5rem}.project-card{border:1px solid var(--hairline);width:100%;min-width:0;transition:border-color var(--duration-short) var(--ease);background:#fbf8f1;border-radius:14px;flex-direction:column;align-items:flex-start;gap:0;display:flex;overflow:hidden}.project-face{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:0;padding:0;display:block}.project-head{box-sizing:border-box;justify-content:space-between;align-items:flex-start;gap:.75rem 1rem;width:100%;padding:.85rem 1.1rem .15rem;display:flex}.project-head h3{min-width:0}.project-face img{aspect-ratio:16/9;object-fit:cover;object-position:center top;width:100%;height:auto;transition:filter var(--duration-short) var(--ease), opacity var(--duration-short) var(--ease);background:#e7e1d4;display:block}.projects.is-enhanced .project-card:not(.is-selected){color:var(--graphite);cursor:pointer;position:relative}.projects.is-enhanced .project-card:not(.is-selected) .project-face:after{content:"";z-index:1;position:absolute;inset:0}.projects.is-enhanced .project-card:not(.is-selected) .project-head{padding-bottom:.95rem}.projects.is-enhanced .project-card.is-selected{border-color:color-mix(in srgb, var(--blue) 55%, var(--hairline))}.projects.is-enhanced .project-card:not(.is-selected) img{filter:grayscale();opacity:.78}.projects.is-enhanced .project-card:not(.is-selected) .visit{display:none}.visit{border-bottom:1px solid var(--hairline);color:var(--graphite);font-family:var(--font-meta);font-size:var(--type-meta);letter-spacing:.04em;white-space:nowrap;background:0 0;flex:none;margin:0;padding:0 0 .08rem;line-height:1.2;text-decoration:none}.visit:hover{color:var(--blue);border-bottom-color:var(--blue)}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.bubble{width:100%}.bubble-clip{grid-template-rows:1fr;display:grid}.projects.is-enhanced.is-ready .bubble-clip{transition:grid-template-rows var(--duration-short) var(--ease)}.projects.is-enhanced .project-card:not(.is-selected) .bubble-clip{grid-template-rows:0fr}.bubble-panel{min-height:0;overflow:hidden}.bubble-body{padding:.85rem 1.1rem 1.15rem}.bubble p{max-width:none;color:var(--graphite);margin:.55rem 0 0}.bubble p:first-of-type,.bubble .statement{margin-top:0}.bubble .statement{max-width:none;color:var(--ink);margin-bottom:.75rem;font-size:1.35rem}.chips{flex-wrap:wrap;gap:.4rem;margin:1rem 0 0;padding:0;list-style:none;display:flex}.chips li{border:1px solid var(--hairline);color:var(--ink);font-family:var(--font-meta);font-size:var(--type-meta);letter-spacing:.02em;border-radius:2px;padding:.22rem .55rem;line-height:1.4}.skills{width:min(44rem,100%);color:var(--ink);text-align:left;gap:1.15rem;margin-inline:auto;display:grid}.skills>li{grid-template-columns:8.5rem minmax(0,1fr);align-items:start;gap:.35rem 1.25rem;display:grid}.project-card .chips li{border-color:color-mix(in srgb, var(--ink) 12%, var(--hairline));border-radius:8px}.skills .chips{margin:0}.skill-note{color:var(--graphite);grid-column:2;font-size:.98rem}.skill-label{font-family:var(--font-meta);font-size:var(--type-meta);letter-spacing:.04em;color:var(--graphite)}.skip-link{z-index:3;background:var(--paper);color:var(--ink);padding:.5rem .75rem;position:absolute;top:0;left:.5rem;transform:translateY(-120%)}.skip-link:focus{transform:none}:focus-visible{outline:3px solid var(--blue);outline-offset:3px}a{transition:color var(--duration-short) var(--ease)}@media (width<=960px){header{flex-direction:column;justify-content:flex-start;align-items:stretch;gap:.22rem;min-height:0;padding:.4rem 0 .05rem}nav{width:100%}nav ol{flex-wrap:nowrap;justify-content:space-between;gap:.35rem;width:100%}nav a{letter-spacing:-.015em;font-size:clamp(.68rem,3.05vw,.84rem)}h1{max-width:none;font-size:clamp(2.35rem,10.2vw,3.35rem);line-height:1.12}h1 br{display:none}.hero-cycle{display:inline-grid}.lead{max-width:36ch;font-size:1.05rem}.lead br{display:none}.hero{flex-direction:column;justify-content:flex-start;align-items:stretch;min-height:0;padding-top:1.15rem;padding-bottom:0}.hero-copy{width:min(100%,36rem)}.contours{display:none}#projects.band{margin-top:2.25rem;padding-top:0}.band,#projects.band{width:min(100% - 1.5rem,100%)}.skills>li,.skill-note{grid-column:1;grid-template-columns:1fr}.project-nav:has(.is-enhanced){grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:.65rem}.project-nav:has(.is-enhanced) .project-arrow{margin-top:4.5rem;display:inline-flex}.projects.is-enhanced{grid-template-columns:1fr}.projects.is-enhanced .project-card:not(.is-selected){display:none}#contact.band{padding-top:3.25rem;padding-bottom:3.5rem}#contact h3{font-size:1.65rem}.contact-foot{flex-direction:column;align-items:flex-start}.skills>li{grid-template-columns:1fr;gap:.35rem}.availability{white-space:nowrap;justify-content:center;gap:.4rem;font-size:.78rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}a,.band h2{transition:none}.projects.is-enhanced.is-ready .bubble-clip,.project-face img,.hero-copy,.hero-cycle span{transition:none;animation:none}}
