@charset "UTF-8";
:root{--ink:#111b2c;--muted:#505c6e;--blue:#1428e8;--paper:#fff;--wash:#f0f3f8;--line:#d8dfe9;--max:1240px;font-family:Arial,Helvetica,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:28px}body{margin:0}a{color:inherit;text-decoration:none}button{font:inherit}img{max-width:100%;display:block}button,a,summary{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible{outline:3px solid #ff9e00;outline-offset:6px}[hidden]{display:none!important}::selection{background:#dce3ff;color:var(--ink)}.wrap{width:min(var(--max),calc(100% - 96px));margin-inline:auto}.header{display:flex;align-items:center;justify-content:space-between;padding-block:26px;border-bottom:1px solid var(--line);gap:24px}.brand{display:flex;align-items:center;gap:13px;font-size:1rem;font-weight:700}.monogram{background:var(--blue);color:white;padding:7px 9px 9px;font-size:1.5rem;letter-spacing:-2px}.header nav{display:flex;gap:32px;font-size:.9375rem}.header nav a{padding-block:10px}.header nav a:hover,.text-link:hover{color:var(--blue)}.skip-link{position:fixed;left:20px;top:10px;background:var(--blue);color:white;padding:16px;z-index:10;transform:translateY(-150%)}.skip-link:focus{transform:translateY(0)}.eyebrow,.section-label{text-transform:uppercase;font:400 .8125rem/1.5 'Courier New',monospace;letter-spacing:.07em}.hero{padding-top:40px}.hero>.eyebrow{display:flex;justify-content:space-between;color:var(--muted)}h1{font-size:clamp(4rem,9.5vw,8.5rem);font-weight:600;letter-spacing:-.065em;line-height:1.02;margin:38px 0 36px}h1 span{color:var(--blue)}.hero-bottom{display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:start}.hero-focus{font-size:clamp(1.5rem,2.5vw,2.2rem);line-height:1.2;letter-spacing:-.025em;margin:0}.hero-intro p{font-size:1.0625rem;line-height:1.65;margin:0 0 12px;max-width:55ch;color:var(--muted)}.actions{display:flex;align-items:center;gap:26px;flex-wrap:wrap;margin-top:24px}.button{display:inline-flex;align-items:center;gap:32px;background:var(--ink);color:#fff;padding:17px 20px;font-size:.9375rem}.button:hover{background:var(--blue)}.text-link{font-size:.9375rem;font-weight:600;border-bottom:1px solid currentColor;padding:8px 0;display:inline-flex;gap:20px;align-items:center}.tech-line{margin-top:54px;border-top:1px solid var(--line);display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;padding:24px 0;font:400 .875rem/1.5 'Courier New',monospace;color:var(--muted)}.project-section{background:var(--wash);padding:65px 0 70px}.section-label{display:flex;justify-content:space-between;gap:16px;color:var(--muted)}.section-heading{display:flex;justify-content:space-between;align-items:end;gap:36px;margin:28px 0 36px}h2{font-weight:500;font-size:clamp(2rem,3.2vw,3.25rem);line-height:1.15;letter-spacing:-.04em;margin:0}.section-heading>p{font-size:1rem;line-height:1.6;color:var(--muted);max-width:32ch;margin:0}.project-cover{display:block;background:var(--ink);padding:24px 24px 0}.project-cover img{width:100%;height:auto}.cover-caption{color:white;display:flex;justify-content:space-between;gap:16px;padding:22px 0;font-size:.9375rem}.project-cover:hover .cover-caption{text-decoration:underline;text-underline-offset:5px}.project-intro{display:grid;grid-template-columns:1.3fr 1fr;gap:80px;padding:28px 0 54px;border-bottom:1px solid #c4ccd9}.project-intro>p{font-size:1.0625rem;line-height:1.7;margin:0;max-width:65ch}.project-tags{display:flex;gap:8px;justify-content:end;align-content:start;flex-wrap:wrap}.project-tags span{font:400 .8125rem/1.4 'Courier New',monospace;border:1px solid #b9c3d4;padding:8px 11px}.case-study{padding-top:54px;scroll-margin-top:28px}.case-header{display:grid;grid-template-columns:1.3fr 1fr;gap:80px;align-items:end}.case-header .eyebrow{color:var(--blue);margin:0 0 18px}.case-header h3{font-size:clamp(1.75rem,3vw,2.75rem);font-weight:500;letter-spacing:-.035em;line-height:1.2;margin:0}.status-note{border-left:3px solid var(--blue);padding:2px 0 2px 20px;font-size:.9375rem;line-height:1.6;color:var(--muted);margin:0}.status-note strong{color:var(--ink);font-weight:600}.case-columns{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;padding:42px 0}.case-columns h4,.detail-content h4{font-size:1rem;margin:0 0 12px}.case-columns p,.detail-content p{font-size:1rem;line-height:1.7;color:var(--muted);margin:0}.comparison-head{border-top:1px solid #c4ccd9;padding-top:34px;display:flex;justify-content:space-between;align-items:center;gap:25px;margin-bottom:22px}.comparison-head h4{font-size:1.375rem;font-weight:500;letter-spacing:-.02em;margin:0 0 7px}.comparison-head p{font-size:.9375rem;color:var(--muted);margin:0;line-height:1.5}.device-switch{display:flex;border:1px solid #a4afc0;padding:4px;flex-shrink:0}.device-switch button{border:0;background:transparent;color:var(--ink);padding:11px 18px;cursor:pointer;font-size:.875rem;min-height:44px}.device-switch button[aria-pressed=true]{background:var(--ink);color:white}.comparison-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.comparison-grid figure{margin:0;min-width:0}.comparison-grid figcaption{font-size:.875rem;padding:14px 16px;background:white;display:flex;gap:15px}.comparison-grid figcaption span{font-family:'Courier New',monospace;color:var(--blue)}.comparison-grid img{width:100%;height:auto;background:#e0e4eb}.comparison-grid.mobile{max-width:750px;margin-inline:auto}.comparison-rationale{font-size:1rem;line-height:1.7;margin:24px 0 16px;max-width:90ch}.source-note{font-size:.8125rem;line-height:1.65;color:var(--muted);max-width:110ch;margin:0}.source-note code{font-size:.8125rem}.technical-details{border-top:1px solid #c4ccd9;border-bottom:1px solid #c4ccd9;margin-top:32px}.technical-details summary{cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:16px;padding:24px 0;font-size:1.0625rem;list-style:none}.technical-details summary::-webkit-details-marker{display:none}.technical-details summary span{font-size:1.6rem;color:var(--blue)}.technical-details[open] summary span{transform:rotate(45deg)}.detail-content{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;padding:0 0 28px}.case-end{display:flex;justify-content:space-between;align-items:center;gap:30px;padding-top:28px}.case-end>span{font-size:.875rem;line-height:1.6;color:var(--muted)}.experience{padding-block:75px}.experience-layout{display:grid;grid-template-columns:1fr 1fr;gap:100px;margin-top:34px}.experience-title>p{font-size:1.0625rem;line-height:1.7;max-width:37ch;color:var(--muted);margin:24px 0}.timeline article{border-top:1px solid var(--line);padding:24px 0 28px}.timeline article:first-child{padding-top:0;border:0}.period{font:.875rem/1.5 'Courier New',monospace;color:var(--blue);margin:0 0 9px}.timeline h3{font-size:1.375rem;font-weight:500;margin:0 0 7px;letter-spacing:-.025em}.employer{font-size:.9375rem;font-weight:600;margin:0 0 14px}.timeline article>p:last-child{font-size:1rem;line-height:1.7;color:var(--muted);margin:0}.skills{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;border-top:1px solid var(--line);padding-top:30px;margin-top:34px}.skills h3{font-size:1rem;font-weight:600;margin:0 0 14px}.skills p{font-size:.9375rem;line-height:1.75;color:var(--muted);margin:0}.contact{background:var(--blue);color:white;padding:58px 0}.contact .section-label{color:#d5dcff}.contact-heading{display:flex;justify-content:space-between;gap:35px;align-items:end;margin:28px 0 40px}.contact-heading p{font-size:1rem;line-height:1.7;color:#e5e9ff;margin:0}.email{font-size:clamp(1.5rem,4.6vw,4rem);line-height:1.25;letter-spacing:-.035em;display:flex;justify-content:space-between;gap:15px;overflow-wrap:anywhere;padding:22px 0;border-top:1px solid #7681ff;border-bottom:1px solid #7681ff}.email span{flex-shrink:0}.email:hover{text-decoration:underline;text-underline-offset:8px}.contact-links{display:flex;flex-wrap:wrap;gap:32px;margin-top:30px;font-size:1rem}.contact-links a{padding:8px 0}.contact-links a:hover{text-decoration:underline;text-underline-offset:5px}.footer{display:flex;justify-content:space-between;align-items:center;gap:22px;padding-block:27px;color:var(--muted);font-size:.8125rem;line-height:1.5}
.project-history{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:40px;margin-top:38px;border-top:1px solid #c4ccd9;padding-top:28px}.project-history>div>span{font:400 2rem/1.2 'Courier New',monospace;color:var(--blue)}.project-history h4{font-size:1.125rem;margin:12px 0 9px}.project-history p{overflow-wrap:anywhere;font-size:1rem;line-height:1.65;color:var(--muted);max-width:50ch;margin:0}@media(max-width:620px){.project-history{grid-template-columns:1fr;gap:25px}}
@media(min-width:1500px){.hero{padding-top:50px}.hero h1{margin-top:50px}}@media(max-width:900px){.wrap{width:calc(100% - 48px)}.hero-bottom,.project-intro,.case-header{gap:36px}.experience-layout{gap:48px}.case-columns,.detail-content{gap:24px}.section-heading{align-items:start}.skills{grid-template-columns:1fr 1fr;row-gap:28px}.contact-heading{display:block}.contact-heading p{margin-top:24px}.header nav{gap:22px}}
@media(max-width:620px){.wrap{width:calc(100% - 36px)}.header{padding-block:18px;gap:12px;flex-wrap:wrap}.brand{font-size:.875rem;gap:9px}.monogram{font-size:1.25rem}.header nav{gap:18px;font-size:.875rem}.header nav a{min-height:44px;display:inline-flex;align-items:center}.hero{padding-top:27px}.hero>.eyebrow{font-size:.75rem;gap:16px;flex-wrap:wrap}.hero h1{font-size:clamp(3.35rem,14vw,5.2rem);margin:30px 0;letter-spacing:-.055em}.hero-bottom{grid-template-columns:1fr;gap:24px}.hero-focus{font-size:1.625rem}.hero-intro p{font-size:1rem}.actions{gap:22px}.button{padding:16px 18px;gap:24px}.tech-line{font-size:.8125rem;margin-top:36px;display:grid;grid-template-columns:1fr 1fr;gap:14px}.project-section{padding:40px 0}.section-label{font-size:.75rem;flex-wrap:wrap;gap:8px}.section-heading{display:block;margin:22px 0 26px}.section-heading p{margin-top:20px}.project-cover{padding:8px 8px 0}.cover-caption{font-size:.8125rem;line-height:1.5;padding:16px 4px;gap:16px}.project-intro{grid-template-columns:1fr;gap:24px;padding:24px 0 34px}.project-tags{justify-content:start}.project-intro>p{font-size:1rem}.case-study{padding-top:34px}.case-header{grid-template-columns:1fr;gap:24px}.case-header h3{font-size:2rem}.case-columns,.detail-content{grid-template-columns:1fr;gap:24px}.case-columns{padding:30px 0}.comparison-head{align-items:start;flex-direction:column;gap:16px;padding-top:26px}.comparison-grid{grid-template-columns:1fr;gap:18px}.comparison-grid.mobile{grid-template-columns:1fr 1fr;gap:10px}.comparison-grid.mobile figcaption{font-size:.8125rem;min-height:62px;padding:10px;gap:6px;flex-direction:column}.comparison-rationale{font-size:.9375rem}.case-end{align-items:start;flex-direction:column;gap:16px}.experience{padding-block:45px}.experience-layout{grid-template-columns:1fr;gap:32px;margin-top:24px}.skills{grid-template-columns:1fr 1fr;gap:28px 16px;margin-top:16px}.skills p{font-size:.875rem}.contact{padding:35px 0}.contact-heading{margin:24px 0}.contact-heading h2{font-size:2rem}.contact-heading p{font-size:.9375rem}.email{font-size:clamp(1.25rem,5.8vw,2rem);padding:20px 0;gap:8px}.contact-links{gap:25px}.footer{flex-wrap:wrap;justify-content:start;gap:12px 24px}.footer a{margin-left:auto}.footer span:nth-child(2){order:3;flex-basis:100%}.status-note{font-size:.875rem}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}@media print{.header,.actions,.device-switch,.contact,.footer,.cv-link,.case-end{display:none!important}.wrap{width:100%}body{color:#000}.hero h1{font-size:48px}.project-section{background:white}.project-cover{padding:0;background:white}.cover-caption{color:#000}.comparison-grid{grid-template-columns:1fr 1fr}a{text-decoration:underline}.experience,.project-section{padding-block:24px}.technical-details{display:none}}
.archive-details{margin:0 0 34px}.archive-content{padding-bottom:24px}.archive-content>p:first-child{max-width:85ch;font-size:1rem;line-height:1.7;color:var(--muted)}.archive-content figure{margin:22px 0}.archive-content img{width:100%;height:auto}.archive-content figcaption{font-size:.875rem;line-height:1.5;padding-top:13px}.archive-content a{text-decoration:underline;text-underline-offset:3px}
