*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{background:#0d0d0d;color:#e2e8f0;font-family:"Inter",system-ui,-apple-system,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}ul{list-style:none}button{cursor:pointer;border:none;background:none;font:inherit}.app-shell{display:flex;min-height:100vh}.main-content{flex:1;min-height:100vh;overflow-y:auto}.content-wrapper{max-width:860px;margin:0 auto;padding:4rem 2rem}html[data-sidebar=collapsed] .main-content{margin-left:64px}html[data-sidebar=collapsed] .sidebar{width:64px;padding:1rem .5rem;align-items:center;overflow:visible}html[data-sidebar=collapsed] .sidebar-nav{overflow:visible}html[data-sidebar=collapsed] .sidebar-identity{display:none}html[data-sidebar=collapsed] .sidebar-toggle{align-self:center}html[data-sidebar=collapsed] .sidebar-profile{flex-direction:column;justify-content:center;gap:0}html[data-sidebar=collapsed] .sidebar-avatar{width:32px;height:32px}html[data-sidebar=collapsed] .nav-label{display:none}html[data-sidebar=collapsed] .nav-item{justify-content:center;padding:.5rem;width:40px;height:40px}html[data-sidebar=collapsed] .nav-item:hover::after{opacity:1}@media(max-width: 768px){.main-content{margin-left:0;padding-top:60px}.content-wrapper{padding:2rem 1rem}.sidebar,.sidebar-nav{overflow:visible}.sidebar-avatar{width:28px !important;height:28px !important}.nav-item:hover::after{opacity:1}}.sidebar{position:fixed;top:0;left:0;width:240px;height:100vh;background:#1a1a2e;border-right:1px solid hsla(0,0%,100%,.08);display:flex;flex-direction:column;padding:1.5rem;gap:1.5rem;z-index:100;transition:width 250ms ease,padding 250ms ease;overflow:hidden}.sidebar-toggle{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;color:#64748b;flex-shrink:0;align-self:flex-end;transition:background 200ms ease,color 200ms ease}.sidebar-toggle:hover{background:#1e2a4a;color:#e2e8f0}.sidebar-toggle .material-symbols-rounded{font-size:20px}.sidebar-profile{display:flex;align-items:center;gap:.5rem;overflow:hidden;min-width:0;flex-shrink:0}.sidebar-avatar{width:36px;height:36px;border-radius:50%;border:2px solid rgba(0,210,255,.3);flex-shrink:0;object-fit:cover;transition:width 200ms ease,height 200ms ease}.sidebar-identity{display:flex;flex-direction:column;overflow:hidden}.sidebar-name{font-size:.875rem;font-weight:600;color:#e2e8f0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.sidebar-name:hover{color:#00d2ff}.sidebar-handle{font-size:.75rem;font-family:"JetBrains Mono","Fira Code",monospace;color:#64748b;white-space:nowrap}.sidebar-nav{flex:1;overflow:hidden}.sidebar-nav ul{display:flex;flex-direction:column;gap:2px}.nav-item{display:flex;align-items:center;gap:.5rem;padding:10px .5rem;border-radius:8px;color:#94a3b8;font-size:.875rem;font-weight:500;transition:color 200ms ease,background 200ms ease;white-space:nowrap;position:relative}.nav-item:hover{color:#e2e8f0;background:#1e2a4a}.nav-item.active{color:#00d2ff;background:rgba(0,210,255,.15)}.nav-item.active .nav-icon{opacity:1}.nav-item::after{content:attr(data-tooltip);position:absolute;top:50%;left:calc(100% + 10px);transform:translateY(-50%);background:#16213e;border:1px solid hsla(0,0%,100%,.08);color:#e2e8f0;font-size:.875rem;font-weight:500;padding:4px 10px;border-radius:8px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity 150ms ease;z-index:200;box-shadow:0 4px 12px rgba(0,0,0,.4)}.nav-icon{font-size:20px !important;width:20px;height:20px;display:flex;align-items:center;justify-content:center;opacity:.6;flex-shrink:0;font-variation-settings:"FILL" 0,"wght" 300,"GRAD" 0,"opsz" 20;transition:opacity 200ms ease,font-variation-settings 200ms ease}.nav-item:hover .nav-icon,.nav-item.active .nav-icon{opacity:1;font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 20}.nav-label{font-size:.875rem;transition:opacity 200ms ease}@media(max-width: 768px){.sidebar{width:100% !important;height:60px;flex-direction:row;align-items:center;padding:0 1rem;border-right:none;border-bottom:1px solid hsla(0,0%,100%,.08);gap:1rem}html .sidebar-profile,html[data-sidebar=collapsed] .sidebar-profile{display:none}.sidebar-nav{flex:none}.sidebar-nav ul{flex-direction:row}.nav-label{display:none}.sidebar-toggle{display:none}.nav-item::after{top:calc(100% + 6px);left:50%;transform:translateX(-50%)}}.project-category{margin-top:3rem}.project-category:first-of-type{margin-top:0}.project-category-heading{font-size:.7rem;font-family:"JetBrains Mono","Fira Code",monospace;font-weight:500;color:#64748b;text-transform:uppercase;letter-spacing:.1em;margin-bottom:1.5rem;padding-bottom:.5rem;border-bottom:1px solid hsla(0,0%,100%,.08)}.cards-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));gap:1.5rem;margin-top:2rem}.card{background:#1a1a2e;border:1px solid hsla(0,0%,100%,.08);border-radius:12px;display:flex;flex-direction:column;overflow:hidden;transition:border-color 200ms ease,transform 200ms ease,box-shadow 200ms ease;cursor:pointer}.card:hover{border-color:rgba(0,210,255,.3);transform:translateY(-2px);box-shadow:0 4px 24px rgba(0,0,0,.4),0 0 20px rgba(0,210,255,.15)}.card-banner{width:100%;aspect-ratio:16/7;overflow:hidden;background:#16213e;position:relative}.card-banner img{width:100%;height:100%;object-fit:cover;display:block;transition:transform 400ms ease;border-radius:0;border:none}.card-icon{position:absolute;bottom:.5rem;left:.5rem;width:44px;height:44px;border-radius:8px;overflow:hidden;border:2px solid hsla(0,0%,100%,.15);background:#1a1a2e;box-shadow:0 2px 8px rgba(0,0,0,.5)}.card-icon img{width:100%;height:100%;object-fit:contain;border-radius:0;border:none;transition:none;padding:4px}.card:hover .card-banner img{transform:scale(1.03)}.card-body{padding:1.5rem;display:flex;flex-direction:column;gap:.5rem;flex:1}.card-studio{font-size:.875rem;color:rgba(0,210,255,.6);font-family:"JetBrains Mono","Fira Code",monospace;margin-top:-0.25rem}.card-header{display:flex;align-items:flex-start;gap:.5rem}.card-header-text{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;flex:1;min-width:0}.card-icon-inline{flex-shrink:0;width:40px;height:40px;border-radius:8px;overflow:hidden;background:#16213e;border:1px solid hsla(0,0%,100%,.08)}.card-icon-inline img{width:100%;height:100%;object-fit:contain;padding:4px;border-radius:0;border:none}.card-title{font-size:1.125rem;font-weight:600;color:#e2e8f0;line-height:1.3}.card-year{font-size:.875rem;color:#64748b;font-family:"JetBrains Mono","Fira Code",monospace;white-space:nowrap;margin-top:2px}.card-description{color:#94a3b8;font-size:.875rem;line-height:1.6;flex:1}.card-tags{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:auto;padding-top:.5rem}.tag{font-size:.75rem;font-family:"JetBrains Mono","Fira Code",monospace;color:rgba(0,210,255,.6);background:rgba(0,210,255,.15);border:1px solid rgba(0,210,255,.3);padding:2px 8px;border-radius:4px}.card--compact .card-title{font-size:1rem}.card--compact .card-description{-webkit-line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.subprojects{margin-top:3rem;padding-top:2rem;border-top:1px solid hsla(0,0%,100%,.08)}.subprojects-heading{font-size:1.25rem;font-weight:600;margin-bottom:1.5rem;color:#e2e8f0}.subprojects-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(220px, 1fr));gap:1rem}.post-list{display:flex;flex-direction:column;gap:.5rem;margin-top:2rem}.post-item{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:#1a1a2e;border:1px solid hsla(0,0%,100%,.08);border-radius:8px;gap:1.5rem;transition:border-color 200ms ease,background 200ms ease}.post-item:hover{border-color:rgba(0,210,255,.3);background:#1e2a4a}.post-item-content{flex:1}.post-item-title{font-size:1rem;font-weight:600;color:#e2e8f0;margin-bottom:4px}.post-item-excerpt{font-size:.875rem;color:#94a3b8;line-height:1.5}.post-item-date{font-size:.875rem;color:#64748b;font-family:"JetBrains Mono","Fira Code",monospace;white-space:nowrap}.hero{padding:3rem 0}.hero-eyebrow{font-size:.875rem;color:#00d2ff;font-family:"JetBrains Mono","Fira Code",monospace;letter-spacing:.1em;text-transform:uppercase;margin-bottom:.5rem}.hero-name{font-size:3.5rem;font-weight:700;letter-spacing:-0.03em;line-height:1.1;background:linear-gradient(90deg, #e2e8f0 0%, #00d2ff 35%, #a78bfa 65%, #e2e8f0 100%);background-size:200% auto;-webkit-background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0);background-clip:text;animation:gradient-sweep 4s linear infinite;margin-bottom:1rem}.hero-tagline{font-size:1.25rem;color:#94a3b8;font-weight:400;margin-bottom:1rem}.hero-bio{font-size:1rem;color:#94a3b8;max-width:600px;line-height:1.8;margin-bottom:2rem}.hero-links{display:flex;gap:1rem;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1.5rem;border-radius:8px;font-size:.875rem;font-weight:500;transition:all 200ms ease;border:1px solid rgba(0,210,255,.3);color:#00d2ff;background:rgba(0,210,255,.15)}.btn:hover{background:rgba(0,210,255,.25);box-shadow:0 0 20px rgba(0,210,255,.15)}.btn--ghost{background:rgba(0,0,0,0);border-color:hsla(0,0%,100%,.08);color:#94a3b8}.btn--ghost:hover{border-color:rgba(0,210,255,.3);color:#00d2ff;background:rgba(0,210,255,.15);box-shadow:none}.icon{display:inline-flex;align-items:center;flex-shrink:0}.icon svg{display:block}.btn-icon svg{width:16px;height:16px}.page-header{margin-bottom:2rem;padding-bottom:2rem;border-bottom:1px solid hsla(0,0%,100%,.08)}.page-header--no-border{border-bottom:none;padding-bottom:0}.page-header h1{font-size:2.5rem;font-weight:700;letter-spacing:-0.02em;margin-bottom:.5rem}.page-subtitle{color:#94a3b8;font-size:1.125rem}.section-title{font-size:1.5rem;font-weight:600;margin-bottom:1.5rem;color:#e2e8f0}.home-section{margin-top:4rem;padding-top:3rem;border-top:1px solid hsla(0,0%,100%,.08)}.home-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.home-section-header .project-category-heading{margin-bottom:0;border-bottom:none;padding-bottom:0}.cv-home{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;padding:1.5rem;background:#1a1a2e;border:1px solid hsla(0,0%,100%,.08);border-radius:12px}@media(max-width: 500px){.cv-home{flex-direction:column;align-items:flex-start}}.cv-home-desc{color:#94a3b8;font-size:.875rem}.cv-home-actions{display:flex;gap:.5rem;flex-shrink:0}.cv-embed{width:100%;height:80vh;min-height:600px;border:1px solid hsla(0,0%,100%,.08);border-radius:12px;background:#1a1a2e}.article{max-width:860px}.article-header{margin-bottom:3rem;padding-bottom:2rem;border-bottom:1px solid hsla(0,0%,100%,.08)}.article-header-body{display:flex;align-items:flex-start;gap:2rem}.article-header-content{flex:1;min-width:0}.article-banner{flex-shrink:0;width:320px;border-radius:12px;overflow:hidden;border:1px solid hsla(0,0%,100%,.08);background:#16213e;aspect-ratio:16/9}.article-banner img{width:100%;height:100%;object-fit:cover;display:block;border-radius:0;border:none}@media(max-width: 700px){.article-header-body--has-banner{flex-direction:column}.article-banner{width:100%}}.article-title-row{display:flex;align-items:flex-start;gap:1.5rem;margin-bottom:1rem}.article-icon{flex-shrink:0;width:72px;height:72px;border-radius:12px;overflow:hidden;background:#1a1a2e;border:1px solid hsla(0,0%,100%,.08);display:flex;align-items:center;justify-content:center}.article-icon img{width:100%;height:100%;object-fit:contain;padding:8px;border-radius:0;border:none}.article-title-content{flex:1;min-width:0}.back-link{display:inline-block;font-size:.875rem;color:#64748b;font-family:"JetBrains Mono","Fira Code",monospace;margin-bottom:1.5rem;transition:color 200ms ease}.back-link:hover{color:#00d2ff}.layout-back{margin-bottom:2rem}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;margin-bottom:2rem;font-size:.875rem;font-family:"JetBrains Mono","Fira Code",monospace}.breadcrumb-item{display:flex;align-items:center;gap:2px}.breadcrumb-sep{color:hsla(0,0%,100%,.08);margin:0 4px;user-select:none}.breadcrumb-link{color:#64748b;transition:color 200ms ease}.breadcrumb-link:hover{color:#00d2ff}.breadcrumb-current{color:#94a3b8}.article-title{font-size:2.5rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2;margin-bottom:1rem}.article-meta{display:flex;align-items:center;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}.article-year,.article-date{font-size:.875rem;color:#64748b;font-family:"JetBrains Mono","Fira Code",monospace}.article-studio{font-size:.875rem;color:rgba(0,210,255,.6);font-family:"JetBrains Mono","Fira Code",monospace;font-weight:500}.article-link{font-size:.875rem;color:rgba(0,210,255,.6);transition:color 200ms ease}.article-link:hover{color:#00d2ff}.cv-container{display:flex;flex-direction:column;gap:2rem}.cv-notice{background:#1a1a2e;border:1px solid hsla(0,0%,100%,.08);border-radius:8px;padding:1.5rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.cv-notice p{color:#94a3b8;font-size:.875rem}.cv-notice code{font-family:"JetBrains Mono","Fira Code",monospace;color:#00d2ff;background:rgba(0,210,255,.15);padding:2px 6px;border-radius:4px}.cv-iframe{border:1px solid hsla(0,0%,100%,.08);border-radius:12px;background:#1a1a2e;min-height:900px}.prose{color:#94a3b8;line-height:1.8;font-size:1rem}.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{color:#e2e8f0;font-weight:600;letter-spacing:-0.01em;margin-top:3rem;margin-bottom:1rem;line-height:1.3}.prose h1{font-size:2rem}.prose h2{font-size:1.5rem;padding-bottom:.5rem;border-bottom:1px solid hsla(0,0%,100%,.08)}.prose h3{font-size:1.25rem}.prose h4{font-size:1.125rem}.prose p{margin-bottom:1rem}.prose a{color:#00d2ff;text-decoration:underline;text-underline-offset:3px;text-decoration-color:rgba(0,210,255,.3);transition:text-decoration-color 200ms ease}.prose a:hover{text-decoration-color:#00d2ff}.prose strong{color:#e2e8f0;font-weight:600}.prose em{color:#94a3b8;font-style:italic}.prose code{font-family:"JetBrains Mono","Fira Code",monospace;font-size:.875em;color:#00d2ff;background:rgba(0,210,255,.15);padding:2px 6px;border-radius:4px;border:1px solid rgba(0,210,255,.3)}.prose pre{background:#1a1a2e;border:1px solid hsla(0,0%,100%,.08);border-radius:8px;padding:1.5rem;overflow-x:auto;margin:1.5rem 0}.prose pre code{background:none;border:none;padding:0;color:#e2e8f0;font-size:.875rem}.prose ul,.prose ol{margin:1rem 0;padding-left:2rem}.prose ul li,.prose ol li{margin-bottom:.5rem}.prose ul li{list-style:disc}.prose ol li{list-style:decimal}.prose blockquote{border-left:3px solid #00d2ff;padding-left:1.5rem;margin:1.5rem 0;color:#64748b;font-style:italic}.prose hr{border:none;border-top:1px solid hsla(0,0%,100%,.08);margin:3rem 0}.prose img{border-radius:8px;border:1px solid hsla(0,0%,100%,.08)}.prose table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.875rem}.prose table th,.prose table td{border:1px solid hsla(0,0%,100%,.08);padding:.5rem 1rem;text-align:left}.prose table th{background:#1a1a2e;color:#e2e8f0;font-weight:600}.prose table tr:nth-child(even) td{background:hsla(0,0%,100%,.02)}.gallery{position:relative;overflow:hidden;border-radius:12px;background:#16213e;border:1px solid hsla(0,0%,100%,.08);margin:2rem 0;outline:none}.gallery:focus-visible{box-shadow:0 0 0 2px #00d2ff}.gallery-track{display:flex;transition:transform 380ms cubic-bezier(0.4, 0, 0.2, 1);will-change:transform}.gallery-slide{flex-shrink:0;width:100%;position:relative}.gallery-slide img{width:100%;aspect-ratio:16/9;object-fit:cover;display:block;border-radius:0;border:none}.gallery-caption{position:absolute;bottom:0;left:0;right:0;padding:.5rem 1rem;background:linear-gradient(transparent, rgba(0, 0, 0, 0.7));font-size:.875rem;color:hsla(0,0%,100%,.85);margin:0}.gallery-btn{position:absolute;top:50%;transform:translateY(-50%);width:36px;height:36px;border-radius:50%;background:rgba(0,0,0,.55);border:1px solid hsla(0,0%,100%,.12);color:#fff;display:flex;align-items:center;justify-content:center;transition:background 200ms ease,opacity 200ms ease;opacity:0;cursor:pointer;z-index:2}.gallery-btn .material-symbols-rounded{font-size:20px}.gallery-btn--prev{left:.5rem}.gallery-btn--next{right:.5rem}.gallery-btn:hover{background:rgba(0,0,0,.8)}.gallery:hover .gallery-btn,.gallery:focus-within .gallery-btn{opacity:1}.gallery-dots{position:absolute;bottom:.5rem;left:50%;transform:translateX(-50%);display:flex;gap:6px;z-index:2}.gallery-dot{width:6px;height:6px;border-radius:50%;background:hsla(0,0%,100%,.35);transition:background 200ms ease,transform 200ms ease;cursor:pointer}.gallery-dot.active{background:#fff;transform:scale(1.3)}.gallery-dot:hover{background:hsla(0,0%,100%,.7)}