#touch-controls{--touch-scale:1;position:absolute;inset:0;z-index:7;pointer-events:none;opacity:0;visibility:hidden;transform:translateY(12px);transition:opacity .2s,transform .24s,visibility .24s;user-select:none;-webkit-user-select:none}#touch-controls.visible{opacity:1;visibility:visible;transform:none}
.touch-stick{position:absolute;left:calc(120px * var(--touch-scale) + env(safe-area-inset-left));top:calc(100% - 110px * var(--touch-scale) - env(safe-area-inset-bottom));width:128px;height:128px;border:2px solid #ffffff9e;border-radius:50%;background:#f5fff426;box-shadow:inset 0 0 26px #192c3833,0 6px 20px #1b4d3026;pointer-events:auto;touch-action:none;opacity:.55;transform:translate(-50%,-50%) scale(var(--touch-scale));transition:opacity .15s,background .2s,border-color .2s}.touch-stick.held{opacity:1;background:#e7fff344;border-color:#fff}.touch-stick>span{position:absolute;bottom:12px;width:100%;text-align:center;color:#fff;text-shadow:0 1px 4px #163c3b;font-size:10px;pointer-events:none}.stick-cross{position:absolute;inset:17px;border:1px dashed #fff6;border-radius:50%}.stick-knob{position:absolute;top:calc(50% - 29px);left:calc(50% - 29px);width:58px;height:58px;border-radius:50%;border:2px solid #fff9;background:#d8edf2bb;box-shadow:inset 0 2px 6px #fff4,0 4px 10px #153b4055;pointer-events:none}
.touch-actions{position:absolute;right:env(safe-area-inset-right);bottom:env(safe-area-inset-bottom);width:340px;height:260px;transform:scale(var(--touch-scale));transform-origin:bottom right;pointer-events:none}.touch-actions button{position:absolute;pointer-events:auto;touch-action:none;border:3px solid #fff;border-radius:50%;padding:0;color:#fff;box-shadow:0 5px 0 #283c6477,0 8px 18px #12264233;display:flex;align-items:center;justify-content:center;flex-direction:column;transition:transform 80ms,filter 80ms,opacity .2s;cursor:pointer;text-shadow:0 1px 2px #23354e66}.touch-actions button:hover{transform:none}.touch-actions button.held{transform:scale(.88) translateY(2px);filter:brightness(.92)}.touch-actions button>span{font-size:11px;font-weight:800;line-height:1;position:absolute;bottom:12px}.touch-actions button small{font-size:10px;position:absolute;bottom:7px;line-height:1}
.touch-actions button[data-action=jump]{right:22px;bottom:22px;width:100px;height:100px;background:repeating-linear-gradient(135deg,#ff707b 0 10px,#ff5f6f 10px 20px)}.touch-actions button[data-action=dash]{right:140px;bottom:16px;width:74px;height:74px;background:repeating-linear-gradient(135deg,#67b6ff 0 9px,#4698fa 9px 18px)}.touch-actions button[data-action=dash]>span{bottom:18px}.touch-actions button[data-action=dash] .touch-pixel{margin-top:-12px}
.touch-pixel{display:block;flex:none;width:70px;height:70px;background-image:url('assets/ui/mobile-actions.png');background-size:300% 200%;background-repeat:no-repeat;image-rendering:pixelated;pointer-events:none}.pixel-jump{background-position:0 0}.pixel-dash{background-position:50% 0}.pixel-interact{background-position:100% 0}.pixel-wand{background-position:0 100%}.pixel-hammer{background-position:50% 100%}.pixel-blades{background-position:100% 100%}
.touch-actions .touch-skill{right:32px;bottom:140px;width:82px;height:82px;background:conic-gradient(#ffca69 var(--ready),#525170 0);border-width:3px;padding:5px}.skill-core{position:relative;display:grid;place-items:center;width:100%;height:100%;border-radius:50%;background:#38384b;transition:filter .25s}.skill-core .touch-pixel{width:80px;height:80px;margin-top:-8px}.skill-core small{bottom:4px;color:#fff}.touch-skill.cooldown .skill-core{filter:grayscale(.75) brightness(.75)}.touch-actions .touch-skill.ready{animation:touch-ready .7s ease-in-out infinite alternate;box-shadow:0 0 20px #ffd06988,0 5px 0 #283c6477}.touch-actions .touch-skill.held{animation:none}.touch-skill.casting .skill-core{filter:brightness(1.35)}.touch-skill-name{position:absolute;bottom:calc(100% + 8px);white-space:nowrap;padding:4px 9px;font:800 10px system-ui;border-radius:8px;background:#fff6ceee;color:#694521;text-shadow:none;opacity:0;transform:translateY(4px);transition:.2s}.touch-skill.ready .touch-skill-name{opacity:1;transform:none}
.touch-actions .touch-interact{right:128px;bottom:180px;height:50px;min-width:150px;padding:0 12px 0 4px;border-radius:25px;border-color:#ff8275;background:#fffaf1;color:#36485c;flex-direction:row;text-shadow:none;opacity:0;visibility:hidden;transform:translateY(16px) scale(.94);transition:opacity .2s,visibility .2s,transform .2s;pointer-events:none}.touch-actions .touch-interact.available{opacity:1;visibility:visible;transform:none;pointer-events:auto}.touch-interact .touch-pixel{width:48px;height:48px}.touch-actions .touch-interact>span{position:static;font-size:12px;max-width:140px}.touch-actions .touch-interact.held{transform:scale(.88) translateY(2px)}.touch-actions .cooldown:not(.touch-skill){filter:saturate(.55) brightness(.85)}.touch-actions button.denied{animation:touch-deny .3s;outline:2px solid #ffb4a7}.touch-feedback{position:absolute;bottom:calc(242px * var(--touch-scale));right:calc(32px * var(--touch-scale));font-size:12px;background:#34405ce6;color:#fff;padding:6px 10px;border-radius:10px;opacity:0;transform:translateY(6px);transition:.15s}.touch-feedback.show{opacity:1;transform:none}
.touch-fullscreen{position:absolute;right:calc(70px * var(--touch-fit) + env(safe-area-inset-right));top:calc(12px * var(--touch-fit) + env(safe-area-inset-top));width:calc(50px * var(--touch-fit));height:calc(50px * var(--touch-fit));border:2px solid #fff;border-radius:50%;background:#ffffffe8;pointer-events:auto;display:grid;place-items:center;transition:transform 80ms}.touch-fullscreen:active{transform:scale(.88) translateY(2px)}.touch-fullscreen svg{width:24px;height:24px;fill:none;stroke:#36618c;stroke-width:2}.touch-fullscreen[hidden]{display:none}
.touch-layout #world{touch-action:none}.touch-layout .action-bar,.touch-layout .control-hint,.touch-layout .camera-hint{display:none}.touch-layout.in-game .weapon-badge{display:none}.touch-layout.in-game .build-pips{left:calc(200px * var(--touch-fit));right:calc(235px * var(--touch-fit));max-width:none;bottom:12px;font-size:8px;pointer-events:none}.touch-layout.in-game .direction{bottom:calc(120px * var(--touch-fit));right:calc(230px * var(--touch-fit));font-size:10px}.touch-layout.in-game .interaction{display:none}.touch-layout.in-game .quest-panel{max-width:185px}.touch-layout.in-game .corner-controls{inset:0;pointer-events:none}.touch-layout.in-game .corner-controls button{display:none}.touch-layout.in-game .corner-controls #pause{display:grid;position:absolute;right:calc(12px * var(--touch-fit) + env(safe-area-inset-right));top:calc(12px * var(--touch-fit) + env(safe-area-inset-top));width:calc(50px * var(--touch-fit));height:calc(50px * var(--touch-fit));border-radius:50%;pointer-events:auto;transition:transform 80ms}.touch-layout.in-game .corner-controls #pause:active{transform:scale(.88) translateY(2px)}.touch-layout.in-game .minimap-wrap{top:calc(14px * var(--touch-fit));right:calc(132px * var(--touch-fit) + env(safe-area-inset-right));width:calc(140px * var(--touch-fit))}.touch-layout.in-game #minimap{width:100%;height:auto}.touch-layout.in-game .minimap-wrap>div{display:none}
.touch-layout .prepare-controls{font-size:0}.touch-layout .prepare-controls>span{display:none}.touch-layout .prepare-controls:after{content:'左侧摇杆移动 · 右侧跳跃 / 冲刺 / 技能 · 空白处拖动转视角';font-size:10px}#settings-touch-size{max-width:135px;accent-color:#458fd1}
@media(max-height:560px){.touch-layout.in-game .minimap-wrap{width:calc(119px * var(--touch-fit));top:8px}.touch-layout.in-game .quest-panel{top:96px;padding:7px;max-width:163px}.touch-layout.in-game .growth-hud{top:auto;bottom:8px;left:50%;transform:translateX(-50%);max-width:40%;overflow:hidden;white-space:nowrap}}
@keyframes touch-ready{to{transform:scale(1.08);box-shadow:0 0 26px #ffd069b0,0 5px 0 #283c6477}}@keyframes touch-deny{20%{transform:translateX(-4px)}40%{transform:translateX(4px)}60%{transform:translateX(-3px)}80%{transform:translateX(2px)}}.reduce-motion #touch-controls,.reduce-motion #touch-controls *{animation:none!important;transition:none!important}@media(prefers-reduced-motion:reduce){#touch-controls,#touch-controls *{animation:none!important;transition:none!important}}
