:root{--color-primary:#1e3a8a;--color-primary-dark:#0f172a;--color-primary-light:#3b82f6;--color-secondary:#0ea5e9;--color-accent:#10b981;--color-text:#1e293b;--color-text-muted:#64748b;--color-text-light:#94a3b8;--color-bg:#ffffff;--color-bg-alt:#f8fafc;--color-bg-card:#ffffff;--color-border:#e2e8f0;--color-dark-bg:#0f172a;--color-dark-bg-alt:#1e293b;--color-dark-text:#f1f5f9;--color-dark-text-muted:#94a3b8;--color-dark-card:#1e293b;--color-dark-border:#334155;--spacing-xs:0.125rem;--spacing-sm:0.375rem;--spacing-md:0.75rem;--spacing-lg:1rem;--spacing-xl:1.25rem;--spacing-2xl:1.5rem;--spacing-3xl:2rem;--font-sans:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--font-mono:'JetBrains Mono','Courier New',monospace;--font-size-xs:0.7rem;--font-size-sm:0.8rem;--font-size-base:0.95rem;--font-size-lg:1.05rem;--font-size-xl:1.15rem;--font-size-2xl:1.35rem;--font-size-3xl:1.6rem;--font-size-4xl:1.9rem;--shadow-sm:0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg:0 10px 15px -3px rgb(0 0 0 / 0.1);--radius-sm:0.25rem;--radius-md:0.5rem;--radius-lg:0.75rem;--radius-full:9999px;--transition-fast:150ms ease-in-out;--transition-base:250ms ease-in-out}[data-theme=dark]{--color-bg:var(--color-dark-bg);--color-bg-alt:var(--color-dark-bg-alt);--color-bg-card:var(--color-dark-card);--color-text:var(--color-dark-text);--color-text-muted:var(--color-dark-text-muted);--color-border:var(--color-dark-border)}*,::after,::before{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:80px}body{font-family:var(--font-sans);font-size:var(--font-size-base);line-height:1.6;color:var(--color-text);background-color:var(--color-bg);transition:background-color var(--transition-base),color var(--transition-base)}h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.2;margin-bottom:var(--spacing-md);color:var(--color-text)}h1{font-size:var(--font-size-4xl)}h2{font-size:var(--font-size-3xl)}h3{font-size:var(--font-size-2xl)}h4{font-size:var(--font-size-xl)}h5{font-size:var(--font-size-lg)}h6{font-size:var(--font-size-base)}p{margin-bottom:var(--spacing-md);color:var(--color-text-muted)}a{color:var(--color-primary);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--color-primary-light);text-decoration:underline}.container{max-width:1200px;margin:0 auto;padding:0 var(--spacing-md)}.section{padding:var(--spacing-lg) 0}.section-alt{background-color:var(--color-bg-alt)}.site-header{position:sticky;top:0;z-index:1000;background-color:var(--color-bg-card);border-bottom:1px solid var(--color-border);box-shadow:var(--shadow-sm);transition:all var(--transition-base)}.header-content{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-sm) var(--spacing-md);max-width:1200px;margin:0 auto;min-height:60px}.lab-name{font-size:var(--font-size-lg);font-weight:700;color:var(--color-primary);display:flex;align-items:center;gap:var(--spacing-xs)}.lab-name::before{content:"🧬";font-size:1.5rem}.nav-links{display:flex;gap:var(--spacing-lg);list-style:none;align-items:center}.nav-links a{color:var(--color-text);font-weight:500;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-md);transition:all var(--transition-fast);text-decoration:none;font-size:var(--font-size-sm)}.nav-links a.active,.nav-links a:hover{background-color:var(--color-bg-alt);color:var(--color-primary)}.theme-toggle{background:0 0;border:1px solid var(--color-border);border-radius:var(--radius-full);width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:.9rem;transition:all var(--transition-fast);font-size:1.2rem}.theme-toggle:hover{background-color:var(--color-bg-alt);border-color:var(--color-primary)}.menu-toggle{display:none;background:0 0;border:none;font-size:1.5rem;cursor:pointer;color:var(--color-text)}.hero{padding:var(--spacing-xl) 0;background:linear-gradient(135deg,var(--color-bg-alt) 0,var(--color-bg) 100%)}.hero-content{display:grid;grid-template-columns:1fr 2fr;gap:var(--spacing-lg);align-items:center}.hero-image{text-align:center}.hero-image img{width:180px;height:180px;border-radius:var(--radius-lg);object-fit:cover;border:3px solid var(--color-primary);box-shadow:var(--shadow-md)}.hero-text h1{font-size:var(--font-size-3xl);margin-bottom:var(--spacing-xs);color:var(--color-primary-dark);font-weight:800;line-height:1.1}.hero-titles{display:flex;flex-direction:column;gap:var(--spacing-xs);margin-bottom:var(--spacing-md)}.title-line{font-size:var(--font-size-base);color:var(--color-text-muted);font-weight:500;line-height:1.2}.affiliation{font-size:var(--font-size-sm);color:var(--color-text);margin-bottom:var(--spacing-md);line-height:1.2}.affiliation a{font-weight:600}.hero-contact{display:grid;grid-template-columns:auto 1fr;gap:var(--spacing-xs) var(--spacing-md);margin-bottom:var(--spacing-md);font-size:var(--font-size-xs)}.hero-contact dt{font-weight:600;color:var(--color-text);padding-top:var(--spacing-xs)}.hero-contact dd{color:var(--color-text-muted);margin:0;padding-top:var(--spacing-xs)}.hero-links{display:flex;gap:var(--spacing-sm);flex-wrap:wrap}.hero-link-btn{display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-md);background-color:var(--color-primary);color:#fff;border-radius:var(--radius-md);font-weight:600;text-decoration:none;transition:all var(--transition-fast);border:2px solid transparent;font-size:var(--font-size-sm)}.hero-link-btn:hover{background-color:var(--color-primary-dark);transform:translateY(-1px);text-decoration:none;box-shadow:var(--shadow-sm)}.hero-link-btn.secondary{background-color:transparent;color:var(--color-primary);border-color:var(--color-primary);font-size:var(--font-size-sm)}.hero-link-btn.secondary:hover{background-color:var(--color-primary);color:#fff}.quick-nav{background-color:var(--color-bg-card);border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}.quick-nav-content{display:flex;justify-content:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);flex-wrap:wrap}.quick-nav a{padding:var(--spacing-xs) var(--spacing-md);background-color:var(--color-bg-alt);color:var(--color-text);border-radius:var(--radius-full);font-weight:600;text-decoration:none;transition:all var(--transition-fast);border:2px solid transparent;font-size:var(--font-size-sm)}.quick-nav a:hover{background-color:var(--color-primary);color:#fff;transform:translateY(-1px);text-decoration:none}.card{background-color:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--spacing-md);transition:all var(--transition-fast)}.card:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}.card-header{display:flex;align-items:center;gap:var(--spacing-sm);margin-bottom:var(--spacing-sm)}.card-avatar{width:60px;height:60px;border-radius:var(--radius-lg);object-fit:cover;border:2px solid var(--color-border)}.card-title{font-size:var(--font-size-lg);font-weight:700;color:var(--color-primary);margin-bottom:var(--spacing-xs)}.card-subtitle{font-size:var(--font-size-xs);color:var(--color-text-muted);font-weight:500}.card-body{color:var(--color-text-muted);font-size:var(--font-size-sm);line-height:1.3}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--spacing-md)}.grid-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--spacing-md)}.section-header{text-align:center;margin-bottom:var(--spacing-lg)}.section-header h2{font-size:var(--font-size-2xl);color:var(--color-primary);position:relative;display:inline-block;margin:0}.section-header h2::after{content:'';position:absolute;bottom:-6px;left:50%;transform:translateX(-50%);width:40px;height:2px;background:var(--color-secondary);border-radius:2px}.section-description{text-align:center;color:var(--color-text-muted);max-width:700px;margin:var(--spacing-sm) auto 0;font-size:var(--font-size-sm);line-height:1.3}.badge{display:inline-block;padding:.15rem .5rem;background-color:var(--color-bg-alt);color:var(--color-text);border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;letter-spacing:.5px}.badge-primary{background-color:var(--color-primary);color:#fff}.badge-success{background-color:var(--color-accent);color:#fff}.badge-accent{background-color:var(--color-secondary);color:#fff}ul.clean-list{list-style:none;padding:0;font-size:var(--font-size-sm)}ul.clean-list li{padding:var(--spacing-xs) 0;border-bottom:1px solid var(--color-border);line-height:1.3}ul.clean-list li:last-child{border-bottom:none}.award-item{padding:var(--spacing-md);border-left:2px solid var(--color-primary);background-color:var(--color-bg-alt);border-radius:0 var(--radius-md) var(--radius-md) 0;margin-bottom:var(--spacing-sm)}.award-year{font-weight:700;color:var(--color-primary);font-size:var(--font-size-base)}.award-title{font-weight:600;color:var(--color-text);margin-top:var(--spacing-xs);font-size:var(--font-size-sm)}.pub-item{padding:var(--spacing-md);border:1px solid var(--color-border);border-radius:var(--radius-md);margin-bottom:var(--spacing-sm);background-color:var(--color-bg-card)}.pub-year{font-weight:700;color:var(--color-primary);font-size:var(--font-size-xs);margin-bottom:var(--spacing-xs);text-transform:uppercase;letter-spacing:.5px}.pub-title{font-weight:600;font-size:var(--font-size-base);color:var(--color-text);margin-bottom:var(--spacing-xs);line-height:1.25}.pub-journal{font-style:italic;color:var(--color-text-muted);margin-bottom:var(--spacing-xs);font-size:var(--font-size-sm)}.pub-links{display:flex;gap:var(--spacing-sm);flex-wrap:wrap}.pub-link{font-size:var(--font-size-xs);font-weight:600;padding:var(--spacing-xs) var(--spacing-sm);background-color:var(--color-bg-alt);border-radius:var(--radius-sm);text-decoration:none;transition:all var(--transition-fast)}.pub-link:hover{background-color:var(--color-primary);color:#fff;text-decoration:none}.software-grid{display:grid;gap:var(--spacing-sm)}.software-item{display:grid;grid-template-columns:auto 1fr auto;gap:var(--spacing-sm);align-items:start;padding:var(--spacing-md);border:1px solid var(--color-border);border-radius:var(--radius-md);background-color:var(--color-bg-card);transition:all var(--transition-fast);font-size:var(--font-size-sm)}.software-item:hover{border-color:var(--color-primary);box-shadow:var(--shadow-sm)}.software-name{font-weight:700;font-size:var(--font-size-base);color:var(--color-primary);line-height:1.2}.software-desc{color:var(--color-text-muted);font-size:var(--font-size-xs);line-height:1.25}.software-year{color:var(--color-text-light);font-weight:600;font-size:var(--font-size-xs);padding-top:var(--spacing-xs)}.controls{display:flex;gap:var(--spacing-sm);margin-bottom:var(--spacing-md);flex-wrap:wrap;align-items:center}.search-input{flex:1;min-width:180px;padding:var(--spacing-xs) var(--spacing-md);border:2px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);background-color:var(--color-bg-card);color:var(--color-text);transition:border-color var(--transition-fast);min-height:36px}.search-input:focus{outline:0;border-color:var(--color-primary)}.filter-btn{padding:var(--spacing-xs) var(--spacing-md);background-color:var(--color-bg-card);border:2px solid var(--color-border);border-radius:var(--radius-md);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast);color:var(--color-text);min-height:36px}.filter-btn.active,.filter-btn:hover{background-color:var(--color-primary);color:#fff;border-color:var(--color-primary)}.course-item{padding:var(--spacing-md);background-color:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-md);margin-bottom:var(--spacing-sm)}.course-code{font-family:var(--font-mono);background-color:var(--color-bg-alt);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);font-weight:600;color:var(--color-primary);font-size:var(--font-size-sm)}.course-achievements{margin-top:var(--spacing-md);padding:var(--spacing-sm);background-color:var(--color-bg-alt);border-radius:var(--radius-md);font-size:var(--font-size-xs);color:var(--color-accent);font-weight:600;line-height:1.3}.hobby-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--spacing-md)}.hobby-card{text-align:center;padding:var(--spacing-md);background-color:var(--color-bg-alt);border-radius:var(--radius-lg);font-size:var(--font-size-sm)}.hobby-icon{font-size:2.2rem;margin-bottom:var(--spacing-xs)}.site-footer{background-color:var(--color-bg-alt);border-top:1px solid var(--color-border);padding:var(--spacing-lg) 0;margin-top:var(--spacing-xl)}.footer-content{text-align:center;color:var(--color-text-muted);font-size:var(--font-size-xs);line-height:1.4}.footer-content p{margin-bottom:var(--spacing-xs)}.alert{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-md);margin-bottom:var(--spacing-md);border-left:3px solid;font-size:var(--font-size-sm)}.alert-info{background-color:#dbeafe;color:#1e40af;border-color:#3b82f6}.alert-warning{background-color:#fef3c7;color:#92400e;border-color:#f59e0b}[data-theme=dark] .alert-info{background-color:#1e3a8a;color:#bfdbfe}[data-theme=dark] .alert-warning{background-color:#78350f;color:#fde68a}.text-center{text-align:center}.text-right{text-align:right}.mt-sm{margin-top:var(--spacing-sm)}.mt-md{margin-top:var(--spacing-md)}.mt-lg{margin-top:var(--spacing-lg)}.mb-sm{margin-bottom:var(--spacing-sm)}.mb-md{margin-bottom:var(--spacing-md)}.mb-lg{margin-bottom:var(--spacing-lg)}.hidden{display:none}.loading{text-align:center;padding:var(--spacing-lg);color:var(--color-text-muted)}.empty-state{text-align:center;padding:var(--spacing-xl);color:var(--color-text-muted)}.empty-state h3{color:var(--color-text)}@media (max-width:968px){.hero-content{grid-template-columns:1fr;text-align:center}.hero-image{order:-1}.hero-contact{grid-template-columns:1fr;text-align:left}.hero-links{justify-content:center}}@media (max-width:768px){.nav-links{position:fixed;top:60px;left:0;right:0;background-color:var(--color-bg-card);flex-direction:column;padding:var(--spacing-md);gap:var(--spacing-xs);box-shadow:var(--shadow-lg);transform:translateY(-150%);transition:transform var(--transition-base);border-bottom:1px solid var(--color-border);max-height:70vh;overflow-y:auto}.nav-links.active{transform:translateY(0)}.menu-toggle{display:block;font-size:1.5rem}.hero-image img{width:160px;height:160px}.hero{padding:var(--spacing-lg) 0}.grid-2,.grid-3{grid-template-columns:1fr;gap:var(--spacing-sm)}.software-item{grid-template-columns:1fr;gap:var(--spacing-xs)}.controls{flex-direction:column;align-items:stretch;gap:var(--spacing-xs)}.search-input{width:100%;min-height:40px}.container{padding:0 var(--spacing-sm)}.section{padding:var(--spacing-md) 0}}@media (max-width:480px){.hero-image img{width:140px;height:140px;border-width:2px}.hero-text h1{font-size:var(--font-size-2xl);line-height:1.1}.title-line{font-size:var(--font-size-sm)}.quick-nav-content{gap:var(--spacing-xs);padding:var(--spacing-sm)}.quick-nav a{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs)}.header-content{padding:var(--spacing-xs) var(--spacing-sm);min-height:50px}.lab-name{font-size:var(--font-size-base)}}@media print{.alert,.controls,.menu-toggle,.quick-nav,.site-footer,.site-header,.theme-toggle{display:none!important}body{background:#fff;color:#000;font-size:11pt}.container{max-width:100%;padding:0}a{color:#000;text-decoration:underline}.card,.course-item,.pub-item{border:1px solid #000;page-break-inside:avoid;padding:8px!important;margin-bottom:8px!important}.pub-item{padding:6px!important;margin-bottom:6px!important}h1{font-size:18pt}h2{font-size:14pt}h3{font-size:12pt}h4{font-size:11pt}p{font-size:10pt;margin:4px 0}}a:focus,button:focus,input:focus{outline:2px solid var(--color-secondary);outline-offset:2px}@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .5s ease-out forwards}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--color-bg-alt)}::-webkit-scrollbar-thumb{background:var(--color-text-light);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-primary)}