:root{color-scheme:light;--ink: #241c12;--paper: #efe6d4;--panel: #fffdf8;--line: #d3c4a8;--accent: #7a3224;--accent-2: #c45c26;--muted: #5c5140;--red: #b42318;--ok: #1f6b45;--felt: #3f6b48;--wood: #6a4528;--focus: #1d4f91;--shadow: 0 10px 28px rgba(36, 28, 18, .12)}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:radial-gradient(1200px 500px at 50% -10%,#f7f1e4,transparent),var(--paper);color:var(--ink);font-family:WenQuanYi Micro Hei,Noto Sans CJK TC,PingFang TC,Noto Sans TC,Microsoft JhengHei,system-ui,sans-serif}button,input{font:inherit}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.page{max-width:1080px;margin:0 auto;padding:16px;display:flex;flex-direction:column;gap:12px}.setup-page{min-height:100dvh}.play-page{min-height:100dvh;gap:8px;padding-bottom:12px}.top h1,.play-top h1{margin:0;font-size:1.55rem;letter-spacing:.08em}.play-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.muted{color:var(--muted);margin:4px 0}.panel,.setup,.result-card,.log{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow)}.setup fieldset{border:1px dashed var(--line);margin:10px 0;display:flex;flex-direction:column;gap:4px;border-radius:10px}.setup label{display:flex;gap:10px;align-items:center;min-height:44px;padding:0 6px;border-radius:8px;cursor:pointer}.setup label:hover{background:#f6efe3}.setup .primary{min-height:48px;min-width:140px;font-size:1.05rem}.hud{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center}.turn-pill{margin:0;padding:6px 12px;border-radius:999px;background:#efe6d4;font-weight:700}.turn-pill.you{background:#e5f4eb;color:var(--ok)}.turn-pill.thinking{background:#fff4e5;color:var(--accent-2)}.group-line,.hand-line{margin:0;font-weight:700}.hand-line{color:var(--accent)}.last-shot{margin:0;width:100%;font-size:.92rem;color:var(--muted)}.table-wrap{width:100%}.table-frame{width:100%;aspect-ratio:2.05 / 1;min-height:180px;max-height:min(62vh,520px);touch-action:none}.pool-canvas{display:block;width:100%;height:100%;border-radius:12px;cursor:crosshair;touch-action:none}.status-row{display:flex;flex-wrap:wrap;gap:8px 18px}.ball-strip{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.strip-label{font-size:.85rem;color:var(--muted);margin-right:4px}.mini-ball{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#d9a441;color:#1b1610;font-size:.7rem;font-weight:800;border:1px solid rgba(20,16,10,.35)}.mini-ball.stripe{background:linear-gradient(#f4f0e6 28%,#d9a441 28% 72%,#f4f0e6 72%)}.mini-ball.down{opacity:.28;filter:grayscale(.8)}.human-dock{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:10px 12px}.hint-line{margin:0 0 8px;min-height:1.3em;font-weight:700}.controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.power-label{display:flex;align-items:center;gap:8px;min-height:44px}.power-label input[type=range]{width:min(220px,40vw)}.aim-readout{font-variant-numeric:tabular-nums;color:var(--muted)}button{background:#efe6d4;border:1px solid var(--ink);border-radius:10px;padding:10px 16px;min-height:44px;cursor:pointer}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);color:#fffef8;border-color:var(--accent);font-weight:700}button.ghost{background:transparent}button.primary:hover:not(:disabled),button:hover:not(:disabled):not(.primary):not(.ghost){filter:brightness(1.05)}.result-overlay{position:fixed;inset:0;background:#241c1273;display:flex;align-items:center;justify-content:center;padding:16px;z-index:20}.result-card{width:min(420px,100%);border-color:var(--accent)}.result-card h2{margin:0 0 8px;color:var(--accent)}.log{box-shadow:none}.log summary{cursor:pointer;font-weight:700;min-height:44px;display:flex;align-items:center}.log ol{margin:0;padding-left:1.2rem;max-height:180px;overflow:auto}@media(max-width:720px){.page{padding:8px}.table-frame{max-height:min(48vh,360px)}.play-top h1{font-size:1.25rem}.controls{display:grid;grid-template-columns:1fr 1fr}.controls .primary,.power-label{grid-column:1 / -1}}
