diff --git a/app/static/app.css b/app/static/app.css index 4646ad0..e6040da 100644 --- a/app/static/app.css +++ b/app/static/app.css @@ -151,6 +151,12 @@ h3 { grid-template-columns: 1fr; } +.play-layout { + display: grid; + grid-template-columns: minmax(320px, 420px) minmax(0, 1fr); + gap: 14px; +} + .chip-row { display: flex; flex-wrap: wrap; @@ -243,6 +249,43 @@ h3 { color: var(--muted); } +.join-row { + margin-top: 8px; + display: flex; + gap: 8px; +} + +.join-row input { + flex: 1; + min-width: 0; + border: 1px solid var(--border); + border-radius: 4px; + padding: 9px 10px; + font: inherit; + text-transform: uppercase; +} + +.play-meta { + margin-top: 12px; +} + +.play-meta p { + margin: 0 0 6px; +} + +.board-panel { + display: grid; + place-items: center; +} + +#chess-canvas { + width: min(100%, 640px); + height: auto; + border: 1px solid var(--border); + border-radius: 8px; + background: #fefefe; +} + .flash-stack { margin-bottom: 14px; display: grid; @@ -294,8 +337,222 @@ h3 { flex-direction: column; } + .play-layout { + grid-template-columns: 1fr; + } + + .game-stage { + grid-template-columns: 1fr; + } + + .join-row { + flex-direction: column; + } + .friend-card { flex-direction: column; align-items: flex-start; } } + +.hidden { + display: none !important; +} + +.play-page { + display: grid; + gap: 14px; +} + +.code-badge { + margin-top: 6px; + display: inline-block; + font-size: 1.5rem; + font-weight: 700; + letter-spacing: 0.08em; + border: 1px dashed var(--border); + border-radius: 8px; + padding: 10px 14px; + background: var(--surface-soft); +} + +.waiting-meta { + margin-top: 10px; +} + +.waiting-meta p { + margin: 0 0 6px; +} + +.game-stage { + display: grid; + grid-template-columns: minmax(0, 1fr) 300px; + gap: 14px; +} + +.game-sidebar p { + margin: 0 0 8px; +} + +.captured-row { + min-height: 28px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--surface-soft); + padding: 6px 8px; + font-size: 1.15rem; +} + +.fen-box { + width: 100%; + min-height: 94px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--surface-soft); + color: var(--text); + font: + 0.85rem/1.3 ui-monospace, + SFMono-Regular, + Menlo, + Consolas, + monospace; + padding: 8px; + resize: vertical; +} + +.play-modal { + position: fixed; + inset: 0; + background: rgba(15, 23, 42, 0.42); + display: grid; + place-items: center; + z-index: 30; + padding: 16px; +} + +.play-modal-card { + width: min(440px, 100%); + border: 1px solid var(--border); + background: var(--surface); + border-radius: 10px; + padding: 14px; +} + +@media (max-width: 980px) { + .game-stage { + grid-template-columns: 1fr; + } +} + +.captured-piece { + width: 20px; + height: 20px; + object-fit: contain; + margin-right: 3px; + vertical-align: middle; +} + +.player-strip { + width: min(100%, 640px); + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + border-radius: 8px; + padding: 8px 10px; +} + +.player-main { + display: flex; + align-items: center; + gap: 10px; + min-width: 0; +} + +.player-name { + font-weight: 700; +} + +.player-time { + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-weight: 700; +} + +.player-meta { + display: flex; + align-items: center; + gap: 8px; + min-width: 0; +} + +.capture-strip { + display: inline-flex; + align-items: center; + min-height: 24px; +} + +.material-pill { + border: 1px solid var(--border); + background: var(--surface); + border-radius: 999px; + padding: 2px 8px; + font-size: 0.85rem; + min-width: 36px; + text-align: center; +} + +.move-list-wrap { + border: 1px solid var(--border); + border-radius: 8px; + overflow: hidden; + background: var(--surface-soft); + max-height: 280px; + overflow-y: auto; +} + +.move-table { + width: 100%; + border-collapse: collapse; + font-variant-numeric: tabular-nums; +} + +.move-table th, +.move-table td { + text-align: left; + padding: 8px 10px; + border-bottom: 1px solid var(--border); +} + +.move-table thead th { + background: #eef2f6; + font-size: 0.85rem; + color: var(--muted); + position: sticky; + top: 0; +} + +.move-table tbody tr:last-child td { + border-bottom: 0; +} + +.move-table td:first-child, +.move-table th:first-child { + width: 48px; + color: var(--muted); +} + +#chess-canvas { + width: min(100%, 640px); + aspect-ratio: 1 / 1; + height: auto; + border: 1px solid var(--border); + border-radius: 8px; + background: #fefefe; +} + +@media (max-width: 700px) { + .player-strip { + flex-direction: column; + align-items: flex-start; + } +}