@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(../media/41e95f694c5c4549-s.2b_sldcwg6mn_.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(../media/6c55a692938ebbbc-s.1emuuracu50qd.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(../media/a218039a3287bcfd-s.p.43zbiuwnnoiok.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(../media/bdc7e24a509eb931-s.0ynx40_3oa9rk.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(../media/0da9c7f357bd9d4d-s.1975l3y3401x_.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(../media/8e6fa89aa22d24ec-s.p.2o7m9ogm38dql.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(../media/0a7740363b4d4863-s.3ji57o093q1kd.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(../media/5f9d24ebef5d5292-s.19xuq3td7fwu_.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(../media/e2334d715941921e-s.p.3o_v2fun1jzxk.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(../media/b53057dbf91a7acf-s.11ypmpdlzqdb_.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(../media/798ea22d9983e047-s.3go-kn2r40gie.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(../media/47fe1b7cd6e6ed85-s.p.3bh2vc0w-r-ll.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins Fallback;src:local(Arial);ascent-override:93.62%;descent-override:31.21%;line-gap-override:8.92%;size-adjust:112.16%}.poppins_fa7ae995-module__PLyDCq__className{font-family:Poppins,Poppins Fallback;font-style:normal}.poppins_fa7ae995-module__PLyDCq__variable{--font-poppins:"Poppins", "Poppins Fallback"}
:root{--felt:#f5f3ea;--felt-text:#12301f;--felt-text-dim:#4f6155;--tile:#fbfaf4;--tile-deep:#e7f0e0;--ink:#12301f;--ink-dim:#4f6155;--accent:#1b6b47;--accent-deep:#0e4630;--red:#c0392b;--red-deep:#9c2f23;--line:#12301f24;--line-strong:#12301f47}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-poppins), "Noto Sans TC", "Microsoft JhengHei", system-ui, sans-serif;background:var(--felt);color:var(--felt-text);min-height:100vh}#root,main{min-height:100vh;padding:24px 16px 60px}.wrap{max-width:640px;margin:0 auto}.header{margin-bottom:22px}.title-banner{background:var(--accent-deep);width:100%;color:var(--tile);border-radius:2px;flex-direction:column;gap:2px;padding:10px 18px;display:flex}.title-banner .zh{letter-spacing:3px;font-size:22px;font-weight:700;line-height:1.2}.title-banner .en{letter-spacing:2px;text-transform:uppercase;color:#f5f3eabf;font-size:9px}.card{background:var(--tile);border:1px solid var(--line-strong);color:var(--ink);border-radius:2px;margin-bottom:18px;padding:20px}.card h2{text-transform:uppercase;letter-spacing:2px;color:var(--accent-deep);align-items:center;gap:8px;margin:0 0 14px;font-size:14px;display:flex}.card h2:before{content:"";background:var(--accent);width:14px;height:1px}input,select,button{font-family:inherit;font-size:16px}input[type=text],input[type=number]{background:var(--tile-deep);border:1px solid var(--line-strong);color:var(--ink);border-radius:2px;outline:none;width:100%;padding:10px 12px}input[type=text]:focus,input[type=number]:focus{border-color:var(--accent)}.btn{background:var(--accent-deep);color:var(--tile);border:1px solid var(--accent-deep);letter-spacing:.5px;cursor:pointer;border-radius:2px;padding:12px 18px;font-weight:700}.btn:hover{background:var(--accent);border-color:var(--accent)}.btn:active{transform:scale(.98)}.btn.secondary{background:var(--tile);border:1px solid var(--line-strong);color:var(--ink)}.btn.secondary:hover{border-color:var(--accent);color:var(--accent-deep);background:var(--tile-deep)}.btn.tertiary{border:1px solid var(--line);color:var(--ink-dim);background:0 0;padding:10px 18px;font-weight:600}.btn.tertiary:hover{border-color:var(--line-strong);color:var(--accent-deep);background:0 0}.btn.danger{background:var(--tile);border:1px solid var(--red);color:var(--red-deep)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.full{width:100%}.row{gap:10px;display:flex}.row>*{flex:1}.stack{flex-direction:column;gap:10px;display:flex}.btn,.seat-btn,.win-type-toggle .opt,.fan-stepper .fan-btn,.table-center{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;touch-action:manipulation}.player-tile{-webkit-tap-highlight-color:transparent}.join-options{flex-direction:column;gap:12px;display:flex}.table-layout{grid-template-columns:1fr 1.1fr 1fr;align-items:stretch;gap:10px;display:grid}.seat-top{grid-area:1/2}.seat-left{grid-area:2/1}.seat-right{grid-area:2/3}.seat-bottom{grid-area:3/2}.table-center{background:var(--accent-deep);min-height:104px;color:var(--tile);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:2px;flex-direction:column;grid-area:2/2;justify-content:center;align-items:center;gap:8px;display:flex}.table-center .wind{font-size:34px;font-weight:600;line-height:1}.table-center .round{letter-spacing:1.5px;text-transform:uppercase;color:#f5f3eab8;text-align:center;font-size:10px}.player-tile{background:var(--tile-deep);border:1px solid var(--line-strong);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:2px;flex-direction:column;justify-content:center;padding:12px;display:flex;position:relative;overflow:hidden}.player-tile.dragging{cursor:grabbing;outline:2px solid var(--accent);outline-offset:2px;opacity:.75}.player-tile.drop-target{border-color:var(--accent);background:var(--tile);border-width:2px}.player-tile.dealer{border-color:var(--accent-deep);border-width:2px}.player-tile .seat-head{justify-content:space-between;align-items:center;gap:6px;min-height:15px;margin-bottom:4px;display:flex}.player-tile .wind-badge{letter-spacing:.5px;text-transform:uppercase;color:var(--accent-deep);white-space:nowrap;font-size:10px;font-weight:600}.player-tile .dealer-mark{background:var(--accent-deep);color:var(--tile);letter-spacing:1px;text-align:center;padding:4px 0;font-size:10px;font-weight:600;position:absolute;top:0;left:0;right:0}.player-tile.dealer{padding-top:30px}.player-tile .name{color:var(--ink);margin-bottom:4px;font-size:15px;font-weight:700}.player-tile .points{font-variant-numeric:tabular-nums;font-size:24px;font-weight:700}.player-tile .points.pos{color:var(--accent)}.player-tile .points.neg{color:var(--red)}.seat-select{grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px;display:grid}.seat-btn{background:var(--tile-deep);border:1px solid var(--line-strong);color:var(--ink-dim);text-align:center;cursor:pointer;border-radius:2px;padding:10px 6px;font-size:13px}.seat-btn.active{border-color:var(--accent-deep);color:var(--accent-deep);background:var(--tile);border-width:2px}.seat-btn.disabled{opacity:.3;cursor:not-allowed}.fan-stepper{justify-content:center;align-items:center;gap:18px;margin:14px 0;display:flex}.fan-stepper .fan-btn{background:var(--tile-deep);border:1px solid var(--line-strong);width:44px;height:44px;color:var(--accent-deep);cursor:pointer;border-radius:2px;justify-content:center;align-items:center;font-size:20px;display:flex}.fan-stepper .fan-val{text-align:center;min-width:60px;color:var(--ink);font-size:36px;font-weight:700}.fan-stepper .fan-label{color:var(--ink-dim);text-transform:uppercase;letter-spacing:1px;text-align:center;margin-top:-8px;font-size:11px}.win-type-toggle{gap:8px;margin-bottom:14px;display:flex}.win-type-toggle .opt{text-align:center;border:1px solid var(--line-strong);color:var(--ink-dim);cursor:pointer;border-radius:2px;flex:1;padding:10px;font-size:14px}.win-type-toggle .opt.active{border-color:var(--accent-deep);color:var(--accent-deep);background:var(--tile);border-width:2px}.points-preview{text-align:center;background:var(--tile-deep);border:1px dashed var(--line-strong);border-radius:2px;margin-bottom:14px;padding:14px}.points-preview .label{color:var(--ink-dim);text-transform:uppercase;letter-spacing:1px;font-size:11px}.points-preview .value{color:var(--accent-deep);font-size:28px;font-weight:700}.points-preview .sub{color:var(--ink-dim);margin-top:2px;font-size:12px}.history-item{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:10px 0;font-size:13px;display:flex}.history-item:last-child{border-bottom:none}.history-item .meta{color:var(--ink-dim)}.history-item .pts{color:var(--accent-deep);font-weight:700}.empty-state{text-align:center;color:var(--ink-dim);padding:14px 0;font-size:13px}.modal-backdrop{z-index:50;background:#0e301f8c;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{width:100%;max-width:520px;margin:auto}.modal .card{margin-bottom:0}.share-status{color:var(--ink-dim);text-align:center;margin-bottom:12px;font-size:12px}.share-status.error-text{color:var(--red)}.qr-frame{background:var(--tile);border:1px solid var(--line-strong);border-radius:2px;justify-content:center;align-items:center;margin-bottom:14px;padding:12px;display:flex}.qr-frame img{width:100%;max-width:260px;height:auto;image-rendering:pixelated;display:block}.qr-placeholder{color:var(--ink-dim);padding:90px 0;font-size:12px}.share-code{text-align:center;letter-spacing:8px;color:var(--accent-deep);margin-bottom:4px;font-size:30px;font-weight:700}.share-url{text-align:center;color:var(--ink-dim);word-break:break-all;margin-bottom:14px;font-size:11px}.sync-note{background:var(--tile-deep);border:1px solid var(--accent);color:var(--accent-deep);text-align:center;border-radius:2px;margin-bottom:14px;padding:8px 10px;font-size:12px}.spectator-note{z-index:20;background:var(--accent-deep);color:var(--tile);text-align:center;letter-spacing:1px;text-transform:uppercase;padding:6px 0;font-size:11px;position:sticky;top:0}.rank-row{border-bottom:1px solid var(--line);grid-template-columns:26px 1fr auto 62px;align-items:center;gap:10px;padding:12px 0;display:grid}.rank-row:last-of-type{border-bottom:none}.rank-row .rank-pos{color:var(--ink-dim);text-align:center;font-size:14px;font-weight:700}.rank-row.winner .rank-pos{color:var(--tile);background:var(--accent-deep);border-radius:2px;padding:2px 0}.rank-row .rank-name{font-size:15px;font-weight:600}.rank-row .rank-points{font-variant-numeric:tabular-nums;font-size:20px;font-weight:700}.rank-row .rank-delta{text-align:right;font-variant-numeric:tabular-nums;font-size:12px;font-weight:600}.rank-row .rank-delta.pos{color:var(--accent)}.rank-row .rank-delta.neg{color:var(--red)}.rank-meta{color:var(--ink-dim);text-align:center;margin:14px 0 16px;font-size:11px}.error-text{color:var(--red);text-align:center;margin-top:8px;font-size:13px}.loading-text{text-align:center;color:var(--felt-text-dim);padding:40px 0}.footer-note{text-align:center;color:var(--felt-text-dim);letter-spacing:.5px;margin-top:20px;font-size:11px}
