:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--paper:#fafafa;--ink:#0f172a;--muted:#64748b;--line:#d4d4d8;--card:#fafafaeb;--accent:#b91c1c;--mark:#a1a1aa}*{box-sizing:border-box}html{scroll-behavior:smooth}html,body{overflow-x:clip}body{background:var(--paper);color:var(--ink);margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;line-height:1.6}a{color:inherit}img{max-width:100%;display:block}button,input,textarea{font:inherit}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.portfolio{min-height:100vh;padding:12px 12px 40px}.portfolio-nav{border-bottom:1px solid var(--line)}.portfolio-tabs{align-items:center;gap:18px;min-height:48px;padding:0 24px;display:flex;overflow-x:auto}.portfolio-tabs a{color:var(--muted);white-space:nowrap;flex:none;padding:14px 0 12px;font-size:.95rem;text-decoration:none;position:relative}.portfolio-tabs a[aria-current=page]{color:var(--ink);font-weight:700}.portfolio-tabs a[aria-current=page]:after{content:"";background:var(--accent);height:2px;position:absolute;bottom:-1px;left:0;right:0}.portfolio-tabs a:hover{color:var(--ink)}.portfolio-main{width:min(1152px,100%);margin:0 auto}.frame{border:1px solid var(--line);background:var(--card);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);position:relative}.mark{border:1px solid var(--mark);background:var(--paper);width:7px;height:7px;box-shadow:0 0 0 2px var(--paper);z-index:2;border-radius:50%;position:absolute}.mark-tl{top:-4px;left:-4px}.mark-tr{top:-4px;right:-4px}.mark-bl{bottom:-4px;left:-4px}.mark-br{bottom:-4px;right:-4px}.rule{background:var(--line);pointer-events:none;width:100%;height:1px;position:absolute;left:0}.rule-top{top:-1px}.rule-bottom{bottom:-1px}.stem{background:var(--line);pointer-events:none;width:1px;height:100vh;position:absolute;top:-100vh}.stem-left{left:-1px}.stem-right{right:-1px}.hero{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr);display:grid}.hero-portrait{border-bottom:1px solid var(--line);place-items:center;min-height:240px;padding:36px 24px;display:grid;position:relative;overflow:hidden}.hero-portrait img{z-index:1;object-fit:cover;border:4px solid #fff;border-radius:50%;width:96px;height:96px;position:relative;box-shadow:0 1px 2px #00000014}.circuit{width:100%;height:100%;position:absolute;inset:0;overflow:hidden}.circuit-lines{stroke-dasharray:10 10;animation:15s linear infinite dash}@keyframes dash{to{stroke-dashoffset:-200px}}.hero-copy{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:24px;padding:28px 24px;display:flex}.hero-copy h1,.page-intro h1{letter-spacing:-.03em;overflow-wrap:anywhere;margin:0;font-size:clamp(2rem,5vw,3.25rem);line-height:1.05}.page-intro .page-kicker{color:var(--accent);margin:10px 0 16px;font-size:1.15rem;font-weight:500}.typed-role{min-height:2rem;color:var(--accent);align-items:center;margin:10px 0 0;font-size:1.15rem;font-weight:500;display:flex}.caret{margin-left:2px;font-weight:300;animation:1s step-end infinite blink}@keyframes blink{50%{opacity:0}}.open-link{color:var(--muted);gap:6px;margin-top:12px;font-size:.92rem;text-decoration:none;display:inline-flex}.open-link:hover{color:var(--accent)}.open-link span{transition:transform .2s}.open-link:hover span{transform:translate(4px)}.band,.split-main,.split aside{padding:28px 24px;position:relative}.band{border-bottom:1px solid var(--line)}.band p,.about p{max-width:52rem;color:var(--muted);margin:0 0 16px;font-size:1.02rem}.band strong{color:var(--ink)}.band a{color:var(--accent)}.resume-prompt a{color:var(--ink);text-underline-offset:4px;font-weight:500;-webkit-text-decoration:underline #fca5a5;text-decoration:underline #fca5a5}.resume-prompt a:hover{color:var(--accent)}.resume-prompt span{transition:transform .2s;display:inline-block}.resume-prompt a:hover span{transform:translate(4px)}.resume-head{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:20px;display:grid}.resume-head img{object-fit:cover;border:4px solid #fff;border-radius:50%;width:96px;height:96px;box-shadow:0 1px 2px #00000014}.resume-head h1{letter-spacing:-.03em;margin:0;font-size:clamp(2rem,4vw,2.6rem);line-height:1.1}.resume-head .page-kicker{color:var(--accent);margin:6px 0 0}.resume-download{border:1px solid var(--line);color:var(--ink);cursor:pointer;background:#fff;border-radius:8px;grid-column:1/-1;justify-self:end;align-items:center;gap:6px;padding:6px 12px;font-size:.85rem;font-weight:600;text-decoration:none;display:inline-flex}.resume-download svg{fill:#94a3b8;width:16px;height:16px}.resume-download:hover{border-color:var(--ink)}.resume-head>div{min-width:0}.resume-chips{flex-wrap:wrap;gap:8px;margin:14px 0 0;padding:0;list-style:none;display:flex}.resume-chips a,.resume-chips span{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:8px;align-items:center;gap:8px;padding:6px 10px;font-size:.84rem;text-decoration:none;display:inline-flex}.resume-chips svg{fill:currentColor;color:#94a3b8;flex:none;width:14px;height:14px}.resume-chips svg.line-icon{fill:none;stroke:currentColor;stroke-width:1.8px}.resume-chips a:hover{border-color:var(--ink)}.resume-head+.band h2,.band>h2{color:var(--muted);letter-spacing:.16em;text-transform:uppercase;margin:0 0 16px;font-size:.72rem;font-weight:700}.resume-head+.band h2.resume-summary{color:var(--ink);letter-spacing:0;text-transform:none;margin:0 0 16px;font-size:1.125rem;font-weight:700}@media (width>=640px){.resume-head+.band h2.resume-summary{font-size:1.25rem}}.resume-timeline{margin:0;padding:0;list-style:none;position:relative}.resume-timeline:before{content:"";background:var(--line);width:1px;position:absolute;top:0;bottom:0;left:0;transform:translate(-50%)}.resume-timeline li{padding:0 0 22px 22px;position:relative}.resume-timeline li:before{box-sizing:border-box;content:"";border:1.5px solid var(--mark);background:var(--paper);border-radius:50%;width:9px;height:9px;position:absolute;top:calc(.84rem - 4.5px);left:0;transform:translate(-50%)}.resume-role{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.resume-role h3,.resume-more h3{margin:0;font-size:1.05rem}.resume-more p{margin:6px 0 0}.resume-more a{color:#2563eb;text-underline-offset:2px;text-decoration:underline}.resume-role span{color:#15803d;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;padding:2px 8px;font-size:.75rem;font-weight:600}.resume-meta{color:var(--muted);margin:4px 0 8px;font-size:.88rem}.expertise{border-top:1px solid var(--line);border-left:1px solid var(--line);grid-template-columns:1fr;margin:0;padding:0;list-style:none;display:grid}.expertise li{border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff;gap:8px;padding:22px 24px;display:grid}.expertise span{color:var(--muted);font-size:.92rem}body.for-pdf .portfolio-nav,body.for-pdf .portfolio-footer,body.for-pdf .resume-download,body.for-pdf .mark,body.for-pdf .rule,body.for-pdf .stem{display:none}body.for-pdf,body.for-pdf .portfolio,body.for-pdf .frame{background:#fff;border:0}body.for-pdf .portfolio{min-height:0;padding:0}body.for-pdf .expertise li,body.for-pdf .resume-timeline li{break-inside:avoid}@media print{.portfolio-nav,.portfolio-footer,.resume-download,.mark,.rule,.stem{display:none}.portfolio{background:#fff;min-height:0;padding:0}.frame,body{background:#fff;border:0}.expertise li,.resume-timeline li{break-inside:avoid}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}@page{margin:14mm}.connect-nodes .connect a{color:var(--ink)}.skills{flex-wrap:wrap;gap:8px;margin:8px 0 0;padding:0;list-style:none;display:flex}.skills li{border:1px solid var(--line);color:var(--ink);border-radius:999px;padding:4px 10px;font-size:.82rem}.split{border-bottom:1px solid var(--line);grid-template-columns:1fr;display:grid}.split h2,.projects h2,.connect-nodes h2{color:var(--muted);letter-spacing:.16em;text-transform:uppercase;margin:0 0 18px;font-size:.72rem;font-weight:700}.connect{flex-wrap:wrap;gap:12px;display:flex}.connect a{border:1px solid var(--line);width:44px;height:44px;color:var(--ink);background:#fff;border-radius:8px;place-items:center;text-decoration:none;display:grid}.connect a:hover{border-color:var(--ink)}.connect svg{fill:currentColor;width:16px;height:16px}.connect svg.mail-icon{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.projects-intro h1{letter-spacing:-.025em;margin-bottom:16px;font-size:1.875rem}.projects-intro .page-kicker{color:#dc2626;max-width:42rem;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1.125rem;font-weight:400;line-height:1.6}.projects-intro p{color:#475569;max-width:48rem;margin:8px 0 0;font-size:.875rem;line-height:1.625}.projects-intro .page-kicker+p{margin-top:16px}.project-areas{grid-template-columns:1fr;gap:14px;margin:24px 0 0;padding:0;list-style:none;display:grid}.project-areas li{text-align:center;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;min-height:148px;padding:14px 16px;display:flex;position:relative}.project-areas li:hover{background:#f8fafc80;border-color:#cbd5e1}.project-areas strong{letter-spacing:-.025em;font-size:1rem;font-weight:700;line-height:1.25}.project-areas div{color:#64748b;gap:4px;margin-top:10px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;line-height:1.4;display:grid}.area-mark{color:#cbd5e1;width:12px;height:12px;position:absolute}.area-mark circle:first-child{fill:none;stroke:currentColor;stroke-width:1.2px}.area-mark circle:last-child{fill:currentColor}.area-mark.tl{top:10px;left:10px}.area-mark.tr{top:10px;right:10px}.area-mark.bl{bottom:10px;left:10px}.area-mark.br{bottom:10px;right:10px}@media (width>=640px){.project-areas{grid-template-columns:1fr 1fr;gap:16px;margin-top:32px}.project-areas li{padding:24px 16px}.project-areas strong{font-size:1.125rem}}.projects h2{margin-bottom:24px}.projects ul{border-top:1px solid var(--line);border-left:1px solid var(--line);grid-template-columns:1fr;gap:0;margin:0;padding:0;list-style:none;display:grid}.projects li{border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff;flex-direction:column;gap:12px;padding:20px 18px 18px;display:flex;position:relative}.projects li:hover{background:#f8fafc}.projects h3{letter-spacing:-.02em;margin:0;font-size:1rem;font-weight:700;line-height:1.35;transition:color .2s}.projects li:hover h3{color:var(--accent)}.projects li p{color:#475569;max-width:none;margin:0;font-size:.875rem;line-height:1.65}.project-tags{flex-wrap:wrap;gap:6px;display:flex}.project-tags span{color:#be123c;background:#fff1f2;border:1px solid #fecdd3;border-radius:4px;padding:2px 8px;font-size:.75rem;font-weight:500;line-height:1.35}.project-tags .pink{color:#be185d;background:#fdf2f8;border-color:#fbcfe8}.project-tags .violet{color:#7e22ce;background:#faf5ff;border-color:#e9d5ff}.project-tags .cyan{color:#0e7490;background:#ecfeff;border-color:#a5f3fc}.project-cross{color:#e2e8f0;z-index:1;background:#fff;width:12px;height:12px;position:absolute}.projects li:hover .project-cross{background:#f8fafc}.project-cross path{fill:none;stroke:currentColor;stroke-width:1.5px}.project-cross.tl{top:0;left:0;transform:translate(-50%,-50%)}.project-cross.tr{top:0;right:0;transform:translate(50%,-50%)}.project-cross.bl{bottom:0;left:0;transform:translate(-50%,50%)}.project-cross.br{bottom:0;right:0;transform:translate(50%,50%)}.projects .projects-github{color:var(--muted);letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:8px;margin-top:auto;font-size:.72rem;font-weight:700;text-decoration:none;display:inline-flex}.projects .projects-github:hover{color:var(--accent)}.projects .projects-github svg{fill:currentColor;width:14px;height:14px}.projects .projects-github svg.line-icon{fill:none;stroke:currentColor;stroke-width:1.8px}.projects .projects-note{max-width:none;color:var(--muted);text-align:center;margin:22px 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem}.projects .projects-note a{color:var(--ink);font-weight:700;text-decoration:none}.projects .projects-note a:hover{color:var(--accent)}.portfolio-footer{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:10px 18px;padding:18px 4px 0;font-size:.88rem;display:flex}.portfolio-footer p{margin:0}.portfolio-footer a{color:var(--muted)}@media (width>=720px){.portfolio{padding-inline:24px}.hero{grid-template-columns:4fr 8fr}.portfolio-nav{grid-template-columns:4fr 8fr;display:grid}.portfolio-nav:before{content:""}.portfolio-tabs{gap:22px;padding:0 40px}.hero-portrait{border-bottom:0;border-right:1px solid var(--line);min-height:280px;padding:48px 40px}.hero-portrait img{width:128px;height:128px}.hero-portrait:before,.hero-portrait:after{content:"";border:1px solid var(--mark);background:var(--paper);width:7px;height:7px;box-shadow:0 0 0 2px var(--paper);z-index:2;border-radius:50%;position:absolute;right:-4px}.hero-portrait:before{top:-4px}.hero-portrait:after{bottom:-4px}.hero-copy{padding:36px 40px}.band,.split-main,.split aside{padding:32px 40px}.resume-head{align-items:start;padding:40px}.resume-download{grid-column:auto;position:absolute;top:40px;right:40px}.split{grid-template-columns:8fr 4fr}.split aside{border-left:1px solid var(--line)}.projects ul,.expertise{grid-template-columns:1fr 1fr}.projects li:last-child:nth-child(odd){grid-column:1/-1}.projects-intro h1{font-size:2.25rem}}@media (width>=1024px){.project-areas{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (prefers-reduced-motion:reduce){.circuit-lines,.caret{animation:none}}
