@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-vietnamese-wdth-normal.rJmnGBSt.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-ext-wdth-normal.7khWdh9v.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-wdth-normal.DY7AcnAa.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#fff;--ink:#111418;--muted:#545b66;--line:#d5d9df;--grid:#eceef1;--grid-line:#cfd4db;--blue:#244cda;--on-blue:#fff;--on-blue-muted:#d6dffc;--font:"Archivo Variable", "Archivo", "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--inset:64px;--shell:1248px;--m:calc((min(100vw, var(--shell)) - 2 * var(--inset)) / 12);--snap:90ms steps(2, jump-end)}@view-transition{navigation:auto}*{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-color:var(--ink) var(--paper);-webkit-text-size-adjust:100%;scroll-padding-top:32px}body{background:var(--paper);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums;margin:0;font-size:1.0625rem;font-stretch:100%;line-height:1.6}::selection{background:var(--blue);color:var(--on-blue)}a{color:inherit;text-underline-offset:.22em;text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:3px solid var(--blue);outline-offset:4px}.building :focus-visible,.hevy-demo :focus-visible,.contact-strip :focus-visible,.programmes:has(.leading:is(:hover,:focus-within)) .leading :focus-visible{outline-color:var(--on-blue)}button{font:inherit;cursor:pointer}button[hidden]{display:none!important}h1,h2,h3,p,figure,blockquote{margin:0}h1,h2,h3{text-wrap:balance;overflow-wrap:anywhere;letter-spacing:-.035em;font-weight:800;font-stretch:125%;line-height:1}h1{font-size:clamp(2.75rem,7vw,6rem);line-height:.92}h2{font-size:clamp(1.75rem,3vw,2.5rem)}h1 em,h2 em,h3 em,.project-deck em,.feature-deck em{font-style:normal;font-weight:300}em{font-style:italic}.arrow{vertical-align:middle;flex-shrink:0;width:20px;height:20px}.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}.desktop-break{display:inline}.site-shell{max-width:var(--shell);padding:0 var(--inset);margin:0 auto}.masthead{view-transition-name:masthead;border-bottom:3px solid var(--ink);justify-content:space-between;align-items:stretch;gap:24px;display:flex}.wordmark{letter-spacing:-.02em;align-items:center;gap:16px;max-width:100%;min-height:64px;font-weight:700;font-stretch:112%;display:flex}.wordmark:hover{text-decoration:none}.name-mark{background:var(--blue);width:44px;height:44px;color:var(--on-blue);letter-spacing:-.04em;flex-shrink:0;place-items:center;font-size:1.05rem;font-weight:800;font-stretch:125%;line-height:1;display:grid}.masthead nav{flex-wrap:wrap;align-items:stretch;display:flex}.masthead nav a{min-height:64px;transition:background var(--snap), color var(--snap);align-items:center;padding:0 18px;font-size:.9375rem;font-weight:600;display:flex}.masthead nav a:hover{background:var(--grid);text-decoration:none}.masthead nav a[aria-current=page]{background:var(--ink);color:var(--paper)}.skip-link{z-index:100;background:var(--blue);color:var(--on-blue);padding:12px 18px;position:fixed;top:12px;left:12px;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}main:focus{outline:none}.text-link,.quiet-link{align-items:center;gap:10px;min-height:44px;font-weight:700;display:inline-flex}.quiet-link{font-size:.9375rem;font-weight:500}.text-link .arrow{transition:transform var(--snap)}.text-link:hover .arrow{transform:translate(4px)}.button{border:2px solid var(--ink);background:var(--ink);min-height:48px;color:var(--paper);transition:background var(--snap), border-color var(--snap);border-radius:0;justify-content:center;align-items:center;gap:12px;padding:0 20px;font-size:.9375rem;font-weight:700;display:inline-flex}.button:hover{background:var(--blue);border-color:var(--blue);text-decoration:none}.button-outline{color:var(--ink);background:0 0}.button-outline:hover{color:var(--on-blue)}.button-light{background:var(--paper);color:var(--blue);border-color:var(--paper)}.button-light:hover{background:var(--on-blue-muted);border-color:var(--on-blue-muted);color:var(--ink)}.button-line{color:var(--on-blue);background:0 0;border-color:#ffffffb8}.button-line:hover{background:var(--paper);border-color:var(--paper);color:var(--blue)}.poster{--rows:6;--line-1:3;--line-2:5;grid-template-columns:repeat(12,1fr);grid-template-rows:repeat(var(--rows), var(--m));background-image:linear-gradient(to right, var(--grid-line) 1px, transparent 1px), linear-gradient(to bottom, var(--grid-line) 1px, transparent 1px);background-size:var(--m) var(--m);display:grid}.poster h1{grid-area:1/1/-1/-1;grid-template-rows:subgrid;font-size:calc(var(--m) * 1.8);text-transform:lowercase;letter-spacing:-.04em;line-height:1;display:grid}.poster h1 span{text-box:trim-both ex alphabetic;align-self:end;margin-left:-.05em;display:block}.poster h1 span:first-child{grid-row:var(--line-1)}.poster h1 span:last-child{grid-row:var(--line-2)}.poster-context{z-index:1;text-align:right;flex-direction:column;grid-area:1/9/span 2/13;justify-content:center;align-items:end;gap:6px;font-size:.875rem;font-weight:600;display:flex}.poster-location{color:var(--muted);font-size:.75rem;font-weight:500}.poster-tagline{letter-spacing:-.025em;grid-area:6/1/auto/9;align-self:center;font-size:clamp(1.375rem,2.2vw,2rem);font-weight:700;font-stretch:112%;line-height:1.1}.programmes{background:var(--ink);border-top:3px solid var(--ink);border-bottom:3px solid var(--ink);grid-template-columns:1fr 1fr;gap:3px;display:grid}.programme{padding:calc(var(--m) * .5);background:var(--paper);min-width:0;transition:background var(--snap), color var(--snap);flex-direction:column;align-items:start;gap:16px;display:flex}.programme-heading{border-bottom:2px solid;align-items:baseline;gap:14px;width:100%;padding-bottom:12px;display:flex}.programme-number,.section-number{font-variant-numeric:tabular-nums;font-size:.8125rem;font-weight:700}.programme h2{text-transform:lowercase;font-size:clamp(2.25rem,4.4vw,3.5rem)}.programme-lead{margin-bottom:-12px;font-size:1.25rem;font-weight:700;line-height:1.35}.programme-context,.project-status{color:var(--muted);font-size:.9375rem;font-weight:600}.programme-body{max-width:44ch;color:var(--muted)}.career-label{margin-bottom:-8px;font-size:.8125rem;font-weight:700}.project-title{letter-spacing:-.03em;margin:0;font-size:clamp(1.75rem,3vw,2.5rem);font-stretch:112%}.project-title a:hover{text-underline-offset:.14em;text-decoration-thickness:2px}.programme-links{flex-wrap:wrap;gap:10px 12px;width:100%;margin-top:auto;display:flex}.programme-links .button{flex:none}.leading .button{margin-top:auto}.career-mini{border-top:2px solid;width:100%;margin:0;padding:0;list-style:none}.career-mini li{border-bottom:1px solid var(--line);grid-template-columns:1fr 1fr;gap:16px;padding:14px 0;font-size:.9375rem;display:grid}.career-mini li span:first-child{font-weight:700}.career-mini li span:last-child{color:var(--muted)}.programmes:has(.leading:is(:hover,:focus-within)) .career-mini li{border-color:#ffffff4d}.programmes:has(.leading:is(:hover,:focus-within)) .career-mini li span:last-child{color:var(--on-blue-muted)}.building,.programmes:has(.leading:is(:hover,:focus-within)) .leading{background:var(--blue);color:var(--on-blue)}.building :is(.programme-context,.programme-body,.project-status),.programmes:has(.leading:is(:hover,:focus-within)) .leading :is(.programme-context,.programme-body,.career-mini li span:last-child){color:var(--on-blue-muted)}.programmes:has(.leading:is(:hover,:focus-within)) .building{background:var(--paper);color:var(--ink)}.programmes:has(.leading:is(:hover,:focus-within)) .building :is(.programme-context,.programme-body,.project-status){color:var(--muted)}.programmes:has(.leading:is(:hover,:focus-within)) .leading .button-outline{border-color:var(--paper);color:var(--paper)}.programmes:has(.leading:is(:hover,:focus-within)) .building .button-light{background:var(--ink);border-color:var(--ink);color:var(--paper)}.programmes:has(.leading:is(:hover,:focus-within)) .building .button-line{border-color:var(--ink);color:var(--ink)}.programmes:has(.leading:is(:hover,:focus-within)) .building .hevy-demo{border-color:var(--ink)}.hevy-demo{background:var(--paper);width:100%;min-width:0;color:var(--ink);border:2px solid var(--paper);flex-direction:column;padding:20px 22px 16px;display:flex}.demo-top{color:var(--muted);justify-content:space-between;gap:16px;font-size:.75rem;font-weight:600;display:flex}.hevy-demo blockquote{letter-spacing:-.02em;margin:14px 0 16px;font-size:1.375rem;font-weight:700;font-stretch:112%;line-height:1.15}.hevy-demo blockquote em{color:var(--blue);font-style:normal}.hevy-demo.compact blockquote br{display:none}.demo-response{border-top:2px solid var(--ink);padding-top:10px}.workout-title{justify-content:space-between;gap:16px;margin-bottom:6px;display:flex}.workout-title strong{font-size:.9375rem}.workout-title span{color:var(--muted);font-size:.75rem}.demo-response table{border-collapse:collapse;width:100%;font-size:.875rem}.demo-response th{text-align:left;color:var(--muted);padding-bottom:4px;font-size:.75rem;font-weight:500}.demo-response th:last-child,.demo-response td:last-child{text-align:right;font-family:var(--mono);font-size:.8125rem}.demo-response td{border-top:1px solid var(--line);padding:6px 0}.hevy-demo figcaption{color:var(--muted);margin-top:12px;font-size:.75rem}.home-section{padding:calc(var(--m) * .5) 0 calc(var(--m) * .5)}.section-heading{border-bottom:3px solid var(--ink);justify-content:space-between;align-items:end;gap:24px;margin-bottom:0;padding-bottom:12px;display:flex}.section-title{align-items:baseline;gap:14px;display:flex}.section-heading h2{text-transform:lowercase;font-size:clamp(1.75rem,3vw,2.5rem)}.post-list{margin:0;padding:0;list-style:none}.post-row{border-bottom:1px solid var(--line);transition:background var(--snap);grid-template-columns:2fr 9fr 1fr;align-items:baseline;gap:24px;padding:24px 0;display:grid}.post-row:hover{background:var(--grid);text-decoration:none}.post-date{flex-direction:column;gap:2px;font-size:.875rem;font-weight:600;display:flex}.post-date span{color:var(--muted);font-size:.75rem;font-weight:500}.post-copy h2,.post-copy h3{letter-spacing:-.025em;margin-bottom:8px;font-size:clamp(1.375rem,2.2vw,1.875rem);font-weight:700;font-stretch:112%;line-height:1.1}.post-copy p{color:var(--muted);max-width:62ch}.post-row>.arrow{justify-self:end;width:24px;height:24px}.post-row:hover>.arrow{color:var(--blue)}.contact-strip{margin-top:calc(var(--m) * .5);padding:calc(var(--m) * .5);background:var(--ink);color:var(--paper);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:32px;display:grid}.contact-copy .section-title{margin-bottom:12px}.contact-copy h2{letter-spacing:-.035em;font-size:clamp(1.5rem,3vw,2.25rem);font-weight:800;font-stretch:112%;line-height:1.05}.contact-copy>p{max-width:52ch;color:var(--on-blue-muted);font-size:.9375rem}.contact-strip .button-light{min-width:150px}.empty-state{color:var(--muted);padding:24px 0}.footer{margin-top:calc(var(--m) * .5);border-top:3px solid var(--ink);padding:24px 0}.footer-main{justify-content:space-between;gap:32px;display:flex}.footer-name{font-weight:700}.footer-main p{color:var(--muted);margin-top:4px;font-size:.875rem}.footer-links{flex-wrap:wrap;gap:4px 24px;display:flex}.footer-links a{align-items:center;gap:6px;min-height:44px;font-size:.875rem;font-weight:600;display:inline-flex}.footer-links .arrow{width:16px;height:16px}.footer-bottom{color:var(--muted);justify-content:space-between;gap:24px;padding-top:32px;font-size:.75rem;display:flex}.page-intro{padding:var(--m) 0 calc(var(--m) * .5)}.page-intro h1{margin-bottom:24px}.page-intro>p,.page-intro>div>p{max-width:52ch;color:var(--muted);font-size:1.1875rem}.page-intro>.quiet-link{margin-top:12px}.intro-links{flex-wrap:wrap;align-items:center;gap:8px 32px;margin-top:20px;display:flex}.blog-index{border-top:3px solid var(--ink)}.index-end{padding:24px 0 var(--m);color:var(--muted);justify-content:space-between;align-items:center;gap:24px;font-size:.875rem;display:flex}.projects-index{margin-bottom:var(--m)}.projects-index .feature+.feature{margin-top:32px}.back-row{color:var(--muted);justify-content:space-between;gap:24px;padding-top:24px;font-size:.875rem;display:flex}.back-row>a{min-height:44px;color:var(--ink);align-items:center;font-weight:700;display:inline-flex}.back-row>a .arrow{margin-right:8px;transform:scaleX(-1)}.feature{border:3px solid var(--ink);background:var(--ink);grid-template-columns:1fr 1fr;gap:3px;display:grid}.feature-copy{background:var(--paper)}.feature-generic{display:block}.feature-copy{padding:calc(var(--m) * .5);flex-direction:column;align-items:start;display:flex}.feature-title{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:20px;display:flex}.feature-title h2,.feature-title h3{text-transform:lowercase;letter-spacing:-.04em;font-size:clamp(2.25rem,4.4vw,3.5rem)}.feature-deck{letter-spacing:-.02em;overflow-wrap:anywhere;margin-bottom:16px;font-size:clamp(1.375rem,2.2vw,1.75rem);font-weight:700;font-stretch:112%;line-height:1.15}.feature-copy>.feature-foot:not(:last-child){margin-top:0;margin-bottom:12px;padding-top:0}.feature-summary{max-width:40ch;color:var(--muted);margin-bottom:12px}.feature-generic .feature-summary{max-width:62ch}.feature-foot{color:var(--muted);margin-top:auto;padding-top:24px;font-size:.75rem;font-weight:600}.feature-foot span{margin:0 6px}.feature>.hevy-demo{background:var(--blue);padding:calc(var(--m) * .5);color:var(--on-blue);border:0}.feature>.hevy-demo .demo-top,.feature>.hevy-demo figcaption{color:var(--on-blue-muted)}.feature>.hevy-demo blockquote em{color:var(--on-blue);text-underline-offset:.15em;text-decoration:underline 3px}.feature>.hevy-demo .demo-response{background:var(--paper);color:var(--ink);border:0;padding:14px 16px 8px}.article-header{max-width:900px;margin:calc(var(--m) * .5) 0 calc(var(--m) * .5) calc(var(--m) * 2)}.article-header h1{margin-bottom:24px;font-size:clamp(2.5rem,5.5vw,4.5rem)}.article-header>p{max-width:56ch;color:var(--muted);font-size:1.1875rem}.article-meta{color:var(--muted);flex-wrap:wrap;gap:8px 24px;margin-top:20px;font-size:.8125rem;font-weight:600;display:flex}.article-meta span:first-child{color:var(--ink)}.article-grid{grid-template-columns:calc(var(--m) * 2 - 32px) minmax(0, 1fr);border-top:3px solid var(--ink);align-items:start;gap:32px;padding-top:32px;display:grid}.article-side{color:var(--muted);overflow-wrap:anywhere;flex-direction:column;gap:6px;font-size:.8125rem;display:flex}.article-side p{color:var(--ink);font-weight:700}.article-side p:not(:first-child){margin-top:18px}.article-side ol{flex-direction:column;gap:10px;margin:12px 0;padding:0;list-style:none;display:flex}.prose{min-width:0;max-width:68ch;font-size:1.0625rem;line-height:1.75}.prose p{margin:0 0 22px}.prose h2{margin:48px 0 18px;font-size:clamp(1.625rem,2.6vw,2.125rem);line-height:1.1}.prose h2:first-child{margin-top:0}.prose h3{margin:32px 0 14px;font-size:1.25rem;font-stretch:112%}.prose a{color:var(--blue);text-decoration:underline}.prose a.text-link{color:var(--ink);text-decoration:none}.prose ul,.prose ol{margin:0 0 22px;padding-left:22px}.prose li{margin-bottom:8px}.prose li::marker{color:var(--ink);font-weight:700}.prose code{font-family:var(--mono);overflow-wrap:anywhere;font-size:.86em}.prose :not(pre)>code{background:var(--grid);padding:2px 5px}.prose pre{border:2px solid var(--ink);tab-size:2;max-width:100%;margin:24px 0;padding:24px;font-size:.875rem;line-height:1.7;overflow-x:auto}.prose pre code{overflow-wrap:normal;font-size:inherit}.code-wrap{margin:24px 0;position:relative}.code-wrap pre{margin:0;padding-top:60px}.copy-button{border:1.5px solid var(--ink);background:var(--paper);min-height:44px;color:var(--ink);border-radius:0;padding:0 14px;font-size:.75rem;font-weight:600;position:absolute;top:8px;right:8px}.copy-button:hover{background:var(--blue);border-color:var(--blue);color:var(--on-blue)}.prose blockquote{border:2px solid var(--ink);margin:24px 0;padding:18px 22px;font-size:1rem}.prose blockquote p:last-child{margin:0}.prose table{border-collapse:collapse;max-width:100%;margin:24px 0;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;padding:10px 12px}.prose th{border-bottom:2px solid var(--ink)}.prose img{max-width:100%;height:auto}.prose .lead{letter-spacing:-.02em;font-size:clamp(1.375rem,2.4vw,1.75rem);font-weight:700;font-stretch:112%;line-height:1.3}.reading-close{margin:calc(var(--m) * .5) 0 0 calc(var(--m) * 2);border-top:3px solid var(--ink);padding:24px 0}.reading-close p{letter-spacing:-.035em;margin-bottom:6px;font-size:clamp(1.5rem,2.6vw,2rem);font-weight:800;font-stretch:125%}.small-note{color:var(--muted);font-size:.875rem}.prose .small-note{margin-top:40px}.project-header{padding:calc(var(--m) * .5) 0;grid-template-columns:1fr 1fr;align-items:end;gap:48px;display:grid}.project-header h1{text-transform:lowercase;font-size:clamp(3rem,6.4vw,6rem)}.project-deck{letter-spacing:-.025em;margin-top:20px;font-size:clamp(1.5rem,2.6vw,2.25rem);font-weight:700;font-stretch:112%;line-height:1.1}.project-header>div>p:not(.project-deck){color:var(--muted);font-size:1.125rem}.project-links{flex-wrap:wrap;align-items:center;gap:12px 24px;margin-top:24px;display:flex}.project-demonstration{background:var(--ink);margin:0 0 calc(var(--m) * .5);border-top:3px solid var(--ink);border-bottom:3px solid var(--ink);grid-template-columns:7fr 5fr;gap:3px;display:grid}.project-demonstration .hevy-demo{background:var(--blue);color:var(--on-blue);padding:calc(var(--m) * .5);border:0}.project-demonstration .hevy-demo .demo-top,.project-demonstration .hevy-demo figcaption{color:var(--on-blue-muted)}.project-demonstration .hevy-demo blockquote{letter-spacing:-.04em;margin:24px 0;font-size:clamp(2rem,4vw,3.25rem);font-weight:800;font-stretch:125%;line-height:.98}.project-demonstration .hevy-demo blockquote em{color:var(--on-blue);text-underline-offset:.12em;text-decoration:underline 4px}.project-demonstration .demo-response{background:var(--paper);color:var(--ink);border:0;padding:16px 18px 8px}.project-demonstration aside{padding:calc(var(--m) * .5);background:var(--paper);flex-direction:column;justify-content:center;gap:16px;display:flex}.project-demonstration aside h2{margin-bottom:8px;font-size:clamp(1.625rem,2.6vw,2.25rem)}.project-demonstration aside p{color:var(--muted)}.project-demonstration aside .annotation{border-top:2px solid var(--ink);color:var(--ink);margin-top:8px;padding-top:16px;font-weight:600}.project-body{margin-bottom:calc(var(--m) * .5)}.project-demonstration+.article-grid{border-top:0;padding-top:0}.article-grid.project-body--solo{grid-template-columns:minmax(0,1fr)}.about-socials{flex-wrap:wrap;gap:4px 28px;display:flex}.about-socials a{align-items:center;gap:6px;min-height:44px;font-weight:600;display:flex}.cv-intro{justify-content:space-between;align-items:end;gap:32px;display:flex}.print-button{color:var(--ink);white-space:normal;text-align:center;background:0 0}.print-button:hover{color:var(--on-blue)}.cv-profile{border-top:3px solid var(--ink);grid-template-columns:5fr 7fr;gap:32px;padding:24px 0;display:grid}.cv-profile h2{font-size:clamp(1.75rem,3vw,2.5rem)}.cv-profile p{color:var(--muted)}.print-contact{display:none}.cv-review-note{border:2px solid var(--ink);gap:20px;margin-bottom:32px;padding:14px 18px;font-size:.875rem;display:flex}.cv-review-note strong{white-space:nowrap}.cv-review-note p{max-width:70ch}.career-entry{border-top:1px solid var(--line);grid-template-columns:5fr 7fr;gap:32px;padding:32px 0;display:grid}.career-entry:first-child{border-top:3px solid var(--ink)}.period{color:var(--muted);margin-top:6px;font-size:.8125rem;font-weight:600;display:block}.career-company h2{letter-spacing:-.02em;margin-top:6px;font-size:1.5rem;font-stretch:112%}.career-role h3{letter-spacing:-.01em;font-size:1.125rem;font-weight:700;font-stretch:100%;line-height:1.4}.career-role p{color:var(--muted)}.career-role p.role-area{color:var(--ink);margin:4px 0 10px;font-size:.875rem;font-weight:600}.career-role+.career-role{border-top:1px solid var(--line);margin-top:24px;padding-top:24px}.not-found{padding-bottom:calc(var(--m) * 1.5)}@media (width<=1000px){:root{--inset:40px}.poster-context{grid-column:7/13}.article-header,.reading-close{margin-left:0}}@media (width<=760px){:root{--inset:20px;--m:calc((100vw - 2 * var(--inset)) / 6)}.masthead{flex-direction:column;gap:0}.wordmark{min-height:56px}.masthead nav{border-top:1px solid var(--line);margin:0 calc(var(--inset) * -1);padding:0 calc(var(--inset) - 12px)}.masthead nav a{min-height:48px;padding:0 12px}.poster{--rows:5;--line-1:3;--line-2:4;grid-template-columns:repeat(6,1fr)}.poster h1{font-size:calc(var(--m) * .98)}.poster-context{text-align:left;flex-direction:row;grid-area:1/1/auto/-1;justify-content:space-between;align-items:baseline;gap:8px;font-size:.75rem}.poster-location{font-size:.6875rem}.poster-tagline{grid-area:5/1/auto/-1;font-size:clamp(1.125rem,5vw,1.375rem)}.leading .career-label,.leading .career-mini{display:none}.programmes{grid-template-columns:1fr}.programme{gap:8px;padding:20px 0}.programme.building{margin:0 calc(var(--inset) * -1);padding:32px var(--inset)}.post-row{grid-template-columns:minmax(0,1fr) 24px;gap:8px 16px}.post-date{flex-direction:row;grid-column:1/-1;gap:14px}.footer-main,.index-end,.cv-intro{flex-direction:column;align-items:start}.contact-strip{grid-template-columns:1fr;gap:20px;padding:24px}.desktop-break{display:none}.feature{grid-template-columns:1fr}.feature-copy{padding:24px}.article-grid{padding-top:24px;display:block}.article-side{flex-flow:wrap;align-items:baseline;gap:6px 16px;margin-bottom:24px}.article-side nav{width:100%}.article-side p:not(:first-child){margin-top:0}.project-header{display:block}.project-header>div+div{margin-top:24px}.project-demonstration{margin-left:calc(var(--inset) * -1);margin-right:calc(var(--inset) * -1);grid-template-columns:1fr}.project-demonstration .hevy-demo{padding:28px var(--inset)}.project-demonstration .hevy-demo blockquote br{display:none}.project-demonstration aside{padding:28px var(--inset)}.cv-profile,.career-entry{grid-template-columns:1fr;gap:12px}.cv-review-note{display:block}.cv-review-note p{margin-top:4px}.prose pre{padding:20px 16px;font-size:.8125rem}.code-wrap pre{padding-top:60px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}@media print{@page{size:A4;margin:16mm}html,body{font-size:10pt;color:#000!important;background:#fff!important}.site-shell{max-width:none;padding:0}.masthead,.footer,.skip-link,.cv-intro,.cv-review-note,.print-button{display:none!important}.cv-profile{border:0;padding:0 0 6mm;display:block}.cv-profile h2{margin:0 0 3mm;font-size:24pt}.cv-profile p{color:#222;font-size:10pt}.cv-profile .print-contact{margin-top:2mm;display:block}.career-entry{break-inside:avoid;border-top:.5pt solid #999;grid-template-columns:50mm 1fr;gap:8mm;padding:5mm 0;display:grid}.career-entry:first-child{border-top:1.5pt solid #000}.career-company h2{font-size:12pt}.period{font-size:9pt}.career-role h3{font-size:11pt}.career-role p,.career-role p.role-area{color:#222;font-size:10pt;line-height:1.5}.career-role+.career-role{margin-top:4mm;padding-top:4mm}a{text-decoration:none}}.demo-top[hidden]{display:none}
