nav{z-index:50;background:color-mix(in srgb, var(--surface) 80%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--outline-variant);width:100%;position:fixed;top:0}.nav-inner{max-width:var(--container-max);padding:0 var(--margin-mobile);justify-content:space-between;align-items:center;height:80px;margin:0 auto;display:flex}@media (width>=768px){.nav-inner{padding:0 var(--margin-desktop)}}.nav-logo{font-family:var(--font-heading);color:var(--primary);font-size:24px;font-weight:700;line-height:1.3}.nav-links-desktop{align-items:center;gap:32px;display:none}@media (width>=768px){.nav-links-desktop{display:flex}}.nav-link{font-family:var(--font-body);color:var(--on-surface-variant);font-size:16px;font-weight:400;transition:color .2s}.nav-link:hover{color:var(--primary)}.nav-actions{align-items:center;gap:16px;display:flex}.nav-resume-btn{font-family:var(--font-body);background:var(--primary);color:var(--on-primary);border-radius:4px;padding:8px 24px;font-size:16px;font-weight:500;transition:opacity .2s,scale .2s;display:none}@media (width>=768px){.nav-resume-btn{display:inline-block}}.nav-resume-btn:hover{opacity:.8}.nav-resume-btn:active{scale:.95}.nav-hamburger{color:var(--on-surface-variant);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:4px;transition:color .2s;display:flex}.nav-hamburger:hover{color:var(--primary)}@media (width>=768px){.nav-hamburger{display:none}}.nav-mobile-menu{padding:16px var(--margin-mobile) 24px;border-top:1px solid var(--outline-variant);background:var(--surface);flex-direction:column;gap:8px;display:flex}@media (width>=768px){.nav-mobile-menu{display:none}}.nav-mobile-link{font-family:var(--font-body);color:var(--on-surface-variant);padding:12px 0;font-size:16px;font-weight:400;transition:color .2s}.nav-mobile-link:hover{color:var(--primary)}.nav-mobile-resume{font-family:var(--font-body);background:var(--primary);color:var(--on-primary);text-align:center;border-radius:4px;margin-top:8px;padding:12px 24px;font-size:16px;font-weight:500;transition:opacity .2s}.nav-mobile-resume:hover{opacity:.8}.hero{min-height:716px;padding:var(--section-gap) 0;flex-direction:column;justify-content:center;display:flex;position:relative}.hero-bg{z-index:-1;background:radial-gradient(ellipse at top right, color-mix(in srgb, var(--primary) 10%, transparent), var(--surface) 60%);opacity:.5;position:absolute;inset:0}.hero-content{max-width:768px}.hero-badge{align-items:center;gap:8px;margin-bottom:24px;display:flex}.hero-badge-line{background:var(--primary);width:32px;height:1px}.hero-badge-text{font-family:var(--font-mono);letter-spacing:.05em;color:var(--primary);text-transform:uppercase;font-size:12px;font-weight:600;line-height:1}.hero-title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--on-surface);margin-bottom:24px;font-size:clamp(2rem,4vw + 1rem,4rem);font-weight:800;line-height:1.1}.hero-actions{flex-wrap:wrap;gap:16px;display:flex}.btn-primary{font-family:var(--font-body);background:var(--primary);color:var(--on-primary);border-radius:4px;align-items:center;gap:8px;padding:12px 32px;font-size:16px;font-weight:500;transition:box-shadow .3s,scale .3s;display:inline-flex}.btn-primary:hover{box-shadow:0 0 12px color-mix(in srgb, var(--primary) 40%, transparent);scale:1.02}.btn-primary:active{scale:.95}.btn-icon{font-size:20px}.btn-ghost{font-family:var(--font-body);color:var(--on-surface);border:1px solid var(--outline-variant);background:0 0;border-radius:4px;align-items:center;gap:8px;padding:12px 32px;font-size:16px;font-weight:500;transition:border-color .3s,color .3s;display:inline-flex}.btn-ghost:hover{border-color:var(--primary);color:var(--primary)}.about-grid{gap:var(--gutter);grid-template-columns:1fr;align-items:center;display:grid}@media (width>=1024px){.about-grid{grid-template-columns:4fr 8fr}}.about-headshot{position:relative}.about-headshot-glow{background:color-mix(in srgb, var(--primary) 20%, transparent);filter:blur(40px);opacity:0;border-radius:8px;transition:opacity .5s;position:absolute;inset:0}.about-headshot:hover .about-headshot-glow{opacity:1}.about-headshot-frame{background:var(--surface-container);border:1px solid var(--outline-variant);border-radius:8px;padding:8px;position:relative}.about-headshot-img{aspect-ratio:4/5;object-fit:cover;filter:grayscale();border-radius:4px;width:100%;transition:filter .5s}.about-headshot:hover .about-headshot-img{filter:grayscale(0%)}.about-terminal{background:var(--surface);border:1px solid var(--outline-variant);border-radius:8px;overflow:hidden}.terminal-header{background:var(--surface-container-high);border-bottom:1px solid var(--outline-variant);align-items:center;padding:12px 16px;display:flex}.terminal-dots{gap:8px;display:flex}.dot{border-radius:50%;width:12px;height:12px}.dot-red{background:var(--error)}.dot-yellow{background:var(--tertiary)}.dot-green{background:var(--primary)}.terminal-title{font-family:var(--font-mono);color:var(--on-surface-variant);opacity:.7;margin:0 auto;font-size:14px;line-height:1.5}.terminal-body{font-family:var(--font-mono);color:var(--on-surface);flex-direction:column;gap:16px;padding:24px;font-size:14px;line-height:1.5;display:flex}.terminal-line{gap:8px;display:flex}.prompt{color:var(--primary)}.string{color:var(--secondary)}.terminal-output{color:var(--on-surface-variant);border-left:2px solid var(--outline-variant);padding-y:8px;margin-left:16px;padding-left:16px}.cursor{background:var(--primary);width:8px;height:16px;animation:1s step-end infinite blink}@keyframes blink{50%{opacity:0}}.skills-grid{grid-template-columns:1fr;gap:48px;display:grid}@media (width>=768px){.skills-grid{grid-template-columns:1fr 1fr}}.skills-subtitle{font-family:var(--font-heading);color:var(--on-surface-variant);margin-bottom:24px;font-size:24px;font-weight:600;line-height:1.3}.skills-tags{flex-wrap:wrap;gap:12px;display:flex}.skill-tag{font-family:var(--font-mono);letter-spacing:.05em;border-radius:4px;padding:8px 16px;font-size:12px;font-weight:600;line-height:1}.skill-tag-primary{background:color-mix(in srgb, var(--primary) 10%, transparent);color:var(--primary);border:1px solid color-mix(in srgb, var(--primary) 20%, transparent)}.skill-tag-secondary{background:color-mix(in srgb, var(--secondary) 10%, transparent);color:var(--secondary);border:1px solid color-mix(in srgb, var(--secondary) 20%, transparent)}.experience-label{align-items:center;gap:8px;margin-bottom:24px;display:flex}.experience-label-line{background:var(--primary);width:32px;height:1px}.experience-label-text{font-family:var(--font-mono);letter-spacing:.05em;color:var(--primary);text-transform:uppercase;font-size:12px;font-weight:600;line-height:1}.experience-timeline{flex-direction:column;gap:48px;padding-left:36px;display:flex;position:relative}.experience-timeline:before{content:"";background:var(--outline-variant);width:2px;position:absolute;top:8px;bottom:8px;left:11px}.experience-entry{position:relative}.experience-dot{background:var(--surface);border:2px solid var(--primary);z-index:1;border-radius:50%;width:24px;height:24px;position:absolute;top:4px;left:-36px}.experience-dot-secondary{border-color:var(--secondary)}.experience-dot-tertiary{border-color:var(--tertiary)}.experience-content{flex-direction:column;display:flex}.experience-header{flex-direction:column;gap:4px;margin-bottom:16px;display:flex}@media (width>=768px){.experience-header{flex-direction:row;justify-content:space-between;align-items:center}}.experience-title{font-family:var(--font-heading);color:var(--on-surface);font-size:clamp(20px,2.5vw,24px);font-weight:600;line-height:1.3}.experience-period{font-family:var(--font-mono);color:var(--primary);font-size:14px;line-height:1.5}.experience-duties{flex-direction:column;gap:8px;margin-bottom:24px;margin-left:16px;list-style:outside;display:flex}.experience-duties li{color:var(--on-surface-variant);font-size:16px;line-height:1.6}.experience-tags{flex-wrap:wrap;gap:8px;display:flex}.experience-tag{font-family:var(--font-mono);letter-spacing:.05em;border-radius:4px;padding:4px 12px;font-size:12px;font-weight:600;line-height:1}.experience-tag-primary{background:color-mix(in srgb, var(--primary) 10%, transparent);color:var(--primary);border:1px solid color-mix(in srgb, var(--primary) 20%, transparent)}.experience-tag-secondary{background:color-mix(in srgb, var(--secondary) 10%, transparent);color:var(--secondary);border:1px solid color-mix(in srgb, var(--secondary) 20%, transparent)}.experience-tag-tertiary{background:color-mix(in srgb, var(--tertiary) 10%, transparent);color:var(--tertiary);border:1px solid color-mix(in srgb, var(--tertiary) 20%, transparent)}.education-label{align-items:center;gap:8px;margin-bottom:24px;display:flex}.education-label-line{background:var(--primary);width:32px;height:1px}.education-label-text{font-family:var(--font-mono);letter-spacing:.05em;color:var(--primary);text-transform:uppercase;font-size:12px;font-weight:600;line-height:1}.education-timeline{flex-direction:column;gap:48px;padding-left:36px;display:flex;position:relative}.education-timeline:before{content:"";background:var(--outline-variant);width:2px;position:absolute;top:8px;bottom:8px;left:11px}.education-entry{position:relative}.education-dot{background:var(--surface);border:2px solid var(--primary);z-index:1;border-radius:50%;width:24px;height:24px;position:absolute;top:4px;left:-36px}.education-dot-secondary{border-color:var(--secondary)}.education-content{flex-direction:column;display:flex}.education-header{flex-direction:column;gap:4px;margin-bottom:16px;display:flex}@media (width>=768px){.education-header{flex-direction:row;justify-content:space-between;align-items:center}}.education-degree{font-family:var(--font-heading);color:var(--on-surface);font-size:clamp(20px,2.5vw,24px);font-weight:600;line-height:1.3}.education-period{font-family:var(--font-mono);color:var(--primary);font-size:14px;line-height:1.5}.education-highlights{flex-direction:column;gap:8px;margin-bottom:24px;margin-left:16px;list-style:outside;display:flex}.education-highlights li{color:var(--on-surface-variant);font-size:16px;line-height:1.6}.certifications-label{align-items:center;gap:8px;margin-bottom:24px;display:flex}.certifications-label-line{background:var(--primary);width:32px;height:1px}.certifications-label-text{font-family:var(--font-mono);letter-spacing:.05em;color:var(--primary);text-transform:uppercase;font-size:12px;font-weight:600;line-height:1}.certifications-list{flex-direction:column;gap:16px;display:flex}.certification-card{background:var(--surface-container);border:1px solid var(--outline-variant);border-radius:8px;align-items:center;gap:20px;padding:24px 32px;transition:border-color .2s;display:flex}.certification-card:hover{border-color:var(--primary)}.certification-name{font-family:var(--font-heading);color:var(--on-surface);font-size:clamp(16px,2vw,20px);font-weight:600;line-height:1.3;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition:text-decoration-color .2s}.certification-card:hover .certification-name{-webkit-text-decoration-color:var(--primary);text-decoration-color:var(--primary)}.certification-icon{background:color-mix(in srgb, var(--primary) 10%, transparent);border:1px solid color-mix(in srgb, var(--primary) 20%, transparent);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:48px;display:flex}.certification-icon .material-symbols-outlined{color:var(--primary);font-size:24px}.certification-info{flex-direction:column;flex:1;gap:4px;display:flex}.certification-meta{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:13px;font-weight:400;line-height:1}.certification-code{font-family:var(--font-mono);letter-spacing:.05em;background:color-mix(in srgb, var(--tertiary) 10%, transparent);color:var(--tertiary);border:1px solid color-mix(in srgb, var(--tertiary) 20%, transparent);border-radius:4px;flex-shrink:0;padding:4px 12px;font-size:12px;font-weight:600;line-height:1}.projects-header{justify-content:space-between;align-items:flex-end;margin-bottom:48px;display:flex}.projects-archive-link{color:var(--primary);align-items:center;gap:4px;font-size:16px;line-height:1.6;transition:opacity .2s;display:none}@media (width>=768px){.projects-archive-link{display:flex}}.projects-archive-link:hover{text-decoration:underline}.projects-archive-icon{font-size:18px}.projects-grid{gap:var(--gutter);grid-template-columns:1fr;display:grid}@media (width>=768px){.projects-grid{grid-template-columns:1fr 1fr}}@media (width>=1024px){.projects-grid{grid-template-columns:1fr 1fr 1fr}}.project-card{background:var(--surface-container);border:1px solid var(--outline-variant);border-radius:8px;flex-direction:column;transition:border-color .3s,box-shadow .3s;display:flex;overflow:hidden}.project-card:hover{border-color:var(--primary);box-shadow:0 0 15px color-mix(in srgb, var(--primary) 10%, transparent)}.project-image{background:var(--surface-container-highest);height:192px;position:relative;overflow:hidden}.project-image-overlay{background:color-mix(in srgb, var(--surface) 5%, transparent);z-index:1;transition:background .3s;position:absolute;inset:0}.project-card:hover .project-image-overlay{background:0 0}.project-image-img{object-fit:contain;width:100%;height:100%;transition:transform .7s}.project-card:hover .project-image-img{transform:scale(1.05)}.project-body{flex-direction:column;flex-grow:1;padding:24px;display:flex}.project-title{font-family:var(--font-heading);font-size:20px;font-weight:600;line-height:1.3;transition:color .3s}.project-card:hover .project-title{color:var(--primary)}.project-desc{color:var(--on-surface-variant);flex-grow:1;margin-top:8px;font-size:16px;line-height:1.6}.project-tags{flex-wrap:wrap;gap:8px;margin-top:24px;display:flex}.project-tag{font-family:var(--font-mono);letter-spacing:.05em;background:color-mix(in srgb, var(--primary) 10%, transparent);color:var(--primary);border-radius:4px;padding:4px 8px;font-size:12px;font-weight:600;line-height:1}.project-links{border-top:1px solid var(--outline-variant);justify-content:space-between;align-items:center;margin-top:24px;padding-top:16px;display:flex}.project-link{color:var(--on-surface-variant);align-items:center;gap:4px;font-size:16px;line-height:1.6;transition:color .2s;display:flex}.project-link:hover{color:var(--primary)}.project-link-icon{font-size:18px}.project-link-accent{color:var(--primary)}.project-link-accent:hover{opacity:.8}.contact-header{text-align:center;max-width:576px;margin:0 auto 48px}.contact-subtitle{color:var(--on-surface-variant);margin-top:16px;font-size:18px;line-height:1.75}.contact-card{background:var(--surface-container);border:1px solid var(--outline-variant);border-radius:8px;max-width:640px;margin:0 auto;padding:32px}.contact-form{flex-direction:column;gap:24px;display:flex}.field{flex-direction:column;gap:4px;display:flex}.field label{font-family:var(--font-mono);color:var(--on-surface-variant);font-size:14px;line-height:1.5}.field input,.field textarea{font-family:var(--font-body);border:none;border-bottom:1px solid var(--outline-variant);color:var(--on-surface);resize:none;background:0 0;outline:none;padding:8px 0;font-size:16px;line-height:1.6;transition:border-color .2s}.field input::placeholder,.field textarea::placeholder{color:color-mix(in srgb, var(--on-surface-variant) 50%, transparent)}.field input:focus,.field textarea:focus{border-color:var(--primary);border-bottom-width:2px}.field input[aria-invalid=true],.field textarea[aria-invalid=true]{border-color:var(--error)}.field-error{font-family:var(--font-mono);color:var(--error);margin-top:4px;font-size:12px;line-height:1.5}.send-btn{width:100%;font-family:var(--font-body);background:var(--primary);color:var(--on-primary);cursor:pointer;border:none;border-radius:4px;justify-content:center;align-items:center;gap:8px;margin-top:16px;padding:12px;font-size:16px;font-weight:500;transition:box-shadow .3s,scale .3s,opacity .3s;display:flex}.send-btn:disabled{opacity:.5;cursor:not-allowed}.send-btn:not(:disabled):hover{box-shadow:0 0 12px color-mix(in srgb, var(--primary) 40%, transparent)}.send-btn:not(:disabled):active{scale:.98}.send-btn.sending{pointer-events:none}.send-btn-icon{font-size:18px}.form-status{font-family:var(--font-mono);text-align:center;border-radius:4px;margin-top:8px;padding:8px 12px;font-size:14px;line-height:1.5}.form-status.success{background:color-mix(in srgb, var(--primary) 15%, transparent);color:var(--primary)}.form-status.error{background:color-mix(in srgb, var(--error) 15%, transparent);color:var(--error)}footer{background:var(--surface-container-lowest);border-top:1px solid var(--outline-variant)}.footer-inner{max-width:var(--container-max);padding:var(--section-gap) var(--margin-mobile);flex-direction:column;align-items:center;gap:24px;margin:0 auto;display:flex}@media (width>=768px){.footer-inner{padding:var(--section-gap) var(--margin-desktop);flex-direction:row;justify-content:space-between;align-items:center}}.footer-brand{text-align:center}@media (width>=768px){.footer-brand{text-align:left}}.footer-logo{font-family:var(--font-heading);color:var(--primary);margin-bottom:8px;font-size:24px;font-weight:700;line-height:1.3}.footer-copy{color:var(--on-surface-variant);font-size:16px;line-height:1.6}.footer-socials{gap:24px;display:flex}.footer-social-link{color:var(--on-surface-variant);align-items:center;gap:4px;font-size:16px;line-height:1.6;transition:color .3s;display:flex}.footer-social-link:hover{color:var(--primary)}.footer-social-icon{font-size:20px}.container{max-width:var(--container-max);padding:0 var(--margin-mobile);margin:0 auto}@media (width>=768px){.container{padding:0 var(--margin-desktop)}}main{padding-top:80px;padding-bottom:var(--section-gap)}.section{padding:var(--section-gap) 0}.section-title{font-family:var(--font-heading);letter-spacing:-.01em;margin-bottom:48px;font-size:clamp(28px,3vw,48px);font-weight:700;line-height:1.2}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--surface:#0b1326;--surface-dim:#0b1326;--surface-bright:#31394d;--surface-container-lowest:#060e20;--surface-container-low:#131b2e;--surface-container:#171f33;--surface-container-high:#222a3d;--surface-container-highest:#2d3449;--on-surface:#dae2fd;--on-surface-variant:#bbcabf;--inverse-surface:#dae2fd;--inverse-on-surface:#283044;--outline:#86948a;--outline-variant:#3c4a42;--primary:#4edea3;--on-primary:#003824;--primary-container:#10b981;--on-primary-container:#00422b;--secondary:#4cd7f6;--on-secondary:#003640;--secondary-container:#03b5d3;--on-secondary-container:#00424e;--tertiary:#ffb95f;--on-tertiary:#472a00;--error:#ffb4ab;--on-error:#690005;--font-display:"Hanken Grotesk", sans-serif;--font-heading:"Hanken Grotesk", sans-serif;--font-body:"Inter", sans-serif;--font-mono:"JetBrains Mono", monospace;--container-max:1280px;--gutter:24px;--margin-desktop:64px;--margin-mobile:24px;--section-gap:128px}html{scroll-behavior:smooth}body{font-family:var(--font-body);background:var(--surface);color:var(--on-surface);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:1.6}::selection{background:color-mix(in srgb, var(--primary) 30%, transparent);color:var(--primary)}a{color:inherit;text-decoration:none}.material-symbols-outlined{font-variation-settings:"FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24}
