:root{--soil:#0d1410;--bark:#162019;--line:#26332a;--stone:#8a938a;--lichen:#d7e3b5;--moss:#7fae3f;--dew:#6fd3c4;--ember:#e0a24a;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}@media (prefers-color-scheme:light){:root{--soil:#f6f5ee;--bark:#fff;--line:#dcdfd2;--stone:#5f675f;--lichen:#1d261f;--moss:#4c7a1e;--dew:#1c7c70;--ember:#9a5f12}}*{box-sizing:border-box}html{background:var(--soil)}body{background:var(--soil);color:var(--lichen);font:16px/1.6 var(--sans);-webkit-text-size-adjust:100%;margin:0}html.js:not(.booted),html.js:not(.booted) body{background:#000}html.js:not(.booted) #resume{visibility:hidden}#resume{max-width:760px;margin:0 auto;padding:48px 16px 64px}a{color:var(--dew);text-underline-offset:3px}a:hover{color:var(--moss)}:focus-visible{outline:2px solid var(--moss);outline-offset:2px}.hero{align-items:center;gap:16px;display:flex}.hero .mark{width:56px;height:56px;image-rendering:pixelated;border-radius:4px;flex:none}h1{letter-spacing:-.02em;margin:0;font-size:clamp(28px,6vw,40px);line-height:1.1}h1:focus{outline:none}.job-title{color:var(--moss);font-family:var(--mono);margin:2px 0 0;font-size:15px}.tagline{margin:20px 0 12px;font-size:18px}.links{flex-wrap:wrap;gap:8px;margin:0 0 8px;padding:0;list-style:none;display:flex}.links a{border:1px solid var(--line);font:14px var(--mono);border-radius:999px;padding:4px 12px;text-decoration:none;display:inline-block}h2{font:600 13px var(--mono);color:var(--stone);text-transform:lowercase;margin:48px 0 12px}h2:before{content:"## ";color:var(--moss)}.story{border-left:2px solid var(--line);margin:0;padding:0;list-style:none}.story li{grid-template-columns:170px 1fr;gap:12px;padding:6px 0 6px 16px;display:grid;position:relative}.story li:before{content:"";background:var(--moss);border-radius:2px;width:10px;height:10px;position:absolute;top:14px;left:-6px}.when{font:13px/1.9 var(--mono);color:var(--stone)}.skills{gap:8px;margin:0;display:grid}.skills div{grid-template-columns:170px 1fr;gap:12px;display:grid}.skills dt{font:13px/1.9 var(--mono);color:var(--stone)}.skills dd{margin:0}.projects{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;margin:0;padding:0;list-style:none;display:grid}.project{background:var(--bark);border:1px solid var(--line);border-radius:10px;padding:14px 16px}.project h3{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 4px;font-size:17px;display:flex}.project p{margin:0 0 10px;font-size:15px}.status{font:11px var(--mono);border:1px solid;border-radius:999px;padding:1px 7px}.status-live{color:var(--moss)}.status-building{color:var(--ember)}.status-done{color:var(--dew)}.status-private{color:var(--stone)}.tech{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.tech li{font:12px var(--mono);color:var(--stone)}.tech li+li:before{content:"· "}footer{color:var(--stone);font:13px var(--mono);margin-top:56px}footer .mos-logo{margin-bottom:8px;display:block}.mos-reboot{font:13px var(--mono);color:var(--lichen);background:var(--bark);border:1px solid var(--line);cursor:pointer;border-radius:999px;padding:8px 14px;position:fixed;bottom:16px;right:16px}.mos-reboot:hover{border-color:var(--moss);color:var(--moss)}@media (max-width:560px){.story li,.skills div{grid-template-columns:1fr;gap:0}.projects{grid-template-columns:1fr}}#boot{--bg:#000;--fg:#bdbdbd;--dim:#bdbdbd;--hi:#bdbdbd;--ok:#bdbdbd;--warn:#bdbdbd;--err:#bdbdbd;--path:#bdbdbd;--user:#bdbdbd;--note:#bdbdbd;--chat:#bdbdbd;--mono:ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;z-index:100;background:var(--bg);color:var(--fg);font:14px/1.5 var(--mono);transition:opacity .35s,background-color 1.2s;position:fixed;inset:0;overflow:hidden}#boot.leaving{opacity:0}#boot .back{z-index:0;pointer-events:none;position:absolute;inset:0}#boot .desk{z-index:2;grid-template:"main"minmax(0,1fr)"tmux"/minmax(0,1fr);transition:opacity .6s,filter .6s;display:grid;position:absolute;inset:0}#boot .win{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}#boot .win.main{grid-area:main}#boot .win .body,#boot .term{flex:1;min-width:0;min-height:0;display:flex}#boot .bar{display:none}#boot .side{grid-area:side;min-width:0;min-height:0;display:none}#boot .tmux{grid-area:tmux;display:none}#boot .log{padding:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) 24px max(16px, env(safe-area-inset-left));white-space:pre-wrap;overflow-wrap:anywhere;scrollbar-width:none;cursor:text;flex:1;overflow-y:auto}#boot .log::-webkit-scrollbar{display:none}#boot .line{text-indent:-2ch;min-height:1.5em;padding-left:2ch}#boot span,#boot .line{transition:color 1.2s}#boot .ts,#boot .dim{color:var(--dim)}#boot .hi,#boot .cmd{color:var(--hi)}#boot .ok{color:var(--ok)}#boot .warn{color:var(--warn)}#boot .err{color:var(--err)}#boot .path{color:var(--path)}#boot .user{color:var(--user)}#boot .pkg{color:var(--hi)}#boot .note{color:var(--note)}#boot .chat{color:var(--chat)}#boot .caret{vertical-align:text-bottom;background:var(--fg);width:.6em;height:1.15em;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}#boot .prompt-row{align-items:baseline;display:flex}#boot .prompt-row[hidden]{display:none}#boot .prompt-input{min-width:0;color:var(--hi);caret-color:var(--fg);font:inherit;background:0 0;border:0;outline:0;flex:1;margin:0;padding:0}#boot .skip{z-index:20;top:max(10px, env(safe-area-inset-top));right:max(12px, env(safe-area-inset-right));background:var(--bg);border:1px solid var(--fg);color:var(--fg);font:inherit;cursor:pointer;opacity:0;padding:4px 10px;font-size:12px;transition:opacity .3s;position:absolute}#boot .skip.shown{opacity:.55}#boot .skip.shown:hover,#boot .skip:focus-visible{opacity:1}#boot .skip kbd{font:inherit}@media (hover:none){#boot .skip kbd{display:none}}:root[data-caps~=color] #boot{--bg:#0b110d;--fg:#c9d6b0;--dim:#66736a;--hi:#eef5dc;--ok:#7fae3f;--warn:#e0a24a;--err:#e06c5a;--path:#6fd3c4;--user:#7fae3f;--note:#b9a6e8;--chat:#e8d66b}#boot.hero-on .desk{opacity:.1;filter:blur(1.5px)}#boot .hero-layer{z-index:10;pointer-events:none;position:absolute;inset:0}#boot .hero-layer canvas{width:100%;height:100%;position:absolute;inset:0}#boot .mos-logo-wrap{z-index:12;transform-origin:0 0;pointer-events:none;line-height:0;position:absolute}#boot .mos-logo-wrap svg{display:block}#boot .mos-logo-wrap.docked{top:9px;left:16px}#boot .mos-logo-wrap.docked svg{width:75px;height:auto}:root:not([data-caps~=compositor]) #boot.has-logo .main .log{padding-top:48px;-webkit-mask-image:linear-gradient(#0000 0,#000 48px);mask-image:linear-gradient(#0000 0,#000 48px)}:root[data-caps~=javascript] #boot .ts[data-age]{cursor:help;position:relative}:root[data-caps~=javascript] #boot .ts[data-age]:hover:after{content:"age " attr(data-age);z-index:3;background:var(--hi);color:var(--bg);text-indent:0;white-space:nowrap;border-radius:3px;padding:1px 6px;font-size:11px;position:absolute;bottom:100%;left:0}:root[data-caps~=javascript] #boot .cmd-line{cursor:pointer}:root[data-caps~=javascript] #boot .cmd-line:hover .cmd{text-underline-offset:3px;text-decoration:underline}:root[data-caps~=java] #boot .tmux{display:flex}#boot .tmux{background:var(--ok);color:var(--bg);white-space:nowrap;justify-content:space-between;gap:12px;padding:0 10px;font-size:12px;line-height:22px;overflow:hidden}#boot .st-right{gap:14px;display:flex;overflow:hidden}#boot .st-fps,#boot .st-inv{display:none}:root[data-caps~=cpp] #boot .st-fps:not(:empty){display:inline}:root[data-caps~=java] #boot .skip{top:auto;bottom:34px}#boot .spores,#boot .wallpaper{width:100%;height:100%;position:absolute;inset:0}#boot.split .desk{grid-template-columns:minmax(0,1fr) minmax(0,36%);grid-template-areas:"main side""tmux tmux"}#boot.split .side{border-left:1px solid var(--ok);flex-direction:column;display:flex}#boot.split .pane{flex:1}#boot.split .pane+.pane{border-top:1px solid var(--ok)}#boot.split .bar{color:var(--ok);justify-content:flex-end;padding:0 10px;font-size:11px;line-height:20px;display:flex}#boot.split .bar .pebbles{display:none}#boot .pane .log{padding:4px 10px 8px;font-size:12px}#boot.split.has-logo .main .log{padding-top:28px}:root[data-caps~=motion] #boot .desk{transition:opacity .6s,filter .6s,padding .8s cubic-bezier(.2,.75,.2,1),gap .8s cubic-bezier(.2,.75,.2,1)}:root[data-caps~=motion] #boot .win,:root[data-caps~=motion] #boot .side{transition:border-radius .8s,box-shadow .8s,background-color .8s,gap .8s}:root[data-caps~=motion] #boot .st-inv:not(:empty){align-items:center;gap:4px;display:inline-flex}#boot .st-inv svg{height:14px;animation:.9s cubic-bezier(.3,1.6,.5,1) both inv-drop}@keyframes inv-drop{0%{opacity:0;transform:translateY(-30px)}}:root[data-caps~=compositor] #boot .desk{gap:14px;padding:52px 16px 16px}:root[data-caps~=compositor] #boot.split .side{border:0;gap:14px}:root[data-caps~=compositor] #boot .pane+.pane{border:0}:root[data-caps~=compositor] #boot .win{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#101813d6;border-radius:10px;overflow:hidden;box-shadow:0 18px 50px #0000008c,0 0 0 1px #c9d6b017}:root[data-caps~=compositor] #boot .bar{height:30px;color:var(--dim);background:#c9d6b00d;border-bottom:1px solid #c9d6b014;flex:none;justify-content:center;align-items:center;padding:0 70px;font-size:12px;line-height:30px;display:flex;position:relative}:root[data-caps~=compositor] #boot .bar .title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:root[data-caps~=compositor] #boot .bar .pebbles{gap:7px;display:flex;position:absolute;left:11px}#boot .pebbles>*{background:#c46a55;border-radius:50%;width:11px;height:11px}#boot .pebbles>:nth-child(2){background:#c9963f}#boot .pebbles>:nth-child(3){background:#6f9e35}:root[data-caps~=compositor] #boot .tmux{border-radius:7px}:root #boot.retired .desk{grid-template:"main"minmax(0,1fr)"tmux"/minmax(0,1fr);padding:60px 17vw 33vh}#boot.retired .side{display:none}#boot .wallpaper .sky{opacity:0}#boot .wallpaper .grid{fill:none;stroke:var(--path)}#boot .wallpaper .grid-minor{stroke-width:.5px;opacity:.45}#boot .wallpaper .grid-major{stroke-width:.9px}#boot .wallpaper .draft{fill:none;stroke:var(--path);stroke-width:1.3px;stroke-linecap:round}#boot .wallpaper .arrowhead{fill:var(--path)}#boot .wallpaper .dim-text,#boot .wallpaper .block-text{fill:var(--path);font:11px var(--mono);letter-spacing:.08em}#boot .wallpaper .block-text.title{fill:var(--hi);font-weight:700}#boot .wallpaper .moon-fill{fill:#d7e3b5}#boot .wallpaper .hill-far{fill:#1f3320}#boot .wallpaper .hill-mid{fill:#2c4a26}#boot .wallpaper .hill-near{fill:#3c6529}:root #boot.desktop .desk{padding:62px max(16px,15vw) 112px}:root #boot.desktop .tmux,:root[data-caps~=desktop] #boot .skip{display:none}#boot .menubar{z-index:11;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#0b110db8;border-bottom:1px solid #c9d6b014;align-items:center;gap:16px;height:44px;padding:0 16px;font-size:12px;animation:.6s cubic-bezier(.2,.75,.2,1) both menubar-in;display:flex;position:absolute;inset:0 0 auto}@keyframes menubar-in{0%{transform:translateY(-100%)}}#boot .mb-logo-room{flex:none;width:75px}#boot .mb-item{color:var(--hi);font-weight:700}#boot .mb-spacer{flex:1}#boot .mb-uptime{color:var(--dim)}#boot .dock{z-index:11;left:50%;bottom:max(16px, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#101813b8;border-radius:20px;gap:10px;padding:10px 12px;animation:.7s cubic-bezier(.2,.75,.2,1) .15s both dock-in;display:flex;position:absolute;transform:translate(-50%);box-shadow:0 12px 40px #00000080,0 0 0 1px #c9d6b01a}@keyframes dock-in{0%{transform:translate(-50%,150%)}}#boot .dock-app{cursor:pointer;background:0 0;border:0;width:52px;height:52px;padding:0}#boot .dock-icon{color:#0b110d;width:100%;height:100%;font:700 16px/1 var(--mono);background:linear-gradient(160deg,#8fc04b,#3f6b2a);border-radius:13px;place-items:center;transition:transform .2s cubic-bezier(.2,.75,.2,1);display:grid;box-shadow:inset 0 1px #ffffff40,inset 0 -3px #00000040}#boot .dock-app:hover .dock-icon,#boot .dock-app:focus-visible .dock-icon{transform:translateY(-6px)scale(1.08)}#boot .app-terminal .dock-icon{color:#8fc04b;background:linear-gradient(160deg,#26352a,#0f1712)}#boot .app-resume .dock-icon{background:linear-gradient(160deg,#eef5dc,#b9c79a)}#boot .app-about .dock-icon{background:linear-gradient(160deg,#8fe3d6,#3d9c8f)}#boot .app-contact .dock-icon{background:linear-gradient(160deg,#f0bd6e,#b87a26)}#boot .app-music .dock-icon{background:linear-gradient(160deg,#cdbcf2,#7d68b8)}@media (max-width:760px){#boot.split .desk{grid-template:"main"minmax(0,1fr)"side"minmax(0,32%)"tmux"/minmax(0,1fr)}#boot.split .side{border-left:0;border-top:1px solid var(--ok);flex-direction:row}#boot.split .pane+.pane{border-top:0;border-left:1px solid var(--ok)}#boot .pane:nth-child(3){display:none}#boot .pane .log{font-size:11px}:root[data-caps~=compositor] #boot .desk{gap:10px;padding:52px 10px 10px}:root[data-caps~=compositor] #boot.split .side{gap:10px}:root #boot.retired .desk{grid-template-rows:minmax(0,1fr) auto;grid-template-areas:"main""tmux";padding:56px 10px 38vh}:root #boot.desktop .desk{padding:54px 10px 96px}}@media (max-width:560px){#boot{font-size:12px}#boot .main .log{padding-bottom:64px}#boot .st-size,#boot .st-clock,#boot .mb-uptime{display:none}#boot .skip{top:auto;bottom:max(14px, env(safe-area-inset-bottom));padding:8px 14px;font-size:13px}:root[data-caps~=java] #boot .skip{bottom:34px}#boot .dock{border-radius:16px;gap:6px;padding:8px}#boot .dock-app{width:42px;height:42px}#boot .dock-icon{border-radius:11px;font-size:13px}}@media (prefers-reduced-motion:reduce){#boot,#boot *,#boot span,#boot .line{transition:none!important;animation:none!important}}
