:root{--bg: #ffffff;--fg: #1a1a1a;--dim: #8a8a8a;--accent: #1a1a1a;--rule: #d0d0d0;--font: "SFMono-Regular", "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", "Liberation Mono", monospace;--measure: 70ch;--footer-h: 3rem;--header-h: 3.25rem}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--bg: #0e0e0e;--fg: #e6e6e6;--dim: #777777;--accent: #e6e6e6;--rule: #2a2a2a}}:root[data-theme=dark]{--bg: #0e0e0e;--fg: #e6e6e6;--dim: #777777;--accent: #e6e6e6;--rule: #2a2a2a}*{box-sizing:border-box}html{font-size:15px}body{margin:0;padding:calc(var(--header-h) + .5rem) 1.25rem calc(var(--footer-h) + 1.5rem);background:var(--bg);color:var(--fg);font-family:var(--font);font-size:1rem;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}main{width:100%;max-width:var(--measure);margin:0 auto}@media (min-width: 60rem){main{max-width:60rem}}.footer{position:fixed;left:0;right:0;bottom:0;z-index:10;min-height:var(--footer-h);display:flex;align-items:center;padding:0 1.25rem;background:var(--bg);border-top:1px solid transparent;transition:border-color .2s ease;color:var(--dim);font-size:.85rem}.footer.is-floating{border-top-color:var(--rule)}.footer-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;max-width:var(--measure);margin:0 auto}.footer-links{display:flex;align-items:center;gap:.9rem}.footer-links a{display:inline-flex;color:var(--dim);text-decoration:none}.footer-links a:hover{color:var(--fg);background:none}a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}a:hover{background:var(--fg);color:var(--bg);text-decoration:none}p{margin:0 0 1rem}hr.sep{border:0;border-top:1px dashed var(--rule);margin:1.5rem 0}.topbar{position:fixed;top:0;left:0;right:0;z-index:20;min-height:var(--header-h);display:flex;align-items:center;padding:0 1.25rem;background:var(--bg);border-bottom:1px solid transparent;transition:border-color .2s ease}.topbar.is-scrolled{border-bottom-color:var(--rule)}.topbar-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;max-width:var(--measure);margin:0 auto}@media (min-width: 60rem){.topbar-inner{max-width:60rem}}.theme-toggle{flex:none;display:inline-flex;align-items:center;gap:.45rem;padding:0;border:0;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent}.theme-toggle-text{font:inherit;font-size:.8rem;color:var(--dim)}.theme-toggle:hover .theme-toggle-text{color:var(--fg)}.theme-toggle-track{position:relative;flex:none;width:3.2rem;height:1.5rem;border:1px solid var(--rule);border-radius:999px}.theme-toggle:hover .theme-toggle-track{border-color:var(--dim)}.theme-toggle-thumb{position:absolute;top:50%;left:.18rem;width:1.06rem;height:1.06rem;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--fg);color:var(--bg);font-size:.72rem;line-height:1;transition:left .18s ease}.theme-toggle[aria-checked=true] .theme-toggle-thumb{left:calc(100% - 1.24rem)}@media (prefers-reduced-motion: reduce){.theme-toggle-thumb{transition:none}}.path{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:.5ch;color:var(--dim)}.crumb{white-space:nowrap}.slash{margin-right:.4ch}.path a{color:var(--dim);text-decoration:none}.path a:hover{color:var(--fg);background:none;text-decoration:underline}.path a.current{color:var(--fg);font-weight:600}.cmd{margin:1.5rem 0}.cmd>.line{color:var(--fg);margin-bottom:.5rem}.cmd>.line:before{content:"$ ";color:var(--dim)}.cmd>.out{display:block}ul.ls{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.25rem 2rem}ul.ls li{white-space:nowrap}.dir{font-weight:600}ul.ll{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:max-content 1fr;column-gap:2rem;row-gap:.5rem;align-items:baseline}ul.ll li{display:contents}ul.ll .dir{white-space:nowrap}.badge{display:inline-block;margin-right:.5ch;padding:0 .45rem;border-radius:3px;background:var(--fg);color:var(--bg);font-size:.68rem;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;vertical-align:1px}@media (max-width: 34rem){ul.ll,ul.ll li{display:block}ul.ll li+li{margin-top:.75rem}ul.ll .dir{display:block}}@media (max-width: 47.99rem){ul.ll li.proj--desktop-only{display:none}}.show-more{display:inline-block;margin-top:.75rem;color:var(--dim);text-decoration:none}.show-more:hover{color:var(--fg);background:none}@media (min-width: 48rem){.show-more{display:none}.show-more.more--desktop{display:inline-block}}.whoami{display:flex;align-items:center;gap:1rem}.avatar{flex:none;width:clamp(88px,16vw,180px);height:clamp(88px,16vw,180px);object-fit:cover;border:1px solid var(--rule)}.about--long{display:none;white-space:pre-wrap}@media (min-width: 48rem){.about--short{display:none}.about--long{display:block}}.about-photo{display:block;width:clamp(140px,40%,320px);height:auto;margin:0 0 1.25rem;border:1px solid var(--rule)}.doc{white-space:pre-wrap}.contacts{white-space:normal}.contact-row{display:flex;align-items:center;gap:.5ch}.contact-icon{flex:none;display:inline-flex;color:var(--dim);margin-right:.25ch}.contact-key{flex:none}.contact-sep{flex:none;color:var(--dim)}.contact-link{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doc h1,.doc h2,.doc h3{font-size:1rem;font-weight:600;margin:1.25rem 0 .5rem}.meta{color:var(--dim)}@media (min-width: 64rem){main:has(.home){max-width:72rem}.home{display:flex;align-items:flex-start;gap:3rem}.home-main{flex:1 1 0;min-width:0;max-width:var(--measure)}.home>.ascii-intro{order:1;flex:0 0 auto;margin:0;position:sticky;top:2.5rem}}.ascii-intro{margin:0 auto 1.5rem;width:fit-content;max-width:100%;overflow-x:auto}pre.ascii-screen{margin:0;font-family:var(--font);font-size:clamp(7px,1.7vw,12px);line-height:1.05;letter-spacing:0;white-space:pre;color:var(--fg)}.ascii-caption{text-align:center;color:var(--dim);font-size:.85rem;margin-top:.25rem;min-height:1.2em}.ascii-hint{text-align:center;color:var(--dim);font-size:.75rem;margin-top:.25rem}.ascii-hint button{font:inherit;color:var(--dim);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.ascii-hint button:hover{color:var(--fg)}.cursor:after{content:"▌";margin-left:1px;animation:blink 1.1s steps(1) infinite}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion: reduce){.cursor:after{animation:none}}
