body[data-page=game] .hand-card {
 touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;cursor:pointer;
}
body[data-page=game] .hand-card.playable {cursor:grab}
body[data-page=game] .hand-card.playable>.card {border-color:#e8c057}
body[data-page=game] .hand-card:disabled {cursor:default}
body.dragging-card,body.dragging-card .hand-card {cursor:grabbing}
body[data-page=game] .hand-card.drag-source {opacity:0;transition:none}
#gesture-layer {position:fixed;inset:0;z-index:60;pointer-events:none;overflow:hidden}
.gesture-card {will-change:transform;filter:drop-shadow(0 10px 12px #071c2d45);pointer-events:none}
.gesture-card>.card {outline:2px solid #c8ab70;outline-offset:2px}
.gesture-caption {position:absolute;left:0;top:0;will-change:transform;width:172px;padding:5px 8px;border-radius:9px;background:#f7f3e8f2;color:#214c3b;box-shadow:0 2px 12px #06211822;text-align:center;font-size:12px;line-height:16px}
.gesture-caption.ready {background:#214c3b;color:#fff8e4}
body[data-page=game] .table-zone.drop-eligible {outline:2px dashed #d4bb87;outline-offset:-2px;border-radius:15px;background:#d4bb870a}
body[data-page=game] .table-zone.drop-eligible .empty-table {visibility:hidden}
.drop-hint {position:absolute;inset:0;display:grid;place-items:center;color:#f2dcab;font-size:14px;pointer-events:none}
body[data-page=game] .table-zone.drop-eligible:has(.table-pair) .drop-hint {inset:auto 0 3px;font-size:12px}
body[data-page=game] .attack-target.drop-ready,body[data-page=game] .table-zone.drop-ready {outline:3px solid #f5dc9e;outline-offset:2px;background:#ecd39c21;box-shadow:0 0 18px #e9d7a532}
body[data-page=game] .transfer-btn.drop-eligible {outline:2px dashed var(--gold);outline-offset:2px}
body[data-page=game] .transfer-btn.drop-ready {background:var(--accent);color:var(--on);outline:3px solid var(--gold)}

/* Translation has a real table destination and aliases in the free space
   beside each open attack. The attack face always remains a cover target. */
body[data-page=game] .table-transfer-target{width:max(44px,var(--table-card-w));height:max(44px,calc(var(--table-card-w)*1.5));min-width:44px;min-height:44px;border:1px dashed var(--gold);border-radius:6px;color:var(--gold);background:#f5d16a0b;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;padding:3px;box-shadow:inset 0 0 14px #f5d16a08;touch-action:none}
body[data-page=game] .table-transfer-target>span{font-size:25px;line-height:1}
body[data-page=game] .table-transfer-target small,body[data-page=game] .table-transfer-target b{font-size:10px;line-height:12px;font-weight:500}
body[data-page=game] .table-transfer-target b{color:#fff9df}
body[data-page=game] .table-transfer-target.drop-ready{border-style:solid;background:#f5d16a26;box-shadow:0 0 16px #f5d16a20;outline:2px solid var(--gold);outline-offset:-2px}
body[data-page=game] .transfer-edge{position:absolute;left:calc(var(--table-card-w) + 8px);top:8px;width:18px;height:calc(var(--table-card-w)*1.5 - 16px);min-height:24px;display:grid;place-items:center;border-left:1px dashed #f5d16a77;border-radius:3px;color:var(--gold);font-size:17px;pointer-events:none;opacity:.65}
body[data-page=game] .transfer-edge.drop-ready{opacity:1;background:#f5d16a26;box-shadow:0 0 12px #f5d16a22}
body[data-page=game] .micro-pairs .transfer-slot{justify-content:center}
body[data-page=game] .micro-pairs .table-transfer-target{height:44px;width:44px;gap:0;padding:2px}
body[data-page=game] .micro-pairs .table-transfer-target>span{font-size:18px;line-height:20px}
body[data-page=game] .micro-pairs .table-transfer-target small{display:none}
body[data-page=game] .micro-pairs .transfer-edge{left:auto;right:0;top:5px;height:34px;width:16px;font-size:15px}
