@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")}@font-face{font-family:Caveat;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/caveat-latin-400-normal-D6LQsQ_v.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{position:relative}header{min-height:var(--nav-height);justify-content:space-between;align-items:center;gap:1.5rem 2rem;display:flex}nav ol{flex-wrap:wrap;gap:.35rem 1.35rem;margin:0;padding:0;list-style:none;display:flex}nav a{color:var(--ink);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}.river{z-index:0;pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.river-course{fill:none;stroke:var(--blue);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.river-head{fill:var(--blue);stroke:var(--paper);stroke-width:3px;visibility:hidden}.hero{z-index:1;min-height:calc(100svh - var(--nav-height));grid-template-columns:minmax(18rem,.86fr) minmax(0,1.14fr);align-items:center;column-gap:clamp(1.5rem,3vw,3rem);padding:1.5rem 0 3.5rem;display:grid;position:relative}.contours{z-index:0;width:min(62%,40rem);height:auto;stroke:var(--contour);stroke-width:1px;pointer-events:none;position:absolute;top:4%;right:-8%}.banks{stroke:var(--ink);stroke-opacity:.28}.hero-copy,.city,.compass{z-index:1;position:relative}.eyebrow{color:var(--graphite);font-family:var(--font-meta);letter-spacing:.16em;text-transform:uppercase;margin:0;font-size:.72rem}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.03em;font-weight:500}h1{font-size:var(--type-display);margin:.9rem 0 0;line-height:1.02}h1 span{display:block}h2{margin:0;font-size:1.2rem;line-height:1.2}h3{margin:0;font-size:1.35rem;line-height:1.2}.lead{max-width:var(--measure);color:var(--graphite);font-size:var(--type-text);margin:1.25rem 0 0;line-height:1.55}.actions{flex-wrap:wrap;align-items:center;gap:1.1rem 1.5rem;margin-top:1.85rem;display:flex}.button{background:var(--blue);color:var(--paper);border-radius:2px;align-items:center;gap:.7rem;padding:.78rem 1.15rem;font-size:.98rem;text-decoration:none;display:inline-flex}.button:hover{background:var(--blue-deep)}.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)}.city{margin:0;position:relative}.city-stage{height:min(68vh,38rem);min-height:26rem;position:relative}.city-fallback{color:var(--graphite);font-family:var(--font-meta);font-size:var(--type-meta);margin:0;line-height:1.5;position:absolute;inset:18% 8% auto}.city-stage:has(canvas) .city-fallback{display:none}#scene-root{position:absolute;inset:0}#scene-root canvas{pointer-events:none;width:100%;height:100%;display:block}.north{color:var(--graphite);font-family:var(--font-meta);letter-spacing:.12em;text-align:center;margin:0;font-size:.68rem;position:absolute;top:.25rem;right:.25rem}.north:before{content:"+";letter-spacing:0;font-size:1.05rem;line-height:1;display:block}.city figcaption{color:var(--graphite);font-family:var(--font-meta);font-size:var(--type-meta);text-align:right;margin:0;line-height:1.7;position:absolute;top:42%;right:0}.city figcaption p{margin:0}.city figcaption p:first-child{color:var(--ink)}.compass{width:4.5rem;height:4.5rem;stroke:var(--graphite);fill:none;stroke-width:1px;position:absolute;bottom:1.25rem;right:0}.compass text{fill:var(--graphite);stroke:none;font-family:var(--font-meta);font-size:9px}.band{z-index:1;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{width:min(76rem,100% - 9rem)}.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}.contact-end .statement{max-width:18ch;margin-bottom:0}#home{scroll-margin-top:1rem}.band p{max-width:46ch;margin:0}#about h2{margin-bottom:1.15rem}.about-copy{text-align:left;grid-template-columns:minmax(0,1fr) minmax(18rem,1fr);align-items:start;gap:1.35rem 2.5rem;width:min(68rem,100%);margin-inline:auto;display:grid}.about-lead p+p{margin-top:.9rem}.prior{justify-self:end;width:min(22rem,100%)}.about-lead .statement{max-width:28ch;font-size:1.2rem;font-weight:500;line-height:1.35}.prior .prior-label{color:var(--graphite);font-family:var(--font-meta);letter-spacing:.12em;text-transform:uppercase;margin:0 0 .65rem;font-size:.85rem;line-height:1.4}.prior ul{margin:0;padding:0;list-style:none}.prior li{color:var(--ink);padding-left:1.05rem;font-size:1.125rem;line-height:1.45;position:relative}.prior li+li{margin-top:.55rem}.prior li:before{content:"";background:var(--blue);border-radius:50%;width:.4rem;height:.4rem;position:absolute;top:.42em;left:0}#contact.band{width:min(78rem,100% - 3.5rem)}.contact-end{text-align:left;flex-direction:row;justify-content:space-between;align-items:flex-end;gap:2rem 4rem;width:100%;display:flex}.contact-copy{flex-direction:column;align-items:flex-start;gap:.9rem;max-width:28rem;display:flex}.contact-links{flex-direction:column;align-items:flex-start;gap:.55rem;margin:0;padding:0;list-style:none;display:flex}.signature{flex:none;align-self:flex-end;width:min(17rem,46%);max-width:100%;height:auto;margin-left:auto;overflow:visible}.signature-ink{fill:var(--blue);font-family:Caveat,cursive;font-size:76px}.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:center;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)}.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{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:center;align-items:flex-start;gap:.65rem;padding:1rem 0}h1{font-size:var(--type-display-narrow)}.lead{font-size:var(--type-text-narrow)}.hero{grid-template-columns:1fr;min-height:0;padding-top:2rem}.city-stage{height:14.5rem;min-height:0}.north{display:none}.city figcaption{text-align:left;flex-wrap:wrap;gap:.35rem 1.25rem;margin-top:.75rem;display:flex;position:static}.compass{display:none}.band,#projects.band{width:min(100% - 1.5rem,100%)}.about-copy{grid-template-columns:1fr;gap:1.35rem}.prior{justify-self:start}.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{width:min(100% - 1.5rem,100%)}.contact-end{flex-direction:column;align-items:flex-start}.signature{width:min(15rem,86%);margin-top:.5rem}.skills>li{grid-template-columns:1fr;gap:.35rem}.availability{white-space:normal}}@supports (animation-timeline:scroll()){@media (prefers-reduced-motion:no-preference){.contours{animation:linear both contour-drift;animation-timeline:scroll(root)}}}@keyframes contour-drift{to{transform:translateY(-2.25rem)}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}a,.band h2,.projects.is-enhanced.is-ready .bubble-clip,.project-face img{transition:none}.river-head{visibility:hidden}.river-course{stroke-dashoffset:0;animation:none}}
