/* BLACKSAW2081 LAB 2.0 — stabilny, responsywny frontend planszy */
:root{
  --bs-board-size:540px;
  --bs-arrow-size:46px;
  --bs-board-gap:7px;
}

html,body{min-height:100%;}
body{
  overflow-x:hidden;
  background-image:
    linear-gradient(rgba(2,4,7,.16),rgba(2,4,7,.22)),
    url('../images/blacksaw_background_v266.jpg')!important;
  background-position:center top!important;
  background-size:cover!important;
  background-attachment:fixed!important;
}
.shell{width:min(100%,1600px);margin-inline:auto;}

/* Główna kolumna gry pozostaje elastyczna, panel boczny ma stałą szerokość. */
.game-layout{
  display:grid!important;
  grid-template-columns:minmax(0,1fr) minmax(310px,345px)!important;
  gap:16px!important;
  align-items:start!important;
  min-width:0!important;
}
.board-column{
  width:100%!important;
  min-width:0!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:flex-start!important;
  gap:6px!important;
}
.board-legend{
  width:min(100%,calc(var(--bs-board-size) + 2 * var(--bs-arrow-size) + 2 * var(--bs-board-gap)))!important;
  min-height:18px;
}

/* Jeden niezależny grid 3×3: góra / lewo+plansza+prawo / dół. */
.board-wrap,
.board-wrap.shift-controls-hidden,
.board-wrap.shift-controls-visible{
  --board-size:var(--bs-board-size)!important;
  box-sizing:border-box!important;
  display:grid!important;
  grid-template-columns:var(--bs-arrow-size) var(--bs-board-size) var(--bs-arrow-size)!important;
  grid-template-rows:var(--bs-arrow-size) var(--bs-board-size) var(--bs-arrow-size)!important;
  grid-template-areas:
    ". top ."
    "left board right"
    ". bottom ."!important;
  gap:var(--bs-board-gap)!important;
  width:calc(var(--bs-board-size) + 2 * var(--bs-arrow-size) + 2 * var(--bs-board-gap))!important;
  height:calc(var(--bs-board-size) + 2 * var(--bs-arrow-size) + 2 * var(--bs-board-gap))!important;
  min-width:0!important;
  min-height:0!important;
  margin:0 auto!important;
  padding:0!important;
  align-content:center!important;
  justify-content:center!important;
  overflow:visible!important;
  transition:none!important;
}

.board{
  grid-area:board!important;
  grid-column:auto!important;
  grid-row:auto!important;
  width:var(--bs-board-size)!important;
  height:var(--bs-board-size)!important;
  min-width:0!important;
  min-height:0!important;
  display:grid!important;
  grid-template-columns:repeat(7,minmax(0,1fr))!important;
  grid-template-rows:repeat(7,minmax(0,1fr))!important;
  aspect-ratio:1/1!important;
  overflow:visible!important;
}
.cell{width:auto!important;height:auto!important;min-width:0!important;min-height:0!important;}

.axis{
  display:grid!important;
  gap:3px!important;
  width:auto!important;
  height:auto!important;
  min-width:0!important;
  min-height:0!important;
  overflow:visible!important;
}
.top-axis{
  grid-area:top!important;
  grid-column:auto!important;
  grid-row:auto!important;
  grid-template-columns:repeat(7,minmax(0,1fr))!important;
}
.bottom-axis{
  grid-area:bottom!important;
  grid-column:auto!important;
  grid-row:auto!important;
  grid-template-columns:repeat(7,minmax(0,1fr))!important;
}
.left-axis{
  grid-area:left!important;
  grid-column:auto!important;
  grid-row:auto!important;
  grid-template-rows:repeat(7,minmax(0,1fr))!important;
}
.right-axis{
  grid-area:right!important;
  grid-column:auto!important;
  grid-row:auto!important;
  grid-template-rows:repeat(7,minmax(0,1fr))!important;
}
.axis-group{display:flex!important;min-width:0!important;min-height:0!important;}

/* Kontrolki zostają w układzie także poza fazą modyfikacji — tylko znikają wizualnie. */
.board-wrap.shift-controls-hidden .axis{
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
  transform:none!important;
}
.board-wrap.shift-controls-visible .axis{
  opacity:1!important;
  visibility:visible!important;
  pointer-events:auto!important;
  transform:none!important;
}

