@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500;600;700;800&display=swap');
:root{font-family:'Noto Sans JP',system-ui,sans-serif;color:#e6e9e1;background:#111b1a;font-synthesis:none}
*{box-sizing:border-box}
body{margin:0;min-height:100svh;background:radial-gradient(ellipse at 55% 15%,#20332e 0%,#121c1b 58%,#0b1414 100%)}
button{font:inherit;cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.44}
button:focus-visible{outline:3px solid #f8c85f;outline-offset:3px}
#app{min-height:100svh}
.shell{max-width:1470px;margin:auto;padding:16px 25px 32px}
.header{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:17px}
.brand{display:flex;align-items:baseline;gap:13px}
.brand h1{font-size:clamp(20px,2.3vw,29px);letter-spacing:.07em;margin:0;font-weight:800;color:#f7f3e8}
.brand small{font-size:11px;letter-spacing:.22em;color:#9caf9e}
.head-actions{display:flex;gap:8px}
.head-actions button,.quiet-button{padding:9px 13px;border-radius:7px;color:#d6e3d9;background:transparent;border:1px solid #4b665e;font-size:12px}
.head-actions button:hover,.quiet-button:hover{background:#234039}
.layout{display:grid;grid-template-columns:minmax(0,1fr) 318px;gap:18px;align-items:start}
.main{min-width:0}
.board-shell{border:1px solid #355149;background:#132925;border-radius:17px;padding:13px;box-shadow:0 21px 85px #0005,inset 0 1px #6b83734d}
.board{position:relative;min-height:535px;background:radial-gradient(ellipse at 50% 50%,#33634f 0%,#2b5644 44%,#244536 100%);border:8px solid #26443a;border-radius:11px;overflow:hidden;box-shadow:inset 0 0 0 2px #acc79f18,inset 0 2px 30px #0004}
.board:before{content:'';position:absolute;inset:16px;border:1px solid #e5e4c218;border-radius:9px;pointer-events:none}
.table-mark{position:absolute;inset:0;opacity:.04;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 4px,#e9f3c5 5px,transparent 6px)}
.opponent{position:absolute;display:flex;align-items:center;gap:9px;z-index:1;color:#f4f0d8}
.opponent.top{top:13px;left:50%;transform:translateX(-50%);flex-direction:column}
.opponent.left{left:13px;top:47%;transform:translateY(-50%);flex-direction:column}
.opponent.right{right:13px;top:47%;transform:translateY(-50%);flex-direction:column}
.opp-label{font-size:12px;white-space:nowrap;display:flex;align-items:center;gap:7px;background:#173a3099;padding:5px 9px;border-radius:6px}
.wind{font-size:11px;color:#ffe0a1;border:1px solid #9e9f785e;padding:0 5px;border-radius:3px}
.riichi-flag{font-size:10px;color:#ffd67a;border:1px solid #ffbf5290;border-radius:3px;padding:0 3px}
.tile-backs{display:flex;gap:2px}
.tile-backs.vertical{flex-direction:column}
.tile-back{background:#e1e3d4;border:2px solid #f4f5e8;border-radius:3px;width:18px;height:28px;box-shadow:2px 2px 0 #0b2a26,inset 0 0 0 3px #216558}
.tile-back:after{content:'';display:block;margin:5px auto;width:6px;height:9px;border:1px solid #90b8a6;transform:rotate(45deg)}
.tile-backs.vertical .tile-back{width:29px;height:17px}
.tile-backs.vertical .tile-back:after{margin:3px auto;height:5px}
.river{position:absolute;display:grid;grid-template-columns:repeat(6, minmax(0,1fr));gap:3px;justify-items:center;min-height:47px;min-width:164px}
.river.top{top:101px;left:50%;transform:translateX(-50%)}
.river.bottom{bottom:103px;left:50%;transform:translateX(-50%)}
.river.left{top:50%;left:13%;transform:translateY(-50%);grid-template-columns:repeat(4,26px)}
.river.right{top:50%;right:13%;transform:translateY(-50%);grid-template-columns:repeat(4,26px)}
.discard-tile{width:25px;height:35px;border-radius:3px;background:#f3f1df;border:1px solid #d5cdb8;color:#1d2927;display:flex;align-items:center;justify-content:center;flex-direction:column;line-height:1;box-shadow:0 2px 0 #abc5b0;font-weight:700;font-size:17px}
.discard-tile.called{opacity:.24;filter:grayscale(1)}
.discard-tile .sub{font-size:9px;margin-top:1px}
.discard-tile.m,.tile.m{color:#962c2e}
.discard-tile.s,.tile.s{color:#286d4f}
.discard-tile.p,.tile.p{color:#235a89}
.discard-tile.honor,.tile.honor{color:#293b38}
.discard-tile.red,.tile.red{color:#b43732}
.center-mark{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:184px;min-height:130px;background:#1a4034;border:1px solid #82a78a60;box-shadow:0 7px 20px #10291d7e,0 0 0 5px #1d423b88;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:7px;text-align:center;gap:7px;z-index:1;padding:15px 10px}
.center-mark .round{font-size:12px;color:#d4c28b;font-weight:700;letter-spacing:.1em}
.center-mark strong{font-size:26px;line-height:1.2;color:#fff6d6;font-weight:800}
.center-mark small{font-size:11px;color:#bad1c4}
.turn-pill{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#1d362a;background:#d5dcb4;border-radius:3px;padding:4px 9px;font-weight:700}
.turn-pill:before{content:'';width:6px;height:6px;background:#3f8361;border-radius:50%}
.player-zone{position:absolute;bottom:6px;left:9px;right:9px;z-index:3;display:flex;flex-direction:column;align-items:center;gap:5px}
.player-status{display:flex;align-items:center;gap:8px;justify-content:center;min-height:23px;font-size:12px;color:#f4f1df;background:#1b4339e0;padding:3px 10px;border-radius:5px}
.hand{display:flex;justify-content:center;align-items:flex-end;gap:3px;max-width:100%;min-height:72px;touch-action:manipulation;user-select:none;-webkit-user-select:none}
.tile{width:clamp(32px,4vw,51px);height:68px;background:linear-gradient(135deg,#fffef1 0%,#ede9d7 95%);border-radius:5px 5px 4px 4px;border:1px solid #f9f5e7;box-shadow:inset -3px -4px 0 #cac7b7,0 5px 0 #87ae9e,0 6px 5px #0e261f77;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#24322f;position:relative;transition:transform .12s,background .12s;touch-action:manipulation;-webkit-touch-callout:none;padding:0}
.tile .large{font-family:'Noto Serif CJK JP','Hiragino Mincho ProN',serif;line-height:1.07;font-size:clamp(20px,2.4vw,30px);font-weight:800}
.tile .small{font-size:10px;line-height:1.1;margin-top:3px;font-weight:800;color:#747c6e}
.tile .small.m{color:#962c2e}
.tile .small.s{color:#286d4f}
.tile .small.p{color:#235a89}
.tile.selected{transform:translateY(-14px);background:#fff9cf;box-shadow:inset -3px -4px 0 #d4c99a,0 5px 0 #b5ab7e,0 9px 10px #0e261fa6}
.tile.suggested:before{content:'';position:absolute;top:-11px;left:50%;transform:translateX(-50%);width:6px;height:6px;border-radius:50%;background:#ffe18a;box-shadow:0 0 6px #ffc855}
.tile.riichi-option:not(.selected){outline:2px solid #f4c563;outline-offset:-2px}
.tile:disabled{opacity:.7}
.tile-separator{width:8px}
.exposed{display:flex;gap:5px;align-items:center;margin-right:6px}
.exposed-set{display:flex;gap:1px;background:#e2e5d0a6;padding:3px;border-radius:5px}
.exposed-set .discard-tile{width:21px;height:29px}
.exposed-set .discard-tile .sub{font-size:7px}
.actionbar{min-height:77px;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 2px 0}
.action-explain{display:flex;flex-direction:column;gap:3px;min-width:0}
.action-explain strong{font-size:16px;color:#f1f1dd}
.action-explain small{font-size:12px;color:#99b4a7;line-height:1.55}
.buttons{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.action{border:1px solid #728a71;background:#284337;color:#f9f5e8;border-radius:8px;min-height:45px;padding:0 17px;font-weight:800;font-size:14px;white-space:nowrap}
.action.primary{background:#e0b65e;color:#222b26;border-color:#efc973}
.action.primary:hover:not(:disabled){background:#f5cd7b}
.action.secondary{color:#e6dfc8}
.action.danger{background:#7f453e}
.action:hover:not(:disabled){filter:brightness(1.15)}
.call-panel{margin-top:12px;border:1px solid #b8a16b;background:#282e23;border-radius:11px;padding:14px 18px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.call-panel strong{color:#f3d18f}
.call-panel p{margin:4px 0 0;font-size:12px;color:#bac8b9}
.call-buttons{display:flex;gap:7px;flex-wrap:wrap}
.sidebar{border:1px solid #384d44;background:#1a2925;border-radius:13px;overflow:hidden;box-shadow:0 10px 35px #08100e30}
.coach{padding:22px}
.coach-tag{color:#ddb973;font-size:11px;font-weight:800;letter-spacing:.17em}
.coach h2{font-size:20px;line-height:1.5;margin:10px 0;color:#f6f0d9}
.coach p{font-size:13px;line-height:1.9;color:#b8c7bd;margin:0 0 14px}
.coach .hint{background:#263e33;border-left:3px solid #d6b56f;padding:12px;margin-top:17px;border-radius:0 6px 6px 0;color:#ecedda;font-size:13px;line-height:1.75}
.stat-row{display:flex;align-items:baseline;justify-content:space-between;gap:6px;padding:11px 0;border-bottom:1px solid #42574b5e;font-size:12px;color:#a8c2ad}
.stat-row strong{font-size:16px;color:#f1eace}
.guide{border-top:1px solid #435a50;padding:18px 22px 20px}
.guide h3{margin:0 0 10px;font-size:14px;color:#eae3cd}
.guide ol{margin:0 0 12px;padding-left:20px;font-size:12px;line-height:2.1;color:#b3c8b6}
.guide b{color:#f2d59d}
.guide details{border-top:1px solid #42574d;padding:11px 0;font-size:12px;color:#b6c8bd;line-height:1.85}
.guide summary{cursor:pointer;font-weight:700;color:#dcebdc}
.guide details p{margin:8px 0 0}
.game-log{border-top:1px solid #354a41;padding:15px 22px 20px}
.game-log h3{margin:0 0 12px;font-size:13px;color:#e1e8d8}
.game-log ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.game-log li{font-size:11px;line-height:1.6;color:#9fb5a8}
.limit-note{margin:14px 0;color:#8fa79c;font-size:11px;line-height:1.7}
.end-overlay{position:fixed;inset:0;background:#071310bf;display:flex;justify-content:center;align-items:center;z-index:20;padding:17px}
.end-dialog{width:min(470px,100%);padding:28px;background:#1d3029;border:1px solid #aa9762;border-radius:15px;box-shadow:0 20px 70px #0009;text-align:center}
.end-dialog .ending{color:#e0b96b;letter-spacing:.14em;font-size:12px;font-weight:800}
.end-dialog h2{font-size:29px;line-height:1.4;color:#f9ebd3;margin:12px 0}
.end-dialog p{font-size:13px;color:#c4d2c4;line-height:1.85}
.end-yaku{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin:18px 0 21px}
.end-yaku span{background:#2e4a39;border:1px solid #5f805d;color:#f0edce;padding:6px 10px;border-radius:4px;font-size:12px}
.end-dialog .action{width:100%;margin-top:9px}
.footer{font-size:10px;color:#677e73;text-align:center;margin:18px 0 0}
@media(max-width:1020px){.layout{grid-template-columns:minmax(0,1fr)}.sidebar{display:grid;grid-template-columns:1fr 1fr}.coach{grid-row:span 2}.game-log{grid-column:2}.guide{border-top:0}.board{min-height:540px}}
@media(max-width:720px){.shell{padding:9px 8px 26px}.header{margin:3px 6px 11px}.brand{gap:6px}.brand small{font-size:9px;letter-spacing:.03em}.head-actions button{font-size:11px;padding:7px 9px}.layout{gap:11px}.board-shell{border-radius:9px;padding:5px}.board{border-width:5px;min-height:440px}.board:before{inset:8px}.opponent.top{top:7px}.opponent.left{left:3px}.opponent.right{right:3px}.opp-label{font-size:9px;padding:3px 5px}.opponent.left .opp-label,.opponent.right .opp-label{font-size:9px}.tile-back{width:11px;height:19px;border-width:1px;border-radius:2px}.tile-back:after{margin:4px auto;width:4px;height:7px}.tile-backs.vertical .tile-back{width:18px;height:10px}.tile-backs.vertical .tile-back:after{height:2px;margin:2px auto}.river{gap:2px;min-width:95px;min-height:29px}.river.top{top:71px}.river.bottom{bottom:91px}.river.left{left:10%;grid-template-columns:repeat(4,17px)}.river.right{right:10%;grid-template-columns:repeat(4,17px)}.discard-tile{width:17px;height:24px;font-size:12px;border-radius:2px}.discard-tile .sub{font-size:7px}.center-mark{width:128px;min-height:94px;gap:4px;padding:9px}.center-mark .round,.center-mark small{font-size:9px}.center-mark strong{font-size:21px}.turn-pill{font-size:9px}.player-zone{bottom:3px;left:2px;right:2px;gap:4px}.player-status{font-size:10px;min-height:20px;padding:2px 5px}.hand{gap:2px;min-height:60px}.tile{width:clamp(19px,5.7vw,38px);height:clamp(45px,12vw,58px);border-radius:3px;box-shadow:inset -2px -3px 0 #cac7b7,0 4px 0 #87ae9e,0 5px 3px #0e261f77}.tile .large{font-size:clamp(15px,5vw,24px)}.tile .small{font-size:8px;margin-top:2px}.tile-separator{width:3px}.exposed{gap:3px;margin-right:2px}.exposed-set{gap:0;padding:1px}.exposed-set .discard-tile{width:14px;height:21px;font-size:10px}.actionbar{min-height:71px;align-items:flex-start;padding:13px 5px 2px}.action-explain strong{font-size:13px}.action-explain small{font-size:10px}.buttons{gap:5px}.action{font-size:12px;min-height:42px;padding:0 11px}.call-panel{margin-top:8px;padding:10px}.call-panel strong{font-size:13px}.sidebar{display:block}.coach{padding:18px}.guide{padding:14px 18px;border-top:1px solid #435a50}.game-log{padding:15px 18px}.end-dialog{padding:22px}}
@media(max-width:380px){.brand small{display:none}.board{min-height:403px}.river.top{top:65px}.river.bottom{bottom:83px}.center-mark{width:118px;min-height:90px}.tile{width:clamp(18px,5.45vw,25px)}.tile .large{font-size:15px}.tile .small{font-size:7px}.hand{gap:1px}.opponent.left,.opponent.right{top:43%}.actionbar{flex-direction:column;gap:7px}.buttons{justify-content:flex-start}}
@media(prefers-reduced-motion:reduce){.tile{transition:none}}
