:root{--paper: #f7f0e3;--ink: #33281f;--ink-soft: #7a6a58;--wood: #7c5233;--wood-dark: #5d3c24;--felt: #ead9b8;--point-warm: #c2593a;--point-pale: #efe2c4;--accent: #b3552e;--accent-dark: #93401f;--go: #3e7d4f;--card: #fffdf8;--line: #e0d3bd;--danger: #a33b2e;--dragon: #7c2d17}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);color:var(--ink);font-family:Avenir Next,Segoe UI,system-ui,sans-serif;line-height:1.45;-webkit-tap-highlight-color:transparent}main{max-width:1100px;margin:0 auto;padding:16px}h1,h2,h3{font-family:Georgia,Times New Roman,serif;font-weight:600;margin:0 0 12px}.brand-lockup{display:flex;align-items:center;gap:14px;justify-content:center}.brand-words{text-align:left}.brand{font-family:Georgia,Times New Roman,serif;font-size:1.9rem;font-weight:600;line-height:1.1;letter-spacing:.01em;color:var(--wood-dark)}.brand-dot{color:var(--accent)}.brand-slogan{margin:2px 0 0;font-style:italic;color:#8a6d4a;font-size:.95rem}.dragon{width:56px;height:56px;color:var(--dragon);flex:none}.dragon-cut{fill:var(--paper)}.brand-compact{gap:10px}.brand-compact .brand{font-size:1.35rem}.brand-compact .dragon{width:38px;height:38px}.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:0 2px 10px #5a3e2312}.muted{color:var(--ink-soft)}.small{font-size:.85rem}.error{color:var(--danger);margin:8px 0 0}.hint{color:var(--ink-soft);font-weight:400;font-size:.85rem;margin-left:6px}button,.button-link{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:10px;padding:10px 18px;min-height:44px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}button:disabled{opacity:.45;cursor:default}button.primary,.button-link.primary{background:var(--accent);border-color:var(--accent-dark);color:#fff8ef;font-weight:600}button.primary:not(:disabled):active{background:var(--accent-dark)}button.big{font-size:1.15rem;padding:14px 28px}button.quiet{border-color:transparent;background:transparent;color:var(--ink-soft);text-decoration:underline;text-underline-offset:3px}button.danger{background:var(--danger);border-color:var(--danger);color:#fff}input{font:inherit;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);width:100%;min-height:44px}input:focus,button:focus-visible{outline:3px solid rgba(179,85,46,.35);outline-offset:1px}label{display:block;font-weight:600;margin-bottom:12px}label input{margin-top:4px;font-weight:400}.auth-page{max-width:430px;padding-top:8vh;text-align:center}.auth-form{text-align:left;margin-top:18px}.auth-form .primary{width:100%;margin-top:6px}.auth-alt{text-align:center;color:var(--ink-soft);margin:14px 0 0}.lobby-header{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}.lobby-user{display:flex;align-items:center;gap:10px;color:var(--ink-soft)}.lobby-actions{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin:10px 0 22px}.join-form{display:flex;gap:8px}.join-form input{width:140px;text-transform:uppercase;letter-spacing:.12em;font-weight:600}.lobby-section h3{margin:18px 0 8px;color:var(--wood-dark)}.game-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}.game-row{width:100%;display:flex;justify-content:space-between;gap:12px;padding:14px 16px;text-align:left}.game-opponent{font-weight:600}.game-note{color:var(--ink-soft)}.game-page{padding-bottom:40px}.game-header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;flex-wrap:wrap}.players{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.player{font-weight:600;padding:6px 12px;border-radius:10px;border:2px solid transparent;display:inline-flex;gap:8px;align-items:baseline}.player-active{border-color:var(--accent);background:#b3552e14}.pips{font-weight:400;font-size:.8rem;color:var(--ink-soft)}.vs{color:var(--ink-soft)}.opening-reveal{text-align:center;margin-bottom:12px;border-color:var(--accent);cursor:pointer}.opening-reveal h3{margin-bottom:10px}.opening-dice{display:flex;align-items:center;justify-content:center;gap:22px}.opening-side{display:flex;flex-direction:column;align-items:center;gap:6px}.opening-side .die{width:62px;height:62px}.opening-name{font-weight:600;color:var(--ink-soft)}.opening-vs{color:var(--ink-soft);font-style:italic}.opening-result{font-weight:600;margin:12px 0 4px}.join-banner{text-align:center;margin-bottom:12px}.join-banner p{margin:0}.join-code{font-family:Georgia,serif;font-size:2.4rem;letter-spacing:.35em;margin-top:6px!important;color:var(--accent-dark)}.board{width:100%;height:auto;display:block;-webkit-user-select:none;user-select:none;touch-action:manipulation}.frame{stroke-width:3}.point{stroke-width:1}.point-dest{stroke-width:3}.checker{stroke-width:2.5}.ring{fill:none;stroke-width:4;pointer-events:none}.ring-selectable{stroke:var(--go)}.ring-selected{stroke:#ffd75e;stroke-width:5}.ring-last{stroke:#ffd75e;stroke-width:3;stroke-dasharray:7 6;opacity:.85}@keyframes checker-flight{0%{transform:translate(0)}to{transform:translate(var(--dx),var(--dy))}}.checker-flight{animation-name:checker-flight;animation-timing-function:cubic-bezier(.4,.1,.3,1);animation-fill-mode:forwards;pointer-events:none}.checker-lifted{filter:drop-shadow(0 4px 5px rgba(45,30,15,.45))}@media(prefers-reduced-motion:reduce){.checker-flight{animation-duration:1ms!important}}.checker-count{font-size:26px;font-weight:700;text-anchor:middle;dominant-baseline:central}.dest-dot{fill:none;stroke-width:3;stroke-dasharray:6 5}.tray{stroke-width:2}.off-slab{stroke-width:1}.tray-count{font-size:22px;font-weight:700;text-anchor:middle}.checker,.checker-count,.dest-dot,.off-slab,.tray-count{pointer-events:none}.settings-panel{margin-bottom:12px;display:flex;gap:28px;flex-wrap:wrap;align-items:flex-start}.settings-group h3{margin-bottom:8px;font-size:1rem}.swatches{display:flex;gap:8px;flex-wrap:wrap}.swatch{width:40px;height:40px;min-height:40px;border-radius:50%;border-width:3px;border-style:solid;padding:0}.die-swatch{padding:2px;min-height:40px;border-radius:12px;background:transparent;border:3px solid transparent}.board-swatch{padding:2px;min-height:40px;border-radius:10px;background:transparent;border:3px solid transparent}.board-swatch-svg{width:60px;height:44px;display:block;border-radius:6px}.die-swatch .die{width:38px;height:38px;display:block}.swatch-on{outline:3px solid var(--accent);outline-offset:2px}.toggle{display:flex;align-items:center;gap:10px;font-weight:600;margin:0}.toggle input{width:22px;height:22px;min-height:22px;accent-color:var(--accent)}.settings-notifications{max-width:340px}.quiet-hours{display:block;margin:12px 0 8px;font-weight:600}.quiet-hours select{font:inherit;padding:6px 8px;border-radius:8px;border:1px solid var(--line);background:#fff}.notif-types{display:grid;gap:6px;margin-top:6px}.notif-types .toggle{font-weight:400}.ios-hint{max-width:300px}.hit{fill:transparent;cursor:pointer}.control-bar{margin-top:12px}.status{font-size:1.05rem;margin:0 0 10px;min-height:1.5em}.controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dice-row{display:flex;gap:6px}.die{width:46px;height:46px}.die-face{fill:#fffdf6;stroke:#c9b189;stroke-width:2}.die-pip{fill:var(--ink)}.die-used{opacity:.3}.resign-confirm{display:inline-flex;align-items:center;gap:8px;color:var(--danger);font-weight:600}.histogram{margin-top:14px;max-width:420px}.histogram-bars{display:flex;align-items:flex-end;gap:14px;height:130px;padding:0 4px}.histogram-col{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px}.histogram-bar{width:34px;background:var(--accent);border-radius:5px 5px 0 0}.histogram-n{font-size:.8rem;color:var(--ink-soft)}.histogram-label{font-weight:700}.over-banner{margin-top:16px;text-align:center}.over-actions{display:flex;gap:10px;justify-content:center;margin-top:10px}.match-score{font-weight:600;color:var(--wood-dark)}.match-standing{font-weight:600}.target-select{display:flex;align-items:center;gap:8px;font-weight:600;margin:0}.target-select select{font:inherit;padding:10px;border-radius:10px;border:1px solid var(--line);background:#fff}.start-score{display:flex;align-items:center;gap:10px}.start-score label{display:flex;align-items:center;gap:6px;margin:0;font-weight:600}.start-score input{width:64px}.agreement-banner{margin-bottom:18px;border-color:var(--accent)}.chat-panel{margin-top:12px;max-width:520px}.chat-list{max-height:260px;overflow-y:auto;display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.chat-msg{display:flex;align-items:baseline;gap:8px}.chat-author{font-weight:700;color:var(--wood-dark);white-space:nowrap}.chat-mine .chat-author{color:var(--accent-dark)}.chat-body{overflow-wrap:anywhere}.chat-retracted{color:var(--ink-soft);font-style:italic}.chat-retract{min-height:24px;padding:0 8px;border-radius:6px;color:var(--ink-soft)}.chat-quick{display:flex;gap:6px;margin-bottom:8px}.chat-emoji{font-size:1.2rem;padding:6px 10px}.chat-form{display:flex;gap:8px}.chat-notice{margin:8px 0 0}.chat-ping{color:var(--accent-dark);font-weight:700}.review-list{list-style:none;padding:0;display:grid;gap:10px}.review-row{display:grid;gap:2px;border-bottom:1px solid var(--line);padding-bottom:8px}.review-meta{font-size:.85rem;color:var(--ink-soft)}.friends-panel{margin-bottom:20px}.friends-group{margin-bottom:12px}.friends-panel h4{margin:10px 0 6px;font-size:.95rem;color:var(--ink-soft)}.friend-list{list-style:none;margin:0 0 10px;padding:0;display:grid;gap:6px}.friend-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:8px 10px;border:1px solid var(--line);border-radius:10px}.friend-name{display:flex;align-items:center;gap:8px;font-weight:600}.friend-status{font-weight:400;font-size:.85rem;color:var(--ink-soft)}.friend-actions{display:flex;gap:6px}.presence{width:10px;height:10px;border-radius:50%;border:2px solid var(--ink-soft);flex:none}.presence-on{background:var(--go);border-color:var(--go);box-shadow:0 0 0 3px #3e7d4f2e}.friends-add{margin-top:8px}.friends-invite{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}.invite-result{margin-top:8px}.invite-link{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.invite-link code{background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:.85rem;overflow-wrap:anywhere}.records-page{max-width:760px}.records-card{margin-bottom:14px}.form-row{display:flex;gap:6px;margin:6px 0 10px}.form-pip{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;font-weight:700;color:#fff}.form-w{background:var(--go)}.form-l{background:var(--danger)}.records-table{border-collapse:collapse;width:100%}.records-table td{padding:6px 8px;border-bottom:1px solid var(--line)}.records-table td:last-child{text-align:right;font-weight:600}.histogram-pair{display:flex;gap:14px;flex-wrap:wrap}.histogram-pair .histogram{flex:1 1 280px;margin-top:0}@media(max-width:700px){main{padding:10px}.brand{font-size:1.3rem}.controls,.game-header{justify-content:center}}.watching-banner{margin-bottom:12px;border-color:var(--accent)}.watching-banner p{margin:0}.watcher-line{margin:0 0 10px;color:var(--ink-soft);font-size:.9rem}.settings-page{max-width:900px}.settings-page h2{margin:12px 0}.settings-page .settings-panel{margin-bottom:0}.game-stage{display:flex;gap:16px;align-items:flex-start}.game-board-col{flex:1 1 auto;min-width:0}.game-chat-col{flex:0 0 320px;max-width:320px;position:sticky;top:12px}.game-chat-col .chat-panel{margin-top:0;max-width:none}.game-chat-col .chat-list{max-height:420px}@media(max-width:900px){.game-stage{display:block}.game-chat-col{max-width:none;position:static;margin-top:12px}.game-chat-col .chat-list{max-height:260px}}
