.interaction-layer{position:absolute;inset:0;pointer-events:none;z-index:4;overflow:hidden}.action-receipt,.construction-meter,.upgrade-peek{position:absolute;transform:translate(-50%,calc(-100% - 30px));background:#143e43ee;color:#fff0bf;border:1px solid #dfc682;border-radius:7px;box-shadow:0 4px 12px #12363840;text-align:center;white-space:nowrap;font-size:11px;padding:6px 9px;line-height:1.35}.action-receipt{animation:receipt-arrive .2s ease-out}.action-receipt[data-kind=ready],.action-receipt[data-kind=upgrade]{border-color:#bce0a6;background:#245747f2}.action-receipt[data-kind=refund]{color:#c7f3b2}.construction-meter{min-width:93px;font-size:10px;padding:5px 7px}.construction-meter i{display:block;height:4px;background:#56756a;border-radius:4px;overflow:hidden;margin-top:4px}.construction-meter b{display:block;height:100%;background:#f1d889}.upgrade-peek{border:2px solid #bde6bd;z-index:2;white-space:normal;min-width:170px;max-width:210px;padding:8px 11px}.upgrade-peek strong,.upgrade-peek span,.upgrade-peek small{display:block}.upgrade-peek span{margin-top:4px}.upgrade-peek small{font-size:9px;color:#d2e5c5;margin-top:3px}.drag-ghost .drag-budget{display:block;padding-top:5px;border-top:1px solid #ffffff30;font-size:10px;color:#f9dfa1;margin-top:5px}.drag-ghost[data-valid=false] .drag-budget{color:#ffd0b9}@keyframes receipt-arrive{from{opacity:.3;translate:0 5px}to{opacity:1;translate:0 0}}@media(max-width:700px),(max-height:550px){.action-receipt{font-size:9px;padding:5px 7px}.construction-meter{font-size:9px;min-width:82px}.upgrade-peek{font-size:10px;min-width:160px;padding:7px 9px}}@media(prefers-reduced-motion:reduce){.action-receipt{animation:none}}



.drag-ghost[data-pointer=touch]{transform:none}
.game-shell button:not([data-tower]){touch-action:manipulation}

#play #drag-ghost{left:0;top:0;translate:none;transition:border-color 120ms,background-color 120ms,box-shadow 120ms}
#play #drag-ghost[data-positioned=true]{will-change:transform}
#play .drag-ghost.drag-return-echo{translate:none}
#play #drag-ghost[data-snapped=true][data-valid=true]>span{background:#10353c;border-color:#c9f5cc;box-shadow:inset 0 0 0 2px #d6f8b026}
.game-shell [data-tower]{transition:scale 100ms ease-out,box-shadow 120ms,border-color 120ms}
.game-shell [data-tower].is-held{scale:.96;box-shadow:inset 0 0 0 2px #e9cd8b80,0 3px 9px #102c3c33}
@media(prefers-reduced-motion:reduce){.drag-ghost:not(.drag-return-echo),.game-shell [data-tower]{transition:none}.game-shell [data-tower].is-held{scale:1}}

#play[data-combat-effects=calm] #drag-ghost,#play[data-combat-effects=calm] [data-tower]{transition:none}
#play[data-combat-effects=calm] [data-tower].is-held{scale:1}
#play .hud>div[data-transaction]{outline:2px solid #f2ca83;outline-offset:-2px;border-radius:6px;background:#775c3538}
#play .hud>div[data-transaction=gain]{outline-color:#b8e5a8;background:#79b87524}
#play .dock-actions button.input-ready{outline:2px solid #c4efbb;outline-offset:-2px;animation:input-ready .55s ease-out 2}
#play #focus-status.input-acquired{outline:2px solid #f4d48d;outline-offset:-2px;animation:input-acquired .65s ease-out}
#play button:active:not(:disabled){filter:brightness(1.08);box-shadow:inset 0 0 0 2px #fff1c288}
@keyframes input-ready{0%{box-shadow:inset 0 0 0 2px #ddffca,0 0 10px #addf9a66}100%{box-shadow:inset 0 0 0 0 #ddffca00,0 0 0 #addf9a00}}
@keyframes input-acquired{0%{box-shadow:inset 0 0 0 3px #ffe6a1}100%{box-shadow:inset 0 0 0 0 #ffe6a100}}
@media(prefers-reduced-motion:reduce){#play .dock-actions button.input-ready,#play #focus-status.input-acquired{animation:none}}
#play[data-combat-effects=calm] .dock-actions button.input-ready,#play[data-combat-effects=calm] #focus-status.input-acquired{animation:none}
