@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700;800;900&display=swap');
:root{color-scheme:dark;--bg:#111715;--surface:#1b2420;--line:#ffffff13;--text:#f2f0e9;--muted:#9ba89e;--gold:#efb264;--gold-dark:#ce8b3e;--green:#b1d2b6;--font:'Noto Sans SC',-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.6 var(--font);min-width:300px}button{font:inherit;cursor:pointer;touch-action:manipulation}button:disabled{cursor:not-allowed;opacity:.38}button:focus-visible{outline:3px solid var(--gold);outline-offset:5px}button{transition:background .18s,transform .18s,opacity .18s}button:not(:disabled):active{transform:translateY(2px)}[hidden]{display:none!important}h1,h2,p{margin:0}.app{max-width:1216px;margin:auto;padding:32px 40px 18px}.topbar{display:flex;align-items:center;justify-content:space-between;padding-bottom:27px;border-bottom:1px solid var(--line)}.brand{display:flex;gap:14px;align-items:center}.brand-icon{width:45px;height:48px;display:grid;place-items:center;background:var(--gold);color:#26342b;border-radius:12px;font-size:44px;line-height:1;font-weight:800}.brand h1{font-size:23px;letter-spacing:3px;font-weight:800;line-height:1.4}.brand h1 span{font-size:13px;color:var(--muted);font-weight:400;letter-spacing:1px;margin-left:13px;border-left:1px solid #536055;padding-left:13px}.brand p{font-size:10px;letter-spacing:2.6px;color:#86968b;margin-top:3px}.topbar nav{display:flex;gap:12px}.quiet-button{border:1px solid #ffffff18;background:transparent;color:#ccd4cd;border-radius:9px;padding:8px 13px;font-size:14px}.quiet-button:hover{background:#ffffff09}.quiet-button span{display:inline-grid;place-items:center;border:1px solid #91a194;border-radius:50%;width:17px;height:17px;font-size:12px;margin-left:6px}.game-meta{display:flex;gap:13px;align-items:center;padding:22px 0 19px;font-size:13px;color:var(--muted)}.mode-tag{border-radius:5px;background:#c4e4c810;color:#b6d5bc;padding:3px 9px;font-size:12px}.text-button{border:0;background:transparent;color:#b9c5bb;font-size:13px;padding:6px 0}.game-meta .text-button{margin-left:auto}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 336px;gap:23px;align-items:start}.table{position:relative;overflow:hidden;background:radial-gradient(ellipse at 48% 45%,#294a37 0,#203d2e 44%,#193426 100%);border:1px solid #79977d36;border-radius:24px;padding:21px 32px 22px;min-height:632px;box-shadow:inset 0 0 0 7px #0c29181a,0 18px 55px #0002}.table::before{content:'';pointer-events:none;position:absolute;inset:12px;border:1px solid #a6c5a61c;border-radius:15px}.table-top{display:flex;justify-content:space-between;align-items:center;gap:8px;position:relative}.table-label{font-size:11px;color:#afc4b38a;letter-spacing:1.4px}.round-label{font-size:12px;border:1px solid #ffffff1a;border-radius:100px;padding:3px 13px;color:#c5d7c8}.player{display:flex;align-items:center;gap:11px;position:relative}.opponent{margin-top:28px}.avatar{width:43px;height:43px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:18px;border:1px solid #ffffff1a}.opponent-avatar{color:#e9c29c;background:#534134}.your-avatar{color:#d0e9cd;background:#43644b}.player-info strong{font-size:15px;line-height:1.3}.small-tag{font-size:10px;font-weight:400;padding:2px 5px;border-radius:4px;background:#ffffff09;color:#adc2b1;margin-left:4px}.score-dots{display:flex;gap:5px;margin-top:6px}.score-dots i{width:7px;height:7px;border:1px solid #8fab93;border-radius:50%}.score-dots i.won{background:var(--gold);border-color:var(--gold);box-shadow:0 0 9px #efb26422}.player-status{font-size:12px;color:#a1b8a7;margin-left:auto}.opponent-hand{display:flex;justify-content:center;gap:10px;margin-top:21px}.hidden-die{display:grid;place-items:center;width:35px;height:39px;border-radius:8px;background:#0f281c70;border:1px solid #6c917735;color:#759980;font-size:18px;font-weight:500;box-shadow:0 3px 0 #10261e}.center-stage{height:210px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;position:relative}.stage-eyebrow{color:#99bba2;font-size:12px;letter-spacing:3px}.center-stage h2{font-size:34px;letter-spacing:2px;font-weight:700;color:#e4eadf;margin-top:10px}.center-stage p{font-size:13px;color:#98b4a1;margin-top:12px}.current-bid{display:flex;align-items:center;justify-content:center;gap:17px;line-height:1;margin-top:12px}.bid-number{font-size:80px;font-weight:700;letter-spacing:-4px;color:#f1dfbf}.bid-unit{font-size:18px;color:#c1d0bc;margin-right:5px}.current-bid .die{width:65px;height:69px;border-radius:13px;box-shadow:0 5px 0 #b2aa91,0 12px 28px #0003}.turn-message{display:flex;align-items:center;justify-content:center;gap:8px;min-height:37px;color:#d0dccc;font-size:13px}.turn-light{width:5px;height:5px;background:var(--gold);border-radius:50%}.your-hand{display:flex;justify-content:center;gap:13px;padding:22px 0 31px}.die-placeholder,.die{width:61px;height:65px;border-radius:12px;background:#f0eee0;box-shadow:0 5px 0 #b6b59e,0 9px 19px #0003;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:12px;gap:4px}.die-placeholder{display:grid;place-items:center;color:#b6b69f;font-size:40px;line-height:1;border:1px solid #fbfaef55;background:#d5decd12;box-shadow:0 4px 0 #0f291d;color:#a4b9a359}.pip{border-radius:50%;background:#263f32;aspect-ratio:1;align-self:center;width:100%;box-shadow:inset 0 1px 1px #0005}.die.one .pip{background:#c96945;box-shadow:inset 0 1px 1px #73321e}.die.matched{outline:2px solid var(--gold);outline-offset:5px}.die.unmatched{opacity:.4}.yourself{border-top:1px solid #ffffff10;padding-top:15px}.yourself .avatar{width:35px;height:35px;font-size:14px}.side-panel{display:flex;flex-direction:column;gap:17px}.action-panel,.history-panel{border:1px solid var(--line);background:#1c2520;border-radius:17px;padding:23px}.panel-heading{display:flex;justify-content:space-between;align-items:center;gap:8px}.section-index{font-size:11px;letter-spacing:1.5px;color:#8fa195}.status-pill{font-size:11px;border-radius:5px;padding:2px 8px;background:#ffffff09;color:#96a79a}.status-pill.your-turn{background:#efb26419;color:var(--gold)}.action-panel h2{font-size:22px;line-height:1.45;margin-top:18px}.action-description{font-size:13px;color:#94a397;margin-top:9px;line-height:1.85;min-height:48px}.primary-button{width:100%;border:1px solid #f8c884;border-radius:10px;background:var(--gold);color:#293125;padding:14px 15px;font-size:15px;font-weight:700;box-shadow:0 3px 0 #a16b34;display:flex;justify-content:center;align-items:center;gap:12px}.primary-button:hover:not(:disabled){background:#f6c47f}.action-panel>.primary-button{margin-top:24px}.primary-button span{font-size:20px;line-height:1}.challenge-button{display:block;width:100%;border:1px solid #6b7b6d60;border-radius:10px;background:transparent;color:#dce4d9;padding:12px;font-size:14px;margin-top:13px}.challenge-button:hover:not(:disabled){background:#cde4cd0a;border-color:#b5c9b57a}.action-footnote{font-size:11px;color:#8b9a8f;text-align:center;margin-top:15px}.field-label{display:flex;justify-content:space-between;gap:8px;font-size:13px;color:#cad6ca;margin-top:22px;margin-bottom:10px}.field-label span:last-child{font-size:11px;color:#8c9d91}.quantity-control{border:1px solid #8caa9130;background:#131e17;border-radius:9px;display:flex;align-items:center;padding:4px}.quantity-control button{width:45px;height:42px;border:0;border-radius:6px;background:#2b382e;color:#c1d6c5;font-size:22px}.quantity-control output{font-size:30px;font-weight:600;margin-left:auto;line-height:1}.quantity-control>span{font-size:12px;color:#899d8d;margin:10px auto 0 9px}.face-picker{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.face-option{padding:0;background:none;border:0;border-radius:7px;aspect-ratio:1}.face-option .die{width:100%;height:100%;padding:7px;gap:3px;border-radius:7px;box-shadow:0 2px 0 #9f9f87;background:#dfe2d3}.face-option[aria-pressed=true]{outline:2px solid var(--gold);outline-offset:4px}.face-option[aria-pressed=true] .die{background:#ffe1b1}.face-option .pip{box-shadow:none}.bid-hint{min-height:20px;color:#9bae9f;font-size:11px;margin-top:15px}.bid-hint.invalid{color:#e4a38d}.history-panel{min-height:174px}.history-panel h2{font-size:14px;font-weight:500}.history-panel .panel-heading>span{font-size:11px;color:#86998c}.history-panel ol{margin:14px 0 0;padding:0;list-style:none;max-height:155px;overflow:auto;scrollbar-width:thin;scrollbar-color:#52725a transparent}.history-panel li{display:flex;align-items:center;gap:10px;font-size:13px;border-bottom:1px solid #ffffff07;padding:8px 0;color:#b3c0b4}.history-panel li:last-child{border-bottom:0}.history-panel li>strong{color:#dddcc9;font-weight:500;margin-left:auto}.history-panel .history-empty{font-size:12px;color:#829687;padding:25px 0;display:block}.history-avatar{display:grid;place-items:center;width:24px;height:24px;border:1px solid #53665160;border-radius:50%;font-size:11px}.history-panel li:first-child .history-avatar{border-color:#b6ac735c;color:#dbbd88}.footer{display:flex;justify-content:space-between;color:#7d8e82;font-size:11px;padding-top:23px}.footer span:first-child{letter-spacing:2px}.dialog{border:1px solid #71837666;border-radius:22px;max-width:480px;width:calc(100% - 32px);max-height:calc(100dvh - 40px);padding:28px;background:#202d25;color:var(--text);box-shadow:0 30px 120px #0007}.dialog::backdrop{background:#030b0799;backdrop-filter:blur(7px)}.dialog-top{display:flex;align-items:center;justify-content:space-between}.close-button{border:1px solid #ffffff22;background:transparent;width:32px;height:32px;border-radius:50%;font-size:22px;color:#ddd}.dialog h2{font-size:28px;margin:12px 0}.dialog>p{font-size:14px;color:#b2c0b4}.rules-list{padding-left:22px;margin:22px 0}.rules-list li{padding:0 0 15px 5px;color:var(--gold);font-size:14px}.rules-list strong{color:#e4e8df;font-weight:500}.rules-list p{font-size:13px;color:#a8b9ad;margin-top:3px}.dialog .rules-note{font-size:12px;border-top:1px solid #ffffff15;padding-top:15px}.dialog>.primary-button{margin-top:24px}.result-dialog{text-align:center}.result-dialog h2{color:var(--gold);font-size:32px}.reveal-section{margin-top:24px}.reveal-section>span{font-size:12px;color:#a4b6a8}.reveal-dice{display:flex;justify-content:center;gap:12px;margin-top:13px}.reveal-dice .die{width:48px;height:50px;padding:9px;gap:3px;border-radius:9px;box-shadow:0 3px 0 #a4aa95}.result-summary{margin-top:25px;padding:12px;border:1px solid #b8cfa822;border-radius:9px;font-size:14px;color:#d3dfd2}.result-summary strong{color:var(--gold);font-size:22px;margin:0 4px}.dialog .match-score{margin-top:12px;font-size:13px}.result-dismiss{margin-top:15px}.rolling .die,.rolling .die-placeholder,.rolling .hidden-die{animation:shake .13s ease-in-out infinite alternate}.rolling :nth-child(2n){animation-delay:-.07s}.rolling :nth-child(3n){animation-delay:-.1s}.thinking .turn-light{animation:pulse .8s ease-in-out infinite alternate}.bid-pop{animation:bid-pop .3s ease-out}.noscript{position:fixed;inset:auto 10px 10px;background:#b95d30;padding:15px;border-radius:8px}@keyframes shake{from{transform:translate(-2px,-4px) rotate(-9deg)}to{transform:translate(2px,1px) rotate(9deg)}}@keyframes pulse{to{opacity:.15}}@keyframes bid-pop{from{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}
@media(min-width:1000px){.action-panel:has(#bid-controls[hidden]){min-height:355px}.action-panel:has(#bid-controls[hidden])>.primary-button{margin-top:64px}.game-layout:has(#bid-controls:not([hidden])) .table{min-height:715px}.game-layout:has(#bid-controls:not([hidden])) .center-stage{height:290px}}
@media(max-width:960px){.app{padding:23px 24px 18px}.game-layout{grid-template-columns:minmax(0,1fr) 302px;gap:16px}.table{padding:18px 22px;min-height:606px}.your-hand{gap:10px}.your-hand .die,.die-placeholder{width:50px;height:54px;padding:10px;gap:3px}.center-stage h2{font-size:27px}.action-panel,.history-panel{padding:20px}.player-status{max-width:110px;text-align:right;font-size:11px}.face-picker{gap:7px}.face-option .die{padding:6px;gap:2px}.table-label{font-size:10px;letter-spacing:1px}.center-stage{height:215px}}
@media(max-width:720px){.app{max-width:520px;padding:18px 17px calc(18px + env(safe-area-inset-bottom))}.topbar{padding-bottom:17px}.brand-icon{width:37px;height:40px;font-size:37px;border-radius:10px}.brand{gap:10px}.brand h1{font-size:21px}.brand h1 span{display:none}.brand p{font-size:9px;letter-spacing:2px}.topbar nav{gap:7px}.quiet-button{padding:7px 9px;font-size:12px}.quiet-button span{display:none}.game-meta{padding:15px 1px;font-size:11px;gap:9px}.game-meta .text-button{font-size:11px}.mode-tag{font-size:10px;padding:2px 7px}.game-layout{display:flex;flex-direction:column;gap:15px}.table{width:100%;min-height:0;border-radius:19px;padding:16px 22px 16px}.table::before{inset:9px;border-radius:12px}.table-top{gap:4px}.table-label{font-size:9px}.round-label{font-size:10px;padding:2px 10px}.opponent{margin-top:16px}.avatar{width:34px;height:34px;font-size:14px}.player-info strong{font-size:13px}.small-tag{font-size:9px}.score-dots{margin-top:5px;gap:4px}.score-dots i{width:6px;height:6px}.player-status{max-width:140px;font-size:10px}.opponent-hand{gap:8px;margin-top:14px}.hidden-die{width:26px;height:29px;border-radius:6px;font-size:14px}.center-stage{height:147px}.center-stage h2{font-size:26px;letter-spacing:1px;margin-top:8px}.stage-eyebrow{font-size:10px;letter-spacing:2px}.center-stage p{font-size:11px;margin-top:9px}.current-bid{gap:12px;margin-top:9px}.bid-number{font-size:58px;letter-spacing:-2px}.bid-unit{font-size:14px}.current-bid .die{width:47px;height:49px;padding:9px;gap:3px;border-radius:9px;box-shadow:0 4px 0 #b2aa91}.turn-message{font-size:11px;min-height:28px}.your-hand{padding:15px 0 22px;gap:11px}.your-hand .die,.die-placeholder{width:45px;height:48px;padding:9px;gap:3px;border-radius:9px}.yourself{padding-top:12px}.yourself .avatar{width:28px;height:28px;font-size:12px}.side-panel{width:100%;gap:14px}.action-panel{padding:19px 20px;border-radius:14px}.action-panel h2{font-size:20px;margin-top:9px}.action-description{font-size:12px;min-height:0;margin-top:5px}.section-index{font-size:10px}.status-pill{font-size:10px}.action-panel>.primary-button{margin-top:17px}.action-footnote{margin-top:12px;font-size:10px}.field-label{margin-top:15px;margin-bottom:9px}.quantity-control{padding:3px}.quantity-control button{height:36px}.quantity-control output{font-size:27px}.face-picker{gap:13px}.face-option .die{padding:9px;gap:3px}.bid-hint{margin-top:12px;min-height:0}.history-panel{min-height:0;padding:18px 20px}.history-panel ol{max-height:130px}.history-panel .history-empty{padding:10px 0}.footer{font-size:10px;padding-top:18px}.dialog{padding:23px}.rules-list{margin:16px 0}.rules-list li{padding-bottom:12px}.reveal-dice .die{width:43px;height:46px;padding:8px}.reveal-dice{gap:10px}.dialog h2{font-size:25px}}
@media(max-width:355px){.app{padding:13px 12px}.table{padding-left:17px;padding-right:17px}.your-hand{gap:9px}.your-hand .die,.die-placeholder{width:42px;height:45px}.face-picker{gap:9px}.face-option .die{padding:7px}.game-meta{gap:6px}}
.opponent-hand .die{width:35px;height:39px;padding:7px;gap:2px;border-radius:8px;box-shadow:0 3px 0 #a4aa95}
@media(min-width:1000px){.game-layout:has(#bid-controls:not([hidden])) .table{min-height:632px}.game-layout:has(#bid-controls:not([hidden])) .center-stage{height:210px}}
@media(max-width:720px){
  .app{padding-top:12px}.topbar{padding-bottom:12px}.brand-icon{width:33px;height:36px;font-size:33px}.brand h1{font-size:19px}.game-meta{padding:11px 1px}
  .table{padding:13px 21px}.opponent{margin-top:10px}.opponent .avatar{width:29px;height:29px}.opponent-hand{margin-top:10px;gap:9px}.hidden-die{width:24px;height:26px;font-size:12px}.opponent-hand .die{width:24px;height:26px;padding:5px;gap:1px;border-radius:5px}
  .center-stage{height:91px}.center-stage h2{font-size:23px;margin-top:5px}.stage-eyebrow{font-size:10px}.center-stage p{margin-top:5px;font-size:10px}.current-bid{gap:10px;margin-top:4px}.bid-number{font-size:43px}.current-bid .die{width:35px;height:37px;padding:7px;gap:2px;border-radius:7px}.center-stage:has(.current-bid:not([hidden])){height:106px}.turn-message{min-height:23px;font-size:11px}.your-hand{padding:13px 0 20px}.yourself{padding-top:10px}
  .action-panel:has(#bid-controls:not([hidden])){display:grid;grid-template-columns:1.3fr 1fr;column-gap:12px;padding:16px 19px}
  .action-panel:has(#bid-controls:not([hidden])) .panel-heading,.action-panel:has(#bid-controls:not([hidden])) #bid-controls{grid-column:1 / -1}
  .action-panel:has(#bid-controls:not([hidden])) h2,.action-panel:has(#bid-controls:not([hidden])) .action-description,.action-panel:has(#bid-controls:not([hidden])) .action-footnote{display:none}
  .action-panel:has(#bid-controls:not([hidden])) .primary-button,.action-panel:has(#bid-controls:not([hidden])) .challenge-button{margin-top:14px;font-size:14px;padding:12px 5px;align-self:stretch}
  .field-label{font-size:14px;margin-top:12px;margin-bottom:8px}.quantity-control button{height:34px}.face-picker{gap:12px}.bid-hint{margin-top:12px;font-size:11px}.history-panel{padding:15px 19px}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition:none!important;scroll-behavior:auto!important}}
