/*! Built from src/styles.css by npm run build - edit that file, not this one. */
:root{--color-bg: #fafaf9;--color-surface: #f2f1ee;--color-ink: #14141a;--color-ink-soft: #6c6c72;--color-accent: #4f46e5;--color-accent-rgb: 79, 70, 229;--color-accent-hover: #4338ca;--color-accent-tint: rgba(79, 70, 229, .08);--color-border: #e3e2dd;--color-border-strong: #cfcec8;--color-status: #16a34a;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--radius: 6px;--container-width: 1080px;--nav-height: 64px;--tab-bar-height: calc(50px + env(safe-area-inset-bottom, 0px)) ;--ease-fluid: cubic-bezier(.65, 0, .35, 1)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--color-bg: #0d0d10;--color-surface: #18181c;--color-ink: #f4f4f2;--color-ink-soft: #9b9ba2;--color-accent: #818cf8;--color-accent-rgb: 129, 140, 248;--color-accent-hover: #a5b4fc;--color-accent-tint: rgba(129, 140, 248, .14);--color-border: #232328;--color-border-strong: #5f5f64;--color-status: #4ade80}}:root[data-theme=dark]{--color-bg: #0d0d10;--color-surface: #18181c;--color-ink: #f4f4f2;--color-ink-soft: #9b9ba2;--color-accent: #818cf8;--color-accent-rgb: 129, 140, 248;--color-accent-hover: #a5b4fc;--color-accent-tint: rgba(129, 140, 248, .14);--color-border: #232328;--color-border-strong: #5f5f64;--color-status: #4ade80}@font-face{font-family:Inter;src:url(fonts/Inter-Variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}*{box-sizing:border-box}html,body{height:100%;overscroll-behavior:none}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent}a,button,summary,label{touch-action:manipulation}header,.tab-bar{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.panel,.case-scroll{overscroll-behavior:contain}body{margin:0;padding:0;font-family:var(--font-sans);background:var(--color-bg);color:var(--color-ink);line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;touch-action:pan-y;transition:background-color .35s ease,color .35s ease}header,.tab-bar,.about-block{transition:background-color .35s ease,border-color .35s ease}h1,h2,h3,h4{font-family:var(--font-sans);font-weight:600;letter-spacing:-.02em;color:var(--color-ink);margin:0}p{font-size:16px;line-height:1.6;max-width:620px;margin:0 0 14px;color:var(--color-ink-soft)}a{color:var(--color-accent)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}:focus:not(:focus-visible){outline:none}header{display:flex;align-items:center;gap:16px;position:fixed;top:0;left:0;width:100%;height:var(--nav-height);padding:0 28px;background:var(--color-bg);border-bottom:1px solid var(--color-border);z-index:100;box-sizing:border-box}.header-title{text-decoration:none;color:inherit}.header-name{font-family:var(--font-mono);font-size:14px;font-weight:500;letter-spacing:0;color:var(--color-ink)}.github-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:var(--color-ink);text-decoration:none;border-radius:50%;transition:color .2s ease,background-color .2s ease;flex-shrink:0}.github-icon:hover{color:var(--color-accent);background:var(--color-surface)}.github-icon:active{transform:scale(.9)}.github-icon svg{transition:transform .35s var(--ease-fluid)}.github-icon:hover svg{transform:rotate(10deg)}@media(prefers-reduced-motion:reduce){.github-icon:active{transform:none}.github-icon:hover svg{transform:none}}.theme-toggle{position:relative;margin-left:auto;display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;color:var(--color-ink);cursor:pointer;border-radius:50%;transition:color .2s ease,background-color .2s ease;flex-shrink:0}.theme-toggle:hover{color:var(--color-accent);background:var(--color-surface)}.theme-toggle:active{transform:scale(.9)}.theme-toggle svg{position:absolute;top:50%;left:50%;transition:opacity .4s var(--ease-fluid),transform .4s var(--ease-fluid)}.theme-toggle .icon-sun{opacity:0;transform:translate(-50%,-50%) rotate(-70deg) scale(.4)}.theme-toggle .icon-moon{opacity:1;transform:translate(-50%,-50%) rotate(0) scale(1)}:root[data-theme=dark] .theme-toggle .icon-sun{opacity:1;transform:translate(-50%,-50%) rotate(0) scale(1)}:root[data-theme=dark] .theme-toggle .icon-moon{opacity:0;transform:translate(-50%,-50%) rotate(70deg) scale(.4)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle .icon-sun{opacity:1;transform:translate(-50%,-50%) rotate(0) scale(1)}:root:not([data-theme=light]) .theme-toggle .icon-moon{opacity:0;transform:translate(-50%,-50%) rotate(70deg) scale(.4)}}@media(prefers-reduced-motion:reduce){.theme-toggle svg{transition:opacity .2s ease}.theme-toggle .icon-sun,.theme-toggle .icon-moon,:root[data-theme=dark] .theme-toggle .icon-sun,:root[data-theme=dark] .theme-toggle .icon-moon{transform:translate(-50%,-50%)}.theme-toggle:active{transform:none}}.in-menu{display:none;position:relative}.in-menu a{position:relative;z-index:1;display:flex;align-items:center;gap:12px;color:var(--color-ink);text-decoration:none;font-size:15px;font-weight:500;padding:11px 14px;border-radius:var(--radius);transition:color .2s ease}.in-menu a svg{flex-shrink:0;opacity:.5}.in-menu a:hover{color:var(--color-accent)}.in-menu a:hover svg{opacity:1}.in-menu a.active{color:var(--color-accent)}.in-menu a.active svg{opacity:1}.nav-indicator{position:absolute;top:0;left:0;height:100%;border-radius:var(--radius);background:var(--color-accent-tint);transition:transform .4s var(--ease-fluid),width .4s var(--ease-fluid);pointer-events:none;z-index:0}.nav-indicator.no-transition{transition:none!important}@media(prefers-reduced-motion:reduce){.nav-indicator{transition:none}}.tab-bar{position:fixed;left:0;right:0;bottom:0;height:var(--tab-bar-height);z-index:100;display:flex;background:var(--color-bg);border-top:1px solid var(--color-border);padding-bottom:env(safe-area-inset-bottom,0px);box-sizing:border-box}.tab-link{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:6px 4px;color:var(--color-ink-soft);text-decoration:none;font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.03em;transition:color .2s ease}.tab-link svg{opacity:.7;transition:opacity .2s ease,transform .2s var(--ease-fluid)}.tab-link.active{color:var(--color-accent)}.tab-link.active svg{opacity:1}.tab-link:active svg{transform:scale(.85)}@media(prefers-reduced-motion:reduce){.tab-link:active svg{transform:none}}.view{position:fixed;top:var(--nav-height);left:0;right:0;bottom:0;overflow:hidden;overflow:clip}.panel{position:absolute;inset:0;display:flex;flex-direction:column;padding:28px;opacity:1;transform:translate(100%);pointer-events:none;transition:transform .6s var(--ease-fluid);overflow-y:auto;z-index:1}.panel:focus{outline:none}.panel.active{transform:translate(0);pointer-events:auto;z-index:2}.panel.enter-from-right{transform:translate(100%)}.panel.enter-from-left,.panel.exit-to-left{transform:translate(-100%)}.panel.exit-to-right{transform:translate(100%)}.panel.no-transition{transition:none!important}.reveal{opacity:0;transform:translateY(14px) scale(.98);transition:opacity .65s var(--ease-fluid),transform .65s var(--ease-fluid);transition-delay:calc(var(--i, 0) * 70ms)}.panel.active .reveal{opacity:1;transform:translateY(0) scale(1)}@keyframes revealIn{0%{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes revealFade{0%{opacity:0}to{opacity:1}}.panel.active .reveal.init-pending{animation:revealIn .65s var(--ease-fluid) calc(var(--i, 0) * 70ms) both}@media(prefers-reduced-motion:reduce){.panel{opacity:0;transform:none;transition:opacity .2s ease}.panel.active{opacity:1}.panel.active .reveal.init-pending{animation-name:revealFade;animation-delay:0s}.panel.enter-from-right,.panel.enter-from-left,.panel.exit-to-left,.panel.exit-to-right{transform:none}.reveal{transform:none;transition-delay:0s}}.panel-content{max-width:var(--container-width);width:100%;margin:auto}.panel-header{margin-bottom:28px}.section-title{font-size:clamp(24px,3.4vw,34px);font-weight:600;letter-spacing:-.02em;color:var(--color-ink)}.panel{--wave-y: .91;--wave-scale: .5;--wave-glow: .09}.panel:before,.dot-grid,.wave-canvas{position:absolute;inset:0;z-index:-1;pointer-events:none;mask-image:var(--safe-mask, none);-webkit-mask-image:var(--safe-mask, none)}.panel:before,.dot-grid-dots{background-image:radial-gradient(circle,rgba(var(--color-accent-rgb),1) 1.2px,transparent 1.2px);background-size:26px 26px}.panel:before{content:"";opacity:.18}.panel.has-dot-grid:before{content:none}.dot-grid{overflow:hidden;opacity:.18}.dot-grid-dots{position:absolute;inset:-26px 0;will-change:translate}.wave-canvas{width:100%;height:100%}@media screen and (max-width:899px){.panel{--wave-y-top: .07}.wave-canvas{mask-image:var(--safe-mask),linear-gradient(#00000040,#00000040);-webkit-mask-image:var(--safe-mask),linear-gradient(rgba(0,0,0,.25),rgba(0,0,0,.25))}}@media screen and (min-width:900px){.about-panel,.projects-panel,.contact-panel{--wave-y: .55;--wave-scale: 1}.about-panel .wave-canvas,.projects-panel .wave-canvas,.contact-panel .wave-canvas{mask-image:var(--safe-mask),linear-gradient(#0009,#0009);-webkit-mask-image:var(--safe-mask),linear-gradient(rgba(0,0,0,.6),rgba(0,0,0,.6))}}.hero-content{max-width:var(--container-width);width:100%;margin:auto}@media screen and (min-width:900px){.hero-panel{--safe-mask: linear-gradient(to right, transparent 0, transparent 660px, black 940px);--wave-y: .55;--wave-scale: 1}.hero-content{width:calc(100% - 112px);margin-left:112px;margin-right:auto}}@media screen and (max-width:899px){.hero-panel{--safe-mask: linear-gradient(to bottom, black 0, black 30%, transparent 38%, transparent 62%, black 70%, black 100%)}.hero-content{margin-top:auto;margin-bottom:auto}.hero-panel .hero-actions{display:none}.hero-panel.not-found .hero-actions{display:flex}}.hero-status{display:inline-flex;align-items:center;gap:8px;margin:0;font-family:var(--font-mono);font-size:12px;color:var(--color-ink-soft);letter-spacing:.02em}.status-dot{position:relative;width:7px;height:7px;border-radius:50%;background:var(--color-status);flex-shrink:0}.status-dot:after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--color-status);animation:statusPulse 2.4s ease-out infinite}@keyframes statusPulse{0%{transform:scale(1);opacity:.6}70%,to{transform:scale(2.6);opacity:0}}@media(prefers-reduced-motion:reduce){.status-dot:after{animation:none;opacity:0}}.hero-title{margin:16px 0 18px;line-height:1.05}.hero-title .name{display:block;font-size:clamp(38px,6.4vw,68px);font-weight:600;letter-spacing:-.03em;color:var(--color-ink)}.hero-title .role{display:block;font-size:clamp(17px,2.2vw,22px);font-weight:500;color:var(--color-ink-soft);margin-top:6px}.hero-description{font-size:16px;line-height:1.6;color:var(--color-ink-soft);margin-bottom:36px;max-width:520px}.hero-actions{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.cta-primary,.cta-secondary{display:inline-flex;align-items:center;gap:8px;text-decoration:none;font-weight:500;font-size:15px;transition:background .2s ease,border-color .2s ease,color .2s ease,transform .15s var(--ease-fluid)}.cta-primary:active,.cta-secondary:active{transform:scale(.96)}@media(prefers-reduced-motion:reduce){.cta-primary:active,.cta-secondary:active{transform:none}}.cta-primary{background:var(--color-ink);color:var(--color-bg);padding:13px 24px;border-radius:var(--radius)}.cta-primary:hover{background:var(--color-accent)}.cta-secondary{background:none;color:var(--color-ink);padding:13px 24px;border:1px solid var(--color-border-strong);border-radius:var(--radius)}.cta-secondary:after{content:"\2192";transition:transform .2s ease}.cta-secondary:hover{border-color:var(--color-accent);color:var(--color-accent)}.cta-secondary:hover:after{transform:translate(3px)}.about-panel{--safe-mask: linear-gradient(to bottom, black 0, black 8%, transparent 20%, transparent 80%, black 92%, black 100%)}.about-grid{display:grid;grid-template-columns:1fr 1fr;column-gap:48px;row-gap:18px;align-items:start}.intro-text{font-size:15px;line-height:1.6;color:var(--color-ink-soft);max-width:none;margin:0}.about-grid>.intro-text{grid-column:1 / -1;max-width:860px}.about-block{border-top:1px solid var(--color-border);padding-top:12px}.about-block h3{font-family:var(--font-mono);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.06em;color:var(--color-ink-soft);margin:0 0 10px}.timeline{list-style:none;margin:0;padding:0}.timeline-item{position:relative;display:grid;gap:1px;padding:0 0 9px 22px}.timeline-item:not(:last-child):after{content:"";position:absolute;left:4px;top:12px;bottom:-2px;width:1px;background:var(--color-border-strong)}.timeline-item:before{content:"";position:absolute;left:0;top:4px;width:9px;height:9px;box-sizing:border-box;border-radius:50%;background:var(--color-border-strong)}.timeline-item.is-current:before{background:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-tint)}.timeline-item.is-education:before{background:var(--color-bg);border:2px solid var(--color-accent)}.timeline-date{font-family:var(--font-mono);font-size:11px;line-height:1.5;color:var(--color-ink-soft)}.timeline-item.is-current .timeline-date{color:var(--color-accent)}.timeline-role{font-size:14px;font-weight:500;line-height:1.35;color:var(--color-ink)}.timeline-org{font-size:13px;line-height:1.4;color:var(--color-ink-soft)}.timeline-resume{display:inline-block;margin-top:2px;font-family:var(--font-mono);font-size:12px;text-decoration:none}.timeline-resume:hover{text-decoration:underline;text-underline-offset:3px}.skills-list{display:grid;gap:12px;margin:0}.skill-category dt{font-family:var(--font-mono);font-size:11px;line-height:1.5;color:var(--color-ink-soft)}.skill-category dd{margin:1px 0 0;font-size:14px;line-height:1.45;color:var(--color-ink)}.projects-panel{--safe-mask: linear-gradient(to bottom, black 0, black 4%, transparent 12%, transparent 88%, black 96%, black 100%)}.projects-grid{display:flex;flex-direction:column;counter-reset:project-count}.project-group-title{font-family:var(--font-mono);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;color:var(--color-ink-soft);margin:22px 0 8px}.projects-grid.school-projects{counter-reset:none}.project{position:relative;counter-increment:project-count;transition:opacity .65s var(--ease-fluid) calc(var(--i, 0) * 70ms),transform .65s var(--ease-fluid) calc(var(--i, 0) * 70ms)}.project-summary{display:grid;grid-template-columns:40px 1fr auto 14px;align-items:baseline;column-gap:16px;padding:13px 0;list-style:none;cursor:pointer}.projects-grid>.project:first-child{border-top:1px solid var(--color-border)}.project:not([open])>.project-summary,.project[open]>.project-body{box-shadow:inset 0 -1px 0 var(--color-border)}.project-fold{position:relative}.project:not([open])>.project-fold{display:none}.project-fold:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--color-border)}.project-fold.is-moving{overflow:hidden;pointer-events:none}.project-fold.is-moving>.project-body{pointer-events:auto}.project-fold.is-folding{position:absolute;top:100%;left:0;right:0}.project-summary::-webkit-details-marker{display:none}.project-summary:before{content:"0" counter(project-count);font-family:var(--font-mono);font-size:12px;color:var(--color-ink-soft)}.project-summary:after{content:"";grid-column:-2;width:6px;height:6px;border-right:1.5px solid var(--color-ink-soft);border-bottom:1.5px solid var(--color-ink-soft);transform:translateY(-3px) rotate(45deg);transition:transform .25s var(--ease-fluid)}.project[open]>.project-summary:after{transform:translateY(0) rotate(-135deg)}.project[data-closing]>.project-summary:after{transform:translateY(-3px) rotate(45deg)}.project-heading{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:12px;row-gap:2px;min-width:0}.project-title{margin:0;font-size:17px;color:var(--color-ink);transition:color .2s ease}.project-summary:hover .project-title,.project[open] .project-title{color:var(--color-accent)}.project[data-closing]:not(:hover) .project-title{color:var(--color-ink)}.project-tagline{font-size:13px;color:var(--color-ink-soft)}.project-badge{font-family:var(--font-mono);color:var(--color-accent);font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap}.project-badge.secondary{color:var(--color-ink-soft)}.project-body{padding:0 30px 16px 56px}.project-body:has(.project-preview){display:grid;grid-template-columns:minmax(0,1fr) 240px;column-gap:24px;align-items:start}.project-body:has(.project-preview)>:not(.project-preview){grid-column:1}.project-preview{grid-column:2;grid-row:1 / span 3;display:block;width:100%;height:auto;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface)}.project[open]>.project-body{animation:projectOpen .3s var(--ease-fluid)}@keyframes projectOpen{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.project[open]>.project-body{animation:none}}.project-description{font-size:14px;line-height:1.55;color:var(--color-ink-soft);margin:0 0 10px;max-width:640px}.tech-tags{display:flex;flex-wrap:wrap;gap:4px 14px}.tech-tag{font-family:var(--font-mono);color:var(--color-ink-soft);font-size:11px;font-weight:400;transition:color .2s ease}.tech-tag:hover{color:var(--color-accent)}.project-links{display:flex;flex-wrap:wrap;align-items:baseline;gap:16px;margin-top:10px;font-family:var(--font-mono);font-size:12px}.project-links a{color:var(--color-accent);text-decoration:none}.project-links a:hover,.project-copy-link:hover{text-decoration:underline;text-underline-offset:3px}.project-copy-link{padding:0;border:0;background:none;font:inherit;color:var(--color-ink-soft);cursor:pointer}.writing-list ul{list-style:none;margin:0;padding:0;border-top:1px solid var(--color-border)}.writing-link{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:11px 0;border-bottom:1px solid var(--color-border);color:var(--color-ink);text-decoration:none;transition:color .2s ease}.writing-link:hover{color:var(--color-accent)}.writing-title{font-size:14px;line-height:1.4}.writing-meta{flex-shrink:0;font-family:var(--font-mono);font-size:11px;color:var(--color-ink-soft)}@media screen and (max-width:640px){.writing-link{flex-direction:column;gap:2px;padding:9px 0}.writing-title{font-size:13px}}.more-repos{margin-top:22px}.more-repos-title{font-family:var(--font-mono);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;margin:0 0 10px}.more-repos-title a{color:var(--color-ink-soft);text-decoration:none;transition:color .2s ease}.more-repos-title a:hover{color:var(--color-accent)}.repo-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}.repo-link{display:inline-flex;align-items:baseline;gap:8px;padding:6px 10px;border:1px solid var(--color-border);border-radius:6px;font-size:13px;color:var(--color-ink);text-decoration:none;transition:border-color .2s ease,color .2s ease}.repo-link:hover{border-color:var(--color-accent);color:var(--color-accent)}.repo-meta{font-family:var(--font-mono);font-size:11px;color:var(--color-ink-soft)}@media screen and (max-width:640px){.more-repos{margin-top:14px}.more-repos-title{margin:0}.project-group-title{margin:16px 0 6px}.repo-list{display:none}}.contact-panel{--safe-mask: linear-gradient(to bottom, black 0, black 10%, transparent 24%, transparent 76%, black 90%, black 100%)}.contact-intro{font-size:15px;line-height:1.6;color:var(--color-ink-soft);margin-bottom:20px;max-width:560px}.contact-methods{display:flex;flex-direction:column;border-top:1px solid var(--color-border)}.contact-card{display:flex;align-items:center;gap:14px;padding:14px 4px;border-bottom:1px solid var(--color-border);text-decoration:none;color:inherit;transition:background-color .2s ease,border-color .35s ease,transform .25s var(--ease-fluid)}.contact-card:hover{background:var(--color-surface);transform:translate(4px)}@media(prefers-reduced-motion:reduce){.contact-card:hover{transform:none}}.contact-icon{color:var(--color-ink-soft);width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .2s ease}.contact-card:hover .contact-icon{color:var(--color-accent)}.icon-check,#email-card.copied .icon-mail{display:none}#email-card.copied .icon-check{display:block;color:var(--color-accent)}#email-card .copied-text,#email-card.copied .value-text{display:none}#email-card.copied .copied-text{display:inline;color:var(--color-accent)}.li-mark{font-family:var(--font-mono);font-weight:600;font-size:14px;line-height:1}.contact-value{font-size:14px;font-weight:500;color:var(--color-ink)}.panel-footer{margin-top:20px;font-family:var(--font-mono);font-size:11px;color:var(--color-ink-soft)}@media screen and (min-width:900px){.tab-bar{display:none}.in-menu{display:flex;flex-direction:row;align-items:center;gap:4px;margin-left:40px}.in-menu a{padding:8px 12px;font-size:14px}.in-menu a svg{display:none}}@media screen and (max-width:899px){.about-grid{grid-template-columns:1fr;gap:16px}.view{bottom:var(--tab-bar-height)}.about-panel,.projects-panel{--safe-mask: linear-gradient(to bottom, black 0, black 7%, transparent 11%)}.contact-panel{--safe-mask: linear-gradient(to bottom, black 0, black 15%, transparent 19%, transparent 81%, black 85%, black 100%)}.about-panel .wave-canvas,.projects-panel .wave-canvas,.contact-panel .wave-canvas{mask-image:var(--safe-mask),linear-gradient(#00000080,#00000080);-webkit-mask-image:var(--safe-mask),linear-gradient(rgba(0,0,0,.5),rgba(0,0,0,.5))}}@media screen and (max-width:640px){header{padding:0 20px}.panel{padding:10px 20px}.hero-title .name{font-size:30px}.hero-title .role{font-size:15px}.hero-title{margin:12px 0 14px}.hero-description{font-size:14px;margin-bottom:24px}.hero-status{font-size:11px;letter-spacing:0}.project-summary{grid-template-columns:24px 1fr 12px;column-gap:10px;padding:11px 0}.project-summary .project-badge{display:none}.project-heading{flex-direction:column}.project-title{font-size:16px}.project-tagline{font-size:12px}.project-body{padding:0 0 14px 34px}.project-body:has(.project-preview){grid-template-columns:minmax(0,1fr)}.project-preview{grid-column:1;grid-row:auto;order:1;margin-top:12px}.project-description{font-size:13px;margin-bottom:8px}}@media screen and (max-width:359px){.status-where{display:none}}@media screen and (max-height:700px){.panel-header{margin-bottom:16px}.hero-description{margin-bottom:18px}}@media screen and (max-width:899px)and (max-height:760px){.panel-header{margin-bottom:10px}.about-grid{gap:10px}.about-block{padding-top:10px}.skills-list{gap:8px}}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;top:10px;left:10px;z-index:300;padding:8px 14px;border-radius:6px;background:var(--color-ink);color:var(--color-bg);font-size:13px;text-decoration:none;transform:translateY(-160%);transition:transform .2s ease}.skip-link:focus{transform:translateY(0)}[tabindex="-1"]:focus,[tabindex="-1"]:focus-visible{outline:none}.cmdk-trigger{display:none;align-items:center;height:28px;padding:0 9px;border:1px solid var(--color-border);border-radius:6px;background:none;color:var(--color-ink-soft);font-family:var(--font-mono);font-size:11px;cursor:pointer;transition:color .2s ease,border-color .2s ease}.cmdk-trigger:hover{color:var(--color-accent);border-color:var(--color-accent)}.cmdk-trigger kbd{font:inherit}@media screen and (min-width:900px){.cmdk-trigger{display:inline-flex}}.cmdk{width:min(540px,calc(100vw - 32px));max-height:min(520px,76vh);margin:14vh auto auto;padding:0;border:1px solid var(--color-border-strong);border-radius:12px;background:var(--color-bg);color:var(--color-ink);box-shadow:0 24px 60px #0000004d;overflow:hidden}.cmdk::backdrop{background:#0a0a0e73}.cmdk[open]{animation:cmdkIn .18s var(--ease-fluid)}@keyframes cmdkIn{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.cmdk[open]{animation:none}}.cmdk-box{display:flex;flex-direction:column;max-height:inherit}.cmdk-input{padding:16px 18px;border:none;border-bottom:1px solid var(--color-border);background:transparent;color:var(--color-ink);font:inherit;font-size:15px}.cmdk-input:focus,.cmdk-input:focus-visible{outline:none}.cmdk-input::placeholder{color:var(--color-ink-soft)}.cmdk-list{list-style:none;margin:0;padding:6px;overflow-y:auto}.cmdk-item{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:10px 12px;border-radius:8px;font-size:14px;cursor:pointer}.cmdk-item[aria-selected=true]{background:var(--color-accent-tint);color:var(--color-accent)}.cmdk-hint{font-family:var(--font-mono);font-size:11px;color:var(--color-ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cmdk-empty{margin:0;padding:18px;text-align:center;font-size:13px;color:var(--color-ink-soft)}.cmdk-footer{display:flex;gap:16px;padding:10px 16px;border-top:1px solid var(--color-border);font-size:11px;color:var(--color-ink-soft)}.cmdk-footer kbd{margin-right:3px;padding:1px 5px;border:1px solid var(--color-border);border-radius:4px;font-family:var(--font-mono);font-size:10px}.toast{position:fixed;left:50%;bottom:calc(24px + var(--tab-bar-height));z-index:250;padding:10px 16px;border-radius:8px;background:var(--color-ink);color:var(--color-bg);font-size:13px;white-space:nowrap;box-shadow:0 10px 30px #0003;opacity:0;transform:translate(-50%,12px);pointer-events:none;transition:opacity .2s ease,transform .25s var(--ease-fluid)}.toast.visible{opacity:1;transform:translate(-50%)}html.printing *,html.printing *:before,html.printing *:after{transition:none!important}.case-panel{padding:0;overflow:hidden;--wave-y: .55;--wave-scale: 1;--safe-mask: linear-gradient(to right, black 0, black calc(50% - 440px) , transparent calc(50% - 380px) , transparent calc(50% + 380px) , black calc(50% + 440px) )}.case-scroll{position:absolute;inset:0;overflow-y:auto;padding:40px 28px 72px}.case-study{max-width:680px;margin:0 auto}.case-back{display:inline-block;margin-bottom:28px;font-family:var(--font-mono);font-size:12px;text-decoration:none}.case-back:hover,.case-links a:hover,.case-section a:hover{text-decoration:underline;text-underline-offset:3px}.case-kicker{margin:0 0 6px;font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--color-accent)}.case-title{font-size:clamp(30px,5vw,44px);line-height:1.15}.case-lede{margin:12px 0 24px;font-size:18px;color:var(--color-ink)}.case-meta{display:grid;gap:8px;margin:0 0 28px;padding:14px 0;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);font-size:14px}.case-meta>div{display:grid;grid-template-columns:64px 1fr;gap:12px}.case-meta dt{font-family:var(--font-mono);font-size:11px;line-height:21px;text-transform:uppercase;letter-spacing:.04em;color:var(--color-ink-soft)}.case-meta dd{margin:0;color:var(--color-ink)}.case-links{display:flex;flex-wrap:wrap;gap:16px;font-family:var(--font-mono);font-size:13px}.case-links a{text-decoration:none}.case-preview{display:block;width:100%;height:auto;margin-bottom:8px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface)}.case-demo{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px;margin-top:20px;padding:16px 18px;border:1px solid var(--color-border);border-left:3px solid var(--color-accent);border-radius:var(--radius);background:var(--color-accent-tint)}.case-demo>div{flex:1 1 320px}.case-demo p{margin:0;font-size:14px;color:var(--color-ink)}.case-demo .case-demo-label{margin-bottom:4px;font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--color-accent)}.case-demo-link{flex:none;padding:9px 14px;border:1px solid var(--color-accent);border-radius:var(--radius);font-family:var(--font-mono);font-size:13px;text-decoration:none;white-space:nowrap}.case-demo-link:hover{background:var(--color-accent);color:var(--color-bg)}.case-section{margin-top:36px}.case-section h2{margin-bottom:12px;font-size:22px}.case-section h3{margin:22px 0 6px;font-size:16px}.case-section p,.case-section li{max-width:none;font-size:16px;line-height:1.65;color:var(--color-ink-soft)}.case-section ul,.case-section ol{margin:0;padding-left:20px}.case-section li+li{margin-top:8px}.case-section strong{font-weight:600;color:var(--color-ink)}.case-section code{font-family:var(--font-mono);font-size:.9em;color:var(--color-ink)}.case-section pre{margin:16px 0;padding:14px 16px;overflow-x:auto;border:1px solid var(--color-border);border-radius:10px;font-size:13.5px;line-height:1.55}.case-section pre code{font-size:inherit}.case-pager{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:48px;padding-top:20px;border-top:1px solid var(--color-border)}.case-pager a{display:flex;flex-direction:column;gap:2px;font-weight:600;text-decoration:none;color:var(--color-ink);transition:color .2s ease}.case-pager a:hover{color:var(--color-accent)}.case-pager a[rel=next]{text-align:right}.case-pager-label{font-family:var(--font-mono);font-size:11px;font-weight:400;text-transform:uppercase;letter-spacing:.04em;color:var(--color-ink-soft)}@media screen and (max-width:899px){.case-panel{--safe-mask: linear-gradient(transparent, transparent)}}@media screen and (max-width:640px){.case-scroll{padding:24px 20px 48px}.case-lede{font-size:17px}.case-meta>div{grid-template-columns:1fr;gap:2px}}@media print{:root,:root[data-theme=dark],:root:not([data-theme=light]){--color-bg: #ffffff;--color-surface: #f2f1ee;--color-ink: #14141a;--color-ink-soft: #55555b;--color-accent: #4f46e5;--color-accent-rgb: 79, 70, 229;--color-border: #e3e2dd;--color-border-strong: #cfcec8;--color-status: #16a34a}@page{margin:14mm 16mm}html,body{height:auto;overflow:visible;background:#fff}header,.tab-bar,.skip-link,.cmdk,.toast,.wave-canvas,.dot-grid,.panel:before,.hero-actions,.copied-text{display:none!important}.view{position:static}.panel{position:static;display:block;padding:0;overflow:visible;transform:none!important;transition:none!important}.panel+.panel{margin-top:9mm;padding-top:7mm;border-top:1px solid var(--color-border)}.reveal,.panel .reveal{opacity:1!important;transform:none!important;transition:none!important}.hero-content,.panel-content{max-width:none;margin:0}.hero-title .name{font-size:34px}.hero-description{margin-bottom:0}.panel-header{margin-bottom:12px;break-after:avoid}.project,.skill-category,.contact-card,.more-repos{break-inside:avoid}.project-summary:after,.project-preview{display:none}.status-dot:after{display:none}.case-scroll{position:static;overflow:visible;padding:0}.case-study{max-width:none}.case-back,.case-pager,.project-copy-link{display:none}.case-section h2,.case-section h3{break-after:avoid}.case-preview{max-width:60%}a{color:inherit;text-decoration:none}}.view{top:calc(var(--nav-height) + env(safe-area-inset-top,0px));left:env(safe-area-inset-left,0px);right:env(safe-area-inset-right,0px)}header{height:calc(var(--nav-height) + env(safe-area-inset-top,0px));padding-top:env(safe-area-inset-top,0px);padding-left:calc(28px + env(safe-area-inset-left,0px));padding-right:calc(28px + env(safe-area-inset-right,0px))}.tab-bar{padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px)}@media screen and (max-width:640px){header{padding-left:calc(20px + env(safe-area-inset-left,0px));padding-right:calc(20px + env(safe-area-inset-right,0px))}}
