:root{--bg:#2b2450;--panel:#3b3268;--edge:#0f0c1d;--text:#fff6e0;--muted:#a99fc9;--gold:#ffd23f;--green:#5be37d;--pixel:4px;--zoom:2}@media (width<=399px){:root{--zoom:1.5}}@media (width>=900px) and (height>=560px){:root{--zoom:3}}@media (width>=1300px) and (height>=760px){:root{--zoom:4}}*{box-sizing:border-box}html,body,#root{background:var(--bg);min-height:100%;color:var(--text);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;margin:0;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}button{font:inherit;color:inherit;cursor:pointer}.pixel{image-rendering:pixelated}.game{flex-wrap:wrap;justify-content:center;gap:24px 40px;max-width:1400px;margin:0 auto;padding:24px 16px;display:flex}.left{width:calc(192px * var(--zoom));flex-direction:column;align-items:center;gap:16px;display:flex}.right{flex-direction:column;flex:340px;gap:8px;max-width:520px;display:flex}.top{text-align:center}.logo{letter-spacing:3px;color:#0000;filter:drop-shadow(3px 3px 0 var(--edge));background:linear-gradient(90deg,#e2585e,#ffd23f,#5be37d,#5fcde4,#c04cff,#e2585e) 0 0/200% 100%;-webkit-background-clip:text;background-clip:text;margin:0 0 4px;font-size:28px;animation:4s linear infinite logo}@keyframes logo{to{background-position:200% 0}}.bytes{color:var(--gold);white-space:nowrap;justify-content:center;align-items:center;gap:10px;font-size:40px;font-weight:700;display:flex}.bytes-icon{width:36px;height:36px}.rate{color:var(--muted)}.strength{color:var(--gold);justify-content:center;align-items:center;gap:4px;margin-top:6px;font-weight:700;display:flex}.strength img{height:18px}.strength span{color:var(--muted);margin-left:6px;font-weight:400}.next-level{color:var(--muted);margin-top:6px;font-size:12px}.level-bar{background:var(--edge);width:100%;height:6px;margin-top:3px;display:block}.level-bar span{background:var(--green);height:100%;transition:width .3s;display:block}.bump-text{animation:.14s ease-out bump-text}@keyframes bump-text{50%{transform:scale(1.08)}}.room-frame{border:var(--pixel) solid var(--edge);box-shadow:0 var(--pixel) 0 var(--edge);background:0 0;padding:0}.room{zoom:var(--zoom);width:192px;height:160px;position:relative;overflow:hidden}.room-stack,.layer{position:absolute;inset:0}.layer.animated{animation:frames var(--speed) steps(var(--steps)) infinite}.layer.appear{animation:.7s ease-out appear}.layer.animated.appear{animation:frames var(--speed) steps(var(--steps)) infinite, appear .7s ease-out}@keyframes appear{0%{opacity:0;filter:brightness(3)}40%{opacity:1;filter:brightness(2)}}.bump-a{animation:.12s ease-out bump-a}.bump-b{animation:.12s ease-out bump-b}@keyframes bump-a{0%{transform:scale(.985)}60%{transform:scale(1.005)}}@keyframes bump-b{0%{transform:scale(.985)}60%{transform:scale(1.005)}}.window{position:absolute;overflow:hidden}.helper{pointer-events:none;filter:brightness(.82)saturate(.85)drop-shadow(0 1px #00000073);animation:.5s ease-out arrive;position:absolute}.window .helper{filter:brightness(.9)}.helper.animated{animation:arrive .5s ease-out, frames var(--speed) steps(var(--steps)) infinite}.helper.hop{animation:.5s ease-out arrive,.8s step-end infinite hop}.helper.animated.float{animation:arrive .5s ease-out, frames var(--speed) steps(var(--steps)) infinite, float 2s ease-in-out infinite}.helper.walk{animation:frames var(--speed) steps(var(--steps)) infinite, walk 10s infinite}.helper.patrol{animation:arrive .5s ease-out, frames var(--speed) steps(var(--steps)) infinite, patrol 7s linear infinite}.helper.patrol.oiled{animation-duration:.5s, var(--speed), 3.5s;filter:brightness()saturate(1.1)drop-shadow(0 0 1px #fff9)}.helper.patrol.turbo{animation-duration:.5s, var(--speed), 2.5s;filter:brightness()drop-shadow(0 4px 1px #00000059);margin-top:-4px}@keyframes patrol{0%{translate:0;scale:1}48%{translate:var(--range) 0;scale:1}50%{translate:var(--range) 0;scale:-1 1}98%{translate:0;scale:-1 1}to{translate:0;scale:1}}.helper.chase{animation:arrive .5s ease-out, frames var(--speed) steps(var(--steps)) infinite, chase var(--time) ease-in-out infinite}.helper.chase.cat-behind{animation-delay:0s,0s,.45s}@keyframes chase{0%{translate:0;scale:1}22%{translate:calc(var(--run) * .5) -3px}45%{translate:var(--run) 0;scale:1}50%{translate:var(--run) 0;scale:-1 1}72%{translate:calc(var(--run) * .5) 3px}95%{translate:0;scale:-1 1}to{translate:0;scale:1}}.laser-dot{z-index:170;pointer-events:none;background:#ff3b3b;width:1px;height:1px;animation:6s ease-in-out infinite laser;position:absolute;top:154px;left:66px;box-shadow:0 0 2px 1px #ff3c3ccc}.helper.laser-cat{z-index:170;width:14px;height:12px;animation:frames var(--speed) steps(var(--steps)) infinite, laser-cat 6s ease-in-out -5.6s infinite;top:144px;left:56px}@keyframes laser{0%,to{translate:0}25%{translate:40px -4px}50%{translate:86px -1px}75%{translate:40px -6px}}@keyframes laser-cat{0%,to{translate:0;scale:-1 1}25%{translate:40px -4px;scale:-1 1}49%{translate:84px -1px;scale:-1 1}51%{translate:86px -1px;scale:1}75%{translate:40px -6px;scale:1}98%{translate:0;scale:1}}.virus{z-index:190;cursor:pointer;width:17px;height:16px;scale:calc(1 - var(--hits) * .2);animation:frames var(--speed) steps(var(--steps)) infinite, virus-crawl 10s linear forwards;filter:drop-shadow(0 0 2px #6fd85acc);background-image:url(/art/anims/virus.png);position:absolute;top:88px;left:116px}.virus:before{content:"";position:absolute;inset:-6px}.virus.boss{width:31px;height:31px;animation:frames var(--speed) steps(var(--steps)) infinite, virus-crawl 25s linear forwards;filter:drop-shadow(0 0 3px #ff5050cc);background-image:url(/art/anims/virus_boss.png);top:72px;left:100px;scale:1}.boss-life{background:var(--edge);height:2px;position:absolute;top:-5px;left:3px;right:3px}.boss-life span{background:#e2585e;height:100%;transition:width .15s;display:block}.virus.from-left{--sx:-140px;--sy:50px}.virus.from-right{--sx:90px;--sy:40px}@keyframes virus-crawl{0%{translate:var(--sx) var(--sy)}25%{translate:calc(var(--sx) * .75) calc(var(--sy) * .6 + 4px)}50%{translate:calc(var(--sx) * .5) calc(var(--sy) * .5 - 4px)}75%{translate:calc(var(--sx) * .25) calc(var(--sy) * .2 + 3px)}to{translate:0}}.room.glitch{animation:.3s steps(3,end) 3 glitch}@keyframes glitch{0%{filter:hue-rotate(90deg)saturate(2);translate:1px}50%{filter:hue-rotate(-90deg)contrast(1.5);translate:-1px 1px}to{filter:none;translate:0}}.work-pop{z-index:210;pointer-events:none;color:var(--gold);text-shadow:1px 1px 0 var(--edge);white-space:nowrap;font-size:5px;font-weight:700;animation:1.2s ease-out forwards work-pop;position:absolute}@keyframes work-pop{0%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,-12px)}}.helper.orbit{animation:7s linear infinite orbit}@keyframes arrive{0%{opacity:0;transform:translateY(-30px)}60%{opacity:1;transform:translateY(1px)}}@keyframes frames{to{background-position-x:calc(-1 * var(--strip))}}@keyframes hop{50%{translate:0 -1px}}@keyframes float{50%{translate:0 -2px}}@keyframes walk{0%{animation-timing-function:steps(20,end);translate:0;scale:1}45%{animation-timing-function:step-end;translate:-20px;scale:1}50%{animation-timing-function:steps(20,end);translate:-20px;scale:-1 1}95%{animation-timing-function:step-end;translate:0;scale:-1 1}to{translate:0;scale:1}}@keyframes orbit{0%{translate:-8px}to{translate:34px}}.count-tag{z-index:200;color:var(--gold);background:var(--edge);pointer-events:none;padding:0 1px;font-size:5px;font-weight:700;line-height:6px;position:absolute}.bulb{z-index:200;pointer-events:none;filter:drop-shadow(0 0 3px var(--gold));animation:2.5s ease-out forwards bulb;position:absolute;top:14px;left:93px}@keyframes bulb{0%{transform:translateY(10px)scale(0)}12%{transform:translateY(-2px)scale(1.3)}20%,80%{transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-4px)scale(1)}}.bit{z-index:200;pointer-events:none;text-shadow:1px 1px 0 var(--edge);font-size:7px;font-weight:700;animation:.65s ease-out forwards bit;position:absolute;top:36px}.bit.spark{font-size:6px;animation-duration:.4s}.bit.letter{font-size:6px;animation-duration:.9s}@keyframes bit{0%{opacity:1;transform:translate(0)scale(.6)}to{transform:translate(var(--dx), -26px) scale(1.2);opacity:0}}h2{align-items:center;gap:8px;margin:8px 0 0;font-size:18px;display:flex}.title-icon{height:24px}.ideas,.helpers{flex-direction:column;gap:8px;display:flex}.thinking{color:var(--muted);background:var(--panel);border:2px dashed var(--edge);margin:0;padding:12px}.dots:after{content:"";animation:1.2s steps(4,end) infinite dots}@keyframes dots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}}.shop-item{background:var(--panel);border:var(--pixel) solid var(--edge);box-shadow:0 var(--pixel) 0 var(--edge);text-align:left;grid-template-columns:48px 1fr auto auto;align-items:center;gap:12px;padding:8px 12px;display:grid}.shop-item:active:not(.too-dear){transform:translateY(var(--pixel));box-shadow:none}.shop-item.too-dear{opacity:.5}.shop-item img{object-fit:contain;width:48px;height:48px}.label{flex-direction:column;gap:2px;display:flex}.shop-item .text{color:var(--muted);font-size:12px}.shop-item .cost{color:var(--gold);white-space:nowrap}.shop-item .owned{text-align:right;min-width:2ch;font-size:24px}.shop-item.fresh{animation:.6s ease-in-out 5 alternate fresh}@keyframes fresh{0%{border-color:var(--edge)}to{border-color:var(--gold);box-shadow:0 var(--pixel) 0 var(--edge), 0 0 16px var(--gold)}}.shop-item.mystery{opacity:.6;cursor:default}.shop-item.mystery img{filter:brightness(0)}.trophies{grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:6px;display:grid}.trophy{text-align:center;background:var(--panel);border:2px solid var(--edge);flex-direction:column;align-items:center;gap:2px;padding:6px 4px;display:flex}.trophy img{width:33px;height:36px}.trophy .name{font-size:11px;font-weight:700}.trophy .text{color:var(--muted);font-size:10px}.trophy.won img{filter:drop-shadow(0 0 4px var(--gold))}.trophy.locked img{filter:brightness(0)opacity(.5)}.trophy.locked .name{color:var(--muted)}.trophy.fresh{animation:.6s ease-in-out 5 alternate fresh}.restart{text-align:left;color:var(--edge);background:var(--gold);border:var(--pixel) solid var(--edge);box-shadow:0 var(--pixel) 0 var(--edge);flex-direction:column;gap:4px;padding:10px 12px;animation:.9s steps(2,end) infinite blink;display:flex}.restart .name{font-weight:700}.restart .text{font-size:12px}.restart:active{transform:translateY(var(--pixel));box-shadow:none}@keyframes blink{50%{filter:brightness(1.15)}}.flash{z-index:8;pointer-events:none;background:#fff;animation:.7s ease-out forwards flash;position:fixed;inset:0}@keyframes flash{0%{opacity:.9}to{opacity:0}}.switches{gap:8px;margin-top:16px;display:flex}.switches button{background:var(--panel);border:2px solid var(--edge);color:var(--muted);padding:6px 10px}.switches .reset{color:#e2585e;margin-left:auto}.floppy{z-index:5;background:0 0;border:none;padding:0;animation:.4s ease-out floppy-in,1.4s ease-in-out infinite floppy-float;position:fixed}.floppy img{width:56px;height:56px;filter:drop-shadow(0 0 10px var(--gold));display:block}@keyframes floppy-in{0%{transform:scale(0)rotate(-180deg)}}@keyframes floppy-float{0%,to{translate:0;rotate:-8deg}50%{translate:0 -12px;rotate:8deg}}.toast{z-index:6;background:var(--gold);max-width:90vw;color:var(--edge);border:var(--pixel) solid var(--edge);padding:12px 16px;font-weight:700;animation:.4s ease-out toast;position:fixed;bottom:24px;left:50%;translate:-50%}@keyframes toast{0%{transform:translateY(80px)}}.pop{z-index:7;pointer-events:none;color:var(--gold);text-shadow:2px 2px 0 var(--edge);white-space:nowrap;font-size:24px;font-weight:700;animation:.7s ease-out forwards pop;position:fixed}.pop.big{font-size:40px;animation-duration:1.6s}@keyframes pop{0%{opacity:1;transform:translate(-50%,-50%)scale(1)}20%{opacity:1;transform:translate(-50%,-80%)scale(1.15)}to{opacity:0;transform:translate(-50%,-150%)scale(1)}}.disco-hit{z-index:195;cursor:pointer;opacity:0;background:radial-gradient(circle,#ffffffe6,#fff0 70%);border-radius:50%;position:absolute}.bit.shard{font-size:6px;animation:.9s ease-in forwards shard}@keyframes shard{0%{opacity:1;transform:translate(0)rotate(0)}85%{opacity:1}to{transform:translate(var(--dx), 60px) rotate(360deg);opacity:0}}.beams{z-index:192;pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.beams line{stroke:#8cf07a;stroke-width:1.5px;stroke-linecap:round;filter:drop-shadow(0 0 2px #5be37d);animation:.3s ease-out forwards beam}@keyframes beam{0%{opacity:1;stroke-width:2.5px}to{opacity:0;stroke-width:.5px}}
