:root{--bg:#0d1117;--surface:#161b22;--border:#30363d;--text:#e6edf3;--text-secondary:#8b949e;--accent:#58a6ff;--accent-hover:#79b8ff;--max-width:860px;--font:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Arial, sans-serif;--nav-bg:#0d1117eb;--nav-mobile-bg:#0d1117fa;--bar-bg:#10141cf7}[data-theme=light]{--bg:#fff;--surface:#f6f8fa;--border:#d0d7de;--text:#1f2328;--text-secondary:#656d76;--accent:#0969da;--accent-hover:#0550ae;--nav-bg:#ffffffeb;--nav-mobile-bg:#fffffffa;--bar-bg:#f6f8faf7}*,:before,:after{box-sizing:border-box;min-width:0;margin:0;padding:0}html{scroll-behavior:smooth;touch-action:pan-x pan-y;overflow-x:hidden}body{touch-action:pan-x pan-y;max-width:100vw;overflow-x:hidden}@media (hover:none) and (pointer:coarse){input,textarea,select{font-size:16px!important}}img,video,picture,svg{-webkit-touch-callout:none;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;max-width:100%;display:block}body{font-family:var(--font);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;font-size:1rem;line-height:1.7}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover)}.site-wrapper{flex-direction:column;min-height:100vh;display:flex}main{flex:1}.container{max-width:var(--max-width);margin:0 auto;padding:0 1.5rem}.page{padding:4rem 0 5rem}.page-title{letter-spacing:-.02em;margin-bottom:.4rem;font-size:clamp(1.6rem,5vw,2rem);font-weight:700}.page-subtitle{color:var(--text-secondary);margin-bottom:3rem;font-size:1.05rem}.nav{z-index:100;background:var(--nav-bg);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--border);position:sticky;top:0}.nav-inner{max-width:var(--max-width);justify-content:space-between;align-items:center;height:3.5rem;margin:0 auto;padding:0 1.5rem;display:flex}.nav-brand{color:var(--text);letter-spacing:.01em;align-items:center;font-size:.95rem;font-weight:600;display:flex}.nav-brand:hover{color:var(--text)}.nav-logo{width:auto;height:28px;display:block}.nav-links{align-items:center;gap:1.75rem;display:flex}.nav-link{color:var(--text-secondary);font-size:.9rem;transition:color .15s}.nav-link:hover{color:var(--text)}.nav-link.active{color:var(--text);font-weight:500}.nav-hamburger{cursor:pointer;background:0 0;border:none;border-radius:6px;flex-direction:column;justify-content:center;align-items:center;gap:5px;width:40px;height:40px;padding:6px;transition:background .15s;display:none}.nav-hamburger:hover{background:#ffffff0d}.nav-hamburger span{background:var(--text);transform-origin:50%;border-radius:2px;width:22px;height:2px;transition:transform .25s,opacity .2s,width .2s;display:block}.nav-hamburger--open span:first-child{transform:translateY(7px)rotate(45deg)}.nav-hamburger--open span:nth-child(2){opacity:0;width:0}.nav-hamburger--open span:nth-child(3){transform:translateY(-7px)rotate(-45deg)}.nav-backdrop{z-index:90;-webkit-backdrop-filter:blur(3px);opacity:0;pointer-events:none;background:#00000080;transition:opacity .25s;position:fixed;inset:0}.nav-backdrop--visible{opacity:1;pointer-events:all}.nav-mobile{z-index:95;background:var(--nav-mobile-bg);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border);opacity:0;pointer-events:none;flex-direction:column;padding:.5rem 0 1.25rem;transition:transform .28s cubic-bezier(.4,0,.2,1),opacity .22s;display:flex;position:fixed;top:3.5rem;left:0;right:0;transform:translateY(-110%)}.nav-mobile--open{opacity:1;pointer-events:all;transform:translateY(0)}.nav-mobile-link{color:var(--text-secondary);border-left:2px solid #0000;padding:.95rem 1.5rem;font-size:1.05rem;text-decoration:none;transition:color .15s,background .15s;display:block}.nav-mobile-link:hover{color:var(--text);background:#ffffff0a}.nav-mobile-link.active{color:var(--text);border-left-color:var(--accent);font-weight:500}.nav-theme-toggle{cursor:pointer;width:36px;height:36px;color:var(--text-secondary);touch-action:manipulation;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;transition:color .15s,background .15s;display:flex}.nav-theme-toggle:hover{color:var(--text);background:#8080801a}@media (width<=640px){.nav-links{display:none}.nav-hamburger{display:flex}}.cookie-bar{z-index:300;background:var(--bar-bg);border-top:1px solid var(--border);-webkit-backdrop-filter:blur(12px);justify-content:space-between;align-items:center;gap:1.25rem;padding:.9rem 1.5rem;display:flex;position:fixed;bottom:0;left:0;right:0}.cookie-text{color:var(--text-secondary);flex:1;font-size:.82rem;line-height:1.55}.cookie-text a{color:var(--accent)}.cookie-text a:hover{color:var(--accent-hover)}.cookie-btn{background:var(--surface);border:1px solid var(--border);color:var(--text);font-size:.82rem;font-family:var(--font);cursor:pointer;white-space:nowrap;border-radius:6px;flex-shrink:0;padding:.45rem 1.1rem;transition:border-color .15s,background .15s}.cookie-btn:hover{border-color:var(--text-secondary);background:#ffffff0a}@media (width<=540px){.cookie-bar{flex-direction:column;align-items:flex-start;gap:.7rem;padding:1rem 1.25rem}.cookie-btn{align-self:flex-end}}.footer{border-top:1px solid var(--border);color:var(--text-secondary);padding:2rem 0;font-size:.875rem}.footer-inner{max-width:var(--max-width);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin:0 auto;padding:0 1.5rem;display:flex}.footer-links{align-items:center;gap:1.25rem;display:flex}.footer-link{color:var(--text-secondary);align-items:center;transition:color .15s;display:flex}.footer-link:hover{color:var(--text)}.hero{border-bottom:1px solid var(--border);padding:2rem 0 2.5rem}.hero-name{letter-spacing:-.03em;margin-bottom:1.5rem;font-size:clamp(2rem,5vw,2.75rem);font-weight:700}.hero-title{color:var(--accent);margin-bottom:1.75rem;font-size:1.1rem;font-weight:500}.hero-tagline{color:var(--text-secondary);letter-spacing:.04em;margin-bottom:2.5rem;font-size:1rem}.hero-mosaic{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;grid-template-columns:repeat(6,1fr);gap:.5rem;display:grid}.hero-mosaic-img{aspect-ratio:1;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;pointer-events:none;background-position:50%;background-repeat:no-repeat;background-size:cover;width:100%}.hero-bio{max-width:600px;color:var(--text-secondary);margin-bottom:2.25rem;font-size:1.05rem;line-height:1.8}.hero-actions{flex-wrap:wrap;gap:.75rem;display:flex}.btn{cursor:pointer;font-size:.9rem;font-weight:500;font-family:var(--font);border:none;border-radius:6px;padding:.6rem 1.3rem;transition:all .15s;display:inline-block}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover);color:#fff}.btn-secondary{color:var(--text);border:1px solid var(--border);background:0 0}.btn-secondary:hover{border-color:var(--text-secondary);color:var(--text)}.project-list{grid-template-columns:1fr 1fr;gap:1.5rem;display:grid}.project-card--full{grid-column:1/-1}.project-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;flex-direction:column;padding:2rem;display:flex}.project-name{letter-spacing:-.01em;margin-bottom:.3rem;font-size:1.25rem;font-weight:600}.project-meta{color:var(--text-secondary);margin-bottom:1rem;font-size:.85rem}.project-desc{color:var(--text-secondary);margin-bottom:1rem;font-size:.97rem;line-height:1.75}.project-details{flex-direction:column;gap:1rem;display:flex}.detail-label{text-transform:uppercase;letter-spacing:.07em;color:var(--text-secondary);margin-bottom:.4rem;font-size:.75rem;font-weight:700}.detail-list{list-style:none}.detail-list li{color:var(--text-secondary);padding:.2rem 0 .2rem 1.1rem;font-size:.9rem;line-height:1.6;position:relative}.detail-list li:before{content:"·";color:var(--border);font-size:.8rem;position:absolute;left:0}.project-link{color:var(--accent);margin-top:1.5rem;font-size:.875rem;font-weight:500;display:inline-block}.project-link:hover{color:var(--accent-hover)}.project-badges{align-items:center;gap:.45rem;margin-bottom:.5rem;display:flex}.project-badge{letter-spacing:.07em;text-transform:uppercase;border-radius:999px;align-items:center;gap:.32rem;padding:.18rem .55rem;font-size:.66rem;font-weight:600;line-height:1;display:inline-flex}.project-badge:before{content:"";border-radius:50%;flex-shrink:0;width:5px;height:5px;display:block}.project-badge--active{color:#3fb950;background:#2ea0431f;border:1px solid #3fb95040}.project-badge--active:before{background:#3fb950;animation:2.5s ease-in-out infinite badge-pulse}[data-theme=light] .project-badge--active{color:#1a7f37;background:#2ea0431a;border-color:#2ea0434d}[data-theme=light] .project-badge--active:before{background:#1a7f37}@keyframes badge-pulse{0%,to{box-shadow:0 0 #3fb95080}60%{box-shadow:0 0 0 4px #3fb95000}}.project-badge--completed{color:#58a6ff;background:#58a6ff1a;border:1px solid #58a6ff40}.project-badge--completed:before{background:#58a6ff}[data-theme=light] .project-badge--completed{color:#0969da;background:#0969da14;border-color:#0969da40}[data-theme=light] .project-badge--completed:before{background:#0969da}.project-role{letter-spacing:.04em;color:var(--text-secondary);border:1px solid var(--border);background:var(--surface);border-radius:4px;align-items:center;padding:.18rem .5rem;font-size:.66rem;font-weight:500;line-height:1;display:inline-flex}.project-divider{border:none;border-top:1px solid var(--border);margin:0 0 1.25rem}.about-grid{flex-direction:column;gap:3.5rem;display:flex}.about-intro{grid-template-columns:1fr 240px;align-items:start;gap:2.5rem;display:grid}.about-intro>div:first-child{min-width:0}.about-photo{border:1px solid var(--border);opacity:.88;border-radius:8px;width:100%;display:block}.exp-list{flex-direction:column;gap:2rem;display:flex}.exp-role{color:var(--text);margin-bottom:.2rem;font-size:1rem;font-weight:600}.exp-org{color:var(--accent);margin-bottom:.15rem;font-size:.85rem}.exp-date{color:var(--text-secondary);margin-bottom:.75rem;font-size:.8rem}.exp-bullets{flex-direction:column;gap:.25rem;list-style:none;display:flex}.exp-bullets li{color:var(--text-secondary);overflow-wrap:break-word;padding-left:1.1rem;font-size:.9rem;line-height:1.65;position:relative}.exp-bullets li:before{content:"—";color:var(--border);font-size:.8rem;position:absolute;left:0}.edu-list{flex-direction:column;gap:.85rem;display:flex}.edu-entry{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.edu-degree{color:var(--text);font-size:.92rem;font-weight:600}.edu-institution{color:var(--text-secondary);font-size:.85rem}.edu-year{color:var(--text-secondary);white-space:nowrap;flex-shrink:0;font-size:.8rem}.section-heading{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:1.25rem;font-size:.75rem;font-weight:700}.about-text{color:var(--text-secondary);overflow-wrap:break-word;font-size:.97rem;line-height:1.8}.about-text+.about-text{margin-top:.85rem}.skills-grid{flex-wrap:wrap;gap:.5rem;display:flex}.skill-tag{background:var(--surface);border:1px solid var(--border);color:var(--text-secondary);white-space:nowrap;border-radius:6px;padding:.35rem .8rem;font-size:.85rem}.pub-list{flex-direction:column;gap:.85rem;display:flex}.pub-card{background:var(--surface);border:1px solid var(--border);color:inherit;border-radius:8px;padding:1.1rem 1.4rem;text-decoration:none;transition:border-color .15s,box-shadow .15s;display:block}.pub-card:hover{border-color:var(--accent);color:inherit;box-shadow:0 0 0 1px #58a6ff14,0 4px 16px #0006}.pub-title{color:var(--text);overflow-wrap:break-word;margin-bottom:.3rem;font-size:.93rem;font-weight:600;line-height:1.5}.pub-authors{color:var(--text-secondary);overflow-wrap:break-word;margin-bottom:.5rem;font-size:.8rem;line-height:1.5}.pub-meta{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.pub-journal{color:var(--accent);font-size:.8rem;font-style:italic}.pub-year{color:var(--text-secondary);font-size:.78rem}.pub-badge{color:var(--text-secondary);background:var(--bg);border:1px solid var(--border);border-radius:999px;align-items:center;gap:.3rem;padding:.1rem .55rem;font-size:.75rem;display:inline-flex}.pub-type-badge{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:.1rem .55rem;font-size:.68rem;font-weight:700;display:inline-flex}.pub-type-badge--preprint{color:#d29922;background:#d299220f;border-color:#d2992266}.pub-type-badge--dissertation{color:#6e40c9;background:#6e40c90f;border-color:#6e40c966}.cv-stats-section{border-bottom:1px solid var(--border);padding:2.5rem 0}.cv-stats{text-align:center;grid-template-columns:repeat(4,1fr);gap:1.5rem;display:grid}.cv-stat-value{letter-spacing:-.03em;color:var(--text);font-size:2rem;font-weight:700;display:block}.cv-stat-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.07em;margin-top:.25rem;font-size:.75rem;display:block}.cv-section{padding:3.5rem 0 5rem}.cv-tabs{border-bottom:1px solid var(--border);margin-bottom:2.5rem;display:flex}.cv-tab{color:var(--text-secondary);cursor:pointer;font-size:.9rem;font-weight:500;font-family:var(--font);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:.75rem 1.25rem;transition:color .15s,border-color .15s}.cv-tab:hover{color:var(--text)}.cv-tab--active{color:var(--text);border-bottom-color:var(--accent)}.cv-timeline{flex-direction:column;display:flex}.cv-timeline-item{gap:1.25rem;padding-bottom:1.75rem;display:flex;position:relative}.cv-timeline-item:not(:last-child):before{content:"";background:var(--border);width:1px;position:absolute;top:16px;bottom:0;left:7px}.cv-timeline-dot{border-radius:50%;flex-shrink:0;width:15px;height:15px;margin-top:4px}.cv-timeline-body{flex:1;min-width:0}.cv-timeline-header{cursor:pointer;text-align:left;width:100%;font-family:var(--font);color:inherit;background:0 0;border:none;justify-content:space-between;align-items:flex-start;padding:0;display:flex}.cv-timeline-header:hover .cv-timeline-role{color:var(--accent)}.cv-timeline-role{color:var(--text);margin-bottom:.2rem;font-size:.97rem;font-weight:600;transition:color .15s}.cv-timeline-org{color:var(--accent);margin-bottom:.12rem;font-size:.83rem}.cv-timeline-date{color:var(--text-secondary);font-size:.78rem}.cv-expand-icon{color:var(--text-secondary);-webkit-user-select:none;user-select:none;flex-shrink:0;padding-left:.5rem;font-size:1.25rem;line-height:1}.cv-timeline-bullets{flex-direction:column;gap:.35rem;margin-top:.85rem;list-style:none;display:flex}.cv-timeline-bullets li{color:var(--text-secondary);overflow-wrap:break-word;padding-left:1rem;font-size:.88rem;line-height:1.65;position:relative}.cv-timeline-bullets li:before{content:"—";color:var(--border);font-size:.78rem;position:absolute;left:0}.cv-skills-grid{grid-template-columns:1fr 1fr;gap:1.25rem;display:grid}.cv-skill-category{background:var(--surface);border:1px solid var(--border);border-top-width:3px;border-radius:8px;padding:1.25rem 1.4rem}.cv-skill-category-label{text-transform:uppercase;letter-spacing:.08em;margin-bottom:.85rem;font-size:.72rem;font-weight:700}.cv-skill-chips{flex-wrap:wrap;gap:.4rem;display:flex}.cv-skill-chip{background:var(--bg);border:1px solid var(--border);color:var(--text-secondary);border-radius:5px;padding:.28rem .65rem;font-size:.8rem}.hero-layout{grid-template-columns:1fr 220px;align-items:center;gap:3rem;display:grid}.hero-text{min-width:0}.hero-photo-col{justify-content:flex-end;display:flex}.hero-photo{object-fit:cover;object-position:center top;border:1px solid var(--border);opacity:.9;filter:grayscale(15%);border-radius:10px;width:220px;height:220px}.dimensions-section{border-bottom:1px solid var(--border);padding:3.5rem 0}.dimensions-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:1.5rem;font-size:.72rem;font-weight:700}.dimensions-grid{grid-template-columns:repeat(4,1fr);gap:1.25rem;display:grid}.dimension-card{border:1px solid var(--border);background:var(--surface);border-radius:10px;transition:border-color .15s;overflow:hidden}.dimension-card:hover{border-color:var(--text-secondary)}.dimension-img-wrap{aspect-ratio:4/3;width:100%;overflow:hidden}.dimension-img{object-fit:cover;width:100%;height:100%;transition:transform .3s;display:block}.dimension-card:hover .dimension-img{transform:scale(1.03)}.dimension-body{padding:1rem}.dimension-title{color:var(--text);margin-bottom:.35rem;font-size:.9rem;font-weight:600}.dimension-desc{color:var(--text-secondary);font-size:.82rem;line-height:1.6}.project-card--has-img{padding:0;overflow:hidden}.project-card--has-img .project-card-body{flex:1;padding:2rem}.project-card:not(.project-card--has-img) .project-card-body{padding:0}.project-card-img-wrap{aspect-ratio:16/7;width:100%;overflow:hidden}.project-card--full .project-card-img-wrap{aspect-ratio:16/6}.project-card-img{object-fit:cover;width:100%;height:100%;display:block}.project-field-photos{grid-template-columns:repeat(3,1fr);gap:.5rem;margin-bottom:1.5rem;display:grid}.project-field-photos--2x2{grid-template-columns:1fr 1fr}.project-field-photo{object-fit:cover;border:1px solid var(--border);border-radius:6px;width:100%;height:220px}.project-field-photos--2x2 .project-field-photo:first-child{object-position:center 60%}.project-field-photos--2x2 .project-field-photo:nth-child(2){object-position:center 48%}.project-field-photos--2x2 .project-field-photo:nth-child(3){object-position:center 55%}.project-field-photos--2x2 .project-field-photo:nth-child(4){object-position:center 40%}.pub-page-meta{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem;margin-bottom:3rem;display:flex}.pub-page-meta .page-subtitle{margin-bottom:0}.pub-scholar-link{color:var(--accent);white-space:nowrap;font-size:.85rem}.pub-scholar-link:hover{color:var(--accent-hover)}.interactive-strip{padding:2rem 1.5rem 2.5rem}.interactive-strip-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);max-width:1280px;margin:0 auto 1.5rem;font-size:.72rem;font-weight:700}.interactive-grid{grid-template-columns:1fr 1fr 1fr;gap:1.25rem;max-width:1280px;margin:0 auto;display:grid}.interactive-grid--two{grid-template-columns:1fr 1fr;max-width:960px}.interactive-col{flex-direction:column;min-width:0;display:flex}.interactive-col-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:.6rem;font-size:.72rem;font-weight:700}.interactive-col-content{border:1px solid var(--border);background:var(--bg);border-radius:8px;height:480px;overflow:hidden}@media (width<=900px){.interactive-grid,.interactive-grid--two{grid-template-columns:1fr}.interactive-col-content{height:420px}.dimensions-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=700px){.project-list{grid-template-columns:1fr}.project-card--full{grid-column:auto}.about-intro{grid-template-columns:1fr}.about-intro .about-photo-col{order:-1}.about-photo{max-width:280px}.cv-stats{grid-template-columns:repeat(2,1fr)}.cv-skills-grid,.hero-layout{grid-template-columns:1fr}.hero-photo-col,.project-field-photos{display:none}}@media (width<=640px){input,textarea,select{font-size:16px!important}.nav-links{display:none}.nav-hamburger{display:flex}.hero{padding:2rem 0 2.5rem}.page{padding:2.5rem 0 3.5rem}.page-subtitle{margin-bottom:2rem}.project-card{padding:1.5rem}.footer-inner{flex-direction:column;align-items:flex-start}.edu-entry{flex-direction:column;gap:.15rem}.cv-stats-section{padding:2rem 0}.cv-section{padding:2.5rem 0 3.5rem}.cv-stat-value{font-size:1.6rem}.cv-tab{padding:.65rem 1rem;font-size:.85rem}.interactive-strip{padding:1.5rem .75rem 2rem}.interactive-col-content{height:380px}}@media (width<=480px){.hero-mosaic{grid-template-columns:repeat(4,1fr)}.hero-mosaic-img{aspect-ratio:1}.hero-mosaic-img:first-child{grid-column:1/3!important}.hero-mosaic-img:nth-child(2){grid-column:3/5!important}.hero-mosaic-img:nth-child(3){grid-column:1/3!important}.hero-mosaic-img:nth-child(4){grid-column:3/5!important}.hero-mosaic-img:nth-child(5){grid-column:2/4!important}.interactive-col-content{height:340px}}@media (width<=380px){.nav-inner,.container{padding:0 1rem}.hero{padding:1.5rem 0}.pub-card{padding:.9rem 1rem}.interactive-col-content{height:300px}}.lab-root{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font);flex-direction:column;display:flex}.lab-topbar{border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:100;background:#0d1117f2;position:sticky;top:0}[data-theme=light] .lab-topbar{background:#fffffff2}.lab-topbar-inner{align-items:center;gap:1.5rem;max-width:1000px;height:3rem;margin:0 auto;padding:0 1.5rem;display:flex}.lab-back{color:var(--text-secondary);flex-shrink:0;align-items:center;gap:.35rem;font-size:.82rem;text-decoration:none;transition:color .15s;display:flex}.lab-back:hover{color:var(--text)}.lab-badge{text-transform:uppercase;letter-spacing:.1em;color:var(--accent);background:#58a6ff14;border:1px solid #58a6ff33;border-radius:4px;flex-shrink:0;padding:.15rem .5rem;font-size:.7rem;font-weight:700}.lab-nav{flex:1;gap:.25rem;display:flex}.lab-nav-link{color:var(--text-secondary);border-radius:5px;padding:.3rem .7rem;font-size:.85rem;text-decoration:none;transition:color .15s,background .15s}.lab-nav-link:hover{color:var(--text);background:#ffffff0a}.lab-nav-link.active{color:var(--text);background:#58a6ff1a}.lab-content{flex:1}.lab-gate{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;display:flex}.lab-gate-box{background:var(--surface);border:1px solid var(--border);text-align:center;border-radius:10px;width:100%;max-width:340px;padding:2.5rem 2rem}.lab-gate-title{color:var(--text);margin-bottom:.4rem;font-size:1rem;font-weight:600}.lab-gate-sub{color:var(--text-secondary);margin-bottom:1.75rem;font-size:.85rem}.lab-gate-form{flex-direction:column;gap:.75rem;display:flex}.lab-input{background:var(--bg);border:1px solid var(--border);color:var(--text);font-size:.9rem;font-family:var(--font);text-align:center;letter-spacing:.1em;border-radius:6px;outline:none;padding:.65rem .9rem;transition:border-color .15s}.lab-input:focus{border-color:var(--accent)}.lab-input--error{border-color:#f85149}.lab-gate-btn{background:var(--accent);color:#fff;cursor:pointer;font-size:.9rem;font-weight:500;font-family:var(--font);border:none;border-radius:6px;padding:.65rem;transition:background .15s}.lab-gate-btn:hover{background:var(--accent-hover)}.lab-gate-error{color:#f85149;margin-top:.25rem;font-size:.82rem}.lab-index{max-width:600px;margin:5rem auto;padding:0 1.5rem}.lab-index-title{letter-spacing:-.02em;margin-bottom:.5rem;font-size:1.5rem;font-weight:700}.lab-index-sub{color:var(--text-secondary);margin-bottom:2.5rem;font-size:.95rem}.lab-demo-grid{grid-template-columns:1fr;gap:1rem;display:grid}.lab-demo-card{background:var(--surface);border:1px solid var(--border);color:inherit;border-radius:10px;padding:1.5rem;text-decoration:none;transition:border-color .15s,box-shadow .15s;display:block}.lab-demo-card:hover{border-color:var(--accent);color:inherit;box-shadow:0 0 0 1px #58a6ff14}.lab-demo-card-header{align-items:center;gap:.75rem;margin-bottom:.5rem;display:flex}.lab-demo-icon{font-size:1.4rem;line-height:1}.lab-demo-name{color:var(--text);font-size:1rem;font-weight:600}.lab-demo-desc{color:var(--text-secondary);font-size:.88rem;line-height:1.6}.lab-chat{flex-direction:column;max-width:720px;height:calc(100vh - 3rem);margin:0 auto;padding:0 1.5rem;display:flex}.lab-chat-header{border-bottom:1px solid var(--border);flex-shrink:0;padding:1.25rem 0 1rem}.lab-chat-header h1{margin-bottom:.2rem;font-size:1rem;font-weight:600}.lab-chat-header p{color:var(--text-secondary);font-size:.82rem}.lab-chat-messages{flex-direction:column;flex:1;gap:1rem;padding:1.25rem 0;display:flex;overflow-y:auto}.lab-chat-msg{flex-direction:column;gap:.25rem;max-width:85%;display:flex}.lab-chat-msg--user{align-self:flex-end;align-items:flex-end}.lab-chat-msg--assistant{align-self:flex-start;align-items:flex-start}.lab-chat-bubble{white-space:pre-wrap;word-break:break-word;border-radius:10px;padding:.65rem 1rem;font-size:.9rem;line-height:1.65}.lab-chat-msg--user .lab-chat-bubble{background:var(--accent);color:#fff;border-radius:10px 10px 3px}.lab-chat-msg--assistant .lab-chat-bubble{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:10px 10px 10px 3px}.lab-chat-msg--assistant .lab-chat-bubble.streaming:after{content:"▋";opacity:.7;margin-left:2px;animation:.8s step-end infinite blink;display:inline-block}@keyframes blink{0%,to{opacity:.7}50%{opacity:0}}.lab-chat-label{color:var(--text-secondary);padding:0 .3rem;font-size:.72rem}.lab-chat-chips-panel{flex-direction:column;gap:.4rem;padding-bottom:.5rem;display:flex}.lab-chat-suggestions-toggle{color:var(--text-secondary);font-size:.75rem;font-family:var(--font);cursor:pointer;touch-action:manipulation;background:0 0;border:none;align-self:flex-start;align-items:center;gap:.3rem;padding:.2rem 0;transition:color .15s;display:inline-flex}.lab-chat-suggestions-toggle:hover{color:var(--text)}.lab-chat-suggestions{flex-flow:wrap;gap:.5rem;padding-bottom:.25rem;display:flex}.lab-chat-suggestion{background:var(--surface);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;font-size:.8rem;font-family:var(--font);white-space:nowrap;border-radius:999px;flex-shrink:0;padding:.3rem .85rem;transition:color .15s,border-color .15s}.lab-chat-suggestion:hover{color:var(--text);border-color:var(--text-secondary)}.lab-chat-form{border-top:1px solid var(--border);flex-shrink:0;gap:.6rem;padding:1rem 0 1.25rem;display:flex}.lab-chat-input{background:var(--surface);border:1px solid var(--border);color:var(--text);font-size:.9rem;font-family:var(--font);resize:none;border-radius:8px;outline:none;flex:1;padding:.65rem 1rem;transition:border-color .15s}.lab-chat-input:focus{border-color:var(--accent)}.lab-chat-input::placeholder{color:var(--text-secondary)}.lab-chat-send{background:var(--accent);color:#fff;cursor:pointer;font-size:.9rem;font-weight:500;font-family:var(--font);border:none;border-radius:8px;flex-shrink:0;padding:0 1.1rem;transition:background .15s}.lab-chat-send:hover:not(:disabled){background:var(--accent-hover)}.lab-chat-send:disabled{opacity:.4;cursor:not-allowed}.lab-chat-no-key{text-align:center;background:var(--surface);border:1px solid var(--border);max-width:480px;color:var(--text-secondary);border-radius:10px;margin:3rem auto;padding:2rem;font-size:.9rem}.lab-chat-no-key code{background:var(--bg);border:1px solid var(--border);color:var(--accent);border-radius:4px;padding:.2rem .45rem;font-size:.85rem}.lab-timeline-page{max-width:760px;margin:0 auto;padding:2rem 1.5rem 4rem}.lab-timeline-header{margin-bottom:2rem}.lab-timeline-header h1{margin-bottom:.35rem;font-size:1.25rem;font-weight:700}.lab-timeline-header p{color:var(--text-secondary);font-size:.88rem}.lab-timeline-filters{flex-wrap:wrap;gap:.5rem;margin-bottom:2rem;display:flex}.lab-filter-btn{background:var(--surface);border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;font-size:.8rem;font-weight:500;font-family:var(--font);border-radius:999px;align-items:center;gap:.4rem;padding:.3rem .9rem;transition:all .15s;display:flex}.lab-filter-btn:hover{color:var(--text)}.lab-filter-btn.active{color:#fff;border-color:#0000}.lab-filter-btn--work.active{background:#238636}.lab-filter-btn--education.active{background:#1f6feb}.lab-filter-btn--project.active{background:#9e6a03}.lab-filter-btn--all.active{background:#6e40c9}.lab-timeline-dot-indicator{border-radius:50%;flex-shrink:0;width:8px;height:8px}.lab-tl{flex-direction:column;display:flex}.lab-tl-item{gap:1.25rem;padding-bottom:1.5rem;display:flex;position:relative}.lab-tl-item:not(:last-child):before{content:"";background:var(--border);width:1px;position:absolute;top:18px;bottom:0;left:7px}.lab-tl-dot{cursor:pointer;border-radius:50%;flex-shrink:0;width:15px;height:15px;margin-top:5px;transition:transform .15s}.lab-tl-dot:hover{transform:scale(1.3)}.lab-tl-dot--work{background:#238636}.lab-tl-dot--education{background:#1f6feb}.lab-tl-dot--project{background:#9e6a03}.lab-tl-body{flex:1;min-width:0}.lab-tl-trigger{cursor:pointer;text-align:left;width:100%;font-family:var(--font);color:inherit;background:0 0;border:none;justify-content:space-between;align-items:flex-start;gap:.5rem;padding:0;display:flex}.lab-tl-trigger:hover .lab-tl-title{color:var(--accent)}.lab-tl-title{color:var(--text);margin-bottom:.18rem;font-size:.95rem;font-weight:600;transition:color .15s}.lab-tl-org{color:var(--accent);margin-bottom:.12rem;font-size:.82rem}.lab-tl-date{color:var(--text-secondary);font-size:.78rem}.lab-tl-chevron{color:var(--text-secondary);flex-shrink:0;padding-top:2px;font-size:1rem;transition:transform .2s}.lab-tl-chevron.open{transform:rotate(180deg)}.lab-tl-details{flex-direction:column;gap:.3rem;margin-top:.75rem;display:flex}.lab-tl-details li{color:var(--text-secondary);padding-left:1rem;font-size:.87rem;line-height:1.6;list-style:none;position:relative}.lab-tl-details li:before{content:"—";color:var(--border);font-size:.78rem;position:absolute;left:0}.lab-skills-section{margin-top:3rem}.lab-skills-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:1.25rem;font-size:.72rem;font-weight:700}.lab-skills-categories{flex-direction:column;gap:1rem;display:flex}.lab-skill-row{grid-template-columns:130px 1fr;align-items:center;gap:1rem;display:grid}.lab-skill-row-label{color:var(--text-secondary);font-size:.8rem;font-weight:500}.lab-skill-bar-wrap{background:var(--surface);border:1px solid var(--border);border-radius:999px;height:8px;overflow:hidden}.lab-skill-bar{background:var(--accent);border-radius:999px;height:100%;transition:width .8s cubic-bezier(.25,.46,.45,.94)}.lab-terminal-page{flex-direction:column;justify-content:center;align-items:center;height:calc(100vh - 3rem);padding:1.5rem;display:flex}.lab-terminal-window{border:1px solid var(--border);background:#0d1117;border-radius:10px;flex-direction:column;width:100%;max-width:820px;height:100%;max-height:620px;display:flex;overflow:hidden;box-shadow:0 8px 32px #00000080}.lab-terminal-titlebar{border-bottom:1px solid var(--border);background:#1c2128;flex-shrink:0;align-items:center;gap:.5rem;padding:.6rem 1rem;display:flex}.lab-terminal-dot{border-radius:50%;width:12px;height:12px}.lab-terminal-dot--red{background:#f85149}.lab-terminal-dot--yellow{background:#d29922}.lab-terminal-dot--green{background:#3fb950}.lab-terminal-title{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;margin-left:.5rem;font-family:SF Mono,Cascadia Code,Fira Code,monospace;font-size:.78rem;overflow:hidden}.lab-terminal-output{flex:1;padding:1rem;font-family:SF Mono,Cascadia Code,Fira Code,Consolas,monospace;font-size:.85rem;line-height:1.65;overflow-y:auto}.lab-terminal-line{white-space:pre-wrap;word-break:break-word}.lab-terminal-line--input{color:#39d353}.lab-terminal-line--output{color:#b8c4cf}.lab-terminal-line--success{color:#4ae168}.lab-terminal-line--error{color:#f85149}.lab-terminal-line--accent{color:#39d353}.lab-terminal-line--heading{color:#e6edf3;font-weight:700}.lab-terminal-line--empty{height:.5rem}.lab-terminal-line--dim{color:#8d97a5}.lab-terminal-line--warning{color:#d29922}.lab-terminal-line--separator{color:#4a5568;letter-spacing:0}.lab-terminal-input-row{border-top:1px solid var(--border);flex-shrink:0;align-items:center;gap:.5rem;padding:.6rem 1rem;display:flex}.lab-terminal-prompt{color:#39d353;flex-shrink:0;font-family:SF Mono,Cascadia Code,Fira Code,Consolas,monospace;font-size:.85rem}.lab-terminal-input{color:var(--text);caret-color:#39d353;background:0 0;border:none;outline:none;flex:1;font-family:SF Mono,Cascadia Code,Fira Code,Consolas,monospace;font-size:.85rem}.lab-terminal-enter{color:#39d353;cursor:pointer;touch-action:manipulation;background:#39d3531a;border:1px solid #39d35338;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;width:34px;height:28px;transition:background .15s,border-color .15s,transform .1s;display:flex}.lab-terminal-enter:hover:not(:disabled){background:#39d35333;border-color:#39d35366}.lab-terminal-enter:active:not(:disabled){transform:scale(.92)}.lab-terminal-enter:disabled{opacity:.3;cursor:not-allowed}.lab-terminal-page--embedded{justify-content:flex-start;align-items:stretch;height:100%;padding:0}.lab-terminal-page--embedded .lab-terminal-window{max-height:none;box-shadow:none;border:none;border-radius:0}.lab-chat--embedded{max-width:none;height:100%;margin:0;padding:0 .75rem}.lab-timeline-page--embedded{max-width:none;height:100%;margin:0;padding:1rem 1.25rem;overflow-y:auto}@media (width<=640px){.lab-terminal-page{padding:.75rem}.lab-terminal-output{padding:.75rem;font-size:.78rem}.lab-terminal-input-row{padding:.5rem .75rem}.lab-terminal-prompt,.lab-terminal-input{font-size:.78rem}.lab-topbar-inner{gap:1rem;padding:0 1rem}.lab-chat{padding:0 .5rem}}@media (width<=380px){.lab-terminal-output{font-size:.72rem}}
