:root{--felt: #0f4a33;--felt-2: #0a3524;--wood: #5a3720;--gold: #d8b25a;--ivory: #f8f1de;--ink: #1d2a4d;--red: #b0242a;--text: #f4ecd8;--muted: #b9c7bd;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:#071e15;color:var(--text);font-family:Inter,system-ui,sans-serif;overflow:hidden}button{font:inherit;cursor:pointer}.zh{font-family:"Noto Serif TC",serif}.small{font-size:12px;color:var(--muted)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.app{height:100%;display:flex;flex-direction:column}.bar{padding-left:max(14px,env(safe-area-inset-left))!important;padding-right:max(14px,env(safe-area-inset-right))!important;display:flex;align-items:center;justify-content:space-between;padding:6px 14px;background:linear-gradient(#2a1a0f,#1c110a);border-bottom:2px solid #3d2716;box-shadow:0 2px 10px #0008;z-index:5}.brand{display:flex;align-items:baseline;gap:10px}.brand .zh{font-size:22px;font-weight:900;color:var(--gold);letter-spacing:2px}.brand .sub{font-family:Cormorant Garamond,serif;font-size:17px;color:#e8d7b0;letter-spacing:.5px}.bar nav{display:flex;gap:6px}.bar nav button{background:transparent;color:#ead9b3;border:1px solid #6b4a2c;border-radius:999px;padding:4px 12px;font-size:13px}.bar nav button:hover{background:#3a2515}.table{--pt: calc(var(--t) * .7);position:relative;flex:1;min-height:0;display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto 1fr auto;grid-template-areas:".    opp2 .   " "opp3 mid  opp1" "me   me   me  ";gap:4px 8px;padding:8px 12px 6px;border:10px solid var(--wood);border-image:linear-gradient(135deg,#7a4d2b,#4a2c17 40%,#6d4325 70%,#3c2312) 1}.felt{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background:radial-gradient(ellipse at 50% 45%,#17694a 0%,var(--felt) 45%,var(--felt-2) 100%),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence baseFrequency='.9' numOctaves='2'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .06 0'/></filter><rect width='120' height='120' filter='url(%23n)'/></svg>");background-blend-mode:overlay}svg.tile{display:block;filter:drop-shadow(0 1.5px 1.5px #0007)}svg.tile.dim{opacity:.45}.center{grid-area:mid;display:grid;place-items:center}.compass{min-width:150px;padding:12px 18px;border-radius:14px;text-align:center;background:radial-gradient(circle at 50% 30%,#0d3a28,#082a1c);border:1px solid #2e6e52;box-shadow:inset 0 0 18px #0009,0 2px 8px #0006}.compass .round{display:flex;flex-direction:column}.compass .round .zh{font-size:26px;font-weight:900;color:var(--gold)}.compass .wall{margin-top:6px;display:flex;flex-direction:column}.compass .wall .num{font-family:Cormorant Garamond,serif;font-size:30px;line-height:1;color:var(--ivory)}.compass .streak{margin-top:6px;font-family:"Noto Serif TC",serif;color:#ffcf7a;font-weight:700}.plate{display:inline-flex;align-items:center;gap:6px;padding:3px 10px 3px 4px;border-radius:999px;background:#0008;border:1px solid #ffffff1c;font-size:13px;white-space:nowrap}.plate.active{border-color:var(--gold);box-shadow:0 0 0 2px #d8b25a44,0 0 14px #d8b25a55}.plate .wind{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--ivory);color:var(--ink);font-family:"Noto Serif TC",serif;font-weight:900}.plate .dealer{background:var(--red);color:#fff;border-radius:4px;padding:0 4px;font-family:"Noto Serif TC",serif;font-weight:900;font-size:12px}.plate .score{font-variant-numeric:tabular-nums;color:var(--muted)}.plate .score.pos{color:#9be3b4}.plate .score.neg{color:#f2a3a3}.opp{display:flex;gap:6px;align-items:center}.opp.pos2{grid-area:opp2;flex-direction:column}.opp.pos1{grid-area:opp1;flex-direction:column;justify-content:center}.opp.pos3{grid-area:opp3;flex-direction:column;justify-content:center}.opp-hand{display:flex}.opp.pos1 .opp-hand,.opp.pos3 .opp-hand{flex-direction:column}.opp.pos1 .opp-hand>svg+svg,.opp.pos3 .opp-hand>svg+svg{margin-top:calc(var(--t) * -.42)}.opp.pos2 .opp-hand>svg+svg{margin-left:1px}.melds{display:flex;flex-wrap:wrap;gap:6px}.opp.pos1 .melds,.opp.pos3 .melds{flex-direction:column}.meld{display:inline-flex;gap:1px;padding:2px;border-radius:6px;background:#00000026}.meld.flowers{background:#d8b25a22;box-shadow:inset 0 0 0 1px #d8b25a44}.opp.pos1 .meld.flowers,.opp.pos3 .meld.flowers{flex-wrap:wrap;max-width:var(--fw)}.pool{grid-area:mid;position:relative;min-height:0;min-width:0;margin:4px 6px;border-radius:22px;background:radial-gradient(ellipse at 50% 50%,#ffffff0a,#00000012 70%);box-shadow:inset 0 0 40px #0003}.pooltile{position:absolute}.center{grid-area:mid;z-index:2;pointer-events:none}.spotlight{position:absolute;z-index:15;left:50%;top:33%;translate:-50% -50%;display:flex;flex-direction:column;align-items:center;gap:6px;pointer-events:none;filter:drop-shadow(0 10px 18px #000a)}.spotlight .who{font-family:Cormorant Garamond,serif;font-size:18px;color:#fff3d6;background:#0009;padding:1px 12px;border-radius:999px}.toast{position:absolute;z-index:16;display:flex;align-items:center;gap:8px;padding:6px 12px 6px 6px;border-radius:14px;background:#2b1a0ee6;border:1px solid var(--gold);color:#fff3d6;font-size:14px;pointer-events:none}.toast .zh{font-weight:900;color:#ffe4a3;font-size:18px}.toast.pos0{left:50%;bottom:26%;translate:-50% 0}.toast.pos1{right:9%;top:30%}.toast.pos2{left:50%;top:12%;translate:-50% 0}.toast.pos3{left:9%;top:30%}table.scores caption{caption-side:top;text-align:left;font-size:13px;color:#6c5838;padding-bottom:4px;font-family:"Noto Serif TC",serif}table.tai tr.base td{border-top:1px solid #c9b385}.me{grid-area:me;display:flex;flex-direction:column;align-items:center;gap:4px}.me-top{display:flex;gap:12px;align-items:center;flex-wrap:wrap;justify-content:center}.myhand{display:flex;align-items:flex-end;gap:2px;padding:6px 10px 4px;border-radius:12px;background:linear-gradient(#0000,#0004)}.myhand.live{box-shadow:0 -2px #d8b25a55 inset}.ht{background:none;border:0;padding:0}.ht:disabled{cursor:default}.ht.drawn{margin-left:calc(var(--t) * .35)}.ht.sel{transform:translateY(-12px)}.ht.sel svg{filter:drop-shadow(0 0 8px #ffd76a) drop-shadow(0 2px 2px #0008)}.hint{min-height:18px;font-size:13px;color:var(--muted);font-style:italic;font-family:Cormorant Garamond,serif;font-size:16px}.burst{position:absolute;z-index:20;pointer-events:none;display:flex;flex-direction:column;align-items:center;padding:8px 22px;border-radius:18px;background:radial-gradient(circle,#2a0d0dcc,#2a0d0d00 70%)}.burst .zh{font-size:calc(var(--t) * 1.8);font-weight:900;color:#ffe4a3;text-shadow:0 0 12px #ff9d3b,0 3px 0 #7a1414,0 0 30px #b0242a;line-height:1}.burst .py{font-family:Cormorant Garamond,serif;font-size:calc(var(--t) * .55);color:#fff3d6;letter-spacing:1px}.burst.pos0{left:50%;bottom:30%;translate:-50% 0}.burst.pos1{right:14%;top:40%}.burst.pos2{left:50%;top:14%;translate:-50% 0}.burst.pos3{left:14%;top:40%}.modal-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:grid;place-items:center;background:#0009;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);padding:12px}.modal-scrim.soft{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;place-items:end center;pointer-events:none;padding-bottom:calc(var(--t, 48px) * 2.2)}.callbox{pointer-events:auto;background:linear-gradient(#2b1a0e,#1c1109);border:1px solid var(--gold);border-radius:16px;padding:10px 12px 12px;box-shadow:0 10px 30px #000a;max-width:96vw}.callhead{font-size:14px;color:#ead9b3;margin-bottom:8px;display:flex;align-items:center;gap:12px;justify-content:space-between}.timer{width:120px;height:5px;background:#fff2;border-radius:3px;overflow:hidden}.timer>div{height:100%;background:linear-gradient(90deg,#ffd76a,#d8b25a);transition:width .1s linear}.callopts{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}.callbtn{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:12px;border:1px solid #ffffff2a;background:linear-gradient(#3b2414,#26170c);color:var(--text)}.callbtn:hover{border-color:var(--gold);background:linear-gradient(#4a2e19,#2f1c0e)}.callbtn .cw{display:flex;flex-direction:column;align-items:center;min-width:40px}.callbtn .cw .zh{font-size:26px;font-weight:900;color:#ffe4a3;line-height:1.05}.callbtn .cw .py{font-family:Cormorant Garamond,serif;font-size:14px}.callbtn.c-hu .cw .zh,.callbtn.c-zimo .cw .zh{color:#ffb3a1}.callbtn .ctiles{display:flex;gap:1px}.callbtn.pass .cw .zh{color:var(--muted)}.result{width:min(720px,96vw);max-height:92vh;overflow:auto;background:linear-gradient(#fbf5e6,#efe3c4);color:#2b2216;border-radius:16px;padding:18px 20px;box-shadow:0 20px 50px #000b;border:1px solid #c9b385}.result h2{margin:0 0 8px;font-family:Cormorant Garamond,serif;font-weight:600;font-size:24px}.result h2 .zh{font-size:30px;font-weight:900;color:var(--red);margin-right:6px}.tabs{display:flex;gap:6px;margin:6px 0 10px}.tabs button{border:1px solid #c9b385;background:transparent;border-radius:999px;padding:3px 12px;color:#5a4526}.tabs button.on{background:#2b2216;color:#fbf5e6}.winhand{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end;margin-bottom:10px}.winhand .meld{background:#0000000f}.winhand .wintile{outline:2px solid var(--red);outline-offset:1px}table.tai{width:100%;border-collapse:collapse;font-size:14px}table.tai td{padding:4px 6px;border-bottom:1px solid #d9c9a2}table.tai .zh{font-weight:900;font-size:16px;white-space:nowrap}table.tai .py{font-style:italic;color:#6c5838;white-space:nowrap}table.tai .n{text-align:right;white-space:nowrap;font-weight:600}table.tai tr.sum td{border-bottom:0;font-weight:700}table.scores{width:100%;border-collapse:collapse;font-size:13px;margin:8px 0;font-variant-numeric:tabular-nums}table.scores th,table.scores td{padding:3px 6px;text-align:right;border-bottom:1px solid #d9c9a2}table.scores th:first-child,table.scores td:first-child{text-align:left}.pos{color:#1d7a45}.neg{color:#a5262b}.pay{display:flex;gap:14px;flex-wrap:wrap;margin:10px 0;font-size:14px}.primary{display:block;margin:6px auto 0;padding:10px 26px;border-radius:999px;border:0;background:linear-gradient(#b0242a,#7f171c);color:#fff6e6;font-weight:600;letter-spacing:.5px;box-shadow:0 3px #4f0d10}.standings{font-size:18px}.rules,.settings{position:relative;width:min(820px,96vw);max-height:92vh;overflow:auto;background:linear-gradient(#fbf5e6,#efe3c4);color:#2b2216;border-radius:16px;padding:20px 24px;box-shadow:0 20px 50px #000b}.rules h1{font-family:Cormorant Garamond,serif;font-weight:600;margin-top:0}.rules h1 .zh{color:var(--red);margin-right:8px}.rules h2{font-family:Cormorant Garamond,serif;font-weight:600;font-size:22px;margin:18px 0 6px;border-bottom:1px solid #d9c9a2}.rules h2 .zh{color:var(--red);font-size:18px;margin-left:6px}.rules .small{color:#6c5838}.rtiles{display:flex;gap:3px;flex-wrap:wrap;margin-bottom:8px}.close{position:absolute;top:8px;right:12px;border:0;background:transparent;font-size:28px;color:#6c5838}.settings label{display:flex;align-items:center;gap:8px;margin:6px 0;flex-wrap:wrap}.settings fieldset{border:1px solid #d9c9a2;border-radius:10px;margin:10px 0}.settings .small{color:#6c5838}.settings input,.settings select{font:inherit;padding:3px 6px;border-radius:6px;border:1px solid #c9b385;background:#fffaf0;color:#2b2216}.voice{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:4px 6px;border-radius:8px;flex-wrap:wrap}.voice.on{background:#2b221612}.audition{display:flex;gap:4px}.audition button{font-family:"Noto Serif TC",serif;font-weight:900;border:1px solid #c9b385;background:#fffaf0;border-radius:6px;width:34px;height:30px;color:var(--red)}@media (max-height: 520px){.bar{padding:3px 10px}.brand .sub{display:none}.table{border-width:6px;padding:4px 8px 2px;gap:2px 6px}.compass{padding:6px 10px;min-width:110px}.compass .round .zh{font-size:18px}.compass .wall .num{font-size:22px}.hint{display:none}.plate{font-size:11px}}.table.compact{gap:2px 6px;padding:4px 8px 2px}.table.compact .compass{padding:4px 10px;min-width:96px;border-radius:10px}.table.compact .compass .small{display:none}.table.compact .compass .round .zh{font-size:16px}.table.compact .compass .wall{margin-top:2px}.table.compact .compass .wall .num{font-size:18px}.table.compact .me{flex-direction:row;align-items:flex-end;justify-content:center;gap:8px}.table.compact .me-top{flex-direction:column;align-items:flex-start;gap:3px}.table.compact .hint{display:none}.table.compact .myhand{padding:2px 4px}.table.compact .opp.pos2{flex-direction:row}.table.compact .plate{padding:2px 8px 2px 3px;font-size:11px}.table.compact .plate .wind{width:20px;height:20px;font-size:12px}.opp-stack{display:flex;align-items:center;gap:4px;font-family:Cormorant Garamond,serif;font-size:16px;color:var(--ivory)}.modal-scrim.soft{padding-bottom:calc(var(--t, 48px) * 1.9)}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}.lobbybox{width:min(560px,96vw)}.lobbybox h2 .zh{color:var(--red);margin-right:8px}.invite{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:#2b221610;border-radius:10px;padding:8px 10px;margin:8px 0}.invite code{font-size:12px;word-break:break-all;flex:1;min-width:180px}.invite button,.seats button{border:1px solid #c9b385;background:#fffaf0;border-radius:999px;padding:3px 12px;color:#2b2216}.seats{list-style:none;padding:0;margin:8px 0}.seats li{display:flex;align-items:center;gap:10px;padding:8px 6px;border-bottom:1px solid #d9c9a2}.seats li.mine{background:#d8b25a22;border-radius:8px}.seats .wind{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#2b2216;color:#fbf5e6;font-weight:900}.seats .sname{flex:1}.seats .dot{width:9px;height:9px;border-radius:50%;background:#c9b385}.seats .dot.on{background:#2e9b5e}.err{color:#a5262b;font-weight:600}.linkbtn{background:none;border:0;color:#6c5838;text-decoration:underline;padding:0}.table{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right));padding-bottom:max(6px,env(safe-area-inset-bottom))}.ht{touch-action:manipulation;-webkit-tap-highlight-color:transparent;min-width:28px}.callbtn{min-height:48px;touch-action:manipulation}.rotate{display:none}@media (orientation: portrait) and (max-width: 600px){.rotate{display:flex;position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:radial-gradient(ellipse at 50% 40%,#17694a,#0a3524);color:var(--ivory);text-align:center;padding:24px}.rotate-phone{width:92px;height:160px;border:3px solid #e8d7b0;border-radius:16px;display:grid;place-items:center;animation:tilt 2.6s ease-in-out infinite}.rotate-tiles{display:flex;gap:2px;transform:rotate(90deg)}.rotate-zh{font-size:40px;font-weight:900;color:var(--gold);letter-spacing:6px}.rotate-en{font-family:Cormorant Garamond,serif;font-size:20px}}@keyframes tilt{0%,30%{transform:rotate(0)}60%,to{transform:rotate(-90deg)}}@media (max-height: 430px){.modal-scrim.soft{padding-bottom:calc(var(--t, 40px) * 1.7)}.callbox{padding:6px 8px 8px}.callhead{margin-bottom:4px;font-size:12px}.callbtn .cw .zh{font-size:22px}}.tablebar{position:absolute;z-index:6;left:14px;top:10px;display:flex;gap:8px;flex-wrap:wrap;pointer-events:none}.tablebar>span{display:inline-flex;align-items:center;gap:6px;padding:3px 12px 3px 6px;border-radius:999px;background:#000a;border:1px solid #d8b25a55;color:#f4ead2;font-size:13px}.tablebar .tb-round{padding-left:10px}.tablebar .zh{font-family:"Noto Serif TC",serif;font-weight:900;color:var(--gold);font-size:15px}.zbadge{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:5px;background:var(--red);color:#fff;font-family:"Noto Serif TC",serif;font-weight:900;font-size:13px;box-shadow:0 0 0 1.5px #ffd98a}.lian{margin-left:5px;padding:0 6px;border-radius:999px;background:#ffcf7a;color:#3a2400;font-family:"Noto Serif TC",serif;font-weight:900;font-size:12px;line-height:18px}.compass .dealerline{margin-top:6px;display:flex;align-items:center;justify-content:center;gap:6px;color:#f4ead2;font-size:13px}.plate.is-dealer{border-color:#e0574d;box-shadow:0 0 0 2px #c0262d66}.plate.is-dealer.active{border-color:var(--gold);box-shadow:0 0 0 2px #c0262d88,0 0 14px #d8b25a55}.plate .dealer{display:inline-flex;align-items:center;font-size:13px;padding:1px 5px;box-shadow:0 0 0 1.5px #ffd98a}.plate .dealer .lian{font-size:11px;line-height:16px}.diceprompt{position:absolute;z-index:30;left:50%;top:50%;translate:-50% -50%;display:flex;flex-direction:column;align-items:center;gap:8px}.throwbtn{font:inherit;font-size:20px;padding:14px 28px;border-radius:999px;border:2px solid #ffd98a;background:linear-gradient(#c0262d,#8f1a20);color:#fff;cursor:pointer;box-shadow:0 8px 24px #0008;min-height:48px}.throwbtn .zh{font-family:"Noto Serif TC",serif;font-weight:900;margin-right:6px}.waitdice{padding:8px 18px;border-radius:999px;background:#000a;color:#f4ead2}.waitdice .zh{font-family:"Noto Serif TC",serif;font-weight:900;color:var(--gold);margin-right:4px}.diceprompt .small{color:#f4ead2cc}.dicewrap{position:absolute;z-index:28;left:50%;top:46%;translate:-50% -50%;display:flex;flex-direction:column;align-items:center;gap:10px;pointer-events:none}.dicewrap .dice{position:relative;width:1px;height:1px}.dicewrap:before{content:"";position:absolute;left:50%;top:0;translate:-50% -40%;width:300px;height:170px;border-radius:50%;background:radial-gradient(#0d2e20aa,#0d2e2000 70%);z-index:-1}.dicewrap .dieslot{position:absolute;left:0;top:0;translate:-50% -50%;filter:drop-shadow(0 6px 6px #0007)}.dicewrap .dicesum{margin-top:56px;padding:4px 16px;border-radius:999px;background:#000b;color:#fff3d6;white-space:nowrap}.dicewrap .dicesum b{font-family:Cormorant Garamond,serif;font-size:26px;color:#ffcf7a}.dicewrap .dicesum .zh{font-family:"Noto Serif TC",serif;font-weight:900}.lian-banner{position:absolute;z-index:29;left:50%;top:22%;translate:-50% 0;padding:8px 22px;border-radius:14px;background:linear-gradient(#c0262d,#8f1a20);border:2px solid #ffd98a;color:#fff;font-size:18px;white-space:nowrap;box-shadow:0 10px 30px #0009;pointer-events:none}.lian-banner .zh{font-family:"Noto Serif TC",serif;font-weight:900;font-size:26px;color:#ffe4a3;margin-right:6px}.lian-banner .small{font-size:14px;color:#ffe9c4}.table.compact .tablebar{left:auto;right:8px;top:6px}.table.compact .tablebar>span{font-size:11px}.table.compact .throwbtn{font-size:17px;padding:10px 22px}
