html{scrollbar-gutter:stable}
/* Единая подготовка: имена под портретами, счёт и часы по центру. */
.panel-top{display:flex;justify-content:center;min-height:70px;border:0;padding:12px 20px 0}
.panel-score{min-width:150px;border:0;background:transparent;font-size:2.15rem}
.panel-score strong{display:inline-block;color:#f0f1f6;transition:color .4s}
.panel-score .winning-score{color:#7bb69d}
.match-panel[data-state="finished"] #panel-title{position:static;clip-path:none;width:auto;height:auto;overflow:visible;white-space:normal;margin:0;font-size:.8rem;color:#9ec5af;text-align:center}
.match-panel[data-state="finished"] .panel-top{flex-direction:column;align-items:center;gap:5px}
.avatar-countdown{transition:color .5s}
.bar-art{pointer-events:none}
#players.match-duel{align-items:center;padding-top:20px;padding-bottom:24px}
.match-player .panel-name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;max-width:100%;padding:14px 5px 0;font-size:1rem;line-height:1.35;text-align:center;min-height:2.7em}
.preparation-clocks{margin-bottom:8px}
.panel-colors{display:grid;grid-template-columns:1fr 1fr;place-items:center;padding-top:12px}
.panel-colors .checker-indicator{display:block;width:34px;height:34px;object-fit:contain}
.match-portrait{overflow:visible}
.match-portrait>.avatar{border:0;padding:5px;box-shadow:none}
.avatar-ring{position:absolute;inset:0;overflow:visible;width:100%;height:100%;fill:none;stroke-width:1.6;color:var(--checker-color);color:color-mix(in srgb,var(--checker-color),#ee6b78 var(--danger-blend,0%));pointer-events:none}
.ring-track{stroke:#e0e4f125;stroke-width:1.3}
.ring-progress{stroke:currentColor;stroke-dasharray:100;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dashoffset .11s linear,color .5s;filter:drop-shadow(0 0 2px currentColor)}
.match-portrait:not(.is-counting) .ring-progress{opacity:.5}
.match-portrait.is-ready .avatar-ring{color:#68a88c}
.match-portrait.urgent .ring-progress{filter:drop-shadow(0 0 4px currentColor)}
.ready-band{border-radius:3px;left:0;width:100%}
#match-panel[data-state="finished"]{animation:panel-appear .4s ease both}
.rematch-themes{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;padding:18px}
.rematch-theme{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;border:1px solid #41485b;border-radius:9px;background:#101521;padding:8px;color:#c4c8d8;box-shadow:none;font-size:.68rem;line-height:1.4}
.rematch-theme img{display:block;width:100%;aspect-ratio:1503/1047;object-fit:contain}
.rematch-theme[aria-pressed="true"]{border-color:#a895d1;background:#2a2540;box-shadow:0 0 12px #ac98da28}
.rematch-theme:not(:disabled):hover{border-color:#b5acd5;box-shadow:0 0 12px #a99bd023;transform:translateY(-1px)}
.rematch-theme:disabled{opacity:1;cursor:default}
.match-panel:has(.rematch-themes:not([hidden])) .panel-ready{border-radius:0}
/* Только предупреждение о возможном сбивании: позиция остаётся серверной. */
.attack-blot .hit-mark{position:absolute;inset:15%;display:block;opacity:0;pointer-events:none;transition:opacity .15s;filter:drop-shadow(0 0 2px #b9344880)}
.hit-mark::before,.hit-mark::after{content:'';position:absolute;left:-1%;top:43%;width:102%;height:14%;border-radius:2px;background:#f34c61;box-shadow:0 0 2px #600a19}
.hit-mark::before{transform:rotate(45deg)}.hit-mark::after{transform:rotate(-45deg)}
.attack-blot.hit-preview{animation:blot-warning .48s ease-in-out infinite;z-index:4}
.attack-blot.hit-preview .hit-mark{opacity:1}
@keyframes blot-warning{0%,100%{translate:0 0}25%{translate:-.65px .25px}75%{translate:.65px -.25px}}
#path-dialog{position:fixed;inset:auto;margin:0;transform:translate(-50%,-50%);padding:14px;background:#282b35;border:1px solid #555a69;border-radius:12px;box-shadow:0 18px 48px #0007;overflow:auto}
#path-dialog h2{font-size:.95rem;padding-right:15px}
#path-choices{gap:9px;margin:12px 0 0}
#path-choices .path-choice{min-height:44px;color:var(--choice-color);font-size:.82rem;padding:9px 7px;text-align:center;background:#1c2029;border-color:#565c6d}
#path-cancel{position:absolute;right:5px;top:4px;padding:0;width:23px;height:23px;min-height:0;font-size:0;border:0;background:none;box-shadow:none}
#path-cancel::after{content:'×';font-size:21px;color:#bfc3d1}
/* Одинаковый масштаб во всех точках пути костей: 104/320 × 36% башни. */
.tower-die,.result-die{width:11.7%;aspect-ratio:1}
#roll-dice,#roll-dice:hover{inset:0;width:100%;height:100%;padding:0;border:0}
#roll-dice .ready-die{position:absolute;left:43%;top:13%;width:11.7%;aspect-ratio:1;transform:translate(-50%,-50%)}
#roll-dice .ready-die+.ready-die{left:57%}
.history-compartment{display:block;padding:0;gap:0}
.history-die{position:absolute;left:50%;top:25%;width:61.578947%;height:auto;max-width:none;aspect-ratio:1;transform:translate(-50%,-50%)}
.history-die+.history-die{top:75%}
#falling-dice{position:absolute;inset:0;z-index:3;clip-path:inset(0 26% 44.5% 26%);pointer-events:none}
.tower-depth{position:absolute;left:32%;width:36%;top:46%;height:9.2%;z-index:4;pointer-events:none;background:linear-gradient(180deg,transparent,#06070b55 26%,#04050ce8 62%,#04050ce8 76%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.tower-step-shade{position:absolute;left:33%;width:34%;top:28.5%;height:7%;z-index:4;pointer-events:none;background:linear-gradient(180deg,transparent,#06070b30 30%,#06070b70 60%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
#dice-results{z-index:5;clip-path:inset(59.6% 27% 7% 27%)}
.result-die.used{opacity:1;filter:brightness(.42) saturate(.55);transition:filter .18s}
.result-die.emerging{animation:roll-out .42s cubic-bezier(.15,.65,.22,1) both}
.result-die.double-original{animation:roll-out .42s cubic-bezier(.15,.65,.22,1) both,settle-upper .3s .42s ease-out both}
.result-die.double-copy{animation:split-copy .35s .72s ease-out both}
@keyframes roll-out{from{translate:0 -180%}to{translate:0 0}}
@keyframes settle-upper{from{top:75%;filter:drop-shadow(0 0 4px #b9abdd55)}to{top:70%;filter:drop-shadow(0 0 0 transparent)}}
@keyframes split-copy{from{top:70%;opacity:0;filter:drop-shadow(0 0 4px #b9abdd55)}20%{opacity:1}to{top:84%;opacity:1;filter:drop-shadow(0 0 0 transparent)}}
.die-transfer{position:fixed;display:block;z-index:22;pointer-events:none}
/* В актуальных PNG по 15 индивидуальных ячеек слева и справа. */
#off-0 .off-count,#off-1 .off-count{top:auto;bottom:-2.5%;font-size:clamp(5px,.6vw,9px)}
@media(max-width:680px){
 .panel-top{min-height:58px;padding-top:10px}.panel-score{font-size:1.75rem}
 #players.match-duel{padding-top:16px;padding-bottom:16px}
 .match-player .panel-name{font-size:.72rem;padding:10px 2px 0;min-height:3em}
 .panel-colors .checker-indicator{width:25px;height:25px}.panel-colors{padding-top:8px}
 .preparation-clocks{margin-bottom:14px}.avatar-ring{stroke-width:2.3}
 .rematch-themes{grid-template-columns:repeat(3,minmax(0,1fr));padding:12px;gap:8px}.rematch-theme{font-size:.62rem;padding:5px}
 #path-dialog{padding:9px}#path-dialog h2{font-size:.72rem;line-height:1.25}#path-choices{margin-top:6px;gap:6px}#path-choices .path-choice{min-height:30px;font-size:.65rem;line-height:1.2;padding:6px 2px}
}
@media(prefers-reduced-motion:reduce){.attack-blot.hit-preview,.result-die.emerging,.result-die.double-original,.result-die.double-copy,#match-panel[data-state="finished"]{animation:none}.ring-progress{transition:none}}

/* Главный приоритет — доска. Видимая высота башни ~ половина ширины поля. */
.game-layout{grid-template-columns:minmax(0,1fr) minmax(0,.44fr);align-items:center;gap:8px}
.board-area{padding:0}
.tower-panel{width:100%;min-width:0;padding:0;transform:none;justify-self:center}
#game-board-image{aspect-ratio:auto;width:100%;height:auto}
.destination-area,.destination-area:hover,.destination-area:focus-visible,.destination-area:disabled{position:absolute;z-index:1;display:block;min-height:0;margin:0;padding:0;transform:none;border:0;border-radius:0;background:transparent;box-shadow:none;outline:0;opacity:1;pointer-events:auto;touch-action:pan-y;cursor:pointer}
.destination-area:disabled{pointer-events:none}
.checker-piece:disabled,.checker-piece:disabled:hover{pointer-events:none}
.checker-piece{touch-action:pan-y}
.attack-blot.hit-preview{z-index:auto}
.result-die.emerging{animation-duration:.32s}
.result-die.double-original{animation:roll-out .32s cubic-bezier(.15,.65,.22,1) both,settle-upper .26s .32s ease-out both}
.result-die.double-copy{animation:split-copy .3s .58s ease-out both}
@media(max-width:760px){.game-layout{grid-template-columns:1fr;gap:12px}.tower-panel{width:min(300px,72%);min-width:min(210px,100%);transform:none}}

/* Фильтры не выбеливают текстуру; дополнительный круглый ореол задан ниже. */
.board-point.movable .checker-piece.available-checker,.board-point.selected .checker-piece.available-checker,.board-point:focus-visible .available-checker,.bar-place.movable img,.bar-place.selected img,.bar-place:focus-visible img,.bar-place.movable .bar-art,.bar-place.selected .bar-art{filter:none;scale:1}
.off-checker .side-art{transform:rotate(90deg) scaleX(var(--edge-thickness,1));filter:none}
.off-checker{overflow:hidden;overflow:clip;border-radius:3%}
.flight-side .piece-art{transform:scaleX(var(--edge-thickness,1))}
/* В игровой партии освобождаем высоту под стол: заголовок и навигация в одной
   строке. Ограничение по высоте не даёт столу обрезаться в невысоком окне. */
@media(min-width:761px){
 body:has(#game-screen:not([hidden])){padding:8px 12px}
 body:has(#game-screen:not([hidden])) main{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
 body:has(#game-screen:not([hidden])) .page-header{width:auto;margin:0;padding:0;border:0;gap:9px;min-height:36px}
 body:has(#game-screen:not([hidden])) .page-header h1{font-size:1.1rem}
 body:has(#game-screen:not([hidden])) .brand-mark{font-size:1.45rem}
 body:has(#game-screen:not([hidden])) .screen-navigation{width:auto;min-height:36px;margin:0;gap:8px}
 body:has(#game-screen:not([hidden])) .screen-navigation button{min-height:36px;height:36px;padding:7px 12px}
 body:has(#game-screen:not([hidden])) #message:empty{display:none}
 #game-screen{grid-column:1/-1;min-width:0}
 .game-players{gap:12px;align-items:center}
 .game-player{padding:8px 12px;min-height:56px}
 .game-player>.avatar{width:38px;height:38px}
 .clock-side{padding:5px 4px;gap:3px}.game-clock{font-size:1.4rem}.match-clocks{padding:3px}
 .game-heading{margin:4px 0;font-size:.65rem;min-height:0}
 .game-heading:has(#game-viewer:empty){display:none}
 .game-layout{width:100%;max-width:min(100%,calc((100dvh - 118px)*2.067));margin:2px auto 0}
 .game-actions:has(#new-match[hidden]){display:none}
}

/* Онлайн — только серверное число активных гостевых сессий. */
.online-status{display:flex;align-items:center;justify-content:center;gap:7px;margin:12px 0 20px;color:#b8becb;font-size:.78rem;font-variant-numeric:tabular-nums}
.online-status>span{width:6px;height:6px;border-radius:50%;background:#78aa8d;box-shadow:0 0 6px #78aa8d30}.online-status strong{font-weight:500;color:#d1d5df}
.match-center{text-align:center}
#pause-game{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:30px;height:30px;width:auto;padding:4px 13px;margin:4px auto 0;color:#c6c7da;border:1px solid #45465e;border-radius:7px;background:#262737;font-size:.7rem;transition:background .15s,box-shadow .15s}
#pause-game:hover{background:#35364c;box-shadow:0 0 12px #a399d322}#pause-game svg{width:16px;height:16px;fill:none;stroke-width:2.4}
#falling-dice{perspective:600px}.die-tumble{position:absolute;inset:0;transform-style:preserve-3d}.tumble-face{position:absolute;inset:0;backface-visibility:hidden}
.result-die{--roll-duration:360ms;--roll-delay:0ms;--roll-drift:0px}
.result-die.emerging,.result-die.double-original{animation:natural-roll-out var(--roll-duration) var(--roll-delay) cubic-bezier(.16,.6,.26,1) both}
.result-die.double-copy{animation:natural-copy .3s var(--roll-delay) ease-out both}
@keyframes natural-roll-out{from{translate:var(--roll-drift) -180%}to{translate:0 0}}
@keyframes natural-copy{from{translate:0 -100%;opacity:0}to{translate:0 0;opacity:1}}

/* Панель 0.14: изменено только место согласованных элементов управления. */
.game-players{align-items:start}
.game-player-column{min-width:0;display:grid;gap:12px}
#game-player-controls:empty{display:none}
#game-player-controls .screen-navigation{display:flex;width:auto;min-height:0;justify-content:flex-start;gap:8px;margin:0;flex-wrap:wrap}
#game-player-controls .danger-navigation{width:auto;flex:0 0 auto}
.match-center{text-align:center}
#pause-game{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;height:44px;width:auto;padding:10px 17px;margin:12px auto 0;font-size:.74rem;color:#d2cbe5;border:1px solid #626080;border-radius:8px;background:#36364f;transition:background .15s,box-shadow .15s}
#pause-game:hover{background:#44435f;box-shadow:0 0 18px #ad9ce414}
#pause-game svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2}
.game-layout{grid-template-columns:minmax(0,1fr) minmax(0,.36fr);gap:0;max-width:var(--fitted-board-width,100%);margin:2px auto 0}
#game-board-image{aspect-ratio:auto 1503/1047;filter:none;transform:none;image-rendering:auto}
/* Контур ограничен диаметром 1.24 от фишки — уже основания своего пункта. */
.checker-piece[data-available-artwork="true"]::before,.bar-art[data-available-artwork="true"]::before{content:'';position:absolute;inset:-12%;border-radius:50%;pointer-events:none;z-index:-1;background:radial-gradient(circle closest-side,transparent 68%,#ffffffe0 77%,var(--checker-color) 83%,color-mix(in srgb,var(--checker-color),transparent 55%) 91%,transparent 100%)}
.checker-piece.show-ghost::before,.bar-place.show-ghost .bar-art::before{opacity:0}
.bar-art[data-available-artwork="true"]{isolation:isolate}
@media(max-width:760px){.game-layout{grid-template-columns:1fr;gap:12px;max-width:none}.tower-panel{width:min(300px,72%)}#game-player-controls .screen-navigation{gap:7px}#game-player-controls .danger-navigation{font-size:.65rem;padding:9px 10px;min-height:40px;height:40px}.game-player-column{gap:12px}}
@media(prefers-reduced-motion:reduce){.result-die.emerging,.result-die.double-original,.result-die.double-copy{animation:none}}
/* Согласованная композиция 0.14: только запрошенное увеличение на ~12%. */
@media(min-width:761px){
 body:has(#game-screen:not([hidden])){padding-top:6px}
 body:has(#game-screen:not([hidden])) main{row-gap:6px}
 .game-players{grid-template-columns:minmax(0,1fr) 352px minmax(0,1fr)}
 .game-player{height:64px;min-height:64px;padding:9px 14px;gap:11px}
 .game-player>.avatar{width:43px;height:43px}.game-player>.checker-indicator{width:28px;height:28px}
 .game-player strong{font-size:1.02rem;line-height:1.15;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
 .game-player:has(.note) strong{-webkit-line-clamp:1}
 .match-clocks{min-height:68px;padding:3.5px}.clock-side{padding:5.5px 4.5px;gap:3.5px}.game-clock{font-size:1.57rem}
}
#pause-game{margin-top:8px}
/* Удаляем только прозрачные поля: вся рама, ячейки и подписи остаются видимы. */
#board-space{display:flow-root}
#play-board{margin-top:calc(-100% * 40 / 1503);margin-bottom:calc(-100% * 60 / 1503)}
/* Усиление белого и цветного контура, прежний внешний радиус и размер фишки. */
.checker-piece[data-available-artwork="true"]::before,.bar-art[data-available-artwork="true"]::before{background:radial-gradient(circle closest-side,transparent 66%,#fff 75%,#fff 79%,var(--checker-color) 86%,color-mix(in srgb,var(--checker-color),transparent 40%) 93%,transparent 100%)}
.active-clock .game-clock.low-time{animation:clock-urgency 1s ease-in-out infinite}
@keyframes clock-urgency{0%,100%{text-shadow:0 0 3px #e3707c22;opacity:1}50%{text-shadow:0 0 9px #e3707c55;opacity:.8}}
@media(max-width:760px){
 .game-player{height:122px;min-height:122px;padding:12px 8px;gap:8px;overflow:hidden;align-content:center}
 .game-player>.avatar{width:45px;height:45px}.game-player>.checker-indicator{width:26px;height:26px}
 .game-player strong{font-size:.9rem;line-height:1.15;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
 .game-player:has(.note) strong{-webkit-line-clamp:1}
 .match-center{width:min(352px,100%)}.match-clocks{min-height:86px}.game-clock{font-size:1.9rem}
}
@media(prefers-reduced-motion:reduce){.active-clock .game-clock.low-time{animation:none}}
