:root{--cream: #fbf3e4;--card: #fffaf1;--ink: #241a1c;--muted: #7a6a62;--line: #eadcc6;--red: #a20000;--red-deep: #660000;--red-soft: #fce2dd;--green: #0e6b47;--green-deep: #08502f;--green-soft: #dcf0e5;--gold: #e3a21a;--gold-soft: #fdf0cf;--tile: #fffaf0;--tile-edge: #0e6b47;--radius: 20px;--display: "Titan One", "Noto Sans TC", "Nunito", system-ui, sans-serif;--sans: "Nunito", "Noto Sans TC", system-ui, -apple-system, "Segoe UI", "PingFang TC", "Microsoft JhengHei", sans-serif;--pop: cubic-bezier(.34, 1.56, .64, 1);color-scheme:light}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;color:var(--ink);font-family:var(--sans);font-size:15.5px;font-weight:700;line-height:1.45;-webkit-tap-highlight-color:transparent;background-color:var(--cream);background-image:radial-gradient(circle at 20px 20px,rgba(14,107,71,.07) 5px,transparent 6px),radial-gradient(circle at 60px 60px,rgba(162,0,0,.06) 5px,transparent 6px);background-size:80px 80px}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:default}h2,h3{margin:0}.app{max-width:560px;margin:0 auto;min-height:100dvh;padding-bottom:calc(92px + env(safe-area-inset-bottom))}main{padding:0 12px;display:flex;flex-direction:column;gap:14px}.topbar{position:relative;z-index:10;display:flex;flex-direction:column;gap:10px;padding:calc(10px + env(safe-area-inset-top)) 12px 12px;background:radial-gradient(ellipse at 30% 0%,rgba(255,255,255,.12),transparent 60%),var(--green);border-radius:0 0 22px 22px;box-shadow:0 6px 0 var(--green-deep),0 12px 24px #08502f40;margin-bottom:16px}.topbar-row{display:flex;align-items:center;gap:8px}.brand{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.seal{display:grid;place-items:center;flex:none;width:36px;height:36px;border-radius:10px;background:var(--red);color:var(--cream);font-family:"Noto Serif SC",serif;font-weight:900;font-size:21px;box-shadow:0 3px 0 var(--red-deep),inset 0 0 0 2px #fff3;transform:rotate(-6deg);animation:wobble 3.5s ease-in-out infinite}@keyframes wobble{0%,86%,to{transform:rotate(-6deg)}90%{transform:rotate(8deg) scale(1.08)}94%{transform:rotate(-10deg)}}.wordmark{font-family:var(--display);font-size:27px;color:var(--cream);letter-spacing:.5px;text-shadow:0 3px 0 var(--green-deep)}.rules-btn{flex:none;width:36px;height:36px;border-radius:50%;border:0;background:var(--gold);color:var(--ink);font-family:var(--display);font-size:18px;box-shadow:0 3px #a87510;transition:transform .12s var(--pop)}.rules-btn:active{transform:translateY(3px);box-shadow:none}.segmented{display:flex;gap:4px;padding:5px;background:#f1e5d1;border-radius:16px;box-shadow:inset 0 2px #0000000f}.segmented button{flex:1;min-width:0;border:0;background:transparent;padding:8px 6px;border-radius:10px;font-size:14px;font-weight:900;color:var(--muted);white-space:nowrap;min-height:42px;transition:background .2s,color .2s}.segmented button.on{background:var(--card);color:var(--ink);box-shadow:0 3px #d6c3a3;animation:tab-pop .4s var(--pop)}@keyframes tab-pop{0%{transform:scale(.85)}to{transform:scale(1)}}.mode-btn{display:flex;align-items:center;gap:8px;width:100%;min-height:44px;padding:8px 14px;border:0;border-radius:14px;text-align:left;background:#0000002e;color:var(--cream)}.mode-btn-label{font-size:12.5px;opacity:.75;flex:none}.mode-btn-value{flex:1;min-width:0;font-weight:900;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mode-btn-go{flex:none;font-size:20px;line-height:1;font-weight:900}.lang-toggle{flex:none;display:flex;padding:3px;gap:2px;border:0;border-radius:999px;background:#00000038;box-shadow:inset 0 2px #0000001f}.lang-toggle span{min-width:34px;height:30px;padding:0 8px;border-radius:999px;display:grid;place-items:center;font-weight:900;font-size:13px;color:#fbf3e4bf;transition:background .25s var(--pop),color .2s}.lang-toggle span:last-child{font-size:15px}.lang-toggle span.on{background:var(--cream);color:var(--red);box-shadow:0 2px #00000040;animation:tab-pop .4s var(--pop)}.card{background:var(--card);border:3px solid var(--line);border-radius:var(--radius);padding:16px 14px;box-shadow:0 7px 0 var(--line);animation:card-in .4s var(--pop) both}main>.card:nth-child(2){animation-delay:.05s}main>.card:nth-child(3){animation-delay:.1s}@keyframes card-in{0%{opacity:0;transform:translateY(14px) scale(.98)}}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.card-head h2{font-family:var(--display);font-weight:400;font-size:24px;letter-spacing:.3px;color:var(--red)}.alt{font-family:var(--sans);font-weight:800;color:var(--muted);font-size:.72em;margin-left:5px;letter-spacing:0;text-transform:none}.on .alt,.verdict .alt{color:inherit;opacity:.7}.count{font-family:var(--display);font-size:20px;color:var(--muted);background:#f1e5d1;padding:2px 12px;border-radius:999px;transition:background .2s,color .2s}.count small{font-size:.65em;opacity:.7}.count-full{background:var(--green);color:var(--cream);animation:pop .45s var(--pop)}@keyframes pop{0%{transform:scale(.7)}to{transform:scale(1)}}.hint{color:var(--muted);margin:4px 0 0}.hint.warn{color:var(--red);font-weight:800;margin-top:10px}.tile{--w: 34px;position:relative;display:inline-block;width:var(--w);aspect-ratio:3 / 4;background:linear-gradient(180deg,#fffdf6,var(--tile) 60%,#f6ecd8);border:1.5px solid #d4c3a3;border-bottom:6px solid var(--tile-edge);border-radius:8px;box-shadow:0 3px #08502f40,0 4px 6px #3c1e0a26;-webkit-user-select:none;user-select:none;overflow:hidden}.tile svg{display:block;width:100%;height:100%;padding:6% 7% 4%}.tile-sm{--w: 28px;border-radius:6px;border-bottom-width:5px}.tile-sm svg{padding:4% 5% 2%}.tile-off{opacity:.5;filter:saturate(.4)}.tile-win{border-color:var(--gold);border-bottom-color:var(--red);box-shadow:0 0 0 3px var(--gold-soft),0 2px 3px #3c1e0a2e}.tile-btn{position:relative;border:0;background:none;padding:0;border-radius:8px;transition:transform .18s var(--pop)}.tile-btn:active:not(:disabled){transform:translateY(2px) scale(.92)}.tile-btn:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.tile-btn .tile{transition:transform .2s var(--pop),box-shadow .2s}.tile-btn.on .tile{border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-soft)}.tile-btn.dragging .tile{opacity:.25}.tile-btn:disabled .tile{opacity:.28;box-shadow:none;filter:grayscale(.6)}.hand-grid .tile-btn,.meld{animation:drop .35s var(--pop) both}@keyframes drop{0%{opacity:0;transform:translateY(-16px) scale(.6) rotate(-8deg)}}.tag-inline{display:inline-flex;align-items:center;font-size:11px;font-weight:900;letter-spacing:.04em;text-transform:uppercase;padding:1px 7px;border-radius:999px;color:#fff;vertical-align:1px}.tag-revealed{background:var(--red)}.tag-concealed{background:var(--green)}.hand-card{transition:border-color .15s,box-shadow .15s,background .15s}.hand-card.drop-ready{border-color:var(--green);box-shadow:0 7px #b9dfca}.hand-card.drop-over{background:var(--green-soft)}.hand-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}.hand-grid .tile-btn{display:block;min-width:0;touch-action:none;-webkit-touch-callout:none}.hand-grid .tile{display:block;width:100%}.slot{aspect-ratio:3 / 4;border-radius:8px;border:2px dashed var(--line);background:#f1e5d166}.hand-hint{margin:10px 0 0;font-size:13px;color:var(--muted)}.read-sets{display:flex;flex-wrap:wrap;gap:10px 14px}.meld{display:flex;flex-direction:column;gap:4px}.meld-tiles{display:flex;gap:1px}.meld-label{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:800;color:var(--muted)}.suit-tabs button{flex:1 1 auto;padding:6px 4px;font-size:13px;min-height:40px}.suit-tabs .alt{margin-left:3px}.rail{display:flex;gap:22px;margin:12px -14px -4px;padding:10px 14px 12px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scroll-padding-left:14px;scrollbar-width:none;touch-action:pan-x}.rail::-webkit-scrollbar{display:none}.rail-section{display:flex;gap:8px;flex:none;scroll-snap-align:start}.rail .tile-btn{flex:none;touch-action:pan-x;-webkit-touch-callout:none}.rail .tile,.drag-ghost .tile{--w: 66px;display:block;border-radius:11px;border-bottom-width:8px}.rail .tile-btn:not(:disabled):hover .tile{transform:translateY(-3px)}.drag-ghost{position:fixed;z-index:50;pointer-events:none;transform:translate(-50%,-75%) rotate(-4deg) scale(1.08);filter:drop-shadow(0 10px 12px rgba(60,30,10,.35));transition:transform .15s var(--pop)}.drag-ghost.leaving{transform:translate(-50%,-75%) rotate(8deg) scale(.7)}.drop-bin{position:fixed;left:0;right:0;bottom:0;z-index:30;max-width:560px;min-height:112px;margin:0 auto;padding:16px 12px calc(16px + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;gap:10px;border-radius:24px 24px 0 0;border:3px dashed var(--red);border-bottom:0;background:var(--red-soft);color:var(--red);font-weight:900;font-size:17px;animation:rise .25s var(--pop);transition:background .15s,color .15s}.drop-bin.over{background:var(--red);color:#fff;border-style:solid}.drop-bin-icon{font-family:var(--display);font-size:30px;line-height:1}.badge{position:absolute;top:-6px;right:-3px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:var(--red);color:#fff;font-size:11px;font-weight:900;display:grid;place-items:center;pointer-events:none;box-shadow:0 0 0 2px var(--card);animation:pop .35s var(--pop)}.field{margin-top:14px}.field:first-of-type{margin-top:0}.field-label{font-size:13.5px;font-weight:800;margin-bottom:6px}.segmented.winds .zh{font-family:"Noto Serif SC",serif;font-weight:900}.segmented.winds .small{font-size:11px;font-weight:700;color:var(--muted)}.toggles{margin-top:6px}.toggle{position:relative;display:flex;align-items:center;gap:12px;padding:12px 0;border-top:2px dotted var(--line);cursor:pointer}.toggle-text{flex:1;display:flex;flex-direction:column;gap:2px}.toggle-title{font-weight:800;font-size:14.5px}.toggle-hint{font-size:12.5px;color:var(--muted);font-weight:700}.toggle input{position:absolute;opacity:0;pointer-events:none}.switch{flex:none;width:52px;height:30px;border-radius:15px;background:#e3d6c1;position:relative;transition:background .2s;box-shadow:inset 0 2px #00000014}.switch:after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 2px #0003;transition:transform .35s var(--pop)}.toggle input:checked+.switch{background:var(--green)}.toggle input:checked+.switch:after{transform:translate(22px)}.toggle input:checked+.switch{animation:tab-pop .35s var(--pop)}.toggle input:focus-visible+.switch{outline:3px solid var(--gold);outline-offset:2px}.table-rules{margin-top:8px;border-top:2px dotted var(--line);padding-top:10px}.table-rules .field{margin:10px 0 12px}.rules-link{display:flex;align-items:center;gap:12px;text-align:left;border:0;border-radius:var(--radius);padding:14px 16px;background:var(--green);color:var(--cream);box-shadow:0 4px 0 var(--green-deep);font-size:13.5px;font-weight:600;transition:transform .15s var(--pop)}.rules-link b{font-weight:900;font-size:15px}.rules-link:active{transform:translateY(4px);box-shadow:none}.rules-link-icon{flex:none;display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:var(--gold);color:var(--ink);font-family:var(--display);font-size:22px;transform:rotate(-6deg)}.link-btn{border:0;background:none;padding:4px;min-height:36px;align-self:center;color:var(--green);font-size:13.5px;font-weight:800;text-decoration:underline}.footnote{font-size:12px;color:var(--muted);text-align:center;margin:2px 8px 8px}.actionbar{position:fixed;left:0;right:0;bottom:0;z-index:20;display:flex;gap:10px;max-width:560px;margin:0 auto;padding:10px 12px calc(12px + env(safe-area-inset-bottom));background:linear-gradient(to top,var(--cream) 70%,rgba(251,243,228,0))}.btn{border:0;background:var(--card);color:var(--ink);border-radius:18px;padding:12px 18px;font-weight:900;font-size:16.5px;min-height:56px;box-shadow:0 6px #d6c3a3,inset 0 0 0 3px var(--line);transition:transform .12s var(--pop),box-shadow .12s}.btn:active:not(:disabled){transform:translateY(6px);box-shadow:0 0 #d6c3a3,inset 0 0 0 3px var(--line)}.btn:disabled{opacity:.45}.btn-primary{background:var(--red);color:#fff;font-family:var(--display);font-weight:400;font-size:21px;letter-spacing:.5px;box-shadow:0 6px 0 var(--red-deep);text-shadow:0 2px 0 var(--red-deep)}.btn-primary:active:not(:disabled){box-shadow:0 0 0 var(--red-deep);transform:translateY(6px)}.btn-primary.ready{animation:ready-pulse 1.6s ease-in-out infinite}@keyframes ready-pulse{0%,to{box-shadow:0 6px 0 var(--red-deep),0 0 #a2000073}50%{box-shadow:0 6px 0 var(--red-deep),0 0 0 10px #a2000000}}.grow{flex:1}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#08281a80;display:flex;align-items:flex-end;justify-content:center;animation:fade .2s ease}.sheet{position:relative;width:100%;max-width:560px;max-height:92dvh;overflow-y:auto;overscroll-behavior:contain;background:var(--card);border-radius:26px 26px 0 0;padding:6px 16px calc(18px + env(safe-area-inset-bottom));animation:rise .4s var(--pop);outline:none}.sheet-top{position:sticky;top:-6px;z-index:2;background:var(--card);padding:6px 0 4px;margin:0 -4px}.sheet-grip{width:44px;height:5px;border-radius:3px;background:var(--line);margin:4px auto 6px}.sheet-close{position:absolute;right:0;top:6px;width:34px;height:34px;border-radius:50%;border:0;background:#f1e5d1;font-size:20px;font-weight:900;line-height:1}@keyframes rise{0%{transform:translateY(100%)}}@keyframes fade{0%{opacity:0}}.sheet-title{font-family:var(--display);font-weight:400;font-size:26px;color:var(--red);margin:2px 0 12px}.sheet-title .alt{display:block;margin-left:0;font-size:14px}.sheet-h{font-family:var(--display);font-weight:400;font-size:19px;color:var(--green);margin:20px 0 10px}.progress{display:flex;gap:5px;margin:2px 40px 12px 0}.progress i{flex:1;height:7px;border-radius:4px;background:var(--line);transition:background .2s}.progress i.on{background:var(--green)}.question-hint{margin:0 0 14px;color:var(--muted);font-size:14px}.question-note{margin:12px 0 0;color:var(--muted);font-size:13.5px;text-align:center}.set-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.set-card{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;padding:12px 6px 8px;border-radius:16px;background:#fff;border:3px solid var(--line);box-shadow:0 4px 0 var(--line);transition:background .15s,border-color .15s,opacity .15s}.set-card.on{background:var(--red-soft);border-color:var(--red);box-shadow:0 4px 0 var(--red)}.set-card:disabled{opacity:.4;box-shadow:none}.set-card .tile-sm{--w: 34px}.set-label{font-size:13px;font-weight:900;color:var(--muted)}.set-card.on .set-label{color:var(--red)}.choice-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:8px}.choice-grid.flower-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.choice-grid .tile-btn{display:block;min-width:0}.choice-grid .tile{display:block;width:100%;max-width:76px;margin:0 auto}.toggles .toggle:first-child{border-top:0}.segmented+.toggles{margin-top:12px}.score-hero{position:relative;text-align:center;padding:4px 0 12px}.seal-score{position:relative;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;min-width:140px;padding:14px 22px 12px;border-radius:24px;background:var(--red);color:var(--cream);box-shadow:0 6px 0 var(--red-deep),inset 0 0 0 3px #ffffff2e;animation:stamp .55s var(--pop) both}@keyframes stamp{0%{transform:scale(2.2) rotate(-14deg);opacity:0}60%{opacity:1}to{transform:scale(1) rotate(-3deg)}}.seal-score.dud{background:#8d7f77;box-shadow:0 6px #6b5f58}.score-num{font-family:var(--display);font-size:64px;line-height:1;font-variant-numeric:tabular-nums}.score-unit{font-weight:900;font-size:14px;margin-top:2px;letter-spacing:.04em}.score-meta{margin-top:14px;color:var(--muted);font-size:14px}.verdict{display:inline-block;margin-top:10px;padding:5px 14px;border-radius:999px;font-size:13.5px;font-weight:900}.verdict.ok{background:var(--green);color:#fff}.verdict.bad{background:var(--red-soft);color:var(--red)}.notes{margin:4px 0 8px;padding:10px 12px 10px 28px;background:var(--gold-soft);border-radius:14px;font-size:13.5px;color:#6b4a06}.fan-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.fan{padding:12px 14px;border-radius:16px;background:#fff;border:3px solid var(--line);box-shadow:0 4px 0 var(--line);animation:slide-in .4s var(--pop) both}@keyframes slide-in{0%{opacity:0;transform:translate(-20px)}}.fan-top{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.fan-name{font-weight:900}.times{color:var(--muted)}.fan-pts{font-family:var(--display);color:#fff;background:var(--red);padding:2px 10px;border-radius:999px;font-size:15px;white-space:nowrap}.fan-why{margin:4px 0 0;font-size:13px;color:var(--muted);font-weight:600}.fan-total{display:flex;justify-content:space-between;align-items:center;background:var(--green);color:#fff;border-color:var(--green);box-shadow:0 4px 0 var(--green-deep);font-weight:900}.fan-total span:last-child{font-family:var(--display);font-size:18px}.payout{margin:0;padding:12px 14px 12px 32px;font-size:14px;background:var(--green-soft);border-radius:14px}.payout li+li{margin-top:3px}.sheet-actions{display:flex;gap:10px;margin-top:20px}.sheet-actions .btn{flex:1}.sheet-actions.sticky{position:sticky;bottom:0;z-index:2;margin-top:12px;padding:10px 0 6px;background:var(--card)}.result-error{padding:8px 0 4px;text-align:center}.result-error .oops{display:inline-block;margin:8px 0 4px;animation:shake .5s ease}.result-error .oops .tile{--w: 46px}@keyframes shake{20%,60%{transform:translate(-8px) rotate(-4deg)}40%,80%{transform:translate(8px) rotate(4deg)}}.result-error h2{font-family:var(--display);font-weight:400;font-size:22px;color:var(--red)}.result-error p{color:var(--muted)}.result-error .btn{width:100%;margin-top:8px}.confetti{position:absolute;left:50%;top:70px;width:0;height:0;pointer-events:none}.confetti i{position:absolute;width:9px;height:12px;border-radius:2px;animation:burst 1.1s cubic-bezier(.15,.7,.3,1) forwards}@keyframes burst{0%{transform:translate(0) rotate(0);opacity:1}to{transform:translate(var(--dx),var(--dy)) rotate(var(--rot));opacity:0}}.rules-tabs{margin-bottom:12px}.tldr{background:var(--gold-soft);border-radius:16px;padding:12px 14px;font-size:14px;border:2px solid #f3dc9f;margin-bottom:8px}.rule{border-top:3px dotted var(--line)}.rule summary{list-style:none;cursor:pointer;padding:13px 2px;font-weight:900;font-size:15.5px;display:flex;justify-content:space-between;align-items:center}.rule summary::-webkit-details-marker{display:none}.rule summary:after{content:"+";font-family:var(--display);color:var(--red);font-size:22px}.rule[open] summary:after{content:"–"}.rule-body{padding:0 2px 14px;font-size:14.5px;font-weight:700}.rule-body p{margin:0 0 8px}.rule-body ul,.rule-body ol{margin:0;padding-left:20px}.rule-body li+li{margin-top:6px}.rule-body ul.defs{list-style:none;padding:0}.defs li{display:flex;align-items:center;gap:10px}.mini-tiles{display:inline-flex;gap:1px;vertical-align:middle;flex:none}.defs .mini-tiles{min-width:112px}.fan-table{display:flex;flex-direction:column;gap:10px}.fan-group{display:flex;gap:10px}.fan-value{flex:none;width:48px;height:48px;border-radius:12px;background:var(--red);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--display);font-size:19px;line-height:1}.fan-value small{font-family:var(--sans);font-size:10px;font-weight:900;margin-top:2px}.fan-group ul{list-style:none;padding:0;margin:0;flex:1}.fan-group li+li{margin-top:6px}.fan-desc{display:block;font-size:12.5px;color:var(--muted)}@media (min-width: 420px){.tile-md{--w: 36px}}@media (max-width: 400px){.suit-tabs .alt{display:none}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}@media (hover: hover){button{transition:translate .2s var(--pop)}button:hover:not(:disabled){translate:0 -2px}}.rules-btn{animation:nudge 5s ease-in-out 2s infinite}@keyframes nudge{0%,90%,to{rotate:0deg}93%{rotate:-14deg}96%{rotate:12deg}}.sheet-plain,.sheet-plain *{animation:none!important;transition:none!important;translate:none!important}:lang(zh-Hant) .card-head h2,:lang(zh-Hant) .sheet-title,:lang(zh-Hant) .sheet-h,:lang(zh-Hant) .btn-primary,:lang(zh-Hant) .result-error h2{font-weight:900;letter-spacing:1px}.alt:lang(en){letter-spacing:0;font-weight:800}
