:root{color-scheme:dark;--background:#111820;--text:#edf1f7;--muted:#a8b4c4;--accent:#8bb6ff;--border:#303d4b;--portrait-background:#1b2735;--portrait-text:#9aaec8;--switch-background:#326aca;--header-height:97px;--cursor-glow-core:rgb(92 190 255 / 20%);--cursor-glow-edge:rgb(77 151 255 / 7%)}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-height) + 16px)}[hidden]{display:none!important}body{isolation:isolate;margin:0;background:var(--background);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;overflow-x:hidden}.scroll-progress{position:fixed;inset:0 0 auto;height:3px;z-index:40;background:var(--accent);transform:scaleX(0);transform-origin:left center;pointer-events:none}.back-to-top{position:fixed;right:max(16px,env(safe-area-inset-right));bottom:max(16px,env(safe-area-inset-bottom));z-index:21;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:10px;border:1px solid var(--border);border-radius:50%;background:var(--background);color:var(--accent);box-shadow:0 3px 12px rgb(0 0 0 / 8%);cursor:pointer;visibility:hidden;opacity:0;transform:translateY(8px);pointer-events:none;transition:opacity 180ms,transform 180ms,visibility 0s linear 180ms}.back-to-top.is-visible{visibility:visible;opacity:1;transform:translateY(0);pointer-events:auto;transition-delay:0s}.back-to-top svg{width:22px;height:22px}.back-to-top:focus-visible{border-color:var(--accent)}@media (hover:hover) and (pointer:fine){.back-to-top:hover{border-color:var(--accent);background:var(--portrait-background)}}@media (prefers-reduced-motion:reduce){.back-to-top{transform:none;transition:none}.page-atmosphere .meteor{display:none;animation:none}}@media print{.back-to-top,.scroll-progress{display:none!important}}.cursor-glow{display:none;position:fixed;inset:0;z-index:25;overflow:hidden;contain:strict;pointer-events:none;opacity:0;transition:opacity 180ms}.cursor-glow::before{content:"";position:absolute;top:0;left:0;width:104px;height:104px;border-radius:50%;background:radial-gradient(circle,var(--cursor-glow-core),var(--cursor-glow-edge) 45%,transparent 70%);transform:var(--cursor-transform,translate3d(-200px,-200px,0));opacity:.75;transition:opacity 180ms;pointer-events:none}.cursor-glow.is-hovering::before,.cursor-glow.is-visible{opacity:1}@media (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){.cursor-glow{display:block}[data-magnetic]{translate:var(--magnetic-offset,0px 0px)}}@media (prefers-reduced-motion:reduce),print{.cursor-glow{display:none;transition:none}.cursor-glow::before{transition:none}}.page-atmosphere{display:block;position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;background:radial-gradient(circle at 8% 24%,rgb(177 207 245 / 35%) .85px,transparent 1.5px),radial-gradient(circle at 23% 12%,rgb(177 207 245 / 25%) .6px,transparent 1.25px),radial-gradient(circle at 46% 34%,rgb(177 207 245 / 30%) .75px,transparent 1.4px),radial-gradient(circle at 68% 16%,rgb(177 207 245 / 38%) 1px,transparent 1.65px),radial-gradient(circle at 91% 39%,rgb(177 207 245 / 32%) .8px,transparent 1.45px),radial-gradient(circle at 14% 76%,rgb(177 207 245 / 24%) .65px,transparent 1.3px),radial-gradient(circle at 78% 69%,rgb(177 207 245 / 30%) .75px,transparent 1.4px),radial-gradient(circle at 94% 89%,rgb(177 207 245 / 26%) .65px,transparent 1.3px),radial-gradient(circle at 5% 51%,rgb(177 207 245 / 27%) .65px,transparent 1.3px),radial-gradient(circle at 33% 8%,rgb(177 207 245 / 31%) .8px,transparent 1.45px),radial-gradient(circle at 57% 22%,rgb(177 207 245 / 24%) .65px,transparent 1.3px),radial-gradient(circle at 86% 10%,rgb(177 207 245 / 34%) .9px,transparent 1.55px),radial-gradient(circle at 18% 43%,rgb(177 207 245 / 25%) .6px,transparent 1.25px),radial-gradient(circle at 39% 56%,rgb(177 207 245 / 29%) .8px,transparent 1.45px),radial-gradient(circle at 62% 47%,rgb(177 207 245 / 26%) .65px,transparent 1.3px),radial-gradient(circle at 97% 61%,rgb(177 207 245 / 31%) .7px,transparent 1.35px),radial-gradient(circle at 7% 91%,rgb(177 207 245 / 28%) .8px,transparent 1.45px),radial-gradient(circle at 28% 86%,rgb(177 207 245 / 23%) .65px,transparent 1.3px),radial-gradient(circle at 49% 74%,rgb(177 207 245 / 32%) .85px,transparent 1.5px),radial-gradient(circle at 71% 91%,rgb(177 207 245 / 25%) .6px,transparent 1.25px),radial-gradient(circle at 88% 55%,rgb(177 207 245 / 27%) .75px,transparent 1.4px),radial-gradient(circle at 35% 31%,rgb(177 207 245 / 25%) .65px,transparent 1.3px),radial-gradient(circle at 55% 94%,rgb(177 207 245 / 33%) .9px,transparent 1.55px),radial-gradient(circle at 81% 29%,rgb(177 207 245 / 24%) .6px,transparent 1.25px),radial-gradient(circle at 11% 9%,rgb(177 207 245 / 28%) .75px,transparent 1.4px),radial-gradient(circle at 27% 63%,rgb(177 207 245 / 25%) .65px,transparent 1.3px),radial-gradient(circle at 53% 51%,rgb(177 207 245 / 30%) .8px,transparent 1.45px),radial-gradient(circle at 73% 39%,rgb(177 207 245 / 24%) .6px,transparent 1.25px),radial-gradient(circle at 43% 92%,rgb(177 207 245 / 27%) .7px,transparent 1.35px),radial-gradient(circle at 96% 18%,rgb(177 207 245 / 31%) .8px,transparent 1.45px),radial-gradient(circle at 61% 81%,rgb(177 207 245 / 25%) .65px,transparent 1.3px),radial-gradient(circle at 3% 66%,rgb(177 207 245 / 28%) .75px,transparent 1.4px),radial-gradient(ellipse at 78% 14%,rgb(54 117 224 / 6%),transparent 55%),radial-gradient(ellipse at 8% 84%,rgb(54 117 224 / 4%),transparent 48%)}.meteor{display:none;position:absolute;top:var(--start-y);left:var(--start-x);width:var(--tail);height:var(--thickness,1.5px);border-radius:50%;background:linear-gradient(90deg,#f0f8ff,var(--tint,#b5d5ff) 7%,rgb(139 182 255 / 55%) 35%,transparent);box-shadow:0 0 4px rgb(139 182 255 / 22%);opacity:0;transform:rotate(-35deg);transform-origin:left center;pointer-events:none}.meteor:first-child{--start-x:68%;--start-y:15%;--distance:clamp(240px, 38.8889vw, 560px);--tail:170px;--cycle:13.4s;--offset:-0.8s;--peak:0.95}.meteor:nth-child(2){--start-x:98%;--start-y:62%;--distance:clamp(240px, 31.25vw, 450px);--tail:125px;--cycle:14.2s;--offset:-1.7s;--peak:0.82}.meteor:nth-child(3){--start-x:82%;--start-y:34%;--distance:clamp(240px, 43.0556vw, 620px);--tail:200px;--cycle:12.8s;--offset:-2.6s;--peak:0.9;--tint:#a5eeff}.meteor:nth-child(4){--start-x:46%;--start-y:27%;--distance:clamp(240px, 26.3889vw, 380px);--tail:110px;--cycle:15s;--offset:-3.5s;--peak:0.75;--thickness:1px}.meteor:nth-child(5){--start-x:52%;--start-y:6%;--distance:clamp(240px, 34.7222vw, 500px);--tail:150px;--cycle:13.8s;--offset:-4.4s;--peak:0.88}.meteor:nth-child(6){--start-x:100%;--start-y:43%;--distance:clamp(240px, 25vw, 360px);--tail:105px;--cycle:14.6s;--offset:-5.3s;--peak:0.8;--tint:#a5eeff}.meteor:nth-child(7){--start-x:74%;--start-y:74%;--distance:clamp(240px, 40.2778vw, 580px);--tail:185px;--cycle:12.4s;--offset:-6.2s;--peak:0.92}.meteor:nth-child(8){--start-x:64%;--start-y:65%;--distance:clamp(240px, 36.1111vw, 520px);--tail:155px;--cycle:14.8s;--offset:-7.1s;--peak:0.85;--thickness:1px}.meteor:nth-child(9){--start-x:38%;--start-y:48%;--distance:clamp(240px, 22.9167vw, 330px);--tail:95px;--cycle:13.2s;--offset:-8s;--peak:0.78;--tint:#a5eeff}.meteor:nth-child(10){--start-x:90%;--start-y:4%;--distance:clamp(240px, 45.1389vw, 650px);--tail:210px;--cycle:14.4s;--offset:-8.9s;--peak:0.94}.meteor:nth-child(11){--start-x:86%;--start-y:42%;--distance:clamp(240px, 31.9444vw, 460px);--tail:145px;--cycle:12.6s;--offset:-9.8s;--peak:0.88}.meteor:nth-child(12){--start-x:62%;--start-y:8%;--distance:clamp(240px, 41.6667vw, 600px);--tail:190px;--cycle:14s;--offset:-10.7s;--peak:0.86;--tint:#a5eeff;--thickness:1px}.meteor:nth-child(13){--start-x:80%;--start-y:8%;--distance:clamp(240px, 40.2778vw, 580px);--tail:175px;--cycle:13s;--offset:-11.6s;--peak:0.92}.meteor:nth-child(14){--start-x:94%;--start-y:26%;--distance:clamp(240px, 37.5vw, 540px);--tail:160px;--cycle:14.7s;--offset:-12.5s;--peak:0.82}.meteor:nth-child(15){--start-x:44%;--start-y:50%;--distance:clamp(240px, 27.7778vw, 400px);--tail:120px;--cycle:13.6s;--offset:-13.4s;--peak:0.9;--tint:#a5eeff}@keyframes sky-meteor{0%{opacity:0;transform:translate3d(0,0,0) rotate(-35deg)}12%,2%{opacity:var(--peak)}100%,20%{opacity:0;transform:translate3d(calc(-1 * var(--distance)),calc(.7 * var(--distance)),0) rotate(-35deg)}}@media (prefers-reduced-motion:no-preference){.meteor{display:block;animation:sky-meteor var(--cycle) linear var(--offset) infinite}}@media (max-width:640px){.page-atmosphere .meteor:nth-child(n+7){display:none;animation:none}.page-atmosphere .meteor{--distance:clamp(180px, 65vw, 300px);width:min(var(--tail),100px);height:1px}.page-atmosphere{background:radial-gradient(circle at 8% 24%,rgb(177 207 245 / 28%) .85px,transparent 1.5px),radial-gradient(circle at 23% 12%,rgb(177 207 245 / 20%) .6px,transparent 1.25px),radial-gradient(circle at 46% 34%,rgb(177 207 245 / 24%) .75px,transparent 1.4px),radial-gradient(circle at 68% 16%,rgb(177 207 245 / 30%) 1px,transparent 1.65px),radial-gradient(circle at 91% 39%,rgb(177 207 245 / 26%) .8px,transparent 1.45px),radial-gradient(circle at 14% 76%,rgb(177 207 245 / 19%) .65px,transparent 1.3px),radial-gradient(circle at 78% 69%,rgb(177 207 245 / 24%) .75px,transparent 1.4px),radial-gradient(circle at 94% 89%,rgb(177 207 245 / 21%) .65px,transparent 1.3px),radial-gradient(circle at 5% 51%,rgb(177 207 245 / 22%) .65px,transparent 1.3px),radial-gradient(circle at 33% 8%,rgb(177 207 245 / 25%) .8px,transparent 1.45px),radial-gradient(circle at 57% 22%,rgb(177 207 245 / 19%) .65px,transparent 1.3px),radial-gradient(circle at 86% 10%,rgb(177 207 245 / 27%) .9px,transparent 1.55px),radial-gradient(ellipse at 78% 14%,rgb(54 117 224 / 6%),transparent 55%),radial-gradient(ellipse at 8% 84%,rgb(54 117 224 / 4%),transparent 48%)}}@media print{.page-atmosphere{display:none!important}}a{color:inherit}button{font:inherit}a,button{-webkit-tap-highlight-color:transparent}:focus-visible{outline:3px solid var(--accent);outline-offset:5px}.container{width:min(1120px,calc(100% - 96px));margin-inline:auto}.skip-link{position:absolute;top:12px;left:16px;z-index:30;padding:12px 18px;background:var(--background);border:1px solid var(--border);border-radius:4px;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}.site-header{position:fixed;inset:0 0 auto;z-index:20;background:var(--background);border-bottom:1px solid var(--border);transition:background-color 160ms,box-shadow 160ms}.site-header.is-scrolled{background:color-mix(in srgb,var(--background) 88%,var(--portrait-background));box-shadow:0 2px 12px rgb(0 0 0 / 6%)}.js main{padding-top:var(--header-height)}.navigation{--navigation-padding:clamp(16px, 3vw, 48px);position:relative;width:100%;min-height:96px;padding-inline:var(--navigation-padding);display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center}.wordmark{grid-column:1;flex-shrink:0;text-decoration:none;font-size:22px;font-weight:700;letter-spacing:-.7px}.wordmark span{color:var(--accent)}.menu-toggle{display:none;align-items:center;justify-content:center;flex-shrink:0;width:44px;height:44px;padding:10px;border:1px solid var(--border);border-radius:6px;background:0 0;color:var(--text);cursor:pointer;transition:background-color 160ms,color 160ms}.menu-toggle:hover{background:var(--portrait-background);color:var(--accent)}.menu-icon{position:relative;width:20px;height:16px}.menu-icon span{position:absolute;left:0;width:20px;height:2px;border-radius:1px;background:currentColor;transition:transform 160ms,opacity 160ms}.menu-icon span:first-child{top:0}.menu-icon span:nth-child(2){top:7px}.menu-icon span:nth-child(3){top:14px}.menu-toggle[aria-expanded=true] .menu-icon span:first-child{transform:translateY(7px) rotate(45deg)}.menu-toggle[aria-expanded=true] .menu-icon span:nth-child(2){opacity:0}.menu-toggle[aria-expanded=true] .menu-icon span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.navigation-links{grid-column:2;display:flex;flex-wrap:nowrap;min-width:0;gap:clamp(18px,2vw,28px);margin:0;padding:0;list-style:none}.navigation-links a{position:relative;display:inline-flex;align-items:center;min-height:44px;color:var(--muted);font-size:15px;font-weight:500;text-decoration:none;transition:color 160ms,background-color 160ms}.navigation-links a::after{content:"";position:absolute;left:0;right:0;bottom:4px;height:2px;background:var(--accent);opacity:0;transform:scaleX(.6);transition:transform 160ms}.navigation-links a:focus-visible,.navigation-links a:hover,.navigation-links a[aria-current=location]{color:var(--accent)}.navigation-links a[aria-current=location]::after{opacity:1;transform:scaleX(1)}.navigation-contact-item{position:absolute;top:50%;right:var(--navigation-padding);margin:0;transform:translateY(-50%)}.navigation-links .navigation-contact{justify-content:center;padding-inline:20px;border:1px solid var(--accent);border-radius:999px;color:var(--accent);white-space:nowrap;font-size:14px}.navigation-contact::after{display:none}.navigation-links .navigation-contact:focus-visible,.navigation-links .navigation-contact:hover{background:var(--portrait-background)}.hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,370px);align-items:center;gap:clamp(40px,6vw,80px);padding-block:56px}.hero-content{min-width:0}.hero h1{margin:0 0 16px;color:var(--muted);font-size:22px;font-weight:500;line-height:1.4}.hero-name{display:block;margin-top:6px;color:var(--text);font-size:clamp(40px, 4.8vw, 56px);font-weight:700;line-height:1.1;letter-spacing:-1.8px;text-wrap:balance}.hero-role{margin:0 0 18px;color:var(--accent);font-size:clamp(18px, 2vw, 22px);font-weight:500;line-height:1.5}.hero-description{max-width:55ch;margin:0;color:var(--muted);font-size:17px;line-height:1.75}.social-links{display:flex;flex-wrap:wrap;gap:8px 24px;margin-top:24px}.social-links a{display:inline-flex;align-items:center;gap:10px;min-height:44px;font-size:14px;font-weight:600;text-decoration:none}.social-links svg{width:18px;height:18px}.link-arrow{color:var(--muted);font-size:17px}.social-links a:hover{color:var(--accent);text-decoration:underline;text-underline-offset:5px}.resume-download{display:inline-flex;align-items:center;justify-content:center;max-width:100%;min-height:44px;margin-top:16px;padding:12px 20px;border:1px solid var(--accent);border-radius:5px;background:var(--accent);color:var(--background);font-size:14px;font-weight:600;line-height:1.5;text-align:center;text-decoration:none;transition:background-color 160ms,color 160ms,transform 160ms}.resume-download:hover{background:0 0;color:var(--accent)}.portrait-frame{position:relative;width:100%;aspect-ratio:1;overflow:hidden;perspective:1000px;border:1px solid var(--border);border-radius:16px;background:var(--portrait-background);box-shadow:0 8px 24px rgb(0 0 0 / 6%)}.portrait-card{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .8s cubic-bezier(.2, .65, .3, 1)}.portrait-frame.is-flipped .portrait-card{transform:rotateY(180deg)}.portrait-face{position:absolute;inset:0;overflow:hidden;backface-visibility:hidden}.portrait-front{background:var(--portrait-background)}.portrait-back{transform:rotateY(180deg)}.portrait-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;height:100%;color:var(--portrait-text)}.portrait-initials{font-size:clamp(64px, 8vw, 96px);font-weight:300;letter-spacing:-5px;line-height:1}.placeholder-label{font-size:12px;letter-spacing:2px;text-transform:uppercase}.portrait{display:block;width:100%;height:100%;object-fit:cover;object-position:center}.js .portrait:not(.is-loaded){visibility:hidden}.portrait-flip-toggle{position:absolute;right:12px;bottom:12px;z-index:3;min-height:32px;padding:6px 10px;border:1px solid;border-radius:999px;background:rgb(17 24 32 / 78%);color:var(--text);font-size:11px;font-weight:600;cursor:pointer;opacity:.86;transition:background-color 160ms,color 160ms,opacity 160ms}.portrait-flip-toggle:focus-visible,.portrait-flip-toggle:hover{background:var(--accent);color:var(--background);opacity:1}.terminal-window{display:flex;flex-direction:column;height:100%;background:#10161f;color:#d7e2ef}.terminal-bar{display:flex;align-items:center;gap:6px;min-height:42px;padding-inline:14px;border-bottom:1px solid;background:#192330}.terminal-dot{width:9px;height:9px;border-radius:50%}.terminal-dot--red{background:#ff6b6b}.terminal-dot--yellow{background:#ffd166}.terminal-dot--green{background:#70d6a0}.terminal-title{margin-left:6px;color:#8d9bad;font-size:10px}.terminal-body{padding:22px 20px}.terminal-body p{margin:0 0 7px}.terminal-line{transition:opacity 180ms,transform 180ms}.terminal-text{display:inline-block;max-width:100%}.terminal-ready .terminal-line{opacity:0;transform:translateY(4px)}.terminal-ready .terminal-line.is-typing{opacity:1;transform:none}.terminal-ready .terminal-line.is-typing .terminal-text{overflow:hidden;white-space:nowrap;animation:650ms steps(30,end) both terminal-type}.terminal-prompt{color:#70d6a0}.terminal-output{color:#8bb6ff}.terminal-json{color:#d7b8ff}.terminal-cursor{display:inline-block;width:7px;height:1.1em;margin-left:4px;vertical-align:-.2em;background:#8bb6ff;animation:1s steps(2,start) infinite terminal-blink}@keyframes terminal-type{from{max-width:0}to{max-width:100%}}@keyframes terminal-blink{50%{opacity:0}}.content-section{display:grid;grid-template-columns:240px minmax(0,1fr);gap:48px;padding-block:72px;border-top:1px solid var(--border);scroll-margin-top:0}.section-title{margin:0;font-size:28px;font-weight:600;line-height:1.3;letter-spacing:-.7px}.about-content{max-width:68ch;min-width:0;color:var(--muted);font-size:17px;line-height:1.85}.about-content p{margin:0}.about-content p+p{margin-top:20px}#skills{grid-template-columns:minmax(0,1fr)}.skills-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;min-width:0}.skill-group{min-width:0;padding:24px;border:1px solid var(--project-edge);border-radius:12px;background:var(--portrait-background)}.skill-group h3{margin:0 0 16px;font-size:20px;font-weight:700;line-height:1.5;letter-spacing:-.3px}.skill-list{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.skill-list li{max-width:100%;padding:6px 12px;border:1px solid var(--border);border-radius:5px;color:var(--muted);font-size:14px;line-height:1.5;overflow-wrap:anywhere}#skills .skill-list{gap:10px}#skills .skill-list li{padding:7px 12px;border:1px solid var(--project-edge);border-radius:6px;background:var(--project-tag);color:var(--text);font-size:15px;transition:background-color 260ms}#projects,#skills{--project-canvas:#f5f8fd;--project-glow:rgb(62 122 224 / 9%);--project-streak:rgb(72 115 193 / 10%);--project-card:#ffffff;--project-card-hover:#f8fbff;--project-featured:#f3f7fd;--project-tag:#edf3fb;--project-edge:#d7e2f0;--project-edge-active:#8aaad3;--project-shadow:0 8px 24px rgb(25 49 83 / 6%),inset 0 1px 0 rgb(255 255 255 / 45%);--project-shadow-active:0 14px 32px rgb(25 49 83 / 11%),inset 0 1px 0 rgb(255 255 255 / 45%);position:relative;grid-template-columns:minmax(0,1fr);gap:28px}:root[data-theme=dark] #projects,:root[data-theme=dark] #skills{--project-canvas:#0b1526;--project-glow:rgb(54 117 224 / 18%);--project-streak:rgb(105 159 244 / 12%);--project-card:#111f33;--project-card-hover:#15283f;--project-featured:#13263d;--project-tag:#1a304b;--project-edge:#2c405a;--project-edge-active:#587ca8;--project-shadow:0 8px 24px rgb(0 0 0 / 16%),inset 0 1px 0 rgb(186 213 255 / 4%);--project-shadow-active:0 14px 32px rgb(0 0 0 / 24%),inset 0 1px 0 rgb(186 213 255 / 6%)}#projects::after,#projects::before,#skills::after,#skills::before{content:"";position:absolute;inset:16px -24px;z-index:-2;border-radius:24px;pointer-events:none}#projects::before,#skills::before{background:radial-gradient(ellipse at 8% 10%,var(--project-glow),transparent 55%),radial-gradient(ellipse at 95% 80%,var(--project-glow),transparent 50%),var(--project-canvas)}#projects::after,#skills::after{background:linear-gradient(128deg,transparent 0 16%,var(--project-streak) 16.05% 16.12%,transparent 16.2% 53%,var(--project-streak) 53.05% 53.12%,transparent 53.2% 81%,var(--project-streak) 81.05% 81.12%,transparent 81.2%);opacity:.7}.projects-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;min-width:0}.project-year{margin:0;color:var(--muted);font-size:14px;line-height:1.5}.project-card{min-width:0;padding:28px;border:1px solid var(--border);border-radius:8px}.project-card--featured,.project-card--wide{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);column-gap:32px}.project-card--featured{background:var(--portrait-background)}.project-card--featured>.entry-header,.project-card--featured>.project-actions,.project-card--wide>.entry-header,.project-card--wide>.project-actions{grid-column:1/-1}.project-card--featured .entry-header h3{font-size:24px}.project-card--featured>.skill-list{align-self:start}.project-type{margin:0;color:var(--muted);font-size:14px;line-height:1.5}.project-features{margin:20px 0 0;padding-left:20px;color:var(--muted);font-size:14px;line-height:1.75}.project-features li+li{margin-top:6px}.project-actions{display:flex;flex-wrap:wrap;gap:8px 24px;margin-top:20px}.project-actions:empty{display:none}.project-actions a{display:inline-flex;align-items:center;gap:8px;min-height:44px;color:var(--accent);font-size:14px;font-weight:600;text-decoration:underline;text-underline-offset:4px}.project-actions a:hover{text-decoration-thickness:2px}.entry-header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px 20px}.entry-header h3{margin:0;font-size:20px;font-weight:600;line-height:1.4;letter-spacing:-.3px}.project-status{margin:0;padding:4px 10px;border:1px solid var(--border);border-radius:5px;color:var(--accent);font-size:12px;font-weight:500;line-height:1.5}.entry-description{max-width:68ch;margin:20px 0 0;color:var(--muted);font-size:16px;line-height:1.85}.project-card .skill-list{margin-top:24px}#projects .project-card,#skills .skill-group{border-color:var(--project-edge);border-radius:14px;background:linear-gradient(145deg,rgb(255 255 255 / 2%),transparent 60%),var(--project-card);box-shadow:var(--project-shadow);transition:transform 260ms,border-color 260ms,background-color 260ms,box-shadow 260ms}#projects .project-card--featured{background-color:var(--project-featured)}#projects .entry-header h3{font-size:22px;font-weight:700;letter-spacing:-.5px}#projects .project-card--featured .entry-header h3{font-size:clamp(22px, 2.2vw, 26px)}#projects .skill-list li{padding:6px 11px;border-color:var(--project-edge);border-radius:6px;background:var(--project-tag);color:var(--text)}#projects .project-card:focus-within,#skills .skill-group:focus-within{border-color:var(--project-edge-active);box-shadow:var(--project-shadow-active)}#projects .project-actions a{padding-inline:8px;border-radius:4px;transition:background-color 260ms}#projects .project-actions a span{transition:transform 260ms}#projects .project-actions a:focus-visible{background-color:var(--project-tag)}.experience-list{min-width:0}.experience-entry+.experience-entry{margin-top:32px;padding-top:32px;border-top:1px solid var(--border)}.experience-dates{margin:0;color:var(--muted);font-size:14px;line-height:1.7}.education-institution,.experience-company{margin:12px 0 0;font-size:15px;font-weight:500;line-height:1.6}.education-university,.experience-location{margin:4px 0 0;color:var(--muted);font-size:14px;line-height:1.7}.contact-content,.education-entry{min-width:0}.contact-content{max-width:68ch}.contact-content>.entry-description{margin-top:0}.contact-details{display:grid;gap:20px;margin:24px 0 0}.contact-details>div{display:grid;grid-template-columns:minmax(0,1fr);gap:4px}.contact-details dt{color:var(--muted);font-size:13px;line-height:1.6}.contact-details dd{min-width:0;margin:0;font-size:15px;line-height:1.6}.contact-details a{display:inline-block;max-width:100%;min-height:44px;padding-block:10px;color:var(--accent);text-underline-offset:4px;overflow-wrap:anywhere}.contact-email{font-size:clamp(18px, 2vw, 22px);font-weight:600;letter-spacing:-.3px}.contact-socials{display:flex;flex-wrap:wrap;gap:8px 24px}.contact-socials a{display:inline-flex;align-items:center;gap:8px;color:var(--text);font-size:14px;font-weight:600}.contact-socials svg{width:18px;height:18px;flex-shrink:0}.contact-socials a:hover{color:var(--accent)}.contact-details>.contact-location{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;padding-top:20px;border-top:1px solid var(--border)}.contact-location dd{color:var(--muted);font-size:14px}.site-footer{padding-block:32px;border-top:1px solid var(--border);color:var(--muted);font-size:14px;line-height:1.6}.site-footer p{margin-block:0}@media (max-width:1120px){:root{--header-height:81px}.navigation{display:flex;flex-wrap:wrap;gap:0 12px;padding-block:16px}.navigation-links{order:3;flex-basis:100%;flex-wrap:wrap;margin:8px 0 0}.navigation-contact-item{position:static;margin-left:0;transform:none}.theme-toggle{margin-left:auto}:root:not(.js) .site-header{position:static}:root:not(.js){scroll-padding-top:16px}.js .navigation{min-height:80px;flex-wrap:nowrap;gap:12px;padding-block:0}.js .menu-toggle{display:inline-flex;margin-left:auto}.js .theme-toggle{margin-left:0}.js .navigation-links{position:absolute;top:100%;left:var(--navigation-padding);right:var(--navigation-padding);display:grid;gap:4px;max-height:calc(100dvh - var(--header-height) - 16px);margin:0;padding:12px;overflow-y:auto;overscroll-behavior:contain;border:1px solid var(--border);border-radius:0 0 10px 10px;background:var(--background);box-shadow:0 8px 20px rgb(0 0 0 / 8%);visibility:hidden;opacity:0;transform:translateY(-6px);pointer-events:none;transition:opacity 160ms,transform 160ms,visibility 0s linear 160ms}.js .menu-open .navigation-links{visibility:visible;opacity:1;transform:translateY(0);pointer-events:auto;transition-delay:0s}.js .navigation-links a{width:100%;min-height:48px;padding:10px 12px;border-radius:4px}.js .navigation-links a::after{left:12px;right:12px}.js .navigation-links a:focus-visible,.js .navigation-links a:hover{background:var(--portrait-background)}.js .navigation-contact-item{margin-top:8px}.js .navigation-links .navigation-contact{padding-inline:20px;border-radius:999px}}@media (max-width:800px){.container{width:calc(100% - 48px)}.hero{gap:32px;grid-template-columns:minmax(0,1fr) minmax(248px,320px);padding-block:44px}.hero-description{font-size:16px}.content-section{grid-template-columns:minmax(0,1fr);gap:28px}.about-content{font-size:16px}}@media (max-width:640px){.navigation{min-height:80px;padding-top:18px;padding-bottom:12px}.wordmark{font-size:19px}.theme-toggle{gap:8px;font-size:12px}.hero{grid-template-columns:minmax(0,1fr);gap:32px;padding-block:36px 40px}.hero h1{font-size:20px}.hero-name{font-size:clamp(32px, 8vw, 40px);letter-spacing:-1px}.hero-role{margin-bottom:16px}.portrait-frame{width:min(100%,300px);max-width:300px;justify-self:center}.content-section{padding-block:48px;gap:24px}.section-title{font-size:26px}#skills{gap:24px}.skills-grid{grid-template-columns:minmax(0,1fr);gap:16px}.skill-group{padding:20px}.navigation-links{column-gap:20px}.project-card{padding:20px}#projects{gap:24px}#projects::after,#projects::before,#skills::after,#skills::before{inset:16px -8px;border-radius:18px}#projects::after,#skills::after{opacity:.4}.projects-grid{grid-template-columns:minmax(0,1fr);gap:16px}.project-card--featured,.project-card--wide{grid-template-columns:minmax(0,1fr)}.project-card--featured .entry-header h3{font-size:22px}.education-entry .entry-header,.experience-entry .entry-header{flex-direction:column;align-items:flex-start}.contact-details{gap:16px}}@media (max-width:360px){.container{width:calc(100% - 32px)}.hero-name{font-size:clamp(30px, 7vw, 36px)}.hero-description{font-size:15px}.navigation{padding-inline:12px}}@media (max-width:480px){.navigation .theme-toggle{display:none}}@media (hover:hover){.resume-download:hover{transform:translateY(-1px)}}@media (hover:hover) and (pointer:fine){#projects .project-card:hover,#skills .skill-group:hover{transform:translateY(-4px);border-color:var(--project-edge-active);background-color:var(--project-card-hover);box-shadow:var(--project-shadow-active)}#skills .skill-list li:hover{background-color:var(--project-card-hover)}#projects .project-actions a:hover{background-color:var(--project-tag)}#projects .project-actions a:hover span{transform:translate(2px,-2px)}}.reveal-enter{animation:.8s cubic-bezier(.2,.65,.3,1) both portfolio-enter;animation-delay:var(--entrance-delay, 0ms)}.project-card.reveal-enter,.skill-group.reveal-enter{animation-duration:750ms}@keyframes portfolio-enter{from{opacity:0;translate:0 24px}to{opacity:1;translate:0 0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.js .navigation-links,.menu-icon span,.menu-toggle,.navigation-links a,.navigation-links a::after,.resume-download,.site-header,.theme-toggle,.toggle-thumb{transition:none}.resume-download:hover{transform:none}#projects .project-actions a,#projects .project-actions a span,#projects .project-card,#skills .skill-group,#skills .skill-list li{transition:none}#projects .project-actions a:hover span,#projects .project-card:hover,#skills .skill-group:hover{transform:none}.reveal-enter{animation:none;opacity:1;translate:none}.portrait-card,.portrait-flip-toggle{transition:none}.terminal-cursor{animation:none}.terminal-ready .terminal-line,.terminal-ready .terminal-line.is-typing{opacity:1;transform:none}.terminal-ready .terminal-line.is-typing .terminal-text{animation:none}}