@import "https://fonts.googleapis.com/css2?family=Silkscreen:wght@400;700&family=VT323&display=swap";:root{--ink:#2b1f4a;--paper:#fff3d6;--paper2:#f3dcb0;--accent:#ff8fa3;--mint:#7fe0c0}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}.app-shell{height:100%;position:relative}.cursor-highlight{z-index:1000;pointer-events:none;background:radial-gradient(circle 150px at var(--pointer-x,50%) var(--pointer-y,50%), #7fe0c038, transparent);position:fixed;inset:0}body{color:var(--ink);font-family:VT323,monospace;font-size:22px;overflow:hidden}.screen{background:linear-gradient(#2b1f4a,#5b3a7a 70%,#c4739a);height:100%;position:relative;overflow:hidden}.icons{grid-template-columns:repeat(2,96px);gap:14px 10px;display:grid;position:absolute;top:16px;left:16px}.ico{text-align:center;color:var(--paper);font:inherit;cursor:pointer;background:0 0;border:0;padding:6px}.ico svg{width:56px;height:56px;margin:0 auto 4px;display:block}.ico:hover span{background:var(--accent);color:var(--ink)}.ico span{padding:0 4px}.stage{background:#1c1433;place-items:center;height:100%;padding:16px;display:grid}.lid{border:4px solid var(--ink);background:#e8dcc8;padding:18px 18px 26px;position:relative;box-shadow:8px 8px #00000059}.lid:before{content:"";background:var(--ink);width:6px;height:6px;margin-left:-3px;position:absolute;top:6px;left:50%}.lid .screen{aspect-ratio:16/10;border:4px solid var(--ink);height:auto}.base{border:4px solid var(--ink);background:#cdbfa6;border-top:0;height:18px;margin:0 -24px;position:relative;box-shadow:8px 8px #00000059}.base:after{content:"";background:#a99a80;width:120px;height:6px;margin-left:-60px;position:absolute;top:0;left:50%}@media (width<=640px){.stage{padding:0}.laptop{width:100%;height:100%}.lid{height:100%;box-shadow:none;border:0;padding:0}.lid:before,.base{display:none}.lid .screen{aspect-ratio:auto;border:0;height:100%}}.arcade{height:100%;color:var(--paper);background:linear-gradient(#ffffff0d 2px,#0000 2px) 0 0/32px 32px,linear-gradient(90deg,#ffffff0d 2px,#0000 2px) 0 0/32px 32px,linear-gradient(#2b1f4a,#5b3a7a 70%,#c4739a);padding:24px;position:relative;overflow:auto}.arcade.center{text-align:center;place-content:center;justify-items:center;gap:14px;display:grid}.game-title{text-shadow:4px 4px 0 var(--ink);margin:0;font-family:Silkscreen,monospace;font-size:clamp(32px,8vw,72px)}.subtitle{margin:0 0 12px}.select-title{text-align:center;margin:0 0 20px;font-family:Silkscreen,monospace;font-size:clamp(18px,3vw,28px)}.btn{background:var(--accent);color:var(--ink);border:4px solid var(--ink);box-shadow:4px 4px 0 var(--ink);cursor:pointer;padding:6px 18px;font-family:Silkscreen,monospace;font-size:14px}.btn:active{box-shadow:none;transform:translate(4px,4px)}.arcade button{transition:transform .12s steps(2,end)}.arcade button:hover,.arcade button:focus-visible{transform:translateY(-3px)}.arcade .btn:active{transform:translate(4px,4px)}.skip{color:var(--paper);font:inherit;cursor:pointer;background:0 0;border:0;text-decoration:underline;position:absolute;bottom:12px;right:16px}.select-layout{grid-template-columns:1fr 1.2fr;gap:24px;max-width:900px;margin:0 auto;display:grid}.slots{grid-template-columns:repeat(auto-fit,minmax(110px,1fr));align-content:start;gap:12px;display:grid}.slot{text-align:center}.portrait{aspect-ratio:3/4;background:var(--paper2);color:var(--ink);border:4px solid var(--ink);place-items:center;margin-bottom:6px;display:grid}.slot.locked .portrait{color:var(--paper);background:#3a2d63}.card{background:var(--paper);color:var(--ink);border:4px solid var(--ink);padding:16px 20px;box-shadow:8px 8px #00000059}.card h3{margin:0 0 4px;font-family:Silkscreen,monospace;font-size:18px}.card .meta{margin:0}.stat{justify-content:space-between;align-items:center;gap:12px;margin:4px 0;display:flex}.blocks{gap:2px;display:flex}.blocks i{background:var(--paper2);border:2px solid var(--ink);width:10px;height:14px}.blocks i.on{background:var(--accent)}.card .btn{margin-top:14px}@media (width<=640px){.select-layout{grid-template-columns:1fr}.slots{grid-template-columns:repeat(3,1fr)}}@media (prefers-reduced-motion:no-preference){.game-title{animation:2s steps(4,end) infinite bob}@keyframes bob{50%{transform:translateY(-6px)}}}.arcade,.screen{isolation:isolate}.decor{z-index:-1;pointer-events:none;position:absolute;inset:0;overflow:hidden}.decor>span{line-height:0;display:block;position:absolute}@media (prefers-reduced-motion:no-preference){.twinkle{animation:2s steps(2,end) infinite twinkle}.twinkle.d2{animation-delay:.6s}.twinkle.d3{animation-delay:1.2s}.bob{animation:2s steps(4,end) infinite bob}.drift{animation:14s steps(28,end) infinite alternate drift}@keyframes twinkle{50%{opacity:.25}}@keyframes drift{to{transform:translate(-60px)}}}.plants{z-index:-1;pointer-events:none;position:absolute;inset:0;overflow:hidden}.plants>span{line-height:0;display:block;position:absolute}.plants svg{width:100%;height:auto}@media (prefers-reduced-motion:no-preference){.sway{transform-origin:top;animation:4s steps(4,end) infinite alternate sway}.sway.s2{animation-delay:1s}@keyframes sway{to{transform:rotate(3deg)}}}.portrait svg{width:70%;height:auto}.slot.active .portrait{background:#cdb8ff}.slot{font:inherit;color:inherit;background:0 0;border:0;padding:0}button.slot{cursor:pointer}button.slot:hover .portrait{transform:translateY(-4px)}.slot.picked .portrait{border-color:var(--accent)}.portrait{transition:transform .1s steps(2,end)}.hint{text-align:center;margin:0;padding:24px 0}.speaker{align-items:flex-end;gap:16px;margin-bottom:12px;display:flex}.speaker svg{border:4px solid var(--ink);background:#cdb8ff;flex-shrink:0;width:90px;height:auto}.bubble{border:4px solid var(--ink);box-shadow:4px 4px 0 var(--ink);background:#fff;margin:0 0 24px;padding:8px 14px;position:relative}.bubble:before{content:"";border-left:4px solid var(--ink);border-bottom:4px solid var(--ink);background:#fff;width:12px;height:12px;position:absolute;bottom:10px;left:-16px;transform:rotate(45deg)}@media (prefers-reduced-motion:no-preference){.bubble{animation:.3s steps(3,end) pop}@keyframes pop{0%{opacity:0;transform:scale(.4)}}}.mac-win{width:min(420px,100% - 16px);max-height:calc(100% - 16px);color:var(--ink);border:4px solid var(--ink);background:#fff;flex-direction:column;display:flex;position:absolute;box-shadow:8px 8px #00000059}.mac-win[hidden]{display:none}.mac-win.max{width:auto;max-height:none;box-shadow:none;inset:0!important}.titlebar{border-bottom:4px solid var(--ink);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;background:#ece6f5;align-items:center;gap:10px;padding:6px 10px;display:flex}.mac-win.max .titlebar{cursor:default}.dots{gap:8px;display:flex}.dot{border:3px solid var(--ink);cursor:pointer;width:16px;height:16px;padding:0}.dot.red{background:#ff6b6b}.dot.yellow{background:#ffd166}.dot.green{background:#7fe0c0}.dot:hover{filter:brightness(1.15)}.win-title{text-align:center;flex:1;margin-right:66px;font-family:Silkscreen,monospace;font-size:13px}.win-body{padding:14px 16px;overflow:auto}.entry{margin-bottom:14px}.entry h3{margin:0 0 2px;font-family:Silkscreen,monospace;font-size:14px}.entry p{margin:0}.entry .tag{background:var(--mint);border:2px solid var(--ink);margin:4px 4px 0 0;padding:0 6px;font-size:18px;display:inline-block}.dock{z-index:1000;gap:8px;display:flex;position:absolute;bottom:8px;left:50%;transform:translate(-50%)}.dock button{background:var(--paper);color:var(--ink);border:3px solid var(--ink);font:inherit;cursor:pointer;padding:0 12px}.dock:empty{display:none}@media (width<=640px){.mac-win{width:auto;max-height:none;box-shadow:none;inset:0!important}}.arcade.sunset{isolation:isolate;background:#8e4580}.pixel-sky{z-index:-1;object-fit:cover;width:100%;height:100%;image-rendering:pixelated;pointer-events:none;object-position:center bottom;position:absolute;inset:0}.arcade.center.sunset{place-content:center;padding-bottom:6vh}.arcade.sunset .subtitle{text-shadow:2px 2px 0 var(--ink)}.arcade.sunset:after{content:"";z-index:-1;pointer-events:none;background:radial-gradient(55% 38%,#2b18468c,#0000 100%);position:absolute;inset:0}.arcade.sunset .game-title{text-shadow:-3px -3px 0 var(--ink), 3px -3px 0 var(--ink), -3px 3px 0 var(--ink), 3px 3px 0 var(--ink), 0 6px 0 var(--ink), 6px 6px 0 var(--ink);font-size:clamp(30px,8vw,80px)}.arcade.sunset p{color:#fff;text-shadow:-2px -2px 0 var(--ink), 2px -2px 0 var(--ink), -2px 2px 0 var(--ink), 2px 2px 0 var(--ink)}.arcade.dusk{background:#1a1f5c}.arcade.dusk .pixel-sky{position:fixed}.stage{isolation:isolate;--desk:clamp(110px, 22vh, 200px);flex-direction:column;justify-content:flex-end;align-items:center;padding:16px 16px 0;display:flex;position:relative}.laptop{z-index:2;margin-bottom:calc(var(--desk) * .6);width:min(960px, 100%, calc((100vh - var(--desk) * .6 - 80px) * 1.6));position:relative}.desk{height:var(--desk);z-index:1;pointer-events:none;position:absolute;bottom:0;left:0;right:0}.desk-top{border-top:4px solid var(--ink);background:repeating-linear-gradient(0deg,#ffffff0d 0 4px,#0000 4px 14px),#8b5e4b;border-bottom:6px solid #b07a5e;height:60%}.desk-front{background:repeating-linear-gradient(90deg,#0000 0 calc(25% - 2px),#00000038 calc(25% - 2px) 25%),#5a3a36;height:40%}.desk-decor{z-index:3;pointer-events:none;position:absolute;inset:0}.desk-decor>span{bottom:calc(var(--desk) * .56 - var(--drop,0px));line-height:0;display:block;position:absolute}.desk-decor svg{width:100%;height:auto}.glow{aspect-ratio:1;z-index:-1;background:radial-gradient(circle,#ffd27873,#0000 65%);width:520%;position:absolute;top:10%;left:50%;transform:translate(-50%,-50%)}.steam,.steam:before{background:#ffffffbf;width:4px;height:4px;position:absolute}.steam{top:-10px;left:28%}.steam:before{content:"";top:-6px;left:9px}@media (prefers-reduced-motion:no-preference){.steam{animation:2s steps(4,end) infinite rise}@keyframes rise{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-14px)}}}@media (width<=900px){.desk-decor{display:none}}@media (width<=640px){.desk,.desk-decor{display:none}.stage{padding:0;display:block}.laptop{width:100%;height:100%;margin-bottom:0}}.laptop{width:min(880px, 100%, calc((100vh - var(--desk) * .6 - 80px) * 1.6))}.desk-top{background:repeating-linear-gradient(0deg,#ffffff0d 0 4px,#0000 4px 14px),#6b4660;border-bottom-color:#8f6285}.desk-front{background:repeating-linear-gradient(90deg,#0000 0 calc(25% - 2px),#00000040 calc(25% - 2px) 25%),#3f2a4a}.stage>.pixel-sky{opacity:.6}body{background:#1c1433}.arcade.dusk .select-title{color:#fff;text-shadow:-3px -3px 0 var(--ink), 3px -3px 0 var(--ink), -3px 3px 0 var(--ink), 3px 3px 0 var(--ink), 0 5px 0 var(--ink);font-size:clamp(20px,3.2vw,32px)}.arcade.dusk .slot span{color:#fff;text-shadow:-2px -2px 0 var(--ink), 2px -2px 0 var(--ink), -2px 2px 0 var(--ink), 2px 2px 0 var(--ink);font-size:22px;line-height:1.1;display:block}.slot.locked{opacity:1}.slot.locked .portrait{color:#d9ccff;border-color:var(--ink);background:#2b2058;font-size:26px}.slot.locked span{color:#e6dcff}.slot.active .portrait{border-color:var(--mint);box-shadow:0 0 0 4px var(--ink)}.arcade.dusk .pixel-sky{filter:brightness(.82)saturate(1.05)}a.ico{text-decoration:none;display:block}a.ico:hover span,a.ico:focus-visible span{background:var(--accent);color:var(--ink)}a.ico svg{filter:drop-shadow(0 0 #fff3d6)drop-shadow(2px 0 #fff3d6)drop-shadow(-2px 0 #fff3d6)}.links{flex-direction:column;gap:14px;width:96px;display:flex;position:absolute;top:16px;right:16px}.certs{gap:16px;display:grid}.cert{border:4px solid var(--ink);background:#f6efff;align-items:flex-start;gap:18px;padding:16px;display:flex;box-shadow:6px 6px #2b1f4a40}.cert.pending{box-shadow:none;opacity:.85;background:#f1eef6;border-style:dashed}.cert-badge{flex-shrink:0;width:88px;line-height:0}.cert-badge svg{width:100%;height:auto}.cert-info h3{margin:0 0 2px;font-family:Silkscreen,monospace;font-size:15px;line-height:1.25}.cert-info p{margin:0}.cert-issuer{font-size:22px}.cert-meta{color:#5b4a86;margin-bottom:8px!important}.cert-id{opacity:.75;word-break:break-all;font-size:18px;margin-top:8px!important}.cert-tags{flex-wrap:wrap;gap:6px;display:flex}.cert-tags span{background:var(--mint);border:2px solid var(--ink);padding:0 8px;font-size:19px}.cert a.btn{margin-top:12px;text-decoration:none;display:inline-block}@media (width<=480px){.cert{flex-direction:column}.cert-badge{width:72px}}.jobs{padding-left:26px;position:relative}.jobs:before{content:"";background:var(--ink);width:4px;position:absolute;top:10px;bottom:10px;left:7px}.job{margin-bottom:26px;position:relative}.job:last-child{margin-bottom:0}.job-dot{background:var(--accent);border:4px solid var(--ink);width:18px;height:18px;position:absolute;top:4px;left:-26px}.job:first-child .job-dot{background:var(--mint)}.job-dates{color:#5b4a86;margin:0 0 2px}.job h3{margin:0;font-family:Silkscreen,monospace;font-size:16px;line-height:1.25}.job-company{margin:2px 0 8px;font-size:24px}.job ul{margin:0 0 10px;padding-left:20px}.job li{margin-bottom:6px;line-height:1.1}.job-tags{flex-wrap:wrap;gap:6px;display:flex}.job-tags span{background:var(--mint);border:2px solid var(--ink);padding:0 8px;font-size:19px}.game{gap:14px;display:grid}.game-card{text-align:center;padding:24px 8px}.game-card p{margin:8px 0 16px}.game-card .big{margin:0;font-family:Silkscreen,monospace;font-size:clamp(22px,4vw,34px)}.game-buttons{flex-wrap:wrap;justify-content:center;gap:14px;display:flex}.arena{border:4px solid var(--ink);background:linear-gradient(#2a2a78,#6c46a6 65%,#b05aa6);height:280px;position:relative;overflow:hidden}.harp-btn{cursor:pointer;background:0 0;border:0;width:clamp(48px,9vw,72px);padding:0;line-height:0;position:absolute}.harp-btn svg{width:100%;height:auto}.harp-btn:hover{transform:translateY(-4px)}.harp-btn.done{opacity:.45;cursor:default}.harp-btn.done:hover{transform:none}.harp-btn .check{background:var(--mint);border:3px solid var(--ink);color:var(--ink);padding:0 4px;font-size:18px;line-height:1.1;position:absolute;top:-8px;right:-8px}.note{color:#fff3d6;font-size:24px;font-style:normal;line-height:1;position:absolute;top:-6px;left:50%}.game-status{text-align:center;min-height:1.2em;margin:0}.chips{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.chip{background:var(--paper2);color:var(--ink);border:3px solid var(--ink);box-shadow:3px 3px 0 var(--ink);font:inherit;cursor:pointer;padding:2px 12px}.chip:nth-child(odd){transform:rotate(-1.5deg)}.chip:nth-child(2n){transform:rotate(1.5deg)}.chip:active{box-shadow:none}.chip.done{background:var(--mint);opacity:.6;cursor:default;box-shadow:none}@media (prefers-reduced-motion:no-preference){.harp-btn.on{animation:.8s steps(2,end) infinite harp-bob}.note{animation:1.4s steps(5,end) infinite note-up}@keyframes harp-bob{50%{transform:translateY(-5px)}}@keyframes note-up{0%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,-24px)}}}.tabs{gap:8px;margin-bottom:14px;display:flex}.tab{background:var(--paper2);color:var(--ink);border:3px solid var(--ink);cursor:pointer;padding:2px 14px;font-family:Silkscreen,monospace;font-size:13px}.tab.on{background:var(--accent);box-shadow:3px 3px 0 var(--ink)}.hobby-intro{text-align:center;margin:0 0 16px}.photos{grid-template-columns:repeat(3,1fr);gap:16px;padding:4px 6px 10px;display:grid}.polaroid{border:3px solid var(--ink);background:#fff;margin:0;padding:8px 8px 6px;box-shadow:4px 4px #2b1f4a4d}.polaroid:first-child{transform:rotate(-2deg)}.polaroid:nth-child(2){transform:rotate(1.5deg)translateY(6px)}.polaroid:nth-child(3){transform:rotate(-1deg)}.polaroid img{aspect-ratio:4/5;object-fit:cover;border:3px solid var(--ink);width:100%;display:block}.polaroid figcaption{text-align:center;margin-top:6px;line-height:1}@media (width<=480px){.photos{grid-template-columns:1fr}}.projects{gap:20px;display:grid}.cart{border:4px solid var(--ink);background:#d9d2e6;padding:12px;box-shadow:6px 6px #2b1f4a4d}.cart-shot{aspect-ratio:16/9;border:4px solid var(--ink);place-items:center;display:grid;position:relative;overflow:hidden}.cart-shot img{object-fit:cover;object-position:top;width:100%;height:100%;display:block}.cart-shot span{color:var(--ink);font-family:Silkscreen,monospace;font-size:48px}.cart-body{padding:12px 4px 2px}.cart-body h3{margin:0 0 4px;font-family:Silkscreen,monospace;font-size:16px;line-height:1.25}.cart-body p{margin:0 0 6px}.cart-role{color:#4a3a75}.cart-tags{flex-wrap:wrap;gap:6px;margin:8px 0;display:flex}.cart-tags span{background:var(--mint);border:2px solid var(--ink);padding:0 8px;font-size:19px}.cart-note{opacity:.8;border-left:4px solid var(--accent);padding-left:8px;font-size:20px}.cart-links{flex-wrap:wrap;gap:10px;margin-top:10px;display:flex}.cart-links a.btn{text-decoration:none}@media (width>=900px){.projects{grid-template-columns:1fr 1fr}}
