:root{--bg: #f4efe5;--dot: #1d1b1918;--surface: #fffdf9;--sunken: #ebe4d6;--ink: #1f1c19;--text: #34302b;--muted: #6b6357;--line: #1d1b1922;--accent: #b3222e;--accent-strong: #981b26;--brass: #8a7245;--alpha: #b3222e;--alpha-side: #7a1620;--mod: #3a3a3c;--mod-side: #232325;--legend: #f2c94c;--sidebar-w: 0px;--nav-h: 64px;--gutter: 16px;--avail: calc(100vw - var(--sidebar-w) - var(--gutter) * 2 - 16px);--u: min(54px, calc(var(--avail) / 16.5));--travel: 4px;--press: cubic-bezier(.3, 0, .2, 1) 70ms;--thumb: #8a7245;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sans: ui-rounded, "SF Pro Rounded", "Nunito", system-ui, sans-serif}@media(min-width:1024px){:root{--sidebar-w: 250px;--gutter: 36px}}@media(min-width:1280px){:root{--sidebar-w: 300px;--gutter: 48px}}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 8px)}html,.card-inner,.sidebar{scrollbar-width:thin;scrollbar-color:var(--thumb) transparent}body{margin:0;background-color:var(--bg);background-image:radial-gradient(var(--dot) 1px,transparent 1.3px);background-size:22px 22px;color:var(--text);font-family:var(--sans);line-height:1.5}a{color:var(--accent-strong);text-decoration-color:#981b2655;text-underline-offset:3px}a:hover{text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}kbd{font-family:var(--mono);font-size:.85em;padding:.05em .4em;border-radius:4px;background:var(--mod);color:var(--legend);box-shadow:0 2px 0 var(--mod-side)}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.skip{position:absolute;left:-999px;z-index:30}.skip:focus{left:16px;top:12px;background:var(--ink);color:var(--surface);padding:.4rem .8rem;border-radius:6px}.keynav{position:sticky;top:0;z-index:20;height:var(--nav-h);display:flex;align-items:center;justify-content:center;padding:0 var(--gutter);overflow:clip;background:#f4efe5e6;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}.keynav-row{position:relative;display:flex;gap:clamp(.6rem,4vw,3.5rem)}.keynav-row:before{content:"";position:absolute;left:-2rem;right:-2rem;top:50%;border-top:1px dashed #8a724580}.navcap{--cap-top: var(--surface);--cap-side: #d6ccb9;position:relative;display:block;padding-bottom:4px;text-decoration:none;color:var(--ink);font-family:var(--mono);font-size:.78rem;letter-spacing:.02em;-webkit-tap-highlight-color:transparent}.navcap-top{position:relative;display:block;padding:.35rem .85rem .4rem;border-radius:7px;background:linear-gradient(170deg,#ffffff,var(--cap-top) 60%);border:1px solid var(--line);box-shadow:0 4px 0 var(--cap-side);transition:transform var(--press),box-shadow var(--press)}.navcap:hover .navcap-top{transform:translateY(-1px);box-shadow:0 5px 0 var(--cap-side)}.navcap:active .navcap-top,.navcap[aria-current] .navcap-top{transform:translateY(3px);box-shadow:0 1px 0 var(--cap-side)}.navcap[aria-current]{--cap-top: #981b26;--cap-side: #7a1620;color:var(--legend);font-weight:600}.navcap[aria-current] .navcap-top{background:linear-gradient(170deg,#a31f2b,var(--cap-top) 60%);border-color:#7a1620}.navcap:focus-visible{outline:none}.navcap:focus-visible .navcap-top{outline:2px solid var(--accent);outline-offset:3px}.site{display:block}@media(min-width:1024px){.site{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr)}}.sidebar{padding:2rem var(--gutter) .5rem}@media(min-width:1024px){.sidebar{position:sticky;top:var(--nav-h);height:calc(100vh - var(--nav-h));overflow-y:auto;padding:2.6rem 1.6rem 2rem 2rem;border-right:1px solid var(--line);display:flex;flex-direction:column}}.site-name{margin:0;font-size:clamp(2.2rem,4vw,3rem);line-height:1.02;letter-spacing:-.03em;color:var(--ink);font-weight:800}.what{margin:1rem 0 0;max-width:26ch;font-size:1.05rem;line-height:1.4;color:var(--ink)}.quote{margin:.7rem 0 0;max-width:30ch;font-family:var(--mono);font-size:.76rem;line-height:1.55;color:var(--muted)}.roles{margin:1.4rem 0 0;padding:0;list-style:none;font-family:var(--mono);font-size:.8rem;display:grid;gap:.7rem}.roles li{display:grid}.roles .at{color:var(--accent-strong);font-weight:700}.roles .at+span{color:var(--muted)}.looking{display:flex;align-items:center;gap:.5rem;margin:1.5rem 0 0;font-family:var(--mono);font-size:.78rem;color:var(--text)}.pulse{flex-shrink:0;width:8px;height:8px;border-radius:50%;background:#2f9e44;box-shadow:0 0 #2f9e4480;animation:pulse 2s infinite}@keyframes pulse{70%{box-shadow:0 0 0 7px #2f9e4400}}.quick{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.7rem 0 0;font-size:.9rem}.quick a,.side-links a,.footer a{color:var(--ink);text-decoration-color:var(--line)}.quick a:hover,.side-links a:hover,.footer a:hover{color:var(--accent-strong);text-decoration-color:currentColor}.copy{font:inherit;font-family:var(--mono);font-size:.72rem;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:.05rem .55rem;cursor:pointer}.copy:hover{color:var(--accent-strong);border-color:var(--accent)}.side-links{display:flex;flex-wrap:wrap;gap:.4rem 1.1rem;margin:.9rem 0 0;font-family:var(--mono);font-size:.78rem;white-space:nowrap}.desk{min-width:0;padding:0 var(--gutter) 0}.desk>*{max-width:68rem;margin-left:auto;margin-right:auto}.stage{display:flex;flex-direction:column;gap:1.1rem;padding:2rem 0 2.5rem;scroll-margin-top:var(--nav-h)}@media(min-width:1024px){.stage{padding:2rem 0 2.5rem}}.stage>*{width:100%;max-width:calc(var(--u) * 16.44);margin-left:auto;margin-right:auto}.display{height:15.5rem;min-width:0;display:flex;flex-direction:column;justify-content:flex-start}.display>.card{margin-top:auto}@media(min-width:1024px){.display{height:13.5rem}.card-inner{display:grid;grid-template-columns:minmax(0,14rem) minmax(0,1fr);gap:0 1.6rem;align-items:start}.card-head .status{margin-bottom:0}.card-main{padding-top:.15rem}.card .card-main .body p:last-child{margin-bottom:.3rem}}@media(min-width:1280px){.display{height:11rem}}.idle-title{margin:0;font-size:clamp(1.7rem,3.2vw,2.4rem);line-height:1.1;letter-spacing:-.02em;font-weight:800;color:var(--ink)}.idle-hint{margin:.6rem 0 0;max-width:60ch;font-family:var(--mono);font-size:.82rem;color:var(--muted)}.for-touch{display:none}@media(hover:none)and (pointer:coarse){.for-keys{display:none}.for-touch{display:inline}}.echo{min-height:1.5em;margin:.7rem 0 0;font-family:var(--mono);font-size:1.15rem;color:var(--ink);white-space:pre;overflow:hidden}.card .echo:empty:before{content:"type something…";color:#1d1b1999}.card.compact .stack,.card.compact .links{display:inline-flex;vertical-align:middle;margin-top:.5rem}.card.compact .links{margin-left:.6rem}.card.compact .btn{padding:.3rem .75rem .35rem;font-size:.8rem}.card .echo{margin:0 0 .2rem;min-height:1.4em;font-size:1rem;color:var(--ink);border-bottom:1px dashed #1d1b1933;padding-bottom:.3rem}.echo:not(:empty):after{content:"▍";color:var(--accent);animation:blink 1s steps(1) infinite}@keyframes blink{50%{opacity:0}}.dot{display:inline-block;width:.5em;height:.5em;border-radius:50%;background:var(--accent)}.card{display:grid;grid-template-columns:minmax(0,1fr) auto;width:100%;max-height:100%;min-height:0;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 30px -18px #3b2a1a66;overflow:hidden;animation:rise .16s ease-out}.card-inner{grid-column:1;grid-row:1;min-height:0;overflow-y:auto;padding:1rem .4rem 1rem 1.3rem}.card h2:focus{outline:none}.card h2:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.card .close{grid-column:2;grid-row:1;align-self:start;margin:.45rem .55rem 0 0;width:1.9rem;height:1.9rem;border:0;border-radius:50%;background:none;color:var(--muted);font-size:1.3rem;line-height:1;cursor:pointer}.card .close:hover{background:#1d1b1912;color:var(--ink)}.card .kicker{margin:0;font-family:var(--mono);font-size:.72rem;color:var(--accent);text-transform:uppercase;letter-spacing:.06em}.card h2{display:inline-block;margin:.15rem 0 .3rem;font-size:1.5rem;line-height:1.2}.card .status{margin:0 0 .6rem;font-family:var(--mono);font-size:.78rem;color:var(--muted)}.card .status:empty{display:none}.card .body p{margin:0 0 .5rem;max-width:95ch;font-size:.95rem;line-height:1.45;color:var(--text)}.card .stack{display:flex;gap:.4rem;padding:0;margin:.6rem 0 0;list-style:none;font-family:var(--mono);font-size:.72rem;color:var(--muted)}.card .stack li{border:1px solid var(--line);border-radius:999px;padding:0 .5rem}.card .links{display:flex;flex-wrap:wrap;gap:.6rem;margin:.8rem 0 4px}.card .links:empty,.card .stack:empty{display:none}.btn{display:inline-block;padding:.45rem .9rem .5rem;border-radius:7px;background:#981b26;color:var(--legend);font-weight:700;font-size:.9rem;text-decoration:none;box-shadow:0 4px #5f1018;transition:transform 60ms,box-shadow 60ms}.btn:hover{filter:brightness(1.08)}.btn:active{transform:translateY(3px);box-shadow:0 1px #5f1018}.btn+.btn{background:var(--mod);box-shadow:0 4px 0 var(--mod-side)}@keyframes rise{0%{transform:translateY(6px);opacity:0}}.board{touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;width:max-content;max-width:100%;margin:0 auto;padding:calc(var(--u) * .22);background:var(--case);border-radius:calc(var(--u) * .18);transition:background .3s;box-shadow:0 1px #ffffff1f inset,0 2px #00000026,0 28px 40px -22px #3b2a1a80}.row{display:flex}.cap{--top: var(--alpha);--side: var(--alpha-side);--ink: var(--alpha-ink);position:relative;width:calc(var(--u) * var(--w));height:var(--u);padding:0;border:0;background:none;cursor:pointer;font:inherit;color:var(--ink);-webkit-tap-highlight-color:transparent}.cap-mod{--top: var(--mod);--side: var(--mod-side);--ink: var(--mod-ink)}.cap-accent{--top: var(--accent);--side: var(--accent-side);--ink: var(--accent-ink)}.cap:before{content:"";position:absolute;top:4%;right:4%;bottom:4%;left:4%;border-radius:calc(var(--u) * .1);background:var(--side);box-shadow:0 2px 2px #0006}.top{position:absolute;top:8%;right:13%;bottom:22%;left:13%;border-radius:calc(var(--u) * .08);background:linear-gradient(170deg,color-mix(in srgb,var(--top),#fff 10%),var(--top) 60%);transition-property:transform,filter,background;display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;padding:calc(var(--u) * .06) calc(var(--u) * .07);transition:transform var(--press),filter .12s}.legend{white-space:pre-line;text-align:left;font-size:calc(var(--u) * .22);line-height:1.15;font-weight:600}.sub{font-family:var(--mono);font-size:calc(var(--u) * .14);line-height:1;opacity:.85;white-space:nowrap}.sub-fn,.board[data-layer=fn] .sub-base{display:none}.board[data-layer=fn] .sub-fn{display:block}.cap.has-base .top:after{content:"";position:absolute;top:18%;right:14%;width:calc(var(--u) * .09);height:calc(var(--u) * .09);border-radius:50%;background:currentColor;box-shadow:0 0 6px currentColor}@media(hover:hover){.cap:is(.has-base,.has-fn,[data-code=Fn]):hover .top{transform:translateY(-1px);filter:brightness(1.1)}}.cap.down .top,.cap:active .top{transform:translateY(var(--travel));filter:brightness(.92)}.cap.down:before,.cap:active:before{box-shadow:none}.board[data-layer=fn] .cap:not(.has-fn,.has-base,[data-code=Fn]) .top{filter:brightness(.45)}.board[data-layer=fn] .cap.has-fn .top{outline:2px solid var(--ink);outline-offset:1px}.cap[aria-pressed=true] .top{outline:2px solid var(--ink)}.cap:focus-visible{outline:none}.cap:focus-visible .top{outline:2px solid #fff;outline-offset:2px}.cap.nope .top{animation:nope .22s}@keyframes nope{25%{transform:translate(-2px,var(--travel))}75%{transform:translate(2px,var(--travel))}}.hints{display:flex;padding:0;list-style:none}.hints kbd+kbd{margin-left:.2rem}.controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem .9rem;font-family:var(--mono);font-size:.8rem}.builds{display:flex;flex-wrap:wrap;gap:.5rem .6rem;margin:0;padding:0;border:0}.builds legend{padding:0;margin-bottom:.45rem;font-size:.72rem;letter-spacing:.04em;color:var(--muted)}.builds label{display:flex;align-items:center;gap:.35rem;cursor:pointer;color:var(--ink)}.builds input{position:absolute;opacity:0}.swatch{width:14px;height:14px;border-radius:4px;box-shadow:0 0 0 1px #1d1b1940}.builds input:checked+.swatch{box-shadow:0 0 0 2px var(--accent)}.builds input:checked~.name{color:var(--accent-strong);text-decoration:underline;text-underline-offset:3px}.builds input:focus-visible~.name{outline:2px solid var(--accent);outline-offset:2px}.toggles{display:flex;gap:.4rem;margin-left:auto}.controls button{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:.3rem .55rem;cursor:pointer}.controls button:hover{border-color:var(--accent)}.controls button[aria-pressed=false]{color:var(--muted);background:none;border-style:dashed}.controls [data-sound]{min-width:calc(10ch + 1.1rem + 2px)}.controls [data-keys]{min-width:calc(9ch + 1.1rem + 2px)}.section{padding:3.5rem 0 1rem;border-top:1px solid var(--line)}.section-title{margin:0 0 1.8rem;font-size:clamp(2rem,4vw,2.9rem);line-height:1.05;letter-spacing:-.03em;font-weight:800;color:var(--ink)}.projects{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,19rem),1fr));align-items:start;gap:1.2rem}.project{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden;scroll-margin-top:calc(var(--nav-h) + 1rem);transition:box-shadow .16s,transform .16s}.project.featured{grid-column:1 / -1}@media(min-width:760px){.project.featured{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,22.5rem)}.project.featured .project-media{grid-column:2;grid-row:1;border-bottom:0;border-left:1px solid var(--line);aspect-ratio:auto;min-height:100%}.project.featured .project-body{padding:1.4rem 1.6rem 1.5rem}.project.featured h3{font-size:1.45rem}.project.featured .blurb{font-size:1rem}}.project-media{position:relative;aspect-ratio:16 / 10;overflow:hidden;border-bottom:1px solid var(--line);background:#141210}.project-media img,.project-media svg{display:block;width:100%;height:100%;object-fit:cover;object-position:top left}.media-label{position:absolute;right:.6rem;bottom:.6rem;padding:.1rem .5rem;border-radius:999px;background:#fffdf9e6;color:var(--ink);font-family:var(--mono);font-size:.68rem}.project-extras{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:flex-end;gap:.7rem;padding:1.1rem 1.2rem;background:linear-gradient(to top,#1f1c19f5 55%,#1f1c19c4);color:#efe7d6;opacity:0;transition:opacity .18s ease}.project-extras .how{margin:0;font-size:.9rem;line-height:1.45}.project-extras .stack{display:flex;flex-wrap:wrap;gap:.4rem;padding:0;margin:0;list-style:none;font-family:var(--mono);font-size:.7rem}.project-extras .stack li{border:1px solid #ffffff40;border-radius:999px;padding:.05rem .55rem}@media(hover:hover)and (pointer:fine){.project:is(:hover,:has(:focus-visible)) .project-extras{opacity:1}.project:hover{transform:translateY(-2px);box-shadow:0 22px 40px -24px #3b2a1a88}}.project-body{padding:1rem 1.2rem 1.15rem}.project-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.project h3{margin:0;font-size:1.2rem;color:var(--ink)}.project .status{margin:.25rem 0 0;font-family:var(--mono);font-size:.74rem;color:var(--muted)}.project .blurb{margin:.7rem 0 0;font-size:.93rem;color:var(--text)}.project .press{flex-shrink:0;padding:0;border:0;background:none;cursor:pointer;font-family:var(--mono);font-size:.72rem;color:var(--muted);white-space:nowrap}.project .press:hover{color:var(--ink)}.project .press kbd{display:inline-block;transition:transform 60ms,box-shadow 60ms}.project .press:hover kbd{transform:translateY(-1px)}.project .press:active kbd{transform:translateY(2px);box-shadow:none}.project .links{display:flex;flex-wrap:wrap;gap:.6rem;margin:1rem 0 4px}.project .btn{padding:.38rem .8rem .42rem;font-size:.85rem}.project.in-progress{border-style:dashed}#experience{min-height:calc(100vh - var(--nav-h) - 16rem)}.jobs{display:grid;gap:1.6rem;max-width:46rem;margin:0;padding:0;list-style:none}.jobs p{margin:0}.jobs .job-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 .35rem;margin-bottom:.3rem;color:var(--ink)}.jobs .dates{margin-left:auto;font-family:var(--mono);font-size:.76rem;color:var(--muted)}.jobs li>p:last-child{max-width:62ch}.about{padding:3.5rem 0 1rem}.about>*{max-width:46rem}.page-title{margin:0 0 1.4rem;font-size:clamp(2.4rem,5vw,3.4rem);line-height:1;letter-spacing:-.03em;font-weight:800;color:var(--ink)}.about .intro p{margin:0 0 .8rem;font-size:1.15rem;color:var(--ink)}.hobby{margin-top:2.6rem;padding-top:1.6rem;border-top:1px solid var(--line)}.hobby h2{margin:0 0 .6rem;font-family:var(--mono);font-size:.8rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-strong)}.hobby p{margin:0 0 .6rem;max-width:62ch}.footer{margin-top:4rem;padding:1.5rem 0 4rem;border-top:1px solid var(--line);font-size:.85rem;color:var(--muted)}.footer p{max-width:64ch}.footer-links{display:flex;flex-wrap:wrap;gap:.5rem 1.4rem;font-family:var(--mono);font-size:.78rem}.stage>.bottom-bar{width:max-content;max-width:100%}.bottom-bar{position:sticky;bottom:14px;align-self:center;display:flex;align-items:center;gap:1.1rem;overflow:hidden;padding:.45rem 1rem;border-radius:999px;background:#1f1c19f0;color:#d9cfbb;box-shadow:0 12px 30px -12px #0006;font-family:var(--mono);font-size:.72rem;white-space:nowrap;z-index:15;transition:opacity .18s,visibility .18s}.bottom-bar.away{opacity:0;visibility:hidden}.bottom-bar .hints{flex-wrap:nowrap;margin:0;gap:.9rem;font-size:inherit;padding-right:1.1rem;border-right:1px solid #ffffff26}.now-typing{display:flex;align-items:baseline;gap:.5rem;margin:0}.now-label,.now-spec{color:#b5ab99}.now-typing strong{color:var(--legend);font-weight:600}@media(max-width:1600px){.now-spec{display:none}}@media(max-width:1279px){.bottom-bar .hints{display:none}}@media(hover:none)and (pointer:coarse){.bottom-bar .hints{display:none}}.noscript{max-width:40rem;margin:2rem auto;padding:0 16px}@media(max-width:1023px){.stage .board{order:1}.stage .display{order:2;height:auto;min-height:0}.stage .controls{order:3}.stage .bottom-bar{order:4}.idle-title{font-size:1.5rem}}@media(max-width:1023px){.site-name{font-size:2rem}.site-name br{display:none}.what{max-width:40ch;margin-top:.5rem;font-size:1rem}.quote{max-width:none;margin-top:.4rem}.roles{margin-top:.8rem;gap:.25rem}.roles li{display:block}.roles .at{margin-right:.5rem}.looking{margin-top:.8rem}.quick{margin-top:.4rem}.side-links{margin-top:.5rem}}@media(max-width:520px){.keynav-row{gap:.45rem}.navcap{font-size:.72rem}.navcap-top{padding:.32rem .55rem .36rem}.section{padding-top:3.2rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}
