:root{--bg:#05061a;--cy:#27d7ff;--mg:#ff3dcb;--gr:#39ff7a;--ye:#ffd23f;--tx:#e8f4ff;--pn:rgba(8,12,34,.88)}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:radial-gradient(circle at 50% 30%,#101040,#02020c 70%);color:var(--tx);font-family:ui-monospace,"SF Mono","Cascadia Mono","Roboto Mono",Menlo,Consolas,monospace;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none}
body{display:flex;justify-content:center;align-items:flex-start}
body:not(.portrait){align-items:center}
#stage{position:relative;flex:none;background:#000;box-shadow:0 0 60px rgba(39,215,255,.25)}
#game{display:block;width:100%;height:100%;image-rendering:auto}
#hud-btns{position:absolute;top:8px;right:8px;display:none;gap:6px;z-index:5}
body.playing #hud-btns{display:flex}
.ibtn{width:34px;height:34px;border-radius:10px;border:1.5px solid rgba(39,215,255,.6);background:rgba(6,10,30,.7);color:#fff;font-size:15px;cursor:pointer;padding:0}
.ibtn:hover{background:rgba(39,215,255,.25)}
/* ---------- overlay screens ---------- */
#ui{position:fixed;inset:0;pointer-events:none;z-index:10}
.screen{position:absolute;inset:0;display:none;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:16px;overflow:auto;pointer-events:auto;background:linear-gradient(180deg,rgba(2,3,16,.25),rgba(2,3,16,.55))}
.screen.on{display:flex}
.screen.dim{background:rgba(2,3,14,.72);backdrop-filter:blur(3px)}
.panel{background:var(--pn);border:1.5px solid rgba(39,215,255,.5);border-radius:18px;padding:22px 26px;box-shadow:0 0 40px rgba(39,215,255,.18),inset 0 0 30px rgba(39,215,255,.05);max-width:560px;width:100%;display:flex;flex-direction:column;gap:10px;max-height:100%;overflow:auto}
.panel.wide{max-width:960px}.panel.narrow{max-width:420px;align-items:stretch;text-align:center}
h2{margin:0;font-size:clamp(20px,4vw,30px);letter-spacing:.08em;color:#fff;text-shadow:0 0 14px var(--cy)}
h2.bad{color:#ff6a8a;text-shadow:0 0 18px #ff2b6b}h2.good{color:#9dffb8;text-shadow:0 0 18px var(--gr)}
h3{margin:12px 0 4px;font-size:13px;letter-spacing:.14em;color:var(--cy)}
p{margin:4px 0;line-height:1.5;font-size:14px;color:#cfe3f5}
.lead{font-size:15px}.hint{font-size:12px;color:#8fa6c0}
.eyebrow{font-size:11px;letter-spacing:.2em;color:var(--gr)}.eyebrow.danger{color:#ff6a8a}
/* buttons */
.btn{font:inherit;font-weight:700;letter-spacing:.1em;color:#fff;background:linear-gradient(180deg,rgba(39,215,255,.18),rgba(39,215,255,.05));border:1.5px solid rgba(39,215,255,.65);border-radius:12px;padding:12px 22px;font-size:15px;cursor:pointer;transition:.15s;pointer-events:auto}
.btn:hover,.btn:focus-visible{transform:translateY(-2px);box-shadow:0 0 22px rgba(39,215,255,.55);outline:none;background:rgba(39,215,255,.3)}
.btn.primary{background:linear-gradient(180deg,#27d7ff,#2a6bff);border-color:#9ff;color:#02102a;text-shadow:none}
.btn.primary:hover{box-shadow:0 0 28px rgba(39,215,255,.9)}
.btn.small{padding:8px 14px;font-size:12px}.btn.danger{border-color:#ff5a7a;color:#ffb0c0}
.btnrow{display:flex;gap:10px;flex-wrap:wrap}
/* menu */
#screen-menu{background:linear-gradient(180deg,rgba(2,3,16,.1),rgba(2,3,16,.5))}
.logo{text-align:center;margin-top:-6px}
.logo-top{font-size:clamp(40px,9vw,92px);font-weight:900;letter-spacing:.06em;line-height:1;background:linear-gradient(180deg,#fff 10%,#27d7ff 55%,#a33dff);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 18px rgba(39,215,255,.8));animation:glitch 4s infinite}
.logo-sub{font-size:clamp(14px,3vw,28px);letter-spacing:.5em;color:var(--gr);text-shadow:0 0 14px var(--gr);margin-top:4px;font-weight:700}
.menu{display:grid;grid-template-columns:1fr;gap:10px;width:min(320px,86vw)}
.menu-foot{font-size:12px;color:#8fd8ff;letter-spacing:.1em}
@keyframes glitch{0%,92%,100%{transform:none;filter:drop-shadow(0 0 18px rgba(39,215,255,.8))}93%{transform:translate(-3px,1px);filter:drop-shadow(3px 0 #f0f) drop-shadow(-3px 0 #0ff)}95%{transform:translate(3px,-1px);filter:drop-shadow(-3px 0 #f0f) drop-shadow(3px 0 #0ff)}97%{transform:translate(0,0) skewX(8deg)}}
/* level select */
.lgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}
.lcard{position:relative;text-align:left;border:1.5px solid rgba(39,215,255,.5);border-radius:14px;padding:14px;background:linear-gradient(160deg,var(--a),var(--b));color:#fff;cursor:pointer;font:inherit;min-height:110px;transition:.15s}
.lcard:hover:not(.locked){transform:translateY(-3px);box-shadow:0 0 24px var(--cy)}
.lcard b{display:block;font-size:26px;text-shadow:0 0 10px #000}.lcard span{font-size:12px;letter-spacing:.06em;text-shadow:0 1px 4px #000}
.lcard.locked{filter:grayscale(1) brightness(.45);cursor:not-allowed}.lcard .tick{position:absolute;top:8px;right:10px;color:var(--gr);font-size:18px}
/* help */
.cols{display:grid;grid-template-columns:1fr 1fr;gap:20px}
@media(max-width:760px){.cols{grid-template-columns:1fr}}
kbd{background:#101a3a;border:1px solid var(--cy);border-bottom-width:3px;border-radius:6px;padding:1px 6px;font-size:12px;margin:0 1px;color:#fff}
table.keys td{padding:4px 8px 4px 0;font-size:13px;vertical-align:top}
.legend{list-style:none;padding:0;margin:0;font-size:13px;display:grid;gap:4px}.legend i{display:inline-block;min-width:34px;font-style:normal;font-weight:800;color:var(--c);text-shadow:0 0 8px var(--c)}
/* settings */
.row{display:flex;justify-content:space-between;align-items:center;gap:14px;font-size:14px;padding:6px 0}
input[type=range]{width:55%;accent-color:var(--cy)}input[type=checkbox]{width:20px;height:20px;accent-color:var(--cy)}
select,.field input{font:inherit;background:#0b1230;color:#fff;border:1.5px solid rgba(39,215,255,.5);border-radius:8px;padding:6px 10px}
/* profile */
.profile{flex-direction:row;gap:26px;padding:20px}.pcol.photo{flex:0 0 220px}.pcol.info{flex:1;display:flex;flex-direction:column;gap:9px;min-width:0}
@media(max-width:760px){.profile{flex-direction:column}.pcol.photo{flex:none;max-width:200px;align-self:center}}
.idcard{position:relative;border:2px solid var(--cy);border-radius:14px;overflow:hidden;box-shadow:0 0 30px rgba(39,215,255,.5);background:#000;aspect-ratio:9/16}
.idcard img{width:100%;height:100%;object-fit:cover;display:block}
.scan{position:absolute;left:0;right:0;height:30%;background:linear-gradient(180deg,transparent,rgba(39,215,255,.35),transparent);animation:scan 3s linear infinite}
@keyframes scan{from{top:-30%}to{top:100%}}
.corner{position:absolute;width:22px;height:22px;border:3px solid var(--gr)}.tl{top:6px;left:6px;border-right:0;border-bottom:0}.tr{top:6px;right:6px;border-left:0;border-bottom:0}.bl{bottom:6px;left:6px;border-right:0;border-top:0}.br{bottom:6px;right:6px;border-left:0;border-top:0}
.idtag{position:absolute;bottom:10px;left:0;right:0;text-align:center;font-weight:800;letter-spacing:.3em;font-size:12px;color:var(--gr);text-shadow:0 0 8px #000,0 0 10px var(--gr)}
.glitch{font-size:clamp(16px,3vw,24px)}
.field{display:flex;gap:10px;align-items:center;font-size:12px;color:#8fd8ff;letter-spacing:.1em}.field input{flex:1;min-width:0;font-size:14px}
.badges{display:flex;flex-wrap:wrap;gap:8px}.badge{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1.5px solid var(--c);border-radius:20px;color:var(--c);font-size:12px;font-weight:700;box-shadow:0 0 10px color-mix(in srgb,var(--c) 40%,transparent)}.badge b{font-size:14px}
.term{background:#020812;border:1px solid #1d4a5e;border-radius:10px;overflow:hidden}.term-bar{display:flex;align-items:center;gap:6px;background:#0e1c30;padding:5px 10px;font-size:11px;color:#8fa6c0}.term-bar i{width:9px;height:9px;border-radius:50%;background:#ff5f56}.term-bar i:nth-child(2){background:#ffbd2e}.term-bar i:nth-child(3){background:#27c93f}.term-bar span{margin-left:8px}
#term{margin:0;padding:10px 12px;font-size:12px;line-height:1.5;color:#7cff6b;min-height:92px;white-space:pre-wrap}
.dash{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}@media(max-width:760px){.dash{grid-template-columns:repeat(2,1fr)}}
.tile{background:rgba(39,215,255,.07);border:1px solid rgba(39,215,255,.35);border-radius:10px;padding:8px}.tile small{display:block;font-size:9px;letter-spacing:.12em;color:#8fd8ff}.tile b{font-size:20px;color:#fff}
.meter{height:5px;background:#0b1230;border-radius:3px;margin-top:4px;overflow:hidden}.meter i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--cy),var(--gr))}
.achs{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.ach{display:flex;gap:10px;align-items:center;padding:8px 12px;border:1.5px dashed #445;border-radius:12px;filter:grayscale(1);opacity:.55;text-align:left}.ach.on{filter:none;opacity:1;border:1.5px solid var(--ye);box-shadow:0 0 16px rgba(255,210,63,.5)}.ach span{font-size:24px}.ach b{display:block;font-size:12px;color:var(--ye)}.ach small{font-size:10px;color:#9ab}
.codefloat{position:absolute;inset:0;overflow:hidden;pointer-events:none;opacity:.35}.codefloat span{position:absolute;font-size:13px;color:var(--cy);white-space:pre;animation:floatup linear infinite}
@keyframes floatup{from{transform:translateY(110vh)}to{transform:translateY(-20vh)}}
/* stats */
table.stats{width:100%;border-collapse:collapse;font-size:14px}table.stats td{padding:5px 4px;border-bottom:1px solid rgba(39,215,255,.15);text-align:left}table.stats td:last-child{text-align:right;color:var(--ye);font-weight:700}table.stats tr.total td{font-size:18px;color:#fff;border-bottom:0}
/* toasts + touch */
#toasts{position:fixed;top:70px;left:50%;transform:translateX(-50%);z-index:30;display:flex;flex-direction:column;gap:8px;pointer-events:none;align-items:center}
.toast{background:rgba(8,12,34,.92);border:1.5px solid var(--ye);border-radius:12px;padding:10px 16px;text-align:center;animation:toast 4s forwards;box-shadow:0 0 24px rgba(255,210,63,.45)}.toast b{display:block;color:var(--ye);font-size:14px}.toast small{color:#cfe3f5;font-size:12px}
@keyframes toast{0%{opacity:0;transform:translateY(-14px)}8%,86%{opacity:1;transform:none}100%{opacity:0}}
#touch{position:fixed;inset:0;pointer-events:none;z-index:8;display:none}
body.playing.touch #touch{display:block}
.tgroup{position:absolute;bottom:max(14px,env(safe-area-inset-bottom));display:flex;gap:12px;align-items:flex-end;pointer-events:none}.tgroup.left{left:max(14px,env(safe-area-inset-left))}.tgroup.right{right:max(14px,env(safe-area-inset-right))}
.tb{pointer-events:auto;width:72px;height:72px;border-radius:50%;border:2px solid rgba(39,215,255,.7);background:rgba(8,14,40,.55);color:#fff;font:700 22px ui-monospace,monospace;touch-action:none;backdrop-filter:blur(2px)}.tb.active{background:rgba(39,215,255,.55);transform:scale(.94)}
.tb.big{width:88px;height:88px;font-size:30px;border-color:var(--gr)}.tb.small{width:54px;height:54px;border-color:var(--mg)}.tb.tiny{width:40px;height:40px;font-size:16px}
body.portrait.playing.touch #touch .tgroup{bottom:max(24px,env(safe-area-inset-bottom))}
#errorbox{position:fixed;inset:0;z-index:99;background:rgba(0,0,10,.9);display:flex;align-items:center;justify-content:center;padding:20px}#errorbox[hidden]{display:none}#errorbox>div{background:#1a0710;border:2px solid #ff4d6d;border-radius:14px;padding:20px;max-width:560px;text-align:center}#errtxt{white-space:pre-wrap;text-align:left;font-size:12px;color:#ffb0c0;max-height:200px;overflow:auto}
@media(max-height:520px){.logo-top{font-size:44px}.logo-sub{font-size:13px}.btn{padding:8px 16px;font-size:13px}.menu{grid-template-columns:1fr 1fr;width:min(560px,92vw)}.screen{gap:8px}}
@media(max-width:520px){.tgroup{gap:8px}.tb{width:56px;height:56px;font-size:18px}.tb.big{width:68px;height:68px}.tb.small{width:46px;height:46px}.tb.tiny{width:34px;height:34px;font-size:14px}}
