*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}img,video{max-width:100%;display:block}:root{--font-display: "IBM Plex Serif", Georgia, serif;--font-mono: "IBM Plex Mono", "Courier New", monospace;--bg: #0d1117;--bg-surface: #191f2b;--bg-card: #232d3b;--border: rgba(255,255,255,.12);--border-em: rgba(255,255,255,.22);--ink: #faf5eb;--ink-muted: #aba298;--ink-faint: #928b80;--amber: #d4973a;--amber-subtle: rgba(212,151,58,.12);--nav-bg: rgba(13,17,23,.92);--max-w: 750px}:root[data-theme=light]{--bg: #f5f3ee;--bg-surface: #eee8de;--bg-card: #e8e2d5;--border: rgba(0,0,0,.11);--border-em: rgba(0,0,0,.22);--ink: #1a1815;--ink-muted: #50473d;--ink-faint: #6c6358;--amber: #b87a1e;--amber-subtle: rgba(184,122,30,.1);--nav-bg: rgba(245,243,238, .92)}html{font-size:18px;scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--font-mono);font-weight:400;line-height:1.75;-webkit-font-smoothing:antialiased;transition:color .15s,background .15s}h1,h2,h3{font-family:var(--font-display);font-weight:300;line-height:1.2;letter-spacing:-.01em}h1{font-size:clamp(2rem,5vw,3rem)}h2{font-size:1.35rem;margin-bottom:1.5rem}h3{font-size:1rem;font-weight:400;margin-bottom:.3rem}p{margin-bottom:1rem}p:last-child{margin-bottom:0}a{color:var(--amber);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}code{font-family:var(--font-mono);font-size:.85em;background:var(--bg-surface);border:1px solid var(--border);border-radius:3px;padding:1px 6px}pre{background:var(--bg-surface);border:1px solid var(--border);border-radius:4px;padding:1.25rem;overflow-x:auto;margin:1.5rem 0}pre code{background:none;border:none;padding:0;font-size:.82rem;line-height:1.7}.container{max-width:var(--max-w);margin:0 auto;padding:0 1.5rem}section{padding:3.5rem 0;border-top:1px solid var(--border)}section.hero{padding-top:5rem;padding-bottom:3rem;border-top:none}nav{position:sticky;top:0;z-index:100;background:var(--nav-bg);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border);height:52px}.nav-inner{max-width:var(--max-w);margin:0 auto;padding:0 1.5rem;height:100%;display:flex;align-items:center;justify-content:space-between}.nav-name{font-family:var(--font-display);font-size:.95rem;font-weight:300;color:var(--ink);text-decoration:none}.nav-name:hover{text-decoration:none;opacity:.7}.nav-links{display:flex;gap:1.75rem;list-style:none}.nav-links a{font-size:.65rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted)}.nav-links a:hover{color:var(--amber);text-decoration:none}.nav-links a[aria-current=page]{color:var(--amber)}@media(max-width:500px){nav{height:auto;padding:.75rem 0}.nav-inner{flex-direction:column;gap:.75rem}.nav-links{gap:1rem;padding:0;margin:0;flex-wrap:wrap;justify-content:center}}footer{border-top:1px solid var(--border);padding:2rem 0}.footer-inner{max-width:var(--max-w);margin:0 auto;padding:0 1.5rem;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.5rem;font-size:.65rem;letter-spacing:.08em;color:var(--ink-faint)}.footer-inner a{color:var(--ink-faint)}.footer-inner a:hover{color:var(--ink-muted);text-decoration:none}.entry{padding:1.25rem 0;border-bottom:1px solid var(--border)}.entry:last-child{border-bottom:none}.entry-meta{font-size:.63rem!important;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:.3rem}.entry h3 a{color:var(--ink)}.entry h3 a:hover{color:var(--amber);text-decoration:none}.entry p{font-size:.82rem;color:var(--ink-muted);margin-top:.3rem;margin-bottom:0}.tag{display:inline-block;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--border-em);border-radius:2px;padding:2px 7px;color:var(--ink-faint)}.tag.award{color:var(--amber);border-color:var(--amber)}.link-row{display:flex;gap:1.5rem;flex-wrap:wrap;margin-top:1.75rem}.link-row a{font-size:.72rem;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-em);padding-bottom:1px}.link-row a:hover{color:var(--amber);text-decoration:none;border-color:var(--amber)}.sim-wrap{border:1px solid var(--border);border-radius:4px;overflow:hidden;margin:2.5rem 0;position:relative;background:var(--bg-surface)}.sim-label{position:absolute;bottom:8px;right:12px;font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);pointer-events:none}.prose{font-size:.9rem}.prose h2{margin-top:2.25rem;margin-bottom:.75rem;font-size:1.2rem}.prose h3{margin-top:1.75rem}.prose ul,.prose ol{padding-left:1.5rem;margin-bottom:1rem}.prose li{margin-bottom:.3rem;color:var(--ink-muted)}.prose blockquote{border-left:2px solid var(--border-em);padding-left:1rem;color:var(--ink-muted);margin:1.5rem 0}.theme-toggle{background:none;border:1px solid var(--border-em);border-radius:3px;color:var(--ink-muted);cursor:pointer;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.1em;padding:3px 9px;text-transform:uppercase;transition:color .15s,border-color .15s;line-height:1.6}.theme-toggle:hover{color:var(--amber);border-color:var(--amber)}.filter-bar{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1.5rem}.filter-btn{background:none;border:1px solid var(--border-em);border-radius:2px;color:var(--ink-faint);cursor:pointer;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.1em;padding:3px 10px;text-transform:uppercase;transition:color .12s,border-color .12s,background .12s}.filter-btn:hover{color:var(--ink-muted)}.filter-btn.active{background:var(--amber-subtle);border-color:var(--amber);color:var(--amber)}.project-grid{display:grid;gap:1px;background:var(--border);border:1px solid var(--border);border-radius:6px;overflow:hidden}.project-card{background:var(--bg-surface);padding:1.25rem 1.5rem;display:grid;grid-template-columns:1fr auto;grid-template-rows:auto;column-gap:1.25rem;row-gap:.5rem;align-items:start;transition:background .15s}.project-card:hover{background:var(--bg-card)}.project-card.no-image{grid-template-columns:1fr}.project-card-body{display:flex;flex-direction:column;gap:.5rem;min-width:0}.project-card-media{grid-column:2;grid-row:1 / -1;width:120px;flex-shrink:0}.project-card-top{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.project-card-title{font-family:var(--font-display);font-size:1rem;font-weight:400;color:var(--ink);line-height:1.25}.project-card-year{font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);white-space:nowrap;flex-shrink:0}.project-card-status{color:var(--amber);margin-left:.4rem}.project-card-desc{font-size:.82rem;color:var(--ink-muted);line-height:1.65;margin:0}.project-card-expand{margin-top:.1rem}.expand-btn{background:none;border:none;cursor:pointer;font-family:var(--font-mono);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);padding:0;display:flex;align-items:center;gap:4px;transition:color .12s}.expand-btn:hover{color:var(--amber)}.expand-chevron{display:inline-block;transition:transform .2s;font-size:.8rem;line-height:1}.project-card-expand.open .expand-chevron{transform:rotate(90deg)}.expand-body{display:none;margin-top:.6rem;padding-left:1rem;list-style:none}.project-card-expand.open .expand-body{display:block}.expand-body li{font-size:.78rem;color:var(--ink-muted);line-height:1.6;padding:.15rem 0;position:relative}.expand-body li:before{content:"–";position:absolute;left:-.9rem;color:var(--ink-faint)}.media-demos{display:flex;flex-direction:column;align-items:flex-end;gap:3px;margin-top:6px}.project-card-footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem;margin-top:.1rem}.project-card-tags{display:flex;gap:.4rem;flex-wrap:wrap}.project-card-links{display:flex;align-items:right;gap:1rem}.project-card-links a{font-size:.67rem;letter-spacing:.06em;color:var(--ink-muted);border-bottom:1px solid var(--border-em);padding-bottom:1px}.project-card-links a:hover{color:var(--amber);border-color:var(--amber);text-decoration:none}.project-card-links a.demo-link,.media-demos a.demo-link{color:var(--amber);opacity:.75;border-color:transparent;font-size:.62rem;letter-spacing:.05em;text-decoration:none;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-card-links a.demo-link:hover,.media-demos a.demo-link:hover{opacity:1;text-decoration:underline;text-underline-offset:2px}.card-thumb{width:120px!important;height:90px!important;object-fit:cover;border-radius:3px;border:1px solid var(--border-em);display:block;cursor:zoom-in;transition:opacity .15s}.card-thumb:hover{opacity:.82}.card-gallery{width:120px;position:relative;user-select:none}.card-gallery-track{width:120px;height:90px;position:relative;border-radius:3px;border:1px solid var(--border-em);overflow:hidden;cursor:zoom-in}.card-gallery-track img{width:100%!important;height:100%!important;object-fit:cover;display:block;position:absolute;inset:0;opacity:0;transition:opacity .2s;pointer-events:none}.card-gallery-track img.active{opacity:1;pointer-events:auto}.card-gallery-btn{position:absolute;top:50%;transform:translateY(-50%);background:#0000008c;border:none;color:#fff;font-size:.7rem;line-height:1;width:20px;height:20px;border-radius:2px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s;z-index:2;padding:0}.card-gallery:hover .card-gallery-btn{opacity:1}.card-gallery-btn.prev{left:3px}.card-gallery-btn.next{right:3px}.card-gallery-btn:hover{background:#000c}.card-gallery-dots{display:flex;justify-content:center;gap:4px;margin-top:5px}.card-gallery-dot{width:4px;height:4px;border-radius:50%;background:var(--border-em);transition:background .15s}.card-gallery-dot.active{background:var(--amber)}.lightbox{display:none;position:fixed;inset:0;z-index:200;background:#000000e6;align-items:center;justify-content:center;padding:2rem}.lightbox.open{display:flex}.lightbox-img-wrap{position:relative;display:flex;align-items:center;justify-content:center;max-width:min(90vw,900px);max-height:85vh}.lightbox img{max-width:min(90vw,900px);max-height:85vh;object-fit:contain;border-radius:3px;box-shadow:0 8px 40px #0009;display:block}.lightbox-close{position:fixed;top:1.25rem;right:1.5rem;background:none;border:none;color:#fff9;font-size:1.4rem;cursor:pointer;line-height:1;padding:.25rem;z-index:10}.lightbox-close:hover{color:#fff}.lightbox-nav{position:fixed;top:50%;transform:translateY(-50%);background:#ffffff1a;border:none;color:#fff;font-size:1.2rem;width:40px;height:40px;border-radius:3px;cursor:pointer;display:none;align-items:center;justify-content:center;z-index:10;transition:background .15s}.lightbox-nav:hover{background:#fff3}.lightbox-nav.prev{left:1rem}.lightbox-nav.next{right:1rem}.lightbox-nav.visible{display:flex}.lightbox-counter{position:fixed;bottom:1.25rem;left:50%;transform:translate(-50%);font-size:.65rem;letter-spacing:.1em;color:#ffffff80;display:none}.lightbox-counter.visible{display:block}.lightbox-caption{position:fixed;bottom:2.75rem;left:50%;transform:translate(-50%);font-size:.72rem;color:#ffffffb3;letter-spacing:.04em;display:none;font-family:var(--font-mono)}.lightbox-caption.visible{display:block}@media(max-width:480px){.latex-entry{grid-template-columns:1fr}.latex-preview-thumb{width:100%!important;aspect-ratio:3 / 2;object-position:top}.project-card{grid-template-columns:1fr}.project-card-media{grid-column:1;grid-row:auto;width:100%}.card-gallery{width:100%}.card-gallery-track{width:100%;height:180px}.card-thumb{width:100%!important;height:180px!important}}.latex-entry{display:grid;grid-template-columns:1fr auto;gap:1rem 1.5rem;align-items:start;padding:1.25rem 0;border-bottom:1px solid var(--border)}.latex-entry:last-child{border-bottom:none}.latex-preview-thumb{width:90px!important;height:auto!important;aspect-ratio:3 / 4;object-fit:cover;object-position:top;border:1px solid var(--border-em);border-radius:2px;cursor:zoom-in;flex-shrink:0;display:block;transition:opacity .15s}.latex-preview-thumb:hover{opacity:.82}@media(max-width:480px){.latex-entry{grid-template-columns:1fr}.latex-preview-thumb{width:100%!important;aspect-ratio:3 / 2;object-position:top}}.muted{color:var(--ink-muted)}.faint{color:var(--ink-faint)}.small{font-size:.9rem}.serif{font-family:var(--font-display)}