/* Jedna grafika przycisku, obracana wewnątrz kontrolki. */
.shift-arrow{
  position:relative!important;
  display:grid!important;
  place-items:center!important;
  width:100%!important;
  height:100%!important;
  min-width:0!important;
  min-height:0!important;
  padding:0!important;
  border:0!important;
  border-radius:8px!important;
  background:transparent!important;
  overflow:visible!important;
  box-shadow:none!important;
}
.shift-arrow .shift-arrow-icon{
  position:absolute!important;
  inset:-7px!important;
  display:block!important;
  background:url('../images/shift_arrow_up.png') center/contain no-repeat!important;
  filter:drop-shadow(0 8px 8px rgba(0,0,0,.95)) drop-shadow(0 0 8px rgba(255,45,10,.68))!important;
  transform-origin:center!important;
  transition:filter .16s ease,transform .16s ease!important;
}
.shift-arrow .shift-arrow-icon svg{display:none!important;}
.shift-arrow.arrow-up .shift-arrow-icon{transform:rotate(0deg)!important;}
.shift-arrow.arrow-down .shift-arrow-icon{transform:rotate(180deg)!important;}
.shift-arrow.arrow-left .shift-arrow-icon{transform:rotate(-90deg)!important;}
.shift-arrow.arrow-right .shift-arrow-icon{transform:rotate(90deg)!important;}
.shift-arrow:disabled{opacity:.42!important;filter:grayscale(.55)!important;}
.shift-arrow:not(:disabled):hover .shift-arrow-icon,
.shift-arrow:not(:disabled):focus-visible .shift-arrow-icon,
.shift-arrow.is-arrow-active:not(:disabled) .shift-arrow-icon{
  filter:brightness(1.22) saturate(1.2) drop-shadow(0 12px 10px rgba(0,0,0,1)) drop-shadow(0 0 15px rgba(255,44,8,.98))!important;
}
.shift-arrow.arrow-pressed .shift-arrow-icon{filter:brightness(1.35) drop-shadow(0 4px 5px rgba(0,0,0,.95)) drop-shadow(0 0 18px #ff3a0a)!important;}
.shift-arrow .shift-arrow-fire{display:none!important;}
.shift-arrow .shift-arrow-sparks{z-index:4!important;}

/* Pionki 2.0 — przezroczyste sprite’y zamiast kolorowych kół. */
.token{
  width:82%!important;
  height:82%!important;
  left:9%!important;
  top:9%!important;
  border:0!important;
  border-radius:0!important;
  background-color:transparent!important;
  background-repeat:no-repeat!important;
  background-position:center!important;
  background-size:contain!important;
  color:transparent!important;
  overflow:visible!important;
  filter:drop-shadow(0 5px 5px rgba(0,0,0,.95));
}
.token.p1{background-image:url('../images/player_orange.png')!important;}
.token.p2{background-image:url('../images/player_blue.png')!important;}
.token-name{display:none!important;}
.token-hp{color:#fff!important;top:88%!important;font-size:clamp(.42rem,.55vw,.6rem)!important;}
.token.active-token{
  outline:0!important;
  box-shadow:none!important;
  filter:drop-shadow(0 0 6px #fff) drop-shadow(0 0 13px var(--accent)) drop-shadow(0 7px 6px rgba(0,0,0,.95))!important;
}
.token.p2.active-token{filter:drop-shadow(0 0 6px #fff) drop-shadow(0 0 13px var(--blue)) drop-shadow(0 7px 6px rgba(0,0,0,.95))!important;}

/* Panel boczny może przewijać się sam na niższych ekranach. */
.panel{max-height:calc(100dvh - 220px);overflow:auto;overscroll-behavior:contain;}

@media(max-width:1050px){
  .game-layout{grid-template-columns:minmax(0,1fr) 300px!important;gap:10px!important;}
}
@media(max-width:860px){
  .game-layout{grid-template-columns:1fr!important;}
  .panel{max-height:none;overflow:visible;}
  .board-column{order:1;}
  .panel{order:2;}
}
@media(max-width:560px){
  :root{--bs-arrow-size:38px;--bs-board-gap:4px;}
  .board-wrap,.board-wrap.shift-controls-hidden,.board-wrap.shift-controls-visible{
    grid-template-columns:var(--bs-arrow-size) var(--bs-board-size) var(--bs-arrow-size)!important;
    grid-template-rows:var(--bs-arrow-size) var(--bs-board-size) var(--bs-arrow-size)!important;
    gap:var(--bs-board-gap)!important;
  }
  .shift-arrow .shift-arrow-icon{inset:-5px!important;}
}

/* BLACKSAW2081 LAB 2.0.1 — korekta przypisania elementów do obszarów CSS Grid.
   W 2.0.0 deklaracje grid-column:auto/grid-row:auto nadpisywały grid-area,
   przez co plansza i osie były automatycznie rozmieszczane w złych komórkach. */
.board-wrap > .top-axis{
  grid-area:top!important;
  grid-column:2!important;
  grid-row:1!important;
}
.board-wrap > .left-axis{
  grid-area:left!important;
  grid-column:1!important;
  grid-row:2!important;
}
.board-wrap > .board{
  grid-area:board!important;
  grid-column:2!important;
  grid-row:2!important;
}
.board-wrap > .right-axis{
  grid-area:right!important;
  grid-column:3!important;
  grid-row:2!important;
}
.board-wrap > .bottom-axis{
  grid-area:bottom!important;
  grid-column:2!important;
  grid-row:3!important;
}

/* Każda oś wypełnia wyłącznie własną komórkę grida. */
.board-wrap > .top-axis,
.board-wrap > .bottom-axis{
  width:var(--bs-board-size)!important;
  height:var(--bs-arrow-size)!important;
}
.board-wrap > .left-axis,
.board-wrap > .right-axis{
  width:var(--bs-arrow-size)!important;
  height:var(--bs-board-size)!important;
}
.board-wrap > .board{
  width:var(--bs-board-size)!important;
  height:var(--bs-board-size)!important;
}

/* Moduł planszy pozostaje wycentrowany w dostępnej kolumnie i nie nachodzi na panel. */
.board-column{
  overflow:visible!important;
  justify-self:stretch!important;
}
.board-wrap{
  max-width:100%!important;
  flex:none!important;
  position:relative!important;
}
.game-layout > .panel{
  position:relative!important;
  z-index:20!important;
}
.board-wrap,
.board-wrap .axis,
.board-wrap .board{
  z-index:auto;
}
.board-wrap .board{z-index:2!important;}
.board-wrap .axis{z-index:3!important;}

/* =========================================================
   BLACKSAW2081 LAB 2.1.0
   Trzykolumnowy interfejs: HUD po lewej, plansza pośrodku,
   panel misji po prawej. Pełnowymiarowe i klikalne strzałki.
   ========================================================= */

/* Po przeniesieniu HUD-u shell ma już tylko nagłówek i obszar gry. */
.shell{
  grid-template-rows:auto minmax(0,1fr)!important;
  gap:8px!important;
  max-width:1660px!important;
}

.game-layout{
  display:grid!important;
  grid-template-columns:minmax(285px,330px) minmax(0,1fr) minmax(300px,335px)!important;
  gap:14px!important;
  align-items:start!important;
  min-height:0!important;
  height:100%!important;
}

.left-hud{
  min-width:0;
  max-height:calc(100dvh - 72px);
  display:flex;
  flex-direction:column;
  gap:8px;
  overflow:auto;
  overscroll-behavior:contain;
  padding-right:2px;
}

/* Pasek tury staje się czytelnym panelem pionowym. */
.left-hud .turn-command{
  display:flex!important;
  flex-direction:column!important;
  align-items:stretch!important;
  gap:9px!important;
  padding:10px!important;
}
.left-hud .turn-summary{
  grid-template-columns:auto minmax(0,1fr)!important;
  gap:3px 9px!important;
}
.left-hud .turn-number{
  padding:8px 9px!important;
}
.left-hud .turn-summary strong{
  font-size:.92rem!important;
}
.left-hud .turn-hint{
  white-space:normal!important;
  line-height:1.25!important;
}
.left-hud .phase-track{
  grid-template-columns:1fr!important;
  gap:5px!important;
}
.left-hud .phase-step{
  min-height:34px!important;
  padding:6px 8px!important;
}
.left-hud .phase-step b{display:block!important;}

/* Karty graczy jedna pod drugą, bez ściskania statystyk. */
.left-hud .player-panels{
  display:grid!important;
  grid-template-columns:1fr!important;
  gap:7px!important;
}
.left-hud .player-stats{
  grid-template-columns:1fr 1fr!important;
}
.left-hud .player-stats>span:nth-child(3),
.left-hud .player-stats>span:nth-child(4){
  grid-column:auto!important;
}
.left-hud .mini-mission{
  white-space:normal!important;
  flex-wrap:wrap!important;
}
.left-hud .board-legend{
  width:100%!important;
  justify-content:flex-start!important;
  padding:7px 8px;
  border:1px solid #202a37;
  border-radius:9px;
  background:rgba(11,16,23,.88);
}

.board-column{
  grid-column:2!important;
  min-width:0!important;
  height:100%!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  padding-top:0!important;
  padding-bottom:0!important;
}

.game-layout > .panel{
  grid-column:3!important;
  max-height:calc(100dvh - 72px)!important;
}

/* Wszystkie cztery osie mają identyczną geometrię i pełne pole kliknięcia. */
.board-wrap{
  isolation:isolate!important;
}
.board-wrap > .axis{
  position:relative!important;
  overflow:visible!important;
  z-index:12!important;
}
.board-wrap > .top-axis,
.board-wrap > .bottom-axis{
  align-items:stretch!important;
}
.board-wrap > .left-axis,
.board-wrap > .right-axis{
  align-items:stretch!important;
}
.board-wrap .axis-group{
  position:relative!important;
  width:100%!important;
  height:100%!important;
  overflow:visible!important;
}
.board-wrap .shift-arrow{
  position:relative!important;
  inset:auto!important;
  display:block!important;
  width:100%!important;
  height:100%!important;
  min-width:100%!important;
  min-height:100%!important;
  padding:0!important;
  margin:0!important;
  border:0!important;
  border-radius:8px!important;
  background:transparent!important;
  overflow:visible!important;
  opacity:1!important;
  pointer-events:auto!important;
  touch-action:manipulation!important;
  cursor:pointer!important;
  z-index:20!important;
}
.board-wrap .shift-arrow:disabled{
  pointer-events:none!important;
  opacity:.42!important;
}

/* Wyłączamy historyczne warstwy ikony i rysujemy jedną pewną grafikę w ::before. */
.board-wrap .shift-arrow > .shift-arrow-icon,
.board-wrap .shift-arrow > .shift-arrow-fire{
  display:none!important;
}
.board-wrap .shift-arrow::before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  inset:-6px!important;
  width:auto!important;
  height:auto!important;
  border:0!important;
  border-radius:0!important;
  opacity:1!important;
  background:url('../images/shift_arrow_up.png') center/contain no-repeat!important;
  box-shadow:none!important;
  filter:drop-shadow(0 8px 8px rgba(0,0,0,.98)) drop-shadow(0 0 9px rgba(255,45,10,.72))!important;
  transform-origin:50% 50%!important;
  pointer-events:none!important;
  z-index:2!important;
  transition:filter .16s ease,transform .16s ease!important;
  animation:none!important;
}
.board-wrap .shift-arrow.arrow-up::before{transform:rotate(0deg)!important;}
.board-wrap .shift-arrow.arrow-down::before{transform:rotate(180deg)!important;}
.board-wrap .shift-arrow.arrow-left::before{transform:rotate(-90deg)!important;}
.board-wrap .shift-arrow.arrow-right::before{transform:rotate(90deg)!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{
  filter:brightness(1.25) saturate(1.18) drop-shadow(0 11px 9px rgba(0,0,0,1)) drop-shadow(0 0 16px rgba(255,44,8,1))!important;
}
.board-wrap .shift-arrow:focus-visible{
  outline:2px solid #fff!important;
  outline-offset:1px!important;
}

/* Zatrzymujemy stare animacje całego przycisku, które mogły przesuwać pole kliknięcia. */
.board-wrap .axis .shift-arrow,
.board-wrap .axis .shift-arrow:hover,
.board-wrap .axis .shift-arrow:focus-visible,
.board-wrap .axis .shift-arrow.is-arrow-active{
  animation:none!important;
  transform:none!important;
}
.board-wrap .shift-arrow.arrow-pressed::before,
.board-wrap .shift-arrow.action-confirmed::before{
  transform:scale(.91) rotate(0deg)!important;
}
.board-wrap .shift-arrow.arrow-down.arrow-pressed::before,
.board-wrap .shift-arrow.arrow-down.action-confirmed::before{transform:scale(.91) rotate(180deg)!important;}
.board-wrap .shift-arrow.arrow-left.arrow-pressed::before,
.board-wrap .shift-arrow.arrow-left.action-confirmed::before{transform:scale(.91) rotate(-90deg)!important;}
.board-wrap .shift-arrow.arrow-right.arrow-pressed::before,
.board-wrap .shift-arrow.arrow-right.action-confirmed::before{transform:scale(.91) rotate(90deg)!important;}

/* Iskry nie mogą przechwytywać kliknięcia. */
.board-wrap .shift-arrow-sparks,
.board-wrap .shift-arrow-sparks::before,
.board-wrap .shift-arrow-sparks::after{
  pointer-events:none!important;
}

/* Węższe laptopy: HUD-y lekko zwężone, plansza nadal pośrodku. */
@media(max-width:1280px) and (min-width:981px){
  .game-layout{
    grid-template-columns:270px minmax(0,1fr) 295px!important;
    gap:9px!important;
  }
  .left-hud .turn-command{padding:8px!important;}
  .left-hud .player-card{padding:6px 7px!important;}
}

/* Tablet i telefon: logiczna kolejność HUD → plansza → panel prawy. */
@media(max-width:980px){
  .shell{
    height:auto!important;
    min-height:100dvh!important;
    overflow:visible!important;
    grid-template-rows:auto auto!important;
  }
  .game-layout{
    grid-template-columns:1fr!important;
    height:auto!important;
    justify-items:center!important;
  }
  .left-hud,
  .board-column,
  .game-layout > .panel{
    grid-column:1!important;
    width:min(100%,760px)!important;
    max-height:none!important;
    overflow:visible!important;
  }
  .left-hud{order:1;}
  .board-column{order:2;}
  .game-layout > .panel{order:3;}
  .left-hud .phase-track{grid-template-columns:repeat(4,1fr)!important;}
  .left-hud .phase-step{justify-content:center!important;}
  .left-hud .phase-step b{display:none!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.1.1 — większe i czytelne pionki
   - bez kolorowej poświaty pod postaciami,
   - oba pionki jednakowo jasne,
   - większa sylwetka w obrębie pola.
   ========================================================= */
.token-shell{
  overflow:visible!important;
}
.token-shell::before,
.token-shell::after{
  content:none!important;
  display:none!important;
  box-shadow:none!important;
  background:none!important;
  filter:none!important;
}
.token-shell > .token,
.token{
  width:112%!important;
  height:112%!important;
  max-width:none!important;
  max-height:none!important;
  left:auto!important;
  top:auto!important;
  inset:auto!important;
  opacity:1!important;
  background-size:contain!important;
  background-position:center center!important;
  filter:drop-shadow(0 5px 4px rgba(0,0,0,.88))!important;
  box-shadow:none!important;
  outline:0!important;
  animation:none!important;
  transform:none!important;
}
.token.active-token,
.token.p1.active-token,
.token.p2.active-token{
  opacity:1!important;
  outline:0!important;
  box-shadow:none!important;
  animation:none!important;
  transform:none!important;
  filter:drop-shadow(0 5px 4px rgba(0,0,0,.88))!important;
}
.cell:not(.move-reachable) .token,
.cell:not(.move-reachable) .token:not(.active-token),
.cell .token.p1,
.cell .token.p2{
  opacity:1!important;
  filter:drop-shadow(0 5px 4px rgba(0,0,0,.88))!important;
}
.token-hp{
  top:86%!important;
  z-index:20!important;
}

/* Klon podczas ruchu korzysta z tej samej dużej, czystej sylwetki. */
.moving-token-clone,
.moving-token-clone.active-token{
  opacity:1!important;
  box-shadow:none!important;
  outline:0!important;
  filter:drop-shadow(0 8px 6px rgba(0,0,0,.9))!important;
}
.moving-token-clone::before,
.moving-token-clone::after{
  content:none!important;
  display:none!important;
}

@media(max-width:720px){
  .token-shell > .token,
  .token{width:108%!important;height:108%!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.1.2 — centrowanie pionków, kierunek i HP
   ========================================================= */
.token-shell{
  position:absolute!important;
  inset:0!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  overflow:visible!important;
  pointer-events:none!important;
}

/* Cień znajduje się pod sylwetką, bez kolorowej poświaty. */
.token-shell::before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  left:50%!important;
  top:67%!important;
  width:68%!important;
  height:25%!important;
  transform:translate(-50%,-50%)!important;
  border-radius:50%!important;
  background:rgba(0,0,0,.72)!important;
  filter:blur(5px)!important;
  box-shadow:0 4px 9px rgba(0,0,0,.82)!important;
  opacity:.9!important;
  z-index:1!important;
  pointer-events:none!important;
}
.token-shell::after{
  content:none!important;
  display:none!important;
}

.token-shell > .token,
.token{
  position:relative!important;
  inset:auto!important;
  left:auto!important;
  top:auto!important;
  width:116%!important;
  height:116%!important;
  margin:0!important;
  flex:0 0 auto!important;
  background-size:contain!important;
  background-position:center center!important;
  background-repeat:no-repeat!important;
  opacity:1!important;
  transform:none!important;
  transform-origin:center center!important;
  filter:drop-shadow(0 4px 3px rgba(0,0,0,.72))!important;
  box-shadow:none!important;
  outline:0!important;
  overflow:visible!important;
  z-index:3!important;
}

/* Grafika Gracza 1 została fizycznie obrócona o 180° w pliku PNG,
   dlatego HUD życia pozostaje czytelny i nie obraca się razem z postacią. */
.token.p1,
.token.p2,
.token.active-token,
.token.p1.active-token,
.token.p2.active-token{
  transform:none!important;
  opacity:1!important;
  animation:none!important;
  filter:drop-shadow(0 4px 3px rgba(0,0,0,.72))!important;
}

/* Wyraźny, zawsze widoczny licznik życia. */
.token-hp{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  position:absolute!important;
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:-1px!important;
  transform:translateX(-50%)!important;
  min-width:30px!important;
  padding:2px 6px!important;
  border:1px solid rgba(255,255,255,.88)!important;
  border-radius:999px!important;
  background:rgba(5,7,10,.96)!important;
  color:#fff!important;
  font-size:clamp(.48rem,.62vw,.66rem)!important;
  font-weight:950!important;
  line-height:1.15!important;
  text-align:center!important;
  white-space:nowrap!important;
  text-shadow:0 1px 2px #000!important;
  box-shadow:0 3px 7px rgba(0,0,0,.9)!important;
  z-index:60!important;
  pointer-events:none!important;
}

/* Klon animacji ruchu zachowuje rozmiar i kierunek assetu. */
.moving-token-clone,
.moving-token-clone.active-token{
  background-position:center center!important;
  background-size:contain!important;
  transform:none!important;
  filter:drop-shadow(0 7px 5px rgba(0,0,0,.88))!important;
}

@media(max-width:720px){
  .token-shell > .token,
  .token{width:112%!important;height:112%!important;}
  .token-hp{min-width:27px!important;padding:1px 5px!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.1.4 — precyzyjne centrowanie pionków
   oraz identyczny rozmiar i warstwa wszystkich strzałek.
   ========================================================= */

/* Pionek jest kotwiczony matematycznie w środku komórki,
   niezależnie od wcześniejszych reguł flex/position. */
.token-shell{
  position:absolute!important;
  inset:0!important;
  display:block!important;
  overflow:visible!important;
  pointer-events:none!important;
}
.token-shell > .token,
.cell .token{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  width:116%!important;
  height:116%!important;
  margin:0!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:50% 50%!important;
  background-position:50% 50%!important;
  background-size:contain!important;
  background-repeat:no-repeat!important;
  z-index:8!important;
}
.token-shell::before{
  left:50%!important;
  top:69%!important;
  width:66%!important;
  height:22%!important;
  transform:translate(-50%,-50%)!important;
  z-index:5!important;
}
.token-hp{
  left:50%!important;
  bottom:-2px!important;
  transform:translateX(-50%)!important;
  z-index:70!important;
}

/* Plansza znajduje się nad strzałkami. Dzięki temu grafika i poświata
   przycisków nie zachodzą wizualnie na kafelki. */
.board-wrap > .board{
  position:relative!important;
  z-index:30!important;
  isolation:isolate!important;
}
.board-wrap > .axis{
  z-index:5!important;
}
.board-wrap .shift-arrow{
  z-index:6!important;
}

/* Każda z 28 kontrolek ma dokładnie kwadrat o boku --bs-arrow-size.
   Dotyczy to jednakowo góry, dołu, lewej i prawej strony. */
.board-wrap > .top-axis,
.board-wrap > .bottom-axis{
  grid-template-columns:repeat(7,var(--bs-arrow-size))!important;
  width:var(--bs-board-size)!important;
  height:var(--bs-arrow-size)!important;
  justify-content:space-between!important;
  align-items:center!important;
}
.board-wrap > .left-axis,
.board-wrap > .right-axis{
  grid-template-rows:repeat(7,var(--bs-arrow-size))!important;
  width:var(--bs-arrow-size)!important;
  height:var(--bs-board-size)!important;
  align-content:space-between!important;
  justify-items:center!important;
}
.board-wrap .axis-group,
.board-wrap .axis-group > .shift-arrow,
.board-wrap .shift-arrow{
  width:var(--bs-arrow-size)!important;
  height:var(--bs-arrow-size)!important;
  min-width:var(--bs-arrow-size)!important;
  min-height:var(--bs-arrow-size)!important;
  max-width:var(--bs-arrow-size)!important;
  max-height:var(--bs-arrow-size)!important;
}
.board-wrap .shift-arrow::before{
  inset:-6px!important;
}

@media(max-width:720px){
  .token-shell > .token,
  .cell .token{
    width:112%!important;
    height:112%!important;
  }
}

/* =========================================================
   BLACKSAW2081 LAB v2.1.4 — finalne assety pionków użytkownika
   Oba pliki PNG mają identyczne płótno 1024×1024 i są kotwiczone
   dokładnie w geometrycznym środku kafelka.
   ========================================================= */
.token-shell{
  position:absolute!important;
  inset:0!important;
  display:block!important;
  overflow:visible!important;
  pointer-events:none!important;
}
.token-shell > .token,
.cell .token{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  width:100%!important;
  height:100%!important;
  min-width:0!important;
  min-height:0!important;
  max-width:none!important;
  max-height:none!important;
  margin:0!important;
  padding:0!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:50% 50%!important;
  background-position:center center!important;
  background-size:contain!important;
  background-repeat:no-repeat!important;
  border:0!important;
  border-radius:0!important;
  box-shadow:none!important;
  outline:0!important;
  opacity:1!important;
  z-index:8!important;
}
.token.p1{background-image:url('../images/player_orange.png')!important;}
.token.p2{background-image:url('../images/player_blue.png')!important;}
.token.p1,
.token.p2,
.token.active-token,
.token.p1.active-token,
.token.p2.active-token{
  transform:translate(-50%,-50%)!important;
  filter:drop-shadow(0 6px 4px rgba(0,0,0,.9))!important;
  animation:none!important;
  opacity:1!important;
}
/* Neutralny cień jest wyśrodkowany pod stopami obu postaci. */
.token-shell::before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  left:50%!important;
  top:73%!important;
  width:58%!important;
  height:18%!important;
  transform:translate(-50%,-50%)!important;
  border-radius:50%!important;
  background:rgba(0,0,0,.72)!important;
  filter:blur(5px)!important;
  box-shadow:none!important;
  opacity:.9!important;
  z-index:5!important;
}
.token-shell::after{content:none!important;display:none!important;}
/* HP jest niezależny od grafiki i pozostaje na środku dolnej krawędzi pola. */
.token-hp{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  position:absolute!important;
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:-3px!important;
  transform:translateX(-50%)!important;
  min-width:30px!important;
  z-index:70!important;
}
.moving-token-clone,
.moving-token-clone.active-token{
  width:100%!important;
  height:100%!important;
  background-size:contain!important;
  background-position:center center!important;
  filter:drop-shadow(0 7px 5px rgba(0,0,0,.9))!important;
}
@media(max-width:720px){
  .token-shell > .token,
  .cell .token{width:100%!important;height:100%!important;}
}


/* =========================================================
   BLACKSAW2081 LAB v2.1.6 — małe HP bez tła i bez ramki
   Wyłącznie niewielka ikona serca oraz liczba.
   ========================================================= */
.token-hp{
  display:flex!important;
  visibility:visible!important;
  opacity:1!important;
  position:absolute!important;
  align-items:center!important;
  justify-content:center!important;
  gap:1px!important;
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:1px!important;
  transform:translateX(-50%)!important;
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
  height:auto!important;
  min-height:0!important;
  padding:0!important;
  margin:0!important;
  border:0!important;
  outline:0!important;
  border-radius:0!important;
  background:transparent!important;
  background-color:transparent!important;
  background-image:none!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
  color:#fff!important;
  line-height:1!important;
  white-space:nowrap!important;
  pointer-events:none!important;
  overflow:visible!important;
  z-index:80!important;
}
.token-hp::before,
.token-hp::after{
  content:none!important;
  display:none!important;
}
.token-hp-icon{
  display:block!important;
  width:10px!important;
  height:10px!important;
  min-width:10px!important;
  min-height:10px!important;
  max-width:10px!important;
  max-height:10px!important;
  padding:0!important;
  margin:0!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  box-shadow:none!important;
  object-fit:contain!important;
  object-position:center!important;
  flex:0 0 10px!important;
  filter:none!important;
}
.token-hp-value{
  display:block!important;
  padding:0!important;
  margin:0!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
  color:#fff!important;
  font-size:10px!important;
  font-weight:950!important;
  line-height:10px!important;
  letter-spacing:-.02em!important;
  text-shadow:0 1px 2px rgba(0,0,0,.98)!important;
}
.token-hp-value.hp-medium{color:#ffd34d!important;}
.token-hp-value.hp-low{color:#ff3b25!important;}
@media(max-width:720px){
  .token-hp{bottom:1px!important;gap:1px!important;}
  .token-hp-icon{width:9px!important;height:9px!important;min-width:9px!important;min-height:9px!important;max-width:9px!important;max-height:9px!important;flex-basis:9px!important;}
  .token-hp-value{font-size:9px!important;line-height:9px!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.1.9 — punkty ruchu nad wskaźnikiem HP
   Układ na pionku: postać → 3 punkty ruchu → serce i liczba HP.
   ========================================================= */
.token-movement-hud .token-energy{
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:13px!important;
  transform:translateX(-50%)!important;
  z-index:90!important;
  margin:0!important;
  pointer-events:none!important;
}

@media(max-width:720px){
  .token-movement-hud .token-energy{
    bottom:12px!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.2.1 — płynny ruch całego HUD-u pionka
   oraz usunięcie pomarańczowej poświaty strzałek modyfikacji.
   ========================================================= */
.moving-player-bundle{
  position:fixed!important;
  z-index:100000!important;
  overflow:visible!important;
  isolation:isolate!important;
  pointer-events:none!important;
  will-change:left,top,transform!important;
  transform-origin:50% 65%!important;
  filter:drop-shadow(0 8px 6px rgba(0,0,0,.72))!important;
}
.moving-player-bundle > .token-shell{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  opacity:1!important;
  overflow:visible!important;
}
.moving-player-bundle > .stay-on-cell{
  z-index:120!important;
  opacity:1!important;
  pointer-events:none!important;
}
.moving-player-bundle .token,
.moving-player-bundle .token-hp,
.moving-player-bundle .token-movement-hud,
.moving-player-bundle .token-energy{
  opacity:1!important;
  visibility:visible!important;
}

/* Strzałki fazy modyfikacji: pozostaje grafika i neutralny cień, bez
   pomarańczowej/czerwonej aureoli, ognia oraz iskier. */
.board-wrap .shift-arrow::before{
  filter:drop-shadow(0 8px 8px rgba(0,0,0,.98))!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.10) contrast(1.04) drop-shadow(0 10px 9px rgba(0,0,0,1))!important;
}
.board-wrap .shift-arrow-sparks,
.board-wrap .shift-arrow-sparks::before,
.board-wrap .shift-arrow-sparks::after,
.board-wrap .shift-arrow::after{
  display:none!important;
  opacity:0!important;
  animation:none!important;
  background:none!important;
  box-shadow:none!important;
  filter:none!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.2.3 — HUD HP i klucza przy dolnej krawędzi pionka
   ========================================================= */
.token .token-bottom-hud{
  position:absolute!important;
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:1px!important;
  transform:translateX(-50%)!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  gap:2px!important;
  width:max-content!important;
  height:auto!important;
  margin:0!important;
  padding:0!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  z-index:82!important;
  pointer-events:none!important;
  white-space:nowrap!important;
}
.token .token-bottom-hud .token-hp{
  position:relative!important;
  inset:auto!important;
  left:auto!important;
  right:auto!important;
  top:auto!important;
  bottom:auto!important;
  transform:none!important;
  margin:0!important;
}
.token .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;
  margin:0!important;
}
@media(max-width:720px){
  .token .token-bottom-hud{bottom:1px!important;gap:1px!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.2.4 — wyśrodkowane klucze i skrzynie
   ========================================================= */
.cell[data-tile-type] > .board-object.key-object,
.cell[data-tile-type] > .board-object.chest-object{
  left:50%!important;
  right:auto!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
}

/* Usunięcie kolorowych kropek przy obiektach misji. */
.cell[data-tile-type] > .board-object.key-object::after,
.cell[data-tile-type] > .board-object.chest-object::after{
  content:none!important;
  display:none!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.2.5 — mniejsze obiekty misji
   Klucz: -10% względem v2.2.4
   Skrzynia: -25% względem v2.2.4
   ========================================================= */
.cell[data-tile-type] > .board-object.key-object{
  width:53.1%!important;
  height:53.1%!important;
}
.cell[data-tile-type] > .board-object.chest-object{
  width:55.5%!important;
  height:49.5%!important;
}

@media(max-width:720px){
  .cell[data-tile-type] > .board-object.key-object{
    width:55.8%!important;
    height:55.8%!important;
  }
  .cell[data-tile-type] > .board-object.chest-object{
    width:57.75%!important;
    height:51.75%!important;
  }
}


/* BLACKSAW2081 LAB v2.3.1 — strzałki 50% mniejsze */
.shift-arrow .shift-arrow-icon{
  inset:25%!important;
  width:auto!important;
  height:auto!important;
  background-size:contain!important;
}
@media(max-width:720px){
  .shift-arrow .shift-arrow-icon{inset:25%!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.3.3 — jedna widoczna strzałka
   Usuwa dużą, nieaktywną grafikę generowaną przez ::before.
   Pozostawia wyłącznie działającą .shift-arrow-icon.
   ========================================================= */
.board-wrap .shift-arrow::before,
.axis .shift-arrow::before{
  content:none!important;
  display:none!important;
  visibility:hidden!important;
  opacity:0!important;
  background:none!important;
  background-image:none!important;
  box-shadow:none!important;
  animation:none!important;
}
.board-wrap .shift-arrow > .shift-arrow-icon,
.axis .shift-arrow > .shift-arrow-icon{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.3.4 — strzałki większe o 15%
   Poprzednio grafika zajmowała 50% przycisku (inset 25%).
   Teraz zajmuje 57.5% przycisku, czyli dokładnie +15%.
   ========================================================= */
.board-wrap .shift-arrow > .shift-arrow-icon,
.axis .shift-arrow > .shift-arrow-icon,
.shift-arrow .shift-arrow-icon{
  inset:21.25%!important;
  width:auto!important;
  height:auto!important;
  background-size:contain!important;
}
@media(max-width:720px){
  .board-wrap .shift-arrow > .shift-arrow-icon,
  .axis .shift-arrow > .shift-arrow-icon,
  .shift-arrow .shift-arrow-icon{
    inset:21.25%!important;
  }
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.2 — ramy bocznego HUD-u oraz
   narożniki wsunięte pod planszę. Warstwy: tło strony →
   dekoracja → plansza → strzałki.
   ========================================================= */

/* Wspólny, lekki wariant ramy dla bocznego HUD-u. */
.left-hud .blacksaw-side-frame{
  position:relative!important;
  isolation:isolate!important;
  overflow:hidden!important;
  border:0!important;
  border-radius:10px!important;
  background:rgba(7,9,12,.94)!important;
  box-shadow:0 12px 24px rgba(0,0,0,.42), inset 0 0 0 1px rgba(238,20,71,.28)!important;
  padding-left:18px!important;
  padding-right:18px!important;
}
.left-hud .blacksaw-side-frame > :not(.blacksaw-side-frame-surface):not(.blacksaw-side-frame-corner){
  position:relative!important;
  z-index:4!important;
}
.left-hud .blacksaw-side-frame-surface{
  position:absolute!important;
  inset:0!important;
  z-index:0!important;
  pointer-events:none!important;
  background:
    linear-gradient(180deg,rgba(5,7,9,.30),rgba(5,7,9,.70)),
    url('../images/ui/frame_background.png') center/cover no-repeat!important;
  opacity:.72!important;
}
.left-hud .blacksaw-side-frame::after{
  content:""!important;
  position:absolute!important;
  inset:5px!important;
  z-index:1!important;
  pointer-events:none!important;
  border:1px solid rgba(238,20,71,.26)!important;
  border-radius:7px!important;
  box-shadow:inset 0 0 18px rgba(238,20,71,.08)!important;
}
.left-hud .blacksaw-side-frame-corner{
  position:absolute!important;
  z-index:3!important;
  width:78px!important;
  height:67px!important;
  pointer-events:none!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:contain!important;
  opacity:.78!important;
  filter:drop-shadow(0 5px 5px rgba(0,0,0,.92)) saturate(.90)!important;
}
.left-hud .blacksaw-side-frame-corner.frame-top-left{
  left:-5px!important;top:-5px!important;background-image:url('../images/ui/frame_top_left.png')!important;
}
.left-hud .blacksaw-side-frame-corner.frame-top-right{
  right:-5px!important;top:-5px!important;background-image:url('../images/ui/frame_top_right.png')!important;
}
.left-hud .blacksaw-side-frame-corner.frame-bottom-left{
  left:-5px!important;bottom:-5px!important;background-image:url('../images/ui/frame_bottom_left.png')!important;
}
.left-hud .blacksaw-side-frame-corner.frame-bottom-right{
  right:-5px!important;bottom:-5px!important;background-image:url('../images/ui/frame_bottom_right.png')!important;
}

/* Zachowanie oddechu dla treści w bardziej zwartych kartach. */
.left-hud .turn-command.blacksaw-side-frame{padding-top:13px!important;padding-bottom:13px!important;}
.left-hud .player-card.blacksaw-side-frame{padding-top:11px!important;padding-bottom:11px!important;}
.left-hud .board-legend.blacksaw-side-frame{padding-top:10px!important;padding-bottom:10px!important;}

/* Cztery narożniki pod planszą. Element zajmuje dokładnie grid-area planszy,
   a jego grafiki wychodzą poza nią. Sama plansza zasłania środek dekoracji. */
.board-wrap > .board-frame-underlay{
  grid-area:board!important;
  position:relative!important;
  width:var(--bs-board-size)!important;
  height:var(--bs-board-size)!important;
  z-index:1!important;
  overflow:visible!important;
  pointer-events:none!important;
  isolation:isolate!important;
}
.board-frame-underlay::before{
  content:""!important;
  position:absolute!important;
  inset:-14px!important;
  z-index:0!important;
  border-radius:18px!important;
  background:radial-gradient(circle at center,rgba(238,20,71,.07),rgba(0,0,0,0) 68%)!important;
  box-shadow:0 0 26px rgba(238,20,71,.13)!important;
}
.board-frame-corner{
  position:absolute!important;
  z-index:1!important;
  width:31%!important;
  height:27%!important;
  min-width:118px!important;
  min-height:101px!important;
  max-width:205px!important;
  max-height:176px!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:contain!important;
  opacity:.88!important;
  filter:drop-shadow(0 9px 8px rgba(0,0,0,.96)) saturate(.93)!important;
  animation:boardFrameEmber 3.6s ease-in-out infinite alternate!important;
}
.board-frame-corner.frame-top-left{
  left:-12.5%!important;top:-10.5%!important;background-image:url('../images/ui/frame_top_left.png')!important;
}
.board-frame-corner.frame-top-right{
  right:-12.5%!important;top:-10.5%!important;background-image:url('../images/ui/frame_top_right.png')!important;
}
.board-frame-corner.frame-bottom-left{
  left:-12.5%!important;bottom:-10.5%!important;background-image:url('../images/ui/frame_bottom_left.png')!important;
}
.board-frame-corner.frame-bottom-right{
  right:-12.5%!important;bottom:-10.5%!important;background-image:url('../images/ui/frame_bottom_right.png')!important;
}
.board-frame-corner.frame-top-right,
.board-frame-corner.frame-bottom-left{animation-delay:-1.8s!important;}

/* Gwarantowana hierarchia warstw. */
.board-wrap > .board{position:relative!important;z-index:2!important;}
.board-wrap > .axis{position:relative!important;z-index:12!important;}

@keyframes boardFrameEmber{
  0%{filter:drop-shadow(0 9px 8px rgba(0,0,0,.96)) drop-shadow(0 0 2px rgba(255,48,18,.18)) saturate(.90);}
  100%{filter:drop-shadow(0 9px 8px rgba(0,0,0,.96)) drop-shadow(0 0 8px rgba(255,48,18,.42)) saturate(1.04);}
}

@media(max-width:1180px){
  .left-hud .blacksaw-side-frame-corner{width:68px!important;height:58px!important;}
  .board-frame-corner{min-width:96px!important;min-height:82px!important;}
}
@media(max-width:720px){
  .left-hud .blacksaw-side-frame{padding-left:14px!important;padding-right:14px!important;}
  .left-hud .blacksaw-side-frame-corner{width:58px!important;height:50px!important;opacity:.70!important;}
  .board-frame-corner{width:28%!important;height:24%!important;min-width:72px!important;min-height:62px!important;}
  .board-frame-corner.frame-top-left{left:-9%!important;top:-7%!important;}
  .board-frame-corner.frame-top-right{right:-9%!important;top:-7%!important;}
  .board-frame-corner.frame-bottom-left{left:-9%!important;bottom:-7%!important;}
  .board-frame-corner.frame-bottom-right{right:-9%!important;bottom:-7%!important;}
}

@media(prefers-reduced-motion:reduce){
  .board-frame-corner{animation:none!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.3 — integracja ram planszy i HUD-u.
   ========================================================= */

/* Narożniki planszy wsunięte głębiej, bez szczeliny optycznej. */
.board-frame-corner.frame-top-left{left:-7.2%!important;top:-6.2%!important;}
.board-frame-corner.frame-top-right{right:-7.2%!important;top:-6.2%!important;}
.board-frame-corner.frame-bottom-left{left:-7.2%!important;bottom:-6.2%!important;}
.board-frame-corner.frame-bottom-right{right:-7.2%!important;bottom:-6.2%!important;}
.board-frame-underlay::before{inset:-7px!important;}

/* Prawy HUD otrzymuje tę samą modułową konstrukcję BLACKSAW. */
.game-layout > .panel{
  position:relative!important;
  isolation:isolate!important;
  overflow:hidden!important;
  border:0!important;
  border-radius:12px!important;
  background:transparent!important;
  box-shadow:none!important;
  padding:12px!important;
}
.game-layout > .panel::before{
  content:""!important;
  position:absolute!important;
  inset:0!important;
  z-index:0!important;
  pointer-events:none!important;
  border-radius:12px!important;
  background:
    linear-gradient(180deg,rgba(5,7,9,.20),rgba(5,7,9,.52)),
    url('../images/ui/frame_background.png') center/cover no-repeat!important;
  opacity:.92!important;
  box-shadow:inset 0 0 0 1px rgba(238,20,71,.20),0 16px 34px rgba(0,0,0,.45)!important;
}
.game-layout > .panel > *{position:relative!important;z-index:2!important;}
.game-layout > .panel .action-card,
.game-layout > .panel .mission-card,
.game-layout > .panel .utility-row,
.game-layout > .panel .log-section{
  background:rgba(3,5,8,.18)!important;
  border:1px solid rgba(238,20,71,.24)!important;
  box-shadow:inset 0 0 18px rgba(0,0,0,.18)!important;
  backdrop-filter:none!important;
}

/* Kolorowe, niepasujące wypełnienia zostają usunięte — widać metaliczne tło. */
.left-hud .phase-step,
.left-hud .player-stats > span,
.left-hud .mini-mission,
.left-hud .board-legend,
.game-layout > .panel .movement-display,
.game-layout > .panel .dice-display,
.game-layout > .panel .mission-step,
.game-layout > .panel .reserve > *,
.game-layout > .panel .log li{
  background:rgba(3,5,8,.12)!important;
  background-image:none!important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.015)!important;
}
.left-hud .phase-step.active,
.game-layout > .panel .mission-step.active{
  background:linear-gradient(90deg,rgba(238,20,71,.20),rgba(238,20,71,.05))!important;
}
.left-hud .turn-number,
.top-actions .danger{
  box-shadow:0 0 14px rgba(238,20,71,.24)!important;
}

/* Delikatne metaliczne podświetlenie ikon bez utraty czytelności. */
.left-hud .player-stats,
.left-hud .mini-mission,
.left-hud .board-legend{
  text-shadow:0 1px 1px rgba(0,0,0,.88),0 0 5px rgba(238,20,71,.08)!important;
}

/* Losowy impuls elektroniki — uruchamiany klasą z JS. */
.blacksaw-side-frame-corner.bs-live-pulse,
.board-frame-corner.bs-live-pulse,
.blacksaw-frame-corner.bs-live-pulse{
  animation:bsLiveElectronics 950ms cubic-bezier(.2,.8,.2,1) 1!important;
}
@keyframes bsLiveElectronics{
  0%,100%{filter:drop-shadow(0 6px 6px rgba(0,0,0,.92)) drop-shadow(0 0 2px rgba(255,45,20,.20)) brightness(1);}
  38%{filter:drop-shadow(0 6px 6px rgba(0,0,0,.92)) drop-shadow(0 0 13px rgba(255,45,20,.92)) brightness(1.35) saturate(1.35);}
  62%{filter:drop-shadow(0 6px 6px rgba(0,0,0,.92)) drop-shadow(0 0 5px rgba(255,45,20,.52)) brightness(1.12);}
}

@media(max-width:720px){
  .board-frame-corner.frame-top-left{left:-5%!important;top:-4.5%!important;}
  .board-frame-corner.frame-top-right{right:-5%!important;top:-4.5%!important;}
  .board-frame-corner.frame-bottom-left{left:-5%!important;bottom:-4.5%!important;}
  .board-frame-corner.frame-bottom-right{right:-5%!important;bottom:-4.5%!important;}
  .game-layout > .panel{padding:9px!important;}
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.4 — ciaśniejsze narożniki planszy
   oraz kompletna rama prawego panelu HUD.
   ========================================================= */

/* Narożniki wchodzą głębiej POD planszę w osi poziomej.
   Lewa i prawa strona mają identyczne, lustrzane odsunięcie. */
.board-frame-corner.frame-top-left{
  left:-3.2%!important;
}
.board-frame-corner.frame-bottom-left{
  left:-3.2%!important;
}
.board-frame-corner.frame-top-right{
  right:-3.2%!important;
}
.board-frame-corner.frame-bottom-right{
  right:-3.2%!important;
}

/* Prawy panel korzysta z dokładnie tego samego modułu ramy co karty po lewej. */
.game-layout > .panel.blacksaw-side-frame{
  position:relative!important;
  isolation:isolate!important;
  overflow:hidden!important;
  border:0!important;
  border-radius:12px!important;
  background:transparent!important;
  box-shadow:0 16px 34px rgba(0,0,0,.45), inset 0 0 0 1px rgba(238,20,71,.24)!important;
  padding:18px!important;
}
.game-layout > .panel.blacksaw-side-frame > :not(.blacksaw-side-frame-surface):not(.blacksaw-side-frame-corner){
  position:relative!important;
  z-index:4!important;
}
.game-layout > .panel .blacksaw-side-frame-surface{
  position:absolute!important;
  inset:0!important;
  z-index:0!important;
  pointer-events:none!important;
  border-radius:12px!important;
  background:
    linear-gradient(180deg,rgba(5,7,9,.20),rgba(5,7,9,.54)),
    url('../images/ui/frame_background.png') center/cover no-repeat!important;
  opacity:.92!important;
}
.game-layout > .panel.blacksaw-side-frame::before{
  content:none!important;
}
.game-layout > .panel.blacksaw-side-frame::after{
  content:""!important;
  position:absolute!important;
  inset:7px!important;
  z-index:1!important;
  pointer-events:none!important;
  border:1px solid rgba(238,20,71,.24)!important;
  border-radius:9px!important;
  box-shadow:inset 0 0 22px rgba(238,20,71,.08)!important;
}
.game-layout > .panel .blacksaw-side-frame-corner{
  position:absolute!important;
  z-index:3!important;
  width:82px!important;
  height:70px!important;
  pointer-events:none!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  background-size:contain!important;
  opacity:.82!important;
  filter:drop-shadow(0 6px 6px rgba(0,0,0,.94)) saturate(.94)!important;
}
.game-layout > .panel .blacksaw-side-frame-corner.frame-top-left{
  left:-5px!important;top:-5px!important;background-image:url('../images/ui/frame_top_left.png')!important;
}
.game-layout > .panel .blacksaw-side-frame-corner.frame-top-right{
  right:-5px!important;top:-5px!important;background-image:url('../images/ui/frame_top_right.png')!important;
}
.game-layout > .panel .blacksaw-side-frame-corner.frame-bottom-left{
  left:-5px!important;bottom:-5px!important;background-image:url('../images/ui/frame_bottom_left.png')!important;
}
.game-layout > .panel .blacksaw-side-frame-corner.frame-bottom-right{
  right:-5px!important;bottom:-5px!important;background-image:url('../images/ui/frame_bottom_right.png')!important;
}

/* Wewnętrzne sekcje pozostają przezroczyste, aby metaliczne tło było widoczne. */
.game-layout > .panel.blacksaw-side-frame .action-card,
.game-layout > .panel.blacksaw-side-frame .mission-card,
.game-layout > .panel.blacksaw-side-frame .utility-row,
.game-layout > .panel.blacksaw-side-frame .log-section{
  background:rgba(3,5,8,.10)!important;
  background-image:none!important;
  border:1px solid rgba(238,20,71,.22)!important;
  box-shadow:inset 0 0 16px rgba(0,0,0,.16)!important;
}

@media(max-width:1180px){
  .game-layout > .panel .blacksaw-side-frame-corner{width:72px!important;height:62px!important;}
}
@media(max-width:720px){
  .board-frame-corner.frame-top-left,
  .board-frame-corner.frame-bottom-left{left:-2.2%!important;}
  .board-frame-corner.frame-top-right,
  .board-frame-corner.frame-bottom-right{right:-2.2%!important;}
  .game-layout > .panel.blacksaw-side-frame{padding:14px!important;}
  .game-layout > .panel .blacksaw-side-frame-corner{width:60px!important;height:52px!important;opacity:.74!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.5 — korekta ramy planszy i czyste kafelki.
   ========================================================= */

/* Narożniki są odrobinę bardziej wysunięte niż w v2.6.4,
   ale nadal pozostają częściowo schowane pod planszą. */
.board-frame-corner.frame-top-left,
.board-frame-corner.frame-bottom-left{
  left:-4.6%!important;
}
.board-frame-corner.frame-top-right,
.board-frame-corner.frame-bottom-right{
  right:-4.6%!important;
}

/* Zwykłe pola planszy pokazują wyłącznie przygotowaną teksturę kafelka.
   Usuwamy techniczne tło i obwódkę elementu .cell. */
.board .cell{
  background:transparent!important;
  border-color:transparent!important;
  border-width:0!important;
  box-shadow:none!important;
}

/* Tekstura wypełnia całe pole bez dodatkowej ramki z elementu nadrzędnego. */
.board .cell > .tile-texture{
  inset:0!important;
  border:0!important;
  border-radius:0!important;
  box-shadow:none!important;
}

/* Stany interaktywne nadal pozostają czytelne i są rysowane ponad teksturą. */
.board .cell:hover{
  outline:2px solid var(--accent)!important;
  outline-offset:-2px!important;
}
.board .cell.fixed{
  box-shadow:inset 0 0 0 2px var(--gold)!important;
}
.board .cell.rotation-selected{
  outline:3px solid var(--accent)!important;
  outline-offset:-3px!important;
}
.board .cell.ai-modification-target{
  border:0!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;
}

@media(max-width:720px){
  .board-frame-corner.frame-top-left,
  .board-frame-corner.frame-bottom-left{left:-3.4%!important;}
  .board-frame-corner.frame-top-right,
  .board-frame-corner.frame-bottom-right{right:-3.4%!important;}
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.6 — ostry background i głębia planszy.
   ========================================================= */

/* Źródło 2× ogranicza rozmycie przy background-size: cover na ekranach Full HD/2K. */
body{
  background-image:
    linear-gradient(rgba(2,4,7,.10),rgba(2,4,7,.16)),
    url('../images/blacksaw_background_v266.jpg')!important;
  background-position:center top!important;
  background-size:cover!important;
  background-repeat:no-repeat!important;
  background-attachment:fixed!important;
  image-rendering:auto!important;
}

/* Delikatny, szeroki cień pod całą konstrukcją planszy daje separację od tła,
   bez przyciemniania samych kafelków i dekoracyjnych narożników. */
.board-wrap{
  filter:
    drop-shadow(0 18px 18px rgba(0,0,0,.52))
    drop-shadow(0 5px 8px rgba(0,0,0,.44))
    drop-shadow(0 0 15px rgba(123,10,28,.16))!important;
}

/* Dodatkowa subtelna głębia bez obwódki na polach. */
.board{
  box-shadow:
    0 20px 34px rgba(0,0,0,.34),
    0 7px 13px rgba(0,0,0,.28)!important;
}

@media(max-width:720px){
  body{background-attachment:scroll!important;}
  .board-wrap{
    filter:
      drop-shadow(0 12px 13px rgba(0,0,0,.48))
      drop-shadow(0 3px 6px rgba(0,0,0,.38))!important;
  }
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.7 — ostre, kafelkowane tło strony.
   Lustrzany super-pattern powtarza się bez widocznej szczeliny
   i nie jest sztucznie rozciągany przez background-size: cover.
   ========================================================= */
body{
  background-color:#090a0b!important;
  background-image:
    linear-gradient(rgba(2,4,7,.08),rgba(2,4,7,.14)),
    url('../images/blacksaw_background_pattern_v267.jpg')!important;
  background-position:center top!important;
  background-size:2048px 2048px!important;
  background-repeat:repeat!important;
  background-attachment:fixed!important;
  image-rendering:auto!important;
}

/* Bardzo subtelna warstwa optyczna ogranicza widoczność powtarzalności,
   ale nie rozmywa tekstury ani jej detali. */
body::before{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:-1;
  background:
    radial-gradient(circle at 50% 32%,rgba(255,255,255,.018),transparent 44%),
    linear-gradient(90deg,rgba(0,0,0,.08),transparent 22%,transparent 78%,rgba(0,0,0,.08));
}

@media(max-width:720px){
  body{
    background-size:1365px 1365px!important;
    background-attachment:scroll!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.29 — prosta ciągła trasa i przenikanie
   celownika z koloru oryginalnego do czerni
   ========================================================= */

/* Trasa jest pojedynczą, pełną białą linią. */
.movement-path-svg{
  z-index:26!important;
}
.movement-path-line{
  stroke:#fff!important;
  stroke-width:7!important;
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
  stroke-dasharray:none;
  filter:drop-shadow(0 0 3px rgba(255,255,255,.42))!important;
  animation:none!important;
}
.board > .cell > .token-shell{z-index:42!important;}
.movement-walker{z-index:46!important;}

/* Celownik płynnie przechodzi z oryginalnego koloru do czerni.
   Glow jest celowo subtelny i ma wyraźnie niższą alfę. */
.combat-reticle{
  transform-origin:center!important;
  animation:bsReticleColourToBlack 1.15s ease-in-out infinite alternate!important;
}
.cell.combat-target:not(:hover):not(:focus-visible) .combat-reticle{
  animation:bsReticleColourToBlack 1.15s ease-in-out infinite alternate!important;
}
.cell.combat-target:hover .combat-reticle,
.cell.combat-target:focus-visible .combat-reticle{
  animation:bsReticleColourToBlackHover .72s ease-in-out infinite alternate!important;
}
@keyframes bsReticleColourToBlack{
  from{
    transform:scale(.99);
    filter:brightness(1) saturate(1)
           drop-shadow(0 0 3px rgba(255,18,42,.14))
           drop-shadow(0 0 7px rgba(255,18,42,.08));
  }
  to{
    transform:scale(1.025);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 4px rgba(255,18,42,.20))
           drop-shadow(0 0 9px rgba(255,18,42,.10));
  }
}
@keyframes bsReticleColourToBlackHover{
  from{
    transform:scale(.88);
    filter:brightness(1) saturate(1)
           drop-shadow(0 0 4px rgba(255,18,42,.16))
           drop-shadow(0 0 8px rgba(255,18,42,.08));
  }
  to{
    transform:scale(1.16);
    filter:brightness(0) saturate(0)
           drop-shadow(0 0 5px rgba(255,18,42,.24))
           drop-shadow(0 0 10px rgba(255,18,42,.12));
  }
}


/* =========================================================
   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 — warstwowa trasa pól i mocny celownik
   ========================================================= */

/* Trasa jest składana z idealnie prostych fragmentów wewnątrz pól.
   Fragmenty łączą się na krawędziach, dając jedną ciągłą linię. */
.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;}

/* Ikona celu pozostaje dokładnie pośrodku właściwego pola i nad linią. */
.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;
}

/* Wyraźne przenikanie oryginalnego czerwono-pomarańczowego celownika
   do czerni oraz mocny, czytelny czerwony glow. */
.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 — finalne poprawki trasy i celownika
   ========================================================= */

/* Pole docelowe nie może zmieniać rozmiaru ani położenia. Dzięki temu
   fragmenty trasy w sąsiednich polach stykają się dokładnie na krawędziach. */
.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;
}

/* Ciągła linia z łagodnym, zaokrąglonym zakrętem 90 stopni. */
.movement-path-cell-overlay .movement-path-line{
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
  stroke-miterlimit:1!important;
}

/* Celownik zachowuje oryginalne kolory pliku PNG. Bez zmiany koloru,
   jasności i przezroczystości. Gdy kursor nie jest nad polem, obraca się
   i ma solidny czerwony glow. */
.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}}

/* BLACKSAW2081 LAB v2.6.38 — finalne centrowanie celownika i podmiana assetu */
.token-shell > .combat-target-marker,
.cell .token-shell > .combat-target-marker{
  position:absolute!important;
  inset:0!important;
  left:0!important;
  top:0!important;
  width:100%!important;
  height:100%!important;
  margin:0!important;
  transform:none!important;
  translate:none!important;
  display:block!important;
  pointer-events:none!important;
  overflow:visible!important;
  z-index:115!important;
}
.token-shell > .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;
  margin:0!important;
  translate:-50% -50%!important;
  transform:none!important;
  transform-origin:50% 50%!important;
  rotate:0deg;
  scale:1;
  animation:bsReticleRotorV2638 1.25s linear infinite!important;
  will-change:rotate!important;
}
.token-shell > .combat-target-marker > .combat-reticle-rotor > .combat-reticle{
  position:static!important;
  display:block!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;
  object-fit:contain!important;
  opacity:1!important;
}
.cell.combat-target:hover .token-shell > .combat-target-marker > .combat-reticle-rotor,
.cell.combat-target:focus-visible .token-shell > .combat-target-marker > .combat-reticle-rotor{
  left:50%!important;
  top:50%!important;
  translate:-50% -50%!important;
  animation-play-state:paused!important;
  rotate:0deg!important;
  scale:1!important;
}
.cell.combat-target:hover .token-shell > .combat-target-marker > .combat-reticle-rotor > .combat-reticle,
.cell.combat-target:focus-visible .token-shell > .combat-target-marker > .combat-reticle-rotor > .combat-reticle{
  animation:bsReticleHoverPulseV2638 .42s ease-in-out infinite alternate!important;
  transform-origin:50% 50%!important;
}
@keyframes bsReticleRotorV2638{from{rotate:0deg}to{rotate:360deg}}
@keyframes bsReticleHoverPulseV2638{from{scale:.90}to{scale:1.20}}

/* BLACKSAW2081 LAB v2.6.40 — stabilny obrót i puls bez zmiany pozycji */
.board .cell.combat-target > .combat-target-marker{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  margin:0!important;
  padding:0!important;
  transform:none!important;
  display:block!important;
  overflow:visible!important;
  pointer-events:none!important;
  z-index:115!important;
}
.board .cell.combat-target > .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;
  margin:0!important;
  padding:0!important;
  translate:-50% -50%!important;
  transform:none!important;
  transform-origin:50% 50%!important;
  rotate:0deg;
  scale:1;
  animation:bsReticleRotorV2640 1.25s linear infinite!important;
  will-change:rotate!important;
}
.board .cell.combat-target > .combat-target-marker > .combat-reticle-rotor > .combat-reticle{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  margin:0!important;
  padding:0!important;
  translate:none!important;
  transform:none!important;
  rotate:0deg!important;
  scale:1;
  transform-origin:50% 50%!important;
  animation:none!important;
  object-fit:contain!important;
  opacity:1!important;
}
.board .cell.combat-target:hover > .combat-target-marker > .combat-reticle-rotor,
.board .cell.combat-target:focus-visible > .combat-target-marker > .combat-reticle-rotor{
  animation-play-state:paused!important;
  rotate:0deg;
}
.board .cell.combat-target:hover > .combat-target-marker > .combat-reticle-rotor > .combat-reticle,
.board .cell.combat-target:focus-visible > .combat-target-marker > .combat-reticle-rotor > .combat-reticle{
  animation:bsReticleHoverPulseV2640 .42s ease-in-out infinite alternate!important;
}
@keyframes bsReticleRotorV2640{
  from{rotate:0deg}
  to{rotate:360deg}
}
@keyframes bsReticleHoverPulseV2640{
  from{scale:.90}
  to{scale:1.20}
}


/* BLACKSAW2081 LAB v2.6.42 — napis ATAKUJ pojawia się, rośnie i pozostaje widoczny */
.board .cell.combat-target > .combat-target-marker > .combat-attack-label{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  z-index:3!important;
  display:block!important;
  width:auto!important;
  max-width:calc(100% - 8px)!important;
  margin:0!important;
  padding:0!important;
  border:0!important;
  background:transparent!important;
  color:#fff!important;
  font-size:clamp(.58rem,1.05vw,.9rem)!important;
  font-weight:950!important;
  line-height:1!important;
  letter-spacing:.035em!important;
  white-space:nowrap!important;
  text-align:center!important;
  opacity:1!important;
  translate:-50% -50%!important;
  transform:none!important;
  scale:.55!important;
  transform-origin:50% 50%!important;
  animation:bsAttackLabelGrowV2642 .38s cubic-bezier(.18,.82,.22,1) .06s 1 forwards!important;
  pointer-events:none!important;
  visibility:visible!important;
}
.board .cell.combat-target:hover > .combat-target-marker > .combat-attack-label,
.board .cell.combat-target:focus-visible > .combat-target-marker > .combat-attack-label{
  opacity:1!important;
}
@keyframes bsAttackLabelGrowV2642{
  0%{opacity:0;scale:.55}
  18%{opacity:1;scale:.55}
  100%{opacity:1;scale:1}
}
@media(max-width:720px){
  .board .cell.combat-target > .combat-target-marker > .combat-attack-label{
    font-size:clamp(.5rem,2.25vw,.78rem)!important;
    max-width:calc(100% - 6px)!important;
  }
}

/* BLACKSAW2081 LAB v2.6.44 — napis ATAKUJ powiększa się po najechaniu i pozostaje w polu */
.board .cell.combat-target > .combat-target-marker > .combat-attack-label{
  left:50%!important;
  top:50%!important;
  width:auto!important;
  max-width:calc(100% - 10px)!important;
  font-size:clamp(.58rem,1.25vw,1rem)!important;
  translate:-50% -50%!important;
  scale:.58!important;
  opacity:1!important;
  animation:none!important;
  transform-origin:50% 50%!important;
  transition:none!important;
}
.board .cell.combat-target:hover > .combat-target-marker > .combat-attack-label,
.board .cell.combat-target:focus-visible > .combat-target-marker > .combat-attack-label{
  animation:bsAttackLabelHoverGrowV2643 .32s cubic-bezier(.16,.9,.22,1) 1 forwards!important;
}
@keyframes bsAttackLabelHoverGrowV2643{
  from{scale:.58;opacity:1}
  to{scale:1;opacity:1}
}
@media(max-width:720px){
  .board .cell.combat-target > .combat-target-marker > .combat-attack-label{
    max-width:calc(100% - 8px)!important;
    font-size:clamp(.52rem,2.65vw,.84rem)!important;
  }
}

/* BLACKSAW2081 LAB v2.6.44 — ATAKUJ mały w spoczynku, powiększa się wyłącznie na hover */
.board .cell.combat-target > .combat-target-marker > .combat-attack-label{
  scale:.58!important;
  animation:none!important;
  transition:scale .28s cubic-bezier(.16,.9,.22,1)!important;
}
.board .cell.combat-target:hover > .combat-target-marker > .combat-attack-label,
.board .cell.combat-target:focus-visible > .combat-target-marker > .combat-attack-label{
  scale:1!important;
  animation:none!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.54 — górne strzałki: identyczny rozmiar,
   centrowanie i hover jak na pozostałych trzech krawędziach.
   Usuwa wszystkie późniejsze, sprzeczne nadpisania v2.6.45–v2.6.53.
   ========================================================= */
.board-wrap > .axis{
  gap:0!important;
  padding:0!important;
  margin:0!important;
  overflow:visible!important;
}
.board-wrap > .top-axis,
.board-wrap > .bottom-axis{
  display:grid!important;
  grid-template-columns:repeat(7,minmax(0,1fr))!important;
  width:var(--bs-board-size)!important;
  height:var(--bs-arrow-size)!important;
  align-items:center!important;
  justify-items:center!important;
}
.board-wrap > .left-axis,
.board-wrap > .right-axis{
  display:grid!important;
  grid-template-rows:repeat(7,minmax(0,1fr))!important;
  width:var(--bs-arrow-size)!important;
  height:var(--bs-board-size)!important;
  align-items:center!important;
  justify-items:center!important;
}
.board-wrap > .axis > .axis-group{
  display:grid!important;
  place-items:center!important;
  width:100%!important;
  height:100%!important;
  min-width:0!important;
  min-height:0!important;
  overflow:visible!important;
}
.board-wrap > .axis .shift-arrow{
  position:relative!important;
  display:block!important;
  width:var(--bs-arrow-size)!important;
  height:var(--bs-arrow-size)!important;
  min-width:var(--bs-arrow-size)!important;
  min-height:var(--bs-arrow-size)!important;
  max-width:var(--bs-arrow-size)!important;
  max-height:var(--bs-arrow-size)!important;
  padding:0!important;
  margin:0!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  filter:none!important;
  overflow:visible!important;
}
/* Wszystkie cztery kierunki korzystają z jednej, identycznej warstwy ::before. */
.board-wrap > .axis .shift-arrow > .shift-arrow-icon,
.board-wrap > .axis .shift-arrow > .shift-arrow-fire,
.board-wrap > .axis .shift-arrow > .shift-arrow-sparks,
.board-wrap > .axis .shift-arrow::after{
  display:none!important;
}
.board-wrap > .axis .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;
  transform-origin:50% 50%!important;
  pointer-events:none!important;
  z-index:3!important;
  filter:drop-shadow(0 5px 5px rgba(0,0,0,.9))!important;
  animation:none!important;
}
.board-wrap > .top-axis .shift-arrow.arrow-up::before{transform:rotate(0deg) scale(.5)!important}
.board-wrap > .bottom-axis .shift-arrow.arrow-down::before{transform:rotate(180deg) scale(.5)!important}
.board-wrap > .left-axis .shift-arrow.arrow-left::before{transform:rotate(-90deg) scale(.5)!important}
.board-wrap > .right-axis .shift-arrow.arrow-right::before{transform:rotate(90deg) scale(.5)!important}
.board-wrap > .axis .shift-arrow:not(:disabled):hover::before,
.board-wrap > .axis .shift-arrow:not(:disabled):focus-visible::before,
.board-wrap > .axis .shift-arrow.is-arrow-active:not(:disabled)::before,
.board-wrap > .axis .shift-arrow.arrow-pressed::before,
.board-wrap > .axis .shift-arrow.action-confirmed::before{
  opacity:1!important;
  visibility:visible!important;
  filter:brightness(1.08) drop-shadow(0 5px 5px rgba(0,0,0,.92))!important;
}

/* =========================================================
   BLACKSAW2081 v2.6.55 — kierunkowy podgląd przesuwania
   Po wskazaniu strzałki cały wybrany rząd/kolumna wykonuje
   krótki ruch o 6 px w kierunku przesunięcia i pulsuje jasnością.
   ========================================================= */
.board.axis-preview-active.axis-preview-dir-left > .cell.axis-preview-target{
  animation:bsAxisPreviewLeft .62s ease-in-out infinite!important;
}
.board.axis-preview-active.axis-preview-dir-right > .cell.axis-preview-target{
  animation:bsAxisPreviewRight .62s ease-in-out infinite!important;
}
.board.axis-preview-active.axis-preview-dir-up > .cell.axis-preview-target{
  animation:bsAxisPreviewUp .62s ease-in-out infinite!important;
}
.board.axis-preview-active.axis-preview-dir-down > .cell.axis-preview-target{
  animation:bsAxisPreviewDown .62s ease-in-out infinite!important;
}
.board.axis-preview-active > .cell.axis-preview-target > .tile-texture{
  animation:bsAxisPreviewBrightness .62s ease-in-out infinite!important;
  transform-origin:50% 50%!important;
}
@keyframes bsAxisPreviewLeft{
  0%,100%{transform:translate3d(0,0,0)}
  50%{transform:translate3d(-6px,0,0)}
}
@keyframes bsAxisPreviewRight{
  0%,100%{transform:translate3d(0,0,0)}
  50%{transform:translate3d(6px,0,0)}
}
@keyframes bsAxisPreviewUp{
  0%,100%{transform:translate3d(0,0,0)}
  50%{transform:translate3d(0,-6px,0)}
}
@keyframes bsAxisPreviewDown{
  0%,100%{transform:translate3d(0,0,0)}
  50%{transform:translate3d(0,6px,0)}
}
@keyframes bsAxisPreviewBrightness{
  0%,100%{filter:brightness(1.03) saturate(1.08) contrast(1.08)}
  50%{filter:brightness(1.24) saturate(1.12) contrast(1.10)}
}
@media (prefers-reduced-motion:reduce){
  .board.axis-preview-active > .cell.axis-preview-target,
  .board.axis-preview-active > .cell.axis-preview-target > .tile-texture{
    animation:none!important;
  }
}



/* =========================================================
   BLACKSAW2081 v2.6.56 — kierunek przesuwania: lecące strzałki
   Cztery czerwone strzałki przelatują przez wskazany rząd lub
   kolumnę zgodnie z kierunkiem wybranej strzałki brzegowej.
   ========================================================= */
.board{position:relative!important;}
.axis-flow-preview{
  position:absolute!important;
  z-index:70!important;
  pointer-events:none!important;
  overflow:hidden!important;
  display:block!important;
}
.axis-flow-arrow{
  --flow-index:0;
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:clamp(22px,2.5vw,34px)!important;
  height:clamp(22px,2.5vw,34px)!important;
  margin-left:calc(clamp(22px,2.5vw,34px) / -2)!important;
  margin-top:calc(clamp(22px,2.5vw,34px) / -2)!important;
  background:url('../images/shift_arrow_up.png') center/contain no-repeat!important;
  opacity:0!important;
  filter:brightness(1.2) saturate(1.35) drop-shadow(0 0 5px rgba(255,20,55,.95)) drop-shadow(0 0 12px rgba(238,20,71,.72))!important;
  will-change:transform,opacity!important;
}
.axis-flow-right .axis-flow-arrow{
  transform:rotate(90deg)!important;
  animation:bsAxisFlowRight 1.15s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2875s)!important;
}
.axis-flow-left .axis-flow-arrow{
  transform:rotate(-90deg)!important;
  animation:bsAxisFlowLeft 1.15s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2875s)!important;
}
.axis-flow-up .axis-flow-arrow{
  transform:rotate(0deg)!important;
  animation:bsAxisFlowUp 1.15s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2875s)!important;
}
.axis-flow-down .axis-flow-arrow{
  transform:rotate(180deg)!important;
  animation:bsAxisFlowDown 1.15s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2875s)!important;
}
@keyframes bsAxisFlowRight{
  0%{left:-8%;opacity:0;transform:rotate(90deg) scale(.82)}
  12%{opacity:.95}
  88%{opacity:.95}
  100%{left:108%;opacity:0;transform:rotate(90deg) scale(1.08)}
}
@keyframes bsAxisFlowLeft{
  0%{left:108%;opacity:0;transform:rotate(-90deg) scale(.82)}
  12%{opacity:.95}
  88%{opacity:.95}
  100%{left:-8%;opacity:0;transform:rotate(-90deg) scale(1.08)}
}
@keyframes bsAxisFlowUp{
  0%{top:108%;opacity:0;transform:rotate(0deg) scale(.82)}
  12%{opacity:.95}
  88%{opacity:.95}
  100%{top:-8%;opacity:0;transform:rotate(0deg) scale(1.08)}
}
@keyframes bsAxisFlowDown{
  0%{top:-8%;opacity:0;transform:rotate(180deg) scale(.82)}
  12%{opacity:.95}
  88%{opacity:.95}
  100%{top:108%;opacity:0;transform:rotate(180deg) scale(1.08)}
}
@media (prefers-reduced-motion:reduce){
  .axis-flow-arrow{animation-duration:1.15s!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.57 — widoczne strzałki kierunku nad planszą
   Strzałki są rysowane z CSS (bez przezroczystych marginesów pliku PNG)
   i zawsze znajdują się ponad kaflami.
   ========================================================= */
.axis-flow-preview{
  z-index:1000!important;
  overflow:visible!important;
  isolation:isolate!important;
}
.axis-flow-arrow{
  width:42px!important;
  height:18px!important;
  margin-left:-21px!important;
  margin-top:-9px!important;
  background:none!important;
  opacity:0!important;
  filter:drop-shadow(0 0 4px rgba(255,20,55,1)) drop-shadow(0 0 10px rgba(238,20,71,.95))!important;
  z-index:1001!important;
}
.axis-flow-arrow::before{
  content:""!important;
  position:absolute!important;
  left:0!important;
  top:6px!important;
  width:29px!important;
  height:6px!important;
  border-radius:999px!important;
  background:#ff173f!important;
  box-shadow:0 0 7px #ff173f,0 0 14px rgba(255,23,63,.95)!important;
}
.axis-flow-arrow::after{
  content:""!important;
  position:absolute!important;
  right:0!important;
  top:1px!important;
  width:0!important;
  height:0!important;
  border-top:8px solid transparent!important;
  border-bottom:8px solid transparent!important;
  border-left:14px solid #ff173f!important;
  filter:drop-shadow(0 0 5px rgba(255,23,63,1))!important;
}
@keyframes bsAxisFlowRight{
  0%{left:-8%;opacity:0;transform:rotate(0deg) scale(.9)}
  12%{opacity:1}
  88%{opacity:1}
  100%{left:108%;opacity:0;transform:rotate(0deg) scale(1.06)}
}
@keyframes bsAxisFlowLeft{
  0%{left:108%;opacity:0;transform:rotate(180deg) scale(.9)}
  12%{opacity:1}
  88%{opacity:1}
  100%{left:-8%;opacity:0;transform:rotate(180deg) scale(1.06)}
}
@keyframes bsAxisFlowUp{
  0%{top:108%;opacity:0;transform:rotate(-90deg) scale(.9)}
  12%{opacity:1}
  88%{opacity:1}
  100%{top:-8%;opacity:0;transform:rotate(-90deg) scale(1.06)}
}
@keyframes bsAxisFlowDown{
  0%{top:-8%;opacity:0;transform:rotate(90deg) scale(.9)}
  12%{opacity:1}
  88%{opacity:1}
  100%{top:108%;opacity:0;transform:rotate(90deg) scale(1.06)}
}
.axis-flow-right .axis-flow-arrow{animation:bsAxisFlowRight 1.15s linear infinite!important}
.axis-flow-left .axis-flow-arrow{animation:bsAxisFlowLeft 1.15s linear infinite!important}
.axis-flow-up .axis-flow-arrow{animation:bsAxisFlowUp 1.15s linear infinite!important}
.axis-flow-down .axis-flow-arrow{animation:bsAxisFlowDown 1.15s linear infinite!important}


/* =========================================================
   BLACKSAW2081 LAB v2.6.59 — czytelny kierunek i pełne tło planszy
   - plansza ma nieprzezroczyste grafitowe podłoże podczas przygaszenia,
   - strzałki kierunku są renderowane nad planszą, w board-wrap.
   ========================================================= */
.board{
  background:#090b0d!important;
  isolation:isolate!important;
}
.board-wrap{
  position:relative!important;
  isolation:isolate!important;
}
.board-wrap > .axis-flow-preview{
  position:absolute!important;
  z-index:5000!important;
  pointer-events:none!important;
  overflow:hidden!important;
  display:block!important;
  contain:layout paint style!important;
}
.board-wrap > .axis-flow-preview .axis-flow-arrow{
  --flow-index:0;
  position:absolute!important;
  left:50%;
  top:50%;
  width:auto!important;
  height:auto!important;
  margin:0!important;
  padding:0!important;
  background:none!important;
  color:#ff173f!important;
  font-family:Arial Black,Impact,sans-serif!important;
  font-size:clamp(28px,3.6vw,48px)!important;
  line-height:1!important;
  font-weight:900!important;
  opacity:0;
  text-shadow:0 0 3px #fff,0 0 7px #ff173f,0 0 15px #ff173f,0 0 24px #ee1447!important;
  filter:none!important;
  z-index:5001!important;
  will-change:transform,left,top,opacity!important;
}
.board-wrap > .axis-flow-preview .axis-flow-arrow::before,
.board-wrap > .axis-flow-preview .axis-flow-arrow::after{
  content:none!important;
  display:none!important;
}
.board-wrap > .axis-flow-right .axis-flow-arrow{
  animation:bsAxisFlowVisibleRight 1.05s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2625s)!important;
}
.board-wrap > .axis-flow-left .axis-flow-arrow{
  animation:bsAxisFlowVisibleLeft 1.05s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2625s)!important;
}
.board-wrap > .axis-flow-up .axis-flow-arrow{
  animation:bsAxisFlowVisibleUp 1.05s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2625s)!important;
}
.board-wrap > .axis-flow-down .axis-flow-arrow{
  animation:bsAxisFlowVisibleDown 1.05s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.2625s)!important;
}
@keyframes bsAxisFlowVisibleRight{
  0%{left:-8%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(0deg) scale(.9)}
  10%{opacity:1}
  90%{opacity:1}
  100%{left:108%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(0deg) scale(1.08)}
}
@keyframes bsAxisFlowVisibleLeft{
  0%{left:108%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(180deg) scale(.9)}
  10%{opacity:1}
  90%{opacity:1}
  100%{left:-8%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(180deg) scale(1.08)}
}
@keyframes bsAxisFlowVisibleUp{
  0%{left:50%;top:108%;opacity:0;transform:translate(-50%,-50%) rotate(-90deg) scale(.9)}
  10%{opacity:1}
  90%{opacity:1}
  100%{left:50%;top:-8%;opacity:0;transform:translate(-50%,-50%) rotate(-90deg) scale(1.08)}
}
@keyframes bsAxisFlowVisibleDown{
  0%{left:50%;top:-8%;opacity:0;transform:translate(-50%,-50%) rotate(90deg) scale(.9)}
  10%{opacity:1}
  90%{opacity:1}
  100%{left:50%;top:108%;opacity:0;transform:translate(-50%,-50%) rotate(90deg) scale(1.08)}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.59 — widoczny kierunek + zielony hover strzałki
   ========================================================= */
.board{
  position:relative!important;
  overflow:visible!important;
}
.board > .axis-flow-preview{
  position:absolute!important;
  z-index:2147480000!important;
  display:block!important;
  pointer-events:none!important;
  overflow:hidden!important;
  isolation:isolate!important;
  opacity:1!important;
  visibility:visible!important;
  mix-blend-mode:normal!important;
}
.board > .axis-flow-preview > .axis-flow-arrow{
  --flow-index:0;
  position:absolute!important;
  left:50%;
  top:50%;
  display:block!important;
  width:46px!important;
  height:24px!important;
  margin:0!important;
  padding:0!important;
  opacity:0;
  visibility:visible!important;
  background:linear-gradient(90deg,#ff7a18 0%,#ff2417 52%,#ff002f 100%)!important;
  clip-path:polygon(0 34%,68% 34%,68% 0,100% 50%,68% 100%,68% 66%,0 66%)!important;
  border:0!important;
  border-radius:3px!important;
  box-shadow:0 0 4px #fff,0 0 10px #ff281a,0 0 20px #ff002f!important;
  filter:none!important;
  text-shadow:none!important;
  will-change:left,top,transform,opacity!important;
}
.board > .axis-flow-preview > .axis-flow-arrow::before,
.board > .axis-flow-preview > .axis-flow-arrow::after{
  content:none!important;
  display:none!important;
}
.board > .axis-flow-right > .axis-flow-arrow{
  animation:bsFlowBoardRight 1.1s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.22s)!important;
}
.board > .axis-flow-left > .axis-flow-arrow{
  animation:bsFlowBoardLeft 1.1s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.22s)!important;
}
.board > .axis-flow-up > .axis-flow-arrow{
  animation:bsFlowBoardUp 1.1s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.22s)!important;
}
.board > .axis-flow-down > .axis-flow-arrow{
  animation:bsFlowBoardDown 1.1s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.22s)!important;
}
@keyframes bsFlowBoardRight{
  0%{left:-10%;top:50%;opacity:0;transform:translate(-50%,-50%) scale(.82)}
  10%,88%{opacity:1}
  100%{left:110%;top:50%;opacity:0;transform:translate(-50%,-50%) scale(1.08)}
}
@keyframes bsFlowBoardLeft{
  0%{left:110%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(180deg) scale(.82)}
  10%,88%{opacity:1}
  100%{left:-10%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(180deg) scale(1.08)}
}
@keyframes bsFlowBoardUp{
  0%{left:50%;top:110%;opacity:0;transform:translate(-50%,-50%) rotate(-90deg) scale(.82)}
  10%,88%{opacity:1}
  100%{left:50%;top:-10%;opacity:0;transform:translate(-50%,-50%) rotate(-90deg) scale(1.08)}
}
@keyframes bsFlowBoardDown{
  0%{left:50%;top:-10%;opacity:0;transform:translate(-50%,-50%) rotate(90deg) scale(.82)}
  10%,88%{opacity:1}
  100%{left:50%;top:110%;opacity:0;transform:translate(-50%,-50%) rotate(90deg) scale(1.08)}
}

/* aktywna strzałka brzegowa zmienia czerwony odcień na zielony */
.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{
  filter:brightness(1.25) saturate(1.45) hue-rotate(88deg) drop-shadow(0 0 7px #27ff65) drop-shadow(0 0 15px rgba(39,255,101,.95))!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.61 — widoczny przepływ kierunku + zielony hover
   Warstwa kierunku jest osadzona bezpośrednio w board-wrap, dzięki czemu
   nie jest przygaszana ani zasłaniana przez komórki planszy.
   ========================================================= */
.board-wrap > .axis-flow-preview{
  position:absolute!important;
  display:block!important;
  z-index:2147483000!important;
  pointer-events:none!important;
  overflow:hidden!important;
  opacity:1!important;
  visibility:visible!important;
  isolation:isolate!important;
  contain:none!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-arrow{
  --flow-index:0;
  position:absolute!important;
  display:block!important;
  left:50%;
  top:50%;
  width:52px!important;
  height:28px!important;
  margin:0!important;
  padding:0!important;
  opacity:0;
  visibility:visible!important;
  background:linear-gradient(90deg,#ffcf42 0%,#ff5a19 28%,#ff102f 72%,#d60024 100%)!important;
  clip-path:polygon(0 31%,65% 31%,65% 0,100% 50%,65% 100%,65% 69%,0 69%)!important;
  border:0!important;
  border-radius:4px!important;
  box-shadow:0 0 5px rgba(255,255,255,.95),0 0 12px #ff3b18,0 0 24px #ef003d,0 0 38px rgba(239,0,61,.9)!important;
  filter:none!important;
  text-shadow:none!important;
  z-index:2147483001!important;
  will-change:left,top,transform,opacity!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-arrow::before,
.board-wrap > .axis-flow-preview > .axis-flow-arrow::after{
  content:none!important;
  display:none!important;
}
.board-wrap > .axis-flow-right > .axis-flow-arrow{
  animation:bsFlowWrapRight .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
.board-wrap > .axis-flow-left > .axis-flow-arrow{
  animation:bsFlowWrapLeft .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
.board-wrap > .axis-flow-up > .axis-flow-arrow{
  animation:bsFlowWrapUp .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
.board-wrap > .axis-flow-down > .axis-flow-arrow{
  animation:bsFlowWrapDown .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
@keyframes bsFlowWrapRight{
  0%{left:-8%;top:50%;opacity:0;transform:translate(-50%,-50%) scale(.86)}
  8%,90%{opacity:1}
  100%{left:108%;top:50%;opacity:0;transform:translate(-50%,-50%) scale(1.08)}
}
@keyframes bsFlowWrapLeft{
  0%{left:108%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(180deg) scale(.86)}
  8%,90%{opacity:1}
  100%{left:-8%;top:50%;opacity:0;transform:translate(-50%,-50%) rotate(180deg) scale(1.08)}
}
@keyframes bsFlowWrapUp{
  0%{left:50%;top:108%;opacity:0;transform:translate(-50%,-50%) rotate(-90deg) scale(.86)}
  8%,90%{opacity:1}
  100%{left:50%;top:-8%;opacity:0;transform:translate(-50%,-50%) rotate(-90deg) scale(1.08)}
}
@keyframes bsFlowWrapDown{
  0%{left:50%;top:-8%;opacity:0;transform:translate(-50%,-50%) rotate(90deg) scale(.86)}
  8%,90%{opacity:1}
  100%{left:50%;top:108%;opacity:0;transform:translate(-50%,-50%) rotate(90deg) scale(1.08)}
}

/* Aktywna strzałka brzegowa: zielony odcień dotyczy faktycznie renderowanej warstwy ::before. */
.board-wrap > .axis .shift-arrow::before{
  transition:filter .16s ease,transform .16s ease!important;
}
.board-wrap > .axis .shift-arrow:not(:disabled):hover::before,
.board-wrap > .axis .shift-arrow:not(:disabled):focus-visible::before,
.board-wrap > .axis .shift-arrow.is-arrow-active:not(:disabled)::before{
  filter:brightness(1.22) saturate(1.55) hue-rotate(82deg) drop-shadow(0 0 7px #36ff63) drop-shadow(0 0 17px rgba(54,255,99,1))!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.61 — naprawa widoczności strzałek przepływu
   i zielony kolor wyłącznie grafiki aktywnej strzałki.
   ========================================================= */
.board-wrap > .axis-flow-preview{
  z-index:2147483600!important;
  opacity:1!important;
  visibility:visible!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-arrow{
  z-index:2147483601!important;
  opacity:0;
  visibility:visible!important;
}

/* Na hover zielona jest sama grafika strzałki; cień pozostaje czarny. */
.board-wrap > .axis .shift-arrow:not(:disabled):hover::before,
.board-wrap > .axis .shift-arrow:not(:disabled):focus-visible::before,
.board-wrap > .axis .shift-arrow.is-arrow-active:not(:disabled)::before{
  filter:brightness(1.15) saturate(1.75) hue-rotate(82deg)
         drop-shadow(0 5px 5px rgba(0,0,0,.92))!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.63 — rzeczywista widoczność strzałek przepływu
   W starszych regułach .axis-flow-arrow miało opacity:0!important,
   co blokowało zmianę opacity w animacji. Overlay istnieje tylko podczas
   podglądu, dlatego strzałki mogą być stale widoczne w czasie animacji.
   ========================================================= */
.board-wrap > .axis-flow-preview{
  display:block!important;
  opacity:1!important;
  visibility:visible!important;
  z-index:2147483646!important;
  overflow:visible!important;
  pointer-events:none!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-arrow{
  display:block!important;
  opacity:1!important;
  visibility:visible!important;
  z-index:2147483647!important;
  width:54px!important;
  height:30px!important;
  background:linear-gradient(90deg,#ffd34a 0%,#ff6a1b 26%,#ff173f 68%,#d7002d 100%)!important;
  clip-path:polygon(0 31%,65% 31%,65% 0,100% 50%,65% 100%,65% 69%,0 69%)!important;
  border-radius:4px!important;
  box-shadow:0 0 5px #fff,0 0 12px #ff4b1f,0 0 25px #ff003c,0 0 40px rgba(255,0,60,.95)!important;
  mix-blend-mode:normal!important;
  filter:none!important;
}
.board-wrap > .axis-flow-right > .axis-flow-arrow{
  animation:bsFlowVisibleRightV262 .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
.board-wrap > .axis-flow-left > .axis-flow-arrow{
  animation:bsFlowVisibleLeftV262 .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
.board-wrap > .axis-flow-up > .axis-flow-arrow{
  animation:bsFlowVisibleUpV262 .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
.board-wrap > .axis-flow-down > .axis-flow-arrow{
  animation:bsFlowVisibleDownV262 .95s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.19s)!important;
}
@keyframes bsFlowVisibleRightV262{
  from{left:-8%;top:50%;transform:translate(-50%,-50%) scale(.9)}
  to{left:108%;top:50%;transform:translate(-50%,-50%) scale(1.08)}
}
@keyframes bsFlowVisibleLeftV262{
  from{left:108%;top:50%;transform:translate(-50%,-50%) rotate(180deg) scale(.9)}
  to{left:-8%;top:50%;transform:translate(-50%,-50%) rotate(180deg) scale(1.08)}
}
@keyframes bsFlowVisibleUpV262{
  from{left:50%;top:108%;transform:translate(-50%,-50%) rotate(-90deg) scale(.9)}
  to{left:50%;top:-8%;transform:translate(-50%,-50%) rotate(-90deg) scale(1.08)}
}
@keyframes bsFlowVisibleDownV262{
  from{left:50%;top:-8%;transform:translate(-50%,-50%) rotate(90deg) scale(.9)}
  to{left:50%;top:108%;transform:translate(-50%,-50%) rotate(90deg) scale(1.08)}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.63 — pewny podgląd kierunku przesunięcia
   Osobne klasy eliminują konflikty ze starszymi regułami .axis-flow-arrow.
   Cztery małe strzałki przemieszczają się przez cały rząd/kolumnę.
   ========================================================= */
.board-wrap > .axis-flow-preview{
  position:absolute!important;
  display:block!important;
  overflow:hidden!important;
  pointer-events:none!important;
  opacity:1!important;
  visibility:visible!important;
  z-index:2147483640!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-particle{
  --flow-index:0;
  position:absolute!important;
  display:block!important;
  width:30px!important;
  height:16px!important;
  margin:0!important;
  padding:0!important;
  opacity:0;
  visibility:visible!important;
  z-index:2147483641!important;
  will-change:left,top,opacity!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-particle > .axis-flow-glyph{
  position:absolute!important;
  inset:0!important;
  display:block!important;
  width:30px!important;
  height:16px!important;
  background:linear-gradient(90deg,#ffd24a 0%,#ff681c 30%,#ff173f 72%,#d6002b 100%)!important;
  clip-path:polygon(0 30%,64% 30%,64% 0,100% 50%,64% 100%,64% 70%,0 70%)!important;
  border-radius:2px!important;
  box-shadow:0 0 3px rgba(255,255,255,.95),0 0 8px #ff3b1c,0 0 15px rgba(238,20,71,.95)!important;
  transform-origin:50% 50%!important;
}
.board-wrap > .axis-flow-right > .axis-flow-particle{
  animation:bsFlowParticleRightV263 1.2s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.3s)!important;
}
.board-wrap > .axis-flow-left > .axis-flow-particle{
  animation:bsFlowParticleLeftV263 1.2s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.3s)!important;
}
.board-wrap > .axis-flow-up > .axis-flow-particle{
  animation:bsFlowParticleUpV263 1.2s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.3s)!important;
}
.board-wrap > .axis-flow-down > .axis-flow-particle{
  animation:bsFlowParticleDownV263 1.2s linear infinite!important;
  animation-delay:calc(var(--flow-index) * -.3s)!important;
}
.board-wrap > .axis-flow-right > .axis-flow-particle > .axis-flow-glyph{transform:rotate(0deg)!important}
.board-wrap > .axis-flow-left > .axis-flow-particle > .axis-flow-glyph{transform:rotate(180deg)!important}
.board-wrap > .axis-flow-up > .axis-flow-particle > .axis-flow-glyph{transform:rotate(-90deg)!important}
.board-wrap > .axis-flow-down > .axis-flow-particle > .axis-flow-glyph{transform:rotate(90deg)!important}
@keyframes bsFlowParticleRightV263{
  0%{left:-6%;top:50%;opacity:0;transform:translate(-50%,-50%)}
  10%,88%{opacity:1}
  100%{left:106%;top:50%;opacity:0;transform:translate(-50%,-50%)}
}
@keyframes bsFlowParticleLeftV263{
  0%{left:106%;top:50%;opacity:0;transform:translate(-50%,-50%)}
  10%,88%{opacity:1}
  100%{left:-6%;top:50%;opacity:0;transform:translate(-50%,-50%)}
}
@keyframes bsFlowParticleUpV263{
  0%{left:50%;top:106%;opacity:0;transform:translate(-50%,-50%)}
  10%,88%{opacity:1}
  100%{left:50%;top:-6%;opacity:0;transform:translate(-50%,-50%)}
}
@keyframes bsFlowParticleDownV263{
  0%{left:50%;top:-6%;opacity:0;transform:translate(-50%,-50%)}
  10%,88%{opacity:1}
  100%{left:50%;top:106%;opacity:0;transform:translate(-50%,-50%)}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.64 — czytelniejsze strzałki przepływu
   Większy rozmiar, wolniejszy ruch, czarne wypełnienie oraz
   jasna obwódka i biały glow dla kontrastu na każdym kaflu.
   ========================================================= */
.board-wrap > .axis-flow-preview > .axis-flow-particle{
  width:40px!important;
  height:22px!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-particle > .axis-flow-glyph{
  width:40px!important;
  height:22px!important;
  background:#050505!important;
  box-shadow:0 0 4px rgba(255,255,255,.95),0 0 9px rgba(255,244,190,.9),0 0 16px rgba(255,255,255,.72)!important;
  filter:none!important;
}
.board-wrap > .axis-flow-preview > .axis-flow-particle > .axis-flow-glyph::before{
  content:""!important;
  position:absolute!important;
  inset:-3px!important;
  display:block!important;
  background:#fff4bf!important;
  clip-path:polygon(0 30%,64% 30%,64% 0,100% 50%,64% 100%,64% 70%,0 70%)!important;
  z-index:-1!important;
}
.board-wrap > .axis-flow-right > .axis-flow-particle,
.board-wrap > .axis-flow-left > .axis-flow-particle,
.board-wrap > .axis-flow-up > .axis-flow-particle,
.board-wrap > .axis-flow-down > .axis-flow-particle{
  animation-duration:2.4s!important;
  animation-delay:calc(var(--flow-index) * -.6s)!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.65 — stałe pola Respawn
   G1 (Gracz 1): L, góra + prawo. A7 (SI): L, dół + lewo.
   ========================================================= */
.board > .cell.fixed{
  cursor:default!important;
}
.board > .cell.fixed:hover{
  outline-color:rgba(255,255,255,.26)!important;
}
.board > .cell.fixed > .respawn-owner-tint{
  position:absolute!important;
  inset:0!important;
  z-index:2!important;
  pointer-events:none!important;
  mix-blend-mode:screen!important;
}
.board > .cell.respawn-p1 > .respawn-owner-tint{
  background:rgba(55,132,255,.14)!important;
  box-shadow:inset 0 0 0 2px rgba(94,157,255,.72),inset 0 0 24px rgba(36,104,255,.22)!important;
}
.board > .cell.respawn-p2 > .respawn-owner-tint{
  background:rgba(255,119,34,.13)!important;
  box-shadow:inset 0 0 0 2px rgba(255,151,72,.72),inset 0 0 24px rgba(255,91,20,.21)!important;
}
.board > .cell.fixed .tile-rotation-controls{
  display:none!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.66 — Respawn: czerwony SI + komunikat
   ========================================================= */
.board > .cell.respawn-p2 > .respawn-owner-tint{
  background:rgba(225,18,38,.16)!important;
  box-shadow:inset 0 0 0 2px rgba(255,48,66,.78),inset 0 0 26px rgba(215,0,30,.29)!important;
}
.board > .cell.respawn-lock-hint > .respawn-lock-note{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  z-index:40!important;
  transform:translate(-50%,-50%) scale(.88)!important;
  display:block!important;
  max-width:88%!important;
  padding:5px 8px!important;
  border:1px solid rgba(255,255,255,.68)!important;
  border-radius:6px!important;
  background:rgba(7,9,12,.92)!important;
  color:#fff!important;
  font-size:clamp(.46rem,.8vw,.7rem)!important;
  line-height:1!important;
  font-weight:950!important;
  letter-spacing:.055em!important;
  white-space:nowrap!important;
  text-align:center!important;
  box-shadow:0 4px 14px rgba(0,0,0,.72),0 0 10px rgba(255,255,255,.14)!important;
  opacity:0!important;
  pointer-events:none!important;
  transition:opacity .16s ease,transform .16s ease!important;
}
.board > .cell.respawn-lock-hint:hover > .respawn-lock-note,
.board > .cell.respawn-lock-hint:focus-visible > .respawn-lock-note{
  opacity:1!important;
  transform:translate(-50%,-50%) scale(1)!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.68 — kursor ataku na stałym polu Respawn
   Stałe pole nadal blokuje obrót, ale w fazie walki aktywny cel
   zachowuje kursor wskazujący możliwość kliknięcia.
   ========================================================= */
.board > .cell.fixed.combat-target,
.board > .cell.fixed.combat-target:hover,
.board > .cell.fixed.combat-target:focus-visible{
  cursor:pointer!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.68 — komunikat blokady Respawn w fazie PRZEBUDOWA
   ========================================================= */
.board > .cell.respawn-lock-hint{
  cursor:not-allowed!important;
}
.board > .cell.respawn-lock-hint.combat-target{
  cursor:pointer!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.69 — komunikat blokady ponad pionkiem
   ========================================================= */
.board > .cell.respawn-lock-hint{
  isolation:isolate!important;
}
.board > .cell.respawn-lock-hint > .respawn-lock-note{
  z-index:999!important;
}
.board > .cell.respawn-lock-hint > .token-shell{
  z-index:42!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.70 — kolory właścicieli pól Respawn
   G1 (Gracz 1): czerwony. A7 (SI): niebieski.
   ========================================================= */
.board > .cell.respawn-p1 > .respawn-owner-tint{
  background:rgba(225,18,38,.16)!important;
  box-shadow:inset 0 0 0 2px rgba(255,48,66,.78),inset 0 0 26px rgba(215,0,30,.29)!important;
}
.board > .cell.respawn-p2 > .respawn-owner-tint{
  background:rgba(55,132,255,.14)!important;
  box-shadow:inset 0 0 0 2px rgba(94,157,255,.72),inset 0 0 24px rgba(36,104,255,.22)!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.71 — komunikat BLOKADA
   Czerwone tło, bez białej ramki, idealne wyśrodkowanie.
   ========================================================= */
.board > .cell.respawn-lock-hint > .respawn-lock-note{
  left:50%!important;
  right:auto!important;
  top:50%!important;
  bottom:auto!important;
  width:max-content!important;
  max-width:calc(100% - 10px)!important;
  box-sizing:border-box!important;
  margin:0!important;
  padding:6px 10px!important;
  border:0!important;
  outline:0!important;
  border-radius:7px!important;
  background:#c91525!important;
  color:#fff!important;
  text-align:center!important;
  box-shadow:0 4px 14px rgba(0,0,0,.72),0 0 12px rgba(225,18,38,.42)!important;
  transform:translate(-50%,-50%) scale(.88)!important;
}
.board > .cell.respawn-lock-hint:hover > .respawn-lock-note,
.board > .cell.respawn-lock-hint:focus-visible > .respawn-lock-note{
  transform:translate(-50%,-50%) scale(1)!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.72 — idealne centrowanie napisu BLOKADA
   ========================================================= */
.board > .cell.respawn-lock-hint > .respawn-lock-note{
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-width:78px!important;
  height:28px!important;
  padding:0 10px!important;
  line-height:1!important;
  text-indent:0!important;
  letter-spacing:.045em!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.73 — napis OBRÓĆ na środku pola
   ========================================================= */
.board > .cell.rotation-available > .tile-rotation-controls.hover-controls{
  position:absolute!important;
  inset:4%!important;
}
.board > .cell.rotation-available > .tile-rotation-controls.hover-controls .rotate-arrow{
  position:absolute!important;
  left:19%!important;
  top:5%!important;
  width:62%!important;
  height:auto!important;
  margin:0!important;
}
.board > .cell.rotation-available > .tile-rotation-controls.hover-controls small{
  position:absolute!important;
  left:0!important;
  right:0!important;
  top:50%!important;
  width:100%!important;
  margin:0!important;
  padding:0!important;
  transform:translateY(-50%)!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  text-align:center!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.74 — wybrany kafel: pełny glow i napis OBRÓĆ
   Obraca się wyłącznie grafika strzałek; tekst pozostaje nieruchomy.
   ========================================================= */
.board > .cell.rotation-selected{
  overflow:visible!important;
}
.board > .cell.rotation-selected > .tile-rotation-controls.selected-controls{
  overflow:visible!important;
}
.board > .cell.rotation-selected .tile-rotate-again{
  overflow:visible!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  isolation:isolate!important;
}
.board > .cell.rotation-selected .tile-rotate-again > .rotate-arrow{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:82%!important;
  height:82%!important;
  max-width:none!important;
  max-height:none!important;
  object-fit:contain!important;
  transform-origin:50% 50%!important;
  translate:-50% -50%!important;
  animation:rotateAgainV2674 1.05s linear infinite!important;
  filter:drop-shadow(0 3px 3px rgba(0,0,0,1)) drop-shadow(0 8px 7px rgba(0,0,0,.96)) drop-shadow(0 0 10px rgba(238,20,71,.72))!important;
  overflow:visible!important;
  z-index:1!important;
}
.board > .cell.rotation-selected .tile-rotate-again > .rotate-again-label{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  translate:-50% -50%!important;
  z-index:2!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  margin:0!important;
  padding:0!important;
  color:#fff!important;
  font-size:clamp(.34rem,.43vw,.47rem)!important;
  font-weight:950!important;
  line-height:1!important;
  letter-spacing:.055em!important;
  white-space:nowrap!important;
  text-align:center!important;
  text-shadow:0 2px 3px #000,0 0 5px #000!important;
  pointer-events:none!important;
  transform:none!important;
  animation:none!important;
}
@keyframes rotateAgainV2674{
  from{transform:rotate(0deg)}
  to{transform:rotate(360deg)}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.77 — czerwony przycisk ZAKOŃCZ
   oraz stabilny panel graczy podczas obracania kafelka
   ========================================================= */

/* Finalne nadpisanie wszystkich wcześniejszych, historycznych reguł.
   Przycisk ma być czerwony także w spoczynku i na hover/focus. */
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation,
.board-wrap .cell .tile-finish-rotation{
  border:0!important;
  outline:0!important;
  background:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:0 3px 9px rgba(0,0,0,.46),0 0 9px rgba(215,25,45,.28)!important;
  text-shadow:0 1px 2px rgba(0,0,0,.8)!important;
  opacity:1!important;
  filter:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:hover,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:focus-visible,
.board-wrap .cell .tile-finish-rotation:hover,
.board-wrap .cell .tile-finish-rotation:focus-visible{
  border:0!important;
  outline:2px solid rgba(255,255,255,.2)!important;
  outline-offset:-2px!important;
  background:#ef243b!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:0 4px 11px rgba(0,0,0,.52),0 0 13px rgba(239,36,59,.44)!important;
  opacity:1!important;
  filter:none!important;
  transform:none!important;
}

/* Stała geometria lewego HUD-u. Zapobiega pojawianiu/znikaniu paska
   przewijania oraz zmianom szerokości podczas kolejnych renderów planszy. */
.left-hud{
  width:100%!important;
  min-width:0!important;
  scrollbar-gutter:stable!important;
  contain:layout style!important;
}
.left-hud .player-panels{
  width:100%!important;
  min-width:0!important;
  grid-auto-rows:minmax(0,auto)!important;
}
.left-hud .player-card{
  width:100%!important;
  min-width:0!important;
  transform:none!important;
  transition:border-color .2s ease,box-shadow .2s ease!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.78 — stabilny przycisk ZAKOŃCZ
   i stabilizacja cienia lewego panelu
   ========================================================= */

/* Przycisk zachowuje dokładnie tę samą pozycję w stanie normalnym,
   hover i focus. Poprzednie transform:none usuwało translateX(-50%)
   i przesuwało go w prawo po najechaniu. */
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation,
.board-wrap .cell .tile-finish-rotation{
  left:50%!important;
  transform:translateX(-50%)!important;
  margin:0!important;
  border:0!important;
  outline:0!important;
  background:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  transition:background-color .16s ease,box-shadow .16s ease!important;
}
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:hover,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:focus-visible,
.board-wrap .cell .tile-finish-rotation:hover,
.board-wrap .cell .tile-finish-rotation:focus-visible{
  left:50%!important;
  transform:translateX(-50%)!important;
  margin:0!important;
  border:0!important;
  outline:0!important;
  background:#ef243b!important;
  background-image:none!important;
  color:#fff!important;
}

/* Lewy panel nie zmienia geometrii ani cienia podczas renderowania obrotu. */
.left-hud,
.left-hud .player-panels,
.left-hud .player-card,
.left-hud .blacksaw-side-frame,
.left-hud .blacksaw-side-frame-surface{
  transform:translateZ(0)!important;
  backface-visibility:hidden!important;
}
.left-hud .player-card,
.left-hud .blacksaw-side-frame,
.left-hud .blacksaw-side-frame-surface{
  transition:none!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.79 — ZAKOŃCZ: transparentny spoczynek,
   czerwone tło wyłącznie po hover/focus, bez zmiany pozycji
   ========================================================= */
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation,
.board-wrap .cell .tile-finish-rotation{
  left:50%!important;
  transform:translateX(-50%)!important;
  margin:0!important;
  border:0!important;
  outline:0!important;
  background:transparent!important;
  background-color:transparent!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:none!important;
  text-shadow:0 1px 2px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.9)!important;
  opacity:1!important;
  filter:none!important;
  transition:background-color .16s ease,box-shadow .16s ease!important;
}
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:hover,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:focus-visible,
.board-wrap .cell .tile-finish-rotation:hover,
.board-wrap .cell .tile-finish-rotation:focus-visible{
  left:50%!important;
  transform:translateX(-50%)!important;
  margin:0!important;
  border:0!important;
  outline:0!important;
  background:#d7192d!important;
  background-color:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:0 3px 9px rgba(0,0,0,.48),0 0 10px rgba(215,25,45,.34)!important;
  opacity:1!important;
  filter:none!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.80 — czytelne diody ruchu i walki
   Ciemna, kompaktowa kapsuła HUD pod trzema diodami.
   ========================================================= */
.token-shell > .combat-board-dice-pips,
.token-shell > .movement-dice-pips,
.combat-target-marker > .combat-board-dice-pips{
  box-sizing:border-box!important;
  min-width:42px!important;
  width:max-content!important;
  max-width:calc(100% - 8px)!important;
  min-height:18px!important;
  padding:4px 7px!important;
  gap:5px!important;
  border:1px solid rgba(255,54,82,.38)!important;
  border-radius:999px!important;
  background:rgba(5,6,8,.72)!important;
  background-image:none!important;
  box-shadow:
    0 3px 8px rgba(0,0,0,.72),
    inset 0 0 8px rgba(0,0,0,.82),
    0 0 10px rgba(238,20,71,.30)!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
  overflow:visible!important;
}

.token-shell > .combat-board-dice-pips .combat-board-die-pip,
.token-shell > .movement-dice-pips .movement-die-pip,
.combat-target-marker > .combat-board-dice-pips .combat-board-die-pip{
  position:relative!important;
  z-index:1!important;
}

@media(max-width:720px){
  .token-shell > .combat-board-dice-pips,
  .token-shell > .movement-dice-pips,
  .combat-target-marker > .combat-board-dice-pips{
    min-width:38px!important;
    min-height:16px!important;
    padding:3px 6px!important;
    gap:4px!important;
  }
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.81 — ZOSTAŃ spójny z ZAKOŃCZ
   Przezroczyste tło w spoczynku, czerwone wyłącznie po hover/focus,
   bez zmiany położenia przycisku.
   ========================================================= */
.board-wrap .cell .stay-on-cell{
  left:50%!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
  border:0!important;
  outline:0!important;
  background:transparent!important;
  background-color:transparent!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:none!important;
  text-shadow:0 1px 2px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.9)!important;
  opacity:1!important;
  filter:none!important;
  transition:background-color .16s ease,box-shadow .16s ease!important;
}
.board-wrap .cell .stay-on-cell:hover,
.board-wrap .cell .stay-on-cell:focus-visible{
  left:50%!important;
  top:50%!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
  border:0!important;
  outline:0!important;
  background:#d7192d!important;
  background-color:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:0 3px 9px rgba(0,0,0,.48),0 0 10px rgba(215,25,45,.34)!important;
  opacity:1!important;
  filter:none!important;
}
.board-wrap .cell .stay-on-cell:active{
  left:50%!important;
  top:50%!important;
  transform:translate(-50%,-50%)!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.82 — wspólna ramka HUD dla ZOSTAŃ i ZAKOŃCZ
   Cienka ciemnoczerwona ramka w spoczynku, mocniejsza na hover,
   bez zmiany geometrii i położenia przycisków.
   ========================================================= */
.board-wrap .cell .stay-on-cell,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation,
.board-wrap .cell .tile-finish-rotation{
  box-sizing:border-box!important;
  border:1px solid rgba(112,12,24,.95)!important;
  outline:0!important;
  background:transparent!important;
  background-color:transparent!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:
    inset 0 0 5px rgba(190,18,38,.26),
    0 2px 6px rgba(0,0,0,.42)!important;
  text-shadow:0 1px 2px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.9)!important;
  transition:background-color .16s ease,border-color .16s ease,box-shadow .16s ease!important;
}

.board-wrap .cell .stay-on-cell:hover,
.board-wrap .cell .stay-on-cell:focus-visible,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:hover,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:focus-visible,
.board-wrap .cell .tile-finish-rotation:hover,
.board-wrap .cell .tile-finish-rotation:focus-visible{
  border:1px solid #ff3b50!important;
  outline:0!important;
  background:#d7192d!important;
  background-color:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:
    inset 0 0 7px rgba(255,112,125,.34),
    0 3px 9px rgba(0,0,0,.48),
    0 0 10px rgba(215,25,45,.38)!important;
}

/* Zachowanie stałej pozycji każdego z dwóch przycisków. */
.board-wrap .cell .stay-on-cell,
.board-wrap .cell .stay-on-cell:hover,
.board-wrap .cell .stay-on-cell:focus-visible,
.board-wrap .cell .stay-on-cell:active{
  left:50%!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
}
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:hover,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:focus-visible,
.board-wrap .cell .tile-finish-rotation,
.board-wrap .cell .tile-finish-rotation:hover,
.board-wrap .cell .tile-finish-rotation:focus-visible,
.board-wrap .cell .tile-finish-rotation:active{
  left:50%!important;
  transform:translateX(-50%)!important;
  margin:0!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.83 — czarne tło HUD w spoczynku
   ZOSTAŃ i Zakończ: czarne tło domyślne, czerwone na hover/focus,
   bez zmiany geometrii i położenia.
   ========================================================= */
.board-wrap .cell .stay-on-cell,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation,
.board-wrap .cell .tile-finish-rotation{
  background:#050506!important;
  background-color:#050506!important;
  background-image:none!important;
  color:#fff!important;
  border-color:rgba(112,12,24,.95)!important;
  box-shadow:
    inset 0 0 5px rgba(190,18,38,.26),
    0 2px 6px rgba(0,0,0,.42)!important;
}

.board-wrap .cell .stay-on-cell:hover,
.board-wrap .cell .stay-on-cell:focus-visible,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:hover,
.board-wrap .cell .tile-rotation-controls.selected-controls .tile-finish-rotation:focus-visible,
.board-wrap .cell .tile-finish-rotation:hover,
.board-wrap .cell .tile-finish-rotation:focus-visible{
  background:#d7192d!important;
  background-color:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  border-color:#ff3b50!important;
  box-shadow:
    inset 0 0 7px rgba(255,112,125,.34),
    0 3px 9px rgba(0,0,0,.48),
    0 0 10px rgba(215,25,45,.38)!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.84 — całe pole gracza aktywuje ZOSTAŃ
   W fazie RUCH najechanie/focus na całe aktualne pole gracza
   pokazuje stan aktywny przycisku ZOSTAŃ. Kliknięcie pola kończy ruch.
   ========================================================= */
.board-wrap .cell.active-movement-cell{
  cursor:pointer!important;
}

.board-wrap .cell.active-movement-cell:hover .stay-on-cell,
.board-wrap .cell.active-movement-cell:focus-visible .stay-on-cell,
.board-wrap .cell.active-movement-cell:focus-within .stay-on-cell{
  background:#d7192d!important;
  background-color:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  border-color:#ff3b50!important;
  box-shadow:
    inset 0 0 7px rgba(255,112,125,.34),
    0 3px 9px rgba(0,0,0,.48),
    0 0 10px rgba(215,25,45,.38)!important;
  left:50%!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
}



/* =========================================================
   BLACKSAW2081 LAB v2.6.85 — całe pole gracza aktywuje NIE ATAKUJ
   W fazie WALKA najechanie/focus na całe pole aktywnego gracza
   pokazuje aktywny stan przycisku. Kliknięcie pola kończy walkę.
   ========================================================= */
.board-wrap .cell.active-combat-cell{
  cursor:pointer!important;
}

.board-wrap .cell.active-combat-cell:hover .combat-skip-on-cell,
.board-wrap .cell.active-combat-cell:focus-visible .combat-skip-on-cell,
.board-wrap .cell.active-combat-cell:focus-within .combat-skip-on-cell{
  background:#d7192d!important;
  background-color:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  border-color:#ff3b50!important;
  box-shadow:
    inset 0 0 7px rgba(255,112,125,.34),
    0 3px 9px rgba(0,0,0,.48),
    0 0 10px rgba(215,25,45,.38)!important;
  left:50%!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.86 — NIE ATAKUJ spójny z ZOSTAŃ
   Identyczny HUD, geometria i stany hover/focus bez przesunięć.
   ========================================================= */
.board-wrap .cell .combat-skip-on-cell{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  z-index:125!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  box-sizing:border-box!important;
  min-width:58%!important;
  min-height:18px!important;
  padding:3px 8px!important;
  margin:0!important;
  border:1px solid rgba(112,12,24,.95)!important;
  border-radius:999px!important;
  outline:0!important;
  background:#050506!important;
  background-color:#050506!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:inset 0 0 5px rgba(190,18,38,.26),0 2px 6px rgba(0,0,0,.42)!important;
  text-shadow:0 1px 2px rgba(0,0,0,.95),0 0 4px rgba(0,0,0,.9)!important;
  font:900 .52rem/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;
  opacity:1!important;
  filter:none!important;
  animation:none!important;
  transition:background-color .16s ease,border-color .16s ease,box-shadow .16s ease!important;
}
.board-wrap .cell .combat-skip-on-cell:hover,
.board-wrap .cell .combat-skip-on-cell:focus-visible,
.board-wrap .cell.active-combat-cell:hover .combat-skip-on-cell,
.board-wrap .cell.active-combat-cell:focus-visible .combat-skip-on-cell,
.board-wrap .cell.active-combat-cell:focus-within .combat-skip-on-cell{
  left:50%!important;
  top:50%!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
  border:1px solid #ff3b50!important;
  outline:0!important;
  background:#d7192d!important;
  background-color:#d7192d!important;
  background-image:none!important;
  color:#fff!important;
  box-shadow:inset 0 0 7px rgba(255,112,125,.34),0 3px 9px rgba(0,0,0,.48),0 0 10px rgba(215,25,45,.38)!important;
  opacity:1!important;
  filter:none!important;
  animation:none!important;
}
.board-wrap .cell .combat-skip-on-cell:active{
  left:50%!important;
  top:50%!important;
  transform:translate(-50%,-50%)!important;
}
@media(max-width:720px){
  .board-wrap .cell .combat-skip-on-cell{
    min-width:62%!important;
    min-height:16px!important;
    padding:2px 6px!important;
    font-size:.44rem!important;
  }
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.87 — czytelne kursory w fazie walki
   Łapka wyłącznie na polu aktywnego gracza i polu celu.
   ========================================================= */
.board-wrap .board > .cell.combat-noninteractive{
  cursor:default!important;
}
.board-wrap .board > .cell.active-combat-cell,
.board-wrap .board > .cell.combat-target,
.board-wrap .board > .cell.active-combat-cell .combat-skip-on-cell{
  cursor:pointer!important;
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.88 — czytelne kursory w fazie ruchu
   Łapka wyłącznie na polu aktywnego gracza i dostępnych celach ruchu.
   ========================================================= */
.board-wrap .board > .cell.move-noninteractive{
  cursor:default!important;
}
.board-wrap .board > .cell.active-movement-cell,
.board-wrap .board > .cell.move-reachable{
  cursor:pointer!important;
}



/* =========================================================
   BLACKSAW2081 LAB v2.6.92 — biblioteka kafli i aktywny pionek
   ========================================================= */
.game-layout > .panel .utility-row.tile-library{
  display:grid!important;
  grid-template-columns:1fr!important;
  gap:10px!important;
  align-items:stretch!important;
  padding:0!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
}
.tile-library-card{
  position:relative!important;
  min-width:0!important;
  padding:10px 11px 11px!important;
  border:1px solid rgba(214,32,76,.46)!important;
  border-radius:10px!important;
  background:linear-gradient(180deg,rgba(12,10,11,.94),rgba(8,7,8,.88))!important;
  box-shadow:inset 0 0 18px rgba(0,0,0,.7),0 4px 12px rgba(0,0,0,.32)!important;
}
.tile-library-card > .section-kicker{
  display:block!important;
  margin:0 0 8px!important;
}
.stack-library-card .reserve{
  min-height:48px!important;
  padding:0!important;
  overflow:visible!important;
}
.tile-catalog{
  display:grid!important;
  grid-template-columns:repeat(4,minmax(0,1fr))!important;
  gap:7px!important;
  align-items:start!important;
}
.tile-catalog-item{
  display:grid!important;
  grid-template-rows:auto auto auto!important;
  justify-items:center!important;
  gap:4px!important;
  min-width:0!important;
  color:#fff!important;
  text-align:center!important;
}
.tile-catalog-item > strong{
  min-width:24px!important;
  padding:1px 5px!important;
  border-radius:999px!important;
  background:rgba(0,0,0,.9)!important;
  border:1px solid rgba(235,40,78,.68)!important;
  color:#fff!important;
  font-size:.72rem!important;
  font-weight:950!important;
  line-height:1.3!important;
  box-shadow:0 0 8px rgba(220,18,58,.2)!important;
}
.tile-catalog-item > span:last-child{
  color:rgba(255,255,255,.82)!important;
  font-size:.66rem!important;
  font-weight:900!important;
  line-height:1!important;
}
.tile-catalog .mini-tile.catalog-tile{
  --mini-size:42px!important;
  width:var(--mini-size)!important;
  height:var(--mini-size)!important;
  border-color:rgba(224,171,47,.58)!important;
  box-shadow:0 3px 8px rgba(0,0,0,.78),inset 0 0 8px rgba(0,0,0,.62)!important;
}

/* Pionki mniejsze o dokładnie 10%, bez zmiany grafiki i HUD-u. */
.board > .cell > .token-shell > .token,
.board > .cell > .token{
  width:90%!important;
  height:90%!important;
}
.moving-token-clone,
.moving-token-clone.active-token{
  background-size:90% 90%!important;
}

/* Osobna warstwa pod aktywnym pionkiem — czerwony Gracz 1, niebieski SI. */
.token-shell > .active-token-pulse{
  position:absolute!important;
  left:50%!important;
  top:69%!important;
  width:62%!important;
  height:25%!important;
  transform:translate(-50%,-50%) scale(.78)!important;
  border-radius:50%!important;
  z-index:4!important;
  pointer-events:none!important;
  opacity:.38!important;
  animation:bsActiveTokenPulse 1.55s ease-in-out infinite!important;
}
.token-shell > .active-token-pulse.p1{
  background:radial-gradient(ellipse,rgba(255,38,56,.8) 0%,rgba(225,0,30,.38) 45%,rgba(225,0,30,0) 74%)!important;
  box-shadow:0 0 13px rgba(255,25,48,.9),0 0 25px rgba(220,0,30,.55)!important;
}
.token-shell > .active-token-pulse.p2{
  background:radial-gradient(ellipse,rgba(35,165,255,.82) 0%,rgba(0,95,235,.4) 45%,rgba(0,95,235,0) 74%)!important;
  box-shadow:0 0 13px rgba(35,165,255,.9),0 0 25px rgba(0,95,235,.56)!important;
}
@keyframes bsActiveTokenPulse{
  0%,100%{transform:translate(-50%,-50%) scale(.78);opacity:.34;filter:blur(1px)}
  50%{transform:translate(-50%,-50%) scale(1.1);opacity:.9;filter:blur(2px)}
}
@media(max-width:720px){
  .tile-catalog .mini-tile.catalog-tile{--mini-size:34px!important;}
  .tile-catalog{gap:4px!important;}
  .board > .cell > .token-shell > .token,
  .board > .cell > .token{width:90%!important;height:90%!important;}
}

/* =========================================================
   BLACKSAW2081 LAB v2.6.103 — aktywny pionek jako osobny HUD DOM:
   ruch narożników do środka + krótki błysk pełnej ramki.
   ========================================================= */
.game-layout > .panel .utility-row.tile-library{
  display:grid!important;
  grid-template-columns:minmax(86px,.78fr) minmax(0,2.22fr)!important;
  gap:10px!important;
  align-items:stretch!important;
}
.game-layout > .panel .utility-row.tile-library > .tile-library-card{
  height:100%!important;
  min-height:112px!important;
  box-sizing:border-box!important;
}
.stack-library-card .reserve{
  min-height:66px!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
}
.tile-pool-card .tile-catalog{height:66px!important;align-items:center!important;}
.tile-catalog-item > span:not(.mini-tile){display:none!important;}
.token-shell > .active-token-pulse{display:none!important;}
.board > .cell.active-player-cell::before,
.board > .cell.active-player-cell::after{content:none!important;display:none!important;}

.board > .cell.active-player-cell{
  --active-cell-color:255,28,55;
  position:relative!important;
  isolation:isolate!important;
}
.board > .cell.active-player-cell.active-player-p1{--active-cell-color:255,28,55;}
.board > .cell.active-player-cell.active-player-p2{--active-cell-color:30,145,255;}

.active-player-hud{
  position:absolute!important;
  inset:0!important;
  z-index:120!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.active-player-hud .active-corner{
  position:absolute!important;
  width:17px!important;
  height:17px!important;
  opacity:.55!important;
  filter:drop-shadow(0 0 2px rgba(var(--active-cell-color),.95)) drop-shadow(0 0 6px rgba(var(--active-cell-color),.65))!important;
  animation-duration:1.05s!important;
  animation-timing-function:cubic-bezier(.45,0,.25,1)!important;
  animation-iteration-count:infinite!important;
}
.active-player-hud .active-corner::before,
.active-player-hud .active-corner::after{
  content:""!important;
  position:absolute!important;
  background:rgb(var(--active-cell-color))!important;
  border-radius:1px!important;
}
.active-player-hud .active-corner::before{width:17px!important;height:2px!important;}
.active-player-hud .active-corner::after{width:2px!important;height:17px!important;}
.active-player-hud .tl{left:3px!important;top:3px!important;animation-name:bsCornerTL!important;}
.active-player-hud .tr{right:3px!important;top:3px!important;animation-name:bsCornerTR!important;}
.active-player-hud .bl{left:3px!important;bottom:3px!important;animation-name:bsCornerBL!important;}
.active-player-hud .br{right:3px!important;bottom:3px!important;animation-name:bsCornerBR!important;}
.active-player-hud .tr::before,.active-player-hud .br::before{right:0!important;}
.active-player-hud .tr::after,.active-player-hud .br::after{right:0!important;}
.active-player-hud .bl::before,.active-player-hud .br::before{bottom:0!important;}
.active-player-hud .bl::after,.active-player-hud .br::after{bottom:0!important;}

.active-player-hud .active-scan-frame{
  position:absolute!important;
  inset:10px!important;
  border:1px solid rgba(var(--active-cell-color),.95)!important;
  border-radius:3px!important;
  opacity:0!important;
  box-shadow:inset 0 0 7px rgba(var(--active-cell-color),.25),0 0 6px rgba(var(--active-cell-color),.55)!important;
  animation:bsDomScanFrame 1.05s linear infinite!important;
}

@keyframes bsCornerTL{
  0%,100%{transform:translate(0,0);opacity:.42;}
  42%,55%{transform:translate(7px,7px);opacity:1;filter:drop-shadow(0 0 4px rgba(var(--active-cell-color),1)) drop-shadow(0 0 10px rgba(var(--active-cell-color),.9));}
}
@keyframes bsCornerTR{
  0%,100%{transform:translate(0,0);opacity:.42;}
  42%,55%{transform:translate(-7px,7px);opacity:1;filter:drop-shadow(0 0 4px rgba(var(--active-cell-color),1)) drop-shadow(0 0 10px rgba(var(--active-cell-color),.9));}
}
@keyframes bsCornerBL{
  0%,100%{transform:translate(0,0);opacity:.42;}
  42%,55%{transform:translate(7px,-7px);opacity:1;filter:drop-shadow(0 0 4px rgba(var(--active-cell-color),1)) drop-shadow(0 0 10px rgba(var(--active-cell-color),.9));}
}
@keyframes bsCornerBR{
  0%,100%{transform:translate(0,0);opacity:.42;}
  42%,55%{transform:translate(-7px,-7px);opacity:1;filter:drop-shadow(0 0 4px rgba(var(--active-cell-color),1)) drop-shadow(0 0 10px rgba(var(--active-cell-color),.9));}
}
@keyframes bsDomScanFrame{
  0%,36%,61%,100%{opacity:0;transform:scale(.985);}
  43%,54%{opacity:.9;transform:scale(1);}
}

@media(max-width:720px){
  .game-layout > .panel .utility-row.tile-library{grid-template-columns:1fr!important;}
  .game-layout > .panel .utility-row.tile-library > .tile-library-card{min-height:0!important;}
}
@media(prefers-reduced-motion:reduce){
  .active-player-hud .active-corner{animation:none!important;opacity:.9!important;}
  .active-player-hud .active-scan-frame{animation:none!important;opacity:0!important;}
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.103 — stabilizacja skanera aktywnego pola.
   Animację prowadzi Web Animations API w app.js.
   ========================================================= */
.active-player-hud .active-corner,
.active-player-hud .active-scan-frame{
  animation:none!important;
  will-change:transform,opacity!important;
}
.active-player-hud .active-corner{
  opacity:.38!important;
}
.active-player-hud .active-scan-frame{
  opacity:0!important;
}
/* Animacja ma działać również przy systemowym ograniczeniu animacji,
   ponieważ jest krótkim wskaźnikiem aktywnej jednostki w grze. */
@media(prefers-reduced-motion:reduce){
  .active-player-hud .active-corner,
  .active-player-hud .active-scan-frame{
    animation:none!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.6.103 — mocniej widoczne narożniki
   aktywnego pola.
   ========================================================= */
.active-player-hud .active-corner{
  width:22px!important;
  height:22px!important;
  opacity:.72!important;
  filter:
    drop-shadow(0 0 2px rgba(var(--active-cell-color),1))
    drop-shadow(0 0 6px rgba(var(--active-cell-color),1))
    drop-shadow(0 0 12px rgba(var(--active-cell-color),.95))!important;
}
.active-player-hud .active-corner::before,
.active-player-hud .active-corner::after{
  background:rgb(var(--active-cell-color))!important;
  box-shadow:
    0 0 3px rgba(var(--active-cell-color),1),
    0 0 8px rgba(var(--active-cell-color),1)!important;
}
.active-player-hud .active-corner::before{
  height:3px!important;
}
.active-player-hud .active-corner::after{
  width:3px!important;
}
.active-player-hud .active-scan-frame{
  border-color:rgba(var(--active-cell-color),1)!important;
  box-shadow:
    inset 0 0 8px rgba(var(--active-cell-color),.45),
    0 0 8px rgba(var(--active-cell-color),.9),
    0 0 15px rgba(var(--active-cell-color),.65)!important;
}

/* v2.6.103 - reduced active glow */
.active-player-hud .active-corner{
  filter:
    drop-shadow(0 0 1px rgba(var(--active-cell-color),1))
    drop-shadow(0 0 4px rgba(var(--active-cell-color),.75))
    drop-shadow(0 0 7px rgba(var(--active-cell-color),.45))!important;
}
.active-player-hud .active-corner::before,
.active-player-hud .active-corner::after{
  box-shadow:
    0 0 2px rgba(var(--active-cell-color),.9),
    0 0 4px rgba(var(--active-cell-color),.55)!important;
}
.active-player-hud .active-scan-frame{
  box-shadow:
    inset 0 0 5px rgba(var(--active-cell-color),.28),
    0 0 4px rgba(var(--active-cell-color),.45),
    0 0 8px rgba(var(--active-cell-color),.28)!important;
}

/* v2.6.103 - thinner active corner lines */
.active-player-hud .active-corner::before{
    height:2px!important;
}
.active-player-hud .active-corner::after{
    width:2px!important;
}
.active-player-hud .active-corner{
    width:20px!important;
    height:20px!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.0 — obiekty planszy
   ========================================================= */
.cell[data-tile-type] > .board-object.gameplay-object{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
  z-index:18!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  pointer-events:none!important;
}
.cell[data-tile-type] > .board-object.gameplay-object img{
  display:block!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  filter:drop-shadow(0 4px 5px rgba(0,0,0,.7))!important;
}
.cell[data-tile-type] > .board-object.medkit-object{
  width:51%!important;
  height:51%!important;
}
.cell[data-tile-type] > .board-object.mine-object{
  width:55%!important;
  height:55%!important;
}
.cell[data-tile-type] > .board-object.spikes-object{
  width:54%!important;
  height:54%!important;
}
.cell[data-tile-type] > .board-object.chest-object{
  width:59%!important;
  height:54%!important;
}

.floating-board-effect{
  position:absolute!important;
  left:50%!important;
  top:7%!important;
  z-index:140!important;
  transform:translate(-50%,-18px) scale(.82)!important;
  opacity:0!important;
  pointer-events:none!important;
  font-family:Impact, Haettenschweiler, "Arial Narrow Bold", sans-serif!important;
  font-size:clamp(24px,3.3vw,46px)!important;
  font-weight:900!important;
  line-height:1!important;
  letter-spacing:.02em!important;
  -webkit-text-stroke:1px rgba(0,0,0,.78)!important;
}
.floating-board-effect.healing{
  color:#75ff7f!important;
  text-shadow:
    0 2px 0 #07350d,
    0 0 7px rgba(35,255,84,1),
    0 0 18px rgba(35,255,84,.88)!important;
}
.floating-board-effect.damage{
  color:#ff2b31!important;
  text-shadow:
    0 2px 0 #420006,
    0 0 7px rgba(255,20,32,1),
    0 0 18px rgba(255,20,32,.85)!important;
}
.floating-board-effect.play{
  animation:bsBoardObjectHpFlight .9s cubic-bezier(.16,.76,.22,1) forwards!important;
}
@keyframes bsBoardObjectHpFlight{
  0%{
    opacity:0;
    transform:translate(-50%,-28px) scale(.72);
  }
  16%{
    opacity:1;
    transform:translate(-50%,-17px) scale(1.14);
  }
  72%{
    opacity:1;
    transform:translate(-50%,30px) scale(1);
  }
  100%{
    opacity:0;
    transform:translate(-50%,43px) scale(.84);
  }
}
@media(max-width:720px){
  .cell[data-tile-type] > .board-object.medkit-object{width:55%!important;height:55%!important}
  .cell[data-tile-type] > .board-object.mine-object{width:58%!important;height:58%!important}
  .cell[data-tile-type] > .board-object.spikes-object{width:57%!important;height:57%!important}
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.1 — nowe obiekty bez ramek
   i w rozmiarze zgodnym z kluczem/skrzynią.
   ========================================================= */
.cell[data-tile-type] > .board-object.gameplay-object{
  background:none!important;
  border:0!important;
  outline:0!important;
  box-shadow:none!important;
  padding:0!important;
  overflow:visible!important;
}
.cell[data-tile-type] > .board-object.gameplay-object::before,
.cell[data-tile-type] > .board-object.gameplay-object::after{
  content:none!important;
  display:none!important;
}
.cell[data-tile-type] > .board-object.gameplay-object img{
  border:0!important;
  outline:0!important;
  box-shadow:none!important;
  background:transparent!important;
}

/* Ten sam wizualny gabaryt co pozostałe duże obiekty planszy. */
.cell[data-tile-type] > .board-object.medkit-object,
.cell[data-tile-type] > .board-object.mine-object,
.cell[data-tile-type] > .board-object.spikes-object{
  width:60%!important;
  height:60%!important;
}

@media(max-width:720px){
  .cell[data-tile-type] > .board-object.medkit-object,
  .cell[data-tile-type] > .board-object.mine-object,
  .cell[data-tile-type] > .board-object.spikes-object{
    width:62%!important;
    height:62%!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.3 — widoczne zmiany HP po obiektach.
   Ruch prowadzi Web Animations API; CSS ustala wyłącznie wygląd.
   ========================================================= */
.board .cell > .floating-board-effect{
  position:absolute!important;
  left:50%!important;
  top:10%!important;
  z-index:220!important;
  display:block!important;
  visibility:visible!important;
  pointer-events:none!important;
  width:auto!important;
  height:auto!important;
  overflow:visible!important;
  white-space:nowrap!important;
  font-size:clamp(30px,4vw,54px)!important;
  font-weight:1000!important;
  line-height:1!important;
  opacity:1;
  transform:translate(-50%,-28px) scale(.75);
}
.board .cell > .floating-board-effect.healing{
  color:#55ff73!important;
  -webkit-text-stroke:2px rgba(0,45,8,.95)!important;
  text-shadow:
    0 2px 1px #001d04,
    0 0 5px #7cff91,
    0 0 12px #20ff4b,
    0 0 24px rgba(20,255,62,.95)!important;
}
.board .cell > .floating-board-effect.damage{
  color:#ff3038!important;
  -webkit-text-stroke:2px rgba(55,0,4,.98)!important;
  text-shadow:
    0 2px 1px #280003,
    0 0 5px #ff8388,
    0 0 12px #ff1521,
    0 0 24px rgba(255,15,28,.95)!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.4 — liczby HP nad całą planszą.
   ========================================================= */
.board-wrap > .floating-board-effect-overlay{
  position:absolute!important;
  z-index:9999!important;
  display:block!important;
  visibility:visible!important;
  pointer-events:none!important;
  width:auto!important;
  height:auto!important;
  overflow:visible!important;
  white-space:nowrap!important;
  font-family:Impact, Haettenschweiler, "Arial Narrow Bold", sans-serif!important;
  font-size:clamp(34px,4.4vw,62px)!important;
  font-weight:1000!important;
  line-height:1!important;
  letter-spacing:.02em!important;
  opacity:0;
  transform:translate(-50%,-18px) scale(.72);
  -webkit-text-stroke:2px rgba(0,0,0,.95)!important;
}
.board-wrap > .floating-board-effect-overlay.healing{
  color:#59ff75!important;
  text-shadow:
    0 3px 1px #002b06,
    0 0 6px #b7ffc1,
    0 0 14px #26ff51,
    0 0 28px rgba(20,255,62,.95)!important;
}
.board-wrap > .floating-board-effect-overlay.damage{
  color:#ff3038!important;
  text-shadow:
    0 3px 1px #350003,
    0 0 6px #ff9ba0,
    0 0 14px #ff1722,
    0 0 28px rgba(255,15,28,.95)!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.5 — kierunkowa animacja HP:
   leczenie wpada do HP, obrażenia wylatują z HP.
   ========================================================= */
.board-wrap > .floating-board-effect-overlay{
  transform-origin:center center!important;
  will-change:transform,opacity!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.6 — rozmiar bazowy efektu HP
   pochodzi z rzeczywistego licznika HP.
   ========================================================= */
.board-wrap > .floating-board-effect-overlay{
  font-size:inherit;
  transform-origin:center center!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.7 — czytelniejsze i wolniejsze
   animacje zmian HP.
   ========================================================= */
.board-wrap > .floating-board-effect-overlay{
  -webkit-text-stroke:0!important;
  paint-order:normal!important;
  font-family:Arial Black, Arial, sans-serif!important;
  font-weight:900!important;
  letter-spacing:0!important;
}
.board-wrap > .floating-board-effect-overlay.healing{
  color:#66ff7d!important;
  text-shadow:
    0 1px 1px rgba(0,35,6,.95),
    0 0 3px rgba(102,255,125,.95),
    0 0 8px rgba(36,255,79,.7)!important;
}
.board-wrap > .floating-board-effect-overlay.damage{
  color:#ff4148!important;
  text-shadow:
    0 1px 1px rgba(52,0,3,.95),
    0 0 3px rgba(255,99,105,.95),
    0 0 8px rgba(255,35,46,.72)!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.7.8 — finalny polishing animacji HP.
   ========================================================= */
.board-wrap > .floating-board-effect-overlay{
  -webkit-text-stroke:0!important;
  paint-order:normal!important;
  font-family:"Arial Black",Arial,sans-serif!important;
  font-weight:900!important;
  letter-spacing:0!important;
  z-index:9999!important;
  will-change:transform,opacity!important;
  transform-origin:center center!important;
}
.board-wrap > .floating-board-effect-overlay.healing{
  color:#67ff7f!important;
  text-shadow:
    0 1px 1px rgba(0,32,5,.95),
    0 0 3px rgba(125,255,145,.98),
    0 0 8px rgba(38,255,79,.72)!important;
}
.board-wrap > .floating-board-effect-overlay.damage{
  color:#ff4249!important;
  text-shadow:
    0 1px 1px rgba(48,0,3,.95),
    0 0 3px rgba(255,116,121,.98),
    0 0 8px rgba(255,39,49,.74)!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.0 — informacja o obiektach planszy.
   ========================================================= */
.board-object-guide{
  margin-top:10px!important;
  padding:11px 12px 12px!important;
  border:1px solid rgba(238,20,71,.62)!important;
  border-radius:12px!important;
  background:
    linear-gradient(180deg,rgba(10,10,12,.92),rgba(5,5,7,.88)),
    url("../images/ui/frame_background.png") center/cover!important;
  box-shadow:
    inset 0 0 18px rgba(0,0,0,.82),
    0 0 12px rgba(238,20,71,.08)!important;
}
.board-object-guide > .section-kicker{
  display:block!important;
  margin-bottom:8px!important;
}
.board-object-guide-list{
  display:grid!important;
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
  gap:7px!important;
}
.board-object-guide-item{
  min-width:0!important;
  display:flex!important;
  align-items:center!important;
  gap:7px!important;
  padding:6px 7px!important;
  border:1px solid rgba(255,255,255,.10)!important;
  border-radius:8px!important;
  background:rgba(0,0,0,.42)!important;
}
.board-object-guide-item img{
  flex:0 0 auto!important;
  width:38px!important;
  height:38px!important;
  object-fit:contain!important;
  border:0!important;
  background:transparent!important;
  filter:drop-shadow(0 3px 3px rgba(0,0,0,.8))!important;
}
.board-object-guide-item span{
  min-width:0!important;
  display:flex!important;
  flex-direction:column!important;
  line-height:1.08!important;
}
.board-object-guide-item strong{
  color:#fff!important;
  font-size:11px!important;
  letter-spacing:.035em!important;
  white-space:nowrap!important;
}
.board-object-guide-item small{
  margin-top:3px!important;
  color:#c9c9ce!important;
  font-size:9px!important;
  white-space:nowrap!important;
}
@media(max-width:1100px){
  .board-object-guide-list{
    grid-template-columns:1fr!important;
  }
  .board-object-guide-item img{
    width:34px!important;
    height:34px!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.1 — czytelna ramka obiektów.
   ========================================================= */
.board-object-guide{
  overflow:visible!important;
  padding:11px 10px 12px!important;
}
.board-object-guide-list{
  display:grid!important;
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
  gap:6px!important;
}
.board-object-guide-item{
  min-width:0!important;
  min-height:104px!important;
  display:grid!important;
  grid-template-rows:45px auto auto auto!important;
  place-items:center!important;
  align-content:start!important;
  gap:2px!important;
  padding:6px 3px!important;
  overflow:hidden!important;
  text-align:center!important;
}
.board-object-guide-item img{
  width:44px!important;
  height:44px!important;
  max-width:100%!important;
  object-fit:contain!important;
  margin:0!important;
}
.board-object-guide-item strong{
  display:block!important;
  max-width:100%!important;
  color:#fff!important;
  font-size:10px!important;
  line-height:1.1!important;
  white-space:nowrap!important;
}
.board-object-guide-item small{
  display:block!important;
  color:#bfc1c7!important;
  font-size:8px!important;
  line-height:1.1!important;
  white-space:nowrap!important;
}
.board-object-guide-item b{
  display:block!important;
  font-size:9px!important;
  line-height:1.15!important;
  white-space:nowrap!important;
}
.board-object-guide-item.healing b{
  color:#67ff7f!important;
  text-shadow:0 0 5px rgba(45,255,85,.45)!important;
}
.board-object-guide-item.damage b{
  color:#ff5960!important;
  text-shadow:0 0 5px rgba(255,40,50,.38)!important;
}
@media(max-width:1100px){
  .board-object-guide-list{
    grid-template-columns:repeat(3,minmax(0,1fr))!important;
  }
  .board-object-guide-item{
    min-height:98px!important;
  }
  .board-object-guide-item img{
    width:40px!important;
    height:40px!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.2 — pełny prawy panel bez przycinania.
   ========================================================= */
.game-layout > .panel,
.game-layout > .panel.blacksaw-side-frame{
  max-height:calc(100dvh - 72px)!important;
  overflow-x:hidden!important;
  overflow-y:auto!important;
  overscroll-behavior:contain!important;
  scrollbar-width:thin!important;
  scrollbar-color:rgba(238,20,71,.72) rgba(0,0,0,.28)!important;
  padding-bottom:22px!important;
}
.game-layout > .panel::-webkit-scrollbar{
  width:7px!important;
}
.game-layout > .panel::-webkit-scrollbar-track{
  background:rgba(0,0,0,.28)!important;
  border-radius:8px!important;
}
.game-layout > .panel::-webkit-scrollbar-thumb{
  background:linear-gradient(180deg,rgba(255,53,94,.9),rgba(145,9,43,.92))!important;
  border-radius:8px!important;
  border:1px solid rgba(255,255,255,.08)!important;
}
.game-layout > .panel .board-object-guide{
  margin-bottom:8px!important;
}
@media(max-width:720px){
  .game-layout > .panel,
  .game-layout > .panel.blacksaw-side-frame{
    max-height:none!important;
    overflow:visible!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.3 — pełny prawy panel bez wewnętrznego
   paska przewijania. Panel rośnie razem z zawartością.
   ========================================================= */
.game-layout > .panel,
.game-layout > .panel.blacksaw-side-frame{
  height:auto!important;
  min-height:0!important;
  max-height:none!important;
  overflow:visible!important;
  overscroll-behavior:auto!important;
  scrollbar-width:none!important;
  padding-bottom:18px!important;
  align-self:start!important;
}
.game-layout > .panel::-webkit-scrollbar{
  display:none!important;
  width:0!important;
  height:0!important;
}
.game-layout > .panel .board-object-guide{
  margin-bottom:0!important;
}

/* Ramka obiektów jest odrobinę niższa, ale zachowuje komplet informacji. */
.board-object-guide{
  padding:10px 9px 10px!important;
}
.board-object-guide-list{
  gap:5px!important;
}
.board-object-guide-item{
  min-height:92px!important;
  grid-template-rows:38px auto auto auto!important;
  padding:5px 2px!important;
}
.board-object-guide-item img{
  width:38px!important;
  height:38px!important;
}
.board-object-guide-item strong{
  font-size:9px!important;
}
.board-object-guide-item small{
  font-size:8px!important;
}
.board-object-guide-item b{
  font-size:8px!important;
}

/* Na węższych ekranach cała strona przewija się normalnie w pionie. */
@media(max-width:1180px){
  .game-layout > .panel,
  .game-layout > .panel.blacksaw-side-frame{
    max-height:none!important;
    overflow:visible!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.4 — ekran końca gry.
   ========================================================= */
.game-over-overlay{
  position:fixed!important;
  inset:0!important;
  z-index:20000!important;
  display:grid!important;
  place-items:center!important;
  padding:24px!important;
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
  transition:opacity .28s ease,visibility .28s ease!important;
}
.game-over-overlay.visible{
  opacity:1!important;
  visibility:visible!important;
  pointer-events:auto!important;
}
.game-over-backdrop{
  position:absolute!important;
  inset:0!important;
  background:
    radial-gradient(circle at 50% 42%,rgba(238,20,71,.16),transparent 34%),
    rgba(0,0,0,.78)!important;
  backdrop-filter:blur(5px) brightness(.62)!important;
}
.game-over-panel{
  position:relative!important;
  width:min(560px,calc(100vw - 32px))!important;
  min-height:340px!important;
  z-index:1!important;
  overflow:hidden!important;
  border:1px solid rgba(255,45,91,.82)!important;
  border-radius:18px!important;
  background:
    linear-gradient(180deg,rgba(13,9,11,.97),rgba(4,4,6,.98)),
    url("../images/ui/frame_background.png") center/cover!important;
  box-shadow:
    0 0 0 1px rgba(255,255,255,.04),
    0 0 42px rgba(238,20,71,.34),
    inset 0 0 44px rgba(0,0,0,.88)!important;
  transform:translateY(22px) scale(.96)!important;
  animation:gameOverPanelIn .62s cubic-bezier(.16,.84,.22,1) forwards!important;
}
@keyframes gameOverPanelIn{
  0%{opacity:0;transform:translateY(28px) scale(.92)}
  65%{opacity:1;transform:translateY(-4px) scale(1.02)}
  100%{opacity:1;transform:translateY(0) scale(1)}
}
.game-over-glow{
  position:absolute!important;
  inset:-30%!important;
  background:conic-gradient(from 0deg,transparent,rgba(238,20,71,.14),transparent 28%,rgba(255,174,38,.08),transparent 56%,rgba(238,20,71,.12),transparent)!important;
  filter:blur(24px)!important;
  animation:gameOverGlowSpin 7s linear infinite!important;
}
@keyframes gameOverGlowSpin{to{transform:rotate(360deg)}}
.game-over-content{
  position:relative!important;
  z-index:2!important;
  min-height:340px!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  padding:46px 34px 40px!important;
  text-align:center!important;
}
.game-over-kicker{
  color:#ff2d5d!important;
  font-size:12px!important;
  font-weight:900!important;
  letter-spacing:.24em!important;
}
.game-over-content h2{
  margin:12px 0 8px!important;
  color:#fff!important;
  font-size:clamp(34px,6vw,58px)!important;
  line-height:1!important;
  letter-spacing:.025em!important;
  text-shadow:0 3px 0 #000,0 0 20px rgba(255,255,255,.12)!important;
}
#gameOverWinner{
  display:block!important;
  margin-top:10px!important;
  font-size:clamp(21px,4vw,34px)!important;
  font-weight:1000!important;
  line-height:1.1!important;
  letter-spacing:.04em!important;
}
#gameOverWinner.player-victory{
  color:#ff315f!important;
  text-shadow:0 0 10px rgba(255,49,95,.8),0 0 24px rgba(255,49,95,.38)!important;
}
#gameOverWinner.ai-victory{
  color:#4da4ff!important;
  text-shadow:0 0 10px rgba(77,164,255,.78),0 0 24px rgba(77,164,255,.34)!important;
}
.game-over-score{
  margin:22px 0 26px!important;
  padding:10px 18px!important;
  border:1px solid rgba(255,255,255,.15)!important;
  border-radius:999px!important;
  background:rgba(0,0,0,.48)!important;
  color:#fff!important;
  font-size:18px!important;
  font-weight:900!important;
  letter-spacing:.08em!important;
}
.game-over-new-game{
  min-width:210px!important;
  padding:14px 24px!important;
  border:1px solid rgba(255,255,255,.24)!important;
  border-radius:10px!important;
  background:linear-gradient(180deg,#ff2e61,#d50d43)!important;
  color:#fff!important;
  font-size:17px!important;
  font-weight:1000!important;
  letter-spacing:.04em!important;
  cursor:pointer!important;
  box-shadow:0 8px 24px rgba(238,20,71,.3),inset 0 1px 0 rgba(255,255,255,.28)!important;
  transition:transform .16s ease,filter .16s ease!important;
}
.game-over-new-game:hover{
  transform:translateY(-2px) scale(1.025)!important;
  filter:brightness(1.12)!important;
}
.game-over-new-game:active{
  transform:translateY(0) scale(.985)!important;
}
.game-over-new-game:disabled{
  opacity:.6!important;
  cursor:wait!important;
}
body.game-over-active .board-wrap,
body.game-over-active .panel,
body.game-over-active .player-panel{
  pointer-events:none!important;
}
@media(max-width:600px){
  .game-over-overlay{padding:14px!important}
  .game-over-content{padding:38px 20px 32px!important}
  .game-over-panel{min-height:310px!important}
  .game-over-content{min-height:310px!important}
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.7 — sekwencja podnoszenia klucza.
   ========================================================= */
.key-pickup-sequence{
  position:absolute!important;
  z-index:12000!important;
  width:clamp(150px,16vw,270px)!important;
  aspect-ratio:2/3!important;
  pointer-events:none!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:center center!important;
  filter:drop-shadow(0 12px 12px rgba(0,0,0,.82))!important;
}
.key-pickup-hand{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  object-position:center center!important;
  border:0!important;
  background:transparent!important;
  user-select:none!important;
  pointer-events:none!important;
}
.key-pickup-flash{
  position:absolute!important;
  left:50%!important;
  top:28%!important;
  width:72px!important;
  height:72px!important;
  border-radius:50%!important;
  transform:translate(-50%,-50%) scale(.25)!important;
  background:
    radial-gradient(circle,
      rgba(255,255,220,1) 0%,
      rgba(255,188,55,.95) 22%,
      rgba(255,91,0,.55) 48%,
      rgba(255,70,0,0) 72%)!important;
  filter:blur(1px)!important;
  mix-blend-mode:screen!important;
}
.board-object.key-object.key-being-picked{
  z-index:12100!important;
  filter:brightness(1.6) drop-shadow(0 0 10px rgba(255,145,35,.95))!important;
}
@media(max-width:720px){
  .key-pickup-sequence{
    width:clamp(125px,34vw,210px)!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.8 — wolniejsza, mniejsza animacja
   podnoszenia klucza, zawsze na środku planszy.
   ========================================================= */
.key-pickup-sequence{
  width:clamp(78px,8vw,135px)!important;
  aspect-ratio:2/3!important;
  left:50%!important;
  top:50%!important;
  z-index:12000!important;
  transform:translate(-50%,-50%)!important;
}
.key-pickup-hand{
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  object-position:center!important;
  opacity:1!important;
  filter:drop-shadow(0 7px 7px rgba(0,0,0,.86))!important;
}
.key-pickup-flash{
  left:50%!important;
  top:28%!important;
  width:44px!important;
  height:44px!important;
}
@media(max-width:720px){
  .key-pickup-sequence{
    width:clamp(70px,18vw,110px)!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.9 — animacja na polu klucza.
   ========================================================= */
.key-pickup-sequence{
  width:clamp(78px,8vw,135px)!important;
  left:auto;
  top:auto;
  transform:translate(-50%,-50%)!important;
  z-index:12000!important;
}
.key-pickup-hand{
  opacity:1!important;
  transform:scale(1);
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.12 — sekwencja otwierania skrzyni.
   ========================================================= */
.chest-open-sequence{
  position:absolute!important;
  z-index:12200!important;
  width:clamp(115px,12vw,205px)!important;
  aspect-ratio:1/1!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:center!important;
  pointer-events:none!important;
  filter:drop-shadow(0 12px 12px rgba(0,0,0,.86))!important;
}
.chest-open-image{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  border:0!important;
  background:transparent!important;
  user-select:none!important;
}
.chest-reward-points{
  position:absolute!important;
  left:50%!important;
  top:15%!important;
  z-index:2!important;
  color:#ffd45a!important;
  font-family:"Arial Black",Arial,sans-serif!important;
  font-size:clamp(17px,2vw,28px)!important;
  font-weight:1000!important;
  white-space:nowrap!important;
  text-shadow:
    0 2px 1px rgba(42,15,0,.95),
    0 0 5px rgba(255,233,128,.95),
    0 0 14px rgba(255,145,20,.9)!important;
  opacity:0;
}
@media(max-width:720px){
  .chest-open-sequence{width:clamp(100px,28vw,165px)!important}
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.14 — animacja TRAFIENIA.
   ========================================================= */
.combat-hit-sequence{
  position:absolute!important;
  z-index:12400!important;
  width:clamp(150px,17vw,290px)!important;
  aspect-ratio:3/2!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:center!important;
  pointer-events:none!important;
  filter:drop-shadow(0 12px 14px rgba(0,0,0,.9))!important;
}
.combat-hit-image{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  border:0!important;
  background:transparent!important;
  user-select:none!important;
  pointer-events:none!important;
}
.combat-hit-label{
  position:absolute!important;
  left:50%!important;
  bottom:2%!important;
  transform:translate(-50%,18px) scale(.72)!important;
  opacity:0!important;
  color:#ff3b20!important;
  font-family:"Arial Black",Arial,sans-serif!important;
  font-size:clamp(19px,2.4vw,38px)!important;
  font-weight:1000!important;
  letter-spacing:.06em!important;
  white-space:nowrap!important;
  text-shadow:
    0 3px 1px #250000,
    0 0 5px #ffb138,
    0 0 14px rgba(255,48,0,.95)!important;
}
.combat-hit-label.visible{
  animation:combat-hit-label-in 290ms cubic-bezier(.17,.78,.25,1) forwards!important;
}
@keyframes combat-hit-label-in{
  0%{opacity:0;transform:translate(-50%,18px) scale(.72)}
  55%{opacity:1;transform:translate(-50%,-4px) scale(1.12)}
  100%{opacity:1;transform:translate(-50%,0) scale(1)}
}
@media(max-width:720px){
  .combat-hit-sequence{
    width:clamp(135px,40vw,225px)!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.18 — pełny obieg zawartości przez Respawn.
   ========================================================= */
.shift-entities-overlay{
  position:absolute!important;
  inset:0!important;
  z-index:11850!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.shift-entity-clone{
  position:absolute!important;
  margin:0!important;
  pointer-events:none!important;
  transform-origin:center!important;
  overflow:visible!important;
}
.shift-entity-clone > .token-shell,
.shift-entity-clone > .board-object{
  visibility:visible!important;
  pointer-events:none!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.19 — poprawne położenie obiektów
   podczas przesuwania rzędów i kolumn.
   ========================================================= */
.shift-entity-clone{
  display:block!important;
  position:absolute!important;
  margin:0!important;
  padding:0!important;
  pointer-events:none!important;
  overflow:visible!important;
}
.shift-entity-clone > .shift-board-object-clone{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  margin:0!important;
  padding:0!important;
  transform:translate(-50%,-50%)!important;
  pointer-events:none!important;
  display:block!important;
  visibility:visible!important;
}
.shift-entity-clone > .shift-board-object-clone.key-object{
  width:53.1%!important;
  height:53.1%!important;
}
.shift-entity-clone > .shift-board-object-clone.chest-object{
  width:55.5%!important;
  height:49.5%!important;
}
.shift-entity-clone > .shift-board-object-clone img{
  display:block!important;
  width:100%!important;
  height:100%!important;
  max-width:none!important;
  max-height:none!important;
  object-fit:contain!important;
  margin:0!important;
  padding:0!important;
  transform:none!important;
}
.shift-entity-clone > .shift-board-object-clone::before,
.shift-entity-clone > .shift-board-object-clone::after{
  content:none!important;
  display:none!important;
  visibility:hidden!important;
  opacity:0!important;
  background:none!important;
  border:0!important;
  box-shadow:none!important;
}
@media(max-width:720px){
  .shift-entity-clone > .shift-board-object-clone.key-object{
    width:55.8%!important;
    height:55.8%!important;
  }
  .shift-entity-clone > .shift-board-object-clone.chest-object{
    width:57.75%!important;
    height:51.75%!important;
  }
}


/* =========================================================
   v2.8.19 HOTFIX — apteczka, mina i kolce podczas przesuwania.
   Klony nie dziedziczą już starego pozycjonowania z planszy.
   ========================================================= */
.shift-entity-clone > .shift-board-object-clone{
  position:absolute!important;
  inset:auto!important;
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  margin:0!important;
  padding:0!important;
  display:block!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:center!important;
  box-sizing:border-box!important;
  overflow:visible!important;
  border:0!important;
  background:none!important;
  box-shadow:none!important;
  filter:none!important;
  opacity:1!important;
}

.shift-entity-clone > .shift-board-object-clone.key-object{
  width:53.1%!important;
  height:53.1%!important;
}
.shift-entity-clone > .shift-board-object-clone.chest-object{
  width:59%!important;
  height:54%!important;
}
.shift-entity-clone > .shift-board-object-clone.medkit-object{
  width:51%!important;
  height:51%!important;
}
.shift-entity-clone > .shift-board-object-clone.mine-object{
  width:55%!important;
  height:55%!important;
}
.shift-entity-clone > .shift-board-object-clone.spikes-object{
  width:54%!important;
  height:54%!important;
}

.shift-entity-clone > .shift-board-object-clone > img{
  position:static!important;
  inset:auto!important;
  left:auto!important;
  top:auto!important;
  right:auto!important;
  bottom:auto!important;
  display:block!important;
  width:100%!important;
  height:100%!important;
  max-width:none!important;
  max-height:none!important;
  margin:0!important;
  padding:0!important;
  object-fit:contain!important;
  object-position:center!important;
  transform:none!important;
  transform-origin:center!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
  filter:none!important;
  opacity:1!important;
}

.shift-entity-clone > .shift-board-object-clone::before,
.shift-entity-clone > .shift-board-object-clone::after,
.shift-entity-clone > .shift-board-object-clone > img::before,
.shift-entity-clone > .shift-board-object-clone > img::after{
  content:none!important;
  display:none!important;
  visibility:hidden!important;
  opacity:0!important;
}

@media(max-width:720px){
  .shift-entity-clone > .shift-board-object-clone.key-object{
    width:55.8%!important;
    height:55.8%!important;
  }
  .shift-entity-clone > .shift-board-object-clone.chest-object{
    width:57.75%!important;
    height:51.75%!important;
  }
  .shift-entity-clone > .shift-board-object-clone.medkit-object{
    width:55%!important;
    height:55%!important;
  }
  .shift-entity-clone > .shift-board-object-clone.mine-object{
    width:58%!important;
    height:58%!important;
  }
  .shift-entity-clone > .shift-board-object-clone.spikes-object{
    width:57%!important;
    height:57%!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.20 — zachowanie kolorów kluczy
   i skrzyń podczas przesuwania rzędów i kolumn.
   ========================================================= */
.shift-entity-clone > .shift-board-object-clone.key-object.p1 > img,
.shift-entity-clone > .shift-board-object-clone.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))!important;
}

.shift-entity-clone > .shift-board-object-clone.key-object.p2 > img,
.shift-entity-clone > .shift-board-object-clone.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))!important;
}

/* Przedmioty neutralne zachowują oryginalne barwy. */
.shift-entity-clone > .shift-board-object-clone.medkit-object > img,
.shift-entity-clone > .shift-board-object-clone.mine-object > img,
.shift-entity-clone > .shift-board-object-clone.spikes-object > img{
  filter:none!important;
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.22 — energia blokowanego Respawnu.
   Etap 1: energia na krawędziach. Etap 2: stan krytyczny.
   ========================================================= */
.respawn-overload-energy{
  position:absolute!important;
  inset:4%!important;
  z-index:57!important;
  pointer-events:none!important;
  opacity:0!important;
  border-radius:10px!important;
  mix-blend-mode:screen!important;
}
.cell.respawn-energy-stage-1 .respawn-overload-energy{
  opacity:.72!important;
  box-shadow:
    inset 0 0 15px 4px rgba(255,40,18,.82),
    inset 0 0 28px 8px rgba(255,125,20,.38),
    0 0 12px rgba(255,47,18,.55)!important;
  animation:respawn-energy-stage-one 1.15s ease-in-out infinite alternate!important;
}
.cell.respawn-energy-stage-2 .respawn-overload-energy{
  opacity:1!important;
  background:
    radial-gradient(circle at center, transparent 25%, rgba(255,35,10,.24) 58%, rgba(255,154,24,.72) 100%)!important;
  box-shadow:
    inset 0 0 21px 8px rgba(255,30,8,1),
    inset 0 0 44px 14px rgba(255,175,28,.65),
    0 0 20px rgba(255,35,10,.95)!important;
  animation:respawn-energy-stage-two .58s ease-in-out infinite alternate!important;
}
@keyframes respawn-energy-stage-one{
  from{filter:brightness(.82);transform:scale(.985)}
  to{filter:brightness(1.38);transform:scale(1.015)}
}
@keyframes respawn-energy-stage-two{
  from{filter:brightness(.9) saturate(1.2);transform:scale(.97)}
  to{filter:brightness(1.65) saturate(1.65);transform:scale(1.035)}
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.24 — animacja PUDŁO.
   ========================================================= */
.combat-miss-sequence{
  filter:
    drop-shadow(0 12px 14px rgba(0,0,0,.9))
    drop-shadow(0 0 8px rgba(255,180,45,.22))!important;
}
.combat-miss-label{
  color:#ffd24a!important;
  text-shadow:
    0 3px 1px #251600,
    0 0 5px #fff0a0,
    0 0 14px rgba(255,171,24,.95)!important;
}
.combat-miss-label.visible{
  animation:combat-miss-label-in 290ms cubic-bezier(.17,.78,.25,1) forwards!important;
}
@keyframes combat-miss-label-in{
  0%{opacity:0;transform:translate(-50%,18px) scale(.72)}
  55%{opacity:1;transform:translate(-50%,-4px) scale(1.12)}
  100%{opacity:1;transform:translate(-50%,0) scale(1)}
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.26 — przycisk i pauza z instrukcją.
   ========================================================= */
.instructions-button{
  min-width:132px;
  border:1px solid rgba(238,20,71,.78)!important;
  color:#fff!important;
  background:
    linear-gradient(180deg,rgba(31,39,53,.98),rgba(12,17,25,.98))!important;
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.045),
    0 0 13px rgba(238,20,71,.24)!important;
  text-transform:uppercase;
  letter-spacing:.075em;
  font-weight:900;
}
.instructions-button:hover,
.instructions-button:focus-visible{
  border-color:#ff315d!important;
  background:
    linear-gradient(180deg,rgba(55,26,39,.98),rgba(21,12,20,.98))!important;
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.08),
    0 0 20px rgba(238,20,71,.52)!important;
}

.instructions-overlay{
  position:fixed;
  inset:0;
  z-index:30000;
  display:grid;
  place-items:center;
  padding:clamp(10px,2vw,28px);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .18s ease,visibility .18s ease;
}
.instructions-overlay.visible{
  opacity:1;
  visibility:visible;
  pointer-events:auto;
}
.instructions-backdrop{
  position:absolute;
  inset:0;
  background:
    radial-gradient(circle at 50% 20%,rgba(238,20,71,.12),transparent 42%),
    rgba(2,4,7,.96);
  backdrop-filter:blur(8px);
}
.instructions-panel{
  position:relative;
  z-index:1;
  width:min(1120px,96vw);
  height:min(900px,94vh);
  min-height:0;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  border:1px solid rgba(238,20,71,.72);
  background:
    linear-gradient(180deg,rgba(18,22,29,.99),rgba(5,7,11,.995));
  box-shadow:
    0 34px 90px rgba(0,0,0,.9),
    0 0 34px rgba(238,20,71,.28),
    inset 0 0 80px rgba(238,20,71,.04);
}
.instructions-header{
  flex:0 0 auto;
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:24px;
  padding:26px 30px 22px;
  border-bottom:1px solid rgba(238,20,71,.42);
  background:
    linear-gradient(90deg,rgba(238,20,71,.095),transparent 60%);
}
.instructions-kicker{
  display:block;
  margin-bottom:5px;
  color:#ee1447;
  font-size:12px;
  font-weight:950;
  letter-spacing:.17em;
}
.instructions-header h2{
  margin:0;
  color:#fff;
  font-size:clamp(28px,3vw,44px);
  line-height:.95;
  letter-spacing:.035em;
}
.instructions-header p{
  margin:10px 0 0;
  color:#aeb7c7;
}
.instructions-close{
  flex:0 0 auto;
  border:1px solid #ee1447!important;
  background:#ee1447!important;
  color:#fff!important;
  font-weight:950;
  letter-spacing:.08em;
  box-shadow:0 0 18px rgba(238,20,71,.38)!important;
}
.instructions-scroll{
  flex:1 1 auto;
  min-height:0;
  overflow-y:auto;
  overscroll-behavior:contain;
  scrollbar-color:#ee1447 rgba(255,255,255,.06);
  scrollbar-width:thin;
}
.instructions-scroll::-webkit-scrollbar{width:10px}
.instructions-scroll::-webkit-scrollbar-track{background:rgba(255,255,255,.045)}
.instructions-scroll::-webkit-scrollbar-thumb{
  border:2px solid rgba(7,9,13,.95);
  border-radius:10px;
  background:linear-gradient(#ff315d,#9d0e30);
}
.instructions-content{
  width:min(900px,100%);
  margin:0 auto;
  padding:28px 30px 52px;
  color:#d6dce6;
  font-size:15px;
  line-height:1.62;
}
.instructions-content section{
  margin:0 0 18px;
  padding:20px 22px;
  border:1px solid rgba(255,255,255,.085);
  border-left:3px solid rgba(238,20,71,.72);
  background:
    linear-gradient(135deg,rgba(255,255,255,.035),rgba(255,255,255,.012));
  box-shadow:0 10px 26px rgba(0,0,0,.2);
}
.instructions-content h3{
  margin:0 0 12px;
  color:#fff;
  font-size:20px;
  letter-spacing:.025em;
}
.instructions-content p{margin:9px 0}
.instructions-content ul,
.instructions-content ol{
  margin:10px 0;
  padding-left:24px;
}
.instructions-content li{margin:6px 0}
.instructions-content strong{color:#fff}
.rules-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px;
  margin:14px 0;
}
.rules-grid div{
  display:flex;
  flex-direction:column;
  padding:13px 15px;
  border:1px solid rgba(238,20,71,.23);
  background:rgba(0,0,0,.24);
}
.rules-grid span{color:#aeb7c7;font-size:13px}
.combat-rules-table{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:8px;
  margin:14px 0;
}
.combat-rules-table div{
  display:grid;
  grid-template-columns:36px 1fr;
  align-items:center;
  gap:10px;
  padding:10px 12px;
  background:rgba(0,0,0,.28);
  border:1px solid rgba(255,255,255,.07);
}
.combat-rules-table b{
  display:grid;
  place-items:center;
  width:32px;
  height:32px;
  border-radius:50%;
  background:#ee1447;
  color:white;
}
.object-rules{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:12px;
  margin:14px 0;
}
.object-rules > div{
  padding:14px;
  text-align:center;
  background:rgba(0,0,0,.28);
  border:1px solid rgba(255,255,255,.07);
}
.object-rules img{
  display:block;
  width:74px;
  height:74px;
  object-fit:contain;
  margin:0 auto 8px;
}
.object-rules p{margin:0}
body.instructions-open{
  overflow:hidden!important;
}
body.instructions-open .shell{
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}
body.instructions-open .phase-toast,
body.instructions-open .combat-roll-overlay,
body.instructions-open .combat-message-overlay{
  visibility:hidden!important;
}
@media(max-width:720px){
  .instructions-overlay{padding:5px}
  .instructions-panel{width:100%;height:98vh}
  .instructions-header{padding:18px 16px 15px;gap:12px}
  .instructions-close{padding-inline:12px}
  .instructions-content{padding:18px 12px 38px;font-size:14px}
  .instructions-content section{padding:16px 14px}
  .rules-grid,
  .combat-rules-table,
  .object-rules{grid-template-columns:1fr}
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.27 — poprawa ramy i przycisku ZAMKNIJ
   w instrukcji.
   ========================================================= */
.instructions-panel > .blacksaw-frame-corner{
  width:82px!important;
  height:70px!important;
  z-index:2!important;
  opacity:.82!important;
  background-size:contain!important;
  background-repeat:no-repeat!important;
  filter:drop-shadow(0 6px 6px rgba(0,0,0,.94)) saturate(.94)!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-top-left{
  left:-5px!important;
  top:-5px!important;
  background-image:url('../images/ui/frame_top_left.png')!important;
  background-position:left top!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-top-right{
  right:-5px!important;
  top:-5px!important;
  background-image:url('../images/ui/frame_top_right.png')!important;
  background-position:right top!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-bottom-left{
  left:-5px!important;
  bottom:-5px!important;
  background-image:url('../images/ui/frame_bottom_left.png')!important;
  background-position:left bottom!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-bottom-right{
  right:-5px!important;
  bottom:-5px!important;
  background-image:url('../images/ui/frame_bottom_right.png')!important;
  background-position:right bottom!important;
}

.instructions-header{
  position:relative!important;
  z-index:6!important;
  min-height:112px!important;
  padding:22px 28px 18px!important;
}
.instructions-header > div{
  min-width:0!important;
  padding-left:42px!important;
}
.instructions-close{
  position:relative!important;
  z-index:10!important;
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-width:122px!important;
  min-height:44px!important;
  margin-right:42px!important;
  cursor:pointer!important;
}
.instructions-scroll{
  position:relative!important;
  z-index:4!important;
}
.instructions-content{
  padding-top:24px!important;
}

/* Przycisk jest zawsze widoczny, nawet gdy treść instrukcji jest przewijana. */
.instructions-header{
  position:sticky!important;
  top:0!important;
}

@media(max-width:1180px){
  .instructions-panel > .blacksaw-frame-corner{
    width:72px!important;
    height:62px!important;
  }
  .instructions-header > div{padding-left:34px!important;}
  .instructions-close{margin-right:34px!important;}
}
@media(max-width:720px){
  .instructions-panel > .blacksaw-frame-corner{
    width:58px!important;
    height:50px!important;
  }
  .instructions-header{
    min-height:92px!important;
    padding:16px 12px 14px!important;
  }
  .instructions-header > div{
    padding-left:30px!important;
  }
  .instructions-close{
    min-width:94px!important;
    min-height:40px!important;
    margin-right:28px!important;
    font-size:12px!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.28 — instrukcja jak boczne panele.
   ========================================================= */

/* Panel instrukcji wykorzystuje to samo metaliczne tło co lewy i prawy HUD. */
.instructions-panel{
  isolation:isolate!important;
  border:0!important;
  border-radius:12px!important;
  background:
    linear-gradient(180deg,rgba(5,7,9,.20),rgba(5,7,9,.58)),
    url('../images/ui/frame_background.png') center/cover no-repeat!important;
  box-shadow:
    0 16px 34px rgba(0,0,0,.55),
    inset 0 0 0 1px rgba(238,20,71,.26),
    0 0 28px rgba(238,20,71,.20)!important;
}

/* Ciemna powierzchnia pod tekstem, jak w kartach bocznych. */
.instructions-panel::before{
  content:""!important;
  position:absolute!important;
  inset:12px!important;
  z-index:0!important;
  pointer-events:none!important;
  border-radius:8px!important;
  background:
    linear-gradient(180deg,rgba(3,5,8,.76),rgba(3,5,8,.90))!important;
  border:1px solid rgba(238,20,71,.20)!important;
  box-shadow:
    inset 0 0 30px rgba(0,0,0,.48),
    0 0 18px rgba(0,0,0,.25)!important;
}

.instructions-header,
.instructions-scroll{
  position:relative!important;
  z-index:5!important;
}

.instructions-header{
  display:block!important;
  min-height:132px!important;
  padding:26px 190px 20px 72px!important;
  background:
    linear-gradient(90deg,rgba(238,20,71,.10),rgba(3,5,8,.18) 62%,rgba(3,5,8,.34))!important;
  border-bottom:1px solid rgba(238,20,71,.34)!important;
}

.instructions-header > div{
  padding-left:0!important;
  max-width:760px!important;
}

/* Przycisk zamykania jest absolutnie zakotwiczony, więc nie może wypaść poza ekran. */
.instructions-close{
  position:absolute!important;
  top:28px!important;
  right:72px!important;
  z-index:30!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-width:126px!important;
  min-height:46px!important;
  margin:0!important;
  padding:0 20px!important;
  opacity:1!important;
  visibility:visible!important;
  pointer-events:auto!important;
  border:1px solid #ee1447!important;
  border-radius:7px!important;
  background:
    linear-gradient(180deg,#ff315d,#bf1038)!important;
  color:#fff!important;
  font-weight:950!important;
  letter-spacing:.09em!important;
  text-transform:uppercase!important;
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.10),
    0 0 16px rgba(238,20,71,.52),
    0 7px 14px rgba(0,0,0,.45)!important;
}
.instructions-close:hover,
.instructions-close:focus-visible{
  background:
    linear-gradient(180deg,#ff5072,#e11546)!important;
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.16),
    0 0 24px rgba(238,20,71,.75),
    0 7px 14px rgba(0,0,0,.45)!important;
}

/* Narożniki identyczne rozmiarem jak na panelach bocznych. */
.instructions-panel > .blacksaw-frame-corner{
  width:82px!important;
  height:70px!important;
  opacity:.82!important;
  z-index:12!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-top-left{
  left:-5px!important;
  top:-5px!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-top-right{
  right:-5px!important;
  top:-5px!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-bottom-left{
  left:-5px!important;
  bottom:-5px!important;
}
.instructions-panel > .blacksaw-frame-corner.frame-bottom-right{
  right:-5px!important;
  bottom:-5px!important;
}

.instructions-scroll{
  margin:0 12px 12px!important;
  border:1px solid rgba(238,20,71,.16)!important;
  background:rgba(3,5,8,.34)!important;
}

.instructions-content section{
  border:1px solid rgba(238,20,71,.21)!important;
  border-left:3px solid #ee1447!important;
  background:
    linear-gradient(180deg,rgba(8,11,16,.82),rgba(4,6,9,.78))!important;
  box-shadow:
    inset 0 0 16px rgba(0,0,0,.26),
    0 8px 20px rgba(0,0,0,.24)!important;
}

@media(max-width:1180px){
  .instructions-header{
    padding:24px 164px 18px 62px!important;
  }
  .instructions-close{
    right:58px!important;
  }
  .instructions-panel > .blacksaw-frame-corner{
    width:72px!important;
    height:62px!important;
  }
}

@media(max-width:720px){
  .instructions-header{
    min-height:122px!important;
    padding:18px 18px 64px 44px!important;
  }
  .instructions-close{
    top:auto!important;
    right:18px!important;
    bottom:12px!important;
    min-width:108px!important;
    min-height:40px!important;
  }
  .instructions-panel > .blacksaw-frame-corner{
    width:58px!important;
    height:50px!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.29 — ostateczna poprawa instrukcji.
   ========================================================= */

/* Usuwamy jednolite nakładki, aby było widać metaliczne tło ramki. */
.instructions-panel::before{
  content:none!important;
  display:none!important;
}
.instructions-panel{
  background:
    linear-gradient(180deg,rgba(3,5,8,.18),rgba(3,5,8,.36)),
    url('../images/ui/frame_background.png') center/cover no-repeat!important;
}
.instructions-header{
  background:transparent!important;
  border-bottom:1px solid rgba(238,20,71,.28)!important;
}
.instructions-scroll{
  margin:0 12px 12px!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
}
.instructions-content{
  background:transparent!important;
}
.instructions-content section{
  background:rgba(3,5,8,.18)!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
}
.rules-grid div,
.combat-rules-table div,
.object-rules > div{
  background:rgba(3,5,8,.16)!important;
}

/* Przycisk jest bezpośrednim dzieckiem panelu i zawsze pozostaje widoczny. */
.instructions-panel > .instructions-close-floating{
  position:absolute!important;
  top:24px!important;
  right:34px!important;
  left:auto!important;
  bottom:auto!important;
  z-index:999!important;
  display:flex!important;
  visibility:visible!important;
  opacity:1!important;
  pointer-events:auto!important;
  align-items:center!important;
  justify-content:center!important;
  width:auto!important;
  min-width:132px!important;
  height:46px!important;
  min-height:46px!important;
  margin:0!important;
  padding:0 22px!important;
  border:1px solid #ff315d!important;
  border-radius:7px!important;
  background:linear-gradient(180deg,#ff315d,#b80d33)!important;
  color:#fff!important;
  font-size:14px!important;
  font-weight:950!important;
  line-height:1!important;
  letter-spacing:.09em!important;
  text-transform:uppercase!important;
  cursor:pointer!important;
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.13),
    0 0 22px rgba(238,20,71,.66),
    0 7px 15px rgba(0,0,0,.55)!important;
  transform:none!important;
  filter:none!important;
}
.instructions-panel > .instructions-close-floating:hover,
.instructions-panel > .instructions-close-floating:focus-visible{
  background:linear-gradient(180deg,#ff5a79,#dc1645)!important;
  outline:2px solid rgba(255,255,255,.8)!important;
  outline-offset:2px!important;
}

/* Rezerwujemy miejsce pod przycisk, aby nie nachodził na tytuł. */
.instructions-header{
  padding-right:210px!important;
}

@media(max-width:720px){
  .instructions-panel > .instructions-close-floating{
    top:16px!important;
    right:14px!important;
    min-width:104px!important;
    height:40px!important;
    min-height:40px!important;
    padding:0 14px!important;
    font-size:12px!important;
  }
  .instructions-header{
    padding-right:132px!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.30 — gwarantowanie widocznego ZAMKNIJ.
   Przycisk jest poza ramką, bezpośrednio w overlay.
   ========================================================= */
.instructions-overlay > .instructions-close-global{
  position:fixed!important;
  top:max(28px, calc((100vh - min(900px, 94vh)) / 2 + 18px))!important;
  right:max(34px, calc((100vw - min(1120px, 96vw)) / 2 + 32px))!important;
  left:auto!important;
  bottom:auto!important;
  z-index:2147483647!important;

  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  visibility:visible!important;
  opacity:1!important;
  pointer-events:auto!important;

  width:138px!important;
  min-width:138px!important;
  height:46px!important;
  min-height:46px!important;
  margin:0!important;
  padding:0 20px!important;

  border:1px solid #ff315d!important;
  border-radius:7px!important;
  background:linear-gradient(180deg,#ff315d 0%,#bc0e36 100%)!important;
  color:#fff!important;
  font-size:14px!important;
  font-weight:950!important;
  line-height:1!important;
  letter-spacing:.09em!important;
  text-transform:uppercase!important;
  cursor:pointer!important;

  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.14),
    0 0 22px rgba(238,20,71,.72),
    0 8px 18px rgba(0,0,0,.62)!important;

  transform:none!important;
  filter:none!important;
  clip:auto!important;
  overflow:visible!important;
}
.instructions-overlay > .instructions-close-global:hover,
.instructions-overlay > .instructions-close-global:focus-visible{
  background:linear-gradient(180deg,#ff6380 0%,#e01647 100%)!important;
  outline:2px solid #fff!important;
  outline-offset:2px!important;
}

/* Stare warianty przycisku nie są już używane. */
.instructions-panel > .instructions-close,
.instructions-panel > .instructions-close-floating{
  display:none!important;
}

@media(max-width:720px){
  .instructions-overlay > .instructions-close-global{
    top:16px!important;
    right:16px!important;
    width:108px!important;
    min-width:108px!important;
    height:40px!important;
    min-height:40px!important;
    font-size:12px!important;
  }
}


/* =========================================================
   BLACKSAW2081 LAB v2.8.31 — całkowicie przebudowany przycisk ZAMKNIJ.
   ========================================================= */
.instructions-top-controls{
  position:fixed!important;
  top:max(24px, calc((100vh - min(900px, 94vh)) / 2 + 18px))!important;
  right:max(28px, calc((100vw - min(1120px, 96vw)) / 2 + 28px))!important;
  z-index:2147483647!important;
  display:block!important;
  width:auto!important;
  height:auto!important;
  pointer-events:auto!important;
  visibility:visible!important;
  opacity:1!important;
  overflow:visible!important;
  transform:none!important;
  filter:none!important;
}

.instructions-close-rebuilt{
  position:relative!important;
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  gap:10px!important;

  width:148px!important;
  min-width:148px!important;
  height:48px!important;
  min-height:48px!important;
  margin:0!important;
  padding:0 18px!important;

  border:1px solid #ff315d!important;
  border-radius:8px!important;
  background:
    linear-gradient(180deg,#ff4269 0%,#c10f39 100%)!important;
  color:#fff!important;

  font-family:inherit!important;
  font-size:14px!important;
  font-weight:950!important;
  line-height:1!important;
  letter-spacing:.08em!important;
  text-transform:uppercase!important;

  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.15),
    0 0 24px rgba(238,20,71,.78),
    0 8px 18px rgba(0,0,0,.62)!important;

  cursor:pointer!important;
  pointer-events:auto!important;
  visibility:visible!important;
  opacity:1!important;
  overflow:visible!important;
  transform:none!important;
  filter:none!important;
  clip:auto!important;
}
.instructions-close-rebuilt span{
  display:inline-block!important;
  color:#fff!important;
  font-size:20px!important;
  line-height:1!important;
  font-weight:900!important;
}
.instructions-close-rebuilt strong{
  display:inline-block!important;
  color:#fff!important;
  font-size:14px!important;
  line-height:1!important;
  font-weight:950!important;
}
.instructions-close-rebuilt:hover,
.instructions-close-rebuilt:focus-visible{
  background:
    linear-gradient(180deg,#ff6684 0%,#e21849 100%)!important;
  outline:2px solid #fff!important;
  outline-offset:2px!important;
}

/* Rezerwujemy obszar w nagłówku pod przycisk. */
.instructions-header{
  padding-right:230px!important;
}

/* Wszystkie historyczne warianty przycisku są wyłączone. */
.instructions-close,
.instructions-close-global,
.instructions-close-floating{
  display:none!important;
}

@media(max-width:720px){
  .instructions-top-controls{
    top:14px!important;
    right:14px!important;
  }
  .instructions-close-rebuilt{
    width:112px!important;
    min-width:112px!important;
    height:40px!important;
    min-height:40px!important;
    gap:6px!important;
    padding:0 12px!important;
  }
  .instructions-close-rebuilt span{font-size:16px!important;}
  .instructions-close-rebuilt strong{font-size:11px!important;}
  .instructions-header{
    padding-right:140px!important;
  }
}
\n\n/* v2.8.33 — realny przycisk w nagłówku instrukcji */\n.instructions-header{position:relative!important;padding-right:220px!important;}\n#instructionsHeaderClose{display:flex!important;visibility:visible!important;opacity:1!important;pointer-events:auto!important;}\n#instructionsHeaderClose:hover,#instructionsHeaderClose:focus-visible{background:linear-gradient(180deg,#ff6b86,#df1747)!important;outline:2px solid #fff!important;outline-offset:3px!important;}\n@media(max-width:720px){\n  .instructions-header{padding-right:132px!important;}\n  #instructionsHeaderClose{top:16px!important;right:14px!important;width:110px!important;height:40px!important;font-size:12px!important;}\n}\n