*{margin:0;padding:0;box-sizing:border-box}:root{--color-text: #1a1a1a;--color-text-secondary: #555;--color-text-muted: #888;--color-text-faint: #aaa;--color-bg: #ffffff;--color-border: #e8e8e8;--color-border-light: #f2f2f2;--color-accent: #1a1a1a;--space-xs: .75rem;--space-sm: 1.5rem;--space-md: 3rem;--space-lg: 6rem;--space-xl: 10rem;--space-2xl: 16rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.9;word-spacing:.15em;font-weight:400;color:var(--color-text);background-color:var(--color-bg);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;min-height:100vh;background:var(--color-bg)}#root{min-height:100vh;display:flex;flex-direction:column}.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s cubic-bezier(.25,.1,.25,1),transform .7s cubic-bezier(.25,.1,.25,1)}.reveal.revealed{opacity:1;transform:translateY(0)}.reveal-delay-1{transition-delay:.1s}.reveal-delay-2{transition-delay:.2s}.reveal-delay-3{transition-delay:.3s}@keyframes fadeIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.page-enter{animation:fadeIn .5s cubic-bezier(.25,.1,.25,1) forwards}.link-underline{position:relative;text-decoration:none;color:var(--color-text);font-weight:500}.link-underline:after{content:"";position:absolute;bottom:-2px;left:0;width:100%;height:1px;background:var(--color-text);transform:scaleX(0);transform-origin:right;transition:transform .3s cubic-bezier(.25,.1,.25,1)}.link-underline:hover:after{transform:scaleX(1);transform-origin:left}::selection{background:var(--color-text);color:var(--color-bg)}.navigation{background:var(--color-bg);border-bottom:1px solid var(--color-border-light);position:sticky;top:0;z-index:1000}.nav-container{max-width:1200px;margin:0 auto;padding:2.5rem var(--space-lg);display:flex;justify-content:space-between;align-items:center}.nav-logo{text-decoration:none;color:var(--color-text);font-weight:600;font-size:1.125rem;letter-spacing:-.5px}.nav-menu{display:flex;gap:3rem;list-style:none;margin:0;padding:0}.nav-link{color:var(--color-text-muted);text-decoration:none;font-weight:400;font-size:.9375rem;transition:color .3s ease;padding-bottom:2px}.nav-link:hover,.nav-link.active{color:var(--color-text)}.nav-link.active:after{transform:scaleX(1)}@media(max-width:768px){.nav-container{padding:1.5rem var(--space-md)}.nav-menu{gap:2rem}}.hero{padding:var(--space-2xl) 0 var(--space-xl);margin-bottom:var(--space-xl);min-height:70vh;display:flex;align-items:center}.hero-content{max-width:640px}.hero-greeting{font-size:1rem;color:var(--color-text-muted);margin-bottom:var(--space-sm);font-weight:400;letter-spacing:.5px;text-transform:uppercase}.hero-title{font-size:clamp(3rem,8vw,5rem);font-weight:700;color:var(--color-text);letter-spacing:-2px;line-height:1;margin-bottom:var(--space-md)}.hero-description{font-size:1.125rem;color:var(--color-text-secondary);line-height:2.1;word-spacing:.2em}.section{margin-bottom:var(--space-2xl)}.section-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:var(--space-lg);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-border-light)}.section-title{font-size:1.25rem;font-weight:600;color:var(--color-text);letter-spacing:-.3px}.section-header .link-underline{font-size:.875rem;color:var(--color-text-muted)}.section-header .link-underline:hover{color:var(--color-text)}.articles-preview{display:flex;flex-direction:column;gap:0}.article-preview-card{display:block;text-decoration:none;color:inherit;padding:var(--space-md) 0 var(--space-lg);border-bottom:1px solid var(--color-border-light);transition:all .3s ease}.article-preview-card:first-child{padding-top:0}.article-preview-card:hover{padding-left:var(--space-sm)}.article-preview-card:hover h3{color:var(--color-text)}.article-preview-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem}.article-preview-reading-time{font-size:.75rem;color:var(--color-text-faint);letter-spacing:.3px;white-space:nowrap;flex-shrink:0}.article-preview-meta{display:flex;align-items:center;gap:var(--space-sm)}.article-preview-date{font-size:.8125rem;color:var(--color-text-faint);letter-spacing:.3px}.article-preview-tags{display:flex;gap:.5rem}.article-preview-card h3{font-size:1.25rem;font-weight:600;color:var(--color-text);margin-bottom:.5rem;letter-spacing:-.3px;transition:color .3s ease}.article-preview-card p{font-size:.9375rem;color:var(--color-text-muted);line-height:2}.tag{font-size:.75rem;color:var(--color-text-faint);letter-spacing:.3px;text-transform:uppercase}.projects-preview{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--space-md)}.project-preview-card{padding:var(--space-lg) var(--space-md);border:1px solid var(--color-border-light);transition:all .3s ease}.project-preview-card:hover{border-color:var(--color-border);transform:translateY(-2px)}.project-preview-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.75rem}.project-preview-card h3{font-size:1.125rem;font-weight:600;color:var(--color-text);letter-spacing:-.3px}.project-preview-meta{display:flex;align-items:baseline;gap:var(--space-xs)}.project-status{font-size:.75rem;color:var(--color-text-faint);text-transform:uppercase;letter-spacing:.5px}.project-year{font-size:.8125rem;color:var(--color-text-faint)}.project-preview-card p{font-size:.9375rem;color:var(--color-text-muted);line-height:2;margin-bottom:var(--space-sm)}.project-preview-tech{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:var(--space-sm)}.project-preview-links{display:flex;gap:1.5rem}.project-preview-links .link-underline{font-size:.875rem;color:var(--color-text-muted)}.project-preview-links .link-underline:hover{color:var(--color-text)}@media(max-width:768px){.hero{padding:var(--space-xl) 0;margin-bottom:var(--space-lg);min-height:50vh}.hero-title{letter-spacing:-1px}.section{margin-bottom:var(--space-xl)}.projects-preview{grid-template-columns:1fr}}.articles-page{max-width:720px;margin:0 auto;padding:var(--space-xl) 0 var(--space-2xl)}.page-header{margin-bottom:var(--space-xl)}.page-header h1{font-size:clamp(2rem,5vw,2.75rem);color:var(--color-text);margin-bottom:var(--space-sm);font-weight:700;letter-spacing:-1px}.page-header p{color:var(--color-text-muted);font-size:1.0625rem;line-height:2.1}.articles-list{display:flex;flex-direction:column}.article-item{text-decoration:none;color:inherit;transition:all .3s ease;padding:var(--space-md) 0 var(--space-md);border-bottom:1px solid var(--color-border-light)}.article-item:first-child{padding-top:0}.article-item:hover{padding-left:var(--space-sm)}.article-item-top{display:flex;justify-content:space-between;align-items:flex-start}.article-reading-time{font-size:.75rem;color:var(--color-text-faint);letter-spacing:.3px;white-space:nowrap;flex-shrink:0}.article-meta{display:flex;gap:var(--space-sm);margin-bottom:var(--space-sm);flex-wrap:wrap;align-items:center}.article-date{color:var(--color-text-faint);font-size:.8125rem;letter-spacing:.3px}.article-tags{display:flex;gap:.5rem}.article-item h2{color:var(--color-text);margin-bottom:.75rem;font-size:1.5rem;font-weight:600;letter-spacing:-.5px;transition:color .3s ease}.article-item p{color:var(--color-text-secondary);line-height:2.1;margin-bottom:var(--space-sm)}.article-series{display:inline-block;font-size:.75rem;color:var(--color-text-faint);letter-spacing:.5px;text-transform:uppercase;margin-bottom:var(--space-xs)}.read-more{font-size:.875rem;color:var(--color-text-muted);display:inline-block}@media(max-width:768px){.articles-page{padding:var(--space-lg) 0}.page-header h1{letter-spacing:-.5px}.article-item{padding:var(--space-md) 0}}.article-detail{max-width:680px;margin:0 auto;padding:var(--space-xl) 0 var(--space-2xl)}.article-cover-container{margin-bottom:var(--space-lg);border-radius:8px;overflow:hidden;box-shadow:0 4px 12px #00000014}.article-cover{width:100%;height:auto;display:block;max-height:400px;object-fit:cover}.article-figure{margin:var(--space-md) 0;padding:0}.article-image{width:100%;height:auto;border-radius:6px;box-shadow:0 2px 8px #0000000f;display:block;margin-bottom:.75rem}.article-figcaption{font-size:.875rem;color:var(--color-text-faint);text-align:center;font-style:italic;line-height:1.6;padding:0 .5rem}.back-link{display:inline-block;margin-bottom:var(--space-xl);font-size:.875rem;color:var(--color-text-muted)}.back-link:hover{color:var(--color-text)}.article-header{margin-bottom:var(--space-xl)}.article-header .article-meta{display:flex;gap:var(--space-sm);flex-wrap:wrap;align-items:center;margin-bottom:var(--space-md)}.article-header .article-date{color:var(--color-text-faint);font-size:.8125rem;letter-spacing:.3px}.article-header-tags{display:flex;gap:.5rem}.article-header h1{font-size:clamp(2rem,5vw,2.75rem);color:var(--color-text);font-weight:700;line-height:1.2;letter-spacing:-1px}.article-content{color:var(--color-text-secondary)}.article-section{margin-bottom:var(--space-xl)}.article-section h2{font-size:1.25rem;font-weight:600;color:var(--color-text);margin-bottom:var(--space-sm);letter-spacing:-.3px;text-transform:capitalize}.article-section p{font-size:1.0625rem;line-height:2.2;word-spacing:.2em;margin-bottom:1.5rem;color:var(--color-text-secondary)}.article-section p:last-child{margin-bottom:0}.article-series-label{display:inline-block;font-size:.75rem;color:var(--color-text-faint);letter-spacing:.5px;text-transform:uppercase;margin-bottom:var(--space-sm)}.series-nav{margin-top:var(--space-lg);padding-top:var(--space-md);border-top:1px solid var(--color-border-light)}.series-nav-title{font-size:.8125rem;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-md)}.series-nav-list{display:flex;flex-direction:column;gap:.5rem}.series-nav-item{display:flex;align-items:baseline;gap:var(--space-sm);text-decoration:none;padding:.75rem 0;transition:padding-left .3s ease}.series-nav-item:hover{padding-left:var(--space-xs)}.series-nav-part{font-size:.75rem;color:var(--color-text-faint);text-transform:uppercase;letter-spacing:.3px;flex-shrink:0}.series-nav-name{font-size:.9375rem;color:var(--color-text-muted);transition:color .3s ease}.series-nav-item:hover .series-nav-name{color:var(--color-text)}.series-nav-item.current .series-nav-name{color:var(--color-text);font-weight:500}@media(max-width:768px){.article-detail{padding:var(--space-lg) 0}.article-header h1{letter-spacing:-.5px}.article-section p{font-size:1rem}.article-cover{max-height:250px}.article-figure{margin:var(--space-sm) 0}}.projects-page{padding:var(--space-xl) 0 var(--space-2xl)}.projects-page .page-header{margin-bottom:var(--space-xl)}.projects-page .page-header h1{font-size:clamp(2rem,5vw,2.75rem);color:var(--color-text);margin-bottom:var(--space-sm);font-weight:700;letter-spacing:-1px}.projects-page .page-header p{color:var(--color-text-muted);font-size:1.0625rem}.projects-list{display:flex;flex-direction:column}.project-card{padding:var(--space-md) var(--space-lg);border:1px solid var(--color-border-light);border-radius:8px;background:var(--color-bg);transition:all .4s cubic-bezier(.25,.1,.25,1);margin-bottom:var(--space-lg);position:relative;overflow:hidden}.project-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,#1a1a1a 0%,transparent 100%);opacity:0;transition:opacity .4s ease}.project-card:hover{border-color:var(--color-border);box-shadow:0 8px 24px #1a1a1a0d;transform:translateY(-4px)}.project-card:hover:before{opacity:1}.project-card-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.75rem}.project-card h2{font-size:1.5rem;font-weight:600;color:var(--color-text);letter-spacing:-.5px}.project-card-meta{display:flex;align-items:baseline;gap:var(--space-sm)}.project-status{font-size:.75rem;color:var(--color-bg);background:var(--color-text);padding:.25rem .625rem;border-radius:4px;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.project-card-year{font-size:.8125rem;color:var(--color-text-faint)}.project-card-desc{color:var(--color-text-secondary);line-height:2.1;margin-bottom:var(--space-sm);font-size:1rem;max-width:640px}.project-card-tech{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:var(--space-sm)}.project-card-tech .tag{padding:.35rem .75rem;border:1px solid var(--color-border-light);border-radius:4px;background:var(--color-bg);transition:all .3s ease}.project-card:hover .project-card-tech .tag{background:var(--color-border-light)}.project-card-links{display:flex;gap:1.5rem}.project-card-links .link-underline{font-size:.875rem;color:var(--color-text-muted)}.project-card-links .link-underline:hover{color:var(--color-text)}@media(max-width:768px){.projects-page{padding:var(--space-lg) 0}.projects-page .page-header h1{letter-spacing:-.5px}.project-card{padding:var(--space-md);margin-bottom:var(--space-md)}.project-card h2{font-size:1.25rem}.project-card-tech{gap:.5rem}.project-card-tech .tag{font-size:.7rem;padding:.3rem .6rem}}.footer{background:var(--color-bg);color:var(--color-text-muted);padding:var(--space-xl) var(--space-lg);margin-top:auto;border-top:1px solid var(--color-border-light)}.footer-container{max-width:1200px;margin:0 auto;display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:var(--space-md)}.footer-name{font-weight:600;color:var(--color-text);font-size:.9375rem;margin-bottom:.25rem}.footer-tagline{font-size:.875rem;color:var(--color-text-muted)}.footer-links{display:flex;gap:2rem}.footer-links a{color:var(--color-text-muted);font-size:.875rem}.footer-links a:hover{color:var(--color-text)}@media(max-width:768px){.footer{padding:var(--space-lg) var(--space-md)}.footer-container{flex-direction:column;align-items:flex-start}}.app{min-height:100vh;display:flex;flex-direction:column;background:var(--color-bg)}.main-content{flex:1;max-width:1200px;width:100%;margin:0 auto;padding:0 var(--space-lg)}.loading,.error,.empty-state{text-align:center;padding:var(--space-2xl) var(--space-md);color:var(--color-text-muted);font-size:.9375rem}.error{color:#c0392b}@media(max-width:768px){.main-content{padding:0 var(--space-md)}}
