:root{--paper:#f7f8fa;--grid:#e3e8ee;--ink:#10161f;--ink-soft:#3d4654;--ink-muted:#69727f;--ink-faint:#98a0ac;--rule:#10161f;--rule-soft:#d4dae2;--trace:#1c5bd8;--pen:#c22f2f;--font-mono:"Spline Sans Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--font-serif:"Newsreader", "Georgia", "Times New Roman", serif;--font-display:"Archivo", "Helvetica Neue", Arial, sans-serif;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--space-9:96px;--measure:72ch;--col-date:11ch}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);color:var(--ink);font-family:var(--font-serif);-webkit-font-smoothing:antialiased;font-feature-settings:"kern";background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);background-position:50% 0;background-size:28px 28px;min-height:100vh;font-size:16px;line-height:1.55}a{color:inherit;text-decoration:underline;-webkit-text-decoration-color:var(--ink-faint);text-decoration-color:var(--ink-faint);text-underline-offset:3px;transition:color .12s,text-decoration-color .12s}a:hover{color:var(--trace);-webkit-text-decoration-color:var(--trace);text-decoration-color:var(--trace)}:focus-visible{outline:2px solid var(--trace);outline-offset:2px}h1,h2,h3,h4,h5,h6{margin:0;font-weight:500}p{margin:0}ul,ol{margin:0;padding:0;list-style:none}.page{max-width:880px;padding:var(--space-6) var(--space-6) var(--space-8);background:var(--paper);border-left:1px solid var(--grid);border-right:1px solid var(--grid);min-height:100vh;margin:0 auto;position:relative}.meta-row{justify-content:space-between;gap:var(--space-4);font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted);padding-bottom:var(--space-2);border-bottom:1px solid var(--rule);margin-bottom:var(--space-8);font-size:11px;display:flex}.header{margin-bottom:var(--space-8)}.header .name{font-family:var(--font-display);font-variation-settings:"wdth" 118;letter-spacing:.005em;text-transform:uppercase;color:var(--ink);font-size:clamp(2.5rem,6.4vw,4.1rem);font-weight:800;line-height:.98}.waveform{width:100%;max-width:560px;height:44px;margin-top:var(--space-4);color:var(--trace);display:block;overflow:visible}.waveform .axis{stroke:var(--rule-soft);stroke-width:1px}.waveform .trace{stroke:currentColor;stroke-width:1.5px;fill:none;stroke-dasharray:1200;stroke-dashoffset:1200px;animation:1.1s cubic-bezier(.3,0,.2,1) .25s forwards trace-in}@keyframes trace-in{to{stroke-dashoffset:0}}.header .tagline{font-family:var(--font-mono);color:var(--ink-soft);margin-top:var(--space-3);letter-spacing:.03em;font-size:.92rem}.header .summary{margin-top:var(--space-5);max-width:60ch;color:var(--ink-soft);font-variation-settings:"opsz" 18;font-size:1.06rem;line-height:1.6}.pen-mark{background-image:linear-gradient(var(--pen), var(--pen));background-position:0 96%;background-repeat:no-repeat;background-size:0% 2px;animation:.7s cubic-bezier(.6,0,.3,1) 1.5s forwards pen-in}@keyframes pen-in{to{background-size:100% 2px}}.contact{margin-top:var(--space-5);gap:var(--space-2) var(--space-4);font-family:var(--font-mono);color:var(--ink-muted);flex-wrap:wrap;font-size:.8rem;display:flex}.contact .dot{color:var(--ink-faint)}.contact a{border-bottom:1px solid var(--rule-soft);text-decoration:none}.contact a:hover{border-bottom-color:var(--trace);color:var(--trace)}.marker{align-items:baseline;gap:var(--space-3);margin-top:var(--space-8);margin-bottom:var(--space-4);font-family:var(--font-display);font-variation-settings:"wdth" 116;letter-spacing:.16em;text-transform:uppercase;color:var(--ink);font-size:.86rem;font-weight:700;display:flex}.marker .glyphs{display:inline-flex}.marker .glyph{opacity:0;transition:opacity .22s,transform .3s cubic-bezier(.22,1,.36,1);transform:translateY(.3em)}.marker.inview .glyph{opacity:1;transform:translateY(0)}.marker .rule{background:var(--rule);transform-origin:0;flex:1;height:1px;transition:transform .64s cubic-bezier(.22,1,.36,1) .18s;position:relative;transform:scaleX(0)}.marker .rule:after{content:"";background:var(--rule);width:1px;height:7px;position:absolute;bottom:0;right:0}.marker.inview .rule{transform:scaleX(1)}.entry{grid-template-columns:var(--col-date) 1fr;column-gap:var(--space-5);display:grid}.entry .when{font-family:var(--font-mono);color:var(--ink-muted);padding-top:calc(var(--space-4) + .36em);letter-spacing:.02em;text-align:right;font-size:.76rem}.entry:first-of-type .when{padding-top:calc(var(--space-2) + .36em)}.entry .body{border-left:1px solid var(--rule-soft);padding:var(--space-4) 0 var(--space-4) var(--space-5);position:relative}.entry:first-of-type .body{padding-top:var(--space-2)}.entry:last-of-type .body{padding-bottom:var(--space-5)}.entry .body:before{content:"";left:0;top:calc(var(--space-4) + .68em);background:var(--trace);width:10px;height:1px;position:absolute}.entry:first-of-type .body:before{top:calc(var(--space-2) + .68em)}.entry .body h3{font-family:var(--font-display);font-variation-settings:"wdth" 108;letter-spacing:.01em;color:var(--ink);font-size:1.06rem;font-weight:700}.entry .body .sub{font-family:var(--font-mono);color:var(--ink-muted);letter-spacing:.01em;margin-top:.22em;font-size:.78rem}.entry .body ul{margin-top:var(--space-3)}.entry .body li{color:var(--ink-soft);margin-top:.5em;padding-left:1.5ch;font-size:.99rem;line-height:1.58;position:relative}.entry .body li:before{content:"–";color:var(--trace);font-weight:600;position:absolute;top:0;left:0}.project-stack{gap:0 var(--space-2);font-family:var(--font-mono);color:var(--ink-muted);letter-spacing:.04em;text-transform:uppercase;flex-wrap:wrap;margin-top:.35em;font-size:.7rem;display:flex}.project-stack .chip+.chip:before{content:"·";color:var(--ink-faint);margin:0 .45em}.project-index{font-family:var(--font-mono);color:var(--trace);letter-spacing:.08em;margin-bottom:.15em;font-size:.72rem}.awards-grid{grid-template-columns:var(--col-date) 1fr;column-gap:var(--space-5);margin-top:var(--space-2);row-gap:0;display:grid}.awards-grid .aw-year{font-family:var(--font-mono);color:var(--ink-muted);padding-top:calc(var(--space-3) + .2em);text-align:right;font-size:.76rem}.awards-grid .aw-body{border-left:1px solid var(--rule-soft);padding:var(--space-3) 0 var(--space-3) var(--space-5);position:relative}.awards-grid .aw-body:before{content:"";left:0;top:calc(var(--space-3) + .55em);background:var(--trace);width:10px;height:1px;position:absolute}.awards-grid .aw-body strong{font-family:var(--font-serif);color:var(--ink);font-size:1rem;font-weight:600}.awards-grid .aw-body em{font-family:var(--font-serif);color:var(--ink-muted);margin-top:.15em;font-size:.92rem;font-style:italic;display:block}.skills-grid{grid-template-columns:var(--col-date) 1fr;column-gap:var(--space-5);row-gap:var(--space-3);margin-top:var(--space-2);display:grid}.skills-grid .sk-label{font-family:var(--font-mono);color:var(--ink-muted);letter-spacing:.06em;text-transform:uppercase;text-align:right;padding-top:.2em;font-size:.76rem}.skills-grid .sk-list{font-family:var(--font-serif);color:var(--ink-soft);font-size:.98rem;line-height:1.55}.skills-grid .sk-list .sep{color:var(--ink-faint);margin:0 .4em}.lead-entry{margin-top:var(--space-4)}.lead-entry .row{justify-content:space-between;align-items:baseline;gap:var(--space-3);display:flex}.lead-entry .row strong{font-family:var(--font-display);font-variation-settings:"wdth" 108;font-size:1rem;font-weight:700}.lead-entry .row .when{font-family:var(--font-mono);color:var(--ink-muted);font-size:.76rem}.lead-entry .role{font-family:var(--font-mono);color:var(--ink-muted);letter-spacing:.01em;margin-top:.1em;font-size:.78rem}.lead-entry p{color:var(--ink-soft);margin-top:.35em;font-size:.99rem;line-height:1.58}.reveal{opacity:0;transition:opacity .52s cubic-bezier(.22,1,.36,1),transform .52s cubic-bezier(.22,1,.36,1);transform:translateY(14px)}.reveal.inview{opacity:1;transform:translateY(0)}.reveal.delay-1{transition-delay:60ms}.reveal.delay-2{transition-delay:.12s}.reveal.delay-3{transition-delay:.18s}.print-btn{bottom:var(--space-5);right:var(--space-5);background:var(--paper);color:var(--ink);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--ink);cursor:pointer;box-shadow:3px 3px 0 var(--trace);z-index:40;padding:10px 16px 9px;font-size:.74rem;transition:box-shadow .16s,transform .16s;position:fixed}.print-btn:hover{box-shadow:4px 4px 0 var(--trace);transform:translate(-1px,-1px)}.print-btn:active{box-shadow:2px 2px 0 var(--trace);transform:translate(1px,1px)}.print-btn .arrow{color:var(--trace);margin-left:6px}.footer{margin-top:var(--space-9);padding-top:var(--space-4);border-top:1px solid var(--rule);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);justify-content:space-between;gap:var(--space-4);font-size:.7rem;display:flex}@media (width<=640px){.page{padding:var(--space-5) var(--space-4) var(--space-6);border-left:none;border-right:none}.meta-row{margin-bottom:var(--space-6)}.entry,.awards-grid,.skills-grid{grid-template-columns:1fr}.entry .when,.awards-grid .aw-year,.skills-grid .sk-label{text-align:left;padding-top:var(--space-3);margin-bottom:0}.entry:first-of-type .when{padding-top:var(--space-2)}.entry .body,.awards-grid .aw-body{padding-left:0;padding-top:var(--space-1);border-left:none}.entry .body:before,.awards-grid .aw-body:before{content:none}.skills-grid{row-gap:var(--space-1)}.skills-grid .sk-label{padding-top:var(--space-3)}.print-btn{bottom:var(--space-4);right:var(--space-4);padding:8px 12px 7px;font-size:.68rem}.footer{gap:var(--space-1);flex-direction:column}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:0s!important;animation-duration:0s!important}.reveal{opacity:1;transform:none}.marker .rule{transform:scaleX(1)}.marker .glyph{opacity:1;transform:none}.waveform .trace{stroke-dashoffset:0;animation:none}.pen-mark{background-size:100% 2px;animation:none}}@page{size:A4;margin:15mm}@media print{html,body{-webkit-print-color-adjust:economy;print-color-adjust:economy;font-size:9.6pt;line-height:1.3;color:#000!important;background:#fff!important}.meta-row,.waveform,.print-btn,.cursor,.footer{display:none!important}.pen-mark{color:inherit!important;background:0 0!important;animation:none!important}.reveal,.marker .glyph,.marker .rule{opacity:1!important;transition:none!important;animation:none!important;transform:none!important}.page{border:none;max-width:none;margin:0;padding:0;background:#fff!important}.header{margin-bottom:6pt}.header .name{letter-spacing:0;color:#000;text-transform:none;font-variation-settings:normal;font-family:Georgia,Times New Roman,serif;font-size:17pt;font-weight:600;line-height:1.05}.header .tagline{color:#333;margin-top:2.2pt;font-family:Georgia,Times New Roman,serif;font-size:8.4pt}.header .summary{color:#222;max-width:none;margin-top:4pt;font-family:Georgia,serif;font-size:8.8pt;font-style:italic;line-height:1.32}.contact{color:#333;gap:2pt 10pt;margin-top:4.5pt;font-family:Georgia,Times New Roman,serif;font-size:8.2pt}.contact a{color:#000;border-bottom:none}.marker{break-after:avoid;page-break-after:avoid;text-transform:uppercase;letter-spacing:.06em;color:#000;border-bottom:.4pt solid #000;margin-top:8pt;margin-bottom:2.5pt;padding-bottom:1.6pt;font-family:Georgia,Times New Roman,serif;font-size:9pt;font-weight:700}.marker .slash,.marker .rule{display:none!important}.entry{break-inside:avoid;page-break-inside:avoid;border-top:.2pt dotted #777;grid-template-columns:9ch 1fr;column-gap:8pt;padding:2pt 0 1.5pt}.entry:first-of-type{border-top:none;padding-top:1pt}.entry .when,.entry:first-of-type .when{color:#333;text-align:left;padding-top:.16em;font-family:Georgia,Times New Roman,serif;font-size:8pt}.entry .body,.entry:first-of-type .body,.entry:last-of-type .body{border-left:none;padding:0}.entry .body:before,.entry:first-of-type .body:before,.awards-grid .aw-body:before{content:none}.awards-grid .aw-body{border-left:none;padding:0}.entry .body h3{color:#000;font-family:Georgia,serif;font-size:10pt;font-weight:700}.entry .body .sub{color:#333;font-family:Georgia,Times New Roman,serif;font-size:8pt}.entry .body ul{margin-top:1.5pt}.entry .body li{color:#000;margin-top:1pt;padding-left:1.1ch;font-family:Georgia,serif;font-size:9pt;line-height:1.3}.entry .body li:before{content:"·";color:#000;font-size:1.1em;font-weight:700;top:-.1em}.project-stack{color:#333;margin-top:1pt;font-family:Georgia,Times New Roman,serif;font-size:7.8pt}.project-index{color:#000;font-size:7.6pt}.awards-grid,.skills-grid{gap:2.2pt 8pt;margin-top:1.5pt}.awards-grid .aw-year,.skills-grid .sk-label{color:#333;text-align:left;text-transform:none;letter-spacing:0;padding-top:.2em;font-family:Georgia,Times New Roman,serif;font-size:8pt}.awards-grid .aw-body strong{color:#000;font-family:Georgia,serif;font-size:9.2pt;font-weight:700}.awards-grid .aw-body em{color:#333;margin-top:0;font-family:Georgia,serif;font-size:8.4pt;font-style:normal}.skills-grid .sk-list{color:#000;font-family:Georgia,serif;font-size:9pt;line-height:1.32}.lead-entry{break-inside:avoid;margin-top:2pt}.lead-entry .row strong{font-family:Georgia,serif;font-size:9.4pt}.lead-entry .row .when,.lead-entry .role{color:#333;font-family:Georgia,Times New Roman,serif;font-size:8pt}.lead-entry p{color:#000;margin-top:2pt;font-family:Georgia,serif;font-size:8.8pt;line-height:1.32}a[href^=http]:after{content:" " attr(href);color:#555;font-family:Georgia,Times New Roman,serif;font-size:8pt}.contact a:after{content:none}}
