:root{--bg: #0d0d0d;--line: #2f2f2f;--green: #67e646;--green-dim: #40bf21;--text: #ededed;--muted: #8a8a8a}*{box-sizing:border-box}html,body{height:100%}body{margin:0;display:grid;grid-template-rows:1fr auto;justify-items:center;align-items:stretch;padding:24px;background:var(--bg);color:var(--text);font:15px/1.5 ui-sans-serif,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}#bg{position:fixed;inset:0;width:100%;height:100%;display:block;z-index:0}.vignette{position:fixed;inset:0;z-index:1;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,transparent 26%,rgba(8,8,8,.62) 88%)}.stage{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center}.projects{flex:none;margin-top:auto;display:inline-flex;align-items:center;min-height:44px;padding:0 14px;color:var(--muted);font:11px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.06em;text-transform:uppercase;text-decoration:none;transition:color .15s ease-out,filter .15s ease-out}.projects:hover,.projects:focus-visible{color:var(--green);filter:drop-shadow(0 0 8px rgba(103,230,70,.55))}body.jumping .projects{opacity:0;pointer-events:none;transition:opacity .18s ease-out}.github{flex:none;padding-top:4px;color:var(--muted);line-height:0;transition:color .15s ease-out,filter .15s ease-out}.github svg{width:20px;height:20px}.github:hover,.github:focus-visible{color:var(--green);filter:drop-shadow(0 0 8px rgba(103,230,70,.55))}.logo{margin:0;line-height:0;flex:1;display:grid;place-items:center;min-height:0;width:100%;animation:breathe 6s ease-in-out infinite}@keyframes breathe{0%,to{opacity:.88}50%{opacity:1}}@property --pulse{syntax: "<number>"; inherits: false; initial-value: 1;}.mark{--glow: 0;--pulse: 1;width:clamp(120px,26vmin,260px);height:clamp(120px,26vmin,260px);color:var(--green);animation:mark-pulse 1.8s ease-in-out infinite;filter:drop-shadow(0 0 14px rgba(103,230,70,.26)) drop-shadow(0 0 calc(2px + var(--glow) * 6px) rgba(64,191,33,calc(var(--glow) * var(--pulse) * .55))) drop-shadow(0 0 calc(14px + var(--glow) * 34px) rgba(64,191,33,calc(var(--glow) * var(--pulse) * .6)));transition:filter .18s ease-out}@keyframes mark-pulse{0%,to{--pulse: .45}50%{--pulse: 1}}.foot{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;padding-top:18px;font-size:11px;color:#5a5a5a;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;text-align:center;transition:color .2s}.foot.near{color:var(--green)}.footlink{display:flex;flex-direction:column;align-items:center;gap:3px;color:inherit;text-decoration:none}.footlink:focus-visible{color:var(--green);outline:1px solid var(--green-dim);outline-offset:5px;border-radius:3px}.motion-toggle{position:fixed;right:16px;bottom:16px;z-index:3;width:34px;height:34px;display:flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--line);border-radius:999px;background:#181818b8;backdrop-filter:blur(10px);color:var(--muted);font:inherit;cursor:pointer;transition:border-color .15s,color .15s}.scene-toggle{right:58px}.motion-toggle:hover,.motion-toggle[aria-pressed=true]{border-color:var(--green-dim);color:var(--green)}body.still .logo{animation:none;opacity:1}body.still .mark{animation:none;--pulse: 1}.jump{display:block;line-height:0;border-radius:8px;cursor:pointer;-webkit-tap-highlight-color:transparent}.jump:focus-visible{outline:1px solid var(--green-dim);outline-offset:12px}.jump{position:relative;isolation:isolate}.jump:before{content:"";position:absolute;inset:-38%;z-index:-1;border-radius:50%;background:conic-gradient(from 210deg,var(--zenon-green),var(--zenon-blue),var(--zenon-pink),var(--bitcoin-orange),var(--zenon-green));filter:blur(30px);opacity:0;pointer-events:none}body.jumping .jump:before{animation:jump-halo var(--jump-ms, 1.3s) linear var(--jump-delay, 0ms) both;animation-play-state:var(--jump-state, running)}@keyframes jump-halo{0%{opacity:0;transform:scale(.55) rotate(0);animation-timing-function:cubic-bezier(.2,.7,.3,1)}20%{opacity:.95;transform:scale(1) rotate(70deg);animation-timing-function:cubic-bezier(.5,0,.8,.4)}62%{opacity:1;transform:scale(1.35) rotate(200deg);animation-timing-function:cubic-bezier(.7,0,1,.5)}to{opacity:0;transform:scale(5) rotate(330deg)}}:root{--zenon-green: #00d557;--zenon-blue: #0061eb;--zenon-pink: #f91690;--bitcoin-orange: #f7931a}@property --flash{syntax: "<length>"; inherits: false; initial-value: 0px;}body.jumping .github,body.jumping .foot,body.jumping .motion-toggle{opacity:0;pointer-events:none;transition:opacity .18s ease-out}body.jumping .vignette{opacity:0;transition:opacity .4s ease-out}body.jumping .logo{animation:none;opacity:1}body.jumping .mark{animation:mark-jump var(--jump-ms, 1.3s) linear var(--jump-delay, 0ms) both;animation-play-state:var(--jump-state, running);will-change:transform,opacity,filter}@keyframes mark-jump{0%{transform:scale(1);opacity:1;filter:drop-shadow(0 0 14px rgba(0,213,87,.26)) drop-shadow(0 0 0 rgba(0,97,235,0)) drop-shadow(0 0 0 rgba(249,22,144,0));animation-timing-function:cubic-bezier(.2,.7,.3,1)}20%{transform:scale(.93);opacity:1;filter:drop-shadow(0 0 10px rgba(0,213,87,1)) drop-shadow(0 0 26px rgba(0,97,235,1)) drop-shadow(0 0 52px rgba(249,22,144,.9));animation-timing-function:cubic-bezier(.5,0,.8,.4)}62%{transform:scale(1.3);opacity:1;filter:drop-shadow(0 0 16px rgba(0,213,87,1)) drop-shadow(0 0 40px rgba(0,97,235,1)) drop-shadow(0 0 80px rgba(249,22,144,1));animation-timing-function:cubic-bezier(.7,0,1,.5)}to{transform:scale(9);opacity:0;filter:drop-shadow(0 0 16px rgba(0,213,87,1)) drop-shadow(0 0 40px rgba(0,97,235,1)) drop-shadow(0 0 80px rgba(249,22,144,1))}}.jump-flash{position:fixed;inset:0;z-index:4;pointer-events:none;opacity:0;mix-blend-mode:screen;background:radial-gradient(circle at var(--jx, 50%) var(--jy, 50%),#e6ffec calc(var(--flash) * .62),var(--zenon-green) calc(var(--flash) * .74),var(--zenon-blue) calc(var(--flash) * .82),var(--zenon-pink) calc(var(--flash) * .89),var(--bitcoin-orange) calc(var(--flash) * .95),transparent var(--flash))}body.jumping .jump-flash{animation:jump-flash var(--jump-ms, 1.3s) linear var(--jump-delay, 0ms) both;animation-play-state:var(--jump-state, running)}@keyframes jump-flash{0%,70%{--flash: 0px;opacity:0;animation-timing-function:cubic-bezier(.6,0,.9,.4)}76%{opacity:1}to{--flash: 260vmax;opacity:1}}
