@font-face{font-family:Terminus;src:url(/fonts/terminus.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Terminus;src:url(/fonts/terminus-bold.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Terminus;src:url(/fonts/terminus-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Terminus;src:url(/fonts/terminus-bold-italic.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}:root{--bg: #070706;--panel: #141311;--fg: #dad8d4;--muted: #b3b0aa;--faint: #67655f;--accent: #e74e5c;--line: #2a2926;--hl: #cfccc6;--hl-bg: rgba(231, 78, 92, .1);--select: #3a171e}::selection{background:var(--select);color:var(--fg)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:1px}.lightbox:focus-visible{outline:none}*{box-sizing:border-box;margin:0;padding:0}html,body{min-height:100%}html{font-size:14px}body{background-color:var(--bg);color:var(--fg);font-family:Terminus,JetBrains Mono,Fira Code,Cascadia Code,SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:1rem;line-height:1.6;-webkit-font-smoothing:antialiased;display:flex;justify-content:center;align-items:center;min-height:100vh;padding:2rem 1rem}.asciibg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;overflow:hidden;pointer-events:none;user-select:none;-webkit-user-select:none;font-size:.85rem;line-height:1.35;letter-spacing:.12em;color:#bcbab61a}.asciibg-halo{color:#e74e5c38}.asciibg-base{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='420' height='420'%3E%3Cfilter id='m'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.02' numOctaves='4' seed='5' stitchTiles='stitch'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='linear' slope='2.2' intercept='-0.6'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23m)'/%3E%3C/svg%3E") 0 0 / 420px 420px;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='420' height='420'%3E%3Cfilter id='m'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.02' numOctaves='4' seed='5' stitchTiles='stitch'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='linear' slope='2.2' intercept='-0.6'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23m)'/%3E%3C/svg%3E") 0 0 / 420px 420px}.asciibg>div{white-space:pre}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;opacity:.05;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}#app{width:100%;max-width:780px}.nojs{color:var(--faint);text-align:center;padding:1rem;font-size:.8rem}@keyframes panelIn{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion: no-preference){.panel-anim{animation:panelIn .5s ease-out both}}.intro,section{position:relative;background-color:#1e1c1914;background-image:linear-gradient(180deg,#ffffff09,#fff0 45%);backdrop-filter:blur(5px) saturate(125%);-webkit-backdrop-filter:blur(5px) saturate(125%);border:1px solid rgba(218,216,212,.06);box-shadow:inset 0 1px #ffffff0f,0 1px 2px #00000047;padding:1.15rem 1.35rem;transition:border-color .2s ease,background-color .2s ease}.intro:before,section:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;padding:1px;background:linear-gradient(135deg,#ffffff2b,#fff0 38%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}@media (hover: hover){.intro:hover,section:hover{border-color:#dad8d41f;background-color:#28262224}}.intro{margin-bottom:1rem}h1{font-size:1.5rem;font-weight:600;letter-spacing:.02em}.intro .title{color:var(--accent);font-size:.85rem}.intro-meta{margin-top:.55rem;font-size:.8rem;color:var(--muted);display:flex;justify-content:space-between;align-items:flex-end;gap:1rem}.intro-meta .status{display:flex;flex-wrap:wrap;align-items:baseline;gap:.4rem}.intro-meta .clock{color:var(--muted);font-variant-numeric:tabular-nums}.intro-meta .build,.intro-meta .sep,.intro-meta .net{color:var(--faint)}.intro-meta .net:empty{display:none}@media (max-width: 560px){.intro-meta .status .loc{flex-basis:100%}.intro-meta .status .sep{display:none}}.intro-meta .resume{color:var(--muted);text-decoration:none;transition:color .2s ease;flex-shrink:0;white-space:nowrap}.intro-meta .resume .br{color:var(--accent)}.intro-meta .resume:hover{color:var(--fg)}.columns{display:grid;grid-template-columns:240px 1fr;gap:1rem;align-items:start}.sidebar{position:sticky;top:2rem;display:flex;flex-direction:column;gap:1rem}.main{display:flex;flex-direction:column;gap:1rem}.columns-3{grid-template-columns:240px 1.2fr 1fr}.col{display:flex;flex-direction:column;gap:1rem}.col-sm{position:sticky;top:2rem}.sec-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.55rem}h2{font-size:.8rem;font-weight:500;letter-spacing:.05em;margin:0}.sec-toggle{font:inherit;letter-spacing:inherit;color:var(--muted);background:none;border:none;padding:0;cursor:pointer}.sec-toggle:hover{color:var(--fg)}h2 .br{color:var(--accent)}.back{font:inherit;background:none;border:none;padding:0;cursor:pointer;color:var(--faint);font-size:.78rem}.back:hover{color:var(--accent)}@keyframes panel-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.intro,section{animation:panel-in .4s cubic-bezier(.22,1,.36,1) both}.sec-toggle,.back,.links a,.entry-title a,.tag{transition:color .2s ease,border-color .2s ease}.body{color:var(--muted)}.links li{word-break:break-word}.links a{color:inherit;text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}.links a:hover{color:var(--accent)}.reading{display:flex;flex-direction:column;gap:.15rem;font-size:.8rem}.reading .rd-title{color:var(--fg);font-style:normal}.reading .rd-author{color:var(--muted)}.skills{list-style:none;display:flex;flex-direction:column;gap:.55rem;font-size:.8rem}.skills .sk-label{display:block;color:var(--accent);margin-bottom:.3rem}.skills .tags{display:flex;flex-wrap:wrap;gap:.3rem}.skills .tag{flex:0 0 auto;border:1px solid var(--line);color:var(--muted);padding:.05rem .4rem;font-size:.72rem;line-height:1.5;white-space:nowrap}.entry{margin-bottom:1rem;padding:.6rem .75rem;margin-inline:-.75rem;outline:1px solid transparent;outline-offset:-1px;transition:background-color .12s,outline-color .12s}.entry:last-child{margin-bottom:0}.entry-head{display:flex;justify-content:space-between;align-items:baseline;gap:1rem}.entry-title{font-size:inherit;font-weight:600}.entry-title a{color:inherit;text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}.entry-title a:hover{color:var(--accent)}.period{color:var(--faint);font-size:.78rem;white-space:nowrap;flex-shrink:0}.meta{color:var(--accent);font-size:.8rem;font-style:italic;margin-top:.1rem;display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.bullets{list-style:none;margin-top:.35rem;display:flex;flex-direction:column;gap:.25rem}.bullets li{position:relative;padding-left:1.1rem;color:var(--muted);font-size:.85rem}.bullets li:before{content:"›";position:absolute;left:0;color:var(--accent)}.hl{color:var(--hl);font-weight:700}.acts{display:flex;flex-shrink:0;gap:.7rem}.demo-toggle,.play-toggle{font:inherit;font-style:normal;color:var(--muted);background:none;border:none;padding:0;flex-shrink:0;cursor:pointer;transition:color .2s ease}.demo-toggle:hover,.play-toggle:hover{color:var(--fg)}.demo-toggle .br,.play-toggle .br{color:var(--accent)}@media (hover: none){.play-toggle{display:none}}.stage{position:relative;overflow:hidden;transition:height .28s cubic-bezier(.22,1,.36,1)}.stage>*{transition:opacity .2s ease}.stage>.media,.stage.on>.bullets{position:absolute;inset:0 0 auto 0;opacity:0;pointer-events:none}.stage.on>.media.cur{position:static;opacity:1;pointer-events:auto}.stage>.media{display:block;width:100%;margin-top:.35rem;aspect-ratio:16 / 9;object-fit:contain;background:#000;border:1px solid var(--line)}.stage>video.media{cursor:ew-resize}.gal{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:.6rem;padding:.25rem .5rem;font-size:.78rem;color:var(--muted);background:linear-gradient(#0000,#000000b8);opacity:0;transition:opacity .2s ease}.stage:not(.on)>.gal{display:none}.stage.on:hover>.gal,.stage.on:focus-within>.gal{opacity:1}.gal button{font:inherit;color:var(--muted);background:none;border:none;padding:0;cursor:pointer;transition:color .2s ease}.gal button:hover{color:var(--fg)}.gal .br{color:var(--accent)}.gal-prev,.gal-next{font-size:1.2rem;line-height:1}.gal-t:empty{display:none}.gal-t{color:var(--faint);font-style:italic;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gal-full{margin-left:auto}.lightbox{border:none;padding:0;background:none;position:fixed;top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;max-height:none;overflow:visible}.lightbox[open]{display:flex;align-items:center;justify-content:center}.lightbox::backdrop{background:#070706e6;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.lightbox .stage{width:min(92vw,calc(86vh * 16 / 9));overflow:visible}.lightbox .stage>.bullets{display:none}.lightbox .gal{opacity:1}.play-wrap{display:flex;flex-direction:column;width:min(92vw,calc(86vh * 16 / 9))}.play-frame{display:block;width:100%;aspect-ratio:16 / 9;border:1px solid var(--line);background:#000}.play-bar{position:static;background:none}.play-close{margin-left:auto}@media (hover: none){.stage>video.media{cursor:default}.stage.on>.gal{opacity:1}}.tag,.mtech{transition:color .12s,border-color .12s}.tag.tech-on{color:var(--accent);border-color:var(--accent)}.mtech.tech-on{color:var(--accent)}.mtech[hidden]{display:none}.entry.proj-on{background:var(--hl-bg);outline-color:var(--accent)}@media (min-width: 1100px){#app{max-width:1280px}}@media (max-width: 768px){.columns{grid-template-columns:1fr}.sidebar{position:static}.links{flex-direction:row;flex-wrap:wrap;column-gap:1rem}.intro,section{backdrop-filter:none;-webkit-backdrop-filter:none;background-color:#141311eb}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
