/* ============================================================
   Крестики-нолики — страница игры и игровая комната
   ============================================================ */

/* ---------- Витрина ---------- */
.tic-hero-visual{position:relative;min-height:440px;overflow:hidden;border-radius:var(--r-lg);background:linear-gradient(160deg,#eefbd3 0%,#e2f2ff 100%)}
.tic-visual-label{position:absolute;z-index:3;left:22px;top:22px;padding:6px 12px;border-radius:var(--r-pill);background:#fff;color:var(--ink);font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;box-shadow:var(--shadow-sm)}
.tic-preview-board{position:absolute;z-index:2;left:50%;top:50%;width:300px;aspect-ratio:1;transform:translate(-50%,-50%) rotate(-3deg);display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:8px;border-radius:26px;background:#fff;box-shadow:var(--shadow-md)}
.tic-preview-board i{display:grid;place-items:center;border-radius:16px;background:var(--surface-2);color:var(--faint);font-size:58px;font-weight:600;font-style:normal;line-height:1}
.tic-preview-board .x{color:var(--accent)}
.tic-preview-board .o{color:var(--coral)}
.tic-preview-board .win{background:var(--lime-soft);color:var(--lime-ink)}
.tic-floating-symbol{position:absolute;z-index:4;width:68px;height:68px;display:grid;place-items:center;border-radius:22px;background:#fff;color:var(--accent);font-size:44px;font-weight:600;line-height:1;box-shadow:var(--shadow-md)}
.tic-float-x{right:26px;top:70px;transform:rotate(12deg)}
.tic-float-o{left:26px;bottom:90px;transform:rotate(-12deg);color:var(--coral)}
.tic-preview-score{position:absolute;z-index:4;right:22px;bottom:22px;min-width:150px;padding:12px 18px;border-radius:var(--r);background:var(--ink);color:#fff;text-align:center}
.tic-preview-score small{display:block;color:rgba(255,255,255,.6);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.tic-preview-score strong{display:block;margin:4px 0 2px;font-size:26px;font-weight:800}
.tic-preview-score i{color:var(--lime);font-style:normal}
.tic-preview-score span{display:block;color:rgba(255,255,255,.7);font-size:12px}

/* ---------- Комната ---------- */
.tic-arena{position:relative;min-height:600px;display:grid;grid-template-columns:230px minmax(360px,540px) 230px;align-items:center;justify-content:center;gap:32px;padding:28px;overflow:hidden;background:radial-gradient(circle at 50% 40%,#f7f4ff 0,#ebe6ff 48%,#e2eefc 100%)}
.tic-arena:before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(110,79,245,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(110,79,245,.07) 1px,transparent 1px);background-size:48px 48px;pointer-events:none}
.tic-player-card{position:relative;z-index:2;min-height:100px;padding:16px;display:grid;grid-template-columns:44px 1fr auto;align-items:center;gap:12px;border-radius:18px;background:#fff;box-shadow:var(--shadow-md)}
.tic-player-right{grid-template-columns:auto 1fr 44px;text-align:right}
.tic-player-avatar{width:44px;height:44px;display:grid;place-items:center;border-radius:50%;color:var(--ink);font-size:14px;font-weight:700}
.tic-player-avatar.coral{background:var(--coral-soft)}
.tic-player-avatar.violet{background:var(--accent-soft)}
.tic-player-card div{display:flex;min-width:0;flex-direction:column}
.tic-player-card small{color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.tic-player-card strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}
.tic-player-card em{margin-top:2px;color:var(--accent);font-size:12px;font-style:normal;font-weight:800}
.tic-player-card>b{font-size:28px;font-weight:800}
.tic-board-wrap{position:relative;z-index:2}
.tic-round-label{margin-bottom:8px;color:var(--muted);text-align:center;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.tic-round-label strong{color:var(--ink)}
.tic-status{min-height:24px;margin-bottom:12px;color:var(--text);text-align:center;font-size:14px;font-weight:600}
.tic-game-board{aspect-ratio:1;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:10px;border-radius:28px;background:#fff;box-shadow:var(--shadow-md)}
.tic-cell{position:relative;display:grid;place-items:center;padding:0;border:0;border-radius:18px;background:var(--surface-2);color:var(--faint);font-size:clamp(56px,6vw,92px);font-weight:600;line-height:1;cursor:default;transition:transform .15s,background .15s,color .15s,box-shadow .2s}
.tic-game-board.my-turn .tic-cell:empty{cursor:pointer}
.tic-game-board.my-turn .tic-cell:empty:hover{transform:translateY(-2px);background:var(--accent-soft)}
/* Призрак своего символа под курсором: видно, что клетка свободна и чья очередь. */
.tic-game-board.my-turn .tic-cell:empty::after{content:attr(data-ghost);color:var(--accent);opacity:0;transform:scale(.7);transition:opacity .15s,transform .15s}
.tic-game-board.my-turn .tic-cell:empty:hover::after{opacity:.35;transform:scale(1)}
.tic-cell.x{color:var(--accent)}
.tic-cell.o{color:var(--coral)}
.tic-cell.fresh{animation:ticPop .32s cubic-bezier(.2,.9,.3,1.4)}
@keyframes ticPop{0%{background:var(--accent-soft)}}
.tic-mark{width:62%;height:62%;overflow:visible;filter:drop-shadow(0 3px 0 rgba(28,32,48,.08))}
.tic-stroke{fill:none;stroke:currentColor;stroke-width:12;stroke-linecap:round}
.tic-stroke.o{transform:rotate(-90deg);transform-origin:50% 50%}
/* Штрихи прочерчиваются: сначала одна палочка крестика, потом вторая; нолик — по кругу. */
.tic-cell.fresh .tic-stroke.a{stroke-dasharray:76;stroke-dashoffset:76;animation:ticDraw .2s ease-out forwards}
.tic-cell.fresh .tic-stroke.b{stroke-dasharray:76;stroke-dashoffset:76;animation:ticDraw .2s ease-out .14s forwards}
.tic-cell.fresh .tic-stroke.o{stroke-dasharray:190;stroke-dashoffset:190;animation:ticDraw .4s cubic-bezier(.3,.6,.3,1) forwards}
@keyframes ticDraw{to{stroke-dashoffset:0}}
.tic-cell.win{background:var(--lime-soft);color:var(--lime-ink);animation:ticWin .9s ease-in-out .5s 3}
@keyframes ticWin{50%{background:var(--lime);transform:scale(1.04)}}
.tic-line{position:absolute;z-index:4;pointer-events:none;overflow:visible}
.tic-line-path{stroke:var(--ink);stroke-width:9;stroke-linecap:round;opacity:.9;filter:drop-shadow(0 6px 10px rgba(28,32,48,.28))}
.tic-line.draw .tic-line-path{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:ticLine .5s cubic-bezier(.3,.7,.2,1) .1s forwards}
@keyframes ticLine{to{stroke-dashoffset:0}}
.tic-result-card{position:absolute;z-index:7;left:50%;top:50%;transform:translate(-50%,-50%);min-width:300px}

@media(max-width:1100px){
  .tic-arena{grid-template-columns:1fr;gap:12px;min-height:0}
  .tic-player-card,.tic-board-wrap{width:min(540px,100%);margin:auto}
  .tic-player-left{order:1}
  .tic-board-wrap{order:2}
  .tic-player-right{order:3}
}
@media(max-width:700px){
  .play-nav{display:none}
  .tic-hero-visual{min-height:400px}
  .tic-preview-board{width:250px}
  .tic-preview-board i{font-size:48px}
  .tic-arena{padding:14px 10px}
  .tic-game-board{gap:7px;padding:7px;border-radius:22px}
  .tic-cell{border-radius:14px}
  .tic-player-card{min-height:84px;padding:12px}
  .tic-result-card{min-width:260px}
}

/* ---------- Таймер хода ---------- */
.tic-turn-row{display:flex;align-items:center;justify-content:center;gap:14px}
.tic-timer{position:relative;width:56px;height:56px;flex:0 0 auto;display:grid;place-items:center}
.tic-timer svg{position:absolute;inset:0;transform:rotate(-90deg)}
.tic-timer circle{fill:none;stroke-width:5;stroke-linecap:round}
.tic-timer-track{stroke:rgba(28,32,48,.1)}
/* 151 ≈ длина окружности радиуса 24; заполнение задаёт --progress. */
.tic-timer-fill{stroke:var(--line-strong);stroke-dasharray:151;stroke-dashoffset:calc(151 - 151 * var(--progress) / 100%);transition:stroke-dashoffset .9s linear,stroke .3s}
.tic-timer.mine .tic-timer-fill{stroke:var(--accent)}
.tic-timer.hurry .tic-timer-fill{stroke:var(--coral)}
.tic-timer b{font-size:19px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--muted)}
.tic-timer.mine b{color:var(--ink)}
.tic-timer.hurry b{color:var(--coral-ink)}
@media(max-width:640px){
  .tic-turn-row{gap:10px}
  .tic-timer{width:46px;height:46px}
  .tic-timer b{font-size:16px}
}

/* ---------- Ползунок «секунд на ход» в диалоге комнаты ---------- */
.range-field{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}
.range-field header{display:flex;align-items:baseline;justify-content:space-between}
.range-field label{color:var(--ink);font-size:14px;font-weight:600}
.range-field b{font-size:18px;font-weight:800;font-variant-numeric:tabular-nums}
.range-field small{color:var(--muted);font-size:13px}
.range-field input[type=range]{width:100%;height:22px;accent-color:var(--accent);cursor:pointer}
