:root{color-scheme:dark;--card:112px;--step:42px;--red:#bb283b;--gold:#edcf8a;--ink:#0e252d}*{box-sizing:border-box}body{margin:0;background:#092c2c;color:#f8f2df;font:20px/1.45 "Microsoft YaHei","PingFang SC",sans-serif}button,input,select{font:inherit}button{cursor:pointer;touch-action:manipulation;border:1px solid #ffffff38;border-radius:9px;background:#183e3fcc;color:#fbf4de;min-height:46px;padding:8px 15px;font-weight:600}button:disabled{opacity:.4;cursor:default}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #ffdc7b;outline-offset:3px}.table{position:relative;isolation:isolate;width:100%;height:100svh;min-height:720px;padding:24px 32px 10px;display:flex;flex-direction:column;overflow:hidden;background:radial-gradient(ellipse at 50% 45%,#32746b 0,#205a53 38%,#123e3d 78%,#0b3033);border:10px solid #233a3b;border-radius:28px;box-shadow:inset 0 0 0 2px #a98b574d,inset 0 0 100px #071f2399}.table:before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.13;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='5' height='5'%3E%3Cpath d='M0 0h1v1H0zM3 3h1v1H3z' fill='%23ffffff'/%3E%3C/svg%3E")}header{display:flex;gap:26px;align-items:center;max-width:calc(100% - 320px);flex-shrink:0}.brand{display:flex;gap:12px;align-items:center;flex-shrink:0}.brand-heart{font-size:42px;color:#efbdb4;text-shadow:0 3px 3px #0003}h1{margin:0;font-size:30px;letter-spacing:3px;line-height:1.1}.eyebrow{font-size:13px;color:#c3d6c7;letter-spacing:1px}nav{display:flex;gap:6px;flex-wrap:wrap}nav button{background:#0e35394d;border-color:#aac1b729;font-size:16px;min-height:40px;padding:6px 13px}.scorebar{position:absolute;top:22px;right:30px;width:290px;padding:14px 20px;border:1px solid #ead19b40;border-radius:14px;background:#082f32b3;box-shadow:0 8px 24px #09222333;z-index:2}.roundline{display:flex;justify-content:space-between;color:#cedfd0;font-size:14px}.trumpline{display:flex;align-items:center;gap:12px;margin:6px 0;font-size:19px}.trumpline b{font-size:27px;color:#f7e4b0}.scoreline{display:flex;justify-content:space-between;align-items:baseline;border-top:1px solid #e4cc9930;padding-top:6px;font-size:17px}.scoreline strong{color:#ffde86;font-size:37px;line-height:1.1}.scoreline small{color:#c1d4c5;font-size:15px}.teamlevels{font-size:13px;color:#c2d7c8;margin-top:3px}.felt-mark{position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);opacity:.075;font-size:24px;letter-spacing:5px;pointer-events:none;white-space:nowrap}.felt-mark span{display:block;text-align:center;font-size:180px;line-height:1}.arena{position:relative;flex:1;min-height:365px;margin-top:18px}.seat{position:absolute;min-width:160px;max-width:34%;border:1px solid transparent;border-radius:15px;padding:10px 14px}.north{top:0;left:50%;transform:translateX(-50%);text-align:center}.south{bottom:0;left:50%;transform:translateX(-50%);text-align:center}.west{top:39%;left:0}.east{top:39%;right:0;text-align:right}.seat.active{border-color:#efce8680;background:#092e324a;box-shadow:0 0 20px #ead39012}.name{display:flex;align-items:center;gap:10px;font-size:22px}.north .name,.south .name{justify-content:center}.east .name{justify-content:flex-end}.avatar{display:flex;align-items:center;justify-content:center;font-size:36px;background:#f8e8c9;border:2px solid #ffffffb0;border-radius:50%;width:56px;height:56px;box-shadow:0 5px 14px #07252755;flex-shrink:0}.name-info{display:flex;flex-direction:column;text-align:left}.name b{white-space:nowrap}.name small{font-size:14px;color:#cbdccc}.type{font-size:15px;color:#e6d9b3;margin:6px 0}.type .leading{color:#ffe198}.played{display:flex;justify-content:inherit;max-width:100%;overflow-x:auto;overflow-y:hidden;padding:3px 2px 6px;scrollbar-width:thin}.north .played,.south .played{justify-content:center}.east .played{justify-content:flex-end}.mini{display:inline-flex;flex-direction:column;flex:0 0 48px;width:48px;height:67px;background:#fffdf5;color:#142931;border:1px solid #d1d2c3;border-radius:5px;padding:4px 5px;font:bold 21px/1.15 Georgia,serif;box-shadow:0 3px 5px #061e2444;text-align:left}.mini+.mini{margin-left:-14px}.mini .pip{font-size:23px}.mini.red{color:var(--red)}.extras{font-size:14px;color:#f6da8e;margin-top:4px;display:flex;align-items:center;gap:2px}.extras .mini{width:30px;height:44px;flex-basis:30px;font-size:14px}.extras .mini .pip{font-size:17px}.center{position:absolute;left:50%;top:43%;transform:translate(-50%,-50%);text-align:center;max-width:43%;padding:12px 16px;background:#103f3c45;border-radius:18px}.center h2{margin:0;font-size:25px;color:#fff0cf}.center p{margin:7px 0;color:#d7e7d6;font-size:16px}.center button{margin:5px;font-size:18px}.center [data-draw]{width:62px;height:88px;padding:0;color:#e6d7a9;background:repeating-linear-gradient(45deg,#214c69 0 3px,#183950 3px 6px);border:3px solid #dddac4;border-radius:6px;box-shadow:0 5px 8px #08282788;font-size:48px}.control{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:15px 0 8px;margin-top:4px;border-top:1px solid #c7ddc325;min-height:91px}.turn-message{min-width:0}.control p{margin:0;font-size:21px;font-weight:600;color:#ffebb1}.control small{display:block;font-size:15px;color:#c0d7c7;margin-top:4px}.actions{display:flex;gap:9px;flex-shrink:0}.actions button{background:#0c343c99;font-size:18px;min-width:76px}.actions .primary,.primary{background:linear-gradient(#efd598,#dcb366);color:#26332c;border:1px solid #ffe6ad;min-width:120px;box-shadow:0 3px 0 #8c7740;padding:9px 23px}.hand-zone{flex-shrink:0;background:linear-gradient(180deg,#072e3010,#082b3370);border-radius:16px;padding:0 10px}.hand-caption{display:flex;gap:15px;align-items:center;justify-content:space-between;font-size:14px;color:#c5d9c8;height:38px;padding:0 3px}.hand-caption b{color:#f5deb0}.hand-caption button{min-height:30px;padding:3px 10px;font-size:14px;background:transparent}.hand{width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;scrollbar-color:#bacbbd55 transparent;padding:24px 4px 8px;display:flex;align-items:flex-start;height:calc(var(--card)*1.4 + 45px)}.cards{display:flex;flex-wrap:nowrap;gap:0;width:max-content;min-width:100%;justify-content:center;padding-right:8px}.card{flex:0 0 var(--card);width:var(--card);height:calc(var(--card)*1.4);padding:0;border:1px solid #d2d5c9;border-bottom:3px solid #abb5ab;border-radius:7px;background:linear-gradient(130deg,#fffefa,#f5f0df);color:var(--ink);position:relative;box-shadow:1px 3px 5px #031e3266;line-height:1;transition:transform .1s;min-height:0;touch-action:manipulation}.card+.card{margin-left:calc(var(--step) - var(--card))}.card.group-start{margin-left:calc(var(--step) - var(--card) + 14px)}.card.red{color:var(--red)}.card:disabled{opacity:1}.card.selected{transform:translateY(-20px);background:linear-gradient(#fff4cf,#fffdf5);border-color:#f4cc66;box-shadow:0 0 0 2px #efc862,1px 7px 12px #0004}.card.required:not(.selected){border-top:4px solid #e8bf56}.card.required:before{content:'必';position:absolute;top:57px;left:5px;background:#dbb45b;color:#23362d;font:700 12px/1.3 sans-serif;border-radius:3px;padding:1px}.corner{position:absolute;top:6px;left:4px;display:flex;flex-direction:column;align-items:center;width:26px;font:bold clamp(20px,calc(var(--card)*.25),28px)/1.02 Georgia,serif;letter-spacing:-1px}.corner .suit-pip{font-size:calc(var(--card)*.22);letter-spacing:0}.corner.joker{font:700 17px/1.08 'Microsoft YaHei',sans-serif;width:21px}.symbol{position:absolute;left:50%;top:47%;transform:translate(-50%,-50%);font-size:calc(var(--card)*.56);font-weight:400}.identity{position:absolute;left:40%;bottom:18px;transform:translateX(-25%);white-space:nowrap;font-size:13px;color:#546451}.bottom{position:absolute;right:6px;bottom:6px;font:bold 19px/1 Georgia,serif;transform:rotate(180deg)}.main-dot{position:absolute;left:8px;bottom:8px;width:8px;height:8px;border-radius:50%;background:#b78d31}.error{color:#ffc5b5!important}footer{font-size:11px;opacity:.55;flex-shrink:0;text-align:right;padding-top:4px;height:21px}dialog{color-scheme:light;border:1px solid #cbb57f;border-radius:16px;padding:25px;width:min(850px,94vw);max-height:88svh;background:#fbf7ec;box-shadow:0 20px 80px #0007;color:#18382f;font-size:20px}dialog::backdrop{background:#042629bc}dialog button{background:#e7e8dc;color:#25483c;border-color:#b9c6b4}dialog button.primary{background:#dac08b}dialog h2{margin-top:0}dialog h3{font-size:22px;margin-bottom:6px}dialog label{display:flex;justify-content:space-between;align-items:center;gap:15px;margin:19px 0}dialog input[type=range]{width:210px;min-height:44px}dialog select{padding:9px;border-radius:8px;font-size:18px}#closeModal{margin-top:15px}.warning{background:#f2e4bf;padding:12px;border-radius:9px}.historySeat{border-bottom:1px solid #cdcdbd;padding:12px 0}.historySeat>div{display:flex;padding-top:10px}.historySeat .mini+.mini{margin-left:4px}.menu-actions{display:flex;gap:12px;flex-wrap:wrap}
@media(min-width:1900px){.table{padding:30px 50px 16px;border-width:16px}.scorebar{right:50px;top:30px;width:315px}.arena{margin-top:30px}.seat{padding:16px 24px}.name{font-size:27px}.avatar{width:70px;height:70px;font-size:46px}.name small{font-size:18px}.type{font-size:19px}.mini{width:62px;flex-basis:62px;height:86px;font-size:28px}.mini .pip{font-size:30px}.mini+.mini{margin-left:-16px}.center h2{font-size:30px}.center p{font-size:20px}.control{min-height:104px}.control p{font-size:27px}.control small{font-size:19px}.actions button{min-height:58px;font-size:22px}.hand-caption{font-size:17px}nav button{font-size:19px}}
@media(max-width:1200px){.table{padding:18px 20px 8px;border-width:7px;min-height:690px}header{max-width:calc(100% - 264px);gap:12px;align-items:flex-start;flex-direction:column}.brand-heart{font-size:34px}h1{font-size:25px}.scorebar{width:250px;right:18px;top:18px;padding:10px 14px}.arena{margin-top:14px}.seat{max-width:32%;padding:8px}.name{font-size:20px;gap:7px}.avatar{width:46px;height:46px;font-size:31px}.name small{font-size:12px}.center{max-width:39%;padding:10px}.center h2{font-size:22px}.center p{font-size:14px}.type{font-size:13px}.control{gap:10px;min-height:94px}.control p{font-size:18px}.control small{font-size:13px}.actions{gap:6px}.actions button{font-size:16px;min-width:65px;padding:8px 10px}.actions .primary{min-width:86px}.hand-caption{font-size:12px}.mini{width:40px;flex-basis:40px;height:58px;font-size:19px}.mini .pip{font-size:20px}}
@media(max-width:850px){.table{padding:14px 12px 7px;border-radius:16px;min-height:740px}header{max-width:calc(100% - 229px)}nav{gap:4px}nav button{padding:6px 9px;font-size:14px;min-height:38px}.scorebar{right:12px;top:14px;width:221px}.scoreline strong{font-size:30px}.teamlevels{font-size:11px}.roundline{font-size:12px}.trumpline{font-size:16px}.trumpline b{font-size:23px}.arena{min-height:340px}.seat{max-width:33%;min-width:130px}.name{font-size:17px;gap:5px}.name small{font-size:11px}.avatar{width:40px;height:40px;font-size:26px}.center{top:43%;max-width:41%;padding:7px}.center h2{font-size:18px}.center p{font-size:13px}.center button{font-size:15px;padding:8px;margin:3px}.center [data-draw]{width:41px;height:64px;font-size:34px}.control{flex-direction:column;align-items:stretch;gap:7px;padding:10px 0 6px}.control p{font-size:17px}.actions{justify-content:center}.actions button{flex:1;max-width:150px;min-height:46px}.hand-caption>span:nth-child(2){font-size:11px}footer{font-size:10px}}
@media(max-width:550px){.table{min-height:820px}.brand .eyebrow{display:none}.brand{gap:5px}.brand-heart{font-size:27px}h1{font-size:20px}.scorebar{width:185px}.trumpline b{font-size:20px}.teamlevels{display:none}.scoreline{font-size:14px}.roundline{font-size:11px}.name{flex-direction:column}.name-info{text-align:center}.seat{min-width:98px}.center{max-width:47%}.hand-caption>span:nth-child(2){display:none}.north{top:16px}.mini{flex-basis:33px;width:33px;height:50px;font-size:17px}}
/* Every hand stays on the table: narrow screens overlap multiple rows. */
.table{min-height:0}.arena{min-height:160px}.hand{position:relative;overflow:visible;padding:0;display:block}.cards{position:static;display:block;padding:0;min-width:0;width:100%}.card{position:absolute}.card+.card,.card.group-start{margin-left:0}.card.group-start:after{content:'';position:absolute;top:77px;left:8px;width:7px;height:3px;border-radius:2px;background:currentColor;opacity:.4}.seat .played{max-height:125px}.hand-zone{z-index:3}.card:hover:not(:disabled){border-color:#e3c775}.turn-message{max-width:65%}.error{line-height:1.35}dialog input[type=text]{width:190px;padding:9px;border:1px solid #bac5b6;border-radius:7px}
@media(max-width:850px){.turn-message{max-width:100%}.seat .played{max-height:85px}.hand-caption{height:30px}.table{min-height:0}.arena{min-height:180px}.control{min-height:104px}.name-info small{font-size:11px}}
@media(max-height:850px) and (min-width:850px){.table{padding-top:12px;padding-bottom:4px}.arena{margin-top:5px;min-height:190px}.seat{padding:4px 8px}.avatar{width:40px;height:40px;font-size:27px}.name{font-size:18px}.name small{font-size:11px}.type{font-size:12px;margin:2px 0}.center h2{font-size:18px}.center p{margin:4px 0;font-size:13px}.center button{font-size:15px;padding:6px}.control{padding:8px 0 4px;min-height:80px}.control p{font-size:18px}.control small{font-size:12px}.mini{width:34px;flex-basis:34px;height:46px;font-size:16px}.mini .pip{font-size:16px}.scorebar{top:12px;font-size:14px}.hand-caption{height:29px}}
.table[data-phase=review] .actions>button:not(#collect){display:none}.table[data-phase=review] #collect{min-width:190px}.table[data-phase=review] .center{display:none}.center{pointer-events:none}.center button{pointer-events:auto}
@media(max-height:900px){.south .name{display:none}.table[data-phase=play] .center{display:none}.arena{min-height:135px}.north{top:0}.south{bottom:0}.type{margin:3px 0}.seat{padding:5px 8px}.seat .played{max-height:65px}.mini{width:36px;flex-basis:36px;height:50px;font-size:18px}.mini .pip{font-size:18px}}

[hidden]{display:none!important}.login-panel{min-height:100svh;display:grid;place-items:center;padding:24px}.login-card{width:min(430px,100%);padding:32px;border:1px solid #d7c18766;border-radius:22px;background:#123e3d;text-align:center}.login-card img{border-radius:20px}.login-card h1{margin:20px 0 8px}.login-card p{color:#c5d9c8}.login-card label{display:block;text-align:left;margin:16px 0 7px}.login-card input{width:100%;padding:12px;border:1px solid #acbbac;border-radius:8px;color:#17382e;background:#fffaf0}.login-card button{width:100%}.login-card #loginError{color:#ffbfad;min-height:1.5em}#account{color:#f0d391}.god-mode{display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,29vw)}.god-panel{height:100svh;overflow:auto;padding:16px;background:#0a252b;border-left:2px solid #d6b674}.god-panel h2{font-size:22px;color:#f0d391;margin:0}.god-panel h3{font-size:18px;margin:14px 0 6px}.god-panel p{font-size:14px;color:#c5d9c8}.god-panel details{border:1px solid #c9b07155;border-radius:8px;margin:8px 0;padding:8px}.god-panel summary{cursor:pointer;font-size:16px}.god-panel label{display:flex;justify-content:space-between;gap:10px;font-size:16px;margin:12px 0}.god-panel select,.god-panel input{max-width:180px;font-size:16px;padding:7px;background:#f9f5e8;color:#123e3d;border-radius:6px}.god-cards{display:flex;flex-wrap:wrap;gap:3px}.god-cards .mini{width:35px;flex-basis:35px;height:49px;font-size:17px;margin:0;box-shadow:none}.god-cards .pip{font-size:18px}.decision{padding:7px 0;border-top:1px solid #c9b07133}.decision>b{font-size:14px}@media(max-width:1100px){.god-mode{display:block}.god-panel{height:auto;max-height:70svh;border-left:0;border-top:2px solid #d6b674}}
@media(min-width:851px) and (max-height:900px){header{flex-direction:row;gap:12px;align-items:center}.brand{gap:8px}.brand-heart{font-size:30px}h1{font-size:23px}.eyebrow{font-size:11px}nav{gap:4px}nav button{font-size:14px;padding:6px 10px;min-height:38px}}
.table[data-phase=bury] .center{display:none}
@media(max-height:900px){.scorebar{padding:8px 12px}.roundline{font-size:12px}.trumpline{margin:4px 0;font-size:16px}.trumpline b{font-size:23px}.scoreline{font-size:15px;padding-top:4px}.scoreline strong{font-size:30px}.teamlevels{font-size:11px}.east,.west{top:auto;bottom:0}}
