:root{
  color-scheme:dark;
  --bg:#06080c;--panel:#10151d;--card:#141a23;--line:#293342;--line-strong:#3b485b;
  --text:#f2f5f8;--muted:#91a0b3;--accent:#ee1447;--accent-key:#ff5a7d;--accent-chest:#a90d35;--blue:#3184ed;--blue-key:#78b7ff;--blue-chest:#1555a3;--gold:#f6c453;
  --tile:#1a212b;--corridor:#aab4c2;--success:#47c98b;
  --board-size:min(65vh,calc(100vw - 460px),650px);
}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg)}
body{font-family:Inter,Segoe UI,Arial,sans-serif;color:var(--text);background:radial-gradient(circle at 50% -10%,#182230 0,#080b10 44%,#05070a 100%);overflow-x:hidden}
button{font:inherit;border:1px solid var(--line);background:#171e28;color:var(--text);padding:8px 10px;border-radius:8px;cursor:pointer;font-weight:750;line-height:1.15;transition:.16s ease}
button:hover:not(:disabled){border-color:#738199;background:#202936}button:disabled{opacity:.3;cursor:not-allowed}.danger,.primary{background:var(--accent);border-color:var(--accent)}
.shell{width:100%;max-width:1540px;height:100dvh;margin:auto;padding:8px 14px;display:grid;grid-template-rows:auto auto auto minmax(0,1fr);gap:7px;overflow:hidden}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:16px;min-height:38px}.brand{display:flex;align-items:baseline;gap:12px;min-width:0}.eyebrow{margin:0;color:var(--accent);font-size:.76rem;font-weight:950;letter-spacing:.17em}.topbar h1{margin:0;font-size:clamp(1rem,1.6vw,1.35rem);white-space:nowrap}.top-actions{display:flex;gap:8px;align-items:center}.ai-badge{border:1px solid var(--line);background:#111823;color:#b9c6d6;padding:7px 10px;border-radius:8px;font-size:.74rem;font-weight:800;white-space:nowrap}
.turn-command{display:grid;grid-template-columns:minmax(250px,.78fr) 1.6fr;gap:14px;align-items:center;padding:8px 12px;background:linear-gradient(90deg,#17131a,#101720);border:1px solid var(--line-strong);border-radius:10px}.turn-summary{min-width:0;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:2px 12px}.turn-number{grid-row:1/3;display:grid;place-items:center;padding:8px 10px;border-radius:8px;background:var(--accent);font-size:.75rem;font-weight:950;letter-spacing:.08em}.turn-summary strong{font-size:1rem;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.turn-hint{font-size:.74rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phase-track{display:grid;grid-template-columns:repeat(4,1fr);gap:5px}.phase-step{position:relative;display:flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;color:#69778a;background:#0c1118}.phase-step span{display:grid;place-items:center;width:21px;height:21px;border-radius:50%;background:#1d2632;font-size:.7rem}.phase-step b{font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}.phase-step.done{color:#a7b4c4;border-color:#344255}.phase-step.done span{background:#263547;color:var(--success)}.phase-step.active{color:white;border-color:var(--accent);background:#26131a;box-shadow:inset 0 0 0 1px rgba(238,20,71,.25)}.phase-step.active span{background:var(--accent)}
.player-panels{display:grid;grid-template-columns:1fr 1fr;gap:7px}.player-card{min-width:0;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:7px 10px;transition:.2s}.player-card.active{border-color:currentColor;box-shadow:inset 0 0 0 1px currentColor}.player-card.p1{color:var(--accent)}.player-card.p2{color:var(--blue)}.player-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.player-card-head>div{display:flex;align-items:center;gap:7px;min-width:0}.player-card-head strong{font-size:.78rem;letter-spacing:.07em;color:var(--text)}.player-card-head small{font-size:.67rem;color:var(--muted)}.player-dot{width:9px;height:9px;border-radius:50%;background:currentColor;box-shadow:0 0 10px currentColor}.turn-badge{font-size:.65rem;font-weight:950;background:currentColor;color:#fff;padding:4px 7px;border-radius:999px;animation:pulseBadge 1.1s infinite alternate}.player-stats{display:grid;grid-template-columns:.7fr .8fr 1.4fr .8fr;gap:6px;margin-top:6px}.player-stats>span{min-width:0;background:#0b1017;border:1px solid #202a37;border-radius:7px;padding:5px 7px}.player-stats b,.player-stats small{display:block;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-stats b{font-size:.72rem}.player-stats small{font-size:.58rem;color:var(--muted);margin-top:2px}.mini-mission{margin-top:5px;color:#c6d0dc;font-size:.65rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mini-mission span{color:var(--muted)}.mini-mission i{color:var(--muted);font-style:normal;margin:0 4px}.mini-mission small{color:var(--muted)}
.game-layout{min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 345px;gap:12px;align-items:start;justify-content:center}.board-column{min-width:0;display:flex;flex-direction:column;align-items:center;gap:5px}.board-legend{width:calc(var(--board-size) + 78px);display:flex;justify-content:center;gap:10px;flex-wrap:wrap;font-size:.62rem;color:#aab6c5}.board-legend span{display:flex;align-items:center;gap:4px;white-space:nowrap}.board-legend i{display:inline-grid;width:12px;height:12px;border:1px solid #fff}.legend-token{border-radius:50%}.legend-token.p1{background:var(--accent)}.legend-token.p2{background:var(--blue)}.legend-key{border-radius:50%;background:var(--accent-key);position:relative}.legend-key.p2{background:var(--blue-key)}.legend-chest{border-radius:2px;background:var(--accent-chest)}.legend-chest.p2{background:var(--blue-chest)}
.board-wrap{min-width:0;min-height:0;display:grid;grid-template-columns:34px var(--board-size) 34px;grid-template-rows:28px var(--board-size) 28px;gap:5px;justify-content:center;align-content:start;transition:grid-template-columns .16s ease,grid-template-rows .16s ease}.board-wrap.shift-controls-hidden{grid-template-columns:0 var(--board-size) 0;grid-template-rows:0 var(--board-size) 0;gap:0}.board{grid-column:2;grid-row:2;display:grid;grid-template-columns:repeat(7,1fr);width:var(--board-size);height:var(--board-size);border:1px solid var(--line);background:#05070a;box-shadow:0 14px 36px rgba(0,0,0,.35)}.cell{position:relative;min-width:0;min-height:0;padding:0;border:1px solid #27303b;border-radius:0;background:var(--tile);cursor:pointer;overflow:visible}.cell:hover{outline:2px solid var(--accent);outline-offset:-2px;z-index:12}.cell.fixed{box-shadow:inset 0 0 0 2px var(--gold)}.cell.rotation-selected{outline:3px solid var(--accent);outline-offset:-3px;z-index:11;animation:selectedTile .7s infinite alternate}.coord{position:absolute;top:3px;left:4px;font-size:clamp(.42rem,.52vw,.58rem);color:#607083;z-index:2;pointer-events:none}.corridor{position:absolute;background:var(--corridor)}.corridor.n,.corridor.s{width:28%;left:36%;height:51%}.corridor.n{top:0}.corridor.s{bottom:0}.corridor.e,.corridor.w{height:28%;top:36%;width:51%}.corridor.e{right:0}.corridor.w{left:0}.hub{position:absolute;width:30%;height:30%;left:35%;top:35%;background:var(--corridor);border-radius:20%}
.token{position:absolute;display:grid;place-items:center;width:36%;height:36%;left:32%;top:32%;border:2px solid white;border-radius:50%;font-weight:950;z-index:7;color:white}.token.p1{background:var(--accent)}.token.p2{background:var(--blue)}.token-name{font-size:clamp(.56rem,.78vw,.84rem);line-height:1}.token-hp{position:absolute;top:102%;left:50%;transform:translateX(-50%);padding:1px 4px;border-radius:5px;background:rgba(5,8,12,.94);border:1px solid rgba(255,255,255,.32);font-size:clamp(.42rem,.55vw,.58rem);white-space:nowrap}.token.active-token{outline:3px solid #fff;outline-offset:3px;box-shadow:0 0 0 6px rgba(238,20,71,.28),0 0 20px rgba(255,255,255,.6);animation:activePulse 1s ease-in-out infinite alternate;z-index:10}.token.p2.active-token{box-shadow:0 0 0 6px rgba(49,132,237,.32),0 0 20px rgba(255,255,255,.6)}.key-icon{display:inline-block;width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;vertical-align:-.14em;flex:0 0 auto}.held-key,.key-object{display:grid;place-items:center;width:clamp(20px,2.25vw,27px);height:clamp(20px,2.25vw,27px);padding:0;border:1px solid rgba(255,255,255,.95);border-radius:999px;color:#fff;line-height:1;box-shadow:0 2px 7px rgba(0,0,0,.42)}.held-key{position:absolute;left:calc(100% + 4px);top:50%;transform:translateY(-50%);background:var(--accent-key);z-index:12;pointer-events:none}.held-key.p2{background:var(--blue-key)}.held-key .key-icon,.key-object .key-icon{width:86%;height:86%;color:#fff;stroke-width:2.8}.board-object{position:absolute;z-index:6;display:flex;align-items:center;gap:2px;padding:2px 4px;border:1px solid rgba(255,255,255,.8);font-weight:950;font-size:clamp(.4rem,.55vw,.58rem);line-height:1;color:#fff}.key-object{right:4%;bottom:4%;background:var(--accent-key)}.key-object.p2{background:var(--blue-key)}.chest-object{left:4%;bottom:4%;background:var(--accent-chest);color:white;border-radius:4px}.chest-object.p2{background:var(--blue-chest)}.key-stat{display:inline-flex;align-items:center;gap:4px}.mini-mission .key-icon,.mission-step .key-icon{width:.9em;height:.9em;color:#fff}
.axis{display:grid;gap:3px;overflow:visible;transition:opacity .14s ease,transform .14s ease}.top-axis,.bottom-axis{grid-column:2;grid-template-columns:repeat(7,1fr);width:var(--board-size)}.top-axis{grid-row:1}.bottom-axis{grid-row:3}.side-axis{grid-row:2;grid-template-rows:repeat(7,1fr);width:34px;height:var(--board-size)}.left-axis{grid-column:1}.right-axis{grid-column:3}.shift-controls-hidden .axis{opacity:0;pointer-events:none;transform:scale(.88)}.shift-controls-visible .axis{opacity:1;pointer-events:auto;transform:scale(1)}.axis-group{display:flex;min-width:0;min-height:0}.shift-arrow{position:relative;padding:0;min-width:0;width:100%;height:100%;border-radius:8px;border:1px solid #46566b;background:linear-gradient(180deg,#182230,#0d131c);color:#f4f7fb;box-shadow:inset 0 1px 0 rgba(255,255,255,.06);overflow:hidden}.shift-arrow span{display:block;font-size:clamp(.82rem,1.05vw,1.08rem);line-height:1;transition:transform .14s ease}.shift-arrow:not(:disabled):hover{border-color:var(--gold);background:linear-gradient(180deg,#263347,#121a25);box-shadow:0 0 0 1px rgba(246,196,83,.2),0 4px 12px rgba(0,0,0,.35)}.shift-arrow:not(:disabled):hover span{transform:scale(1.18)}.shift-arrow.arrow-up:not(:disabled):hover span{animation:shiftHintUp .65s ease-in-out infinite}.shift-arrow.arrow-down:not(:disabled):hover span{animation:shiftHintDown .65s ease-in-out infinite}.shift-arrow.arrow-left:not(:disabled):hover span{animation:shiftHintLeft .65s ease-in-out infinite}.shift-arrow.arrow-right:not(:disabled):hover span{animation:shiftHintRight .65s ease-in-out infinite}.shift-arrow:disabled{opacity:.24}.shift-arrow:focus-visible{outline:2px solid #fff;outline-offset:2px}@keyframes shiftHintUp{0%,100%{transform:translateY(2px) scale(1.12)}50%{transform:translateY(-3px) scale(1.18)}}@keyframes shiftHintDown{0%,100%{transform:translateY(-2px) scale(1.12)}50%{transform:translateY(3px) scale(1.18)}}@keyframes shiftHintLeft{0%,100%{transform:translateX(2px) scale(1.12)}50%{transform:translateX(-3px) scale(1.18)}}@keyframes shiftHintRight{0%,100%{transform:translateX(-2px) scale(1.12)}50%{transform:translateX(3px) scale(1.18)}}
.panel{height:calc(var(--board-size) + 55px);min-height:0;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:8px;overflow:hidden}.section-kicker{display:block;color:var(--accent);font-size:.61rem;font-weight:950;letter-spacing:.12em;margin-bottom:4px}.action-card,.mission-card,.utility-row,.log-section{background:#0b1017;border:1px solid #202a37;border-radius:9px;padding:9px}.action-card h2{font-size:1rem;margin:0 0 3px}.action-card p{margin:0 0 7px;color:#b3bfcd;font-size:.76rem;line-height:1.35}.action-card p strong{color:white}.controls{display:grid;grid-template-columns:1fr 1fr;gap:5px}.controls button{min-height:34px;font-size:.71rem;padding:6px}.controls .primary{grid-column:1/-1}.controls button.recommended:not(:disabled){border-color:var(--gold);box-shadow:0 0 0 1px rgba(246,196,83,.28);position:relative}.controls button.recommended:not(:disabled)::after{content:'SUGEROWANE';position:absolute;right:4px;top:3px;font-size:.43rem;color:var(--gold);letter-spacing:.05em}.confirm-rotation:not(:disabled){background:#3a3118;border-color:var(--gold)}
.dice-display{display:none;align-items:center;gap:8px;margin:0 0 7px;padding:6px 8px;border-radius:7px;background:#141b25;border:1px solid #293547}.dice-display.visible{display:flex}.dice-display>span{font-size:.58rem;font-weight:900;color:var(--muted)}.dice-display>div{display:flex;gap:3px}.die{display:grid;place-items:center;width:24px;height:24px;border-radius:5px;font-size:1rem}.die.available{background:white;color:#111}.die.spent{background:#252c36;color:#566171;text-decoration:line-through}.dice-display small{margin-left:auto;color:var(--muted);font-size:.62rem}
.mission-path{display:grid;grid-template-columns:1fr;gap:3px}.mission-step{display:grid;grid-template-columns:25px 1fr auto;align-items:center;gap:7px;padding:5px;border-radius:7px;border:1px solid #242e3b;background:#111720}.mission-step>span{display:grid;place-items:center;width:23px;height:23px;border-radius:50%;background:#242e3b;font-size:.68rem;font-weight:900}.mission-step b,.mission-step small{display:block}.mission-step b{font-size:.7rem}.mission-step small{font-size:.61rem;color:var(--muted);margin-top:1px}.mission-step.current{border-color:var(--accent);background:#21131a}.mission-step.current>span{background:var(--accent)}.mission-step.complete{border-color:#2f7154}.mission-step.complete>span{background:var(--success)}.mission-step em{font-style:normal;color:var(--success);font-weight:950}.mission-line{height:4px;width:2px;background:#344153;margin-left:16px}.mission-reward{text-align:right;font-size:.61rem;color:var(--muted);margin-top:2px}.mission-reward strong{color:var(--gold)}
.utility-row{padding:7px 9px}.reserve{display:flex;gap:4px}.reserve span{display:grid;place-items:center;width:27px;height:24px;border:1px solid var(--line);border-radius:5px;background:#1a212b;font-size:.68rem;font-weight:900}.log-section{min-height:0;flex:1;display:flex;flex-direction:column;padding-bottom:6px}.log{min-height:0;flex:1;margin:0;padding:0 2px 0 21px;overflow:auto;color:#aeb9c7;font-size:.68rem;line-height:1.3;scrollbar-width:thin}.log li{padding:3px 2px;border-bottom:1px solid rgba(255,255,255,.04)}.log li.latest{color:white;font-weight:750}.winner{display:block;padding:7px;background:#2c1520;border:1px solid var(--accent);border-radius:7px;color:white;font-weight:800}
.phase-toast{position:fixed;left:50%;top:43%;transform:translate(-50%,-50%) scale(.92);z-index:100;min-width:310px;max-width:80vw;padding:16px 24px;text-align:center;border:1px solid var(--accent);border-radius:12px;background:rgba(7,10,14,.96);box-shadow:0 20px 70px rgba(0,0,0,.6),0 0 0 1px rgba(238,20,71,.2);opacity:0;pointer-events:none;transition:.22s}.phase-toast.show{opacity:1;transform:translate(-50%,-50%) scale(1)}.phase-toast strong,.phase-toast span,.phase-toast small{display:block}.phase-toast strong{font-size:.72rem;color:var(--muted);letter-spacing:.08em;text-transform:uppercase}.phase-toast span{font-size:1.35rem;font-weight:950;color:white;margin:4px 0}.phase-toast small{font-size:.72rem;color:#b9c5d2}
@keyframes activePulse{from{transform:scale(1)}to{transform:scale(1.07)}}@keyframes pulseBadge{from{opacity:.72}to{opacity:1}}@keyframes selectedTile{from{filter:brightness(1)}to{filter:brightness(1.25)}}
@media(max-height:850px) and (min-width:1051px){:root{--board-size:min(62vh,calc(100vw - 460px),610px)}.shell{gap:5px}.player-card{padding:5px 8px}.player-stats{margin-top:4px}.panel{gap:5px;padding:8px}.action-card,.mission-card,.utility-row,.log-section{padding:7px}.action-card p{font-size:.7rem}.controls button{min-height:30px}.mission-step{padding:3px}.board-legend{font-size:.58rem}}
@media(max-width:1050px){:root{--board-size:min(calc(100vw - 62px),760px)}body{overflow:auto}.shell{height:auto;min-height:100dvh;overflow:visible}.turn-command{grid-template-columns:1fr}.game-layout{grid-template-columns:1fr;justify-items:center}.panel{width:min(100%,calc(var(--board-size) + 78px));height:auto;min-height:500px}.board-legend{width:min(100%,calc(var(--board-size) + 78px))}.log{max-height:220px}.phase-toast{top:50%}}
@media(max-width:720px){:root{--board-size:min(calc(100vw - 50px),620px)}.shell{padding:7px}.brand{display:block}.topbar h1{font-size:.94rem}.ai-badge{display:none}.player-panels{grid-template-columns:1fr}.player-stats{grid-template-columns:1fr 1fr}.turn-command{padding:7px}.phase-step b{display:none}.phase-step{justify-content:center}.turn-hint{white-space:normal}.coord{display:none}.board-wrap{grid-template-columns:28px var(--board-size) 28px;grid-template-rows:24px var(--board-size) 24px;gap:3px}.board-wrap.shift-controls-hidden{grid-template-columns:0 var(--board-size) 0;grid-template-rows:0 var(--board-size) 0;gap:0}.side-axis{width:28px}.axis button{font-size:.56rem}.board-legend{gap:6px}.held-key{font-size:.42rem;max-width:70px}.panel{width:100%}.phase-toast{min-width:0;width:86vw}}

/* v0.8.4 — animowane podpowiedzi obrotu i czytelniejsze zatwierdzanie */
.cell{appearance:none;color:inherit;font:inherit;text-align:initial}
.cell:focus-visible{outline:3px solid #fff;outline-offset:-3px;z-index:20}
.cell.rotation-available{cursor:pointer}
.tile-rotation-controls{position:absolute;z-index:18;display:flex;align-items:center;justify-content:center;pointer-events:none}
.hover-controls{inset:8%;flex-direction:column;gap:1px;border:1px dashed rgba(255,255,255,.72);border-radius:10px;background:rgba(5,8,13,.72);color:#fff;opacity:0;transform:scale(.86);transition:opacity .14s ease,transform .14s ease,background .14s ease;pointer-events:none;padding:0}
.hover-controls .rotate-arrow{display:block;font-size:clamp(1.25rem,2.2vw,2rem);font-weight:900;line-height:.9;transform-origin:50% 50%}
.hover-controls small{font-size:clamp(.42rem,.55vw,.58rem);font-weight:950;letter-spacing:.08em}
.cell.rotation-available:hover .hover-controls,.cell.rotation-available:focus-visible .hover-controls{opacity:1;transform:scale(1);background:rgba(24,11,17,.88);pointer-events:auto}
.cell.rotation-available:hover .hover-controls .rotate-arrow,.cell.rotation-available:focus-visible .hover-controls .rotate-arrow{animation:rotateHint .9s linear infinite}
.hover-controls.fixed-rotation-hint{border-style:solid;border-color:rgba(246,196,83,.72);background:rgba(24,20,8,.78)}
.hover-controls.fixed-rotation-hint small{color:var(--gold)}
.selected-controls{inset:3%;display:block;pointer-events:auto}
.selected-controls button{position:absolute;z-index:3;border-radius:7px;font-weight:950;box-shadow:0 4px 14px rgba(0,0,0,.45)}
.tile-rotate-again{left:50%;top:46%;transform:translate(-50%,-50%);display:grid;place-items:center;width:58%;height:58%;min-width:34px;min-height:34px;padding:0;border:0;background:transparent;color:#fff;box-shadow:none!important}
.tile-rotate-again .rotate-arrow{display:block;font-size:clamp(1.65rem,2.75vw,2.55rem);line-height:1;animation:rotateHint 1.05s linear infinite;text-shadow:0 2px 5px #000,0 0 6px rgba(238,20,71,.95)}
.tile-finish-rotation{left:50%;bottom:4px;transform:translateX(-50%);width:auto;max-width:86%;min-height:20px;padding:2px 7px;border:none;background:#b31217;color:#fff;font-size:clamp(.48rem,.62vw,.62rem);line-height:1;white-space:nowrap;opacity:.9}
.tile-rotate-again:hover{filter:brightness(1.25);transform:translate(-50%,-50%) scale(1.08);background:transparent}
.tile-finish-rotation:hover{filter:brightness(1.18);transform:translateX(-50%);opacity:1}
.rotation-selected .coord,.rotation-selected .board-object,.rotation-selected .token{opacity:.42}
.rotation-selected .corridor,.rotation-selected .hub{filter:brightness(.94)}
.active-modify-helper{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;margin-top:7px;padding:6px 7px;border:1px solid rgba(246,196,83,.55);border-radius:8px;background:rgba(246,196,83,.07)}
.active-modify-helper span,.active-modify-helper b,.active-modify-helper small{display:block}
.active-modify-helper b{font-size:.61rem;color:var(--gold);letter-spacing:.07em}
.active-modify-helper small{margin-top:2px;color:#c6d0dc;font-size:.58rem;line-height:1.25}
.active-modify-helper button{min-height:28px;padding:4px 8px;border-color:var(--gold);background:#2d2714;font-size:.62rem;white-space:nowrap}
#confirmRotation{display:none}
.game-layout:has(.rotation-selected) .axis button{opacity:.38}
@keyframes rotateHint{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@media(max-width:720px){.hover-controls{display:none}.selected-controls{inset:2%}.tile-finish-rotation{bottom:2px;font-size:.38rem;padding:2px 5px}.active-modify-helper{grid-template-columns:1fr}.active-modify-helper button{width:100%}}

/* v0.8.5 — kompaktowe panele graczy i czytelny cel ikonowy */
.player-card{padding-top:6px;padding-bottom:6px}
.player-stats{margin-top:5px}
.mini-mission{display:flex;align-items:center;gap:5px;min-height:20px;margin-top:4px;overflow:visible}
.mini-mission>b{color:var(--muted);font-size:.72rem}
.mini-mission>small{color:var(--muted);font-size:.59rem}
.mini-key,.mini-chest{display:inline-grid;place-items:center;width:19px;height:19px;border:1px solid rgba(255,255,255,.9);color:#fff;font-style:normal;line-height:1}
.mini-key{border-radius:50%;background:var(--accent-key)}
.mini-key.p2{background:var(--blue-key)}
.mini-key .key-icon{width:82%;height:82%;stroke-width:2.8}
.mini-chest{border-radius:4px;background:var(--accent-chest);font-size:.72rem}
.mini-chest.p2{background:var(--blue-chest)}

/* v0.8.8 — premium directional controls and smooth board motion */
.shift-arrow{
  border-radius:10px;
  border:1px solid rgba(126,148,177,.58);
  background:linear-gradient(180deg,rgba(35,48,65,.98),rgba(10,16,24,.98));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 3px 10px rgba(0,0,0,.3);
  isolation:isolate;
}
.shift-arrow::before{
  content:'';position:absolute;inset:2px;border-radius:8px;
  background:linear-gradient(135deg,rgba(255,255,255,.08),transparent 50%);
  pointer-events:none;
}
.shift-arrow-icon{display:grid!important;place-items:center;width:100%;height:100%;transform:none!important}
.shift-arrow-icon svg{width:76%;height:76%;overflow:visible;filter:drop-shadow(0 2px 3px rgba(0,0,0,.8));transform-origin:50% 50%}
.shift-arrow-icon path{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}
.shift-arrow-icon .arrow-tail{stroke-width:3.2;opacity:.92}
.shift-arrow-icon .arrow-head{stroke-width:3.2}
.shift-arrow-icon .arrow-glint{stroke-width:1.15;stroke:rgba(255,255,255,.72);opacity:.75}
.shift-arrow:not(:disabled){animation:arrowBreath 1.8s ease-in-out infinite}
.shift-arrow:not(:disabled):hover{border-color:var(--gold);color:#fff;background:linear-gradient(180deg,#33465f,#111b29);box-shadow:0 0 0 1px rgba(246,196,83,.3),0 5px 16px rgba(0,0,0,.45)}
.shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-icon{animation:premiumArrowUp .62s ease-in-out infinite}
.shift-arrow.arrow-down:not(:disabled):hover .shift-arrow-icon{animation:premiumArrowDown .62s ease-in-out infinite}
.shift-arrow.arrow-left:not(:disabled):hover .shift-arrow-icon{animation:premiumArrowLeft .62s ease-in-out infinite}
.shift-arrow.arrow-right:not(:disabled):hover .shift-arrow-icon{animation:premiumArrowRight .62s ease-in-out infinite}
.board-transition-overlay{display:grid;grid-template-columns:repeat(7,1fr);border:1px solid transparent;background:transparent;overflow:visible}
.board-transition-overlay .cell{will-change:transform,opacity}
.game-animating .board-wrap,.game-animating .controls{pointer-events:none}
.game-animating .cell{will-change:transform,opacity,filter}
@keyframes arrowBreath{0%,100%{filter:brightness(.94)}50%{filter:brightness(1.12)}}
@keyframes premiumArrowUp{0%,100%{transform:translateY(2px)}50%{transform:translateY(-4px)}}
@keyframes premiumArrowDown{0%,100%{transform:translateY(-2px)}50%{transform:translateY(4px)}}
@keyframes premiumArrowLeft{0%,100%{transform:translateX(2px)}50%{transform:translateX(-4px)}}
@keyframes premiumArrowRight{0%,100%{transform:translateX(-2px)}50%{transform:translateX(4px)}}
@media (prefers-reduced-motion:reduce){.shift-arrow:not(:disabled),.shift-arrow-icon{animation:none!important}}


/* v0.8.9 — corrected directional arrows and single-layer shift animation */
.top-axis,.bottom-axis{align-items:stretch;overflow:visible}
.side-axis{align-items:stretch;overflow:visible}
.shift-arrow{display:grid;place-items:center;overflow:visible}
.shift-arrow-icon{display:grid!important;place-items:center!important;width:100%;height:100%;line-height:0;transform:none!important}
.shift-arrow-icon svg{display:block;width:min(72%,30px);height:min(72%,30px);margin:auto;transform:none!important;overflow:visible}
.top-axis .shift-arrow-icon,.bottom-axis .shift-arrow-icon{padding:1px 0}
.side-axis .shift-arrow-icon{padding:0 1px}
.board{overflow:hidden}
.board-transition-overlay{display:none!important}

/* v0.8.10 — stała pozycja planszy między fazami
   Miejsce na osie sterowania pozostaje zarezerwowane po ich ukryciu,
   dzięki czemu plansza nie zmienia położenia. */
.board-wrap.shift-controls-hidden{
  grid-template-columns:34px var(--board-size) 34px;
  grid-template-rows:28px var(--board-size) 28px;
  gap:5px;
}
.board-wrap.shift-controls-hidden .axis{
  visibility:hidden;
  opacity:0;
  pointer-events:none;
  transform:none;
}
@media(max-width:720px){
  .board-wrap.shift-controls-hidden{
    grid-template-columns:28px var(--board-size) 28px;
    grid-template-rows:24px var(--board-size) 24px;
    gap:3px;
  }
}

/* v1.0 — faza Modyfikacja Premium */
/* 1. Czytelny podgląd wiersza/kolumny sterowanego wskazaną strzałką. */
.board .cell{transition:transform .16s ease,filter .16s ease,box-shadow .16s ease,opacity .16s ease,border-color .16s ease}
.board.axis-preview-active .cell:not(.axis-preview-target){filter:none;opacity:1}
.board .cell.axis-preview-target{
  z-index:12;
  filter:brightness(1.22) saturate(1.12);
  border-color:rgba(238,20,71,.95);
  box-shadow:inset 0 0 0 2px rgba(238,20,71,.72),0 0 14px rgba(238,20,71,.42);
}
.board .cell.axis-preview-target::after{
  content:'';position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(110deg,transparent 15%,rgba(238,20,71,.13) 48%,transparent 82%);
  animation:axisPreviewSweep .85s linear infinite;
}
@keyframes axisPreviewSweep{from{transform:translateX(-95%)}to{transform:translateX(95%)}}

/* 3. Kafelek dostępny do obrotu zachowuje się jak fizyczny element planszy. */
.cell.rotation-available:not(.rotation-selected):hover,
.cell.rotation-available:not(.rotation-selected):focus-visible{
  transform:translateY(-3px) scale(1.018);
  z-index:16;
  box-shadow:0 10px 20px rgba(0,0,0,.5),0 0 0 2px rgba(238,20,71,.54),inset 0 1px 0 rgba(255,255,255,.12);
  filter:brightness(1.08);
}

/* 4. Obrót otrzymał bezwładność/overshoot w animacji Web Animations API. */

/* 5. Fizyczne wciśnięcie strzałki przed przesunięciem planszy. */
.shift-arrow.arrow-pressed{
  animation:arrowPressPremium .11s cubic-bezier(.2,.8,.2,1) both!important;
  border-color:var(--gold);
  box-shadow:inset 0 3px 8px rgba(0,0,0,.7),0 0 0 1px rgba(246,196,83,.42);
}
@keyframes arrowPressPremium{
  0%{transform:scale(1)}
  55%{transform:scale(.82)}
  100%{transform:scale(.94)}
}

/* 6. Płynne wejście i wyjście sterowania fazy bez zmiany położenia planszy. */
.board-wrap .axis{
  transition:opacity .22s ease,visibility .22s ease,filter .22s ease;
}
.board-wrap.shift-controls-visible .axis{visibility:visible;pointer-events:auto}
.board-wrap.shift-controls-visible:not(.shift-controls-entering) .axis{opacity:0;filter:blur(2px)}
.board-wrap.shift-controls-visible.shift-controls-entering .axis{opacity:1;filter:blur(0)}
.board-wrap.shift-controls-hidden .axis{visibility:hidden;opacity:0;pointer-events:none;filter:blur(2px)}

@media (prefers-reduced-motion:reduce){
  .board .cell,.board-wrap .axis{transition:none!important}
  .board .cell.axis-preview-target::after,.shift-arrow.arrow-pressed{animation:none!important}
}

/* v1.0.1 — bezpieczne rozdzielenie obrotu i przycisku zakończenia */
.selected-controls{
  inset:3%;
  display:grid;
  grid-template-rows:minmax(0,1fr) auto;
  gap:4px;
  padding:3px;
  pointer-events:auto;
  overflow:hidden;
}
.selected-controls button{
  position:relative;
  left:auto;
  top:auto;
  bottom:auto;
  z-index:3;
}
.tile-rotate-again{
  transform:none;
  width:100%;
  height:100%;
  min-width:0;
  min-height:28px;
  overflow:hidden;
  border:1px solid rgba(238,20,71,.58);
  background:rgba(24,11,17,.74);
  border-radius:7px;
}
.tile-rotate-again .rotate-arrow{
  font-size:clamp(1.25rem,2.15vw,2rem);
}
.tile-rotate-again:hover{
  transform:scale(.97);
  background:rgba(45,14,25,.9);
}
.tile-finish-rotation{
  transform:none;
  width:100%;
  max-width:none;
  min-height:23px;
  padding:4px 6px;
  opacity:.72;
  color:#fff;
  border-color:rgba(246,196,83,.55);
  background:rgba(5,8,13,.18);
  box-shadow:none!important;
  backdrop-filter:blur(1px);
}
.tile-finish-rotation:hover,
.tile-finish-rotation:focus-visible{
  transform:none;
  opacity:1;
  filter:none;
  color:#fff;
  border-color:var(--gold);
  background:rgba(66,55,20,.88);
  box-shadow:0 0 0 1px rgba(246,196,83,.28),0 0 14px rgba(246,196,83,.3),0 4px 12px rgba(0,0,0,.5)!important;
}
@media(max-width:720px){
  .selected-controls{inset:2%;gap:2px;padding:2px}
  .tile-rotate-again{min-height:24px}
  .tile-finish-rotation{min-height:20px;padding:3px 4px;font-size:.38rem}
}


/* v1.0.2 — finalne dopracowanie fazy Modyfikacja
   Przycisk zatwierdzenia jest przezroczysty w spoczynku i wyraźny po najechaniu.
   Podgląd osi nie przyciemnia pozostałej części planszy. */


/* v1.0.3 — pełna widoczność kafelka i obowiązkowa faza Modyfikacja */
.tile-finish-rotation{
  background:transparent!important;
  border-color:transparent!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
  opacity:.58;
  text-shadow:0 1px 3px #000,0 0 5px rgba(0,0,0,.95);
}
.tile-finish-rotation:hover,
.tile-finish-rotation:focus-visible{
  opacity:1;
  color:#fff;
  border-color:var(--gold)!important;
  background:rgba(66,55,20,.86)!important;
  box-shadow:0 0 0 1px rgba(246,196,83,.32),0 0 16px rgba(246,196,83,.42),0 4px 12px rgba(0,0,0,.52)!important;
  text-shadow:0 1px 3px #000;
}


/* v1.0.4 — czytelne odtwarzanie fazy Modyfikacja przeciwnika SI */
.cell.ai-modification-target{
  z-index:24;
  border-color:var(--gold)!important;
  box-shadow:inset 0 0 0 2px rgba(246,196,83,.78),0 0 20px rgba(246,196,83,.52),0 10px 24px rgba(0,0,0,.55)!important;
  filter:brightness(1.18) saturate(1.08);
}
.cell.ai-modification-target::before{
  content:'SI  ↻';position:absolute;left:50%;top:50%;z-index:30;transform:translate(-50%,-50%);
  padding:5px 8px;border:1px solid var(--gold);border-radius:7px;background:rgba(7,10,14,.76);
  color:#fff;font-size:clamp(.52rem,.75vw,.72rem);font-weight:950;letter-spacing:.08em;
  box-shadow:0 0 16px rgba(246,196,83,.36);pointer-events:none;
}
.shift-arrow.ai-selected-arrow{
  color:#fff;border-color:var(--gold)!important;
  background:linear-gradient(180deg,#3d4f67,#142033)!important;
  box-shadow:0 0 0 1px rgba(246,196,83,.38),0 0 18px rgba(246,196,83,.45),0 5px 16px rgba(0,0,0,.48)!important;
  animation:arrowBreath .75s ease-in-out infinite!important;
}
body.game-animating .board-wrap{pointer-events:none}
@media (prefers-reduced-motion:reduce){.shift-arrow.ai-selected-arrow{animation:none!important}}

/* v1.0.5 — finalny polish fazy Modyfikacja */
.board{position:relative}
.shift-strip-overlay{
  position:absolute;inset:0;z-index:80;pointer-events:none;overflow:visible;
}
.shift-visual-cell{
  position:absolute!important;width:calc(100% / 7);height:calc(100% / 7);
  margin:0!important;will-change:transform;box-sizing:border-box;
}
.cell.shift-source-hidden{visibility:hidden!important}
.board.shift-in-progress{overflow:visible}
.board-wrap.shift-locking .shift-arrow{
  opacity:.22;filter:grayscale(.35) brightness(.72);animation:none!important;
  transition:opacity .18s ease,filter .18s ease,border-color .18s ease,box-shadow .18s ease;
}
.board-wrap.shift-locking .shift-arrow.action-confirmed{
  opacity:1;filter:none;color:#fff;border-color:var(--gold)!important;
  box-shadow:0 0 0 1px rgba(246,196,83,.42),0 0 18px rgba(246,196,83,.52),0 5px 16px rgba(0,0,0,.48)!important;
}
.board.board-settle{animation:boardSettlePhysical .30s cubic-bezier(.2,.8,.2,1)}
@keyframes boardSettlePhysical{
  0%{transform:translate(0,0)}
  30%{transform:translate(0,3px)}
  56%{transform:translate(-1px,-1px)}
  78%{transform:translate(1px,1px)}
  100%{transform:translate(0,0)}
}
@media (prefers-reduced-motion:reduce){
  .board.board-settle{animation:none!important}
  .board-wrap.shift-locking .shift-arrow{transition:none!important}
}

/* v1.0.7 — wyraźne osiadanie przy przejściu Modyfikacja → Ruch */
.board.board-phase-settle{
  transform-origin:50% 50%;
  animation:boardPhaseSettle .52s cubic-bezier(.18,.82,.22,1);
  will-change:transform,filter;
}
@keyframes boardPhaseSettle{
  0%{transform:translate3d(0,0,0) scale(1);filter:brightness(1)}
  16%{transform:translate3d(0,5px,0) scale(.997);filter:brightness(.97)}
  34%{transform:translate3d(-2px,-2px,0) scale(1.002);filter:brightness(1.04)}
  50%{transform:translate3d(2px,2px,0) scale(.999)}
  66%{transform:translate3d(-1px,0,0) scale(1.001)}
  82%{transform:translate3d(1px,1px,0) scale(1)}
  100%{transform:translate3d(0,0,0) scale(1);filter:brightness(1)}
}
@media (prefers-reduced-motion:reduce){
  .board.board-phase-settle{animation:none!important}
}


/* v1.0.9 — fundament jednej bazy kodu: desktop web, mobile web, iOS i Android */
:root{
  --app-height:100dvh;
  --safe-top:env(safe-area-inset-top,0px);
  --safe-right:env(safe-area-inset-right,0px);
  --safe-bottom:env(safe-area-inset-bottom,0px);
  --safe-left:env(safe-area-inset-left,0px);
}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;overscroll-behavior:none}
body{min-height:var(--app-height);overscroll-behavior-x:none}
.shell{
  height:var(--app-height);
  padding-top:max(8px,var(--safe-top));
  padding-right:max(14px,var(--safe-right));
  padding-bottom:max(8px,var(--safe-bottom));
  padding-left:max(14px,var(--safe-left));
}
button,.cell,[role="button"]{
  touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
  user-select:none;
  -webkit-user-select:none;
}
.board{touch-action:manipulation}
.input-touch button:hover:not(:disabled){filter:none}
.input-touch .cell:hover{outline:none}
.input-touch .cell.rotation-selected{outline:3px solid var(--accent);outline-offset:-3px}
.input-touch .shift-arrow:active:not(:disabled),
.input-touch .tile-rotate-again:active,
.input-touch .tile-finish-rotation:active{
  filter:brightness(1.22);
}
@media (pointer:coarse){
  .top-actions button,.controls button{min-height:44px}
  .axis button{touch-action:manipulation}
  .panel{padding-bottom:max(10px,var(--safe-bottom))}
}
@media(max-width:1050px){
  .shell{height:auto;min-height:var(--app-height)}
}
@media(max-width:720px){
  .shell{
    padding-top:max(7px,var(--safe-top));
    padding-right:max(7px,var(--safe-right));
    padding-bottom:max(7px,var(--safe-bottom));
    padding-left:max(7px,var(--safe-left));
  }
}
@media(max-height:540px) and (orientation:landscape) and (pointer:coarse){
  :root{--board-size:min(calc(var(--app-height) - 112px),calc(100vw - 390px))}
  .shell{gap:4px}
  .player-panels{display:none}
  .turn-command{padding:5px 8px}
  .board-legend{display:none}
  .panel{min-height:0}
}
.standalone-app body,.capacitor-app body{overscroll-behavior:none}


/* v1.1.0 — premium Faza 2: Ruch */
.board{isolation:isolate}
.board-atmosphere{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden;opacity:.34;mix-blend-mode:screen}
.board-atmosphere::before,.board-atmosphere::after{content:'';position:absolute;width:72%;height:42%;border-radius:50%;filter:blur(24px);background:radial-gradient(ellipse at center,rgba(182,205,224,.13),rgba(92,120,144,.045) 42%,transparent 72%);animation:labFogDrift 16s ease-in-out infinite alternate}
.board-atmosphere::before{left:-30%;top:10%}.board-atmosphere::after{right:-35%;bottom:4%;animation-duration:21s;animation-direction:alternate-reverse}
@keyframes labFogDrift{0%{transform:translate3d(-8%,4%,0) scale(.9);opacity:.35}50%{transform:translate3d(42%,-7%,0) scale(1.18);opacity:.75}100%{transform:translate3d(76%,7%,0) scale(.98);opacity:.42}}

.cell.move-reachable{cursor:pointer;z-index:4;animation:moveCellReveal .55s cubic-bezier(.2,.8,.2,1) both;animation-delay:var(--move-wave-delay,0ms)}
.cell.move-reachable::before{content:'';position:absolute;inset:7%;z-index:4;border:1px solid rgba(255,255,255,.52);border-radius:8px;box-shadow:inset 0 0 18px rgba(238,20,71,.16),0 0 10px rgba(238,20,71,.18);pointer-events:none;animation:reachableBreath 1.45s ease-in-out infinite alternate;animation-delay:var(--move-wave-delay,0ms)}
.cell.move-reachable.move-distance-0::before{border-color:rgba(246,196,83,.72);box-shadow:inset 0 0 18px rgba(246,196,83,.15),0 0 12px rgba(246,196,83,.24)}
.cell.move-reachable:not(.move-distance-0):hover,.cell.move-reachable:not(.move-distance-0):focus-visible{z-index:18;transform:translateY(-4px) scale(1.035);filter:brightness(1.14);box-shadow:0 12px 24px rgba(0,0,0,.56),0 0 0 2px rgba(238,20,71,.72),0 0 22px rgba(238,20,71,.38)}
.cell:not(.move-reachable) .token:not(.active-token){filter:saturate(.58) brightness(.72);opacity:.78}
@keyframes moveCellReveal{0%{filter:brightness(.68);transform:scale(.96)}65%{filter:brightness(1.17);transform:scale(1.025)}100%{filter:brightness(1);transform:scale(1)}}
@keyframes reachableBreath{from{opacity:.48;transform:scale(.94)}to{opacity:1;transform:scale(1)}}

.movement-display{display:none;align-items:center;gap:9px;margin:0 0 7px;padding:7px 9px;border-radius:7px;background:#111924;border:1px solid #2a394c;overflow:hidden;position:relative}
.movement-display.visible{display:flex;animation:movementDisplayIn .34s ease both}
.movement-display>span{font-size:.58rem;font-weight:950;color:var(--muted);letter-spacing:.06em}
.movement-display small{margin-left:auto;color:var(--muted);font-size:.62rem}
.movement-energy{display:flex;gap:4px}
.energy-segment{display:block;width:30px;height:10px;border-radius:999px;background:linear-gradient(90deg,rgba(238,20,71,.55),rgba(255,96,137,.98));box-shadow:0 0 10px rgba(238,20,71,.42),inset 0 1px 0 rgba(255,255,255,.35);animation:energyPulse 1.15s ease-in-out infinite alternate}
.energy-segment:nth-child(2){animation-delay:.12s}.energy-segment:nth-child(3){animation-delay:.24s}
@keyframes energyPulse{from{filter:brightness(.82);transform:scaleX(.94)}to{filter:brightness(1.22);transform:scaleX(1)}}
@keyframes movementDisplayIn{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}

.moving-token-clone{position:absolute!important;z-index:120!important;pointer-events:none;will-change:left,top,transform;box-shadow:0 8px 16px rgba(0,0,0,.5),0 0 0 5px rgba(238,20,71,.2),0 0 24px rgba(255,255,255,.55)!important}
.movement-trail{position:absolute;z-index:95;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;pointer-events:none;background:rgba(255,255,255,.78);box-shadow:0 0 9px rgba(238,20,71,.85),0 0 18px rgba(238,20,71,.48);animation:movementTrailFade .82s ease-out forwards}
@keyframes movementTrailFade{0%{opacity:.85;transform:scale(1)}100%{opacity:0;transform:scale(2.7)}}
.cell.movement-landed{z-index:20;animation:movementLanding .48s cubic-bezier(.2,.8,.2,1) both}
.cell.movement-landed::after{content:'';position:absolute;inset:6%;z-index:30;border-radius:50%;border:2px solid rgba(255,255,255,.8);pointer-events:none;animation:landingRing .48s ease-out forwards}
@keyframes movementLanding{0%{transform:scale(1);filter:brightness(1)}40%{transform:scale(.96);filter:brightness(1.36)}72%{transform:scale(1.025);filter:brightness(1.1)}100%{transform:scale(1);filter:brightness(1)}}
@keyframes landingRing{0%{opacity:1;transform:scale(.28)}100%{opacity:0;transform:scale(1.35)}}

@media(max-width:720px){.energy-segment{width:22px}.movement-display{gap:6px;padding:6px}.movement-display>span{font-size:.52rem}}
@media(prefers-reduced-motion:reduce){.board-atmosphere::before,.board-atmosphere::after,.cell.move-reachable,.cell.move-reachable::before,.energy-segment,.movement-trail,.cell.movement-landed,.cell.movement-landed::after{animation:none!important}}

/* v1.1.1 — ruch skupiony wokół pionka */
.token-shell{position:absolute;inset:0;z-index:42;display:flex;align-items:center;justify-content:center;pointer-events:none}
.token-shell>.token{position:relative!important;inset:auto!important;z-index:3}
.token-movement-hud{position:absolute;inset:0;z-index:2;pointer-events:none}
.token-energy{position:absolute;left:50%;top:4%;transform:translateX(-50%);display:flex;gap:3px;padding:3px 5px;border-radius:999px;background:rgba(7,11,17,.78);border:1px solid rgba(255,255,255,.24);box-shadow:0 4px 10px rgba(0,0,0,.48),0 0 12px rgba(238,20,71,.24);backdrop-filter:blur(3px)}
.token-energy-segment{display:block;width:12px;height:5px;border-radius:999px;background:rgba(73,86,103,.72);box-shadow:inset 0 1px 0 rgba(255,255,255,.18);transition:background .18s ease,box-shadow .18s ease,opacity .18s ease,transform .18s ease}
.token-energy-segment.active{background:linear-gradient(90deg,rgba(238,20,71,.72),rgba(255,111,151,1));box-shadow:0 0 8px rgba(238,20,71,.76),inset 0 1px 0 rgba(255,255,255,.45);animation:tokenEnergyPulse 1.1s ease-in-out infinite alternate}
.token-energy-segment:nth-child(2){animation-delay:.12s}.token-energy-segment:nth-child(3){animation-delay:.24s}
@keyframes tokenEnergyPulse{from{opacity:.72;transform:scaleX(.9)}to{opacity:1;transform:scaleX(1.08)}}
.move-direction{position:absolute;width:25px;height:25px;display:grid;place-items:center;border-radius:50%;font-size:17px;font-weight:950;line-height:1;color:#fff;background:rgba(11,18,28,.9);border:1px solid rgba(255,255,255,.5);box-shadow:0 0 0 3px rgba(238,20,71,.12),0 0 14px rgba(238,20,71,.62),0 4px 9px rgba(0,0,0,.55);animation:directionEdgeIn .15s cubic-bezier(.2,.8,.2,1) both,directionPulse .92s .15s ease-in-out infinite alternate;will-change:transform,filter,opacity}
.move-direction-n{left:50%;top:0;--edge-x:-50%;--edge-y:-50%;--enter-x:-50%;--enter-y:5%}
.move-direction-e{right:0;top:50%;--edge-x:50%;--edge-y:-50%;--enter-x:-5%;--enter-y:-50%}
.move-direction-s{left:50%;bottom:0;--edge-x:-50%;--edge-y:50%;--enter-x:-50%;--enter-y:-5%}
.move-direction-w{left:0;top:50%;--edge-x:-50%;--edge-y:-50%;--enter-x:5%;--enter-y:-50%}
@keyframes directionEdgeIn{from{opacity:0;transform:translate(var(--enter-x),var(--enter-y)) scale(.72)}to{opacity:1;transform:translate(var(--edge-x),var(--edge-y)) scale(1)}}
@keyframes directionPulse{from{filter:brightness(.88);opacity:.78}to{filter:brightness(1.25);opacity:1}}
.cell.move-distance-1::before{border-color:rgba(115,235,182,.72);box-shadow:inset 0 0 18px rgba(75,212,150,.18),0 0 12px rgba(75,212,150,.28)}
.cell.move-distance-2::before{border-color:rgba(246,196,83,.72);box-shadow:inset 0 0 18px rgba(246,196,83,.16),0 0 12px rgba(246,196,83,.28)}
.cell.move-distance-3::before{border-color:rgba(238,96,120,.76);box-shadow:inset 0 0 18px rgba(238,20,71,.17),0 0 13px rgba(238,20,71,.32)}
.cell.move-reachable:not(.move-distance-0)::after{content:attr(data-move-distance);position:absolute;right:7%;bottom:7%;z-index:14;width:18px;height:18px;display:grid;place-items:center;border-radius:50%;font-size:.58rem;font-weight:950;color:#fff;background:rgba(7,11,17,.84);border:1px solid rgba(255,255,255,.42);box-shadow:0 3px 8px rgba(0,0,0,.45);pointer-events:none}
.cell.move-path-preview{z-index:16;filter:brightness(1.18)}
.cell.move-path-preview .hub{box-shadow:0 0 0 4px rgba(255,255,255,.16),0 0 18px rgba(238,20,71,.85)!important;animation:pathEnergyFlow .58s ease-in-out infinite alternate;animation-delay:calc(var(--path-order,0) * 85ms)}
.cell.move-path-target{z-index:20;transform:translateY(-3px) scale(1.025);box-shadow:0 12px 25px rgba(0,0,0,.52),0 0 0 2px rgba(255,255,255,.72),0 0 25px rgba(238,20,71,.52)}
@keyframes pathEnergyFlow{from{filter:brightness(.85);transform:scale(.9)}to{filter:brightness(1.45);transform:scale(1.18)}}
@media(max-width:720px){.token-energy{top:2%;gap:2px;padding:2px 4px}.token-energy-segment{width:9px;height:4px}.move-direction{width:20px;height:20px;font-size:13px}.move-direction-n{top:0}.move-direction-e{right:0}.move-direction-s{bottom:0}.move-direction-w{left:0}}
@media(prefers-reduced-motion:reduce){.token-energy-segment.active,.move-direction,.cell.move-path-preview .hub{animation:none!important}}

/* v1.1.2 — strzałki ruchu osadzone na granicach sąsiednich pól */


/* v1.1.3 — ikona obrotu zawsze nad pionkiem, także na polu respawnu */
.cell.rotation-available:hover .hover-controls,
.cell.rotation-available:focus-visible .hover-controls{
  z-index:70;
}
.cell.rotation-available:hover .token-shell,
.cell.rotation-available:focus-visible .token-shell{
  z-index:40;
}

/* v1.1.4 — strzałki ruchu dokładnie na środku granic między polami */
.token-movement-hud{overflow:visible;z-index:80}
.move-direction{z-index:90}
.move-direction-n{
  left:50%;right:auto;top:0;bottom:auto;
  --edge-x:-50%;--edge-y:-50%;
  --enter-x:-50%;--enter-y:-10%;
}
.move-direction-e{
  left:100%;right:auto;top:50%;bottom:auto;
  --edge-x:-50%;--edge-y:-50%;
  --enter-x:-90%;--enter-y:-50%;
}
.move-direction-s{
  left:50%;right:auto;top:100%;bottom:auto;
  --edge-x:-50%;--edge-y:-50%;
  --enter-x:-50%;--enter-y:-90%;
}
.move-direction-w{
  left:0;right:auto;top:50%;bottom:auto;
  --edge-x:-50%;--edge-y:-50%;
  --enter-x:-10%;--enter-y:-50%;
}
@media(max-width:720px){
  .move-direction-n{left:50%;top:0}
  .move-direction-e{left:100%;right:auto;top:50%}
  .move-direction-s{left:50%;top:100%;bottom:auto}
  .move-direction-w{left:0;top:50%}
}


/* v1.1.5 — poprawne warstwy, centrowanie strzałek i energii ruchu */
.cell.active-movement-cell{
  z-index:65!important;
  overflow:visible!important;
}
.cell.active-movement-cell:hover,
.cell.active-movement-cell:focus-visible{
  z-index:65!important;
}
.token-shell{
  overflow:visible!important;
}
.token-movement-hud{
  position:absolute!important;
  left:0!important;
  top:0!important;
  right:auto!important;
  bottom:auto!important;
  width:100%!important;
  height:100%!important;
  overflow:visible!important;
  z-index:80!important;
}
.move-direction{
  z-index:95!important;
}
.move-direction-n{
  left:50%!important;
  top:0!important;
  right:auto!important;
  bottom:auto!important;
  --edge-x:-50%;--edge-y:-50%;
}
.move-direction-e{
  left:100%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  --edge-x:-50%;--edge-y:-50%;
}
.move-direction-s{
  left:50%!important;
  top:100%!important;
  right:auto!important;
  bottom:auto!important;
  --edge-x:-50%;--edge-y:-50%;
}
.move-direction-w{
  left:0!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  --edge-x:-50%;--edge-y:-50%;
}
.token-energy{
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  transform:translate(-50%,-38px)!important;
  z-index:96!important;
}
@media(max-width:720px){
  .token-energy{
    top:50%!important;
    transform:translate(-50%,-31px)!important;
  }
}


/* v1.1.6 — diody energii na środku pionka + premium animacja ruchu */
.token-movement-hud{z-index:80!important}
.token-energy{
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  z-index:97!important;
  gap:3px!important;
  padding:0!important;
  width:auto!important;
  min-width:0!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
}
.token-energy-segment{
  width:6px!important;
  height:6px!important;
  flex:0 0 6px!important;
  border-radius:50%!important;
  background:rgba(16,22,31,.88)!important;
  border:1px solid rgba(255,255,255,.28)!important;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.8)!important;
}
.token-energy-segment.active{
  background:radial-gradient(circle at 35% 30%,#fff 0 10%,#ff94b5 28%,#ee1447 68%,#8f092d 100%)!important;
  border-color:rgba(255,255,255,.72)!important;
  box-shadow:0 0 5px rgba(255,72,128,.95),0 0 9px rgba(238,20,71,.72),inset 0 0 2px rgba(255,255,255,.75)!important;
  animation:movementLedPulse .9s ease-in-out infinite alternate!important;
}
.token-energy-segment:not(.active){opacity:.48;transform:scale(.82)}
.token .token-name{transform:translateY(7px)}
@keyframes movementLedPulse{from{filter:brightness(.78);transform:scale(.9)}to{filter:brightness(1.35);transform:scale(1.12)}}

.moving-token-clone{
  overflow:visible;
  transform-origin:50% 65%;
  filter:drop-shadow(0 7px 7px rgba(0,0,0,.46));
}
.moving-token-clone::before{
  content:'';
  position:absolute;
  left:50%;top:50%;
  width:145%;height:42%;
  transform:translate(-50%,-50%) rotate(-8deg);
  border-radius:50%;
  background:linear-gradient(90deg,transparent,rgba(238,20,71,.36),rgba(255,255,255,.6),transparent);
  filter:blur(5px);
  opacity:.8;
  pointer-events:none;
  animation:moverEnergyWake .24s ease-in-out infinite alternate;
}
@keyframes moverEnergyWake{from{opacity:.35;transform:translate(-55%,-50%) rotate(-8deg) scaleX(.82)}to{opacity:.9;transform:translate(-45%,-50%) rotate(-8deg) scaleX(1.14)}}
.movement-trail{
  width:14px!important;height:14px!important;margin:-7px 0 0 -7px!important;
  background:radial-gradient(circle,rgba(255,255,255,.95) 0 16%,rgba(238,20,71,.72) 34%,rgba(238,20,71,0) 72%)!important;
  box-shadow:0 0 12px rgba(238,20,71,.9),0 0 24px rgba(238,20,71,.58)!important;
}
.cell.movement-step-flash::before{
  content:'';position:absolute;inset:9%;z-index:36;pointer-events:none;border-radius:18%;
  border:2px solid rgba(255,255,255,.78);
  box-shadow:inset 0 0 18px rgba(238,20,71,.32),0 0 18px rgba(238,20,71,.58);
  animation:movementStepFlash .34s ease-out forwards;
}
@keyframes movementStepFlash{0%{opacity:0;transform:scale(.72)}32%{opacity:1}100%{opacity:0;transform:scale(1.16)}}
@media(max-width:720px){
  .token-energy{transform:translate(-50%,-50%)!important;gap:2px!important}
  .token-energy-segment{width:5px!important;height:5px!important;flex-basis:5px!important}
  .token .token-name{transform:translateY(6px)}
}
@media(prefers-reduced-motion:reduce){
  .moving-token-clone::before,.cell.movement-step-flash::before,.token-energy-segment.active{animation:none!important}
}

/* v1.1.7 — przycisk „Bez ruchu” bezpośrednio na aktywnym polu */
.stay-on-cell{
  position:absolute;
  left:50%;
  top:7%;
  transform:translateX(-50%);
  z-index:110;
  display:flex;
  align-items:center;
  justify-content:center;
  min-width:58%;
  min-height:18px;
  padding:3px 8px;
  border:1px solid rgba(255,255,255,.52);
  border-radius:999px;
  color:#fff;
  background:linear-gradient(180deg,rgba(28,38,53,.96),rgba(8,13,21,.96));
  box-shadow:0 4px 11px rgba(0,0,0,.58),0 0 0 2px rgba(238,20,71,.14),0 0 12px rgba(238,20,71,.34);
  font:900 .52rem/1 system-ui,-apple-system,"Segoe UI",sans-serif;
  letter-spacing:.055em;
  white-space:nowrap;
  cursor:pointer;
  pointer-events:auto;
  touch-action:manipulation;
  animation:stayOnCellIn .2s cubic-bezier(.2,.8,.2,1) both,stayOnCellGlow 1.35s .2s ease-in-out infinite alternate;
}
.stay-on-cell:hover,
.stay-on-cell:focus-visible{
  transform:translateX(-50%) translateY(-1px) scale(1.04);
  border-color:rgba(255,255,255,.9);
  background:linear-gradient(180deg,rgba(238,20,71,.98),rgba(139,9,44,.98));
  box-shadow:0 6px 14px rgba(0,0,0,.62),0 0 0 2px rgba(255,255,255,.16),0 0 18px rgba(238,20,71,.68);
}
.stay-on-cell:active{transform:translateX(-50%) scale(.95)}
@keyframes stayOnCellIn{from{opacity:0;transform:translate(-50%,-6px) scale(.82)}to{opacity:1;transform:translateX(-50%) scale(1)}}
@keyframes stayOnCellGlow{from{filter:brightness(.88)}to{filter:brightness(1.18)}}
@media(max-width:720px){
  .stay-on-cell{top:6%;min-width:62%;min-height:16px;padding:2px 6px;font-size:.44rem}
}
@media(prefers-reduced-motion:reduce){.stay-on-cell{animation:none!important}}

/* v1.1.9 — marsz pionka pole po polu bez lasera i bez teleportowania */
.moving-token-clone{
  position:fixed!important;
  inset:auto!important;
  z-index:10000!important;
  pointer-events:none!important;
  will-change:transform,left,top;
  transform-origin:50% 72%;
  overflow:visible;
  opacity:1!important;
  visibility:visible!important;
  animation:none!important;
  filter:drop-shadow(0 10px 8px rgba(0,0,0,.58)) drop-shadow(0 0 10px rgba(238,20,71,.72));
}
.moving-token-clone::before{
  content:'';
  position:absolute;
  left:50%;
  bottom:-14%;
  width:95%;
  height:30%;
  transform:translateX(-50%);
  border-radius:50%;
  background:rgba(0,0,0,.5);
  filter:blur(5px);
  opacity:.75;
  animation:walkingShadow .39s ease-in-out infinite;
}
.moving-token-clone::after{
  content:'';
  position:absolute;
  inset:-22%;
  border-radius:50%;
  border:1px solid rgba(255,255,255,.36);
  box-shadow:0 0 18px rgba(238,20,71,.48);
  opacity:.42;
  animation:walkingAura .39s ease-in-out infinite alternate;
}
.movement-ribbon{
  position:fixed;
  z-index:9997;
  height:6px;
  transform-origin:0 50%;
  pointer-events:none;
  border-radius:999px;
  background:linear-gradient(90deg,rgba(238,20,71,0),rgba(238,20,71,.65),rgba(255,255,255,.72),rgba(238,20,71,0));
  box-shadow:0 0 12px rgba(238,20,71,.68);
  filter:blur(.3px);
  animation:movementRibbonFade .5s ease-out forwards;
}
@keyframes movementRibbonFade{
  0%{opacity:0;clip-path:inset(0 100% 0 0)}
  24%{opacity:.85;clip-path:inset(0 0 0 0)}
  100%{opacity:0;clip-path:inset(0 0 0 0)}
}
@keyframes walkingShadow{
  0%,100%{transform:translateX(-50%) scaleX(1);opacity:.72}
  50%{transform:translateX(-50%) scaleX(.68);opacity:.42}
}
@keyframes walkingAura{
  from{transform:scale(.9);opacity:.22}
  to{transform:scale(1.05);opacity:.52}
}
body.movement-in-progress .movement-trail{display:none!important}
@media(prefers-reduced-motion:reduce){
  .moving-token-clone::before,.moving-token-clone::after,.movement-ribbon{animation:none!important}
}


/* v1.1.9 — linia/laser ruchu całkowicie wyłączona; widoczny jest wyłącznie pionek */
.movement-ribbon{display:none!important}
body.movement-in-progress .moving-token-clone{display:block!important;opacity:1!important}


/* v1.1.10 — klon ruchu korzysta z rzeczywistych współrzędnych pola startowego */
.moving-token-clone{right:auto!important;bottom:auto!important}


/* v1.1.11 — docelowe tekstury przemysłowych kafelków I / L / T */
.cell .tile-texture{position:absolute;inset:0;z-index:0;display:block;pointer-events:none;background-position:center;background-repeat:no-repeat;background-size:cover;transform:rotate(var(--tile-rotation,0deg)) scale(1.018);transform-origin:50% 50%;transition:transform .22s cubic-bezier(.2,.8,.2,1),filter .18s ease;filter:brightness(.84) saturate(.96) contrast(1.08)}
.cell[data-tile-type="I"] .tile-texture{background-image:url('../textures/tile_I.jpg')}
.cell[data-tile-type="L"] .tile-texture{background-image:url('../textures/tile_L.jpg')}
.cell[data-tile-type="T"] .tile-texture{background-image:url('../textures/tile_T.jpg')}
.cell[data-tile-type="PLUS"] .tile-texture{background-image:url('../textures/tile_PLUS.jpg')}
.cell[data-tile-type] > .hub,.cell[data-tile-type] > .corridor{opacity:0}
.cell[data-tile-type]{background:#090b0d;isolation:isolate}
.cell[data-tile-type] .coord,.cell[data-tile-type] .token,.cell[data-tile-type] .board-object,.cell[data-tile-type] .tile-rotation-controls,.cell[data-tile-type] .stay-on-cell{z-index:7}
.cell[data-tile-type]:hover .tile-texture,.cell[data-tile-type]:focus-visible .tile-texture{filter:brightness(.97) saturate(1.06) contrast(1.08)}
.cell[data-tile-type].rotation-selected .tile-texture{filter:brightness(.9) saturate(1.04) contrast(1.08)}
.cell[data-tile-type].axis-preview-target .tile-texture,.cell[data-tile-type].ai-modification-target .tile-texture{filter:brightness(1.03) saturate(1.08) contrast(1.08)}
@media(max-width:720px){.cell .tile-texture{transform:rotate(var(--tile-rotation,0deg)) scale(1.025)}}
@media(prefers-reduced-motion:reduce){.cell .tile-texture{transition:none!important}}

/* v1.1.14 — tło BLACKSAW2081 oraz graficzne obiekty klucza i skrzyni */
html{background:#030303}
body{
  position:relative;
  background-color:#050505;
  background-image:url('../images/blacksaw_background.jpg');
  background-position:center center;
  background-size:cover;
  background-repeat:no-repeat;
  background-attachment:fixed;
}
body::before{
  content:"";
  position:fixed;
  inset:0;
  z-index:0;
  pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,.26),rgba(0,0,0,.42)),radial-gradient(circle at 50% 48%,transparent 0 30%,rgba(0,0,0,.24) 72%,rgba(0,0,0,.58) 100%);
}
.shell{position:relative;z-index:1}

/* Docelowe grafiki obiektów na planszy. */
.board-object.key-object,.board-object.chest-object{
  display:grid;
  place-items:center;
  padding:0;
  border:0;
  background:transparent;
  overflow:visible;
  pointer-events:none;
  line-height:0;
  isolation:isolate;
}
.board-object.key-object::before,.board-object.chest-object::before{
  content:"";
  position:absolute;
  left:50%;
  bottom:1%;
  width:82%;
  height:24%;
  transform:translateX(-50%);
  border-radius:50%;
  background:rgba(0,0,0,.92);
  filter:blur(4px);
  opacity:.9;
  z-index:-1;
}
.board-object.key-object img,.board-object.chest-object img{
  display:block;
  width:100%;
  height:100%;
  object-fit:contain;
  pointer-events:none;
  user-select:none;
  -webkit-user-drag:none;
}
.board-object.key-object{
  width:59%;
  height:59%;
  right:-2%;
  bottom:-2%;
  border-radius:0;
  z-index:8;
}
.board-object.chest-object{
  width:74%;
  height:66%;
  left:-4%;
  bottom:-3%;
  border-radius:0;
  z-index:8;
}
/* Lekko różne warianty misji: czerwony dla gracza, chłodniejszy niebieski dla SI. */
.board-object.key-object.p1 img,.board-object.chest-object.p1 img{
  filter:contrast(1.16) brightness(1.13) saturate(1.22) hue-rotate(-18deg) drop-shadow(0 7px 7px rgba(0,0,0,.98)) drop-shadow(0 2px 2px rgba(0,0,0,1)) drop-shadow(0 0 8px rgba(238,20,71,.66));
}
.board-object.key-object.p2 img,.board-object.chest-object.p2 img{
  filter:contrast(1.16) brightness(1.15) saturate(1.26) hue-rotate(155deg) drop-shadow(0 7px 7px rgba(0,0,0,.98)) drop-shadow(0 2px 2px rgba(0,0,0,1)) drop-shadow(0 0 8px rgba(49,132,237,.72));
}
.board-object.key-object::after,.board-object.chest-object::after{
  content:"";
  position:absolute;
  right:4%;
  top:5%;
  width:9px;
  aspect-ratio:1;
  border:1px solid rgba(255,255,255,.88);
  border-radius:50%;
  background:var(--accent);
  box-shadow:0 0 7px var(--accent);
}
.board-object.key-object.p2::after,.board-object.chest-object.p2::after{background:var(--blue);box-shadow:0 0 7px var(--blue)}
.cell.rotation-selected .board-object img{opacity:.48}

@media(max-width:1050px){body{background-attachment:scroll}}
@media(max-width:720px){
  body{background-position:center top}
  .board-object.key-object{width:62%;height:62%}
  .board-object.chest-object{width:77%;height:69%}
  .board-object.key-object::after,.board-object.chest-object::after{width:7px}
}

/* v1.1.16 — graficzne przyciski przesuwania kolumn w górę + ogień na hover */
.board-wrap{
  grid-template-rows:44px var(--board-size) 28px;
}
.top-axis{
  overflow:visible;
  align-items:end;
  z-index:25;
}
.top-axis .axis-group{
  overflow:visible;
  align-items:flex-end;
  justify-content:center;
}
.top-axis .shift-arrow.arrow-up{
  width:100%;
  height:44px;
  overflow:visible;
  border:0;
  border-radius:0;
  background:transparent;
  box-shadow:none;
  isolation:isolate;
  transform-origin:50% 100%;
}
.top-axis .shift-arrow.arrow-up::before{
  display:none;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-icon{
  position:relative;
  z-index:3;
  width:100%;
  height:100%;
  padding:0;
  background:url('../images/shift_arrow_up.png') center bottom / contain no-repeat;
  filter:drop-shadow(0 5px 5px rgba(0,0,0,.9));
  transition:transform .18s ease,filter .18s ease;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-icon svg{
  display:none;
}
.top-axis .shift-arrow.arrow-up::after{
  content:'';
  position:absolute;
  z-index:1;
  left:18%;
  right:18%;
  bottom:-7px;
  height:24px;
  border-radius:50% 50% 35% 35%;
  opacity:0;
  transform:scale(.55,.2) translateY(7px);
  transform-origin:50% 100%;
  pointer-events:none;
  background:
    radial-gradient(ellipse at 50% 100%,rgba(255,241,132,.98) 0 9%,rgba(255,157,20,.92) 19%,rgba(255,58,0,.72) 38%,transparent 67%),
    radial-gradient(ellipse at 27% 90%,rgba(255,186,36,.9),rgba(238,43,0,.55) 37%,transparent 68%),
    radial-gradient(ellipse at 73% 92%,rgba(255,208,78,.9),rgba(236,51,0,.5) 34%,transparent 70%);
  filter:blur(.3px) drop-shadow(0 0 7px rgba(255,83,0,.9));
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible{
  background:transparent;
  border:0;
  box-shadow:none;
  animation:none;
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-icon{
  animation:blacksawArrowLift .62s ease-in-out infinite;
  filter:brightness(1.16) saturate(1.15) drop-shadow(0 7px 7px rgba(0,0,0,.95)) drop-shadow(0 0 7px rgba(255,115,18,.7));
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover::after,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible::after{
  opacity:1;
  animation:blacksawFire .32s ease-in-out infinite alternate;
}
.top-axis .shift-arrow.arrow-up.arrow-pressed .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up.action-confirmed .shift-arrow-icon{
  transform:translateY(-4px) scale(.92);
  filter:brightness(1.35) drop-shadow(0 0 11px rgba(255,120,20,.95));
}
.top-axis .shift-arrow.arrow-up:disabled{
  opacity:.22;
  filter:grayscale(.55);
}
@keyframes blacksawArrowLift{
  0%,100%{transform:translateY(1px) scale(1)}
  50%{transform:translateY(-3px) scale(1.045)}
}
@keyframes blacksawFire{
  0%{transform:scale(.74,.72) translateY(4px) rotate(-1deg);filter:blur(.35px) drop-shadow(0 0 6px rgba(255,76,0,.85))}
  100%{transform:scale(1.03,1.18) translateY(-1px) rotate(1deg);filter:blur(.15px) drop-shadow(0 0 11px rgba(255,138,20,.98))}
}
@media(max-width:720px){
  .board-wrap{grid-template-rows:34px var(--board-size) 24px}
  .top-axis .shift-arrow.arrow-up{height:34px}
  .top-axis .shift-arrow.arrow-up::after{bottom:-5px;height:18px}
}
@media(prefers-reduced-motion:reduce){
  .top-axis .shift-arrow.arrow-up::after{animation:none!important}
  .top-axis .shift-arrow.arrow-up .shift-arrow-icon{animation:none!important}
}

/* v1.1.17 — mocny cień, stała animacja strzałek i wyraźny ogień po aktywacji */
.top-axis .shift-arrow.arrow-up{
  height:48px;
  animation:none!important;
}
.top-axis .shift-arrow.arrow-up::before{
  content:'';
  display:block;
  position:absolute;
  z-index:0;
  left:9%;
  right:9%;
  bottom:-8px;
  height:20px;
  border-radius:50%;
  pointer-events:none;
  background:radial-gradient(ellipse at center,
    rgba(0,0,0,.98) 0%,
    rgba(0,0,0,.88) 34%,
    rgba(0,0,0,.48) 61%,
    transparent 78%);
  filter:blur(3px);
  opacity:.96;
  transform:scaleX(1.14);
  transform-origin:50% 50%;
  animation:blacksawArrowShadow 2.1s ease-in-out infinite;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-icon{
  animation:blacksawArrowIdle 2.1s ease-in-out infinite;
  filter:
    drop-shadow(0 7px 4px rgba(0,0,0,.98))
    drop-shadow(0 13px 9px rgba(0,0,0,.86))
    drop-shadow(0 0 2px rgba(255,164,55,.22));
  will-change:transform,filter;
}
.top-axis .shift-arrow.arrow-up::after{
  left:14%;
  right:14%;
  bottom:-16px;
  height:36px;
  border-radius:42% 42% 48% 48%;
  clip-path:polygon(4% 100%,9% 63%,18% 82%,24% 28%,34% 70%,43% 7%,52% 64%,61% 20%,70% 76%,79% 31%,87% 73%,96% 100%);
  background:
    radial-gradient(ellipse at 50% 92%,rgba(255,250,183,1) 0 8%,rgba(255,191,37,.98) 15%,rgba(255,87,0,.9) 34%,rgba(174,14,0,.72) 53%,transparent 72%),
    linear-gradient(90deg,transparent 0 8%,rgba(255,71,0,.75) 17%,transparent 28%,rgba(255,185,35,.92) 43%,transparent 57%,rgba(255,68,0,.8) 76%,transparent 92%);
  mix-blend-mode:screen;
  filter:blur(.15px) drop-shadow(0 0 8px rgba(255,58,0,.98)) drop-shadow(0 0 16px rgba(255,128,0,.82));
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-icon,
.input-touch .top-axis .shift-arrow.arrow-up:not(:disabled):active .shift-arrow-icon{
  animation:blacksawArrowHover .72s cubic-bezier(.42,0,.3,1) infinite;
  filter:
    brightness(1.24) saturate(1.22)
    drop-shadow(0 8px 5px rgba(0,0,0,1))
    drop-shadow(0 15px 12px rgba(0,0,0,.92))
    drop-shadow(0 0 10px rgba(255,117,18,.92));
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover::before,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible::before,
.input-touch .top-axis .shift-arrow.arrow-up:not(:disabled):active::before{
  opacity:1;
  transform:scaleX(1.28) scaleY(.82);
  filter:blur(4px);
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover::after,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible::after,
.input-touch .top-axis .shift-arrow.arrow-up:not(:disabled):active::after{
  opacity:1;
  animation:blacksawFirePremium .18s steps(2,end) infinite alternate;
}
@keyframes blacksawArrowIdle{
  0%,100%{transform:translateY(1px) rotate(-.35deg) scale(1)}
  48%{transform:translateY(-2px) rotate(.35deg) scale(1.025)}
}
@keyframes blacksawArrowShadow{
  0%,100%{opacity:.88;transform:scaleX(1.1) scaleY(.92)}
  48%{opacity:1;transform:scaleX(1.22) scaleY(.78)}
}
@keyframes blacksawArrowHover{
  0%,100%{transform:translateY(1px) rotate(-.7deg) scale(1.035)}
  50%{transform:translateY(-5px) rotate(.7deg) scale(1.085)}
}
@keyframes blacksawFirePremium{
  0%{transform:translateY(5px) scale(.86,.72) skewX(-3deg);filter:blur(.2px) drop-shadow(0 0 8px rgba(255,54,0,.98)) drop-shadow(0 0 15px rgba(255,128,0,.82))}
  50%{transform:translateY(-1px) scale(1.04,1.14) skewX(2deg);filter:blur(.05px) drop-shadow(0 0 12px rgba(255,87,0,1)) drop-shadow(0 0 22px rgba(255,154,23,.94))}
  100%{transform:translateY(2px) scale(.94,1.28) skewX(-1deg);filter:blur(.1px) drop-shadow(0 0 10px rgba(255,43,0,1)) drop-shadow(0 0 19px rgba(255,125,0,.9))}
}
@media(max-width:720px){
  .top-axis .shift-arrow.arrow-up{height:38px}
  .top-axis .shift-arrow.arrow-up::before{bottom:-6px;height:15px}
  .top-axis .shift-arrow.arrow-up::after{bottom:-12px;height:28px}
}
@media(prefers-reduced-motion:reduce){
  .top-axis .shift-arrow.arrow-up::before,
  .top-axis .shift-arrow.arrow-up .shift-arrow-icon{animation:none!important}
}

/* v1.1.18 — nowa grafika górnej strzałki i czytelna sugestia ruchu góra–dół */
.top-axis .shift-arrow.arrow-up .shift-arrow-icon{
  background-image:url('../images/shift_arrow_up.png');
  background-position:center bottom;
  background-size:contain;
  background-repeat:no-repeat;
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-icon,
.input-touch .top-axis .shift-arrow.arrow-up:not(:disabled):active .shift-arrow-icon{
  animation:blacksawArrowDirectionUp 1s cubic-bezier(.42,0,.28,1) infinite;
}
@keyframes blacksawArrowDirectionUp{
  0%{transform:translateY(3px) scale(.98);filter:brightness(1.05) saturate(1.08) drop-shadow(0 8px 5px rgba(0,0,0,1)) drop-shadow(0 15px 12px rgba(0,0,0,.92)) drop-shadow(0 0 5px rgba(255,36,12,.72))}
  38%{transform:translateY(-6px) scale(1.07);filter:brightness(1.32) saturate(1.34) drop-shadow(0 9px 6px rgba(0,0,0,1)) drop-shadow(0 17px 13px rgba(0,0,0,.92)) drop-shadow(0 0 14px rgba(255,42,16,1))}
  58%{transform:translateY(-6px) scale(1.07);filter:brightness(1.32) saturate(1.34) drop-shadow(0 9px 6px rgba(0,0,0,1)) drop-shadow(0 17px 13px rgba(0,0,0,.92)) drop-shadow(0 0 14px rgba(255,42,16,1))}
  100%{transform:translateY(3px) scale(.98);filter:brightness(1.05) saturate(1.08) drop-shadow(0 8px 5px rgba(0,0,0,1)) drop-shadow(0 15px 12px rgba(0,0,0,.92)) drop-shadow(0 0 5px rgba(255,36,12,.72))}
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover::after,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible::after,
.input-touch .top-axis .shift-arrow.arrow-up:not(:disabled):active::after{
  animation:blacksawFireDirectional .22s steps(2,end) infinite alternate;
}
@keyframes blacksawFireDirectional{
  0%{transform:translateY(6px) scale(.82,.68) skewX(-4deg);opacity:.78;filter:blur(.2px) drop-shadow(0 0 8px rgba(255,38,0,.98)) drop-shadow(0 0 15px rgba(255,112,0,.82))}
  100%{transform:translateY(-2px) scale(1.08,1.25) skewX(3deg);opacity:1;filter:blur(.05px) drop-shadow(0 0 13px rgba(255,67,0,1)) drop-shadow(0 0 24px rgba(255,146,18,.96))}
}

/* v1.1.19 — niezawodna animacja górnych strzałek, płomień i iskry */
.board-wrap{grid-template-rows:64px var(--board-size) 28px}
.top-axis{overflow:visible!important;z-index:60}
.top-axis .axis-group{overflow:visible!important}
.top-axis .shift-arrow.arrow-up{
  position:relative;
  height:58px;
  overflow:visible!important;
  isolation:isolate;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-icon{
  position:absolute;
  inset:0;
  z-index:5;
  transform-origin:50% 78%;
  pointer-events:none;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-fire{
  position:absolute;
  z-index:3;
  left:25%;
  right:25%;
  bottom:-18px;
  height:42px;
  opacity:0;
  pointer-events:none;
  transform-origin:50% 100%;
  clip-path:polygon(3% 100%,12% 58%,22% 79%,29% 18%,39% 71%,50% 0,60% 67%,71% 20%,80% 76%,89% 48%,97% 100%);
  background:
    radial-gradient(ellipse at 50% 92%,#fff7b4 0 7%,#ffd12f 15%,#ff6a00 34%,rgba(196,18,0,.88) 56%,transparent 75%),
    linear-gradient(90deg,transparent 0 10%,rgba(255,65,0,.9) 22%,transparent 37%,rgba(255,214,62,.98) 50%,transparent 64%,rgba(255,56,0,.9) 80%,transparent 94%);
  mix-blend-mode:screen;
  filter:drop-shadow(0 0 8px #ff3c00) drop-shadow(0 0 18px rgba(255,124,0,.92));
}
.top-axis .shift-arrow.arrow-up .shift-arrow-sparks{
  position:absolute;
  z-index:4;
  left:12%;
  right:12%;
  bottom:-10px;
  height:54px;
  opacity:0;
  pointer-events:none;
  background:
    radial-gradient(circle at 16% 72%,#fff2a8 0 1.5px,transparent 2px),
    radial-gradient(circle at 31% 42%,#ff8a00 0 1.2px,transparent 1.8px),
    radial-gradient(circle at 48% 67%,#ffd45c 0 1.4px,transparent 2px),
    radial-gradient(circle at 65% 35%,#fff0a2 0 1.4px,transparent 2px),
    radial-gradient(circle at 82% 61%,#ff6800 0 1.2px,transparent 1.8px),
    radial-gradient(circle at 57% 12%,#ffb21a 0 1.1px,transparent 1.7px),
    radial-gradient(circle at 23% 18%,#fff6c8 0 1px,transparent 1.6px);
  filter:drop-shadow(0 0 4px rgba(255,104,0,.95));
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled) .shift-arrow-icon{
  animation:bsArrowTravel119 .78s cubic-bezier(.37,0,.24,1) infinite!important;
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-fire,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-fire,
.top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled) .shift-arrow-fire{
  opacity:1;
  animation:bsFire119 .16s ease-in-out infinite alternate!important;
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-sparks,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-sparks,
.top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled) .shift-arrow-sparks{
  opacity:1;
  animation:bsSparks119 .72s linear infinite!important;
}
@keyframes bsArrowTravel119{
  0%,100%{transform:translateY(5px) scale(.96);filter:brightness(1.02) saturate(1.08) drop-shadow(0 9px 6px rgba(0,0,0,1)) drop-shadow(0 16px 13px rgba(0,0,0,.94))}
  42%{transform:translateY(-10px) scale(1.08);filter:brightness(1.45) saturate(1.4) drop-shadow(0 12px 8px rgba(0,0,0,1)) drop-shadow(0 20px 15px rgba(0,0,0,.92)) drop-shadow(0 0 15px rgba(255,45,12,1))}
  58%{transform:translateY(-10px) scale(1.08);filter:brightness(1.45) saturate(1.4) drop-shadow(0 12px 8px rgba(0,0,0,1)) drop-shadow(0 20px 15px rgba(0,0,0,.92)) drop-shadow(0 0 15px rgba(255,45,12,1))}
}
@keyframes bsFire119{
  0%{transform:translateY(6px) scale(.82,.66) skewX(-5deg);filter:drop-shadow(0 0 7px #ff3600) drop-shadow(0 0 14px rgba(255,112,0,.9))}
  100%{transform:translateY(-3px) scale(1.12,1.28) skewX(4deg);filter:drop-shadow(0 0 13px #ff4a00) drop-shadow(0 0 25px rgba(255,156,24,.98))}
}
@keyframes bsSparks119{
  0%{transform:translateY(14px) scale(.82);opacity:0}
  18%{opacity:1}
  70%{opacity:.95}
  100%{transform:translateY(-28px) scale(1.12);opacity:0}
}
@media(max-width:720px){
  .board-wrap{grid-template-rows:48px var(--board-size) 24px}
  .top-axis .shift-arrow.arrow-up{height:44px}
  .top-axis .shift-arrow.arrow-up .shift-arrow-fire{bottom:-13px;height:32px}
  .top-axis .shift-arrow.arrow-up .shift-arrow-sparks{height:42px}
}
@media(prefers-reduced-motion:reduce){
  .top-axis .shift-arrow.arrow-up .shift-arrow-icon,
  .top-axis .shift-arrow.arrow-up .shift-arrow-fire,
  .top-axis .shift-arrow.arrow-up .shift-arrow-sparks{animation:none!important}
}


/* v1.1.20 — nowa grafika, bez płomienia, iskry i pewna animacja góra–dół */
.top-axis .shift-arrow.arrow-up .shift-arrow-fire,
.top-axis .shift-arrow.arrow-up::after{
  display:none!important;
  opacity:0!important;
  animation:none!important;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-icon{
  background-image:url('../images/shift_arrow_up.png')!important;
  background-position:center center!important;
  background-size:contain!important;
  background-repeat:no-repeat!important;
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible,
.top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled){
  animation:bsTopButtonMove120 .82s cubic-bezier(.4,0,.25,1) infinite!important;
  will-change:transform,filter;
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-icon,
.top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled) .shift-arrow-icon{
  animation:none!important;
  filter:brightness(1.22) saturate(1.18)
    drop-shadow(0 10px 7px rgba(0,0,0,1))
    drop-shadow(0 18px 14px rgba(0,0,0,.94))
    drop-shadow(0 0 12px rgba(255,42,12,.94))!important;
}
.top-axis .shift-arrow.arrow-up:not(:disabled):hover .shift-arrow-sparks,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible .shift-arrow-sparks,
.top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled) .shift-arrow-sparks{
  display:block!important;
  opacity:1!important;
  animation:bsSparks120 .78s linear infinite!important;
}
@keyframes bsTopButtonMove120{
  0%,100%{transform:translateY(4px) scale(.985);filter:brightness(1)}
  42%,58%{transform:translateY(-9px) scale(1.045);filter:brightness(1.12)}
}
@keyframes bsSparks120{
  0%{transform:translateY(15px) scale(.78);opacity:0}
  16%{opacity:1}
  72%{opacity:.95}
  100%{transform:translateY(-30px) scale(1.16);opacity:0}
}
@media(prefers-reduced-motion:reduce){
  .top-axis .shift-arrow.arrow-up:not(:disabled):hover,
  .top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible,
  .top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled),
  .top-axis .shift-arrow.arrow-up .shift-arrow-sparks{animation:none!important}
}

/* v1.1.21 — pełny zestaw przycisków BLACKSAW2081 wokół planszy */
.board-wrap{
  grid-template-columns:58px var(--board-size) 58px!important;
  grid-template-rows:64px var(--board-size) 64px!important;
  gap:7px!important;
  overflow:visible!important;
}
.board-wrap.shift-controls-hidden{
  grid-template-columns:0 var(--board-size) 0!important;
  grid-template-rows:0 var(--board-size) 0!important;
  gap:0!important;
}
.side-axis{width:58px!important;overflow:visible!important;z-index:60}
.bottom-axis,.top-axis{overflow:visible!important;z-index:60}
.axis-group{overflow:visible!important}

.top-axis .shift-arrow.arrow-up,
.bottom-axis .shift-arrow.arrow-down,
.left-axis .shift-arrow.arrow-left,
.right-axis .shift-arrow.arrow-right{
  position:relative;
  width:100%;
  height:100%;
  min-width:0;
  min-height:0;
  padding:0!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
  overflow:visible!important;
  isolation:isolate;
  transform-origin:50% 50%;
}

.top-axis .shift-arrow.arrow-up .shift-arrow-icon,
.bottom-axis .shift-arrow.arrow-down .shift-arrow-icon,
.left-axis .shift-arrow.arrow-left .shift-arrow-icon,
.right-axis .shift-arrow.arrow-right .shift-arrow-icon{
  position:absolute;
  inset:-2px;
  z-index:5;
  display:block!important;
  width:auto!important;
  height:auto!important;
  padding:0!important;
  background-image:url('../images/shift_arrow_up.png')!important;
  background-position:center!important;
  background-size:contain!important;
  background-repeat:no-repeat!important;
  pointer-events:none;
  filter:brightness(1.02) saturate(1.06)
    drop-shadow(0 9px 7px rgba(0,0,0,1))
    drop-shadow(0 18px 15px rgba(0,0,0,.96))
    drop-shadow(0 0 5px rgba(255,43,15,.34))!important;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-icon{transform:rotate(0deg)!important}
.bottom-axis .shift-arrow.arrow-down .shift-arrow-icon{transform:rotate(180deg)!important}
.left-axis .shift-arrow.arrow-left .shift-arrow-icon{transform:rotate(-90deg)!important}
.right-axis .shift-arrow.arrow-right .shift-arrow-icon{transform:rotate(90deg)!important}

.top-axis .shift-arrow.arrow-up .shift-arrow-icon svg,
.bottom-axis .shift-arrow.arrow-down .shift-arrow-icon svg,
.left-axis .shift-arrow.arrow-left .shift-arrow-icon svg,
.right-axis .shift-arrow.arrow-right .shift-arrow-icon svg{opacity:0!important}

/* płomień wyłączony — pozostają tylko iskry */
.axis .shift-arrow .shift-arrow-fire,
.axis .shift-arrow::after{display:none!important;opacity:0!important;animation:none!important}

.top-axis .shift-arrow.arrow-up .shift-arrow-sparks,
.bottom-axis .shift-arrow.arrow-down .shift-arrow-sparks,
.left-axis .shift-arrow.arrow-left .shift-arrow-sparks,
.right-axis .shift-arrow.arrow-right .shift-arrow-sparks{
  position:absolute;
  z-index:4;
  pointer-events:none;
  opacity:0;
  background:
    radial-gradient(circle at 14% 76%,#fff6c8 0 1.5px,transparent 2px),
    radial-gradient(circle at 28% 44%,#ff8500 0 1.3px,transparent 1.9px),
    radial-gradient(circle at 44% 66%,#ffd45c 0 1.5px,transparent 2.1px),
    radial-gradient(circle at 61% 31%,#fff1a8 0 1.4px,transparent 2px),
    radial-gradient(circle at 79% 62%,#ff6200 0 1.3px,transparent 1.9px),
    radial-gradient(circle at 57% 10%,#ffb31a 0 1.2px,transparent 1.8px),
    radial-gradient(circle at 22% 16%,#fffbd4 0 1.1px,transparent 1.7px),
    radial-gradient(circle at 88% 28%,#ff3d00 0 1.2px,transparent 1.8px);
  filter:drop-shadow(0 0 4px rgba(255,93,0,.98));
}
.top-axis .shift-arrow.arrow-up .shift-arrow-sparks{left:10%;right:10%;bottom:-5px;height:55px}
.bottom-axis .shift-arrow.arrow-down .shift-arrow-sparks{left:10%;right:10%;top:-5px;height:55px;transform:rotate(180deg)}
.left-axis .shift-arrow.arrow-left .shift-arrow-sparks{top:10%;bottom:10%;right:-5px;width:55px;transform:rotate(-90deg)}
.right-axis .shift-arrow.arrow-right .shift-arrow-sparks{top:10%;bottom:10%;left:-5px;width:55px;transform:rotate(90deg)}

.top-axis .shift-arrow.arrow-up:not(:disabled):hover,
.top-axis .shift-arrow.arrow-up:not(:disabled):focus-visible,
.top-axis .shift-arrow.arrow-up.is-arrow-active:not(:disabled){animation:bsMoveUp121 .82s cubic-bezier(.4,0,.25,1) infinite!important}
.bottom-axis .shift-arrow.arrow-down:not(:disabled):hover,
.bottom-axis .shift-arrow.arrow-down:not(:disabled):focus-visible,
.bottom-axis .shift-arrow.arrow-down.is-arrow-active:not(:disabled){animation:bsMoveDown121 .82s cubic-bezier(.4,0,.25,1) infinite!important}
.left-axis .shift-arrow.arrow-left:not(:disabled):hover,
.left-axis .shift-arrow.arrow-left:not(:disabled):focus-visible,
.left-axis .shift-arrow.arrow-left.is-arrow-active:not(:disabled){animation:bsMoveLeft121 .82s cubic-bezier(.4,0,.25,1) infinite!important}
.right-axis .shift-arrow.arrow-right:not(:disabled):hover,
.right-axis .shift-arrow.arrow-right:not(:disabled):focus-visible,
.right-axis .shift-arrow.arrow-right.is-arrow-active:not(:disabled){animation:bsMoveRight121 .82s cubic-bezier(.4,0,.25,1) infinite!important}

.axis .shift-arrow:not(:disabled):hover .shift-arrow-icon,
.axis .shift-arrow:not(:disabled):focus-visible .shift-arrow-icon,
.axis .shift-arrow.is-arrow-active:not(:disabled) .shift-arrow-icon{
  filter:brightness(1.3) saturate(1.28)
    drop-shadow(0 12px 9px rgba(0,0,0,1))
    drop-shadow(0 22px 18px rgba(0,0,0,.98))
    drop-shadow(0 0 16px rgba(255,38,10,1))!important;
}
.axis .shift-arrow:not(:disabled):hover .shift-arrow-sparks,
.axis .shift-arrow:not(:disabled):focus-visible .shift-arrow-sparks,
.axis .shift-arrow.is-arrow-active:not(:disabled) .shift-arrow-sparks{
  opacity:1!important;
  animation:bsSparks121 .72s linear infinite!important;
}

@keyframes bsMoveUp121{0%,100%{transform:translateY(4px) scale(.985)}42%,58%{transform:translateY(-9px) scale(1.045)}}
@keyframes bsMoveDown121{0%,100%{transform:translateY(-4px) scale(.985)}42%,58%{transform:translateY(9px) scale(1.045)}}
@keyframes bsMoveLeft121{0%,100%{transform:translateX(4px) scale(.985)}42%,58%{transform:translateX(-9px) scale(1.045)}}
@keyframes bsMoveRight121{0%,100%{transform:translateX(-4px) scale(.985)}42%,58%{transform:translateX(9px) scale(1.045)}}
@keyframes bsSparks121{0%{background-position:0 12px;opacity:0}16%{opacity:1}72%{opacity:.95}100%{background-position:0 -30px;opacity:0}}

@media(max-width:720px){
  .board-wrap{grid-template-columns:44px var(--board-size) 44px!important;grid-template-rows:48px var(--board-size) 48px!important;gap:4px!important}
  .side-axis{width:44px!important}
  .top-axis .shift-arrow.arrow-up .shift-arrow-sparks,
  .bottom-axis .shift-arrow.arrow-down .shift-arrow-sparks{height:42px}
  .left-axis .shift-arrow.arrow-left .shift-arrow-sparks,
  .right-axis .shift-arrow.arrow-right .shift-arrow-sparks{width:42px}
}
@media(prefers-reduced-motion:reduce){
  .axis .shift-arrow,
  .axis .shift-arrow .shift-arrow-sparks{animation:none!important}
}

/* v2.1.7 — finalna hierarchia warstw oraz bezramkowa ikona obrotu */
.cell[data-tile-type]{isolation:isolate}
.cell[data-tile-type] > .tile-texture{z-index:1!important}
.cell[data-tile-type] > .hub,
.cell[data-tile-type] > .corridor,
.cell[data-tile-type] > .coord{z-index:2!important}
.cell[data-tile-type] > .board-object{z-index:20!important}
.cell[data-tile-type] > .token-shell,
.cell[data-tile-type] > .token{z-index:30!important}
.cell[data-tile-type] .token-hp{z-index:40!important}
.cell[data-tile-type] > .stay-on-cell,
.cell[data-tile-type] > .tile-rotation-controls{z-index:100!important}

/* Podpowiedź OBRÓĆ: wyłącznie ikona i napis, bez panelu, ramki i tła. */
.hover-controls{
  inset:4%!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  gap:0!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  box-shadow:none!important;
  outline:0!important;
  opacity:0;
  transform:scale(.88);
  overflow:visible!important;
}
.cell.rotation-available:hover .hover-controls,
.cell.rotation-available:focus-visible .hover-controls{
  opacity:1!important;
  transform:scale(1)!important;
  background:transparent!important;
  pointer-events:auto!important;
}
.hover-controls .rotate-arrow{
  display:block!important;
  width:clamp(34px,62%,64px)!important;
  height:auto!important;
  object-fit:contain!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
  filter:drop-shadow(0 3px 2px rgba(0,0,0,1)) drop-shadow(0 7px 5px rgba(0,0,0,.92))!important;
  transform-origin:50% 50%!important;
  animation:rotateHint 1.05s linear infinite!important;
  pointer-events:none!important;
}
.hover-controls small{
  position:relative!important;
  z-index:2!important;
  margin-top:-3px!important;
  color:#fff!important;
  font-size:clamp(.43rem,.56vw,.60rem)!important;
  font-weight:950!important;
  line-height:1!important;
  letter-spacing:.08em!important;
  text-shadow:0 2px 3px #000,0 0 4px #000!important;
  pointer-events:none!important;
}

/* Wybrany kafelek: ikona i przycisk są zawsze nad postacią, HP i obiektami. */
.selected-controls{
  inset:0!important;
  display:block!important;
  z-index:100!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.selected-controls button{z-index:101!important}
.tile-rotate-again{
  left:50%!important;
  top:40%!important;
  transform:translate(-50%,-50%)!important;
  width:66%!important;
  height:66%!important;
  min-width:0!important;
  min-height:0!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  box-shadow:none!important;
  outline:0!important;
  pointer-events:auto!important;
}
.tile-rotate-again .rotate-arrow{
  display:block!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
  filter:drop-shadow(0 3px 2px rgba(0,0,0,1)) drop-shadow(0 8px 6px rgba(0,0,0,.95))!important;
  animation:rotateHint 1.05s linear infinite!important;
  pointer-events:none!important;
}
.tile-rotate-again:hover,
.tile-rotate-again:focus-visible{
  transform:translate(-50%,-50%) scale(1.06)!important;
  background:transparent!important;
  box-shadow:none!important;
  filter:brightness(1.12)!important;
}
.tile-finish-rotation{
  left:50%!important;
  bottom:4px!important;
  transform:translateX(-50%)!important;
  z-index:102!important;
  width:auto!important;
  max-width:94%!important;
  min-height:20px!important;
  padding:3px 7px!important;
  white-space:nowrap!important;
  pointer-events:auto!important;
}
.tile-finish-rotation:hover,
.tile-finish-rotation:focus-visible{transform:translateX(-50%)!important}

/* Nie wygaszamy postaci, HP ani obiektów podczas obrotu. */
.rotation-selected .coord,
.rotation-selected .board-object,
.rotation-selected .token,
.rotation-selected .token-shell{opacity:1!important}
.rotation-selected .board-object img{opacity:1!important}

@media(max-width:720px){
  .hover-controls{display:none!important}
  .tile-rotate-again{top:39%!important;width:64%!important;height:64%!important}
  .tile-finish-rotation{bottom:2px!important;font-size:.38rem!important;padding:2px 5px!important}
}
\n\n/* BLACKSAW2081 LAB v2.2.2 — zebrany klucz jako część HUD-u pionka */
.token-bottom-hud{
  position:absolute!important;
  left:50%!important;
  top:100%!important;
  transform:translateX(-50%)!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  gap:2px!important;
  z-index:82!important;
  pointer-events:none!important;
  white-space:nowrap!important;
}
.token-bottom-hud .token-hp{
  position:relative!important;
  inset:auto!important;
  left:auto!important;
  top:auto!important;
  bottom:auto!important;
  transform:none!important;
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  flex:0 0 auto!important;
}
.token-bottom-hud .held-key{
  position:relative!important;
  inset:auto!important;
  left:auto!important;
  right:auto!important;
  top:auto!important;
  bottom:auto!important;
  transform:none!important;
  display:block!important;
  width:clamp(12px,1.42vw,17px)!important;
  height:clamp(12px,1.42vw,17px)!important;
  padding:0!important;
  margin-left:calc(var(--held-key-index,0) * -1px)!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  box-shadow:none!important;
  overflow:visible!important;
  z-index:83!important;
}
.token-bottom-hud .held-key img{
  display:block!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  filter:drop-shadow(0 1px 1px rgba(0,0,0,.95))!important;
}
.token-bottom-hud .held-key.p2 img{
  filter:hue-rotate(165deg) saturate(1.45) brightness(1.12) drop-shadow(0 1px 1px rgba(0,0,0,.95))!important;
}
.token-bottom-hud .held-key.key-pickup-flash img{
  animation:keyPickupHudFlash .95s cubic-bezier(.18,.8,.22,1) both!important;
}
@keyframes keyPickupHudFlash{
  0%{opacity:0;transform:scale(.35) rotate(-18deg);filter:brightness(2.3) drop-shadow(0 0 2px #fff) drop-shadow(0 0 10px rgba(255,181,52,1))}
  36%{opacity:1;transform:scale(1.45) rotate(7deg);filter:brightness(2) drop-shadow(0 0 3px #fff) drop-shadow(0 0 13px rgba(255,129,0,.95))}
  68%{transform:scale(.9) rotate(-3deg);filter:brightness(1.35) drop-shadow(0 0 7px rgba(255,129,0,.62))}
  100%{opacity:1;transform:scale(1) rotate(0);filter:drop-shadow(0 1px 1px rgba(0,0,0,.95))}
}
@media(max-width:720px){
  .token-bottom-hud{gap:1px!important}
  .token-bottom-hud .held-key{width:11px!important;height:11px!important}
}
@media(prefers-reduced-motion:reduce){
  .token-bottom-hud .held-key.key-pickup-flash img{animation:none!important}
}


/* BLACKSAW2081 LAB v2.3.0 — niezawodna animacja przesuwania i widoczny klucz HUD */
.shift-strip-overlay{
  width:100%!important;
  height:100%!important;
  contain:none!important;
}
.shift-strip-overlay .shift-visual-cell{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  background:#05070a!important;
  overflow:hidden!important;
  z-index:1!important;
}
.shift-strip-overlay .shift-visual-cell > .tile-texture{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  position:absolute!important;
  inset:0!important;
  z-index:1!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:cover!important;
}
.shift-strip-overlay .shift-visual-cell > .coord{z-index:12!important}
.shift-strip-overlay .shift-visual-cell > .hub,
.shift-strip-overlay .shift-visual-cell > .corridor{z-index:2!important}
.shift-strip-overlay .shift-visual-cell > .board-object{z-index:20!important}
.shift-strip-overlay .shift-visual-cell > .token-shell{z-index:42!important}

.token-bottom-hud .held-key{
  display:inline-block!important;
  visibility:visible!important;
  opacity:1!important;
  min-width:14px!important;
  min-height:14px!important;
  flex:0 0 14px!important;
  position:relative!important;
  z-index:95!important;
}
.token-bottom-hud .held-key img{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  width:100%!important;
  height:100%!important;
}

/* BLACKSAW2081 LAB v2.3.0 — pełne kafelki podczas animacji przesunięcia */
.shift-strip-overlay .shift-visual-cell{
  isolation:isolate!important;
  background:#090b0d!important;
  border-color:#27303b!important;
}
.shift-strip-overlay .shift-visual-cell > .tile-texture,
.shift-strip-overlay .shift-visual-cell > .shift-texture-image{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  display:block!important;
  object-fit:cover!important;
  opacity:1!important;
  visibility:visible!important;
  z-index:1!important;
  transform:rotate(var(--tile-rotation,0deg)) scale(1.018)!important;
  transform-origin:50% 50%!important;
  filter:brightness(.84) saturate(.96) contrast(1.08)!important;
  pointer-events:none!important;
}
.shift-strip-overlay .shift-visual-cell > .coord{display:block!important;visibility:visible!important;opacity:1!important;z-index:12!important}


/* BLACKSAW2081 LAB v2.3.1 — animacja prawdziwych kafelków */
.board.shift-in-progress{overflow:hidden!important;}
.shift-incoming-overlay{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  z-index:90!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.shift-incoming-overlay .shift-visual-cell{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  overflow:hidden!important;
  box-sizing:border-box!important;
}
.shift-incoming-overlay .shift-visual-cell > .tile-texture{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
}
.board.shift-in-progress > .cell{
  will-change:transform!important;
  backface-visibility:hidden!important;
}

/* BLACKSAW2081 LAB v2.3.2 — jedna warstwa strzałek + pełny pasek kafelków */
/* Wyzerowanie wszystkich historycznych dekoracji przycisków przesuwania. */
.axis .shift-arrow,
.top-axis .shift-arrow.arrow-up,
.bottom-axis .shift-arrow.arrow-down,
.left-axis .shift-arrow.arrow-left,
.right-axis .shift-arrow.arrow-right{
  position:relative!important;
  display:grid!important;
  place-items:center!important;
  width:100%!important;
  height:100%!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  background:none!important;
  box-shadow:none!important;
  overflow:visible!important;
  isolation:isolate!important;
}
.axis .shift-arrow::before,
.axis .shift-arrow::after,
.axis .shift-arrow .shift-arrow-fire,
.axis .shift-arrow .shift-arrow-sparks,
.axis .shift-arrow .shift-arrow-icon svg{
  content:none!important;
  display:none!important;
  opacity:0!important;
  background:none!important;
  box-shadow:none!important;
  animation:none!important;
}
.axis .shift-arrow .shift-arrow-icon{
  position:absolute!important;
  inset:21.25%!important; /* dokładnie 50% poprzedniego rozmiaru */
  display:block!important;
  width:auto!important;
  height:auto!important;
  padding:0!important;
  margin:0!important;
  background:url('../images/shift_arrow_up.png') center/contain no-repeat!important;
  pointer-events:none!important;
  opacity:1!important;
  filter:brightness(1.04) saturate(1.08) drop-shadow(0 5px 5px rgba(0,0,0,.95)) drop-shadow(0 0 4px rgba(255,43,15,.42))!important;
  transform-origin:50% 50%!important;
}
.top-axis .shift-arrow.arrow-up .shift-arrow-icon{transform:rotate(0deg)!important}
.bottom-axis .shift-arrow.arrow-down .shift-arrow-icon{transform:rotate(180deg)!important}
.left-axis .shift-arrow.arrow-left .shift-arrow-icon{transform:rotate(-90deg)!important}
.right-axis .shift-arrow.arrow-right .shift-arrow-icon{transform:rotate(90deg)!important}
.axis .shift-arrow:not(:disabled):hover,
.axis .shift-arrow:not(:disabled):focus-visible,
.axis .shift-arrow.is-arrow-active:not(:disabled){background:none!important;box-shadow:none!important}
.axis .shift-arrow:not(:disabled):hover .shift-arrow-icon,
.axis .shift-arrow:not(:disabled):focus-visible .shift-arrow-icon,
.axis .shift-arrow.is-arrow-active:not(:disabled) .shift-arrow-icon{
  filter:brightness(1.25) saturate(1.18) drop-shadow(0 6px 6px rgba(0,0,0,1)) drop-shadow(0 0 9px rgba(255,38,10,.9))!important;
}

/* Pełne kopie kafelków podczas przesunięcia. */
.board.shift-in-progress{position:relative!important;overflow:hidden!important}
.board.shift-in-progress > .cell.shift-source-hidden{visibility:hidden!important}
.shift-full-strip{
  position:absolute!important;
  inset:0!important;
  pointer-events:none!important;
  overflow:visible!important;
  contain:none!important;
  z-index:120!important;
}
.shift-full-strip .shift-visual-cell{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  overflow:hidden!important;
  box-sizing:border-box!important;
  contain:none!important;
  isolation:isolate!important;
  backface-visibility:hidden!important;
  will-change:transform!important;
}
.shift-full-strip .shift-visual-cell > .tile-texture{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  z-index:1!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:cover!important;
}
.shift-full-strip .shift-visual-cell > .coord{z-index:12!important;visibility:visible!important;opacity:1!important}
.shift-full-strip .shift-visual-cell > .hub,
.shift-full-strip .shift-visual-cell > .corridor{z-index:2!important}
.shift-full-strip .shift-visual-cell > .board-object{z-index:20!important}
.shift-full-strip .shift-visual-cell > .token-shell{z-index:42!important}

/* BLACKSAW2081 LAB v2.3.6 — przycisk zakończenia obrotu niżej, nad HUD-em HP */
.tile-finish-rotation{
  bottom:-7px!important;
  z-index:120!important;
}
@media(max-width:720px){
  .tile-finish-rotation{bottom:-7px!important}
}


/* v2.3.7 — jedna mechanika walki: cele wyłącznie w prostej linii widzenia */
.cell.combat-target{
  cursor:crosshair;
  box-shadow:inset 0 0 0 2px rgba(255,35,78,.95),0 0 18px rgba(255,20,65,.72);
  animation:combatTargetPulse 1.05s ease-in-out infinite alternate;
}
.cell.combat-target .token{filter:drop-shadow(0 0 8px rgba(255,35,78,.95)) brightness(1.12)}
@keyframes combatTargetPulse{from{filter:brightness(1)}to{filter:brightness(1.16)}}
.combat-end-on-cell{
  position:absolute;left:50%;bottom:-7px;transform:translateX(-50%);z-index:30;
  width:auto;max-width:92%;min-height:21px;padding:3px 7px;border:1px solid #d8a94d;border-radius:7px;
  background:rgba(30,23,10,.96);color:#fff;font-size:clamp(.48rem,.62vw,.62rem);font-weight:800;line-height:1;white-space:nowrap;
  box-shadow:0 2px 8px rgba(0,0,0,.7),inset 0 0 8px rgba(255,178,35,.16);cursor:pointer;
}
.combat-end-on-cell:hover,.combat-end-on-cell:focus-visible{filter:brightness(1.2);outline:none}
#endTurn{display:none!important}


/* BLACKSAW2081 LAB v2.3.8 — czerwony klucz HUD i automatyczny koniec walki */
.token-bottom-hud .held-key-p1,
.token-bottom-hud .held-key.p1{
  display:inline-block!important;
  visibility:visible!important;
  opacity:1!important;
  width:clamp(14px,1.55vw,19px)!important;
  height:clamp(14px,1.55vw,19px)!important;
  min-width:14px!important;
  min-height:14px!important;
  flex:0 0 auto!important;
  z-index:110!important;
}
.token-bottom-hud .held-key-p1 img,
.token-bottom-hud .held-key.p1 img{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  filter:hue-rotate(325deg) saturate(1.75) brightness(1.08) drop-shadow(0 1px 1px rgba(0,0,0,.95))!important;
}
.combat-end-on-cell{display:none!important}


/* BLACKSAW2081 LAB v2.4.5 — napis ATAK wycentrowany w celowniku */
.cell.combat-target{cursor:pointer!important}
.combat-target-marker{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:115;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  width:100%;height:100%;pointer-events:none;
  filter:drop-shadow(0 2px 4px rgba(0,0,0,.92));
}
.combat-reticle{
  display:block;width:clamp(38px,4.2vw,54px);height:clamp(38px,4.2vw,54px);
  object-fit:contain;opacity:.9;transform-origin:50% 50%;
  filter:drop-shadow(0 0 7px rgba(255,20,50,.92)) brightness(1.06);
  animation:combatReticleAttention 1.15s cubic-bezier(.45,0,.2,1) infinite;
}
.combat-attack-label{
  position:absolute;left:50%;top:50%;z-index:2;
  display:block;padding:0;border:0;background:transparent;color:#fff;
  font-size:clamp(.32rem,.41vw,.44rem);font-weight:950;line-height:1;letter-spacing:.07em;
  opacity:0;transform:translate(-50%,-50%) scale(.86);
  transition:opacity .14s ease,transform .14s ease,text-shadow .14s ease;
  text-shadow:0 1px 2px rgba(0,0,0,1),0 0 4px rgba(0,0,0,.95),0 0 7px rgba(238,20,71,.9);
  white-space:nowrap;pointer-events:none;
}
.cell.combat-target:hover .combat-reticle,.cell.combat-target:focus-visible .combat-reticle{
  opacity:1;filter:drop-shadow(0 0 13px rgba(255,10,45,1)) brightness(1.24);
  animation:combatReticleHover .58s ease-in-out infinite alternate;
}
.cell.combat-target:hover .combat-attack-label,.cell.combat-target:focus-visible .combat-attack-label{
  opacity:1;transform:translate(-50%,-50%) scale(1);text-shadow:0 1px 2px rgba(0,0,0,1),0 0 5px rgba(0,0,0,1),0 0 10px rgba(255,20,55,1);
}
@keyframes combatReticleAttention{
  0%{transform:rotate(-4deg) scale(.88);opacity:.68;filter:drop-shadow(0 0 4px rgba(255,20,50,.62)) brightness(.96)}
  42%{transform:rotate(2deg) scale(1.08);opacity:1;filter:drop-shadow(0 0 15px rgba(255,10,45,1)) brightness(1.3)}
  70%{transform:rotate(-1deg) scale(.98);opacity:.9;filter:drop-shadow(0 0 9px rgba(255,20,50,.88)) brightness(1.1)}
  100%{transform:rotate(4deg) scale(1.03);opacity:1;filter:drop-shadow(0 0 12px rgba(255,10,45,.96)) brightness(1.2)}
}
@keyframes combatReticleHover{from{transform:rotate(-3deg) scale(1.02)}to{transform:rotate(3deg) scale(1.14)}}
@media(max-width:720px){.combat-reticle{width:40px;height:40px}.combat-attack-label{top:50%;padding:0;font-size:.34rem}}
@media(prefers-reduced-motion:reduce){.combat-reticle{animation:none!important;transform:scale(1)!important}}


/* BLACKSAW2081 LAB v2.5.1 — wolniejszy i mniejszy rzut kością */
.combat-roll-overlay{position:fixed;inset:0;z-index:240;display:grid;place-items:center;background:radial-gradient(circle at center,rgba(92,0,18,.24),rgba(2,3,5,.72) 54%,rgba(0,0,0,.9));backdrop-filter:blur(3px);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,visibility .18s ease}.combat-roll-overlay.visible{opacity:1;visibility:visible}.combat-roll-panel{position:relative;display:grid;justify-items:center;min-width:min(390px,88vw);padding:22px 34px 25px;border:1px solid rgba(255,71,94,.78);clip-path:polygon(18px 0,calc(100% - 18px) 0,100% 18px,100% calc(100% - 18px),calc(100% - 18px) 100%,18px 100%,0 calc(100% - 18px),0 18px);background:linear-gradient(145deg,rgba(42,27,25,.98),rgba(9,10,13,.98) 42%,rgba(29,9,13,.98));box-shadow:0 28px 90px rgba(0,0,0,.75),inset 0 0 0 2px rgba(91,39,32,.7),inset 0 0 35px rgba(238,20,71,.17),0 0 34px rgba(238,20,71,.28)}.combat-roll-panel:before,.combat-roll-panel:after{content:"";position:absolute;left:22px;right:22px;height:1px;background:linear-gradient(90deg,transparent,#ff274e,transparent);box-shadow:0 0 12px #ff173e}.combat-roll-panel:before{top:8px}.combat-roll-panel:after{bottom:8px}.combat-roll-kicker{font-size:.65rem;font-weight:900;letter-spacing:.22em;color:#b69487}.combat-roll-title{margin-top:4px;font-size:clamp(1rem,2.4vw,1.4rem);letter-spacing:.12em;color:#fff;text-shadow:0 0 14px rgba(255,43,76,.72)}.combat-die-stage{position:relative;display:grid;place-items:center;width:clamp(92px,11vw,124px);aspect-ratio:1;margin:12px 0 8px}.combat-die-stage:before{content:"";position:absolute;inset:16%;border-radius:50%;background:#ee1447;filter:blur(30px);opacity:.38;animation:combatAura .72s ease-in-out infinite alternate}.combat-die-stage img{position:relative;z-index:1;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 17px 17px rgba(0,0,0,.72)) drop-shadow(0 0 12px rgba(238,20,71,.45));transform:rotate(var(--die-spin,0deg)) scale(.94)}.combat-die-stage img.rolling-frame{animation:combatDieFrame .12s ease-out}.combat-die-stage img.final-result{animation:combatDieStop .58s cubic-bezier(.16,1.45,.32,1) both;filter:drop-shadow(0 18px 18px rgba(0,0,0,.76)) drop-shadow(0 0 22px rgba(255,30,66,.82))}.combat-roll-result{min-height:1.25em;font-weight:950;letter-spacing:.18em;color:#ff526d;text-shadow:0 0 13px rgba(255,29,68,.82)}
.combat-message-overlay{position:fixed;left:50%;top:48%;z-index:250;transform:translate(-50%,-50%) scale(.55) rotate(-3deg);opacity:0;visibility:hidden;pointer-events:none;font-size:clamp(3rem,9vw,7rem);font-weight:1000;line-height:.9;letter-spacing:.07em;color:#f3e8df;-webkit-text-stroke:2px #5c111c;text-shadow:0 4px 0 #28050a,0 9px 17px rgba(0,0,0,.9),0 0 28px #ed143c;transition:visibility .12s}.combat-message-overlay.visible{visibility:visible;animation:combatMessageIn .82s cubic-bezier(.15,.9,.2,1) both}.combat-message-overlay.miss{color:#d8d1c7;-webkit-text-stroke-color:#641b20;text-shadow:0 4px 0 #281010,0 10px 20px rgba(0,0,0,.9),0 0 24px rgba(255,35,62,.7)}.combat-message-overlay.elimination{color:#ffbd32;-webkit-text-stroke-color:#5b1009;text-shadow:0 4px 0 #351000,0 10px 22px rgba(0,0,0,.95),0 0 31px #ff3117}
.floating-damage{position:absolute;left:50%;top:45%;z-index:300;display:block;font-size:clamp(1.2rem,2.7vw,2.1rem);font-weight:1000;line-height:1;color:#ff284d;-webkit-text-stroke:1px #fff;text-shadow:0 3px 0 #52000e,0 0 15px #ff173f;pointer-events:none;animation:floatingDamage 1s cubic-bezier(.18,.72,.25,1) forwards}.combat-hit-flash .token,.combat-hit-flash.token-shell .token{animation:combatHitToken .48s ease-out!important}.combat-hit-flash.cell{animation:combatHitCell .48s ease-out!important}
@keyframes combatAura{to{transform:scale(1.15);opacity:.58}}@keyframes combatDieFrame{0%{transform:rotate(calc(var(--die-spin,0deg) - 16deg)) scale(.82);filter:blur(1px) drop-shadow(0 0 16px #ee1447)}100%{transform:rotate(var(--die-spin,0deg)) scale(.97)}}@keyframes combatDieStop{0%{transform:rotate(-18deg) scale(.72)}45%{transform:rotate(5deg) scale(1.15)}70%{transform:rotate(-2deg) scale(.98)}100%{transform:rotate(0) scale(1.04)}}@keyframes floatingDamage{0%{opacity:0;transform:translate(-50%,5px) scale(.55)}18%{opacity:1;transform:translate(-50%,-7px) scale(1.28)}100%{opacity:0;transform:translate(-50%,-62px) scale(1.75)}}@keyframes combatHitToken{0%{transform:translate(0) scale(1);filter:brightness(1)}18%{transform:translate(-4px,1px) scale(1.1);filter:brightness(3) saturate(1.8) drop-shadow(0 0 15px #ff173f)}35%{transform:translate(4px,-1px) scale(.96)}55%{transform:translate(-2px,0) scale(1.03)}100%{transform:translate(0) scale(1);filter:brightness(1)}}@keyframes combatHitCell{0%,100%{filter:none}30%{filter:brightness(1.7) saturate(1.45)}}@keyframes combatMessageIn{0%{opacity:0;transform:translate(-50%,-50%) scale(.35) rotate(-7deg)}24%{opacity:1;transform:translate(-50%,-50%) scale(1.14) rotate(2deg)}38%{transform:translate(calc(-50% - 7px),calc(-50% + 2px)) scale(.98) rotate(-1deg)}48%{transform:translate(calc(-50% + 7px),calc(-50% - 1px)) scale(1.02) rotate(1deg)}70%{opacity:1;transform:translate(-50%,-53%) scale(1)}100%{opacity:0;transform:translate(-50%,-64%) scale(1.13)}}
@media(max-width:720px){.combat-roll-panel{min-width:min(330px,90vw);padding:18px 22px 21px}.combat-die-stage{width:96px}.combat-message-overlay{-webkit-text-stroke-width:1px}.floating-damage{-webkit-text-stroke-width:.5px}}
@media(prefers-reduced-motion:reduce){.combat-die-stage:before,.combat-die-stage img,.combat-message-overlay.visible,.floating-damage,.combat-hit-flash .token{animation-duration:.2s!important;animation-iteration-count:1!important}}

/* BLACKSAW2081 LAB v2.5.2 — czytelniejsza sekwencja trafienia i obrażeń */
.combat-die-stage{width:clamp(68px,8vw,88px);margin:10px 0 7px}
.combat-roll-outcome{font-size:clamp(1.05rem,2.8vw,1.55rem);letter-spacing:.16em;animation:combatOutcomeRead .42s cubic-bezier(.18,.88,.24,1) both}
.combat-roll-outcome.hit{color:#ff536d;text-shadow:0 0 16px rgba(255,29,68,.95),0 2px 0 #4b0712}
.combat-roll-outcome.miss{color:#ddd6ca;text-shadow:0 0 15px rgba(255,45,70,.72),0 2px 0 #381014}
.token-hp-value.hp-changing{display:inline-block;min-width:1.1em;transform-origin:center;filter:drop-shadow(0 0 7px rgba(255,37,72,.72))}
.token-hp-value.hp-step{animation:hpNumberStep .34s cubic-bezier(.18,.8,.24,1)}
.floating-damage{top:38%;animation:floatingDamageSlow 1.5s cubic-bezier(.16,.68,.22,1) forwards}
@keyframes combatOutcomeRead{0%{opacity:0;transform:scale(.68)}70%{opacity:1;transform:scale(1.08)}100%{opacity:1;transform:scale(1)}}
@keyframes hpNumberStep{0%{transform:scale(1);color:inherit}45%{transform:scale(1.45);color:#ff3153;text-shadow:0 0 12px #ff173f}100%{transform:scale(1);color:inherit}}
@keyframes floatingDamageSlow{0%{opacity:0;transform:translate(-50%,4px) scale(.58)}15%{opacity:1;transform:translate(-50%,-5px) scale(1.18)}72%{opacity:1;transform:translate(-50%,-48px) scale(1.55)}100%{opacity:0;transform:translate(-50%,-76px) scale(1.82)}}
@media(max-width:720px){.combat-die-stage{width:70px}.combat-roll-outcome{font-size:1rem}}


/* BLACKSAW2081 LAB v2.5.3 — wolne obrażenia, wypalenie śmierci i odrodzenia */
.floating-damage{
  top:38%;
  font-size:inherit;
  animation:floatingDamageV253 2.8s cubic-bezier(.12,.55,.2,1) forwards!important;
  transform-origin:50% 50%;
}
@keyframes floatingDamageV253{
  0%{opacity:0;transform:translate(-50%,0) scale(1)}
  10%{opacity:1;transform:translate(-50%,-5px) scale(1.18)}
  55%{opacity:1;transform:translate(-50%,-46px) scale(1.72)}
  82%{opacity:.9;transform:translate(-50%,-78px) scale(2)}
  100%{opacity:0;transform:translate(-50%,-108px) scale(2)}
}
.token-shell.token-death-burn,
.token-shell.token-respawn-burn{z-index:160!important;isolation:isolate;pointer-events:none!important}
.token-shell.token-death-burn>.token,
.token-shell.token-death-burn>.token-movement-hud,
.token-shell.token-death-burn>.combat-target-marker,
.token-shell.token-respawn-burn>.token,
.token-shell.token-respawn-burn>.token-movement-hud,
.token-shell.token-respawn-burn>.combat-target-marker{
  will-change:mask-position,-webkit-mask-position,filter,opacity,transform;
  -webkit-mask-image:linear-gradient(to bottom,#000 0 43%,transparent 57% 100%);
  mask-image:linear-gradient(to bottom,#000 0 43%,transparent 57% 100%);
  -webkit-mask-size:100% 240%;mask-size:100% 240%;
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
}
.token-shell.token-death-burn>.token,
.token-shell.token-death-burn>.token-movement-hud,
.token-shell.token-death-burn>.combat-target-marker{
  animation:tokenBurnDeath 2.8s cubic-bezier(.18,.54,.2,1) forwards!important;
}
.token-shell.token-respawn-burn>.token,
.token-shell.token-respawn-burn>.token-movement-hud,
.token-shell.token-respawn-burn>.combat-target-marker{
  animation:tokenBurnRespawn 2.8s cubic-bezier(.18,.54,.2,1) forwards!important;
}
.token-shell.token-death-burn:before,
.token-shell.token-respawn-burn:before{
  content:"";position:absolute;left:20%;right:20%;height:24%;z-index:170;pointer-events:none;
  background:
    radial-gradient(circle at 15% 55%,#fff6bc 0 2%,#ff8a20 3% 7%,transparent 9%),
    radial-gradient(circle at 38% 35%,#fff1a6 0 2%,#ff4d13 3% 7%,transparent 10%),
    radial-gradient(circle at 63% 62%,#fff8c2 0 2%,#ff7017 3% 8%,transparent 10%),
    radial-gradient(circle at 85% 40%,#fff1a6 0 2%,#ff2c16 3% 7%,transparent 9%),
    linear-gradient(90deg,transparent,#ffca62 14%,#ff2b16 37%,#260306 53%,#ff4817 72%,#ffd47c 88%,transparent);
  filter:blur(.5px) drop-shadow(0 0 5px #ff3018) drop-shadow(0 0 12px rgba(255,43,16,.9));
  mix-blend-mode:screen;opacity:0;
}
.token-shell.token-death-burn:after,
.token-shell.token-respawn-burn:after{
  content:"";position:absolute;inset:14%;z-index:169;pointer-events:none;
  background-image:
    radial-gradient(circle,#ffdf8a 0 1px,transparent 1.7px),
    radial-gradient(circle,#ff4b20 0 1px,transparent 2px),
    radial-gradient(circle,#6b1710 0 1px,transparent 2px);
  background-size:13px 17px,19px 23px,11px 29px;
  filter:drop-shadow(0 0 4px #ff3a16);opacity:0;
}
.token-shell.token-death-burn:before{top:-3%;animation:burnEdgeDown 2.8s linear forwards}
.token-shell.token-death-burn:after{animation:burnAshDown 2.8s ease-out forwards}
.token-shell.token-respawn-burn:before{bottom:-3%;animation:burnEdgeUp 2.8s linear forwards}
.token-shell.token-respawn-burn:after{animation:burnAshUp 2.8s ease-out forwards}
@keyframes tokenBurnDeath{
  0%{-webkit-mask-position:0 100%;mask-position:0 100%;filter:brightness(1);opacity:1;transform:scale(1)}
  12%{filter:brightness(1.8) saturate(1.7) drop-shadow(0 0 9px #ff2916)}
  78%{opacity:1;filter:sepia(.7) saturate(2.2) brightness(.72) drop-shadow(0 0 12px #ff3217)}
  100%{-webkit-mask-position:0 0;mask-position:0 0;filter:brightness(.25) sepia(1);opacity:0;transform:scale(.97)}
}
@keyframes tokenBurnRespawn{
  0%{-webkit-mask-position:0 0;mask-position:0 0;filter:brightness(.25) sepia(1);opacity:0;transform:scale(.97)}
  12%{opacity:.35}
  76%{filter:sepia(.45) saturate(2) brightness(1.25) drop-shadow(0 0 13px #ff3217);opacity:1}
  100%{-webkit-mask-position:0 100%;mask-position:0 100%;filter:brightness(1) drop-shadow(0 0 9px rgba(255,63,31,.8));opacity:1;transform:scale(1)}
}
@keyframes burnEdgeDown{0%{top:-8%;opacity:0}8%{opacity:1}82%{opacity:1}100%{top:88%;opacity:0}}
@keyframes burnEdgeUp{0%{bottom:-8%;opacity:0}8%{opacity:1}82%{opacity:1}100%{bottom:88%;opacity:0}}
@keyframes burnAshDown{0%{opacity:0;transform:translateY(-8px)}16%{opacity:.9}100%{opacity:0;transform:translateY(70px) rotate(7deg)}}
@keyframes burnAshUp{0%{opacity:0;transform:translateY(45px)}16%{opacity:.85}100%{opacity:0;transform:translateY(-45px) rotate(-7deg)}}
.combat-message-overlay.elimination{color:#ffb02e;-webkit-text-stroke-color:#5b0904;text-shadow:0 4px 0 #351000,0 10px 22px rgba(0,0,0,.95),0 0 22px #ff2915,0 0 44px rgba(255,96,20,.78)}
@media(prefers-reduced-motion:reduce){
  .token-shell.token-death-burn>.token,.token-shell.token-respawn-burn>.token{animation-duration:.8s!important}
  .token-shell.token-death-burn:before,.token-shell.token-respawn-burn:before,.token-shell.token-death-burn:after,.token-shell.token-respawn-burn:after{animation-duration:.8s!important}
}


/* BLACKSAW2081 LAB v2.5.5 — poprawiona eliminacja i odrodzenie */
.combat-message-overlay.visible.elimination{
  animation:combatEliminationHold 2.75s cubic-bezier(.16,.84,.22,1) both!important;
}
@keyframes combatEliminationHold{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.42) rotate(-5deg)}
  12%{opacity:1;transform:translate(-50%,-50%) scale(1.12) rotate(1deg)}
  20%{transform:translate(-50%,-50%) scale(1)}
  76%{opacity:1;transform:translate(-50%,-50%) scale(1)}
  100%{opacity:0;transform:translate(-50%,-60%) scale(1.08)}
}

.token-shell.token-death-burn>.combat-target-marker,
.token-shell.token-respawn-burn>.combat-target-marker{display:none!important;animation:none!important;transform:none!important}

.token-shell.token-death-burn,
.token-shell.token-respawn-burn{
  overflow:visible!important;
  contain:none!important;
}

/* Prawdziwe odsłanianie pionka — bez przesuwania całej grafiki. */
.token-shell.token-death-burn>.token,
.token-shell.token-death-burn>.token-movement-hud{
  -webkit-mask-image:none!important;mask-image:none!important;
  transform-origin:50% 100%;
  animation:tokenPaperBurnOut 3.35s linear forwards!important;
}
.token-shell.token-respawn-burn>.token,
.token-shell.token-respawn-burn>.token-movement-hud{
  -webkit-mask-image:none!important;mask-image:none!important;
  transform-origin:50% 100%;
  animation:tokenPaperBurnIn 3.35s linear forwards!important;
}
@keyframes tokenPaperBurnOut{
  0%{clip-path:inset(0 0 0 0);opacity:1;filter:brightness(1);transform:scale(1)}
  9%{clip-path:inset(0 0 0 0);filter:brightness(1.8) saturate(1.9) drop-shadow(0 0 8px #ff3518)}
  20%{clip-path:inset(7% 0 0 0);filter:brightness(1.25) saturate(2.1) drop-shadow(0 0 11px #ff3518)}
  38%{clip-path:inset(28% 0 0 0)}
  58%{clip-path:inset(53% 0 0 0);opacity:1}
  78%{clip-path:inset(76% 0 0 0);filter:sepia(.8) saturate(2.4) brightness(.7) drop-shadow(0 0 12px #ff2c13)}
  96%{clip-path:inset(97% 0 0 0);opacity:.8;transform:scale(.985)}
  100%{clip-path:inset(100% 0 0 0);opacity:0;transform:scale(.98)}
}
@keyframes tokenPaperBurnIn{
  0%{clip-path:inset(100% 0 0 0);opacity:0;filter:sepia(1) brightness(.35);transform:scale(.98)}
  8%{clip-path:inset(94% 0 0 0);opacity:.65}
  28%{clip-path:inset(73% 0 0 0);opacity:1;filter:sepia(.75) saturate(2.2) brightness(.75) drop-shadow(0 0 11px #ff3217)}
  50%{clip-path:inset(49% 0 0 0)}
  72%{clip-path:inset(25% 0 0 0);filter:brightness(1.35) saturate(1.7) drop-shadow(0 0 13px #ff4420)}
  92%{clip-path:inset(3% 0 0 0);opacity:1}
  100%{clip-path:inset(0 0 0 0);opacity:1;filter:brightness(1);transform:scale(1)}
}

.burn-fx-layer{position:absolute;inset:5%;z-index:175;pointer-events:none;border-radius:10%;display:block}
.burn-cracks{
  opacity:0;
  background:
    linear-gradient(117deg,transparent 0 42%,#ff4b21 43% 44%,transparent 45% 100%),
    linear-gradient(64deg,transparent 0 53%,#ff9a32 54% 55%,transparent 56% 100%),
    linear-gradient(145deg,transparent 0 60%,#ff341d 61% 62%,transparent 63% 100%),
    linear-gradient(25deg,transparent 0 69%,#ffd36a 70% 71%,transparent 72% 100%);
  mix-blend-mode:screen;
  filter:drop-shadow(0 0 3px #ff3218) drop-shadow(0 0 8px #ff1c0c);
}
.token-death-burn>.burn-cracks{animation:burnCracksOut 1.05s ease-out both}
.token-respawn-burn>.burn-cracks{animation:burnCracksIn 3.35s ease-in-out both}
@keyframes burnCracksOut{0%{opacity:0;transform:scale(.96)}28%{opacity:1}76%{opacity:.95;transform:scale(1.02)}100%{opacity:.15}}
@keyframes burnCracksIn{0%,62%{opacity:0}72%{opacity:.95}88%{opacity:.65}100%{opacity:0}}

.burn-edge{
  left:8%;right:8%;height:22%;inset-block:auto;
  background:
    radial-gradient(ellipse at 8% 55%,#fff4b0 0 2%,#ff731f 3% 8%,transparent 11%),
    radial-gradient(ellipse at 25% 35%,#ffe690 0 2%,#ff3418 3% 9%,transparent 12%),
    radial-gradient(ellipse at 48% 65%,#fff2a8 0 2%,#ff8b22 3% 8%,transparent 11%),
    radial-gradient(ellipse at 72% 38%,#fff0a2 0 2%,#ff2d16 3% 9%,transparent 12%),
    radial-gradient(ellipse at 92% 58%,#fff1a8 0 2%,#ff6d1d 3% 8%,transparent 11%),
    linear-gradient(90deg,transparent,#ffb443 10%,#ff2b15 30%,#240204 52%,#ff4017 74%,#ffd66e 91%,transparent);
  filter:blur(.35px) drop-shadow(0 0 5px #ff3518) drop-shadow(0 0 13px rgba(255,48,19,.95));
  mix-blend-mode:screen;opacity:0;
}
.token-death-burn>.burn-edge{top:-10%;animation:burnEdgeTravelDown 3.35s linear forwards}
.token-respawn-burn>.burn-edge{bottom:-10%;animation:burnEdgeTravelUp 3.35s linear forwards}
@keyframes burnEdgeTravelDown{0%{top:-10%;opacity:0}8%{opacity:1}88%{opacity:1}100%{top:91%;opacity:0}}
@keyframes burnEdgeTravelUp{0%{bottom:-10%;opacity:0}8%{opacity:1}88%{opacity:1}100%{bottom:91%;opacity:0}}

.burn-ash{
  opacity:0;
  background-image:
    radial-gradient(circle,#ffd978 0 1px,transparent 1.8px),
    radial-gradient(circle,#ff4d20 0 1.1px,transparent 2px),
    radial-gradient(circle,#3e100c 0 1.2px,transparent 2.3px);
  background-size:11px 16px,17px 23px,13px 29px;
  filter:drop-shadow(0 0 4px #ff3816);
}
.token-death-burn>.burn-ash{animation:ashFallV255 3.35s ease-out forwards}
.token-respawn-burn>.burn-ash{animation:ashRiseV255 3.35s ease-out forwards}
@keyframes ashFallV255{0%{opacity:0;transform:translateY(-8px)}14%{opacity:.9}78%{opacity:.7}100%{opacity:0;transform:translateY(82px) rotate(8deg)}}
@keyframes ashRiseV255{0%{opacity:0;transform:translateY(72px)}14%{opacity:.82}78%{opacity:.62}100%{opacity:0;transform:translateY(-62px) rotate(-8deg)}}

@media(prefers-reduced-motion:reduce){
  .combat-message-overlay.visible.elimination{animation-duration:1.2s!important}
  .token-shell.token-death-burn>.token,.token-shell.token-respawn-burn>.token,
  .token-shell.token-death-burn>.token-movement-hud,.token-shell.token-respawn-burn>.token-movement-hud,
  .token-death-burn>.burn-edge,.token-respawn-burn>.burn-edge,
  .token-death-burn>.burn-ash,.token-respawn-burn>.burn-ash{animation-duration:1.2s!important}
}
\n\n/* BLACKSAW2081 LAB v2.5.7 — obrażenia przy kostce i licznik pozostałych rzutów */\n.combat-dice-pips{display:flex;align-items:center;justify-content:center;gap:9px;min-height:16px;margin:6px 0 2px}\n.combat-dice-pip{position:relative;width:10px;height:10px;border-radius:50%;background:#26141a;border:1px solid rgba(145,61,72,.62);box-shadow:inset 0 0 4px rgba(0,0,0,.9);transition:transform .28s ease,opacity .28s ease,background .28s ease,box-shadow .28s ease}\n.combat-dice-pip.active{background:radial-gradient(circle at 36% 30%,#fff0d9 0 8%,#ff405f 18%,#d50832 48%,#5d0718 100%);border-color:#ff526a;box-shadow:0 0 7px #ff173f,0 0 16px rgba(238,20,71,.65),inset 0 0 4px rgba(255,255,255,.45)}\n.combat-dice-pip.spent{opacity:.34;transform:scale(.78)}\n.combat-dice-pip.just-spent{animation:combatPipSpent .58s ease-out both}\n.combat-die-stage{overflow:visible}\n.combat-projected-damage{position:absolute;z-index:8;left:50%;top:50%;min-width:2.2em;text-align:center;opacity:0;pointer-events:none;font-size:clamp(1.1rem,2.7vw,1.65rem);font-weight:1000;line-height:1;color:#ff3455;-webkit-text-stroke:1px rgba(255,239,226,.92);text-shadow:0 3px 0 #53000f,0 0 15px #ff173f}\n.combat-projected-damage.visible{animation:combatProjectedDamage 1.8s cubic-bezier(.12,.58,.18,1) both}\n.combat-projected-damage.miss{color:#d9d3ca;-webkit-text-stroke-color:#561319;text-shadow:0 2px 0 #1d090c,0 0 14px rgba(255,48,72,.7)}\n.combat-projected-damage.elimination{font-size:clamp(.92rem,2.2vw,1.3rem);color:#ffbd32;-webkit-text-stroke-color:#5b1009;text-shadow:0 2px 0 #351000,0 0 18px #ff3117}\n.combat-damage-summary{min-height:1.1em;margin-top:3px;font-size:.7rem;font-weight:950;letter-spacing:.14em;color:#ff4865;opacity:0;text-shadow:0 0 10px rgba(255,29,68,.72)}\n.combat-damage-summary.visible{animation:combatDamageSummary 1.8s ease both}\n.combat-damage-summary.miss{color:#cfc8bf}.combat-damage-summary.elimination{color:#ffbd32}\n.combat-die-stage img.damage-flash{animation:combatDamageDieFlash .52s ease-out both!important}\n@keyframes combatProjectedDamage{0%{opacity:0;transform:translate(-50%,-10%) scale(.7)}14%{opacity:1;transform:translate(-50%,-44%) scale(1.08)}68%{opacity:1;transform:translate(-50%,-108%) scale(1.58)}100%{opacity:0;transform:translate(-50%,-152%) scale(1.85)}}\n@keyframes combatDamageSummary{0%{opacity:0;transform:translateY(5px)}18%,78%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-3px)}}\n@keyframes combatDamageDieFlash{0%{filter:drop-shadow(0 18px 18px rgba(0,0,0,.76)) drop-shadow(0 0 18px rgba(255,30,66,.7));transform:scale(1.04)}32%{filter:brightness(1.9) saturate(1.5) drop-shadow(0 0 32px #ff173f);transform:scale(1.12)}100%{filter:drop-shadow(0 18px 18px rgba(0,0,0,.76)) drop-shadow(0 0 22px rgba(255,30,66,.82));transform:scale(1.04)}}\n@keyframes combatPipSpent{0%{opacity:1;transform:scale(1.25);box-shadow:0 0 16px #ff173f}45%{opacity:.85;transform:scale(.92)}100%{opacity:.34;transform:scale(.78);box-shadow:inset 0 0 4px rgba(0,0,0,.9)}}\n@media(max-width:720px){.combat-dice-pips{gap:7px}.combat-dice-pip{width:8px;height:8px}.combat-projected-damage{font-size:1.1rem}.combat-damage-summary{font-size:.58rem;letter-spacing:.1em}}\n@media(prefers-reduced-motion:reduce){.combat-projected-damage.visible,.combat-damage-summary.visible,.combat-dice-pip.just-spent,.combat-die-stage img.damage-flash{animation-duration:.35s!important}}\n

/* BLACKSAW2081 LAB v2.5.8 — licznik pozostałych ataków bezpośrednio nad celem */
.combat-board-dice-pips{
  position:absolute;
  left:50%;
  top:-8px;
  z-index:6;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:5px;
  min-width:44px;
  padding:4px 7px;
  border:1px solid rgba(255,52,82,.72);
  border-radius:999px;
  background:linear-gradient(180deg,rgba(33,10,14,.96),rgba(7,7,9,.94));
  box-shadow:0 3px 10px rgba(0,0,0,.88),inset 0 0 9px rgba(238,20,71,.18),0 0 10px rgba(238,20,71,.34);
  transform:translate(-50%,-50%);
  pointer-events:none;
}
.combat-board-die-pip{
  display:block;
  width:8px;
  height:8px;
  flex:0 0 8px;
  border-radius:50%;
  border:1px solid rgba(138,55,67,.82);
  background:#201014;
  box-shadow:inset 0 0 4px rgba(0,0,0,.95);
}
.combat-board-die-pip.available{
  border-color:#ff526a;
  background:radial-gradient(circle at 35% 28%,#fff5de 0 9%,#ff4c66 20%,#d50832 52%,#5b0717 100%);
  box-shadow:0 0 6px #ff173f,0 0 12px rgba(238,20,71,.86),inset 0 0 3px rgba(255,255,255,.55);
  animation:combatBoardPipPulse 1.1s ease-in-out infinite alternate;
}
.combat-board-die-pip.spent{opacity:.26;transform:scale(.72)}
@keyframes combatBoardPipPulse{from{filter:brightness(.92);transform:scale(.94)}to{filter:brightness(1.25);transform:scale(1.08)}}
@media(max-width:720px){
  .combat-board-dice-pips{top:-5px;gap:4px;min-width:36px;padding:3px 6px}
  .combat-board-die-pip{width:7px;height:7px;flex-basis:7px}
}
@media(prefers-reduced-motion:reduce){.combat-board-die-pip.available{animation:none}}

/* BLACKSAW2081 LAB v2.5.9 — wycentrowany animowany celownik + poziomy licznik ataków */
.combat-target-marker{
  display:block!important;
}
.combat-target-marker .combat-reticle{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  margin:0!important;
  transform-origin:50% 50%!important;
  translate:-50% -50%;
  animation:combatReticleAttentionCentered 1.15s cubic-bezier(.45,0,.2,1) infinite!important;
}
.combat-target-marker .combat-attack-label{
  left:50%!important;
  top:50%!important;
}
.combat-target-marker .combat-board-dice-pips{
  left:50%!important;
  top:4px!important;
  display:flex!important;
  flex-direction:row!important;
  flex-wrap:nowrap!important;
  align-items:center!important;
  justify-content:center!important;
  width:auto!important;
  height:auto!important;
  transform:translateX(-50%)!important;
  white-space:nowrap!important;
}
.combat-target-marker .combat-board-die-pip{
  display:block!important;
  position:relative!important;
  float:none!important;
  margin:0!important;
}
.cell.combat-target:hover .combat-target-marker .combat-reticle,
.cell.combat-target:focus-visible .combat-target-marker .combat-reticle{
  animation:combatReticleHoverCentered .58s ease-in-out infinite alternate!important;
}
@keyframes combatReticleAttentionCentered{
  0%{transform:rotate(-4deg) scale(.88);opacity:.68;filter:drop-shadow(0 0 4px rgba(255,20,50,.62)) brightness(.96)}
  42%{transform:rotate(2deg) scale(1.08);opacity:1;filter:drop-shadow(0 0 15px rgba(255,10,45,1)) brightness(1.3)}
  70%{transform:rotate(-1deg) scale(.98);opacity:.9;filter:drop-shadow(0 0 9px rgba(255,20,50,.88)) brightness(1.1)}
  100%{transform:rotate(4deg) scale(1.03);opacity:1;filter:drop-shadow(0 0 12px rgba(255,10,45,.96)) brightness(1.2)}
}
@keyframes combatReticleHoverCentered{
  from{transform:rotate(-3deg) scale(1.02)}
  to{transform:rotate(3deg) scale(1.14)}
}
@media(max-width:720px){
  .combat-target-marker .combat-board-dice-pips{top:3px!important}
}
@media(prefers-reduced-motion:reduce){
  .combat-target-marker .combat-reticle{animation:none!important;transform:scale(1)!important}
}


/* BLACKSAW2081 LAB v2.5.10 — precyzyjne centrowanie poziomych diod nad polem */
.combat-target-marker .combat-board-dice-pips{
  left:0!important;
  right:0!important;
  top:4px!important;
  margin-left:auto!important;
  margin-right:auto!important;
  transform:none!important;
  width:max-content!important;
  max-width:calc(100% - 8px)!important;
  box-sizing:border-box!important;
}
@media(max-width:720px){
  .combat-target-marker .combat-board-dice-pips{top:3px!important}
}


/* BLACKSAW2081 LAB v2.5.11 — animowane obrażenia wylatujące z rdzenia kostki */
.combat-die-stage{
  position:relative;
  overflow:visible!important;
}
.combat-projected-damage{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  z-index:20!important;
  margin:0!important;
  min-width:2.2em;
  opacity:0;
  transform:translate(-50%,-50%) scale(1);
  transform-origin:50% 50%;
  text-align:center;
  pointer-events:none;
  font-size:clamp(1.05rem,2.45vw,1.5rem);
  font-weight:1000;
  line-height:1;
  will-change:transform,opacity,filter;
}
.combat-projected-damage.visible.flying{
  opacity:0;
  animation:none!important;
}
.combat-projected-damage.damage-light{
  color:#ff6b7e;
  -webkit-text-stroke:1px rgba(255,240,230,.9);
  text-shadow:0 3px 0 #4d0712,0 0 13px rgba(255,44,78,.82);
}
.combat-projected-damage.damage-medium{
  color:#ff234c;
  -webkit-text-stroke:1px rgba(255,244,230,.96);
  text-shadow:0 3px 0 #59000f,0 0 18px #ff173f,0 0 30px rgba(238,20,71,.58);
}
.combat-projected-damage.damage-heavy{
  color:#ff642d;
  -webkit-text-stroke:1px rgba(255,239,205,.98);
  text-shadow:0 3px 0 #5c1400,0 0 18px #ff3517,0 0 34px rgba(255,105,25,.72);
}
.combat-damage-summary.damage-light{color:#ff6b7e}
.combat-damage-summary.damage-medium{color:#ff3558;text-shadow:0 0 12px rgba(255,29,68,.86)}
.combat-damage-summary.damage-heavy{color:#ff7a35;text-shadow:0 0 13px rgba(255,74,20,.92)}
@media(max-width:720px){
  .combat-projected-damage{font-size:1rem}
}
@media(prefers-reduced-motion:reduce){
  .combat-projected-damage.visible.flying{opacity:1!important;transform:translate(-50%,-95%) scale(1.25)!important}
}


/* BLACKSAW2081 LAB v2.5.12 — czytelny lot obrażeń z kostki + respawn po odblokowaniu pola */
.combat-roll-panel,
.combat-die-stage{overflow:visible!important}
.combat-projected-damage{
  left:50%!important;
  top:48%!important;
  width:max-content!important;
  min-width:0!important;
  padding:.08em .18em!important;
  white-space:nowrap!important;
  overflow:visible!important;
  isolation:isolate;
  z-index:60!important;
  font-variant-numeric:tabular-nums;
  -webkit-text-stroke:.45px rgba(255,244,232,.92)!important;
  paint-order:stroke fill;
  transform:translate(-50%,-50%) scale(1);
  opacity:0;
}
.combat-projected-damage.visible.flying{
  opacity:0;
  animation:combatProjectedDamageV2512 2.65s cubic-bezier(.16,.62,.18,1) both!important;
}
@keyframes combatProjectedDamageV2512{
  0%{opacity:0;transform:translate(-50%,-38%) scale(1);filter:brightness(1)}
  10%{opacity:1;transform:translate(-50%,-52%) scale(1.08);filter:brightness(1.55)}
  42%{opacity:1;transform:translate(-50%,-125%) scale(1.42);filter:brightness(1.22)}
  76%{opacity:.95;transform:translate(-50%,-220%) scale(1.78);filter:brightness(1.05)}
  100%{opacity:0;transform:translate(-50%,-305%) scale(2);filter:brightness(.9)}
}
@media(max-width:720px){
  .combat-projected-damage{font-size:1rem!important}
  @keyframes combatProjectedDamageV2512{
    0%{opacity:0;transform:translate(-50%,-38%) scale(1)}
    10%{opacity:1;transform:translate(-50%,-52%) scale(1.06)}
    72%{opacity:.95;transform:translate(-50%,-190%) scale(1.7)}
    100%{opacity:0;transform:translate(-50%,-255%) scale(2)}
  }
}
@media(prefers-reduced-motion:reduce){
  .combat-projected-damage.visible.flying{animation-duration:1.15s!important}
}

/* BLACKSAW2081 LAB v2.6.0 — modułowe ramy komunikatów i rzutu kością */
:root{
  --bs-frame-bg:url('../images/ui/frame_background.png');
  --bs-frame-tl:url('../images/ui/frame_top_left.png');
  --bs-frame-tr:url('../images/ui/frame_top_right.png');
  --bs-frame-bl:url('../images/ui/frame_bottom_left.png');
  --bs-frame-br:url('../images/ui/frame_bottom_right.png');
}
.phase-toast,
.combat-roll-panel{
  border:0!important;
  border-radius:0!important;
  clip-path:none!important;
  background-image:linear-gradient(rgba(2,2,3,.20),rgba(2,2,3,.32)),var(--bs-frame-bg)!important;
  background-size:cover!important;
  background-position:center!important;
  box-shadow:0 30px 95px rgba(0,0,0,.86),inset 0 0 55px rgba(238,20,71,.12),0 0 34px rgba(238,20,71,.24)!important;
  isolation:isolate;
  overflow:visible!important;
}
.phase-toast{
  min-width:min(480px,88vw)!important;
  max-width:min(680px,92vw)!important;
  padding:48px 74px!important;
}
.combat-roll-panel{
  min-width:min(500px,90vw)!important;
  min-height:330px;
  padding:54px 82px 58px!important;
}
.phase-toast:before,.phase-toast:after,
.combat-roll-panel:before,.combat-roll-panel:after{display:none!important}
.blacksaw-frame-content{position:relative;z-index:6;display:grid;justify-items:center;width:100%}
.phase-toast .blacksaw-frame-content{display:block;text-align:center}
.blacksaw-frame-corner{
  position:absolute;
  z-index:7;
  width:46%;
  aspect-ratio:591/506;
  background-repeat:no-repeat;
  background-size:contain;
  pointer-events:none;
  filter:drop-shadow(0 10px 16px rgba(0,0,0,.86));
}
.frame-top-left{left:-4%;top:-9%;background-image:var(--bs-frame-tl);background-position:left top}
.frame-top-right{right:-4%;top:-9%;background-image:var(--bs-frame-tr);background-position:right top}
.frame-bottom-left{left:-4%;bottom:-9%;background-image:var(--bs-frame-bl);background-position:left bottom}
.frame-bottom-right{right:-4%;bottom:-9%;background-image:var(--bs-frame-br);background-position:right bottom}
.blacksaw-frame-glow{
  position:absolute;inset:5%;z-index:2;pointer-events:none;
  background:radial-gradient(circle at 10% 12%,rgba(255,34,18,.23),transparent 18%),radial-gradient(circle at 90% 12%,rgba(255,34,18,.23),transparent 18%),radial-gradient(circle at 10% 88%,rgba(255,34,18,.18),transparent 18%),radial-gradient(circle at 90% 88%,rgba(255,34,18,.18),transparent 18%);
  animation:blacksawFrameGlow 2.4s ease-in-out infinite alternate;
}
.phase-toast.show .blacksaw-frame-corner,
.combat-roll-overlay.visible .blacksaw-frame-corner{animation:blacksawCornerIgnite .75s cubic-bezier(.18,.9,.25,1) both}
.phase-toast.show .frame-top-right,.combat-roll-overlay.visible .frame-top-right{animation-delay:.06s}
.phase-toast.show .frame-bottom-left,.combat-roll-overlay.visible .frame-bottom-left{animation-delay:.11s}
.phase-toast.show .frame-bottom-right,.combat-roll-overlay.visible .frame-bottom-right{animation-delay:.16s}
.phase-toast strong{color:#c7b0a5!important;text-shadow:0 0 10px rgba(255,45,28,.46)}
.phase-toast span:not(.blacksaw-frame-corner):not(.blacksaw-frame-glow){color:#fff!important;text-shadow:0 2px 0 #2d0608,0 0 20px rgba(255,38,54,.82)}
.phase-toast small{color:#d8cbc3!important;text-shadow:0 1px 4px #000}
.combat-roll-kicker{color:#c9a99a!important;text-shadow:0 0 10px rgba(255,41,30,.45)}
.combat-roll-title{font-size:clamp(1.15rem,3vw,1.75rem)!important;text-shadow:0 2px 0 #2e0808,0 0 20px rgba(255,43,44,.92)!important}
.combat-roll-result,.combat-damage-summary{position:relative;z-index:8}
@keyframes blacksawCornerIgnite{
  0%{opacity:0;transform:scale(.93);filter:brightness(.55) saturate(.65) drop-shadow(0 10px 16px rgba(0,0,0,.86))}
  55%{opacity:1;transform:scale(1.025);filter:brightness(1.42) saturate(1.3) drop-shadow(0 0 22px rgba(255,43,18,.58))}
  100%{opacity:1;transform:scale(1);filter:brightness(1) saturate(1) drop-shadow(0 10px 16px rgba(0,0,0,.86))}
}
@keyframes blacksawFrameGlow{from{opacity:.52;filter:brightness(.8)}to{opacity:1;filter:brightness(1.35)}}
@media(max-width:720px){
  .phase-toast{width:92vw!important;min-width:0!important;padding:36px 48px!important}
  .combat-roll-panel{min-width:min(360px,94vw)!important;min-height:270px;padding:42px 52px 45px!important}
  .blacksaw-frame-corner{width:51%}
  .frame-top-left,.frame-bottom-left{left:-6%}.frame-top-right,.frame-bottom-right{right:-6%}
  .frame-top-left,.frame-top-right{top:-8%}.frame-bottom-left,.frame-bottom-right{bottom:-8%}
}
@media(prefers-reduced-motion:reduce){.blacksaw-frame-glow,.phase-toast.show .blacksaw-frame-corner,.combat-roll-overlay.visible .blacksaw-frame-corner{animation:none!important}}

/* BLACKSAW2081 LAB v2.6.1 — tło zamknięte wewnątrz ramy + wyżej ustawiona treść */
.phase-toast,
.combat-roll-panel{
  background:none!important;
}
.phase-toast::after,
.combat-roll-panel::after{
  content:""!important;
  display:block!important;
  position:absolute;
  z-index:0;
  pointer-events:none;
  background-image:linear-gradient(rgba(2,2,3,.22),rgba(2,2,3,.36)),var(--bs-frame-bg)!important;
  background-size:cover!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  /* Tekstura kończy się przed dolnymi belkami ramy, więc nie wystaje poniżej. */
  inset:7% 5.5% 15% 5.5%;
  clip-path:polygon(3% 0,97% 0,100% 5%,100% 94%,96% 100%,4% 100%,0 94%,0 5%);
  box-shadow:inset 0 0 48px rgba(0,0,0,.52),inset 0 0 30px rgba(238,20,71,.11);
}
.phase-toast .blacksaw-frame-content{
  z-index:9;
  transform:translateY(-18px);
}
.combat-roll-panel .blacksaw-frame-content{
  z-index:9;
  transform:translateY(-10px);
}
/* Zapewnia czytelność dolnego opisu przy dłuższych komunikatach. */
.phase-toast small{
  position:relative;
  z-index:10;
  line-height:1.38;
}
@media(max-width:720px){
  .phase-toast::after,.combat-roll-panel::after{inset:8% 5% 14% 5%}
  .phase-toast .blacksaw-frame-content{transform:translateY(-12px)}
  .combat-roll-panel .blacksaw-frame-content{transform:translateY(-7px)}
}


/* =========================================================
   BLACKSAW2081 v2.6.8 — tryb skupienia komunikatów
   ========================================================= */

.message-progress{
  --message-duration: 1600ms;
  position:absolute;
  left:8%;
  right:8%;
  bottom:7%;
  height:5px;
  z-index:40;
  overflow:hidden;
  border-radius:999px;
  background:rgba(0,0,0,.68);
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.08),
    0 0 9px rgba(0,0,0,.8);
  pointer-events:none;
}
.message-progress span{
  display:block;
  width:0%;
  height:100%;
  border-radius:inherit;
  background:linear-gradient(90deg,#7c0717 0%,#ee1447 55%,#ff6a38 100%);
  box-shadow:0 0 8px rgba(238,20,71,.9),0 0 18px rgba(255,74,41,.55);
}
.message-progress span.running{
  animation:messageProgressFill var(--message-duration) linear forwards;
}
@keyframes messageProgressFill{
  from{width:0%}
  to{width:100%}
}

/* Podczas komunikatu widoczna zostaje plansza, pionki i obiekty na polach.
   Interfejs sterowania pozostaje na swoim miejscu, ale jest niewidoczny,
   dzięki czemu plansza nie przeskakuje. */
body.message-focus-active .topbar,
body.message-focus-active .left-hud,
body.message-focus-active .game-layout > .panel,
body.message-focus-active .axis,
body.message-focus-active .hover-controls,
body.message-focus-active .selected-controls,
body.message-focus-active .active-modify-helper,
body.message-focus-active .tile-stay-button,
body.message-focus-active .tile-finish-rotation,
body.message-focus-active .combat-target-reticle,
body.message-focus-active .combat-attack-pips,
body.message-focus-active .attack-pips,
body.message-focus-active .target-reticle,
body.message-focus-active button:not(.message-allowed){
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}

body.message-focus-active .topbar,
body.message-focus-active .left-hud,
body.message-focus-active .game-layout > .panel,
body.message-focus-active .axis{
  transition:opacity .18s ease,visibility .18s ease;
}

/* Komunikaty pozostają zawsze nad planszą. */
.phase-toast,
.combat-roll-overlay,
.combat-message-overlay{
  z-index:10000!important;
}

.phase-toast,
.combat-roll-panel{
  overflow:hidden;
}

.combat-message-overlay{
  min-width:min(520px,86vw);
  min-height:140px;
  display:grid;
  place-items:center;
  text-align:center;
}
.combat-message-text{
  position:relative;
  z-index:2;
}
.combat-message-overlay .message-progress{
  left:14%;
  right:14%;
  bottom:-28px;
}

@media(max-width:720px){
  .message-progress{height:4px;left:10%;right:10%;bottom:6%}
  .combat-message-overlay{min-width:82vw;min-height:110px}
  .combat-message-overlay .message-progress{bottom:-20px}
}

@media(prefers-reduced-motion:reduce){
  .message-progress span.running{animation-timing-function:linear!important}
}


/* =========================================================
   BLACKSAW2081 v2.6.10 — usunięcie zbędnych paneli
   ========================================================= */

/* Panel przebiegu faz po lewej pozostaje w DOM dla logiki gry,
   ale nie jest renderowany. */
.left-hud > .turn-command{
  display:none!important;
}

/* Dziennik zdarzeń po prawej pozostaje w DOM dla logiki i diagnostyki,
   ale nie jest renderowany w interfejsie gracza. */
.game-panel > .log-section,
.right-panel > .log-section,
aside.panel > .log-section,
.log-section{
  display:none!important;
}

/* Domknięcie układu po usunięciu obu sekcji. */
.left-hud{
  align-content:start;
  gap:10px;
}

.left-hud .player-panels{
  margin-top:0!important;
}

.game-layout > .panel,
.right-panel{
  align-content:start;
}

.game-layout > .panel > section:last-of-type:not(.log-section),
.right-panel > section:last-of-type:not(.log-section){
  margin-bottom:0!important;
}


/* BLACKSAW2081 v2.6.11 — panel faz fizycznie usunięty z interfejsu */
.turn-command-technical{
  display:none!important;
  position:absolute!important;
  width:0!important;
  height:0!important;
  overflow:hidden!important;
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}


/* BLACKSAW2081 v2.6.12 — całkowite usunięcie pomarańczowej poświaty spod strzałek */
.axis,
.axis::before,
.axis::after,
.axis button,
.axis button::before,
.axis button::after,
.shift-arrow,
.shift-arrow::before,
.shift-arrow::after,
.board-shift-arrow,
.board-shift-arrow::before,
.board-shift-arrow::after,
.top-axis,
.bottom-axis,
.left-axis,
.right-axis{
  filter:none!important;
  box-shadow:none!important;
  text-shadow:none!important;
  background-color:transparent!important;
}

.axis button,
.shift-arrow,
.board-shift-arrow{
  background-image:var(--arrow-image, none);
}

.axis button:hover,
.axis button:focus,
.axis button:active,
.shift-arrow:hover,
.shift-arrow:focus,
.shift-arrow:active,
.board-shift-arrow:hover,
.board-shift-arrow:focus,
.board-shift-arrow:active{
  filter:none!important;
  box-shadow:none!important;
  text-shadow:none!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.13 — tylko grafika strzałki, bez poświaty
   ========================================================= */

/* Usuwa drugą, zdublowaną grafikę pod przyciskiem. */
.board-wrap .shift-arrow::before,
.board-wrap .shift-arrow::after,
.board-wrap .shift-arrow-fire,
.board-wrap .shift-arrow-sparks,
.board-wrap .shift-arrow-sparks::before,
.board-wrap .shift-arrow-sparks::after{
  content:none!important;
  display:none!important;
  opacity:0!important;
  visibility:hidden!important;
  background:none!important;
  filter:none!important;
  box-shadow:none!important;
  animation:none!important;
}

/* Zostaje wyłącznie jedna właściwa grafika strzałki. */
.board-wrap .shift-arrow .shift-arrow-icon{
  display:block!important;
  position:absolute!important;
  inset:-7px!important;
  background:url('../images/shift_arrow_up.png') center/contain no-repeat!important;
  filter:drop-shadow(0 7px 6px rgba(0,0,0,.88))!important;
  box-shadow:none!important;
  text-shadow:none!important;
  animation:none!important;
}

/* Bez pomarańczowego/czerwonego glow również po najechaniu i kliknięciu. */
.board-wrap .shift-arrow:not(:disabled):hover .shift-arrow-icon,
.board-wrap .shift-arrow:not(:disabled):focus-visible .shift-arrow-icon,
.board-wrap .shift-arrow.is-arrow-active:not(:disabled) .shift-arrow-icon,
.board-wrap .shift-arrow.arrow-pressed .shift-arrow-icon,
.board-wrap .shift-arrow.action-confirmed .shift-arrow-icon{
  filter:brightness(1.06) drop-shadow(0 7px 6px rgba(0,0,0,.9))!important;
  box-shadow:none!important;
  text-shadow:none!important;
}

/* Sam przycisk jest całkowicie przezroczysty. */
.board-wrap .axis,
.board-wrap .axis-group,
.board-wrap .shift-arrow,
.board-wrap .shift-arrow:hover,
.board-wrap .shift-arrow:focus,
.board-wrap .shift-arrow:active{
  background:transparent!important;
  background-color:transparent!important;
  background-image:none!important;
  border-color:transparent!important;
  box-shadow:none!important;
  filter:none!important;
  text-shadow:none!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.14 — finalny pakiet naprawczy
   ========================================================= */

/* 1–3. Strzałki: 50% mniejsze, kierunki bez zmian, zero pomarańczowej plamy.
   Obszar kliknięcia pozostaje pełny; zmniejsza się wyłącznie widoczna grafika. */
.board-wrap .shift-arrow,
.board-wrap .shift-arrow:hover,
.board-wrap .shift-arrow:focus,
.board-wrap .shift-arrow:active{
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  filter:none!important;
  overflow:visible!important;
}
.board-wrap .shift-arrow::before,
.board-wrap .shift-arrow::after,
.board-wrap .shift-arrow-fire,
.board-wrap .shift-arrow-sparks,
.board-wrap .shift-arrow-sparks::before,
.board-wrap .shift-arrow-sparks::after{
  content:none!important;
  display:none!important;
  opacity:0!important;
  visibility:hidden!important;
  background:none!important;
  box-shadow:none!important;
  filter:none!important;
  animation:none!important;
}

.board-wrap .shift-arrow .shift-arrow-icon{
  position:absolute!important;
  left:25%!important;
  top:25%!important;
  right:auto!important;
  bottom:auto!important;
  inset:auto!important;
  width:50%!important;
  height:50%!important;
  padding:0!important;
  display:block!important;
  background-image:url('../images/shift_arrow_up.png')!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:contain!important;
  box-shadow:none!important;
  text-shadow:none!important;
  filter:drop-shadow(0 4px 4px rgba(0,0,0,.9))!important;
  animation:none!important;
}
.board-wrap .top-axis .shift-arrow.arrow-up .shift-arrow-icon{transform:rotate(0deg)!important}
.board-wrap .bottom-axis .shift-arrow.arrow-down .shift-arrow-icon{transform:rotate(180deg)!important}
.board-wrap .left-axis .shift-arrow.arrow-left .shift-arrow-icon{transform:rotate(-90deg)!important}
.board-wrap .right-axis .shift-arrow.arrow-right .shift-arrow-icon{transform:rotate(90deg)!important}

.board-wrap .shift-arrow:not(:disabled):hover .shift-arrow-icon,
.board-wrap .shift-arrow:not(:disabled):focus-visible .shift-arrow-icon,
.board-wrap .shift-arrow.is-arrow-active:not(:disabled) .shift-arrow-icon,
.board-wrap .shift-arrow.arrow-pressed .shift-arrow-icon,
.board-wrap .shift-arrow.action-confirmed .shift-arrow-icon{
  filter:brightness(1.08) drop-shadow(0 4px 4px rgba(0,0,0,.92))!important;
  box-shadow:none!important;
  text-shadow:none!important;
}

/* 7. Podczas przesuwania wolne miejsce pokazuje właściwe tło strony,
   a nie jednolitą czerwono-brązową plamę. */
.board.shift-in-progress{
  background-color:transparent!important;
  background-image:
    linear-gradient(rgba(0,0,0,.08),rgba(0,0,0,.08)),
    url('../images/blacksaw_background_pattern_v267.jpg')!important;
  background-repeat:repeat!important;
  background-size:auto!important;
  background-position:center center!important;
  background-attachment:fixed!important;
}
.shift-strip-overlay,
.shift-incoming-overlay{
  background:transparent!important;
}
.shift-strip-overlay .shift-visual-cell,
.shift-incoming-overlay .shift-visual-cell{
  background:transparent!important;
}

/* Nowa animacja odrodzenia: bez krzyżujących się linii i bez glitchowych pasków.
   Pionek materializuje się od stóp ku głowie w czerwonym żarze i dymie. */
.token-shell.token-respawn-burn{
  isolation:isolate!important;
  overflow:visible!important;
  filter:none!important;
}
.token-shell.token-respawn-burn > .burn-cracks,
.token-shell.token-respawn-burn > .burn-edge,
.token-shell.token-respawn-burn > .burn-ash{
  display:none!important;
  animation:none!important;
  opacity:0!important;
}

.token-shell.token-respawn-burn > .token,
.token-shell.token-respawn-burn > .token-movement-hud{
  clip-path:inset(100% 0 0 0);
  opacity:0;
  animation:bsRespawnMaterialize 3.2s cubic-bezier(.18,.72,.2,1) forwards!important;
  filter:brightness(.45) saturate(1.55) drop-shadow(0 0 0 transparent);
}

.token-shell.token-respawn-burn::before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  left:10%!important;
  right:10%!important;
  bottom:-3%!important;
  height:34%!important;
  z-index:170!important;
  border-radius:50%!important;
  opacity:0;
  pointer-events:none!important;
  background:
    radial-gradient(ellipse at center,
      rgba(255,230,180,.95) 0 3%,
      rgba(255,81,30,.88) 8%,
      rgba(238,20,71,.48) 26%,
      rgba(100,0,12,.18) 52%,
      transparent 72%)!important;
  filter:blur(3px) drop-shadow(0 0 11px rgba(255,48,22,.9))!important;
  animation:bsRespawnGroundGlow 3.2s ease-in-out forwards!important;
}

.token-shell.token-respawn-burn::after{
  content:""!important;
  display:block!important;
  position:absolute!important;
  inset:4% 8% -10%!important;
  z-index:169!important;
  opacity:0;
  pointer-events:none!important;
  background:
    radial-gradient(circle at 18% 86%,rgba(255,124,45,.9) 0 1.2px,transparent 2px),
    radial-gradient(circle at 35% 76%,rgba(255,45,24,.82) 0 1.1px,transparent 2px),
    radial-gradient(circle at 54% 90%,rgba(255,202,108,.9) 0 1px,transparent 1.8px),
    radial-gradient(circle at 72% 72%,rgba(238,20,71,.82) 0 1.2px,transparent 2px),
    radial-gradient(circle at 86% 84%,rgba(255,103,38,.9) 0 1px,transparent 1.8px),
    radial-gradient(ellipse at 50% 92%,rgba(40,8,8,.7),transparent 58%)!important;
  background-size:21px 31px,27px 39px,19px 33px,31px 45px,23px 37px,100% 100%!important;
  filter:blur(.35px) drop-shadow(0 0 4px rgba(255,47,25,.76))!important;
  animation:bsRespawnSmokeSparks 3.2s ease-out forwards!important;
}

@keyframes bsRespawnMaterialize{
  0%{clip-path:inset(100% 0 0 0);opacity:0;transform:translateY(8px) scale(.96);filter:brightness(.32) saturate(1.7)}
  15%{opacity:.62}
  32%{clip-path:inset(72% 0 0 0);opacity:.9;filter:brightness(.75) saturate(1.65) drop-shadow(0 0 8px rgba(255,42,22,.68))}
  58%{clip-path:inset(38% 0 0 0);opacity:1;transform:translateY(1px) scale(.99);filter:brightness(1.15) saturate(1.45) drop-shadow(0 0 13px rgba(255,47,24,.82))}
  82%{clip-path:inset(7% 0 0 0);filter:brightness(1.42) saturate(1.35) drop-shadow(0 0 17px rgba(255,61,26,.9))}
  92%{clip-path:inset(0);transform:scale(1.025);filter:brightness(1.55) saturate(1.28) drop-shadow(0 0 20px rgba(255,74,31,.95))}
  100%{clip-path:inset(0);opacity:1;transform:translateY(0) scale(1);filter:brightness(1) saturate(1)}
}
@keyframes bsRespawnGroundGlow{
  0%{opacity:0;transform:scale(.35)}
  14%{opacity:.9;transform:scale(.82)}
  45%{opacity:1;transform:scale(1.12)}
  78%{opacity:.68;transform:scale(.95)}
  100%{opacity:0;transform:scale(.7)}
}
@keyframes bsRespawnSmokeSparks{
  0%{opacity:0;transform:translateY(18px) scale(.8)}
  18%{opacity:.88}
  72%{opacity:.58;transform:translateY(-22px) scale(1.04)}
  100%{opacity:0;transform:translateY(-48px) scale(1.1)}
}

@media(prefers-reduced-motion:reduce){
  .token-shell.token-respawn-burn > .token,
  .token-shell.token-respawn-burn > .token-movement-hud,
  .token-shell.token-respawn-burn::before,
  .token-shell.token-respawn-burn::after{
    animation-duration:1.2s!important;
  }
}


/* =========================================================
   BLACKSAW2081 v2.6.15 — strzałki, fazy i czysty respawn
   ========================================================= */

/* STRZAŁKI: zachowujemy działające przyciski i poprawne kierunki.
   Widoczna grafika jest rysowana wyłącznie w ::before i ma 50% skali. */
.board-wrap .shift-arrow{
  position:relative!important;
  overflow:visible!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  filter:none!important;
}
.board-wrap .shift-arrow > .shift-arrow-icon,
.board-wrap .shift-arrow > .shift-arrow-fire,
.board-wrap .shift-arrow > .shift-arrow-sparks{
  display:none!important;
}
.board-wrap .shift-arrow::after{
  content:none!important;
  display:none!important;
}
.board-wrap .shift-arrow::before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  inset:-6px!important;
  opacity:1!important;
  visibility:visible!important;
  background:url('../images/shift_arrow_up.png') center/contain no-repeat!important;
  box-shadow:none!important;
  filter:drop-shadow(0 5px 5px rgba(0,0,0,.9))!important;
  transform-origin:50% 50%!important;
  pointer-events:none!important;
  z-index:3!important;
  animation:none!important;
}
.board-wrap .shift-arrow.arrow-up::before{transform:rotate(0deg) scale(.5)!important}
.board-wrap .shift-arrow.arrow-down::before{transform:rotate(180deg) scale(.5)!important}
.board-wrap .shift-arrow.arrow-left::before{transform:rotate(-90deg) scale(.5)!important}
.board-wrap .shift-arrow.arrow-right::before{transform:rotate(90deg) scale(.5)!important}

.board-wrap .shift-arrow:not(:disabled):hover::before,
.board-wrap .shift-arrow:not(:disabled):focus-visible::before,
.board-wrap .shift-arrow.is-arrow-active:not(:disabled)::before,
.board-wrap .shift-arrow.arrow-pressed::before,
.board-wrap .shift-arrow.action-confirmed::before{
  filter:brightness(1.08) drop-shadow(0 5px 5px rgba(0,0,0,.92))!important;
}
.board-wrap .axis,
.board-wrap .axis::before,
.board-wrap .axis::after,
.board-wrap .axis-group{
  background:transparent!important;
  box-shadow:none!important;
  filter:none!important;
}

/* RESPAWN: bez kresek, pęknięć i glitcha.
   Jednostka płynnie odsłania się od dołu do góry, z subtelnym czerwonym żarem. */
.token-shell.token-respawn-burn{
  isolation:isolate!important;
  overflow:visible!important;
  filter:none!important;
}
.token-shell.token-respawn-burn > .burn-fx-layer,
.token-shell.token-respawn-burn > .burn-cracks,
.token-shell.token-respawn-burn > .burn-edge,
.token-shell.token-respawn-burn > .burn-ash{
  display:none!important;
  opacity:0!important;
  animation:none!important;
}
.token-shell.token-respawn-burn > .token,
.token-shell.token-respawn-burn > .token-movement-hud,
.token-shell.token-respawn-burn > .token-bottom-hud{
  clip-path:inset(100% 0 0 0);
  opacity:0;
  transform:translateY(8px) scale(.96);
  animation:bsCleanRespawn 2.6s cubic-bezier(.16,.76,.22,1) forwards!important;
}
.token-shell.token-respawn-burn::before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  left:17%!important;
  right:17%!important;
  bottom:2%!important;
  height:22%!important;
  z-index:160!important;
  border-radius:50%!important;
  pointer-events:none!important;
  opacity:0;
  background:radial-gradient(ellipse at center,
    rgba(255,222,162,.88) 0 3%,
    rgba(255,75,28,.75) 12%,
    rgba(238,20,71,.32) 34%,
    transparent 72%)!important;
  filter:blur(4px) drop-shadow(0 0 10px rgba(255,43,20,.72))!important;
  animation:bsCleanRespawnGlow 2.6s ease-in-out forwards!important;
}
.token-shell.token-respawn-burn::after{
  content:""!important;
  display:block!important;
  position:absolute!important;
  left:18%!important;
  right:18%!important;
  bottom:0!important;
  height:62%!important;
  z-index:159!important;
  pointer-events:none!important;
  opacity:0;
  background:linear-gradient(to top,
    rgba(40,5,7,.42),
    rgba(85,10,12,.16) 45%,
    transparent 100%)!important;
  filter:blur(5px)!important;
  animation:bsCleanRespawnMist 2.6s ease-out forwards!important;
}
@keyframes bsCleanRespawn{
  0%{clip-path:inset(100% 0 0 0);opacity:0;transform:translateY(8px) scale(.96);filter:brightness(.55) saturate(1.35)}
  18%{opacity:.7}
  42%{clip-path:inset(62% 0 0 0);opacity:.92;filter:brightness(.85) saturate(1.25) drop-shadow(0 0 8px rgba(255,50,24,.48))}
  70%{clip-path:inset(24% 0 0 0);opacity:1;transform:translateY(1px) scale(.99);filter:brightness(1.12) saturate(1.15) drop-shadow(0 0 11px rgba(255,55,25,.58))}
  88%{clip-path:inset(0);transform:scale(1.015);filter:brightness(1.35) saturate(1.12) drop-shadow(0 0 13px rgba(255,68,28,.7))}
  100%{clip-path:inset(0);opacity:1;transform:translateY(0) scale(1);filter:brightness(1) saturate(1)}
}
@keyframes bsCleanRespawnGlow{
  0%{opacity:0;transform:scale(.45)}
  18%{opacity:.75;transform:scale(.85)}
  55%{opacity:.95;transform:scale(1.08)}
  82%{opacity:.48;transform:scale(.94)}
  100%{opacity:0;transform:scale(.7)}
}
@keyframes bsCleanRespawnMist{
  0%{opacity:0;transform:translateY(10px)}
  25%{opacity:.38}
  70%{opacity:.24;transform:translateY(-8px)}
  100%{opacity:0;transform:translateY(-18px)}
}


/* =========================================================
   BLACKSAW2081 v2.6.16 — loader, tło od pierwszej klatki
   ========================================================= */
html,body{
  background-color:#11100e!important;
  background-image:url('../images/blacksaw_background_pattern_v267.jpg')!important;
  background-repeat:repeat!important;
  background-size:auto!important;
  background-position:center center!important;
}

.board,
.board-wrap,
.board-column{
  background-color:transparent!important;
}
.board{
  background-image:url('../images/blacksaw_background_pattern_v267.jpg')!important;
  background-repeat:repeat!important;
  background-size:auto!important;
  background-position:center center!important;
}

body.app-loading .shell{
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}
body.app-ready .shell{
  opacity:1;
  visibility:visible;
  transition:opacity .28s ease;
}

.app-loader{
  position:fixed;
  inset:0;
  z-index:999999;
  display:grid;
  place-items:center;
  background:
    linear-gradient(rgba(4,4,4,.78),rgba(4,4,4,.88)),
    url('../images/blacksaw_background_pattern_v267.jpg') center/auto repeat;
  transition:opacity .35s ease,visibility .35s ease;
}
.app-loader.hidden{
  opacity:0;
  visibility:hidden;
  pointer-events:none;
}
.app-loader-panel{
  width:min(520px,84vw);
  padding:28px 32px;
  text-align:center;
  border:1px solid rgba(238,20,71,.65);
  background:rgba(7,8,9,.94);
  box-shadow:0 24px 80px rgba(0,0,0,.8),0 0 36px rgba(238,20,71,.22);
}
.app-loader-panel strong{
  display:block;
  color:#fff;
  font-size:clamp(1.1rem,2.2vw,1.7rem);
  letter-spacing:.13em;
  margin-bottom:10px;
}
.app-loader-panel>span{
  display:block;
  color:#c7b8b8;
  font-size:.78rem;
  letter-spacing:.1em;
  margin-bottom:14px;
}
.app-loader-track{
  height:9px;
  overflow:hidden;
  border-radius:999px;
  background:#1b1114;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.08);
}
.app-loader-track span{
  display:block;
  width:0;
  height:100%;
  background:linear-gradient(90deg,#7b0718,#ee1447,#ff6b35);
  box-shadow:0 0 15px rgba(238,20,71,.8);
  transition:width .16s linear;
}
.app-loader-panel b{
  display:block;
  margin-top:10px;
  color:#ff536f;
  font-size:.86rem;
}

/* Respawn bez animacji */
.token-shell.token-respawn-burn,
.token-shell.token-respawn-burn > .token,
.token-shell.token-respawn-burn > .token-movement-hud,
.token-shell.token-respawn-burn > .token-bottom-hud{
  animation:none!important;
  clip-path:none!important;
  opacity:1!important;
  transform:none!important;
  filter:none!important;
}
.token-shell.token-respawn-burn::before,
.token-shell.token-respawn-burn::after,
.token-shell.token-respawn-burn > .burn-fx-layer{
  content:none!important;
  display:none!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.17 — poprawiony loader i ramka BLACKSAW
   ========================================================= */
.app-loader{
  position:fixed!important;
  inset:0!important;
  z-index:999999!important;
  display:grid!important;
  place-items:center!important;
  background:
    linear-gradient(rgba(0,0,0,.76),rgba(0,0,0,.86)),
    url('../images/blacksaw_background_pattern_v267.jpg') center/auto repeat!important;
  transition:opacity .35s ease,visibility .35s ease!important;
}
.app-loader.hidden{
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}

.app-loader-panel{
  position:relative!important;
  width:min(760px,90vw)!important;
  min-height:360px!important;
  padding:74px 110px!important;
  border:0!important;
  background:
    linear-gradient(rgba(8,3,5,.78),rgba(8,3,5,.88)),
    url('../images/ui/frame_background.png') center/cover no-repeat!important;
  box-shadow:0 30px 110px rgba(0,0,0,.9),0 0 48px rgba(238,20,71,.26)!important;
  overflow:visible!important;
}

.app-loader-panel .blacksaw-frame-corner{
  position:absolute!important;
  width:52%!important;
  height:52%!important;
  background-repeat:no-repeat!important;
  background-size:contain!important;
  pointer-events:none!important;
  z-index:3!important;
  filter:drop-shadow(0 10px 18px rgba(0,0,0,.9))!important;
}
.app-loader-panel .frame-top-left{
  left:-2%!important; top:-3%!important;
  background-image:url('../images/ui/frame_top_left.png')!important;
  background-position:left top!important;
}
.app-loader-panel .frame-top-right{
  right:-2%!important; top:-3%!important;
  background-image:url('../images/ui/frame_top_right.png')!important;
  background-position:right top!important;
}
.app-loader-panel .frame-bottom-left{
  left:-2%!important; bottom:-3%!important;
  background-image:url('../images/ui/frame_bottom_left.png')!important;
  background-position:left bottom!important;
}
.app-loader-panel .frame-bottom-right{
  right:-2%!important; bottom:-3%!important;
  background-image:url('../images/ui/frame_bottom_right.png')!important;
  background-position:right bottom!important;
}
.app-loader-panel .blacksaw-frame-glow{
  position:absolute!important;
  inset:9% 8%!important;
  z-index:1!important;
  pointer-events:none!important;
  box-shadow:inset 0 0 46px rgba(238,20,71,.18),0 0 32px rgba(238,20,71,.12)!important;
}
.app-loader-panel .blacksaw-frame-content{
  position:relative!important;
  z-index:5!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  min-height:210px!important;
  padding:20px 26px!important;
  text-align:center!important;
}
.app-loader-panel strong{
  display:block!important;
  margin:0 0 12px!important;
  color:#fff!important;
  font-size:clamp(1.25rem,2.4vw,2rem)!important;
  letter-spacing:.16em!important;
  text-shadow:0 3px 10px #000,0 0 16px rgba(238,20,71,.35)!important;
}
.app-loader-panel #appLoaderText{
  display:block!important;
  margin-bottom:18px!important;
  color:#d9c6c6!important;
  font-size:.82rem!important;
  letter-spacing:.11em!important;
}
.app-loader-track{
  width:min(470px,72vw)!important;
  height:10px!important;
  overflow:hidden!important;
  border-radius:999px!important;
  background:rgba(12,5,7,.9)!important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.08),0 0 10px rgba(0,0,0,.8)!important;
}
.app-loader-track span{
  display:block!important;
  width:0;
  height:100%!important;
  background:linear-gradient(90deg,#740817,#ee1447,#ff6b35)!important;
  box-shadow:0 0 16px rgba(238,20,71,.9)!important;
  transition:width .16s linear!important;
}
.app-loader-panel #appLoaderPercent{
  display:block!important;
  margin-top:12px!important;
  color:#ff536f!important;
  font-size:.9rem!important;
}

@media(max-width:720px){
  .app-loader-panel{
    width:94vw!important;
    min-height:280px!important;
    padding:58px 54px!important;
  }
  .app-loader-panel .blacksaw-frame-corner{
    width:58%!important;
    height:58%!important;
  }
  .app-loader-panel .blacksaw-frame-content{
    min-height:160px!important;
    padding:18px 12px!important;
  }
}


/* =========================================================
   BLACKSAW2081 v2.6.18 — loader identyczny z komunikatami faz
   ========================================================= */
.app-loader-panel{
  position:relative!important;
  width:auto!important;
  min-width:min(480px,88vw)!important;
  max-width:min(680px,92vw)!important;
  min-height:0!important;
  padding:48px 74px!important;
  border:0!important;
  border-radius:0!important;
  clip-path:none!important;
  background:none!important;
  box-shadow:0 30px 95px rgba(0,0,0,.86),0 0 34px rgba(238,20,71,.24)!important;
  isolation:isolate!important;
  overflow:visible!important;
}

/* To samo właściwe tło i ten sam crop co w MODYFIKACJA / RUCH / WALKA. */
.app-loader-panel::after{
  content:""!important;
  display:block!important;
  position:absolute!important;
  z-index:0!important;
  pointer-events:none!important;
  background-image:
    linear-gradient(rgba(2,2,3,.22),rgba(2,2,3,.36)),
    var(--bs-frame-bg)!important;
  background-size:cover!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  inset:7% 5.5% 15% 5.5%!important;
  clip-path:polygon(3% 0,97% 0,100% 5%,100% 94%,96% 100%,4% 100%,0 94%,0 5%)!important;
  box-shadow:
    inset 0 0 48px rgba(0,0,0,.52),
    inset 0 0 30px rgba(238,20,71,.11)!important;
}

/* Identyczne proporcje i pozycje rogów jak w komunikatach. */
.app-loader-panel .blacksaw-frame-corner{
  position:absolute!important;
  z-index:7!important;
  width:46%!important;
  height:auto!important;
  aspect-ratio:591/506!important;
  background-repeat:no-repeat!important;
  background-size:contain!important;
  pointer-events:none!important;
  filter:drop-shadow(0 10px 16px rgba(0,0,0,.86))!important;
}
.app-loader-panel .frame-top-left{
  left:-4%!important;
  top:-9%!important;
  background-image:var(--bs-frame-tl)!important;
  background-position:left top!important;
}
.app-loader-panel .frame-top-right{
  right:-4%!important;
  top:-9%!important;
  background-image:var(--bs-frame-tr)!important;
  background-position:right top!important;
}
.app-loader-panel .frame-bottom-left{
  left:-4%!important;
  bottom:-9%!important;
  background-image:var(--bs-frame-bl)!important;
  background-position:left bottom!important;
}
.app-loader-panel .frame-bottom-right{
  right:-4%!important;
  bottom:-9%!important;
  background-image:var(--bs-frame-br)!important;
  background-position:right bottom!important;
}
.app-loader-panel .blacksaw-frame-glow{
  position:absolute!important;
  inset:5%!important;
  z-index:2!important;
  pointer-events:none!important;
  background:
    radial-gradient(circle at 10% 12%,rgba(255,34,18,.23),transparent 18%),
    radial-gradient(circle at 90% 12%,rgba(255,34,18,.23),transparent 18%),
    radial-gradient(circle at 10% 88%,rgba(255,34,18,.18),transparent 18%),
    radial-gradient(circle at 90% 88%,rgba(255,34,18,.18),transparent 18%)!important;
  box-shadow:none!important;
  animation:blacksawFrameGlow 2.4s ease-in-out infinite alternate!important;
}
.app-loader-panel .blacksaw-frame-content{
  position:relative!important;
  z-index:9!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  width:100%!important;
  min-height:0!important;
  padding:0!important;
  transform:translateY(-18px)!important;
  text-align:center!important;
}
.app-loader-track{
  width:min(420px,66vw)!important;
}
.app-loader-panel strong{
  font-size:clamp(1.05rem,2vw,1.55rem)!important;
  margin-bottom:10px!important;
}
.app-loader-panel #appLoaderText{
  margin-bottom:14px!important;
}

@media(max-width:720px){
  .app-loader-panel{
    width:92vw!important;
    min-width:0!important;
    max-width:92vw!important;
    padding:36px 48px!important;
  }
  .app-loader-panel::after{
    inset:8% 5% 14% 5%!important;
  }
  .app-loader-panel .blacksaw-frame-corner{
    width:51%!important;
  }
  .app-loader-panel .frame-top-left,
  .app-loader-panel .frame-bottom-left{left:-6%!important}
  .app-loader-panel .frame-top-right,
  .app-loader-panel .frame-bottom-right{right:-6%!important}
  .app-loader-panel .frame-top-left,
  .app-loader-panel .frame-top-right{top:-8%!important}
  .app-loader-panel .frame-bottom-left,
  .app-loader-panel .frame-bottom-right{bottom:-8%!important}
  .app-loader-panel .blacksaw-frame-content{
    transform:translateY(-12px)!important;
  }
}


/* =========================================================
   BLACKSAW2081 v2.6.19 — loader bez dziur, licznik tury,
   pełna blokada planszy podczas komunikatów
   ========================================================= */

/* Loader: pełna tekstura pod całą ramą usuwa szczeliny u góry i na dole. */
.app-loader-panel{
  background-image:
    linear-gradient(rgba(2,2,3,.22),rgba(2,2,3,.36)),
    var(--bs-frame-bg)!important;
  background-size:cover!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
}
.app-loader-panel::after{
  inset:0!important;
  clip-path:none!important;
  background-image:
    linear-gradient(rgba(2,2,3,.10),rgba(2,2,3,.20)),
    var(--bs-frame-bg)!important;
  background-size:cover!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  box-shadow:inset 0 0 55px rgba(0,0,0,.54),inset 0 0 32px rgba(238,20,71,.12)!important;
}

/* Numer tury w prawym panelu. */
.turn-counter-card{
  position:relative;
  display:grid;
  grid-template-columns:1fr auto;
  align-items:end;
  gap:2px 12px;
  padding:10px 12px;
  border:1px solid rgba(238,20,71,.46);
  background:rgba(8,8,9,.36);
  box-shadow:inset 0 0 22px rgba(0,0,0,.42);
}
.turn-counter-card .section-kicker{
  grid-column:1;
  margin:0;
}
.turn-counter-card strong{
  grid-column:2;
  grid-row:1 / span 2;
  align-self:center;
  color:#fff;
  font-size:1.75rem;
  line-height:1;
  text-shadow:0 0 12px rgba(238,20,71,.55);
}
.turn-counter-card small{
  grid-column:1;
  color:#d4c7c7;
  font-weight:800;
  letter-spacing:.05em;
}

/* Podczas komunikatu zostają wyłącznie pionki oraz obiekty gry.
   Wszystkie kafelki, korytarze, współrzędne, podświetlenia i przyciski są niewidoczne. */
body.message-focus-active .board > .cell > .tile-texture,
body.message-focus-active .board > .cell > .coord,
body.message-focus-active .board > .cell > .hub,
body.message-focus-active .board > .cell > .corridor,
body.message-focus-active .board > .cell > .tile-rotation-controls,
body.message-focus-active .board > .cell > .stay-on-cell,
body.message-focus-active .board > .cell > .combat-end-button,
body.message-focus-active .board > .cell::before,
body.message-focus-active .board > .cell::after{
  opacity:0!important;
  visibility:hidden!important;
}
body.message-focus-active .board > .cell{
  background:transparent!important;
  border-color:transparent!important;
  box-shadow:none!important;
  outline:none!important;
}

/* Pionki, klucze i skrzynie pozostają widoczne. */
body.message-focus-active .token-shell,
body.message-focus-active .board-object,
body.message-focus-active .key-object,
body.message-focus-active .chest-object{
  opacity:1!important;
  visibility:visible!important;
}

/* Pełna blokada wejścia — także dla klawiatury, dotyku i myszy. */
body.message-interaction-locked .board,
body.message-interaction-locked .axis,
body.message-interaction-locked .controls,
body.message-interaction-locked .top-actions,
body.message-interaction-locked .player-panels,
body.message-interaction-locked .mission-card,
body.message-interaction-locked .utility-row{
  pointer-events:none!important;
  user-select:none!important;
}
body.message-interaction-locked .board .cell{
  cursor:default!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.20 — pełna plansza podczas komunikatów
   i usunięcie jasnej ramki wokół planszy
   ========================================================= */

/* Plansza, kafelki i tekstury pozostają w pełni widoczne
   podczas wszystkich komunikatów. */
body.message-focus-active .board,
body.message-focus-active .board > .cell,
body.message-focus-active .board > .cell > .tile-texture,
body.message-focus-active .board > .cell > .coord,
body.message-focus-active .board > .cell > .hub,
body.message-focus-active .board > .cell > .corridor,
body.message-focus-active .token-shell,
body.message-focus-active .board-object,
body.message-focus-active .key-object,
body.message-focus-active .chest-object{
  opacity:1!important;
  visibility:visible!important;
}

/* Przywrócenie zwykłego wyglądu pól — bez ukrywania tekstur,
   obramowań ani grafiki planszy. */
body.message-focus-active .board > .cell{
  background:initial;
  border-color:initial;
  box-shadow:initial;
}

/* Ukryte pozostają wyłącznie elementy sterujące na polach. */
body.message-focus-active .board > .cell > .tile-rotation-controls,
body.message-focus-active .board > .cell > .stay-on-cell,
body.message-focus-active .board > .cell > .combat-end-button,
body.message-focus-active .hover-controls,
body.message-focus-active .selected-controls{
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}

/* Pełna blokada interakcji podczas komunikatu,
   bez zmieniania wyglądu planszy. */
body.message-interaction-locked .board,
body.message-interaction-locked .board *,
body.message-interaction-locked .axis,
body.message-interaction-locked .controls,
body.message-interaction-locked .top-actions{
  pointer-events:none!important;
  user-select:none!important;
}

/* Usunięcie cienkiej jasnej ramki / linii wokół planszy. */
.board,
.board-wrap,
.board-column,
#board,
#boardWrap{
  border:none!important;
  outline:none!important;
  box-shadow:none!important;
}

/* Pseudoelementy kontenerów nie mogą rysować cienkiej krawędzi. */
.board-wrap::before,
.board-wrap::after,
.board-column::before,
.board-column::after{
  border:none!important;
  outline:none!important;
  box-shadow:none!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.21 — bardziej widoczne korytarze
   eksperyment: żółty przemysłowy, alpha 80%
   ========================================================= */

.board .cell > .corridor,
.board .cell > .hub,
body.message-focus-active .board .cell > .corridor,
body.message-focus-active .board .cell > .hub{
  visibility:visible!important;
  opacity:.8!important;
  background-color:rgba(214,170,20,.80)!important;
  background-image:
    linear-gradient(135deg,
      rgba(255,215,60,.70) 0%,
      rgba(204,153,0,.76) 42%,
      rgba(245,194,30,.68) 62%,
      rgba(115,78,0,.72) 100%)!important;
  border-color:rgba(255,218,72,.62)!important;
  box-shadow:
    inset 0 0 5px rgba(46,29,0,.78),
    0 0 3px rgba(221,165,15,.22)!important;
  filter:saturate(.92) brightness(.88)!important;
  mix-blend-mode:normal!important;
}

/* Delikatne zużycie, żeby korytarz nie wyglądał jak płaski biały wektor. */
.board .cell > .corridor::after,
.board .cell > .hub::after{
  content:""!important;
  position:absolute!important;
  inset:0!important;
  pointer-events:none!important;
  opacity:.28!important;
  background-image:
    repeating-linear-gradient(
      115deg,
      transparent 0 5px,
      rgba(35,24,4,.32) 6px 7px,
      transparent 8px 13px
    )!important;
}

/* Tekstura kafelka pozostaje w pełni widoczna pod żółtą warstwą. */
.board .cell > .tile-texture,
body.message-focus-active .board .cell > .tile-texture{
  visibility:visible!important;
  opacity:1!important;
  filter:none!important;
}

/* Podczas komunikatów tylko blokujemy sterowanie — plansza nie znika. */
body.message-interaction-locked .board,
body.message-interaction-locked .board *{
  pointer-events:none!important;
  user-select:none!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.22 — przebudowa UX faz planszy
   ========================================================= */

/* 2. Podgląd całego przesuwanego rzędu/kolumny — alpha 50%. */
.board.axis-preview-active .cell{
  transition:opacity .16s ease,filter .16s ease,box-shadow .16s ease!important;
}
.board.axis-preview-active .cell:not(.axis-preview-target){
  opacity:.5!important;
  filter:brightness(.58) saturate(.72)!important;
}
.board.axis-preview-active .cell.axis-preview-target{
  opacity:1!important;
  filter:brightness(1.22) saturate(1.08)!important;
  box-shadow:inset 0 0 0 2px rgba(255,210,55,.82),0 0 13px rgba(255,183,20,.45)!important;
  z-index:6!important;
}

/* 3. Stos pokazuje prawdziwe małe kafelki w rzędzie. */
.reserve{
  display:flex!important;
  flex-wrap:nowrap!important;
  align-items:center!important;
  gap:7px!important;
  min-height:43px!important;
  overflow-x:auto!important;
  padding:3px 1px!important;
}
.mini-tile{
  --mini-size:38px;
  position:relative!important;
  flex:0 0 var(--mini-size)!important;
  width:var(--mini-size)!important;
  height:var(--mini-size)!important;
  display:block!important;
  overflow:hidden!important;
  border:1px solid rgba(230,185,57,.56)!important;
  border-radius:4px!important;
  background:#141313!important;
  box-shadow:0 3px 8px rgba(0,0,0,.78),inset 0 0 8px rgba(0,0,0,.62)!important;
}
.mini-tile.next-tile{
  border-color:#f2c94c!important;
  box-shadow:0 0 0 1px rgba(242,201,76,.32),0 3px 9px rgba(0,0,0,.8)!important;
}
.mini-tile-texture{
  position:absolute!important;
  inset:0!important;
  transform:rotate(var(--mini-rotation))!important;
  background-size:cover!important;
  background-position:center!important;
}
.mini-tile[data-tile-type="I"] .mini-tile-texture{background-image:url('../textures/tile_I.jpg')!important}
.mini-tile[data-tile-type="T"] .mini-tile-texture{background-image:url('../textures/tile_T.jpg')!important}
.mini-tile[data-tile-type="L"] .mini-tile-texture{background-image:url('../textures/tile_L.jpg')!important}
.mini-tile[data-tile-type="PLUS"] .mini-tile-texture{background-image:url('../textures/tile_PLUS.jpg')!important}
.mini-tile-hub,
.mini-tile-corridor{
  position:absolute!important;
  z-index:2!important;
  display:block!important;
  background:rgba(214,170,20,.8)!important;
  box-shadow:inset 0 0 2px rgba(45,28,0,.72)!important;
}
.mini-tile-hub{left:40%;top:40%;width:20%;height:20%;border-radius:50%}
.mini-tile-corridor.n{left:44%;top:0;width:12%;height:50%}
.mini-tile-corridor.s{left:44%;bottom:0;width:12%;height:50%}
.mini-tile-corridor.e{right:0;top:44%;width:50%;height:12%}
.mini-tile-corridor.w{left:0;top:44%;width:50%;height:12%}

/* 4. Kafelek, który wejdzie na planszę, pojawia się po przeciwnej stronie strzałki. */
.axis-group{position:relative!important}
.incoming-tile-preview{
  position:absolute!important;
  z-index:250!important;
  pointer-events:none!important;
  width:52px!important;
  height:52px!important;
  display:grid!important;
  place-items:center!important;
  animation:incomingTilePulse .78s ease-in-out infinite alternate!important;
}
.incoming-tile-preview .mini-tile{
  --mini-size:45px;
  box-shadow:0 0 0 2px rgba(255,209,54,.78),0 0 18px rgba(255,137,20,.72),0 7px 12px rgba(0,0,0,.85)!important;
}
.top-axis .incoming-tile-preview{left:50%;top:calc(100% + 3px);transform:translateX(-50%)}
.bottom-axis .incoming-tile-preview{left:50%;bottom:calc(100% + 3px);transform:translateX(-50%)}
.left-axis .incoming-tile-preview{top:50%;left:calc(100% + 3px);transform:translateY(-50%)}
.right-axis .incoming-tile-preview{top:50%;right:calc(100% + 3px);transform:translateY(-50%)}
@keyframes incomingTilePulse{
  from{filter:brightness(.88);opacity:.78}
  to{filter:brightness(1.2);opacity:1}
}

/* 5. Diody ruchu nad pionkiem — taki sam układ jak wskaźnik walki. */
.token-movement-hud{
  position:absolute!important;
  left:50%!important;
  top:-14%!important;
  bottom:auto!important;
  transform:translateX(-50%)!important;
  z-index:95!important;
  width:auto!important;
  pointer-events:none!important;
}
.token-energy{
  display:flex!important;
  flex-direction:row!important;
  align-items:center!important;
  justify-content:center!important;
  gap:6px!important;
}
.token-energy-segment{
  width:8px!important;
  height:8px!important;
  border-radius:50%!important;
  background:#251318!important;
  border:1px solid rgba(130,50,65,.7)!important;
  box-shadow:inset 0 0 4px rgba(0,0,0,.9)!important;
}
.token-energy-segment.active{
  background:radial-gradient(circle at 35% 30%,#fff0d6 0 7%,#ff435f 18%,#cf092e 52%,#590716 100%)!important;
  border-color:#ff526a!important;
  box-shadow:0 0 7px #ff173f,0 0 14px rgba(238,20,71,.62)!important;
}

/* 6. Animowana przerywana trasa przez środki pól. */
.movement-path-svg{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  z-index:72!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.movement-path-line{
  stroke:#f2c94c!important;
  stroke-width:3.2!important;
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
  stroke-dasharray:8 8!important;
  filter:drop-shadow(0 0 3px rgba(255,176,24,.95)) drop-shadow(0 2px 2px rgba(0,0,0,.9))!important;
  animation:movementDashFlow .56s linear infinite!important;
}
@keyframes movementDashFlow{to{stroke-dashoffset:-32}}

.movement-walker{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:24px!important;
  height:34px!important;
  transform:translate(-50%,-50%)!important;
  z-index:86!important;
  pointer-events:none!important;
  filter:drop-shadow(0 0 6px rgba(255,192,35,.9)) drop-shadow(0 3px 3px rgba(0,0,0,.9))!important;
}
.movement-walker i{position:absolute!important;display:block!important;background:#f2c94c!important;transform-origin:center!important}
.walker-head{width:8px;height:8px;border-radius:50%;left:8px;top:0}
.walker-body{width:4px;height:13px;border-radius:3px;left:10px;top:8px}
.walker-arm{width:3px;height:12px;border-radius:3px;left:10px;top:9px}
.walker-arm-a{animation:walkerArmA .52s ease-in-out infinite alternate}
.walker-arm-b{animation:walkerArmB .52s ease-in-out infinite alternate}
.walker-leg{width:3px;height:14px;border-radius:3px;left:10px;top:19px}
.walker-leg-a{animation:walkerLegA .52s ease-in-out infinite alternate}
.walker-leg-b{animation:walkerLegB .52s ease-in-out infinite alternate}
@keyframes walkerArmA{from{transform:rotate(42deg)}to{transform:rotate(-42deg)}}
@keyframes walkerArmB{from{transform:rotate(-42deg)}to{transform:rotate(42deg)}}
@keyframes walkerLegA{from{transform:rotate(28deg)}to{transform:rotate(-28deg)}}
@keyframes walkerLegB{from{transform:rotate(-28deg)}to{transform:rotate(28deg)}}
.move-path-target{
  box-shadow:inset 0 0 0 2px rgba(242,201,76,.92),0 0 18px rgba(255,170,20,.55)!important;
}

/* 7. Podczas ruchu nie pokazujemy przycisku ani diod ruchu w klonie. */
.moving-player-bundle .stay-on-cell,
.moving-player-bundle .token-movement-hud,
body.movement-in-progress .stay-on-cell{
  display:none!important;
}

/* 8. Przycisk ZOSTAŃ */
.stay-on-cell span{letter-spacing:.08em!important}

/* 9. Puls celownika wyłącznie po najechaniu na pole przeciwnika. */
.cell.combat-target:hover .combat-reticle,
.cell.combat-target:focus-visible .combat-reticle{
  animation:combatReticleHoverPulse .72s ease-in-out infinite alternate!important;
  transform-origin:50% 50%!important;
}
@keyframes combatReticleHoverPulse{
  from{transform:scale(.88);filter:brightness(.9) drop-shadow(0 0 5px rgba(255,30,35,.62))}
  to{transform:scale(1.14);filter:brightness(1.28) drop-shadow(0 0 12px rgba(255,28,28,.98))}
}

@media(max-width:720px){
  .mini-tile{--mini-size:34px}
  .incoming-tile-preview .mini-tile{--mini-size:39px}
  .incoming-tile-preview{width:44px!important;height:44px!important}
  .movement-path-line{stroke-width:2.6!important}
}


/* =========================================================
   BLACKSAW2081 v2.6.23 — poprawki UX po testach
   ========================================================= */

/* 1. Miniatury stosu i podglądu: wyłącznie prawdziwa tekstura. */
.mini-tile-hub,
.mini-tile-corridor{
  display:none!important;
}
.mini-tile-texture{
  opacity:1!important;
  filter:none!important;
}

/* 2. Kafelek wchodzący jest całkowicie poza planszą. */
.top-axis .incoming-tile-preview{
  left:50%!important;
  top:auto!important;
  bottom:calc(100% + 8px)!important;
  transform:translateX(-50%)!important;
}
.bottom-axis .incoming-tile-preview{
  left:50%!important;
  top:calc(100% + 8px)!important;
  bottom:auto!important;
  transform:translateX(-50%)!important;
}
.left-axis .incoming-tile-preview{
  top:50%!important;
  left:auto!important;
  right:calc(100% + 8px)!important;
  transform:translateY(-50%)!important;
}
.right-axis .incoming-tile-preview{
  top:50%!important;
  left:calc(100% + 8px)!important;
  right:auto!important;
  transform:translateY(-50%)!important;
}

/* 3. Diody ruchu: to samo miejsce i wygląd co licznik ataków. */
.token-shell > .movement-dice-pips{
  position:absolute!important;
  left:0!important;
  right:0!important;
  top:4px!important;
  bottom:auto!important;
  margin-left:auto!important;
  margin-right:auto!important;
  width:max-content!important;
  max-width:calc(100% - 8px)!important;
  height:auto!important;
  transform:none!important;
  z-index:116!important;
  display:flex!important;
  flex-direction:row!important;
  align-items:center!important;
  justify-content:center!important;
  gap:5px!important;
  pointer-events:none!important;
}
.token-shell > .movement-dice-pips .token-energy-segment{
  display:block!important;
  position:relative!important;
  width:8px!important;
  height:8px!important;
  flex:0 0 8px!important;
  margin:0!important;
}

/* Przycisk ZOSTAŃ dokładnie na środku pola. */
.stay-on-cell{
  left:50%!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  min-width:58%!important;
}
.stay-on-cell:hover,
.stay-on-cell:focus-visible{
  transform:translate(-50%,-50%) scale(1.04)!important;
}
.stay-on-cell:active{
  transform:translate(-50%,-50%) scale(.95)!important;
}
@keyframes stayOnCellIn{
  from{opacity:0;transform:translate(-50%,-58%) scale(.82)}
  to{opacity:1;transform:translate(-50%,-50%) scale(1)}
}

/* 4. Trasa: idealne proste odcinki, biała, 50%, grubsza, bez cienia. */
.movement-path-layer{
  position:absolute!important;
  inset:0!important;
  z-index:4!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.movement-path-segment{
  position:absolute!important;
  display:block!important;
  background:repeating-linear-gradient(
    90deg,
    rgba(255,255,255,.5) 0 13px,
    transparent 13px 24px
  )!important;
  box-shadow:none!important;
  filter:none!important;
  opacity:1!important;
}
.movement-path-segment.horizontal{
  height:7px!important;
  transform:translateY(-3.5px)!important;
}
.movement-path-segment.vertical{
  width:7px!important;
  transform:translateX(-3.5px)!important;
  background:repeating-linear-gradient(
    180deg,
    rgba(255,255,255,.5) 0 13px,
    transparent 13px 24px
  )!important;
}
.token-shell{z-index:40!important}
.board-object,.key-object,.chest-object{z-index:30!important}

/* Czytelna sylwetka człowieka zamiast kółka i dwóch X. */
.movement-walker{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:34px!important;
  height:46px!important;
  transform:translate(-50%,-50%)!important;
  z-index:48!important;
  pointer-events:none!important;
  filter:none!important;
}
.movement-walker-svg{
  display:block!important;
  width:100%!important;
  height:100%!important;
  overflow:visible!important;
  fill:none!important;
  stroke:#fff!important;
  stroke-width:5!important;
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
  opacity:.9!important;
}
.movement-walker-svg .walker-head{
  fill:#fff!important;
  stroke:#fff!important;
}
.movement-walker-svg .walker-arm-a,
.movement-walker-svg .walker-leg-b{
  transform-origin:24px 23px;
  animation:bsWalkerForward .62s ease-in-out infinite alternate!important;
}
.movement-walker-svg .walker-arm-b,
.movement-walker-svg .walker-leg-a{
  transform-origin:24px 23px;
  animation:bsWalkerBackward .62s ease-in-out infinite alternate!important;
}
@keyframes bsWalkerForward{from{transform:rotate(-12deg)}to{transform:rotate(12deg)}}
@keyframes bsWalkerBackward{from{transform:rotate(12deg)}to{transform:rotate(-12deg)}}

/* 6. Celownik: animacja na faktycznej grafice IMG, bez konfliktu z transformacją centrowania. */
.cell.combat-target:hover .combat-target-marker > img.combat-reticle,
.cell.combat-target:focus-visible .combat-target-marker > img.combat-reticle{
  animation:bsCombatReticleScale 680ms ease-in-out infinite alternate!important;
  transform-origin:center!important;
  will-change:scale!important;
}
@keyframes bsCombatReticleScale{
  from{scale:.86;opacity:.86}
  to{scale:1.18;opacity:1}
}

/* 7. Żółte korytarze: 60% alpha. */
.board .cell > .corridor,
.board .cell > .hub,
body.message-focus-active .board .cell > .corridor,
body.message-focus-active .board .cell > .hub{
  opacity:.6!important;
}

/* 9. Po każdym przesunięciu plansza wraca do pełnej widoczności. */
.board:not(.axis-preview-active) > .cell{
  opacity:1!important;
  visibility:visible!important;
}
body:not(.game-animating) .board > .cell{
  transform:none;
}


/* =========================================================
   BLACKSAW2081 v2.6.24 — poprawki po teście 2.6.23
   ========================================================= */

/* 1. Stos: tylko jeden, pełny kafelek. */
.reserve{
  display:flex!important;
  align-items:center!important;
  overflow:visible!important;
}
.reserve > .mini-tile{
  display:block!important;
}
.mini-tile{
  position:relative!important;
  overflow:hidden!important;
  padding:0!important;
  background:#111!important;
}
.mini-tile-texture{
  position:absolute!important;
  display:block!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  min-width:100%!important;
  min-height:100%!important;
  margin:0!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  background-color:transparent!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:cover!important;
  transform:rotate(var(--mini-rotation)) scale(1.04)!important;
  transform-origin:center!important;
}
.mini-tile[data-tile-type="I"] .mini-tile-texture{background-image:url('../textures/tile_I.jpg')!important}
.mini-tile[data-tile-type="T"] .mini-tile-texture{background-image:url('../textures/tile_T.jpg')!important}
.mini-tile[data-tile-type="L"] .mini-tile-texture{background-image:url('../textures/tile_L.jpg')!important}
.mini-tile[data-tile-type="PLUS"] .mini-tile-texture{background-image:url('../textures/tile_PLUS.jpg')!important}

/* 2. Podgląd kafelka dokładnie na strzałce. */
.shift-arrow{position:relative!important}
.shift-arrow .incoming-tile-preview{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  width:44px!important;
  height:44px!important;
  transform:translate(-50%,-50%)!important;
  z-index:400!important;
  display:grid!important;
  place-items:center!important;
  pointer-events:none!important;
}
.shift-arrow .incoming-tile-preview .mini-tile{
  --mini-size:40px;
  width:40px!important;
  height:40px!important;
  box-shadow:0 0 0 2px rgba(255,208,44,.92),0 0 14px rgba(0,0,0,.95)!important;
}

/* Strzałki idealnie w osi siedmiu pól. */
.top-axis,.bottom-axis{
  display:grid!important;
  grid-template-columns:repeat(7,minmax(0,1fr))!important;
  align-items:center!important;
}
.left-axis,.right-axis{
  display:grid!important;
  grid-template-rows:repeat(7,minmax(0,1fr))!important;
  align-items:center!important;
}
.axis-group{
  width:100%!important;
  height:100%!important;
  display:grid!important;
  place-items:center!important;
  margin:0!important;
  padding:0!important;
}

/* 3. Diody ruchu na górze pionka, jak diody walki. */
.token-shell > .movement-dice-pips{
  position:absolute!important;
  left:50%!important;
  top:3px!important;
  right:auto!important;
  bottom:auto!important;
  transform:translateX(-50%)!important;
  z-index:130!important;
  display:flex!important;
  width:max-content!important;
  height:auto!important;
  gap:4px!important;
  opacity:1!important;
  visibility:visible!important;
  pointer-events:none!important;
}
.movement-dice-pips .movement-die-pip{
  display:block!important;
  width:8px!important;
  height:8px!important;
  flex:0 0 8px!important;
  opacity:1!important;
  visibility:visible!important;
}

/* 5. Biała, gruba, półprzezroczysta trasa pod pionkami i obiektami. */
.movement-path-layer{
  position:absolute!important;
  inset:0!important;
  z-index:12!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.movement-path-segment{
  position:absolute!important;
  display:block!important;
  opacity:1!important;
  filter:none!important;
  box-shadow:none!important;
  animation:movementPathFlow .55s linear infinite!important;
}
.movement-path-segment.horizontal{
  height:8px!important;
  transform:translateY(-4px)!important;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.5) 0 15px,transparent 15px 27px)!important;
  background-size:54px 100%!important;
}
.movement-path-segment.vertical{
  width:8px!important;
  transform:translateX(-4px)!important;
  background:repeating-linear-gradient(180deg,rgba(255,255,255,.5) 0 15px,transparent 15px 27px)!important;
  background-size:100% 54px!important;
}
@keyframes movementPathFlow{
  to{background-position:54px 54px}
}
.cell > .board-object,
.cell > .token-shell{z-index:30!important}

/* 6. Dostarczona ikona pieszego. */
.movement-walker{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:46px!important;
  height:46px!important;
  transform:translate(-50%,-50%)!important;
  z-index:45!important;
  pointer-events:none!important;
  filter:none!important;
}
.movement-walker img{
  display:block!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  filter:drop-shadow(0 2px 3px rgba(0,0,0,.85))!important;
}

/* 7. Podczas rzutu kością celownik i diody są niewidoczne. */
body.message-focus-active .combat-target-marker,
body.message-focus-active .combat-board-dice-pips{
  visibility:hidden!important;
  opacity:0!important;
}

/* Szybsza liczba obrażeń. */
.floating-damage{
  animation-duration:.85s!important;
}

/* 8. Żółte korytarze — 40%. */
.board .cell > .corridor,
.board .cell > .hub,
body.message-focus-active .board .cell > .corridor,
body.message-focus-active .board .cell > .hub{
  opacity:.4!important;
}

/* 10. Podczas tury SI gracz nie może wywoływać hoverów ani podglądów. */
body.ai-turn-active .board,
body.ai-turn-active .axis,
body.ai-turn-active .shift-arrow{
  pointer-events:none!important;
}
.shift-arrow:disabled{
  pointer-events:none!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.25 — poprawki po teście 2.6.24
   ========================================================= */

/* 3. Diody ruchu znikają podczas właściwej animacji pionka. */
body.movement-in-progress .movement-dice-pips,
.moving-player-bundle .movement-dice-pips,
.moving-player-bundle .token-movement-hud{
  display:none!important;
  opacity:0!important;
  visibility:hidden!important;
}

/* 5. Trasa: 80% alpha, glow oraz wyraźnie animowane kreski. */
.movement-path-segment{
  opacity:1!important;
  filter:drop-shadow(0 0 4px rgba(255,255,255,.82))
         drop-shadow(0 0 9px rgba(255,255,255,.42))!important;
  box-shadow:none!important;
  animation:bsMovementPathFlow .42s linear infinite!important;
}
.movement-path-segment.horizontal{
  background:repeating-linear-gradient(
    90deg,
    rgba(255,255,255,.8) 0 15px,
    transparent 15px 27px
  )!important;
  background-size:27px 100%!important;
}
.movement-path-segment.vertical{
  background:repeating-linear-gradient(
    180deg,
    rgba(255,255,255,.8) 0 15px,
    transparent 15px 27px
  )!important;
  background-size:100% 27px!important;
}
@keyframes bsMovementPathFlow{
  from{background-position:0 0}
  to{background-position:27px 27px}
}

/* 6. Ikona pieszego pulsuje spokojnie na polu docelowym. */
.movement-walker{
  animation:bsPedestrianPulse .75s ease-in-out infinite alternate!important;
  transform-origin:center!important;
}
@keyframes bsPedestrianPulse{
  from{transform:translate(-50%,-50%) scale(.9);opacity:.78}
  to{transform:translate(-50%,-50%) scale(1.08);opacity:1}
}

/* 7. Liczba obrażeń zawsze nad pionkiem i dobrze widoczna. */
.token-shell .floating-damage,
.floating-damage-visible{
  position:absolute!important;
  left:50%!important;
  top:42%!important;
  z-index:500!important;
  display:block!important;
  visibility:visible!important;
  opacity:0;
  pointer-events:none!important;
  color:#ff284d!important;
  font-size:clamp(1.35rem,2.8vw,2.25rem)!important;
  font-weight:1000!important;
  line-height:1!important;
  -webkit-text-stroke:1px #fff!important;
  text-shadow:0 3px 0 #52000e,0 0 15px #ff173f!important;
}
.floating-damage-visible.play{
  animation:bsFloatingDamageFast .9s cubic-bezier(.16,.72,.22,1) forwards!important;
}
@keyframes bsFloatingDamageFast{
  0%{opacity:0;transform:translate(-50%,8px) scale(.6)}
  16%{opacity:1;transform:translate(-50%,-6px) scale(1.25)}
  72%{opacity:1;transform:translate(-50%,-45px) scale(1.35)}
  100%{opacity:0;transform:translate(-50%,-72px) scale(1.55)}
}

/* 8. Żółte korytarze — 50%. */
.board .cell > .corridor,
.board .cell > .hub,
body.message-focus-active .board .cell > .corridor,
body.message-focus-active .board .cell > .hub{
  opacity:.5!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.26 — ciągła trasa, puls ikony,
   glow celownika i opcja NIE ATAKUJ
   ========================================================= */

/* 3. Ciągła biała linia: 80% alpha, mocny glow i animowany świetlny przebieg. */
.movement-path-segment{
  overflow:hidden!important;
  background:rgba(255,255,255,.80)!important;
  filter:drop-shadow(0 0 4px rgba(255,255,255,.92))
         drop-shadow(0 0 10px rgba(255,255,255,.58))!important;
  animation:none!important;
}
.movement-path-segment.horizontal{
  height:8px!important;
  background:rgba(255,255,255,.80)!important;
}
.movement-path-segment.vertical{
  width:8px!important;
  background:rgba(255,255,255,.80)!important;
}
.movement-path-segment::after{
  content:""!important;
  position:absolute!important;
  pointer-events:none!important;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,1),transparent)!important;
  filter:blur(1px)!important;
  opacity:.95!important;
}
.movement-path-segment.horizontal::after{
  top:0!important;
  bottom:0!important;
  width:34px!important;
  left:-38px!important;
  animation:bsLineSweepHorizontal .75s linear infinite!important;
}
.movement-path-segment.vertical::after{
  left:0!important;
  right:0!important;
  height:34px!important;
  top:-38px!important;
  background:linear-gradient(180deg,transparent,rgba(255,255,255,1),transparent)!important;
  animation:bsLineSweepVertical .75s linear infinite!important;
}
@keyframes bsLineSweepHorizontal{
  from{left:-38px}
  to{left:calc(100% + 38px)}
}
@keyframes bsLineSweepVertical{
  from{top:-38px}
  to{top:calc(100% + 38px)}
}

/* 4. Pulsowanie przekazanej ikony pieszego. */
.movement-walker{
  animation:none!important;
}
.movement-walker img{
  transform-origin:50% 50%!important;
  animation:bsPedestrianImagePulse .68s ease-in-out infinite alternate!important;
  will-change:transform,filter,opacity!important;
}
@keyframes bsPedestrianImagePulse{
  from{
    transform:scale(.88);
    opacity:.78;
    filter:drop-shadow(0 0 2px rgba(255,205,25,.45)) drop-shadow(0 2px 3px rgba(0,0,0,.85));
  }
  to{
    transform:scale(1.10);
    opacity:1;
    filter:drop-shadow(0 0 10px rgba(255,213,20,.95)) drop-shadow(0 2px 3px rgba(0,0,0,.85));
  }
}

/* 5. Gdy kursor nie jest nad celem, celownik emituje duży, mocny pulsujący glow. */
.cell.combat-target:not(:hover):not(:focus-visible) .combat-reticle{
  animation:bsReticleIdleGlow 1.05s ease-in-out infinite alternate!important;
  transform-origin:center!important;
}
@keyframes bsReticleIdleGlow{
  from{
    transform:scale(.98);
    filter:
      brightness(1)
      drop-shadow(0 0 3px rgba(255,20,45,.45))
      drop-shadow(0 0 8px rgba(255,20,45,.28));
  }
  to{
    transform:scale(1.03);
    filter:
      brightness(1.38)
      drop-shadow(0 0 11px rgba(255,25,48,1))
      drop-shadow(0 0 26px rgba(255,20,45,.95))
      drop-shadow(0 0 46px rgba(238,20,71,.68));
  }
}

/* Hover zachowuje dotychczasową animację powiększania i zmniejszania. */
.cell.combat-target:hover .combat-reticle,
.cell.combat-target:focus-visible .combat-reticle{
  animation:bsCombatReticleScale 680ms ease-in-out infinite alternate!important;
}

/* Przycisk NIE ATAKUJ na pionku aktywnego gracza. */
.combat-skip-on-cell{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  transform:translate(-50%,-50%)!important;
  z-index:125!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-width:68%!important;
  min-height:20px!important;
  padding:4px 8px!important;
  border:1px solid rgba(255,255,255,.62)!important;
  border-radius:999px!important;
  color:#fff!important;
  background:linear-gradient(180deg,rgba(46,28,19,.97),rgba(13,10,8,.97))!important;
  box-shadow:0 5px 13px rgba(0,0,0,.7),0 0 12px rgba(255,142,20,.32)!important;
  font:900 .48rem/1 system-ui,-apple-system,"Segoe UI",sans-serif!important;
  letter-spacing:.055em!important;
  white-space:nowrap!important;
  cursor:pointer!important;
  pointer-events:auto!important;
  animation:bsCombatSkipPulse 1.1s ease-in-out infinite alternate!important;
}
.combat-skip-on-cell:hover,
.combat-skip-on-cell:focus-visible{
  background:linear-gradient(180deg,rgba(238,20,71,.98),rgba(118,7,31,.98))!important;
  box-shadow:0 6px 15px rgba(0,0,0,.72),0 0 18px rgba(238,20,71,.72)!important;
  transform:translate(-50%,-50%) scale(1.04)!important;
}
.combat-skip-on-cell:active{
  transform:translate(-50%,-50%) scale(.96)!important;
}
@keyframes bsCombatSkipPulse{
  from{filter:brightness(.88)}
  to{filter:brightness(1.15)}
}

/* 6. Żółte korytarze — 60%. */
.board .cell > .corridor,
.board .cell > .hub,
body.message-focus-active .board .cell > .corridor,
body.message-focus-active .board .cell > .hub{
  opacity:.6!important;
}


/* =========================================================
   BLACKSAW2081 v2.6.27 — jedna ciągła trasa bez szczelin
   oraz mniejszy, mocniejszy glow celownika
   ========================================================= */

/* Usunięcie poprzednich segmentów DIV. */
.movement-path-layer,
.movement-path-segment{
  display:none!important;
}

/* Jedna ciągła linia SVG: start dokładnie pod pionkiem,
   koniec dokładnie pod środkiem ikony docelowej. */
.movement-path-svg{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  z-index:12!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.movement-path-glow,
.movement-path-line,
.movement-path-pulse{
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
  vector-effect:non-scaling-stroke!important;
}
.movement-path-glow{
  stroke:rgba(255,255,255,.46)!important;
  stroke-width:13!important;
  filter:blur(5px)!important;
}
.movement-path-line{
  stroke:rgba(255,255,255,.82)!important;
  stroke-width:7!important;
  filter:drop-shadow(0 0 4px rgba(255,255,255,.75))!important;
}
.movement-path-pulse{
  stroke:rgba(255,255,255,1)!important;
  stroke-width:4!important;
  stroke-dasharray:24 110!important;
  animation:bsContinuousPathPulse .72s linear infinite!important;
  filter:drop-shadow(0 0 5px rgba(255,255,255,.95))!important;
}
@keyframes bsContinuousPathPulse{
  to{stroke-dashoffset:-134}
}

/* Linia pozostaje pod pionkiem, przedmiotami i ikoną końcową. */
.cell > .board-object,
.cell > .token-shell,
.movement-walker{
  z-index:35!important;
}

/* Mniejszy zasięg glow, ale mocniejsza czerwień.
   Hover pozostaje bez zmian. */
.cell.combat-target:not(:hover):not(:focus-visible) .combat-reticle{
  animation:bsReticleCompactGlow .95s ease-in-out infinite alternate!important;
  transform-origin:center!important;
}
@keyframes bsReticleCompactGlow{
  from{
    transform:scale(.99);
    filter:
      brightness(1.04)
      saturate(1.15)
      drop-shadow(0 0 3px rgba(255,20,45,.55))
      drop-shadow(0 0 6px rgba(255,20,45,.34));
  }
  to{
    transform:scale(1.025);
    filter:
      brightness(1.48)
      saturate(1.5)
      drop-shadow(0 0 6px rgba(255,12,38,1))
      drop-shadow(0 0 12px rgba(255,12,38,.82));
  }
}


/* =========================================================
   BLACKSAW2081 v2.6.28 — pełna ciągła trasa i czarny celownik
   ========================================================= */

/* Jedna pełna linia nad teksturami kafelków, ale pod pionkami,
   przedmiotami i ikoną miejsca docelowego. */
.board{
  isolation:isolate!important;
}
.board > .cell{
  z-index:1;
}
.movement-path-svg{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  z-index:26!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.movement-path-line{
  stroke:rgba(255,255,255,.82)!important;
  stroke-width:8!important;
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
  vector-effect:non-scaling-stroke!important;
  fill:none!important;
  filter:drop-shadow(0 0 4px rgba(255,255,255,.78))
         drop-shadow(0 0 9px rgba(255,255,255,.48))!important;
  animation:none!important;
}
.movement-path-glow,
.movement-path-pulse,
.movement-path-layer,
.movement-path-segment{
  display:none!important;
}

/* Linia nie może zostać przykryta przez zwykłe pola. */
.board > .cell > .tile-texture,
.board > .cell > .hub,
.board > .cell > .corridor,
.board > .cell > .coord{
  z-index:1!important;
}
.board > .cell > .board-object{
  z-index:38!important;
}
.board > .cell > .token-shell,
.board > .cell > .token{
  z-index:42!important;
}
.movement-walker{
  z-index:46!important;
}

/* Czarny sam celownik; czerwony glow pozostaje jako sygnał aktywnego celu. */
.combat-reticle{
  filter:brightness(0) saturate(0)
         drop-shadow(0 0 4px rgba(255,18,42,.72))
         drop-shadow(0 0 8px rgba(255,18,42,.48))!important;
}
.cell.combat-target:not(:hover):not(:focus-visible) .combat-reticle{
  animation:bsBlackReticleIdle .95s ease-in-out infinite alternate!important;
}
@keyframes bsBlackReticleIdle{
  from{
    transform:scale(.99);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 3px rgba(255,15,40,.55))
           drop-shadow(0 0 6px rgba(255,15,40,.34));
  }
  to{
    transform:scale(1.025);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 6px rgba(255,8,32,1))
           drop-shadow(0 0 12px rgba(255,8,32,.82));
  }
}
.cell.combat-target:hover .combat-reticle,
.cell.combat-target:focus-visible .combat-reticle{
  animation:bsBlackReticleHover 680ms ease-in-out infinite alternate!important;
}
@keyframes bsBlackReticleHover{
  from{
    transform:scale(.86);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 5px rgba(255,10,38,.72));
  }
  to{
    transform:scale(1.18);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 11px rgba(255,8,32,1))
           drop-shadow(0 0 16px rgba(255,8,32,.72));
  }
}


/* =========================================================
   BLACKSAW2081 v2.6.30 — poprawiona trasa i celownik
   ========================================================= */

/* Pola nie tworzą osobnych warstw, więc linia może leżeć nad teksturami,
   a pionki/przedmioty nadal mogą leżeć nad linią. */
.board > .cell,
.board > .cell.move-path-preview,
.board > .cell.move-path-target{
  z-index:auto!important;
}

/* Jedna naprawdę ciągła linia: bez dasharray, bez animacji rysowania,
   bez zaokrąglania narożników i bez skosów. */
.movement-path-svg{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  z-index:25!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.movement-path-line{
  stroke:#fff!important;
  stroke-opacity:1!important;
  stroke-width:7!important;
  stroke-linecap:butt!important;
  stroke-linejoin:miter!important;
  stroke-miterlimit:10!important;
  stroke-dasharray:none!important;
  stroke-dashoffset:0!important;
  animation:none!important;
  fill:none!important;
  filter:drop-shadow(0 0 4px rgba(255,255,255,.68))!important;
}

/* Tekstury pod linią; pionki i obiekty nad linią. */
.board > .cell > .tile-texture,
.board > .cell > .hub,
.board > .cell > .corridor,
.board > .cell > .coord{
  z-index:1!important;
}
.board > .cell > .board-object{
  z-index:38!important;
}
.board > .cell > .token-shell,
.board > .cell > .token{
  z-index:42!important;
}

/* Ikona celu jest pozycjonowana względem całej planszy dokładnie w środku pola
   i zawsze znajduje się nad końcem linii. */
.board > .movement-walker{
  position:absolute!important;
  width:34px!important;
  height:46px!important;
  transform:translate(-50%,-50%)!important;
  z-index:50!important;
  pointer-events:none!important;
  filter:none!important;
}
.board > .movement-walker img{
  display:block!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
}

/* Celownik płynnie przechodzi z koloru oryginalnego do czerni.
   Glow jest wyraźniejszy i mocniejszy niż w v2.6.29. */
.combat-reticle{
  transform-origin:center!important;
  will-change:filter,transform!important;
  animation:bsReticleColorToBlack 1.15s ease-in-out infinite alternate!important;
}
@keyframes bsReticleColorToBlack{
  from{
    transform:scale(.99);
    filter:brightness(1) saturate(1)
           drop-shadow(0 0 7px rgba(255,18,42,.86))
           drop-shadow(0 0 15px rgba(255,18,42,.62));
  }
  to{
    transform:scale(1.035);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 10px rgba(255,8,32,1))
           drop-shadow(0 0 22px rgba(255,8,32,.82));
  }
}
.cell.combat-target:not(:hover):not(:focus-visible) .combat-reticle{
  animation:bsReticleColorToBlack 1.15s ease-in-out infinite alternate!important;
}
.cell.combat-target:hover .combat-reticle,
.cell.combat-target:focus-visible .combat-reticle{
  animation:bsReticleHoverColorToBlack .68s ease-in-out infinite alternate!important;
}
@keyframes bsReticleHoverColorToBlack{
  from{
    transform:scale(.88);
    filter:brightness(1) saturate(1)
           drop-shadow(0 0 9px rgba(255,18,42,.92))
           drop-shadow(0 0 18px rgba(255,18,42,.72));
  }
  to{
    transform:scale(1.17);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 13px rgba(255,8,32,1))
           drop-shadow(0 0 27px rgba(255,8,32,.9));
  }
}

/* BLACKSAW2081 v2.6.31 — final override; szczegóły w v2.css */
.movement-path-svg{display:none!important;}
.cell{isolation:isolate!important;}
.movement-path-cell-overlay{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;z-index:24!important;pointer-events:none!important;overflow:visible!important;}
.movement-path-cell-overlay .movement-path-line{stroke:#fff!important;stroke-opacity:1!important;stroke-width:8!important;stroke-linecap:butt!important;stroke-linejoin:miter!important;stroke-miterlimit:10!important;vector-effect:non-scaling-stroke!important;fill:none!important;stroke-dasharray:none!important;stroke-dashoffset:0!important;animation:none!important;filter:drop-shadow(0 0 4px rgba(255,255,255,.72))!important;}
.cell > .tile-texture,.cell > .hub,.cell > .corridor,.cell > .coord{z-index:1!important;}
.cell > .board-object{z-index:38!important;}
.cell > .token-shell,.cell > .token{z-index:42!important;}
.cell > .movement-walker{position:absolute!important;left:50%!important;top:50%!important;width:34px!important;height:46px!important;transform:translate(-50%,-50%)!important;z-index:52!important;pointer-events:none!important;filter:none!important;}
.cell > .movement-walker img{display:block!important;width:100%!important;height:100%!important;object-fit:contain!important;}
.combat-reticle{transform-origin:50% 50%!important;will-change:filter,transform!important;animation:bsReticleV2631 1.05s ease-in-out infinite alternate!important;}
.cell.combat-target:not(:hover):not(:focus-visible) .combat-reticle{animation:bsReticleV2631 1.05s ease-in-out infinite alternate!important;}
.cell.combat-target:hover .combat-reticle,.cell.combat-target:focus-visible .combat-reticle{animation:bsReticleV2631Hover .62s ease-in-out infinite alternate!important;}
@keyframes bsReticleV2631{0%{transform:scale(.98);filter:brightness(1.18) saturate(1.35) contrast(1.08) drop-shadow(0 0 8px rgba(255,20,35,.95)) drop-shadow(0 0 18px rgba(255,10,30,.78)) drop-shadow(0 0 30px rgba(238,20,71,.52));}100%{transform:scale(1.04);filter:brightness(0) saturate(0) contrast(1.25) drop-shadow(0 0 10px rgba(255,18,38,1)) drop-shadow(0 0 22px rgba(255,8,28,.88)) drop-shadow(0 0 38px rgba(238,20,71,.62));}}
@keyframes bsReticleV2631Hover{0%{transform:scale(.88);filter:brightness(1.22) saturate(1.45) contrast(1.1) drop-shadow(0 0 10px rgba(255,22,38,1)) drop-shadow(0 0 22px rgba(255,8,28,.88)) drop-shadow(0 0 36px rgba(238,20,71,.62));}100%{transform:scale(1.18);filter:brightness(0) saturate(0) contrast(1.3) drop-shadow(0 0 13px rgba(255,18,38,1)) drop-shadow(0 0 28px rgba(255,8,28,.96)) drop-shadow(0 0 46px rgba(238,20,71,.72));}}

/* BLACKSAW2081 v2.6.32 — final override */
.board > .cell.move-path-target,.board > .cell.move-path-preview{transform:none!important;scale:1!important;}
.board > .cell.move-path-target{z-index:auto!important;}
.movement-path-cell-overlay .movement-path-line{stroke-linecap:round!important;stroke-linejoin:round!important;stroke-miterlimit:1!important;}
.combat-reticle{transform-origin:50% 50%!important;opacity:1!important;filter:drop-shadow(0 0 6px #ff1638) drop-shadow(0 0 14px #ff1638) drop-shadow(0 0 26px #ee1447)!important;}
.cell.combat-target:not(:hover):not(:focus-visible) .combat-reticle{animation:bsReticleIdleRotate 1.65s linear infinite!important;opacity:1!important;filter:drop-shadow(0 0 6px #ff1638) drop-shadow(0 0 14px #ff1638) drop-shadow(0 0 26px #ee1447)!important;}
.cell.combat-target:hover .combat-reticle,.cell.combat-target:focus-visible .combat-reticle{animation:none!important;transform:rotate(0deg)!important;opacity:1!important;filter:drop-shadow(0 0 6px #ff1638) drop-shadow(0 0 14px #ff1638) drop-shadow(0 0 26px #ee1447)!important;}
@keyframes bsReticleIdleRotate{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}


/* BLACKSAW2081 v2.6.33 — niezawodny obrót celownika */
.combat-target-marker .combat-reticle-rotor{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:clamp(38px,4.2vw,54px)!important;
  height:clamp(38px,4.2vw,54px)!important;
  translate:-50% -50%!important;
  transform-origin:50% 50%!important;
  z-index:1!important;
  pointer-events:none!important;
  animation:bsReticleRotorV2633 1.35s linear infinite!important;
  will-change:transform!important;
}
.combat-target-marker .combat-reticle-rotor > .combat-reticle{
  position:static!important;
  left:auto!important;
  top:auto!important;
  width:100%!important;
  height:100%!important;
  translate:none!important;
  transform:none!important;
  animation:none!important;
  opacity:1!important;
  filter:drop-shadow(0 0 6px #ff1638) drop-shadow(0 0 14px #ff1638) drop-shadow(0 0 26px #ee1447)!important;
}
.cell.combat-target:hover .combat-reticle-rotor,
.cell.combat-target:focus-visible .combat-reticle-rotor{
  animation-play-state:paused!important;
}
@keyframes bsReticleRotorV2633{
  from{transform:rotate(0deg)!important}
  to{transform:rotate(360deg)!important}
}
@media(max-width:720px){
  .combat-target-marker .combat-reticle-rotor{width:40px!important;height:40px!important}
}
@media(prefers-reduced-motion:reduce){
  .combat-target-marker .combat-reticle-rotor{animation:bsReticleRotorV2633 1.35s linear infinite!important}
}


/* BLACKSAW2081 v2.6.34 — obrót 360° celownika + przywrócone powiększenie hover */
.combat-target-marker .combat-reticle-rotor{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:clamp(38px,4.2vw,54px)!important;
  height:clamp(38px,4.2vw,54px)!important;
  translate:none!important;
  transform:translate(-50%,-50%) rotate(0deg)!important;
  transform-origin:50% 50%!important;
  z-index:1!important;
  pointer-events:none!important;
  animation:bsReticleRotorV2634 1.25s linear infinite!important;
  will-change:transform!important;
}
.combat-target-marker .combat-reticle-rotor > .combat-reticle{
  display:block!important;
  position:static!important;
  width:100%!important;
  height:100%!important;
  transform:scale(1)!important;
  transform-origin:50% 50%!important;
  transition:transform .18s ease-out!important;
  animation:none!important;
  opacity:1!important;
  filter:drop-shadow(0 0 6px #ff1638) drop-shadow(0 0 14px #ff1638) drop-shadow(0 0 26px #ee1447)!important;
}
.cell.combat-target:hover .combat-reticle-rotor,
.cell.combat-target:focus-visible .combat-reticle-rotor{
  animation:none!important;
  transform:translate(-50%,-50%) rotate(0deg) scale(1.18)!important;
}
.cell.combat-target:hover .combat-reticle-rotor > .combat-reticle,
.cell.combat-target:focus-visible .combat-reticle-rotor > .combat-reticle{
  transform:scale(1.08)!important;
}
@keyframes bsReticleRotorV2634{
  0%{transform:translate(-50%,-50%) rotate(0deg)}
  100%{transform:translate(-50%,-50%) rotate(360deg)}
}
@media(max-width:720px){
  .combat-target-marker .combat-reticle-rotor{width:40px!important;height:40px!important}
}
@media(prefers-reduced-motion:reduce){
  .combat-target-marker .combat-reticle-rotor{animation:bsReticleRotorV2634 1.25s linear infinite!important}
}

/* BLACKSAW2081 v2.6.35 — pewny obrót 360° i puls hover w pętli */
.combat-target-marker .combat-reticle-rotor{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:clamp(38px,4.2vw,54px)!important;
  height:clamp(38px,4.2vw,54px)!important;
  translate:-50% -50%!important;
  transform:none!important;
  rotate:0deg;
  scale:1;
  transform-origin:50% 50%!important;
  z-index:1!important;
  pointer-events:none!important;
  animation:bsReticleRotorV2635 1.25s linear infinite!important;
  will-change:rotate!important;
}
.combat-target-marker .combat-reticle-rotor > .combat-reticle{
  display:block!important;
  position:static!important;
  width:100%!important;
  height:100%!important;
  margin:0!important;
  translate:none!important;
  transform:none!important;
  rotate:0deg!important;
  scale:1;
  transform-origin:50% 50%!important;
  animation:none!important;
  opacity:1!important;
  filter:drop-shadow(0 0 6px #ff1638) drop-shadow(0 0 14px #ff1638) drop-shadow(0 0 26px #ee1447)!important;
  will-change:scale!important;
}
.cell.combat-target:hover .combat-reticle-rotor,
.cell.combat-target:focus-visible .combat-reticle-rotor{
  animation-play-state:paused!important;
  rotate:0deg;
}
.cell.combat-target:hover .combat-reticle-rotor > .combat-reticle,
.cell.combat-target:focus-visible .combat-reticle-rotor > .combat-reticle{
  animation:bsReticleHoverPulseV2635 .72s ease-in-out infinite alternate!important;
}
@keyframes bsReticleRotorV2635{
  from{rotate:0deg}
  to{rotate:360deg}
}
@keyframes bsReticleHoverPulseV2635{
  from{scale:.92}
  to{scale:1.18}
}
@media(max-width:720px){
  .combat-target-marker .combat-reticle-rotor{width:40px!important;height:40px!important}
}
@media(prefers-reduced-motion:reduce){
  .combat-target-marker .combat-reticle-rotor{animation:bsReticleRotorV2635 1.25s linear infinite!important}
  .cell.combat-target:hover .combat-reticle-rotor > .combat-reticle,
  .cell.combat-target:focus-visible .combat-reticle-rotor > .combat-reticle{
    animation:bsReticleHoverPulseV2635 .72s ease-in-out infinite alternate!important;
  }
}

/* BLACKSAW2081 v2.6.36 — celownik zawsze na środku pola + szybszy puls hover */
.cell > .combat-target-marker{position:absolute!important;inset:0!important;left:0!important;top:0!important;width:100%!important;height:100%!important;transform:none!important;display:block!important;z-index:115!important;pointer-events:none!important}
.cell > .combat-target-marker .combat-reticle-rotor{position:absolute!important;left:50%!important;top:50%!important;translate:-50% -50%!important;transform:none!important;rotate:0deg;scale:1;transform-origin:50% 50%!important;animation:bsReticleRotorV2636 1.25s linear infinite!important}
.cell.combat-target:hover > .combat-target-marker .combat-reticle-rotor,.cell.combat-target:focus-visible > .combat-target-marker .combat-reticle-rotor{animation-play-state:paused!important;left:50%!important;top:50%!important;translate:-50% -50%!important;rotate:0deg}
.cell.combat-target:hover > .combat-target-marker .combat-reticle,.cell.combat-target:focus-visible > .combat-target-marker .combat-reticle{animation:bsReticleHoverPulseV2636 .42s ease-in-out infinite alternate!important;transform-origin:50% 50%!important}
@keyframes bsReticleRotorV2636{from{rotate:0deg}to{rotate:360deg}}
@keyframes bsReticleHoverPulseV2636{from{scale:.90}to{scale:1.20}}
