@font-face{font-family:'Space Grotesk';src:url('assets/fonts/SpaceGrotesk.ttf') format('truetype');font-weight:300 700;font-display:swap}
*{box-sizing:border-box}html{background:var(--background);color:var(--text)}body{margin:0;font-family:var(--font-family),var(--font-fallback);font-size:16px;line-height:1.6}a{color:inherit;text-underline-offset:5px}a:hover{text-decoration-thickness:2px}a:focus-visible{outline:3px solid var(--focus);outline-offset:6px}img{display:block;max-width:100%}.wrap{width:min(100% - 2 * var(--layout-gutter),1312px);margin-inline:auto}.spectrum{width:100%;height:48px;object-fit:fill}.header-row{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-block:30px}.brand{font-size:19px;line-height:1.2;font-weight:500;letter-spacing:-.04em;text-decoration:none}.brand span{display:block}nav{display:flex;align-items:center;gap:32px}nav a{text-decoration:none;font-size:14px}.social{display:inline-flex;align-items:center;gap:9px}.social svg{width:18px;height:18px;fill:currentColor}.skip{position:absolute;left:20px;top:-100px;background:var(--background);padding:12px;z-index:2}.skip:focus{top:12px}.hero{display:grid;grid-template-columns:1.1fr 1fr;align-items:center;gap:48px;min-height:650px;padding-block:64px 96px}.eyebrow{text-transform:uppercase;letter-spacing:.12em;font-size:12px;font-weight:500;margin:0 0 28px;display:flex;align-items:center;gap:12px}.eyebrow:before{content:'';width:24px;height:8px;background:var(--colour-lime)}h1{font-size:clamp(56px,7.4vw,108px);font-weight:500;letter-spacing:-.065em;line-height:1.01;margin:0 0 32px}.intro{font-size:19px;line-height:1.6;max-width:410px;color:var(--secondary-text);margin:0 0 32px}.button{display:inline-flex;align-items:center;justify-content:space-between;gap:40px;background:var(--action);color:var(--on-action);padding:16px 22px;text-decoration:none;font-weight:500;border-radius:2px}.button:hover{outline:2px solid var(--action);outline-offset:4px}.hero-art{height:500px;overflow:hidden;position:relative;background:var(--colour-ink)}.hero-art img{height:100%;width:100%;max-width:none;object-fit:cover;object-position:48% center}.art-caption{display:flex;justify-content:space-between;gap:16px;padding-top:12px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--secondary-text)}.hero-meta{border-top:1px solid var(--border);padding-block:22px;display:flex;justify-content:space-between;gap:20px;font-size:13px;color:var(--secondary-text)}footer{margin-top:40px}.footer-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:20px;padding-block:32px;font-size:12px}.footer-row strong{font-weight:500}.footer-links{display:flex;gap:24px;flex-wrap:wrap}.cv-heading{padding-block:64px 48px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:flex-start;gap:32px}.cv-heading h1{font-size:clamp(48px,6.5vw,88px);margin-bottom:16px}.cv-heading .intro{margin-bottom:12px}.cv-contact{font-size:14px;color:var(--secondary-text);display:flex;gap:16px;flex-wrap:wrap}.cv-body{display:grid;grid-template-columns:240px 1fr;column-gap:64px;padding-block:56px}.cv-body>h2{font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.1em;margin:6px 0 24px}.profile{font-size:24px;line-height:1.5;letter-spacing:-.025em;margin:0 0 64px;max-width:760px}.jobs{margin-bottom:32px}.job{padding:0 0 32px;margin:0 0 32px;border-bottom:1px solid var(--border)}.job:last-child{margin-bottom:0}.job time{font-size:12px;color:var(--secondary-text)}.job h3{font-size:25px;line-height:1.25;font-weight:500;letter-spacing:-.035em;margin:8px 0}.job .employer{font-size:16px;margin:0}.job .place{font-size:13px;color:var(--secondary-text);margin:4px 0 14px}.job p:last-child{max-width:760px;margin-bottom:0}.references{margin-top:0;color:var(--secondary-text)}
@media(min-width:1500px){.hero{min-height:720px}}@media(max-width:850px){.hero{grid-template-columns:1fr;gap:40px;padding-block:40px 48px;min-height:0}.hero-art{height:320px}.hero h1{font-size:clamp(56px,11vw,88px)}.intro{max-width:540px}.cv-body{grid-template-columns:160px 1fr;gap:24px}.cv-heading{flex-direction:column}.hero-meta{flex-wrap:wrap}}@media(max-width:520px){.spectrum{height:32px}.header-row{padding-block:24px;align-items:flex-start;gap:12px}.brand{font-size:16px}nav{gap:18px;padding-top:3px}nav .social span{display:none}.hero{padding-top:28px}.eyebrow{font-size:10px;letter-spacing:.09em;margin-bottom:24px}h1{margin-bottom:24px}.intro{font-size:17px}.hero-art{height:260px}.hero-meta{font-size:12px}.footer-row{align-items:flex-start;flex-direction:column}.footer-links{gap:14px;flex-direction:column}.cv-heading{padding-top:36px}.cv-heading h1{font-size:47px}.cv-contact{flex-direction:column;gap:4px}.cv-body{display:block;padding-top:32px}.cv-body>h2{margin-top:32px}.profile{font-size:21px;margin-bottom:40px}.job h3{font-size:23px}.art-caption{font-size:10px}}
@media print{nav,.skip,.button,footer,.header-row{display:none}.spectrum{height:12px}.cv-body{display:block}.cv-heading{padding:24px 0}.cv-heading h1{font-size:42px}.cv-body>h2{margin-top:24px}.profile{font-size:16px;margin-bottom:20px}.job{break-inside:avoid;padding-bottom:16px;margin-bottom:16px}.job h3{font-size:20px}html{background:white;color:#20231d}body{font-size:11px}.wrap{width:100%}}

/* Toggle follows ../aoc-design-system/styles.css; theme.js blends semantic roles. */
.theme-toggle{min-height:44px;padding:8px 14px;border:1px solid var(--text);border-radius:var(--layout-radius);background:var(--surface);color:var(--text);font:inherit;font-size:12px;white-space:nowrap;cursor:pointer}
.theme-toggle[hidden]{display:none}
.theme-toggle[aria-pressed=true]{background:var(--action);color:var(--on-action)}
.theme-toggle:focus-visible{outline:3px solid var(--focus);outline-offset:6px}
@media(max-width:520px){.header-row{flex-wrap:wrap}nav{gap:16px;flex-wrap:wrap} .theme-toggle{padding-inline:10px}}
@media print{:root{--background:#fff!important;--text:#20231d!important;--secondary-text:#5d6257!important;--border:#d8d9ce!important;color-scheme:light}.theme-toggle{display:none}}

/* Project links use the shared semantic roles and a simple ruled layout. */
.projects{padding-block:64px 32px}.projects h2{font-size:clamp(36px,4vw,56px);font-weight:500;letter-spacing:-.04em;line-height:1.1;margin:0 0 40px}.project-list{display:grid;grid-template-columns:1fr 1fr;gap:48px}.project-list article{border-top:1px solid var(--border);padding-top:24px}.project-list h3{font-size:25px;font-weight:500;letter-spacing:-.035em;line-height:1.25;margin:0 0 16px}.project-list h3 a{display:flex;justify-content:space-between;gap:20px;text-decoration:none}.project-list h3 a:hover{text-decoration:underline}.project-list p{max-width:480px;color:var(--secondary-text);margin:0}
@media(max-width:650px){.projects{padding-block:48px 24px}.project-list{grid-template-columns:1fr;gap:32px}.projects h2{margin-bottom:32px}}
