*{box-sizing:border-box}
body{margin:0;background:#0d0b1e;color:#fff;font-family:system-ui,sans-serif}
header{position:sticky;top:0;z-index:5;display:flex;gap:12px;align-items:center;padding:10px 18px;background:#17133a;border-bottom:2px solid #7c3aed}
.logo{font-size:24px;font-weight:900;color:#fff;text-decoration:none;letter-spacing:1px}.logo b{color:#22d3ee}
#q{flex:1;max-width:420px;padding:10px 16px;border-radius:99px;border:2px solid #4c3a9a;background:#0d0b1e;color:#fff;font-size:15px}
button{background:#7c3aed;color:#fff;border:0;border-radius:10px;padding:9px 14px;font-weight:700;cursor:pointer;font-size:14px}
button:hover{background:#9f67ff}
.lvl{margin-left:auto;font-weight:700;font-size:13px;min-width:110px}.xp{height:8px;background:#0d0b1e;border-radius:9px;margin-top:4px;overflow:hidden}.xp i{display:block;height:100%;background:#22d3ee;width:0}
.layout{display:flex}
nav{width:190px;padding:14px;position:sticky;top:60px;align-self:flex-start;height:calc(100vh - 60px);overflow:auto}
nav a{display:flex;justify-content:space-between;padding:10px 12px;margin-bottom:4px;border-radius:10px;color:#cbd5ff;cursor:pointer;font-weight:600;font-size:14px}
nav a:hover{background:#241d52}nav a.on{background:#7c3aed;color:#fff}
main{flex:1;padding:18px 22px}
h3{margin:18px 0 10px;font-size:20px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px}
.card{border-radius:16px;overflow:hidden;cursor:pointer;position:relative;aspect-ratio:1;display:flex;flex-direction:column;justify-content:flex-end;padding:10px;transition:transform .15s,box-shadow .15s}
.card:hover{transform:scale(1.07);box-shadow:0 8px 24px #000a;z-index:2}
.card .ic{position:absolute;top:14%;left:0;right:0;text-align:center;font-size:58px;transition:transform .2s}
.card:hover .ic{transform:scale(1.2) rotate(-6deg)}
.card .n{font-weight:800;font-size:14px;text-shadow:0 2px 4px #000;position:relative}
.card .s{font-size:11px;opacity:.85;position:relative}
.card .star{position:absolute;top:6px;right:8px;font-size:12px;background:#0007;border-radius:8px;padding:2px 6px}
.hero{background:linear-gradient(120deg,#7c3aed,#06b6d4);border-radius:20px;padding:22px 26px;display:flex;align-items:center;gap:20px;margin-bottom:6px}
.hero h2{margin:0 0 6px;font-size:26px}.hero p{margin:0 0 10px;opacity:.9}
.hero .ic{font-size:70px}.hero button{background:#fff;color:#4c1d95}
#player{position:fixed;inset:0;background:#0d0b1e;z-index:10;display:flex;align-items:center;justify-content:center;overflow:auto}
#player[hidden],#over[hidden],.ov[hidden],#pad[hidden],#achbox[hidden],#toast[hidden]{display:none}
.pbox{width:min(960px,100%);padding:12px}
.ptop{display:flex;gap:8px;align-items:center;margin-bottom:8px}.ptop h2{margin:0 auto 0 8px;font-size:20px}
.stage{position:relative;background:#000;border-radius:14px;overflow:hidden;border:3px solid #7c3aed;width:min(100%,calc((100vh - 190px)*4/3));margin:auto;aspect-ratio:4/3}
canvas{width:100%;height:100%;display:block;touch-action:none;cursor:crosshair}
#over{position:absolute;inset:0;background:#0009;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center}
#over h1{font-size:44px;margin:0}#over p{margin:0;font-size:18px}#over button{margin:4px;font-size:16px;padding:11px 20px}
.pinfo{font-size:14px;color:#cbd5ff;text-align:center}.pinfo p{margin:5px}
@media(max-width:700px){nav{display:none}#rand,#mute{display:none}}

.ov{position:absolute;inset:0;background:#000c;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;padding:14px;z-index:3;animation:pop .25s}
.ov h1{font-size:36px;margin:0}.ov p{margin:0;font-size:16px;max-width:90%}.dim{color:#cbd5ff;font-size:14px!important}
.ov button{margin:3px;padding:9px 16px}.big{font-size:20px!important;padding:12px 34px!important;background:#22c55e}.big:hover{background:#4ade80}
#diff button{background:#2a2160}#diff button.on{background:#7c3aed;outline:2px solid #22d3ee}
#over{z-index:4;animation:pop .3s}
@keyframes pop{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:none}}
@keyframes shake{20%{transform:translateX(-8px)}40%{transform:translateX(8px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}
.stage.shake{animation:shake .4s}
#pad{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:space-between;align-items:flex-end;padding:8px;z-index:2;pointer-events:none}
#pad button{pointer-events:auto;background:#7c3aedaa;touch-action:none;user-select:none;min-width:48px;min-height:48px;font-size:18px}
.dp{display:grid;grid-template-columns:repeat(3,48px);grid-template-areas:". u ." "l d r";gap:4px}
.dp [data-k=arrowup]{grid-area:u}.dp [data-k=arrowleft]{grid-area:l}.dp [data-k=arrowdown]{grid-area:d}.dp [data-k=arrowright]{grid-area:r}
.ab{display:flex;gap:6px}
#achbox{position:fixed;inset:0;background:#000c;z-index:20;display:flex;align-items:center;justify-content:center}
#achbox>div{background:#17133a;border:2px solid #7c3aed;border-radius:16px;padding:18px;width:min(460px,92vw);max-height:80vh;overflow:auto}
#achbox h2{margin:0 0 10px}.a{padding:8px 10px;border-radius:10px;margin-bottom:6px;background:#241d52;font-size:14px;opacity:.5}.a.ok{opacity:1;background:#14532d}.a b{display:block}
#toast{position:fixed;top:14px;left:50%;transform:translateX(-50%);background:#22c55e;color:#052e16;font-weight:800;padding:10px 18px;border-radius:12px;z-index:30;animation:pop .3s}
@media(max-width:700px){#ach{display:none}.ptop{flex-wrap:wrap}.ptop h2{font-size:16px;width:100%;order:-1;margin:0 0 4px}.ptop button{padding:7px 10px;font-size:13px}.stage{width:100%}.ov h1{font-size:26px}}
/* jeux 3D */
.stage.three canvas#cv3{cursor:default}
.t3{position:absolute;inset:0;z-index:2;pointer-events:none;user-select:none}
.t3 .joy{position:absolute;left:14px;bottom:14px;width:112px;height:112px;border-radius:50%;background:#ffffff22;border:2px solid #fff6;pointer-events:auto;touch-action:none}
.t3 .joy i{position:absolute;left:50%;top:50%;width:46px;height:46px;margin:-23px;border-radius:50%;background:#fffa}
.t3 .tb{position:absolute;right:10px;bottom:10px;display:flex;flex-wrap:wrap-reverse;justify-content:flex-end;gap:8px;max-width:210px}
.t3 .tb button{pointer-events:auto;min-width:54px;min-height:54px;border-radius:50%;background:#7c3aedaa;font-size:13px;padding:4px;touch-action:none}
.t3 .tb button.on{background:#22c55ecc}.t3 .tb button.sm{min-width:44px;min-height:40px;border-radius:12px;font-size:12px}
.hud3{position:absolute;left:0;right:0;top:0;padding:6px 8px;display:flex;justify-content:space-between;gap:6px;color:#fff;font:bold 13px system-ui;text-shadow:0 1px 3px #000;pointer-events:none;z-index:2;flex-wrap:wrap}
.hud3 b{background:#0007;padding:3px 8px;border-radius:10px}
.hot3{position:absolute;left:50%;transform:translateX(-50%);bottom:8px;display:flex;gap:3px;z-index:2}
.hot3 span{width:38px;height:38px;border:2px solid #fff7;border-radius:6px;background:#0007;color:#fff;font:bold 11px system-ui;display:flex;align-items:center;justify-content:center;text-align:center;flex-direction:column;line-height:1}
.hot3 span.on{border-color:#fde047;background:#fde04755}
.msg3{position:absolute;left:50%;top:38%;transform:translateX(-50%);color:#fff;font:bold 20px system-ui;text-shadow:0 2px 6px #000;z-index:2;pointer-events:none;text-align:center}
.cross3{position:absolute;left:50%;top:50%;width:14px;height:14px;margin:-7px;z-index:2;pointer-events:none}
.cross3:before,.cross3:after{content:"";position:absolute;background:#fff;opacity:.8}.cross3:before{left:6px;top:0;width:2px;height:14px}.cross3:after{top:6px;left:0;height:2px;width:14px}
.vol{display:flex;gap:10px;align-items:center;font-size:13px;flex-wrap:wrap;justify-content:center}.vol input{width:90px}
.panel3{position:absolute;inset:8% 6%;background:#0b1030ee;border:2px solid #7c3aed;border-radius:14px;z-index:3;padding:10px;color:#fff;overflow:auto;font:13px system-ui}
.panel3 button{margin:2px;padding:6px 10px}
@media(max-width:700px){.stage.three{aspect-ratio:auto;height:calc(100vh - 140px);min-height:300px}}
#cv3{width:100%;height:100%}
#intro .three-only{display:none}.stage.three #intro .three-only{display:flex}
.stage:not(.three) #pz .vol{display:none}
.hot3 span{pointer-events:auto}
