@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff)format("woff")}:root{--bg:#f6f5ec;--fg:#1a1a1a;--muted:#5c5c58;--rule:#e0ded2;--l0:#b0b09c;--l1:#95977f;--l2:#6f7360;--l3:#7a6a52;--l4:#4c5440;--l5:#5c6a4c;--l6:#7d8266;--l7:#565d48;--boost:.1;--rain-op:.22;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f110e;--fg:#d9d9d3;--muted:#8e8e87;--rule:#2a2b29;--l0:#363a30;--l1:#4d5243;--l2:#6a705c;--l3:#6e6250;--l4:#a39e94;--l5:#8a9478;--l6:#6e735e;--l7:#878d78;--boost:0;--rain-op:.3;color-scheme:dark}}:root[data-theme=dark]{--bg:#0f110e;--fg:#d9d9d3;--muted:#8e8e87;--rule:#2a2b29;--l0:#363a30;--l1:#4d5243;--l2:#6a705c;--l3:#6e6250;--l4:#a39e94;--l5:#8a9478;--l6:#6e735e;--l7:#878d78;--boost:0;--rain-op:.3;color-scheme:dark}*{box-sizing:border-box}html{background:var(--bg)}html,body{color:var(--fg);margin:0}body{-webkit-font-smoothing:antialiased;font-family:IBM Plex Mono,ui-monospace,SF Mono,Menlo,monospace;font-size:15px;line-height:1.65}.page{min-height:max(100vh,720px);padding:clamp(72px,13vh,160px) 24px 96px;position:relative;overflow:hidden}a{color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--muted) 55%,transparent);text-underline-offset:3px}a:hover{text-decoration-color:currentColor}a:focus-visible,button:focus-visible{outline-offset:3px;border-radius:2px;outline:2px solid}main{flex-direction:column;gap:48px;max-width:680px;margin:0 auto;display:flex}.head{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.head header{flex-direction:column;gap:8px;min-width:0;display:flex}h1{letter-spacing:.08em;text-transform:uppercase;margin:0;font-size:15px;font-weight:500}.role{color:var(--muted);text-wrap:pretty;margin:0}.bio{text-wrap:pretty;max-width:58ch;margin:0}#theme{cursor:pointer;width:44px;height:44px;color:var(--muted);background:0 0;border:0;flex:none;justify-content:center;align-items:center;margin:-10px -10px 0 0;padding:0;display:flex}#theme svg{width:18px;height:18px}#theme .ic-sun{display:none}:root[data-theme=dark] #theme .ic-sun{display:block}:root[data-theme=dark] #theme .ic-moon{display:none}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) #theme .ic-sun{display:block}:root:not([data-theme=light]) #theme .ic-moon{display:none}}.rows{border-top:1px solid var(--rule);grid-template-columns:minmax(96px,128px) 1fr;gap:14px 24px;padding-top:32px;display:grid}.rows .k{color:var(--muted)}.rows .v{flex-wrap:wrap;gap:4px 12px;display:flex}.rows .v .sep{color:var(--muted)}.rows a{margin:-6px 0;padding:6px 0;display:inline-block}.mail .addr{color:var(--muted);display:none}.mail:hover .addr,.mail:focus-visible .addr{display:inline}.foot{z-index:1;letter-spacing:.04em;color:var(--muted);background:color-mix(in srgb,var(--bg) 78%,transparent);border-radius:3px;gap:8px;padding:3px 8px;font-size:12px;display:flex;position:absolute;bottom:10px;right:14px}.foot a{text-decoration:none}.foot a:hover{text-decoration:underline}.foot-info{align-items:center;gap:8px;display:flex}.foot-btn{cursor:pointer;width:36px;height:36px;color:inherit;background:0 0;border:0;justify-content:center;align-items:center;margin:-8px -6px;padding:0;display:flex}.foot-btn svg{width:16px;height:16px}.foot:not(.open) .foot-info{display:none}.foot.open{gap:10px}.forest{pointer-events:none;z-index:-1;transform-origin:50% 100%;animation:38s ease-in-out 6s infinite gust;position:fixed;inset:0;overflow:hidden}.stand{--fs:1;height:100%;width:calc(100% / var(--fs));bottom:0;left:calc((1 - 1 / var(--fs)) * 50%);transform:scale(var(--fs));transform-origin:50% 100%;position:absolute}.stand svg,.stand .tw,.rain svg{position:absolute}.tw svg{width:100%;height:100%;top:0;left:0}.ridge{width:100%;position:absolute;bottom:0;left:0}.ridge path{opacity:.55;stroke-dasharray:1;stroke-dashoffset:1px;animation:14s ease-out forwards draw}.tw{transform-origin:50% 100%;animation:grow var(--d) cubic-bezier(.2,.6,.2,1) var(--t) both}.tw.still{animation:none}.tree{transform-origin:50% 100%;animation:sway var(--sd) ease-in-out var(--st) infinite alternate}.tree.still,.tree.calm{animation:none}.drop{animation:fall var(--d) linear var(--t) infinite;opacity:var(--rain-op)}.moon{z-index:-1;width:40px;height:40px;color:var(--l0);opacity:.55;pointer-events:none;animation:3600s linear infinite alternate drift;display:none;position:fixed;top:22px;right:20%}.moon.on{display:block}@media (width<=600px){.rows{grid-template-columns:72px 1fr;column-gap:16px}#theme{z-index:2;margin:0;position:absolute;top:10px;right:10px}}@keyframes grow{0%{transform:scaleY(0)}to{transform:scaleY(1)}}@keyframes draw{to{stroke-dashoffset:0}}@keyframes sway{0%{transform:rotate(calc(var(--amp,.5deg) * -1))}to{transform:rotate(var(--amp,.5deg))}}@keyframes fall{to{transform:translate(-14px,calc(100vh + 80px))}}@keyframes gust{0%,62%,to{transform:skew(0)}66%{transform:skew(-1.6deg)}71%{transform:skew(-.5deg)}75%{transform:skew(-1.1deg)}86%{transform:skew(0)}}@keyframes drift{0%{transform:translate(0)}to{transform:translate(24px)}}@media (prefers-reduced-motion:reduce){.forest,.forest *,.moon{animation-duration:10ms!important;animation-iteration-count:1!important;animation-delay:0s!important}.rain{display:none}}@media print{.forest,.moon,#theme{display:none!important}.page{min-height:0;padding:0}:root:root:root{--bg:#fff;--fg:#000;--muted:#444;--rule:#bbb;color-scheme:light}html,body{color:#000;background:#fff}.rows a:after{content:" (" attr(href) ")";color:#444;font-size:.85em}.mail .addr{display:none!important}.foot{background:0 0;margin-top:32px;padding:0;position:static}.foot-btn{display:none!important}.foot-info{display:flex!important}}.stand .ridge{clip-path:inset(0 100% 0 0);animation:ridge-reveal 14s ease-out calc(0s - var(--age,0s)) forwards}.stand .ridge path{stroke-dasharray:none;stroke-dashoffset:0;animation:none}@keyframes ridge-reveal{to{clip-path:inset(0)}}.stand .tw{animation-delay:calc(var(--t) - var(--age,0s))}.forest.tab-hidden .tree,.forest.tab-hidden .rain,.forest.tab-hidden .drop,.moon.tab-hidden{animation-play-state:paused!important}.page .forest{animation:none}.stand .tree:not(.calm):not(.still){animation:sway var(--sd) ease-in-out var(--st) infinite alternate,gust-lean 38s ease-in-out calc(6s + var(--gx,0s) - var(--age,0s)) infinite}.forest .rain{transform-origin:50% 100%;animation:gust 38s ease-in-out calc(6s + var(--gx,0s)) infinite;position:absolute;inset:0}@keyframes gust-lean{0%,62%,to{rotate:0deg}66%{rotate:1.6deg}71%{rotate:.5deg}75%{rotate:1.1deg}86%{rotate:0deg}}@keyframes pnw-fade{to{opacity:var(--o,1)}}.stand .mountain{width:clamp(520px,62%,1500px);color:var(--l1);--o:.6;opacity:0;animation:pnw-fade 24s ease-out calc(3s - var(--age,0s)) forwards;margin-left:calc(clamp(520px,62%,1500px)/-2);bottom:84px;left:60%;-webkit-mask-image:linear-gradient(#000 62%,#0000);mask-image:linear-gradient(#000 62%,#0000)}.mountain path{stroke-width:1.1px}.mountain .glacier{stroke-width:.6px;opacity:.6}.stand .mist{opacity:0;background:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--bg) 86%,transparent) 42%,color-mix(in srgb,var(--bg) 86%,transparent) 60%,transparent);width:140%;animation:pnw-fade 30s ease-out calc(6s - var(--age,0s)) forwards,mist-drift var(--d) ease-in-out var(--t) infinite alternate;position:absolute;left:-20%}@keyframes mist-drift{0%{transform:translate(-5%)}to{transform:translate(5%)}}.stand .perch{overflow:visible}.owl{opacity:0;animation:pnw-fade 3s ease-out calc(var(--t) + var(--d) - var(--age,0s)) forwards}.owl path{stroke-width:.9px}.owl .owl-body{fill:var(--bg)}.owl-eyes{transform-box:fill-box;transform-origin:50%;animation:7s linear 9s infinite owl-blink}@keyframes owl-blink{0%,95%,to{transform:scaleY(1)}97.5%{transform:scaleY(.1)}}.stand .squatch{width:38px;height:86px;color:var(--l1);opacity:0;position:absolute;bottom:0;left:0}.stand .squatch.still{opacity:.35}.stand .squatch svg{width:100%;height:100%;animation:.8s ease-in-out infinite alternate squatch-bob;top:0;left:0;overflow:visible}.squatch path{stroke-width:1.1px}@keyframes squatch-bob{0%{transform:translateY(0)}to{transform:translateY(1.5px)}}.forest .crows{color:var(--l2);position:absolute;inset:0}.crow{animation:crow-fly var(--d) linear var(--t) infinite;position:absolute;left:0;transform:translate(104vw)}.crow svg{opacity:.9;width:100%;animation:crow-flap var(--fd) ease-in-out infinite alternate;display:block;overflow:visible}.crow path{stroke-width:1.1px}@keyframes crow-fly{0%{transform:translate(104vw)}60%,to{transform:translate(calc(-6vw - 40px),-1vh)}}@keyframes crow-flap{0%{transform:scaleY(1)}to{transform:scaleY(.4)}}.flake{color:var(--l1);opacity:calc(var(--rain-op) + .3);animation:snow-fall var(--d) linear var(--t) infinite,snow-sway 3.4s ease-in-out var(--t) infinite alternate}.flake path{stroke-width:.7px}@keyframes snow-fall{to{translate:var(--dx) calc(100vh + 340px)}}@keyframes snow-sway{0%{transform:translate(-7px)}to{transform:translate(7px)}}.forest.tab-hidden :is(.crow,.crow svg,.flake,.owl-eyes,.squatch svg){animation-play-state:paused!important}.forest.tab-hidden .mist{animation-play-state:running,paused!important}@media (prefers-reduced-motion:reduce){.forest .crows{display:none}}
