:root{color-scheme:dark;--color-bg:#07170d;--color-surface:#14331f;--color-surface-raised:#22472b;--color-text:#edf7bb;--color-muted:#a9bd78;--color-border:#3f673e;--color-accent:#b7dd58;--color-accent-strong:#84b547;--color-accent-text:#10200e;--color-nav:#07170deb;--color-shadow:#00000038;--color-dot:#b7dd580a;--color-focus:#d8f27f;--font-sans:"Geist", "Segoe UI", system-ui, -apple-system, sans-serif;--font-mono:"Geist Mono", "Cascadia Mono", "SFMono-Regular", Consolas, monospace;--font-size-xs:.6875rem;--font-size-sm:.8125rem;--font-size-base:.9375rem;--font-size-md:1.125rem;--font-size-lg:1.3125rem;--font-size-display:clamp(3rem, 7.4vw, 6.25rem);--font-size-section-display:clamp(2.375rem, 6vw, 4.375rem);--line-height-tight:.9;--line-height-heading:1.05;--line-height-body:1.55;--tracking-tight:-.065em;--tracking-heading:-.035em;--tracking-label:.115em;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-15:3.75rem;--space-16:4rem;--space-20:5rem;--space-26:6.5rem;--radius-sm:.5rem;--radius-md:.75rem;--radius-lg:.875rem;--radius-xl:1rem;--radius-pill:999px;--content-width:77.5rem;--page-gutter:clamp(1.25rem, 4vw, 1.75rem);--header-height:4.75rem;--anchor-offset:calc(var(--header-height) + var(--space-6));--transition-fast:.14s ease;--transition-base:.22s ease}@font-face{font-family:Geist;src:url(/fonts/geist-regular.woff2)format("woff2");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:Geist;src:url(/fonts/geist-medium.woff2)format("woff2");font-style:normal;font-weight:500 600;font-display:swap}@font-face{font-family:Geist;src:url(/fonts/geist-bold.woff2)format("woff2");font-style:normal;font-weight:700 900;font-display:swap}@font-face{font-family:Geist Mono;src:url(/fonts/geist-mono-medium.woff2)format("woff2");font-style:normal;font-weight:500 700;font-display:swap}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--color-bg);min-width:20rem}body{background-color:var(--color-bg);background-image:radial-gradient(var(--color-dot) 1px, transparent 1px);min-height:100vh;color:var(--color-text);font-family:var(--font-sans);font-size:var(--font-size-base);font-weight:400;line-height:var(--line-height-body);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background-size:6px 6px;margin:0}body,h1,h2,h3,p,ul{margin-block:0}ul{padding:0;list-style:none}img,picture,svg{max-width:100%;display:block}button,a{font:inherit}a{color:inherit;text-decoration:none}button{border:0}::selection{background:var(--color-accent);color:var(--color-accent-text)}:focus-visible{outline:3px solid var(--color-focus);outline-offset:4px}.skip-link{inset:var(--space-4) auto auto var(--space-4);z-index:100;padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);background:var(--color-accent);color:var(--color-accent-text);font-family:var(--font-mono);font-size:var(--font-size-sm);transform:translateY(calc(-100% - var(--space-6)));transition:transform var(--transition-fast);font-weight:700;position:fixed}.skip-link:focus{transform:translateY(0)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.mono-label{color:var(--color-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--tracking-label);text-transform:uppercase;font-weight:600}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.page-shell{width:min(100%, calc(var(--content-width) + (var(--page-gutter) * 2)));padding-inline:var(--page-gutter);margin-inline:auto}.site-header{z-index:10;min-height:var(--header-height);justify-content:space-between;align-items:center;gap:var(--space-6);border-bottom:1px solid var(--color-border);background:var(--color-nav);backdrop-filter:blur(14px);display:flex;position:sticky;top:0}.site-mark{font-family:var(--font-mono);font-size:var(--font-size-sm);letter-spacing:-.05em;flex:none;font-weight:700}.site-mark__slash{color:var(--color-accent);filter:drop-shadow(0 0 8px #b7dd5829)}.site-nav{align-items:center;gap:clamp(var(--space-4), 2.2vw, var(--space-6));color:var(--color-muted);font-family:var(--font-mono);font-size:var(--font-size-sm);font-weight:500;display:flex}.site-nav a{padding-block:var(--space-2);transition:color var(--transition-fast)}.site-nav a:hover{color:var(--color-accent)}.site-nav__pending{cursor:not-allowed;opacity:.56}.hero{align-items:end;gap:clamp(var(--space-8), 5vw, 3.875rem);padding-block:var(--space-20) var(--space-15);grid-template-columns:minmax(0,1.25fr) minmax(17rem,.75fr);display:grid}.hero__title{max-width:11ch;margin-top:var(--space-4);font-size:var(--font-size-display);letter-spacing:var(--tracking-tight);font-weight:700;line-height:.87}.hero>*{min-width:0}.hero__title span{color:var(--color-accent);filter:drop-shadow(0 0 8px #b7dd5824)}.hero__summary{max-width:31rem;color:var(--color-muted);font-size:var(--font-size-md)}.hero__details{gap:var(--space-5);display:grid}.github-identity{align-items:center;gap:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:min(100%,31rem);transition:border-color var(--transition-base), background-color var(--transition-base), transform var(--transition-base);background:#22472b59;grid-template-columns:3.5rem minmax(0,1fr) auto;padding:.75rem;display:grid}.github-identity:hover{border-color:var(--color-accent);background:#22472b9e;transform:translateY(-2px)}.github-identity__avatar{border:1px solid var(--color-border);object-fit:cover;border-radius:50%;width:3.5rem;height:3.5rem}.github-identity__copy{gap:.0625rem;min-width:0;display:grid}.github-identity__copy strong{color:var(--color-text);font-family:var(--font-mono);font-size:var(--font-size-sm);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.github-identity__label,.github-identity__hint{color:var(--color-muted);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-size:.625rem}.github-identity__hint{letter-spacing:0;text-transform:none}.github-identity__arrow{color:var(--color-accent);font-family:var(--font-mono);font-size:var(--font-size-lg)}.hero__proof{flex-wrap:wrap;gap:.625rem;display:flex}.hero__proof li{border:1px solid var(--color-border);border-radius:var(--radius-pill);color:var(--color-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);padding:.375rem .625rem}.content-section,.contact-footer{scroll-margin-top:var(--anchor-offset)}.section-header{justify-content:space-between;align-items:end;gap:var(--space-6);border-top:1px solid var(--color-border);padding-block:1.625rem 1.375rem;display:flex}.section-header h2{font-family:var(--font-mono);font-size:var(--font-size-sm);letter-spacing:.14em;text-transform:uppercase}.section-header p{max-width:42rem;color:var(--color-muted)}.section-header__intro{gap:var(--space-2);min-width:0;display:grid}.section-header__count{color:var(--color-accent);font-family:var(--font-mono);font-size:var(--font-size-xs);text-align:right;flex:none}.project-grid{align-items:start;gap:var(--space-5);padding-bottom:var(--space-20);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.project-card--wide{grid-column:span 7}.project-card--narrow{grid-column:span 5}.project-card--standard{grid-column:span 6}.project-card{border:1px solid var(--color-border);border-radius:var(--radius-xl);background:var(--color-surface);height:100%;transition:border-color var(--transition-base), box-shadow var(--transition-base), transform var(--transition-base);flex-direction:column;display:flex;overflow:clip}.project-card--dialog-enhanced{cursor:pointer}.project-card:hover,.project-card:focus-within{border-color:var(--color-accent);transform:translateY(-5px);box-shadow:0 1.25rem 3rem #0000002e}.project-card__visual{border-bottom:1px solid var(--color-border);background:linear-gradient(135deg, var(--color-surface-raised), var(--color-surface));height:clamp(15.5rem,24vw,19rem);overflow:hidden}.project-card__visual img{object-fit:cover;width:100%;height:100%;transition:transform var(--transition-base);display:block}.project-card:hover .project-card__visual img,.project-card:focus-within .project-card__visual img{transform:scale(1.018)}.project-card__body{gap:var(--space-3);min-height:12rem;padding:var(--space-6);flex-direction:column;flex:1;display:flex}.project-card__meta{justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.project-card__index{color:var(--color-accent);font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--tracking-label)}.project-card__category{border-radius:var(--radius-pill);background:var(--color-surface-raised);color:var(--color-muted);font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;padding:.3rem .5rem;font-size:.625rem}.project-card h3{letter-spacing:var(--tracking-heading);font-size:clamp(1.5rem,3vw,2rem);font-weight:700;line-height:var(--line-height-heading)}.project-card p{max-width:54ch;color:var(--color-muted)}.project-card__fallback-details{gap:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--color-border);display:grid}.project-card--dialog-enhanced .project-card__fallback-details{display:none}.project-card .project-card__fallback-label,.project-card .project-card__fallback-pending{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-size:.625rem}.project-card__fallback-details ul{gap:var(--space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.project-card__fallback-details li{border:1px solid var(--color-border);border-radius:var(--radius-pill);color:var(--color-muted);font-family:var(--font-mono);padding:.25rem .45rem;font-size:.625rem}.project-card__open{align-items:center;gap:var(--space-2);width:fit-content;min-height:44px;padding:var(--space-2) 0;color:var(--color-accent);cursor:pointer;font-family:var(--font-mono);font-size:var(--font-size-xs);text-align:left;background:0 0;border:0;margin-top:auto;font-weight:700;display:inline-flex}.project-card__open[hidden]{display:none}.project-card__open span{font-size:var(--font-size-md);transition:transform var(--transition-base)}.project-card:hover .project-card__open span,.project-card:focus-within .project-card__open span{transform:translate(4px,-4px)}.project-card__links,.project-card__pending{padding-top:var(--space-3);margin-top:auto}.project-card__links{gap:var(--space-3);flex-wrap:wrap;display:flex}.project-card__links a{min-height:44px;padding-block:var(--space-2);color:var(--color-accent);font-family:var(--font-mono);font-size:var(--font-size-xs);align-items:center;font-weight:700;display:inline-flex}.project-card__links a:hover{color:var(--color-text)}.project-card .project-card__pending{color:var(--color-muted);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-size:.625rem}.project-dialog{border:1px solid var(--color-border-strong);border-radius:var(--radius-xl);background:var(--color-surface);width:min(72rem,100% - 3rem);max-width:none;max-height:calc(100svh - 3rem);color:var(--color-text);padding:0;overflow:auto;box-shadow:0 2rem 6rem #0000008c}.project-dialog::backdrop{backdrop-filter:blur(6px);background:#020c06c7}.project-dialog__shell{grid-template-columns:minmax(0,1.2fr) minmax(19rem,.8fr);min-height:min(44rem,100svh - 3rem);display:grid;position:relative}.project-dialog__close{top:var(--space-4);right:var(--space-4);z-index:1;border:1px solid var(--color-border-strong);background:var(--color-surface);width:44px;height:44px;color:var(--color-text);cursor:pointer;font-size:var(--font-size-lg);border-radius:50%;place-items:center;line-height:1;display:grid;position:absolute}.project-dialog__close:hover{border-color:var(--color-accent);color:var(--color-accent)}.project-dialog__visual{min-height:28rem;padding:clamp(var(--space-4), 3vw, var(--space-8));border-right:1px solid var(--color-border);background:var(--color-nav);place-items:center;display:grid}.project-dialog__visual img{object-fit:contain;width:100%;height:auto;max-height:calc(100svh - 9rem);display:block}#project-figma-clone-dialog .project-dialog__visual{margin:0}.project-dialog__content{justify-content:center;gap:var(--space-4);min-width:0;padding:clamp(3.5rem, 6vw, 5rem) clamp(var(--space-6), 4vw, 3.5rem);flex-direction:column;display:flex}.project-dialog__eyebrow,.project-dialog__pending{color:var(--color-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:.06em;text-transform:uppercase}.project-dialog__content h3{max-width:14ch;letter-spacing:var(--tracking-tight);font-size:clamp(2rem,4vw,3.5rem);line-height:.95}.project-dialog__content>p:not(.project-dialog__eyebrow,.project-dialog__pending){max-width:48ch;color:var(--color-muted)}.project-dialog__stack{gap:var(--space-2);margin-top:var(--space-2);flex-wrap:wrap;display:flex}.project-dialog__stack li{border:1px solid var(--color-border);border-radius:var(--radius-pill);color:var(--color-muted);font-family:var(--font-mono);padding:.35rem .6rem;font-size:.625rem}.project-dialog__links{align-items:flex-start;gap:var(--space-2);margin-top:var(--space-3);flex-direction:column;display:flex}.project-dialog__links a{min-height:44px;padding-block:var(--space-2);color:var(--color-accent);font-family:var(--font-mono);font-size:var(--font-size-xs);align-items:center;font-weight:700;display:inline-flex}.project-dialog-open{overflow:hidden}.experience-list{border-top:1px solid var(--color-border)}.experience-row{align-items:start;gap:clamp(var(--space-4), 3vw, var(--space-10));padding:1.375rem var(--space-1);border-bottom:1px solid var(--color-border);grid-template-columns:minmax(9rem,.7fr) minmax(12rem,1fr) minmax(0,1.45fr);display:grid}.experience-row__periods{gap:var(--space-2);display:grid}.experience-row__period{flex-wrap:wrap;gap:.25rem;display:flex}.experience-row__period,.experience-row__company{color:var(--color-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:.04em;text-transform:uppercase}.experience-row__heading{min-width:0}.experience-row h3{font-size:var(--font-size-lg);letter-spacing:var(--tracking-heading)}.experience-row__company{margin-bottom:var(--space-1);color:var(--color-accent)}.experience-row__summary{min-width:0;color:var(--color-muted)}.experience{padding-bottom:var(--space-26)}.contact-footer{align-items:center;gap:clamp(var(--space-8), 5vw, var(--space-15));padding:3.875rem var(--space-1) 2.125rem;border-top:1px solid var(--color-border);grid-template-columns:minmax(0,1.2fr) minmax(19rem,.8fr);display:grid}.contact-footer h2{max-width:12ch;font-size:var(--font-size-section-display);letter-spacing:-.06em;font-weight:700;line-height:.95}.contact-footer__actions{gap:.625rem;display:grid}.contact-footer__label{margin-bottom:var(--space-1)}.contact-action{border:1px solid var(--color-border);border-radius:var(--radius-md);min-height:3.25rem;font-family:var(--font-mono);font-size:var(--font-size-xs);transition:border-color var(--transition-base), color var(--transition-base), transform var(--transition-base);font-weight:700}.contact-action--primary{justify-content:space-between;align-items:center;gap:var(--space-5);min-height:4.25rem;padding:var(--space-4) 1.125rem;border-color:var(--color-accent);background:var(--color-accent);color:var(--color-accent-text);display:flex}.contact-action--primary span{gap:.125rem;display:grid}.contact-action--primary small{opacity:.72;overflow-wrap:anywhere;font-size:.625rem;font-weight:500}.contact-action--primary:hover,.contact-action--secondary:hover{transform:translateY(-2px)}.contact-action--primary:hover{background:var(--color-text);border-color:var(--color-text)}.contact-footer__secondary{gap:var(--space-2);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.contact-action--secondary,.contact-action--pending{padding:.75rem var(--space-2);text-align:center;place-items:center;display:grid}.contact-action--secondary:hover{border-color:var(--color-accent);color:var(--color-accent)}.contact-action--pending{cursor:not-allowed;opacity:.48}.site-footer{justify-content:space-between;gap:var(--space-5);padding:1.375rem var(--space-1) 2.25rem;border-top:1px solid var(--color-border);color:var(--color-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);margin-top:1.5625rem;display:flex}.not-found{align-content:center;gap:var(--space-4);min-height:100svh;width:min(calc(100% - (2 * var(--page-gutter))), var(--content-width));padding-block:var(--space-8);margin-inline:auto;display:grid}.not-found h1,.not-found p{margin:0}.not-found h1{max-width:12ch;font-size:var(--font-size-section-display);line-height:var(--line-height-heading);letter-spacing:-.045em}.not-found>p:not(.mono-label){max-width:46ch;color:var(--color-muted);font-size:var(--font-size-md)}.not-found a{width:fit-content;min-height:44px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);color:var(--color-accent);align-items:center;display:inline-flex}@media (prefers-reduced-motion:reduce){.project-card:hover,.project-card:focus-within,.project-card:hover .project-card__visual img,.project-card:focus-within .project-card__visual img{transform:none}}@media (width<=53.125rem){.site-nav__resume{display:none}.hero{gap:var(--space-8);padding-block:var(--space-15) 2.625rem;grid-template-columns:1fr}.project-grid{grid-template-columns:1fr}.project-card--wide,.project-card--narrow,.project-card--standard{grid-column:1/-1}.project-card__visual{aspect-ratio:16/10;height:auto}.project-dialog__shell{grid-template-columns:1fr}.project-dialog__visual{border-right:0;border-bottom:1px solid var(--color-border);min-height:0}.project-dialog__visual img{max-height:28rem}#project-figma-clone-dialog .project-dialog__visual{padding:var(--space-1)}.project-dialog__content{justify-content:start}.contact-footer{grid-template-columns:1fr}}@media (width<=40.625rem){.site-header{gap:var(--space-4)}.site-mark{font-size:var(--font-size-xs)}.site-nav{gap:var(--space-3);font-size:var(--font-size-xs)}.site-nav__work{display:none}.hero__title{font-size:clamp(3rem,15vw,4.25rem)}.section-header{align-items:start;display:grid}.section-header__count{text-align:left}.github-identity{grid-template-columns:3rem minmax(0,1fr) auto;padding:.625rem}.github-identity__avatar{width:3rem;height:3rem}.github-identity__hint{display:none}.project-card__body{min-height:0}.experience-row{column-gap:var(--space-4);row-gap:var(--space-2);grid-template-columns:minmax(5.5rem,.35fr) minmax(0,1fr);padding-block:1.375rem}.experience-row__periods{gap:var(--space-1)}.experience-row__heading{grid-area:1/2}.experience-row__summary{grid-area:2/2}.contact-footer{gap:var(--space-8);padding-top:var(--space-12)}.contact-footer h2{font-size:clamp(2.75rem,13vw,4rem)}.contact-footer__secondary{grid-template-columns:1fr}.contact-action{min-height:3.5rem}.site-footer{gap:var(--space-3);display:grid}}@media (width<=30rem){.site-nav__experience{display:none}}.project-card--reverse{grid-column:span 5}.project-card--feature{grid-column:span 7}.project-card--feature:nth-of-type(5){flex-direction:row;grid-column:1/-1}.project-card--feature:nth-of-type(5) .project-card__visual{border-right:1px solid var(--color-border);border-bottom:0;width:58.333%;height:auto;min-height:19rem}.project-card--feature:nth-of-type(5) .project-card__visual img{height:100%}.project-card--feature:nth-of-type(5) .project-card__body{width:41.667%}.project-card__visual{position:relative}.project-card__evidence{right:var(--space-3);bottom:var(--space-3);left:var(--space-3);width:fit-content;max-width:calc(100% - 2 * var(--space-3));padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-pill);background:var(--color-nav);color:var(--color-text);font-family:var(--font-mono);font-size:.625rem;line-height:1.4;position:absolute}.project-card__open{font-family:inherit;font-size:inherit;line-height:inherit;letter-spacing:inherit;margin:0}[data-project-static-title][hidden]{display:none}.project-card__links{margin-top:0}@media (width<=53.125rem){.project-card--reverse,.project-card--feature{grid-column:1/-1}.project-card--feature:nth-of-type(5){flex-direction:column}.project-card--feature:nth-of-type(5) .project-card__visual,.project-card--feature:nth-of-type(5) .project-card__body{width:100%}.project-card--feature:nth-of-type(5) .project-card__visual{border-right:0;border-bottom:1px solid var(--color-border);min-height:0}}
