:root{--ink: #0e0e0c;--ink-2: #161614;--ink-3: #1c1c19;--ink-4: #232320;--paper: #fafaf7;--dim: rgba(250, 250, 247, .6);--dimmer: rgba(250, 250, 247, .5);--faint: rgba(250, 250, 247, .3);--hair: rgba(250, 250, 247, .08);--hair-2: rgba(250, 250, 247, .14);--ok: #a8d5b6;--traffic: #3a3a36;--font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--rail-w-l: 200px;--rail-w-r: 280px;--bar-h-top: 38px;--bar-h-bot: 28px}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-Medium.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-SemiBold.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-Bold.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}html{background:var(--ink);height:100%;scroll-behavior:smooth}body{font-family:var(--font-mono);background:var(--ink);color:var(--paper);font-size:13.5px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh}::selection{background:var(--paper);color:var(--ink)}a{color:inherit;text-decoration:none}img,svg{display:block}:focus-visible{outline:2px solid var(--paper);outline-offset:2px;border-radius:2px}.skip-link{position:fixed;top:-200%;left:8px;z-index:100;background:var(--paper);color:var(--ink);padding:8px 12px;font-size:12px;font-weight:500}.skip-link:focus{top:8px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.cursor{animation:none}}.app{display:grid;grid-template-rows:var(--bar-h-top) 1fr var(--bar-h-bot);min-height:100vh}.topbar{position:sticky;top:0;z-index:20;display:grid;grid-template-columns:var(--rail-w-l) 1fr var(--rail-w-r);align-items:center;background:var(--ink-2);border-bottom:1px solid var(--hair);height:var(--bar-h-top);user-select:none}.topbar .left{display:flex;align-items:center;gap:12px;padding:0 14px}.topbar .shell{font-size:11px;color:var(--dim);letter-spacing:.04em}.traffic{display:flex;gap:7px}.traffic span{width:10px;height:10px;border-radius:50%;background:var(--traffic)}.topbar .tabs{display:flex;align-items:stretch;height:100%;padding-left:4px}.tab{display:flex;align-items:center;gap:10px;padding:0 16px;font-size:11px;color:var(--dim);border-right:1px solid var(--hair);letter-spacing:.02em;cursor:pointer;user-select:none;text-decoration:none;transition:background .12s,color .12s}.tab:hover{color:var(--paper);background:var(--ink-3)}.tab.is-active{background:var(--ink);color:var(--paper);box-shadow:inset 0 1px 0 var(--paper)}.topbar .right{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:0 16px;font-size:11px;color:var(--dim);letter-spacing:.04em}.topbar .right svg{width:16px;height:16px}.body{display:grid;grid-template-columns:var(--rail-w-l) 1fr var(--rail-w-r);min-width:0}.rail-l{border-right:1px solid var(--hair);background:var(--ink);position:sticky;top:var(--bar-h-top);align-self:start;height:calc(100vh - var(--bar-h-top) - var(--bar-h-bot));overflow-y:auto;padding:22px 14px 22px 18px}.rail-l .brand{display:flex;flex-direction:column;gap:14px;padding-bottom:22px;margin-bottom:18px;border-bottom:1px solid var(--hair)}.rail-l .brand svg{width:48px;height:48px}.rail-l .brand .nm{font-size:13px;font-weight:500}.rail-l .brand .tg{font-size:9px;letter-spacing:.32em;color:var(--dim);text-transform:uppercase;margin-top:4px}.nav-section{font-size:9px;letter-spacing:.22em;color:var(--dimmer);text-transform:uppercase;margin:18px 0 8px}.nav-list{list-style:none;padding:0;margin:0}.nav-list a{display:flex;align-items:baseline;gap:8px;padding:5px 8px;margin:0 -8px;color:var(--dim);font-size:12.5px;border-radius:3px;transition:background .12s,color .12s}.nav-list a:hover,.nav-list a.is-active{color:var(--paper);background:var(--ink-3)}.nav-list a .d{color:var(--faint)}.nav-list a.is-active .d{color:var(--paper)}.nav-list a .num{margin-left:auto;font-size:10px;color:var(--dimmer)}.nav-list a.is-active .num{color:var(--dim)}main{min-width:0;padding:40px 56px 35vh}@media(max-width:1400px){main{padding:36px 40px 35vh}}section{scroll-margin-top:60px}section+section{margin-top:10vh}.cmd{display:flex;align-items:baseline;gap:10px;font-size:13px;margin:0 0 14px}.cmd .p{color:var(--faint)}.cmd .you{color:var(--paper)}.cmd .arg{color:var(--dim)}.out>p{margin:0 0 12px;max-width:68ch;color:var(--paper)}.out>p.dim{color:var(--dim)}.out em{font-style:italic;color:var(--paper)}.cursor{display:inline-block;width:.55ch;height:1em;background:var(--paper);transform:translateY(.18em);margin-left:4px;animation:blink 1.05s steps(2,end) infinite}.cursor--big{height:.95em;transform:translateY(.08em)}@keyframes blink{50%{opacity:0}}.hero{padding:16px 0 28px}.hero h1{font-family:var(--font-mono);font-weight:500;font-size:clamp(30px,4.4vw,60px);line-height:1.08;letter-spacing:-.02em;margin:14px 0 18px;max-width:22ch}.hero h1 .accent{color:var(--dim)}.hero .sub{font-size:14px;color:var(--dim);max-width:64ch;margin:0 0 28px}.hero .meta{display:flex;flex-wrap:wrap;font-size:11px;color:var(--dim);letter-spacing:.04em}.hero .meta>span{padding:4px 14px;border-right:1px solid var(--hair)}.hero .meta>span:first-child{padding-left:0}.hero .meta>span:last-child{border-right:0}.ls{width:100%;border-collapse:collapse;font-size:13px}.ls td{padding:14px 16px 14px 0;border-bottom:1px solid var(--hair);vertical-align:top}.ls td:first-child{padding-left:0}.ls tr:last-child td{border-bottom:0}.ls tr:hover td{background:var(--ink-3)}.ls .perm,.ls .size{color:var(--faint);white-space:nowrap;font-size:12px}.ls .file{color:var(--paper);white-space:nowrap;font-weight:500}.ls .desc{color:var(--dim)}.projects{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}@media(max-width:1200px){.projects{grid-template-columns:1fr}}.proj{border:1px solid var(--hair);border-radius:4px;padding:18px 20px;background:var(--ink-3);display:flex;flex-direction:column;gap:10px;transition:border-color .15s,transform .15s,background .15s}.proj:hover{border-color:var(--hair-2);background:var(--ink-4);transform:translateY(-1px)}.proj .head{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.proj .name{font-size:14px;font-weight:600}.proj .year{font-size:11px;color:var(--dim);letter-spacing:.06em}.proj .what{font-size:12.5px;color:var(--dim);line-height:1.6}.proj .tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.proj .tag{font-size:10px;padding:3px 8px;border:1px solid var(--hair-2);border-radius:3px;color:var(--dim)}.process{list-style:none;padding:0;margin:0;display:grid;gap:6px}.process li{display:grid;grid-template-columns:56px 1fr;gap:18px;padding:18px 0;border-bottom:1px dashed var(--hair)}.process li:last-child{border-bottom:0}.process .step{font-size:11px;color:var(--faint);letter-spacing:.1em;padding-top:2px}.process .name{font-size:15px;font-weight:600;margin-bottom:4px}.process .body{font-size:13px;color:var(--dim);max-width:60ch}.contact{padding:26px 24px;background:var(--ink-3);border:1px solid var(--hair);border-radius:4px;display:flex;flex-direction:column;gap:18px}.contact .lead{font-size:18px;color:var(--paper);letter-spacing:-.01em;max-width:50ch}.contact .lines{display:grid;grid-template-columns:max-content 1fr;gap:8px 20px;font-size:13px;color:var(--dim)}.contact .lines b{color:var(--paper);font-weight:500}.contact a{color:var(--paper);border-bottom:1px dotted var(--hair-2)}.contact a:hover{border-bottom-color:var(--paper)}.todo{color:var(--dimmer);font-style:italic}.rail-r{border-left:1px solid var(--hair);background:var(--ink-2);position:sticky;top:var(--bar-h-top);align-self:start;height:calc(100vh - var(--bar-h-top) - var(--bar-h-bot));overflow-y:auto;padding:22px 20px;font-size:12px}.rail-r h4{font-size:9px;letter-spacing:.22em;color:var(--dimmer);text-transform:uppercase;margin:22px 0 10px;font-weight:500}.rail-r h4:first-of-type{margin-top:0}.rail-r a{color:var(--paper);border-bottom:1px dotted var(--hair-2)}.rail-r a:hover{border-bottom-color:var(--paper)}.stat{display:grid;grid-template-columns:1fr auto;gap:6px;align-items:baseline;font-size:11.5px;padding:5px 0;border-bottom:1px solid var(--hair)}.stat-group .stat:last-child{border-bottom:0}.stat .k{color:var(--dim);letter-spacing:.02em}.stat .v{color:var(--paper);font-weight:500}.stat .v.ok{color:var(--ok)}.stacklist{list-style:none;padding:0;margin:0;font-size:12px}.stacklist li{display:flex;align-items:baseline;gap:8px;padding:4px 0;color:var(--paper)}.stacklist li:before{content:"·";color:var(--faint)}.stacklist li .note{color:var(--dim);margin-left:auto;font-size:10px}.ascii{margin:12px 0 4px;font-size:9px;line-height:1.25;color:var(--faint);white-space:pre;text-align:center}.statusbar{position:sticky;bottom:0;z-index:20;display:grid;grid-template-columns:var(--rail-w-l) 1fr auto auto;align-items:center;height:var(--bar-h-bot);background:var(--ink-2);border-top:1px solid var(--hair);font-size:10.5px;color:var(--dim);letter-spacing:.04em;user-select:none}.statusbar>div{padding:0 14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.statusbar>div+div{border-left:1px solid var(--hair)}.statusbar .prompt{display:flex;align-items:baseline;gap:8px;color:var(--paper)}.statusbar .prompt .p{color:var(--faint)}.statusbar a{color:var(--dim)}.statusbar a:hover{color:var(--paper)}.legal{max-width:820px;padding:40px 56px 96px}.legal .cmd{margin-bottom:28px}.legal h1{font-size:clamp(26px,4vw,40px);font-weight:600;letter-spacing:-.02em;margin:0 0 28px}.legal h2{font-size:15px;font-weight:600;color:var(--paper);margin:34px 0 10px}.legal p,.legal li{color:var(--dim);max-width:72ch;margin:0 0 12px;font-size:13px}.legal a{color:var(--paper);border-bottom:1px dotted var(--hair-2)}.legal a:hover{border-bottom-color:var(--paper)}.legal .note{border:1px solid var(--hair-2);border-radius:4px;background:var(--ink-3);padding:14px 16px;color:var(--dimmer);font-size:12px;margin:8px 0 24px}@media(max-width:1100px){:root{--rail-w-r: 0px}.rail-r,.topbar .right{display:none}.topbar,.body{grid-template-columns:var(--rail-w-l) 1fr}.statusbar{grid-template-columns:var(--rail-w-l) 1fr auto}.statusbar .branch{display:none}}@media(max-width:720px){:root{--rail-w-l: 0px}.rail-l{display:none}.topbar{grid-template-columns:1fr}.topbar .tabs{display:none}.body{grid-template-columns:1fr}.statusbar{grid-template-columns:1fr auto}.statusbar .mode{display:none}main{padding:24px 20px 30vh}.legal{padding:24px 20px 60px}}svg[data-astro-cid-tvrurpns]{color:var(--paper);display:block}.lang[data-astro-cid-lq7i5isa]{display:inline-flex;align-items:center;gap:6px;margin-right:12px;font-size:11px;letter-spacing:.04em}.lang[data-astro-cid-lq7i5isa] a[data-astro-cid-lq7i5isa]{color:var(--dim)}.lang[data-astro-cid-lq7i5isa] a[data-astro-cid-lq7i5isa]:hover,.lang[data-astro-cid-lq7i5isa] a[data-astro-cid-lq7i5isa].is-active{color:var(--paper)}.lang[data-astro-cid-lq7i5isa] .sep[data-astro-cid-lq7i5isa]{color:var(--faint)}
