@import "https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&display=swap";
*{box-sizing:border-box;margin:0;padding:0}:root{--bg:#fff;--bg-elevated:#fafafa;--fg:#0a0a0a;--fg-muted:#6b6b6b;--line:#e5e5e5;--hover:#f5f5f5;--accent:#0a0a0a}[data-theme=dark]{--bg:#0a0a0a;--bg-elevated:#141414;--fg:#f5f5f5;--fg-muted:#8a8a8a;--line:#232323;--hover:#1a1a1a;--accent:#f5f5f5}html{scroll-behavior:smooth;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){html{--lightningcss-light: ;--lightningcss-dark:initial}}body{background:var(--bg);color:var(--fg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"ss01";font-family:Manrope,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-weight:400;line-height:1.5;transition:background-color .3s,color .3s}::selection{background:var(--fg);color:var(--bg)}a{color:inherit;text-decoration:none}button{color:inherit;cursor:pointer;background:0 0;border:none;font-family:inherit}.skip-link{z-index:200;background:var(--fg);color:var(--bg);border-radius:0 0 8px 8px;padding:.75rem 1.25rem;font-size:.9rem;font-weight:500;transition:transform .2s;position:fixed;top:0;left:50%;transform:translate(-50%,-120%)}.skip-link:focus{outline:2px solid var(--bg);outline-offset:-4px;transform:translate(-50%)}:focus-visible{outline:2px solid var(--fg);outline-offset:2px;border-radius:2px}:focus:not(:focus-visible){outline:none}.nav{background:color-mix(in srgb, var(--bg) 85%, transparent);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--line);z-index:100;justify-content:space-between;align-items:center;padding:1.25rem 3rem;transition:background-color .3s,border-color .3s;display:flex;position:fixed;top:0;left:0;right:0}.nav-name{letter-spacing:-.01em;font-size:.95rem;font-weight:600}.nav-right{align-items:center;gap:2.5rem;display:flex}.nav-links{gap:2.5rem;list-style:none;display:flex}.nav-links a{color:var(--fg-muted);letter-spacing:-.005em;font-size:.9rem;transition:color .2s}.nav-links a:hover{color:var(--fg)}.theme-toggle{width:36px;height:36px;color:var(--fg-muted);border-radius:999px;justify-content:center;align-items:center;transition:color .2s,background-color .2s;display:inline-flex}.theme-toggle:hover{color:var(--fg);background:var(--hover)}.container{max-width:1200px;margin:0 auto;padding:0 3rem}.container-narrow{max-width:760px;margin:0 auto;padding:0 3rem}main{padding-top:5rem}.hero{border-bottom:1px solid var(--line);padding:8rem 0 6rem}.eyebrow{color:var(--fg-muted);text-transform:uppercase;letter-spacing:.15em;margin-bottom:2rem;font-size:.8rem;font-weight:500}.hero h1{letter-spacing:-.035em;max-width:14ch;margin-bottom:2rem;font-size:clamp(2.5rem,6vw,5rem);font-weight:600;line-height:1.05}.hero h1 em{color:var(--fg-muted);font-style:normal}.hero-meta{color:var(--fg-muted);gap:3rem;margin-top:4rem;font-size:.9rem;display:flex}.hero-meta div span{color:var(--fg);margin-top:.25rem;font-weight:500;display:block}.section-head{justify-content:space-between;align-items:baseline;padding:5rem 0 3rem;display:flex}.section-head h2{letter-spacing:-.01em;font-size:1.1rem;font-weight:500}.section-head .index{color:var(--fg-muted);font-variant-numeric:tabular-nums;font-size:.8rem}.work-list{border-top:1px solid var(--line)}.work-item{border-bottom:1px solid var(--line);color:var(--fg);grid-template-columns:60px 1fr auto auto;align-items:center;gap:2rem;padding:2rem 0;transition:background-color .3s;display:grid}.work-item>*{transition:transform .3s cubic-bezier(.22,1,.36,1)}.work-item:hover{background:var(--hover)}.work-item:hover>*{transform:translate(.5rem)}.work-item .num{color:var(--fg-muted);font-variant-numeric:tabular-nums;font-size:.8rem}.work-item .title{letter-spacing:-.02em;font-size:1.4rem;font-weight:500}.work-item .tag{color:var(--fg-muted);font-size:.85rem}.work-item .arrow{font-size:1.2rem;transition:transform .3s}.work-item:hover .arrow{transform:translate(8px)}.about{border-bottom:1px solid var(--line);padding:6rem 0}.about-grid{grid-template-columns:1fr 2fr;gap:4rem;display:grid}.about-grid h2{font-size:1.1rem;font-weight:500}.about-bio p{letter-spacing:-.015em;margin-bottom:1.5rem;font-size:1.5rem;font-weight:400;line-height:1.35}.about-bio p:last-child{margin-bottom:0}.hero-grid{grid-template-columns:1fr auto;align-items:center;gap:4rem;display:grid}.hero-portrait{aspect-ratio:3/4;object-fit:cover;border:1px solid var(--line);border-radius:20px;justify-self:end;width:280px;height:auto;box-shadow:0 8px 32px #00000014}@media (max-width:768px){.hero-grid{grid-template-columns:1fr;gap:2rem}.hero-portrait{order:-1;justify-self:start;width:180px}}.cv{border-bottom:1px solid var(--line);padding:4rem 0 6rem}.cv-block{border-top:1px solid var(--line);grid-template-columns:1fr 2fr;gap:4rem;padding:3rem 0;display:grid}.cv-block h3{text-transform:uppercase;letter-spacing:.15em;color:var(--fg-muted);font-size:.85rem;font-weight:500}.cv-entry{border-bottom:1px solid var(--line);grid-template-columns:100px 1fr;gap:2rem;margin-bottom:1.5rem;padding-bottom:1.5rem;font-size:.95rem;display:grid}.cv-entry:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.cv-entry .year{color:var(--fg-muted);font-variant-numeric:tabular-nums;font-size:.85rem}.cv-entry .role{margin-bottom:.25rem;font-weight:500}.cv-entry .org{color:var(--fg-muted);font-size:.9rem}.skills-list{columns:2;column-gap:3rem;list-style:none}.skills-list li{border-bottom:1px solid var(--line);break-inside:avoid;padding:.6rem 0;font-size:.95rem}.contact{text-align:center;padding:7rem 0}.contact h2{letter-spacing:-.03em;max-width:18ch;margin-bottom:3rem;margin-left:auto;margin-right:auto;font-size:clamp(2rem,5vw,4rem);font-weight:600;line-height:1.1}.contact-links{flex-wrap:wrap;justify-content:center;gap:1rem;display:flex}.contact-link{border:1px solid var(--fg);border-radius:999px;align-items:center;gap:.5rem;padding:.9rem 1.75rem;font-size:.95rem;transition:all .2s;display:inline-flex}.contact-link:hover{background:var(--fg);color:var(--bg)}footer{border-top:1px solid var(--line);color:var(--fg-muted);justify-content:space-between;padding:2.5rem 3rem;font-size:.85rem;display:flex}.case-hero{border-bottom:1px solid var(--line);padding:5rem 0 4rem}.back-link{color:var(--fg-muted);align-items:center;gap:.5rem;margin-bottom:3rem;font-size:.85rem;transition:color .2s;display:inline-flex}.back-link:hover{color:var(--fg)}.case-hero h1{letter-spacing:-.03em;max-width:18ch;margin:1.5rem 0 2rem;font-size:clamp(2rem,5vw,3.75rem);font-weight:600;line-height:1.1}.case-summary{color:var(--fg-muted);max-width:50ch;font-size:1.25rem;line-height:1.5}.case-meta{border-top:1px solid var(--line);grid-template-columns:repeat(4,1fr);gap:2rem;margin-top:4rem;padding-top:2rem;display:grid}.case-meta div span{color:var(--fg-muted);text-transform:uppercase;letter-spacing:.12em;margin-bottom:.5rem;font-size:.75rem;display:block}.case-meta div p{font-size:.95rem;font-weight:500}.case-cover{background-color:var(--hover);border-bottom:1px solid var(--line);justify-content:center;align-items:center;height:clamp(220px,45vw,60vh);display:flex;position:relative;overflow:hidden}.case-cover-blur{filter:blur(28px)brightness(.7)saturate(1.1);z-index:0;background-position:50%;background-size:cover;position:absolute;inset:0;transform:scale(1.2)}.case-cover-sharp{z-index:1;background-position:50%;background-repeat:no-repeat;background-size:contain;position:absolute;inset:0}.case-cover-placeholder{z-index:2;color:var(--fg-muted);letter-spacing:.1em;text-transform:uppercase;font-size:.85rem;position:relative}.case-cover--video{background-color:#060606;background-color:lab(1.5609% 0 0)}.case-cover-video{aspect-ratio:16/9;width:min(100%,1.77778*clamp(220px,45vw,60vh));max-height:100%;position:relative}.case-cover-video iframe{border:0;width:100%;height:100%;position:absolute;inset:0}@media (max-width:768px){.case-cover-video{width:min(100%,1.77778*clamp(180px,56vw,320px))}.case-cover{height:clamp(180px,56vw,320px)}.case-cover-blur{filter:blur(20px)brightness(.7)}}.case-body{padding:5rem 0}.prose{color:var(--fg);font-size:1.1rem;line-height:1.7}.prose>*+*{margin-top:1.5rem}.prose h2{letter-spacing:-.025em;margin-top:4rem;margin-bottom:1.5rem;font-size:2rem;font-weight:600;line-height:1.2}.prose h3{letter-spacing:-.02em;margin-top:3rem;margin-bottom:1rem;font-size:1.4rem;font-weight:600}.prose h2:first-child,.prose h3:first-child{margin-top:0}.prose p{margin-bottom:1.25rem}.prose strong{color:var(--fg);font-weight:600}.prose em{font-style:normal;font-weight:600}.prose u{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.prose a{color:var(--fg);text-decoration:underline;-webkit-text-decoration-color:var(--fg-muted);text-decoration-color:var(--fg-muted);text-underline-offset:3px;transition:text-decoration-color .2s}.prose a:hover{-webkit-text-decoration-color:var(--fg);text-decoration-color:var(--fg)}.prose ul,.prose ol{margin-bottom:1.5rem;padding-left:1.5rem}.prose li{margin-bottom:.5rem}.prose img{border:1px solid var(--line);border-radius:4px;width:100%;height:auto;margin:2rem 0}.prose blockquote{border-left:2px solid var(--fg);letter-spacing:-.015em;margin:2.5rem 0;padding-left:2rem;font-size:1.5rem;font-style:normal;font-weight:500;line-height:1.35}.prose blockquote p{margin-bottom:.5rem}.prose blockquote cite,.prose blockquote footer{color:var(--fg-muted);margin-top:1rem;font-size:.85rem;font-style:normal;font-weight:400;display:block}.prose hr{border:none;border-top:1px solid var(--line);margin:3rem 0}.prose code{background:var(--hover);border-radius:3px;padding:.15em .4em;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.9em}.prose pre{background:var(--bg-elevated);border:1px solid var(--line);border-radius:6px;margin:2rem 0;padding:1.5rem;overflow-x:auto}.prose pre code{background:0 0;padding:0}.outcomes-grid{grid-template-columns:repeat(3,1fr);gap:1.5rem;margin:2rem 0;display:grid}.outcome-card{border:1px solid var(--line);padding:2rem}.outcome-card .stat{letter-spacing:-.03em;margin-bottom:.5rem;font-size:2.5rem;font-weight:600}.outcome-card .desc{color:var(--fg-muted);font-size:.9rem;line-height:1.5}.figure{margin:2rem 0}.figure img{margin:0}.figure figcaption{color:var(--fg-muted);text-align:center;margin-top:.75rem;font-size:.85rem}.section-label{color:var(--fg-muted);text-transform:uppercase;letter-spacing:.15em;margin-top:4rem;margin-bottom:.5rem;font-size:.75rem;font-weight:500;display:block}.next-case{border-top:1px solid var(--line);text-align:left;width:100%;color:var(--fg);padding:5rem 0;transition:background-color .2s;display:block}.next-case:hover{background:var(--hover)}.next-case .next-label{color:var(--fg-muted);text-transform:uppercase;letter-spacing:.15em;margin-bottom:1rem;font-size:.75rem}.next-case .next-title{letter-spacing:-.025em;justify-content:space-between;align-items:center;font-size:clamp(2rem,4vw,3rem);font-weight:600;display:flex}.next-case .next-title .arrow{transition:transform .3s}.next-case:hover .next-title .arrow{transform:translate(12px)}.reveal{opacity:0;animation:.8s cubic-bezier(.16,1,.3,1) forwards reveal;transform:translateY(20px)}@keyframes reveal{to{opacity:1;transform:translateY(0)}}.reveal:first-child{animation-delay:50ms}.reveal:nth-child(2){animation-delay:.15s}.reveal:nth-child(3){animation-delay:.25s}.reveal:nth-child(4){animation-delay:.35s}.tools-marquee{background:var(--bg-elevated);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:3rem 0 4rem;overflow:hidden}.tools-label{text-align:center;color:var(--fg-muted);letter-spacing:.02em;margin-bottom:1.75rem;font-size:.875rem}.tools-track-wrap{width:100%;max-width:720px;margin:0 auto;padding:1rem 0;position:relative;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000 0,#000 15% 85%,#0000 100%);mask-image:linear-gradient(90deg,#0000 0,#000 15% 85%,#0000 100%)}.tools-track{width:max-content;animation:32s linear infinite tools-marquee;display:flex}.tools-track-group{flex:none;gap:1.5rem;padding-right:1.5rem;display:flex}.tool-chip{background:var(--bg);border:1px solid var(--line);border-radius:16px;flex:none;place-items:center;width:64px;height:64px;transition:transform .2s,box-shadow .2s;display:grid;box-shadow:0 1px 2px #0000000a}.tool-chip:hover{transform:translateY(-2px);box-shadow:0 6px 16px #00000014}[data-theme=dark] .tool-chip[data-tool=GitHub] img,[data-theme=dark] .tool-chip[data-tool=Next\.js] img{filter:invert()}.tool-chip img{width:32px;height:32px;display:block}@keyframes tools-marquee{0%{transform:translate(0)}to{transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.tools-track{animation:none}.reveal{opacity:1;animation:none;transform:none}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.case-body img{cursor:zoom-in}.lightbox-overlay{z-index:1000;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);cursor:zoom-out;background:#000000d1;place-items:center;padding:2rem;animation:.18s lightbox-fade;display:grid;position:fixed;inset:0}.lightbox-img{object-fit:contain;cursor:default;border-radius:8px;width:auto;max-width:92vw;height:auto;max-height:88vh;box-shadow:0 24px 80px #00000080}.lightbox-close{color:#fff;cursor:pointer;background:#ffffff1f;border-radius:50%;place-items:center;width:44px;height:44px;font-size:1.1rem;line-height:1;transition:background .15s;display:grid;position:fixed;top:1.25rem;right:1.5rem}.lightbox-close:hover{background:#ffffff40}.lightbox-hint{color:#ffffffb3;letter-spacing:.01em;pointer-events:none;-webkit-user-select:none;user-select:none;background:#00000073;border-radius:999px;padding:.4rem .9rem;font-size:.78rem;position:fixed;bottom:1.25rem;left:50%;transform:translate(-50%)}@keyframes lightbox-fade{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.lightbox-overlay{animation:none}}@media (max-width:768px){.nav{padding:1rem 1.5rem}.nav-right{gap:1rem}.nav-links{gap:1.25rem}.nav-links a{align-items:center;min-height:44px;display:inline-flex}.container,.container-narrow,footer{padding-left:1.5rem;padding-right:1.5rem}.hero{padding:4rem 0}.hero-meta{flex-direction:column;gap:1.5rem}.work-item{grid-template-columns:30px 1fr auto;gap:1rem}.work-item .tag{display:none}.about-grid,.cv-block{grid-template-columns:1fr;gap:2rem}.skills-list{columns:1}.case-meta{grid-template-columns:1fr 1fr}.outcomes-grid{grid-template-columns:1fr}.cv-entry{grid-template-columns:80px 1fr;gap:1rem}}
