:root{--accent:#2a6a55;--accent-hover:#235a47;--accent-light:#2a6a551a;--accent-border:#2a6a554d;--bg:#f5f5f7;--surface:#fff;--surface-elevated:#fff;--surface-secondary:#f0f0f2;--text-primary:#1d1d1f;--text-secondary:#6e6e73;--text-tertiary:#aeaeb2;--border:#00000014;--border-strong:#00000024;--shadow-xs:0 1px 2px #0000000a;--shadow-sm:0 2px 8px #0000000f;--shadow-md:0 4px 20px #00000014;--shadow-lg:0 12px 48px #0000001f;--shadow-card-hover:0 8px 32px #00000021;--navbar-bg:#f5f5f7cc;--r-sm:8px;--r-md:14px;--r-lg:20px;--r-xl:28px;--r-full:9999px;--sp-xs:0.25rem;--sp-sm:0.5rem;--sp-md:1rem;--sp-lg:1.5rem;--sp-xl:2.5rem;--sp-xxl:4rem;--sp-xxxl:7rem;--font:"Geist","Inter",-apple-system,BlinkMacSystemFont,sans-serif;--font-mono:"SF Mono",SFMono-Regular,ui-monospace,Menlo,Monaco,Consolas,monospace;--terminal-prompt-color:#3f6;--ease:cubic-bezier(0.4,0,0.2,1);--duration-fast:150ms;--duration-normal:220ms;--duration-slow:380ms}[data-theme=light]{--color-background:#f5f5f7;--color-card:#fff;--color-text:#1d1d1f;--color-text-secondary:#6e6e73;--color-text-tertiary:#999;--color-border:#d2d2d7;--color-primary:#2a6a55;--color-primary-light:#3a8a75;--color-hover:#2a6a550f;--bg:#f5f5f7;--surface:#fff;--surface-elevated:#fff;--surface-secondary:#f0f0f2;--text-primary:#1d1d1f;--text-secondary:#6e6e73;--text-tertiary:#999;--border:#00000014;--border-strong:#00000024;--accent:#2a6a55;--accent-hover:#235a47;--accent-light:#2a6a551a;--accent-border:#2a6a554d;--navbar-bg:#f5f5f7cc;--shadow-xs:0 1px 2px #0000000a;--shadow-sm:0 2px 8px #0000000f;--shadow-md:0 4px 20px #00000014;--shadow-lg:0 12px 48px #0000001f;--shadow-card-hover:0 8px 32px #00000021;--terminal-prompt-color:#3f6}[data-theme=dark]{--color-background:#121212;--color-card:#1e1e1e;--color-text:#f5f5f7;--color-text-secondary:#b0b0b0;--color-text-tertiary:grey;--color-border:#2c2c2c;--color-primary:#3a8a75;--color-primary-light:#4aaa95;--color-hover:#2a6a5526;--bg:#121212;--surface:#1e1e1e;--surface-elevated:#2c2c2e;--surface-secondary:#161616;--text-primary:#f5f5f7;--text-secondary:#b0b0b0;--text-tertiary:grey;--border:#ffffff14;--border-strong:#ffffff24;--accent:#3a8a75;--accent-hover:#2a7a65;--accent-light:#2a6a5526;--accent-border:#3a8a754d;--navbar-bg:#121212d9;--shadow-xs:0 1px 2px #0000004d;--shadow-sm:0 2px 8px #0006;--shadow-md:0 4px 20px #00000080;--shadow-lg:0 12px 48px #000000b3;--shadow-card-hover:0 8px 32px #0009;--terminal-prompt-color:#3f6}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;font-size:16px;scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f5f5f7;background-color:var(--bg);color:#1d1d1f;color:var(--text-primary);font-family:Geist,Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-family:var(--font);line-height:1.6;transition:background-color .22s cubic-bezier(.4,0,.2,1),color .22s cubic-bezier(.4,0,.2,1);transition:background-color var(--duration-normal) var(--ease),color var(--duration-normal) var(--ease)}a{color:inherit;text-decoration:none}img,svg{display:block;max-width:100%}button{background:none;border:none;cursor:pointer;font-family:Geist,Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-family:var(--font)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#0000}::-webkit-scrollbar-thumb{background:#00000024;background:var(--border-strong);border-radius:9999px;border-radius:var(--r-full)}::-webkit-scrollbar-thumb:hover{background:#aeaeb2;background:var(--text-tertiary)}.container{margin:0 auto;max-width:1100px;padding:0 1.5rem;padding:0 var(--sp-lg);width:100%}.navbar{backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);background:#f5f5f7cc;background:var(--navbar-bg);border-bottom:1px solid #00000014;border-bottom:1px solid var(--border);height:52px;left:0;position:fixed;right:0;top:0;z-index:100}.navbar,.navbar .container{align-items:center;display:flex}.navbar .container{justify-content:space-between}.navbar-brand{color:#1d1d1f;color:var(--text-primary);font-size:1rem;font-weight:600;letter-spacing:-.01em}.navbar-links{align-items:center;display:flex;gap:.25rem;list-style:none}.navbar-links a{border-radius:9999px;border-radius:var(--r-full);color:#6e6e73;color:var(--text-secondary);display:block;font-size:.875rem;padding:.35rem .75rem;transition:color .15s cubic-bezier(.4,0,.2,1),background-color .15s cubic-bezier(.4,0,.2,1);transition:color var(--duration-fast) var(--ease),background-color var(--duration-fast) var(--ease)}.navbar-links a:hover{background-color:#00000014;background-color:var(--border);color:#1d1d1f;color:var(--text-primary)}.navbar-toggle{background:none;border-radius:8px;border-radius:var(--r-sm);display:none;flex-direction:column;gap:5px;padding:8px;transition:background-color .15s cubic-bezier(.4,0,.2,1);transition:background-color var(--duration-fast) var(--ease)}.navbar-toggle:hover{background-color:#00000014;background-color:var(--border)}.navbar-toggle span{background:#1d1d1f;background:var(--text-primary);border-radius:2px;display:block;height:1.5px;transition:transform .22s cubic-bezier(.4,0,.2,1),opacity .22s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-normal) var(--ease),opacity var(--duration-normal) var(--ease);width:20px}@media (max-width:680px){.navbar-toggle{display:flex}.navbar-links{align-items:stretch;backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);background:#f5f5f7cc;background:var(--navbar-bg);border-bottom:1px solid #00000014;border-bottom:1px solid var(--border);flex-direction:column;gap:0;left:0;opacity:0;padding:.5rem 1rem;padding:var(--sp-sm) var(--sp-md);pointer-events:none;position:fixed;right:0;top:52px;transform:translateY(-100%);transition:transform .22s cubic-bezier(.4,0,.2,1),opacity .22s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-normal) var(--ease),opacity var(--duration-normal) var(--ease)}.navbar-links.open{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-links a{border-radius:8px;border-radius:var(--r-sm);padding:.65rem .75rem}}.portfolio-main{padding-top:52px}.section{padding:4rem 0;padding:var(--sp-xxl) 0}.section-label{color:#2a6a55;color:var(--accent);font-size:.75rem;font-weight:600;letter-spacing:.1em;margin-bottom:.5rem;margin-bottom:var(--sp-sm);text-transform:uppercase}.section-title{color:#1d1d1f;color:var(--text-primary);font-size:clamp(1.75rem,4vw,2.5rem);font-weight:700;letter-spacing:-.03em;line-height:1.1;margin-bottom:2.5rem;margin-bottom:var(--sp-xl)}.hero-section{align-items:center;display:flex;min-height:88vh;padding:7rem 0 4rem;padding:var(--sp-xxxl) 0 var(--sp-xxl)}.hero-eyebrow{background:#2a6a551a;background:var(--accent-light);border:1px solid #2a6a554d;border:1px solid var(--accent-border);border-radius:9999px;border-radius:var(--r-full);color:#2a6a55;color:var(--accent);display:inline-block;font-size:.8125rem;font-weight:500;letter-spacing:.08em;margin-bottom:1.5rem;margin-bottom:var(--sp-lg);padding:.3rem .85rem;text-transform:uppercase}.hero-name{color:#1d1d1f;color:var(--text-primary);font-size:clamp(3rem,8vw,5.5rem);font-weight:700;letter-spacing:-.04em;line-height:1;margin-bottom:1rem;margin-bottom:var(--sp-md)}.hero-name--last{display:block;font-size:clamp(3rem,10vw,6rem);font-weight:800;letter-spacing:-.03em}.hero-title{font-size:clamp(1.25rem,3vw,1.75rem);font-weight:400;letter-spacing:-.02em;margin-bottom:1.5rem;margin-bottom:var(--sp-lg)}.hero-description,.hero-title{color:#6e6e73;color:var(--text-secondary)}.hero-description{font-size:1.0625rem;line-height:1.7;margin-bottom:2.5rem;margin-bottom:var(--sp-xl);max-width:560px}.hero-ctas{display:flex;flex-wrap:wrap;gap:.5rem;gap:var(--sp-sm)}.btn-primary{align-items:center;background:#2a6a55;background:var(--accent);border:1px solid #0000;border-radius:9999px;border-radius:var(--r-full);color:#fff;display:inline-flex;font-size:.9375rem;font-weight:500;gap:.4rem;padding:.65rem 1.35rem;transition:background-color .15s cubic-bezier(.4,0,.2,1),transform .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1);transition:background-color var(--duration-fast) var(--ease),transform var(--duration-fast) var(--ease),box-shadow var(--duration-fast) var(--ease)}.btn-primary:hover{background:#235a47;background:var(--accent-hover);box-shadow:0 4px 16px #2a6a5559;transform:translateY(-1px)}.btn-primary:active{transform:translateY(0)}.btn-ghost{align-items:center;background:#fff;background:var(--surface);border:1px solid #00000024;border:1px solid var(--border-strong);border-radius:9999px;border-radius:var(--r-full);color:#1d1d1f;color:var(--text-primary);display:inline-flex;font-size:.9375rem;font-weight:500;gap:.4rem;padding:.65rem 1.35rem;transition:background-color .15s cubic-bezier(.4,0,.2,1),transform .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1),border-color .15s cubic-bezier(.4,0,.2,1);transition:background-color var(--duration-fast) var(--ease),transform var(--duration-fast) var(--ease),box-shadow var(--duration-fast) var(--ease),border-color var(--duration-fast) var(--ease)}.btn-ghost:hover{background:#f0f0f2;background:var(--surface-secondary);border-color:#aeaeb2;border-color:var(--text-tertiary);box-shadow:0 2px 8px #0000000f;box-shadow:var(--shadow-sm);transform:translateY(-1px)}.btn-ghost:active{transform:translateY(0)}.about-stack-row{margin-bottom:2.5rem;margin-bottom:var(--sp-xl)}.about-highlights-label,.about-stack-label{color:#aeaeb2;color:var(--text-tertiary);display:block;font-size:.75rem;font-weight:600;letter-spacing:.08em;margin-bottom:.5rem;margin-bottom:var(--sp-sm);text-transform:uppercase}.about-stack-chips{display:flex;flex-wrap:wrap;gap:.4rem}.about-stack-chip{align-items:center;background:#fff;background:var(--surface);border:1px solid #00000014;border:1px solid var(--border);border-radius:9999px;border-radius:var(--r-full);color:#6e6e73;color:var(--text-secondary);display:inline-flex;font-size:.8125rem;font-weight:500;gap:.35rem;padding:.3rem .7rem;transition:border-color .15s cubic-bezier(.4,0,.2,1),color .15s cubic-bezier(.4,0,.2,1);transition:border-color var(--duration-fast) var(--ease),color var(--duration-fast) var(--ease)}.about-stack-chip:hover{border-color:#00000024;border-color:var(--border-strong);color:#1d1d1f;color:var(--text-primary)}.about-stack-chip i{font-size:1rem;line-height:1}.about-highlights{margin-bottom:2.5rem;margin-bottom:var(--sp-xl)}.about-highlights-list{display:flex;flex-direction:column;gap:.5rem;list-style:none}.about-highlights-item{align-items:baseline;background:#fff;background:var(--surface);border:1px solid #00000014;border:1px solid var(--border);border-radius:14px;border-radius:var(--r-md);display:flex;gap:1rem;gap:var(--sp-md);padding:.65rem 1rem;padding:.65rem var(--sp-md);transition:border-color .15s cubic-bezier(.4,0,.2,1);transition:border-color var(--duration-fast) var(--ease)}.about-highlights-item:hover{border-color:#00000024;border-color:var(--border-strong)}.about-highlights-title{color:#2a6a55;color:var(--accent);flex-shrink:0;font-size:.875rem;font-weight:600;white-space:nowrap}.about-highlights-detail{font-size:.8125rem;line-height:1.55}.about-closing,.about-highlights-detail{color:#6e6e73;color:var(--text-secondary)}.about-closing{font-size:.9375rem;line-height:1.65;margin-bottom:2.5rem;margin-bottom:var(--sp-xl);max-width:560px}@media (max-width:540px){.about-highlights-item{flex-direction:column;gap:.25rem}}.projects-grid{grid-gap:1rem;grid-gap:var(--sp-md);display:grid;gap:1rem;gap:var(--sp-md);grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.project-card{background:#fff;background:var(--surface);border:1px solid #00000014;border:1px solid var(--border);border-radius:20px;border-radius:var(--r-lg);display:flex;flex-direction:column;gap:.5rem;gap:var(--sp-sm);padding:1.5rem;padding:var(--sp-lg);transition:transform .22s cubic-bezier(.4,0,.2,1),box-shadow .22s cubic-bezier(.4,0,.2,1),border-color .22s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-normal) var(--ease),box-shadow var(--duration-normal) var(--ease),border-color var(--duration-normal) var(--ease)}.project-card:hover{border-color:#00000024;border-color:var(--border-strong);box-shadow:0 8px 32px #00000021;box-shadow:var(--shadow-card-hover);transform:translateY(-4px)}.project-card-top{align-items:flex-start;display:flex;gap:.5rem;gap:var(--sp-sm);justify-content:space-between}.project-icon{align-items:center;background:#2a6a551a;background:var(--accent-light);border:1px solid #2a6a554d;border:1px solid var(--accent-border);border-radius:8px;border-radius:var(--r-sm);color:#2a6a55;color:var(--accent);display:flex;flex-shrink:0;font-size:1.1rem;height:40px;justify-content:center;width:40px}.project-status{align-items:center;border-radius:9999px;border-radius:var(--r-full);display:inline-flex;font-size:.75rem;font-weight:500;gap:.3rem;padding:.2rem .6rem;white-space:nowrap}.project-status.in-progress{background:#ffa5001a;border:1px solid #ffa5004d;color:#b45309}.project-status.completed{background:#2a6a551a;background:var(--accent-light);border:1px solid #2a6a554d;border:1px solid var(--accent-border);color:#2a6a55;color:var(--accent)}[data-theme=dark] .project-status.in-progress{background:#ffa5001f;border-color:#ffa50040;color:#f59e0b}.project-status-dot{background:currentColor;border-radius:50%;height:5px;width:5px}.project-status.in-progress .project-status-dot{animation:pulse-dot 1.8s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.7)}}.project-title{color:#1d1d1f;color:var(--text-primary);font-size:1.0625rem;font-weight:600;letter-spacing:-.01em;line-height:1.3}.project-description{color:#6e6e73;color:var(--text-secondary);flex:1 1;font-size:.875rem;line-height:1.65}.project-link{align-items:center;align-self:flex-start;border-radius:8px;border-radius:var(--r-sm);color:#2a6a55;color:var(--accent);display:inline-flex;font-size:.8125rem;font-weight:500;gap:.35rem;padding:.3rem 0;transition:gap .15s cubic-bezier(.4,0,.2,1),color .15s cubic-bezier(.4,0,.2,1);transition:gap var(--duration-fast) var(--ease),color var(--duration-fast) var(--ease)}.project-link:hover{color:#235a47;color:var(--accent-hover);gap:.5rem}.timeline-cols{grid-gap:2.5rem;grid-gap:var(--sp-xl);display:grid;gap:2.5rem;gap:var(--sp-xl);grid-template-columns:1fr 1fr}.timeline-col-heading{color:#aeaeb2;color:var(--text-tertiary);font-size:.8125rem;font-weight:600;letter-spacing:.08em;margin-bottom:1.5rem;margin-bottom:var(--sp-lg);text-transform:uppercase}.timeline-list{display:flex;flex-direction:column;gap:0;position:relative}.timeline-list:before{background:#00000024;background:var(--border-strong);bottom:12px;content:"";left:11px;position:absolute;top:12px;width:1px}.timeline-item{display:flex;gap:1rem;gap:var(--sp-md);padding-bottom:1.5rem;padding-bottom:var(--sp-lg);position:relative}.timeline-item:last-child{padding-bottom:0}.timeline-dot-wrapper{flex-direction:column;padding-top:2px}.timeline-dot,.timeline-dot-wrapper{align-items:center;display:flex;flex-shrink:0}.timeline-dot{background:#fff;background:var(--surface);border:2px solid #00000024;border:2px solid var(--border-strong);border-radius:50%;height:23px;justify-content:center;transition:border-color .22s cubic-bezier(.4,0,.2,1);transition:border-color var(--duration-normal) var(--ease);width:23px;z-index:1}.timeline-dot.accent{background:#2a6a551a;background:var(--accent-light);border-color:#2a6a55;border-color:var(--accent)}.timeline-dot svg{fill:#2a6a55;fill:var(--accent);height:10px;width:10px}.timeline-content{background:#fff;background:var(--surface);border:1px solid #00000014;border:1px solid var(--border);border-radius:14px;border-radius:var(--r-md);flex:1 1;padding:1rem 1.5rem;padding:var(--sp-md) var(--sp-lg);transition:box-shadow .22s cubic-bezier(.4,0,.2,1),border-color .22s cubic-bezier(.4,0,.2,1);transition:box-shadow var(--duration-normal) var(--ease),border-color var(--duration-normal) var(--ease)}.timeline-content:hover{border-color:#00000024;border-color:var(--border-strong);box-shadow:0 2px 8px #0000000f;box-shadow:var(--shadow-sm)}.timeline-content-header{align-items:flex-start;display:flex;gap:.5rem;gap:var(--sp-sm);justify-content:space-between;margin-bottom:.25rem}.timeline-content-title{color:#1d1d1f;color:var(--text-primary);font-size:.9375rem;font-weight:600;letter-spacing:-.01em;line-height:1.3}.timeline-tag{background:#2a6a551a;background:var(--accent-light);border:1px solid #2a6a554d;border:1px solid var(--accent-border);border-radius:9999px;border-radius:var(--r-full);color:#2a6a55;color:var(--accent);flex-shrink:0;font-size:.6875rem;font-weight:600;letter-spacing:.04em;padding:.15rem .5rem;text-transform:uppercase}.timeline-date{color:#aeaeb2;color:var(--text-tertiary);font-size:.8125rem;margin-bottom:.5rem}.timeline-description{color:#6e6e73;color:var(--text-secondary);font-size:.8125rem;line-height:1.6}@media (max-width:720px){.timeline-cols{grid-template-columns:1fr}}.skills-categories{display:flex;flex-direction:column;gap:2.5rem;gap:var(--sp-xl)}.skills-category-label{color:#aeaeb2;color:var(--text-tertiary);font-size:.75rem;font-weight:600;letter-spacing:.1em;margin-bottom:1rem;margin-bottom:var(--sp-md);text-transform:uppercase}.skills-grid{grid-gap:.5rem;grid-gap:var(--sp-sm);display:grid;gap:.5rem;gap:var(--sp-sm);grid-template-columns:repeat(auto-fill,minmax(90px,1fr))}.skill-chip{align-items:center;background:#fff;background:var(--surface);border:1px solid #00000014;border:1px solid var(--border);border-radius:14px;border-radius:var(--r-md);display:flex;flex-direction:column;gap:.5rem;padding:1rem .5rem;padding:var(--sp-md) var(--sp-sm);transition:transform .22s cubic-bezier(.4,0,.2,1),box-shadow .22s cubic-bezier(.4,0,.2,1),border-color .22s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-normal) var(--ease),box-shadow var(--duration-normal) var(--ease),border-color var(--duration-normal) var(--ease)}.skill-chip:hover{border-color:#00000024;border-color:var(--border-strong);box-shadow:0 2px 8px #0000000f;box-shadow:var(--shadow-sm);transform:translateY(-3px)}.skill-chip i{font-size:1.75rem;line-height:1}.skill-chip-label{color:#6e6e73;color:var(--text-secondary);font-size:.6875rem;font-weight:500;text-align:center}.contact-section{background:#f0f0f2;background:var(--surface-secondary)}.contact-inner{max-width:560px}.contact-links{display:flex;flex-direction:column;gap:.5rem;gap:var(--sp-sm);margin-top:1.5rem;margin-top:var(--sp-lg)}.contact-link-row{align-items:center;background:#fff;background:var(--surface);border:1px solid #00000014;border:1px solid var(--border);border-radius:14px;border-radius:var(--r-md);color:#1d1d1f;color:var(--text-primary);display:flex;gap:1rem;gap:var(--sp-md);padding:1rem 1.5rem;padding:var(--sp-md) var(--sp-lg);transition:transform .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1),border-color .15s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-fast) var(--ease),box-shadow var(--duration-fast) var(--ease),border-color var(--duration-fast) var(--ease)}.contact-link-row:hover{border-color:#00000024;border-color:var(--border-strong);box-shadow:0 2px 8px #0000000f;box-shadow:var(--shadow-sm);transform:translateX(4px)}.contact-link-icon{align-items:center;background:#2a6a551a;background:var(--accent-light);border-radius:8px;border-radius:var(--r-sm);color:#2a6a55;color:var(--accent);display:flex;flex-shrink:0;height:36px;justify-content:center;width:36px}.contact-link-meta{flex:1 1;min-width:0}.contact-link-label{color:#aeaeb2;color:var(--text-tertiary);display:block;font-size:.75rem;font-weight:500;letter-spacing:.05em;text-transform:uppercase}.contact-link-value{color:#1d1d1f;color:var(--text-primary);display:block;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-link-arrow{flex-shrink:0}.contact-link-arrow,.portfolio-footer{color:#aeaeb2;color:var(--text-tertiary)}.portfolio-footer{border-top:1px solid #00000014;border-top:1px solid var(--border);font-size:.8125rem;padding:2.5rem 0;padding:var(--sp-xl) 0;text-align:center}.theme-toggle{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);background:#fff;background:var(--surface);border:1px solid #00000024;border:1px solid var(--border-strong);box-shadow:0 4px 20px #00000014;box-shadow:var(--shadow-md);gap:2px;padding:4px;position:fixed;right:1.5rem;right:var(--sp-lg);top:64px;z-index:90}.theme-toggle,.theme-toggle-btn{align-items:center;border-radius:9999px;border-radius:var(--r-full);display:flex}.theme-toggle-btn{background:#0000;border:none;color:#aeaeb2;color:var(--text-tertiary);font-size:.75rem;font-weight:500;gap:.3rem;padding:.3rem .65rem;transition:color .15s cubic-bezier(.4,0,.2,1),background-color .15s cubic-bezier(.4,0,.2,1);transition:color var(--duration-fast) var(--ease),background-color var(--duration-fast) var(--ease);white-space:nowrap}.theme-toggle-btn:hover{background:#00000014;background:var(--border);color:#1d1d1f;color:var(--text-primary)}.theme-toggle-btn.active{background:#2a6a55;background:var(--accent);color:#fff}.theme-toggle-symbol{font-size:.875rem;line-height:1}@media (max-width:768px){.theme-toggle{display:none}.navbar-links,.navbar-toggle{display:none!important}.portfolio-footer,.portfolio-main{padding-bottom:84px}}.mobile-dock{display:none}@media (max-width:768px){.mobile-dock{align-items:center;animation:dock-slide-up .3s ease-out both;backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);background:color-mix(in srgb,#fff 88%,#0000);background:color-mix(in srgb,var(--surface) 88%,#0000);border-top:1px solid #00000014;border-top:1px solid var(--border);bottom:0;display:flex;height:calc(64px + env(safe-area-inset-bottom, 0px));justify-content:space-around;left:0;padding:0 .5rem;padding:0 var(--sp-sm);padding-bottom:env(safe-area-inset-bottom,12px);position:fixed;right:0;z-index:95}}@keyframes dock-slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.dock-theme-bubble{align-items:center;background:#fff;background:var(--surface);border:1px solid #00000024;border:1px solid var(--border-strong);border-radius:50%;box-shadow:0 2px 8px #0000000f;box-shadow:var(--shadow-sm);color:#2a6a55;color:var(--accent);display:flex;flex-shrink:0;height:40px;justify-content:center;transition:transform .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-fast) var(--ease),box-shadow var(--duration-fast) var(--ease);width:40px}.dock-theme-bubble:active{box-shadow:none;transform:scale(.88)}.dock-item{-webkit-tap-highlight-color:transparent;align-items:center;background:none;border:none;border-radius:8px;border-radius:var(--r-sm);color:#aeaeb2;color:var(--text-tertiary);display:flex;flex-direction:column;gap:3px;padding:6px 10px;position:relative;transition:color .15s cubic-bezier(.4,0,.2,1);transition:color var(--duration-fast) var(--ease)}.dock-item:active{transform:scale(.88)}.dock-item.active{color:#2a6a55;color:var(--accent)}.dock-icon{align-items:center;display:flex;justify-content:center;transition:transform .22s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-normal) var(--ease)}.dock-item.active .dock-icon{transform:scale(1.15)}.dock-label{font-size:10px;font-weight:500;letter-spacing:.01em;line-height:1}.dock-dot{background:#2a6a55;background:var(--accent);border-radius:50%;bottom:1px;height:4px;left:50%;position:absolute;transform:translateX(-50%);width:4px}@media (max-width:768px){.terminal-fab{display:none}}.terminal-fab{align-items:center;background:#fff;background:var(--surface);border:1px solid #00000024;border:1px solid var(--border-strong);border-radius:50%;bottom:2.5rem;bottom:var(--sp-xl);box-shadow:0 4px 20px #00000014;box-shadow:var(--shadow-md);color:#6e6e73;color:var(--text-secondary);display:flex;height:46px;justify-content:center;position:fixed;right:2.5rem;right:var(--sp-xl);transition:transform .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1),color .15s cubic-bezier(.4,0,.2,1);transition:transform var(--duration-fast) var(--ease),box-shadow var(--duration-fast) var(--ease),color var(--duration-fast) var(--ease);width:46px;z-index:90}.terminal-fab:hover{box-shadow:0 12px 48px #0000001f;box-shadow:var(--shadow-lg);color:#1d1d1f;color:var(--text-primary);transform:scale(1.08)}.terminal-fab:active{transform:scale(.96)}.terminal-overlay{align-items:center;animation:overlay-in .22s cubic-bezier(.4,0,.2,1) forwards;animation:overlay-in var(--duration-normal) var(--ease) forwards;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:#0009;display:flex;inset:0;justify-content:center;padding:1.5rem;padding:var(--sp-lg);position:fixed;z-index:200}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.terminal-modal{animation:modal-in .22s cubic-bezier(.4,0,.2,1) forwards;animation:modal-in var(--duration-normal) var(--ease) forwards;max-height:85vh;max-width:900px;position:relative;width:100%}@keyframes modal-in{0%{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}.terminal-modal-close{align-items:center;background:#fff;background:var(--surface-elevated);border:1px solid #00000024;border:1px solid var(--border-strong);border-radius:50%;box-shadow:0 2px 8px #0000000f;box-shadow:var(--shadow-sm);color:#6e6e73;color:var(--text-secondary);display:flex;font-size:.75rem;height:28px;justify-content:center;position:absolute;right:-14px;top:-14px;transition:color .15s cubic-bezier(.4,0,.2,1),background-color .15s cubic-bezier(.4,0,.2,1);transition:color var(--duration-fast) var(--ease),background-color var(--duration-fast) var(--ease);width:28px;z-index:10}.terminal-modal-close:hover{background:#f0f0f2;background:var(--surface-secondary);color:#1d1d1f;color:var(--text-primary)}.terminal-modal .terminal-root{background:#0000;min-height:0;min-height:auto;padding:0}.terminal-modal .terminal-layout{max-width:none}.terminal-modal .terminal-side-panel,.terminal-modal .terminal-window{height:70vh;max-height:600px}.terminal-root{align-items:center;background-color:#000;color:#e5e5e5;display:flex;font-family:SF Mono,SFMono-Regular,ui-monospace,Menlo,Monaco,Consolas,monospace;font-family:var(--font-mono);justify-content:center;min-height:100vh;padding:1rem}.terminal-layout{display:flex;gap:1rem;max-width:1200px;width:100%}.terminal-layout-split .terminal-window{flex:0 0 55%}.terminal-layout-split .terminal-side-panel{flex:0 0 45%}.terminal-window{background-color:#050608;border:1px solid #222;border-radius:8px;box-shadow:0 18px 40px #0009;display:flex;flex-direction:column;height:80vh;max-height:700px;width:100%}.terminal-header{align-items:center;background-color:#111;border-bottom:1px solid #222;color:#888;display:flex;font-size:.8rem;justify-content:space-between;padding:.4rem .9rem}.terminal-buttons{align-items:center;display:flex;gap:.4rem}.terminal-buttons .btn{background-color:#333;border-radius:999px;height:10px;width:10px}.terminal-buttons .btn.close{background-color:#ff5f57}.terminal-buttons .btn.minimize{background-color:#febc2e}.terminal-buttons .btn.maximize{background-color:#28c840}.terminal-title{color:#aaa;flex:1 1;font-size:.8rem;text-align:center}.terminal-body{flex:1 1;font-size:.9rem;overflow-y:auto;padding:.9rem 1.2rem}.terminal-line{word-wrap:break-word;white-space:pre-wrap}.terminal-line+.terminal-line{margin-top:.4rem}.terminal-line-command{color:#e5e5e5}.terminal-line-error{color:#ff6b6b}.terminal-prompt{color:#3f6;color:var(--terminal-prompt-color)}.terminal-input-line{align-items:center;border-top:1px solid #222;display:flex;font-size:.9rem;gap:.6rem;padding:.6rem 1.2rem}.terminal-input-wrapper{flex:1 1;position:relative}.terminal-input-wrapper input{background:#0000;border:none;color:inherit;font:inherit;outline:none;padding:0;width:100%}.terminal-cursor{animation:terminal-blink 1s step-start infinite;background-color:#3f6;height:1em;position:absolute;top:50%;transform:translateY(-50%);width:8px}@keyframes terminal-blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.terminal-side-panel{background-color:#050608;border:1px solid #222;border-radius:8px;box-shadow:0 18px 40px #0009;color:#e5e5e5;height:80vh;max-height:700px;overflow-y:auto;padding:.9rem 1.1rem}.side-panel-title{color:#f5f5f5;font-size:1rem;margin-bottom:.75rem}.side-panel-content{display:flex;flex-direction:column;gap:.75rem}.terminal-side-panel .project-card{background:radial-gradient(circle at top left,#33ff6614,#0000 55%),#07090b;border:1px solid #333;border-radius:6px;box-shadow:none;gap:0;padding:.75rem .9rem;transform:none}.terminal-side-panel .project-card:hover{border-color:#444;box-shadow:none;transform:none}.project-card-header{align-items:baseline;display:flex;gap:.5rem;justify-content:space-between;margin-bottom:.4rem}.project-card-title{font-size:.95rem;font-weight:600}.project-card-status{border:1px solid #3f6;border-radius:999px;color:#3f6;font-size:.7rem;padding:.15rem .4rem;white-space:nowrap}.project-card-description{color:#c8c8c8;font-size:.8rem;margin-bottom:.45rem}.project-card-link{color:#8bf9b5;font-size:.8rem;text-decoration:underline}.project-card-link:hover{color:#b3ffd3}.timeline-section-title{color:#9fd9b3;font-size:.85rem;font-weight:600;letter-spacing:.06em;margin-bottom:.25rem;margin-top:.5rem;text-transform:uppercase}.terminal-side-panel .timeline-card{background:radial-gradient(circle at top left,#8fbc8f1f,#0000 55%),#07090b;border:1px solid #333;border-radius:6px;padding:.7rem .85rem}.terminal-side-panel .timeline-card:hover{border-color:#444;box-shadow:none}.terminal-side-panel .timeline-card-header{align-items:baseline;display:flex;gap:.5rem;justify-content:space-between;margin-bottom:.25rem}.terminal-side-panel .timeline-card-title{color:#e5e5e5;font-size:.9rem;font-weight:600}.terminal-side-panel .timeline-tag{background:#0000;border:1px solid #9fd9b3;border-radius:999px;color:#9fd9b3;font-size:.7rem;letter-spacing:0;padding:.1rem .35rem;text-transform:none;white-space:nowrap}.terminal-side-panel .timeline-date{color:#b0b0b0;font-size:.75rem;margin-bottom:.25rem}.terminal-side-panel .timeline-description{color:#d0d0d0;font-size:.8rem}.side-panel-contact .contact-row{background-color:#ffffff05;border-radius:4px;display:flex;flex-direction:column;gap:.15rem;padding:.4rem .45rem}.side-panel-contact .contact-label-with-icon{align-items:center;display:inline-flex;gap:.25rem}.side-panel-contact .contact-icon{font-size:.9rem}.side-panel-contact .contact-label{color:#9fd9b3;font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}.side-panel-contact .contact-value{color:#e5e5e5;font-size:.8rem;text-decoration:underline}.side-panel-contact .contact-value:hover{color:#b3ffd3}@media (max-width:768px){.terminal-layout{flex-direction:column}.terminal-layout-split .terminal-side-panel,.terminal-layout-split .terminal-window{flex:1 1 auto}.terminal-window{height:60vh;max-height:none}.terminal-body,.terminal-input-line{font-size:.8rem}}
/*# sourceMappingURL=main.993a88bf.css.map*/