@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-sans-400.woff2)format("woff2")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-sans-500.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-400.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500.woff2)format("woff2")}@font-face{font-family:Barlow Condensed;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/barlow-condensed-500.woff2)format("woff2")}@font-face{font-family:Barlow Condensed;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/barlow-condensed-600.woff2)format("woff2")}@font-face{font-family:Archivo;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/archivo-800.woff2)format("woff2")}@font-face{font-family:Barlow Condensed Fallback;font-weight:600;src:local(Arial),local(Liberation Sans),local(Helvetica),local(Roboto);size-adjust:66%}@font-face{font-family:Barlow Condensed Fallback;font-weight:500;src:local(Arial),local(Liberation Sans),local(Helvetica),local(Roboto);size-adjust:64%}@font-face{font-family:Archivo Fallback;font-weight:800;src:local(Arial Bold),local(Arial-BoldMT),local(Liberation Sans Bold),local(Helvetica Bold),local(Roboto Bold);size-adjust:90%}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ground:#0b2545;--ground-raised:#0f2d55;--ink:#eaf2fb;--ink-dim:#a9c6e6;--ink-strong:#fff;--accent:#7fd4ff;--on-accent:#0b2545;--rule:#9cc3ea66;--rule-soft:#9cc3ea38;--grid-minor:#ffffff0b;--grid-major:#ffffff13;--ground-pattern:linear-gradient(var(--grid-major) 1px, transparent 1px), linear-gradient(90deg, var(--grid-major) 1px, transparent 1px), linear-gradient(var(--grid-minor) 1px, transparent 1px), linear-gradient(90deg, var(--grid-minor) 1px, transparent 1px);--ground-pattern-size:120px 120px, 120px 120px, 24px 24px, 24px 24px;--font-display:"Barlow Condensed", "Barlow Condensed Fallback", "Arial Narrow", sans-serif;--display-weight:600;--display-case:uppercase;--display-tracking:.025em;--display-leading:1;--name-size:clamp(52px, 15vw, 104px);--name-leading:.9;--name-tracking:.01em;--name-stop:none;--role-font:var(--font-display);--role-weight:500;--role-size:clamp(19px, 2.6vw, 23px);--role-leading:1.2;--role-case:uppercase;--role-tracking:.06em;--role-display:inline;--role-slash:"/";--employer-ink:var(--accent);--h2-size:clamp(30px, 5vw, 38px);--h3-size:27px;--subhead-size:21px;--subhead-weight:500;--subhead-tracking:.08em;--label-case:uppercase;--label-tracking:.12em;--sheet-label-display:block;--section-rule-display:block;--section-divider:0px;--frame:1px;--frame-pad:12px;--frame-ground:var(--ground-raised);--row-pad:12px 16px;--row-rule:var(--rule-soft);--tick-size:14px;--tick-weight:3px;--radius:0px;--tag-pad:5px 10px;--tag-quiet-pad:3px 8px;--tag-gap:8px;--tag-border:1px;--tag-slash:none;--tag-plain-mark:"·";--tag-ink:var(--accent);--tag-line:var(--accent);--status-border:1px;--status-pad:2px 8px;--status-dot:0px;--stamp-top:0px;--stamp-right:12px;--stamp-shift:-64%;--stamp-pad:2px 8px;--link:var(--accent);--link-line:var(--accent);--link-hover:var(--ink-strong);--toggle-on-ground:var(--accent);--toggle-on-ink:var(--on-accent);--toggle-dot:0px;--toggle-pad:12px;--toggle-label-align:stretch;--toggle-label-gap:0px;--toggle-grow:1;--toggle-outdent:0px;--brand-font:var(--font-mono);--brand-weight:500;--brand-size:14px;--brand-case:uppercase;--brand-tracking:.14em}:root[data-theme=graphite]{--ground:#1b1c1e;--ground-raised:#232427;--ink:#ecebe7;--ink-dim:#b3b1ab;--ink-strong:#f7f6f2;--accent:#ff6a2b;--on-accent:#1b1c1e;--rule:#3a3b3e;--rule-soft:#303134;--grid-minor:transparent;--grid-major:transparent;--ground-pattern:none;--ground-pattern-size:auto;--font-display:"Archivo", "Archivo Fallback", "Arial Black", sans-serif;--display-weight:800;--display-case:none;--display-tracking:-.02em;--display-leading:1.05;--name-size:clamp(46px, 14.4vw, 136px);--name-leading:.92;--name-tracking:-.035em;--name-stop:".";--role-font:var(--font-mono);--role-weight:500;--role-size:16px;--role-leading:1.5;--role-case:none;--role-tracking:0em;--role-display:block;--role-slash:none;--employer-ink:var(--ink-dim);--h2-size:clamp(30px, 5.4vw, 44px);--h3-size:26px;--subhead-size:20px;--subhead-weight:800;--subhead-tracking:-.01em;--label-case:none;--label-tracking:0em;--sheet-label-display:none;--section-rule-display:none;--section-divider:1px;--frame:0px;--frame-pad:0px;--frame-ground:transparent;--row-pad:16px 0;--row-rule:var(--rule);--tick-size:0px;--tick-weight:0px;--radius:4px;--tag-pad:0px;--tag-quiet-pad:0px;--tag-gap:4px 10px;--tag-border:0px;--tag-slash:"/";--tag-plain-mark:"/";--tag-ink:var(--ink-dim);--tag-line:transparent;--status-border:0px;--status-pad:0px;--status-dot:7px;--stamp-top:10px;--stamp-right:10px;--stamp-shift:0%;--stamp-pad:4px 10px;--link:var(--ink);--link-line:var(--ink-dim);--link-hover:var(--accent);--toggle-on-ground:transparent;--toggle-on-ink:var(--ink);--toggle-dot:7px;--toggle-pad:8px;--toggle-label-align:center;--toggle-label-gap:12px;--toggle-grow:0;--toggle-outdent:8px;--brand-font:var(--font-display);--brand-weight:800;--brand-size:18px;--brand-case:none;--brand-tracking:-.01em}@media print{:root,:root[data-theme=graphite]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ground:#fff;--ground-raised:#fff;--ink:#16181c;--ink-dim:#41454d;--ink-strong:#000;--accent:#16181c;--on-accent:#fff;--rule:#16181c73;--rule-soft:#16181c40;--ground-pattern:none;--frame-ground:transparent;--tick-size:0px;--tick-weight:0px;--name-stop:none;--employer-ink:var(--ink);--tag-ink:var(--ink);--tag-line:var(--rule);--link:var(--ink);--link-line:transparent}}:root{--gutter:clamp(16px, 5vw, 48px);--container:min(100% - 2 * var(--gutter), 1120px);--label-column:208px;--font-body:"IBM Plex Sans", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace}*,:before,:after{box-sizing:border-box}html{background-color:var(--ground);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{isolation:isolate;min-height:100svh;color:var(--ink);font-family:var(--font-body);overflow-wrap:break-word;flex-direction:column;margin:0;font-size:17px;font-weight:400;line-height:1.6;display:flex;position:relative;container-type:inline-size}body:before{z-index:-1;background-image:var(--ground-pattern);background-size:var(--ground-pattern-size);background-position:max(var(--gutter), calc((100cqw - 1120px) / 2)) 0;background-position:round(down, max(var(--gutter), calc((100cqw - 1120px) / 2)), 1px) 0;pointer-events:none;content:"";position:absolute;inset:0}main{flex:1 0 auto;display:block}img{max-width:100%;height:auto;display:block}h1,h2,h3,h4,p,ul,ol,dl,dd,figure{margin:0}ul,ol{padding:0;list-style:none}h1,h2,h3,h4,b,strong,dt{font-weight:500}a{color:inherit}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}main:focus{outline:none}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.container{width:var(--container);margin-inline:auto}.label{font-family:var(--font-mono);letter-spacing:var(--label-tracking);text-transform:var(--label-case);color:var(--ink-dim);font-size:14px;font-weight:400;line-height:1.5}.sheet-label{display:var(--sheet-label-display);font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--accent);font-size:14px;font-weight:500;line-height:1.5}.display{font-family:var(--font-display);font-weight:var(--display-weight);line-height:var(--display-leading);letter-spacing:var(--display-tracking);text-transform:var(--display-case);text-wrap:balance;overflow-wrap:anywhere;color:var(--ink-strong)}.section{padding-top:72px}.section__inner{padding-top:calc(var(--section-divider) * 40);border-top:var(--section-divider) solid var(--rule)}.section-head{flex-wrap:wrap;align-items:baseline;gap:2px 14px;margin-bottom:28px;display:flex}.section-head h2{font-size:var(--h2-size)}.section-head:after{display:var(--section-rule-display);border-right:1px solid var(--rule);background:linear-gradient(var(--rule), var(--rule)) 0 50% / 100% 1px no-repeat;content:"";flex:40px;align-self:center;height:11px}.subhead{font-family:var(--font-display);font-size:var(--subhead-size);font-weight:var(--subhead-weight);letter-spacing:var(--subhead-tracking);text-transform:var(--display-case);overflow-wrap:anywhere;color:var(--ink-strong);line-height:1.2}.rows{border:var(--frame) solid var(--rule);background:var(--frame-ground)}.rows__row{padding:var(--row-pad);border-top:1px solid var(--row-rule);grid-template-columns:minmax(0,1fr);gap:2px 24px;display:grid}.rows__row:first-child{border-top-width:calc(1px - var(--frame))}@media (width>=700px){.rows__row{grid-template-columns:var(--label-column) minmax(0, 1fr);align-items:baseline}}.link,.write-up a{color:var(--link);text-decoration-line:underline;-webkit-text-decoration-color:var(--link-line);text-decoration-color:var(--link-line);text-underline-offset:.2em;text-decoration-thickness:1px}.link:hover,.write-up a:hover{color:var(--link-hover);text-decoration-color:currentColor}.button{border:1px solid var(--accent);border-radius:var(--radius);min-height:44px;font-family:var(--font-mono);letter-spacing:var(--label-tracking);text-transform:var(--label-case);color:var(--accent);align-items:center;gap:10px;padding:9px 16px;font-size:14px;font-weight:500;line-height:1.4;text-decoration:none;display:inline-flex}.button:hover{background:var(--ground-raised);color:var(--ink-strong);border-color:var(--ink-strong)}.button--main{background:var(--accent);color:var(--on-accent)}.button--main:hover{background:var(--ink-strong);color:var(--on-accent)}.status{padding:var(--status-pad);border:var(--status-border) solid var(--rule);font-family:var(--font-mono);letter-spacing:var(--label-tracking);text-transform:var(--label-case);white-space:nowrap;color:var(--ink-dim);align-items:center;gap:8px;font-size:14px;font-weight:500;line-height:1.5;display:inline-flex}.status:before{width:var(--status-dot);height:var(--status-dot);background:var(--ink-dim);content:"";border-radius:50%;flex:none}.status[data-status=in\ progress]{border-style:dashed;border-color:var(--accent);color:var(--accent)}.status[data-status=in\ progress]:before{background:var(--accent)}@page{margin:.55in}@media print{html{background:var(--ground)}body{min-height:0;font-size:9.5pt;line-height:1.4;display:block}body:before,.site-header,.project-card__picture,.project-card__more,.intro__profiles,.gallery,.project__back,.project__links,.project__more,.sheet-label,.section-head:after{display:none!important}body .container{width:auto}body .label,body .status,body .tag-list{font-size:8pt;line-height:1.4}body .tag-list,body .tag-list[data-tone=plain]{gap:0 4pt}body .tag-list li,body .tag-list[data-tone=strong] li{border:0;padding:0;font-weight:400}body .tag-list li:not(:last-child):after,body .tag-list[data-tone=plain] li:not(:last-child):after{content:",";margin:0}body .intro{padding:0;display:block}body .intro__head{gap:2pt}body .intro__name{font-size:28pt;line-height:1}body .intro__role{margin:0;font-size:11pt}body .intro__lede{max-width:none;margin-top:6pt;font-size:10pt;line-height:1.4}body .intro__facts{margin-top:6pt}body .section{padding-top:11pt}body .section__inner{border-top:0;padding-top:0}body .section-head{break-after:avoid;margin-bottom:3pt}body .section-head h2{font-size:13pt}body .subhead{break-after:avoid;margin:7pt 0 2pt;font-size:10pt}body .project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:7pt 18pt}body .project-card{break-inside:avoid;border:0;gap:1pt;padding:0}body .project-card__meta{justify-content:flex-start}body .project-card__meta[data-stamped] .status,body .status{background:0 0;border-width:.5pt;padding:0 3pt;position:static;transform:none}body .status:before{display:none}body .project-card__title{font-size:11pt}body .project-card__summary{font-size:9pt;line-height:1.35}body .rows{break-inside:avoid;border:0}body .rows .rows__row,body .intro__facts .rows__row:not(.rows__row--tags),body .intro__facts .rows__row--tags,body .project__facts .rows__row:not(.rows__row--tags),body .project__facts .rows__row--tags{border-top:.5pt solid var(--rule-soft);break-inside:avoid;grid-template-columns:1.35in minmax(0,1fr);align-items:baseline;gap:0 10pt;padding:2pt 0}body .timeline .rows__row{grid-template-columns:1.35in minmax(0,1fr) minmax(0,1.3fr)}body .timeline .timeline__when{order:0;grid-row:auto;margin:0}body .timeline .timeline__title{grid-column:2}body .timeline .timeline__subtitle{grid-column:3}body .experience__more{gap:0;margin-top:0}body .experience__more .subhead{margin-bottom:2pt}body #experience{break-inside:avoid}body .contact__availability{margin-bottom:3pt;font-size:10pt}body .contact__details{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18pt;display:grid}body .contact__details .rows__row{grid-template-columns:.7in minmax(0,1fr)}body .contact__value{font-size:9pt}body .contact__value a{padding:0}body #contact{break-inside:avoid}body .site-footer{padding:10pt 0 0}body .site-footer__bar{border-top-width:.5pt;padding-top:4pt;font-size:8pt}body .project,body .not-found{padding:0;display:block}body .project__title,body .not-found__heading{font-size:24pt}body .project__summary{max-width:none;font-size:11pt}body .project__facts{margin:8pt 0}body .write-up{border:0;padding:0;font-size:10pt;display:block}body .write-up>*{max-width:none}body .write-up h2{break-after:avoid;margin-top:10pt;margin-bottom:2pt;font-size:13pt}body .write-up h2+*{margin-top:0;padding-top:0}body .write-up p,body .write-up ul,body .write-up ol{margin-top:5pt}body .write-up ul,body .write-up ol{gap:3pt}body .write-up li{break-inside:avoid}body .write-up a[href^=http]:after{content:" (" attr(href) ")";overflow-wrap:anywhere;font-size:8pt}}.site-footer{padding:72px 0 32px}.site-footer__bar{border-top:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;gap:4px 24px;padding-top:16px;display:flex}.theme-toggle{margin-inline:calc(var(--toggle-outdent) * -1);align-items:stretch;display:none}.js .theme-toggle{visibility:hidden;display:flex}.toggle-ready .theme-toggle{visibility:visible}.theme-toggle__label{align-items:center;align-self:var(--toggle-label-align);margin-left:var(--toggle-label-gap);border-left:1px solid var(--rule);padding-inline:14px 12px;display:none}@media (width>=1024px){.theme-toggle__label{display:flex}}.theme-toggle__option{flex:var(--toggle-grow) 1 auto;min-height:44px;padding:0 var(--toggle-pad);border:0;border-left:var(--frame) solid var(--rule);font-family:var(--font-mono);letter-spacing:0;color:var(--ink-dim);cursor:pointer;background:0 0;border-radius:0;justify-content:center;align-items:center;margin:0;font-size:14px;font-weight:500;line-height:1;display:inline-flex}.theme-toggle__option:hover{color:var(--ink-strong)}.theme-toggle__option:focus-visible{outline-offset:-4px}:root:not([data-theme=graphite]) .theme-toggle__option[data-option=blueprint],:root[data-theme=graphite] .theme-toggle__option[data-option=graphite]{background:var(--toggle-on-ground);color:var(--toggle-on-ink)}:root:not([data-theme=graphite]) .theme-toggle__option[data-option=blueprint]:before,:root[data-theme=graphite] .theme-toggle__option[data-option=graphite]:before{width:var(--toggle-dot);height:var(--toggle-dot);margin-right:var(--toggle-dot);background:var(--accent);content:"";border-radius:50%;flex:none}:root:not([data-theme=graphite]) .theme-toggle__option[data-option=blueprint]:focus-visible,:root[data-theme=graphite] .theme-toggle__option[data-option=graphite]:focus-visible{outline-color:var(--toggle-on-ink)}.site-header{padding-top:24px}.site-header__bar{border:var(--frame) solid var(--rule);background:var(--frame-ground);grid-template-columns:minmax(0,1fr) auto;align-items:stretch;display:grid}.site-header__name{min-height:44px;padding-inline:var(--frame-pad);font-family:var(--brand-font);font-size:var(--brand-size);font-weight:var(--brand-weight);letter-spacing:var(--brand-tracking);text-transform:var(--brand-case);overflow-wrap:anywhere;color:var(--ink-strong);align-items:center;line-height:1.2;text-decoration:none;display:flex}.site-header__name:hover{color:var(--accent)}.site-header__name:focus-visible,.site-nav a:focus-visible{outline-offset:-4px}.site-nav{border-top:var(--frame) solid var(--rule);grid-area:2/1/auto/-1}.site-nav ul{justify-content:space-between;display:flex}.site-nav a{min-height:44px;padding-inline:var(--frame-pad);font-family:var(--font-mono);letter-spacing:var(--label-tracking);text-transform:var(--label-case);color:var(--ink-dim);align-items:center;font-size:14px;line-height:1.2;text-decoration:none;display:flex}.site-nav a:hover{color:var(--ink-strong)}@media (width>=800px){.site-header__bar{grid-template-columns:minmax(0,1fr) auto auto}.site-nav{border-top:0;grid-area:auto}.site-nav ul{justify-content:flex-end;gap:4px;height:100%;padding-inline:8px}.site-nav a{height:100%;padding-inline:12px}}@media (width<=399.98px){.site-header__name{padding-inline:min(var(--frame-pad), 10px) 0;letter-spacing:min(var(--brand-tracking), .06em);overflow:hidden}.site-nav a{padding-inline:min(var(--frame-pad), 8px);letter-spacing:min(var(--label-tracking), .06em)}.site-header .theme-toggle__option{padding-inline:8px}}@media (width<=359.98px){.site-header__bar{grid-template-columns:minmax(0,1fr)}.site-header .theme-toggle{border-top:var(--frame) solid var(--rule)}.site-header .theme-toggle__option:first-of-type{border-left:0}.site-nav{grid-row:3}}.skip-link{z-index:10;border:1px solid var(--accent);background:var(--ground-raised);font-family:var(--font-mono);color:var(--ink-strong);padding:10px 16px;font-size:14px;font-weight:500;line-height:1.4;text-decoration:none;position:absolute;top:8px;left:8px;transform:translateY(-200%)}.skip-link:focus{transform:none}
