.game-info{background:linear-gradient(135deg,#0d3318,#1a5c2a);border-bottom:2px solid #2a8a4a;justify-content:center;align-items:center;gap:20px;padding:8px 16px;font-size:13px;display:flex}.game-info__team{align-items:center;gap:6px;display:flex}.game-info__team-label{letter-spacing:1px;border-radius:4px;padding:2px 8px;font-size:12px;font-weight:700}.game-info__team-a .game-info__team-label{color:var(--team-a-color);border:1px solid var(--team-a-color);background:#4fc3f733}.game-info__team-b .game-info__team-label{color:var(--team-b-color);border:1px solid var(--team-b-color);background:#ef535033}.game-info__vs{color:var(--gold);text-shadow:1px 1px 3px #00000080;letter-spacing:2px;font-weight:700}.game-info__round{color:var(--text-secondary)}.game-info__new-game{color:#fff;letter-spacing:1px;background:linear-gradient(135deg,#43a047,#2e7d32);border-radius:6px;padding:4px 12px;font-size:12px;font-weight:700;transition:transform .15s,box-shadow .15s}.game-info__new-game:hover{background:linear-gradient(135deg,#4caf50,#388e3c);transform:translateY(-1px);box-shadow:0 2px 8px #0000004d}.card{width:var(--card-width);height:var(--card-height);-webkit-user-select:none;user-select:none;border-radius:6px;flex-shrink:0;transition:transform .15s,box-shadow .15s;position:relative}.card--face-up{background:var(--card-bg);border:1.5px solid var(--card-border);flex-direction:column;justify-content:space-between;padding:3px 4px;display:flex;overflow:hidden;box-shadow:0 2px 3px #00000040,inset 0 1px #ffffffe6,inset 0 -1px #0000000d}.card--face-down{background:var(--card-back-bg);border:1.5px solid var(--card-back-border);box-shadow:0 2px 4px #0006,inset 0 1px #ffffff1a}.card--face-down:before{content:"";pointer-events:none;border:1px solid #ffd79666;border-radius:3px;position:absolute;inset:3px}.card--face-down:after{content:"";background:repeating-linear-gradient(45deg, transparent, transparent 4px, var(--card-back-pattern) 4px, var(--card-back-pattern) 5px), repeating-linear-gradient(-45deg, transparent, transparent 4px, var(--card-back-pattern) 4px, var(--card-back-pattern) 5px);pointer-events:none;border-radius:2px;position:absolute;inset:5px}.card--face-down.card--small:before{inset:2px}.card--face-down.card--small:after{background:repeating-linear-gradient(45deg, transparent, transparent 3px, var(--card-back-pattern) 3px, var(--card-back-pattern) 3.75px), repeating-linear-gradient(-45deg, transparent, transparent 3px, var(--card-back-pattern) 3px, var(--card-back-pattern) 3.75px);inset:3px}.card--small{width:var(--card-width-sm);height:var(--card-height-sm);padding:2px 3px;font-size:.7em}.card--small .card__corner{font-size:9px;line-height:1}.card--small .card__center{font-size:14px}.card--red{color:var(--card-red)}.card--black{color:var(--card-black)}.card--selected{box-shadow:0 4px 12px #4fc3f780, 0 0 0 2px var(--team-a-color);transform:translateY(-14px)}.card--clickable{cursor:pointer}.card--clickable:hover:not(.card--selected){border-color:var(--gold);box-shadow:0 3px 8px #0006, 0 0 0 1px var(--gold);z-index:2;transform:translateY(-6px)}.card--wild{animation:2s ease-in-out infinite wildGlow;background:linear-gradient(175deg,#fffde7 0%,#fff8e1 40%,#fff3cd 100%)!important;border:2px solid gold!important}.card--wild:after{content:"配";color:#333;z-index:1;background:linear-gradient(135deg,gold,#ffab00);border-radius:3px;padding:1px 4px;font-size:10px;font-weight:700;line-height:1.2;position:absolute;top:1px;right:1px;box-shadow:0 1px 3px #0000004d}.card--small.card--wild:after{padding:0 2px;font-size:8px;top:0;right:0}.card--wild.card--selected{box-shadow:0 4px 12px #4fc3f780, 0 0 0 2px var(--team-a-color), 0 0 10px 3px #ffd70080;animation:none;transform:translateY(-14px)}.card__corner{flex-direction:column;align-items:center;font-size:11px;font-weight:700;line-height:1;display:flex}.card__corner--bottom{align-self:flex-end;transform:rotate(180deg)}.card__rank{font-size:inherit}.card__suit{font-size:.9em}.card__center{font-size:22px;font-weight:700;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.card--joker-small{color:#1565c0}.card--joker-big{color:var(--card-red)}.card__joker-text{writing-mode:vertical-lr;letter-spacing:2px;font-size:11px;font-weight:700;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.card--face-down.card--small{width:var(--card-width-sm);height:var(--card-height-sm)}.player-hand-wrapper{flex-direction:column;align-items:center;display:flex;position:relative}.player-hand__toggle-btn{color:var(--text-secondary);cursor:pointer;z-index:5;letter-spacing:1px;background:#ffffff1f;border:1px solid #fff3;border-radius:10px;padding:2px 10px;font-size:11px;font-weight:700;transition:all .15s;position:absolute;top:-20px;right:16px}.player-hand__toggle-btn:hover{color:var(--text-primary);background:#fff3}.player-hand{background:#0003;border-radius:8px;justify-content:center;align-items:flex-end;max-width:100vw;min-height:96px;margin:0 12px;padding:8px 16px;display:flex;overflow-x:auto}.player-hand .card{flex-shrink:0;margin-left:-20px}.player-hand .card:first-child{margin-left:0}.player-hand--stacked{align-items:flex-end;gap:6px}.player-hand--stacked .card{margin-left:0}.card-group{flex-direction:column;flex-shrink:0;align-items:center;display:flex}.card-group .card{cursor:pointer;margin-top:-45px;position:relative;margin-left:0!important}.card-group .card:first-child{margin-top:0}.card-group .card:hover{z-index:10;transform:translateY(-4px)}.ai-player-area{background:#00000026;border-radius:6px;flex-direction:column;align-items:center;gap:6px;padding:8px;transition:box-shadow .3s;display:flex}.ai-player-area--active{box-shadow:0 0 12px 3px #ffd70080}.ai-player-area--top,.ai-player-area--bottom{flex-direction:column}.ai-player-area--left,.ai-player-area--right{flex-direction:column;justify-content:center}.ai-player__label{background:var(--ui-bg);white-space:nowrap;letter-spacing:1px;border-radius:10px;padding:2px 10px;font-size:13px;font-weight:700}.ai-player__label--team-a{border:1px solid var(--team-a-color);color:var(--team-a-color)}.ai-player__label--team-b{border:1px solid var(--team-b-color);color:var(--team-b-color)}.ai-player__cards{justify-content:center;display:flex}.ai-player__cards .card{margin-left:-28px}.ai-player__cards .card:first-child{margin-left:0}.ai-player__last-play{justify-content:center;align-items:center;gap:2px;min-height:58px;display:flex}.ai-player__pass-text{color:var(--text-secondary);font-size:14px;font-style:italic}.ai-player__card-count{color:var(--text-secondary);font-size:11px}.ai-player__finished{color:var(--gold);font-size:12px;font-weight:700}.ai-player__active-indicator{background:var(--gold);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite pulse}.play-area{background:#0000001a;border:1px solid #ffffff0d;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:8px;min-width:200px;min-height:120px;padding:16px;display:flex}.play-area__cards{flex-wrap:wrap;justify-content:center;gap:3px;animation:.3s ease-out playCard;display:flex}.play-area__label{color:var(--gold);font-size:12px;font-weight:600}.play-area__empty{color:var(--text-secondary);opacity:.4;letter-spacing:2px;font-size:16px}.action-bar{justify-content:center;gap:12px;padding:8px 16px;display:flex}.action-bar__btn{letter-spacing:2px;color:#fff;border-radius:8px;padding:8px 24px;font-size:16px;font-weight:700;transition:all .15s;box-shadow:0 2px 8px #0000004d}.action-bar__btn:active:not(:disabled){box-shadow:0 1px 4px #0000004d;transform:translateY(0)!important}.action-bar__btn--play{color:#333;background:linear-gradient(135deg,gold,#ffab00)}.action-bar__btn--play:hover:not(:disabled){background:linear-gradient(135deg,#ffe033,#ffc107);transform:translateY(-2px);box-shadow:0 4px 12px #ffd70066}.action-bar__btn--pass{background:linear-gradient(135deg,#757575,#616161)}.action-bar__btn--pass:hover:not(:disabled){background:linear-gradient(135deg,#9e9e9e,#757575);transform:translateY(-2px);box-shadow:0 4px 12px #0006}.action-bar__btn--hint{background:linear-gradient(135deg,#f9a825,#f57f17)}.action-bar__btn--hint:hover:not(:disabled){background:linear-gradient(135deg,#fbc02d,#f9a825);transform:translateY(-2px);box-shadow:0 4px 12px #f9a82566}.action-bar__btn--sf{background:linear-gradient(135deg,#7c4dff,#536dfe)}.action-bar__btn--sf:hover:not(:disabled){background:linear-gradient(135deg,#9c7cff,#7c4dff);transform:translateY(-2px);box-shadow:0 4px 12px #7c4dff66}.action-bar__error{color:var(--card-red);text-align:center;min-height:18px;font-size:12px}.game-log{border:1px solid var(--ui-border);z-index:10;background:#000000bf;border-radius:8px;width:280px;max-height:200px;font-size:11px;position:fixed;bottom:10px;right:10px;overflow-y:auto}.game-log__header{color:#aed581;cursor:pointer;background:#0000004d;border-bottom:1px solid #ffffff1a;padding:4px 10px;font-size:11px;font-weight:700;position:sticky;top:0}.game-log__entries{padding:4px 10px}.game-log__entries::-webkit-scrollbar{width:4px}.game-log__entries::-webkit-scrollbar-track{background:0 0}.game-log__entries::-webkit-scrollbar-thumb{background:#2a8a4a;border-radius:2px}.game-log__entry{color:var(--text-secondary);border-bottom:1px solid #ffffff0d;padding:2px 0}.game-log--collapsed .game-log__entries{display:none}.card-counter{border:1px solid var(--ui-border);z-index:10;background:#000000bf;border-radius:8px;width:180px;max-height:420px;font-size:11px;position:fixed;bottom:10px;left:10px;overflow:hidden}.card-counter__header{color:#ffd54f;cursor:pointer;-webkit-user-select:none;user-select:none;background:#0000004d;border-bottom:1px solid #ffffff1a;padding:4px 10px;font-size:11px;font-weight:700}.card-counter__body{max-height:380px;padding:2px 6px 4px;overflow-y:auto}.card-counter__body::-webkit-scrollbar{width:4px}.card-counter__body::-webkit-scrollbar-track{background:0 0}.card-counter__body::-webkit-scrollbar-thumb{background:#2a8a4a;border-radius:2px}.card-counter__row{border-bottom:1px solid #ffffff0d;padding:2px 0;display:flex}.card-counter__row--header{color:var(--text-secondary);border-bottom:1px solid #ffffff26;margin-bottom:2px;font-weight:700}.card-counter__cell{text-align:center;color:var(--text-primary);flex:1}.card-counter__cell--label{text-align:left;padding-left:4px;font-weight:700}.card-counter__row--depleted .card-counter__cell{color:#ffffff40}.card-counter__row--low .card-counter__cell{color:#ffd54f}.card-counter--collapsed .card-counter__body{display:none}.round-result{z-index:100;background:#000000b3;justify-content:center;align-items:center;width:100%;height:100%;animation:.3s fadeIn;display:flex;position:fixed;top:0;left:0}.round-result__card{border:2px solid var(--gold);text-align:center;background:linear-gradient(135deg,#1a3a1a,#0d2810);border-radius:16px;min-width:320px;padding:32px 48px;box-shadow:0 8px 32px #0009}.round-result__title{text-shadow:1px 1px 4px #00000080;margin-bottom:16px;font-size:28px;font-weight:700}.round-result__title--win{color:var(--gold)}.round-result__title--lose{color:var(--team-b-color)}.round-result__order{margin-bottom:20px}.round-result__player{justify-content:space-between;padding:4px 0;font-size:14px;display:flex}.round-result__player--team-a{color:var(--team-a-color)}.round-result__player--team-b{color:var(--team-b-color)}.round-result__advance{color:var(--text-secondary);margin-bottom:16px;font-size:14px}.round-result__btn{color:#333;letter-spacing:2px;background:linear-gradient(135deg,gold,#ffab00);border-radius:8px;padding:10px 32px;font-size:16px;font-weight:700;transition:all .2s;box-shadow:0 2px 8px #ffd7004d}.round-result__btn:hover{transform:scale(1.05);box-shadow:0 4px 16px #ffd70066}.game-board{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}.game-board__top-bar{flex-shrink:0}.game-board__main{flex-direction:column;flex:1;min-height:0;display:flex}.game-board__top-player{flex-shrink:0;justify-content:center;padding:4px 0;display:flex}.game-board__middle{flex:1;justify-content:center;align-items:center;gap:0;min-height:0;display:flex}.game-board__left-player{flex-shrink:0;width:140px}.game-board__center{flex:1;justify-content:center;align-items:center;max-width:400px;display:flex}.game-board__right-player{flex-shrink:0;width:140px}.game-board__bottom{flex-direction:column;flex-shrink:0;align-items:center;padding-bottom:4px;display:flex}.game-board__human-info{align-items:center;gap:8px;padding:2px 0;font-size:13px;display:flex}.game-board__human-label{letter-spacing:1px;color:var(--team-a-color);border:1px solid var(--team-a-color);background:#4fc3f733;border-radius:4px;padding:2px 8px;font-size:12px;font-weight:700}.game-board__human-cards-count{color:var(--text-secondary);font-size:12px}.game-board__turn-indicator{background:var(--gold);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite pulse;display:inline-block}.game-board__pregame{flex-direction:column;justify-content:center;align-items:center;gap:20px;height:100%;display:flex}.game-board__pregame-title{color:var(--gold);letter-spacing:8px;text-shadow:0 2px 8px #0009,0 0 20px #ffd7004d;padding-bottom:16px;font-size:56px;font-weight:700;position:relative}.game-board__pregame-title:after{content:"";background:linear-gradient(90deg, transparent, var(--gold), transparent);width:60px;height:2px;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.game-board__pregame-subtitle{color:#fff9;letter-spacing:2px;font-size:18px}.game-board__start-btn{color:#333;letter-spacing:4px;background:linear-gradient(135deg,gold,#ffab00);border-radius:12px;padding:16px 56px;font-size:22px;font-weight:700;transition:all .2s;box-shadow:0 4px 12px #ffd7004d}.game-board__start-btn:hover{transform:translateY(-3px)scale(1.02);box-shadow:0 6px 20px #ffd70066}.game-board__start-btn:active{transform:translateY(0)}.game-board__human-last-play{justify-content:center;gap:2px;min-height:20px;padding:2px 0;display:flex}.game-board__human-pass-text{color:var(--text-secondary);font-size:12px;font-style:italic}:root{--table-bg:#1a5c2a;--table-gradient:radial-gradient(ellipse at 50% 40%, #2d7a3a 0%, #1a5c2a 50%, #0f3d1a 85%, #0a2d12 100%);--table-rail:#3d2b1a;--card-width:56px;--card-height:80px;--card-width-sm:40px;--card-height-sm:58px;--card-bg:linear-gradient(175deg, #fefefe 0%, #f5f0e0 40%, #ebe5d0 100%);--card-border:#c8bfa0;--card-red:#d32f2f;--card-black:#212121;--card-back-bg:#8b1a1a;--card-back-border:#5a1010;--card-back-pattern:#fff8dc26;--gold:gold;--team-a-color:#4fc3f7;--team-b-color:#ef5350;--wild-glow:0 0 8px 2px #ffd70099;--ui-bg:#0009;--ui-border:#ffffff26;--text-primary:#f0f0f0;--text-secondary:#b0b0b0}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{width:100%;height:100%;overflow:hidden}body{background:repeating-linear-gradient(165deg, transparent, transparent 1px, #ffffff04 1px, #ffffff04 2px), repeating-linear-gradient(75deg, transparent, transparent 1px, #00000005 1px, #00000005 2px), var(--table-gradient);color:var(--text-primary);-webkit-user-select:none;user-select:none;font-family:PingFang SC,Microsoft YaHei,Noto Sans SC,-apple-system,BlinkMacSystemFont,sans-serif}#root{border:10px solid var(--table-rail);background:repeating-linear-gradient(165deg, transparent, transparent 1px, #ffffff03 1px, #ffffff03 2px), repeating-linear-gradient(75deg, transparent, transparent 1px, #00000004 1px, #00000004 2px), var(--table-gradient);border-radius:12px;height:100%;box-shadow:inset 0 0 80px 30px #0006,inset 0 0 4px 1px #0000004d}button{cursor:pointer;border:none;outline:none;font-family:inherit}button:disabled{cursor:not-allowed;opacity:.5}@keyframes dealCard{0%{opacity:0;transform:scale(.5)translateY(-30px)}to{opacity:1;transform:scale(1)translateY(0)}}@keyframes playCard{0%{opacity:0;transform:translateY(20px)scale(.8)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes wildGlow{0%,to{box-shadow:0 0 8px 2px #ffd70080,inset 0 0 4px #ffd7001a}50%{box-shadow:0 0 16px 5px #ffd700cc,inset 0 0 8px #ffd70033}}
