:root{--paper:#f5f2ea;--card:#fffdf8;--ink:#1c2a24;--muted:#5f6d66;--line:#d9d3c4;--felt:#1f5c45;--felt-dark:#174634;--felt-ink:#eef5f0;--red:#b3261e;--gold:#c39a1c;--accent:#1f5c45;--radius:10px;--wrap-max:min(1500px, 96vw);--felt-pad:clamp(12px, 1vw, 24px);--felt-gap:clamp(6px, .55vw, 14px);--card-w:clamp(33px, 3.5vw, 64px);--card-h:clamp(44px, 4.69vw, 86px);--card-font:clamp(1.05rem, 1.5vw, 1.85rem);--center-h:calc(var(--card-w) * 2.94 + 70px);--auction-bg:#b4d3dc;--auction-ink:#11201c;--alert-bg:#e3e3e3;--bidbox-bg:#d9d3a8;--who-font:clamp(.82rem, .85vw, 1.05rem);--auction-font:clamp(13px, 6.2cqw, 1.45rem);--back-color:#2980a8;--back-stripe:#2270a0}*{box-sizing:border-box}html,body{margin:0}body{background:var(--paper);color:var(--ink);font:15px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}h1,h2,h3{text-wrap:balance;margin:0;font-family:Georgia,Times New Roman,serif;font-weight:600}h1{font-size:1.5rem}h2{font-size:1.2rem}h3{font-size:1rem}a{color:var(--accent)}button,input,select{font:inherit;color:inherit}button{border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:8px;padding:7px 12px}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.4;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.link{color:var(--accent);background:0 0;border:0;padding:0;text-decoration:underline}:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.wrap{max-width:var(--wrap-max);margin:0 auto;padding:16px}header.top{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;display:flex}header.top .brand{align-items:baseline;gap:10px;margin-right:auto;display:flex}header.top .brand span{color:var(--muted);font-size:.85rem}.suits b:nth-child(2),.suits b:nth-child(3),.red{color:var(--red)}.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px}.muted{color:var(--muted)}.error{color:#7a1c15;background:#fbe9e7;border:1px solid #e6b3ad;border-radius:8px;margin:10px 0;padding:8px 12px}.note{background:#eef5f0;border:1px solid #c5dccf;border-radius:8px;margin:10px 0;padding:8px 12px}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.spacer{flex:1}.table-scroll{overflow-x:auto}table.list{border-collapse:collapse;width:100%}table.list th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap;padding:6px 10px;font-size:.75rem}table.list td{border-bottom:1px solid var(--line);vertical-align:top;padding:9px 10px}table.list tr:last-child td{border-bottom:0}table.list td.num,table.list th.num{text-align:right;font-variant-numeric:tabular-nums}table.list tr.me td{background:#f3ecd2}.badge{border:1px solid var(--line);white-space:nowrap;border-radius:99px;padding:1px 8px;font-size:.75rem;display:inline-block}.badge.upcoming{background:#eef5f0;border-color:#c5dccf}.badge.in-progress{background:#fff4d6;border-color:#e5cf8a}.badge.finished{background:#ecebe6}.badge.cancelled,.badge.aborted{color:var(--muted)}label.check{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;font-size:.9rem;display:inline-flex}label.check input{cursor:pointer;margin:0}dl.facts{grid-template-columns:max-content 1fr;gap:6px 16px;margin:12px 0;display:grid}dl.facts dt{color:var(--muted)}dl.facts dd{margin:0}dialog{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);width:min(520px,100vw - 32px);color:var(--ink);padding:18px}dialog::backdrop{background:#141e1973}.dlg-head{align-items:flex-start;gap:10px;margin-bottom:2px;display:flex}.dlg-head h2{flex:auto;min-width:0}.dlg-head .x{width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;flex:none;padding:0;font-size:1.4rem;line-height:1}.dlg-head .x:hover{color:var(--ink);border-color:var(--line);background:#ece8da}form.grid{gap:10px;margin-top:12px;display:grid}form.grid label{color:var(--muted);gap:3px;font-size:.85rem;display:grid}form.grid input,form.grid select{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:8px;width:100%;padding:7px 9px}form.grid .two{grid-template-columns:1fr 1fr;align-items:start;gap:10px;display:grid}form.grid small{color:var(--muted)}.levels{flex-wrap:wrap;gap:2px 12px;padding:4px 0;display:flex}.levels label.check{white-space:nowrap;align-items:center;gap:5px;font-weight:400;display:inline-flex}.levels label.check input{margin:0}span.tip{display:inline-flex}details.director-section{border-top:1px solid var(--line);margin-top:2px;padding-top:8px}details.director-section summary{cursor:pointer;color:var(--ink);padding:4px 0;font-size:.9rem;font-weight:600}details.director-section summary::marker{color:var(--muted)}details.director-section>.grid{gap:10px;margin-top:8px;display:grid}details.director-section>.grid label{color:var(--muted);gap:3px;font-size:.85rem;display:grid}details.director-section>.grid input{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:8px;width:100%;padding:7px 9px}details.director-section>.grid small{color:var(--muted)}input.masked{-webkit-text-security:disc;text-security:disc}.help-icon{vertical-align:middle;border:1px solid var(--accent);width:18px;height:18px;color:var(--accent);cursor:pointer;background:0 0;border-radius:50%;justify-content:center;align-items:center;margin-left:4px;padding:0;font-size:.75rem;font-weight:700;display:inline-flex}.help-icon:hover{background:var(--accent);color:#fff}.help-steps{background:var(--paper);border:1px solid var(--line);border-radius:8px;margin-top:6px;padding:12px 14px;font-size:.83rem}.help-steps h3{margin-bottom:6px;font-size:.9rem}.help-steps ol{gap:4px;margin:0;padding-left:1.4em;display:grid}.help-steps p.muted{margin:8px 0 0;font-size:.8rem}.token-help:empty{display:none}dialog:has(.about){width:min(680px,100vw - 32px)}.about{gap:10px;max-height:min(70vh,760px);padding-right:4px;display:grid;overflow-y:auto}.about h3{margin:8px 0 0;font-size:1em}.about p,.about ul,.about ol{margin:0}.about ul,.about ol{gap:6px;padding-left:20px;display:grid}.about li{line-height:1.45}.room{grid-template-columns:minmax(0,1fr) clamp(250px,15vw,330px);align-items:start;gap:14px;display:grid}@media (max-width:900px){.room{grid-template-columns:1fr}}.side{gap:14px;display:grid}.felt{background:radial-gradient(ellipse at center, var(--felt) 0%, var(--felt-dark) 100%);color:var(--felt-ink);padding:var(--felt-pad);gap:var(--felt-gap);--rail-w:clamp(128px, 9vw, 168px);grid-template-columns:var(--rail-w) minmax(0, 1fr) minmax(0, 1.5fr) minmax(0, 1fr);min-height:min(70vh, calc(var(--wrap-max) * .52));border-radius:14px;grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"info top top top""info left center right""info bottom bottom bottom";display:grid}@media (max-width:640px){.felt{grid-template:"info info""top top""left right""center center""bottom bottom"/1fr 1fr;min-height:0}}.felt .info{font-size:var(--who-font);flex-direction:column;grid-area:info;align-self:start;align-items:flex-start;gap:7px;min-width:0;display:flex}.felt .info .auction{width:100%;margin-top:4px}@media (max-width:640px){.felt .info{flex-flow:wrap;align-items:center;gap:8px}.felt .info .tablename{flex:100%}.felt .info .vulbadge{width:54px}.felt .info .auction{flex:100%;margin-top:0}}.felt .info .tablename{letter-spacing:.02em;opacity:.9;font-weight:700}.vulbadge{flex:none;width:clamp(62px,5vw,94px);line-height:0}.vulbadge svg{width:100%;height:auto;display:block}.vulbadge .nv{fill:#f2efe4;stroke:#00000059;stroke-width:1px}.vulbadge .vul{fill:#c8372d;stroke:#00000059;stroke-width:1px}.vulbadge .mid{fill:#c9d8cd;stroke:#0000004d;stroke-width:1px}.vulbadge .bno{fill:#14201a;text-anchor:middle;dominant-baseline:central;font-size:38px;font-weight:800}.vulbadge .dlr{fill:#14201a;text-anchor:middle;dominant-baseline:central;font-size:17px;font-weight:800}.vulbadge .dlr.on-vul{fill:#fff}.felt .contract-box{color:#14201a;background:#c9d8cd;border:1px solid #0000004d;border-radius:6px;flex-direction:column;justify-content:center;align-items:center;gap:1px;min-width:clamp(62px,5vw,94px);padding:5px 9px;display:flex}.felt .contract-box .ct{font-family:Georgia,serif;font-size:clamp(1.05rem,1.25vw,1.5rem);line-height:1.1}.felt .contract-box .ct.r{color:var(--red)}.felt .contract-box .decl{opacity:.85;font-size:.78em}.felt .contract-box.pending{color:var(--felt-ink);background:#ffffff24;border-color:#fff3}.felt .tricks{gap:6px;display:flex}.felt .tcount{color:#0b1410;background:#009e73;border:1px solid #0000004d;border-radius:6px;align-items:center;gap:6px;padding:5px 10px;font-size:clamp(.95rem,1.05vw,1.2rem);font-weight:800;display:flex}.felt .tcount.lost{background:#d55e00}.felt .tcount .mark{font-size:1.05em;font-style:normal;line-height:1}.seat{text-align:center;min-width:0}.seat.top{grid-area:top}.seat.left{grid-area:left;align-self:center}.seat.right{grid-area:right;align-self:center}.seat.bottom{grid-area:bottom}.seat .who{font-size:var(--who-font);background:#00000059;border-radius:6px;align-items:stretch;gap:0;max-width:100%;margin-bottom:6px;display:inline-flex;overflow:hidden}.seat .who .seat-letter{color:#fff;background:#ffffff2e;flex-shrink:0;justify-content:center;align-items:center;width:1.7em;font-size:.9em;font-weight:800;display:flex}.seat .who .pname{overflow-wrap:anywhere;text-align:left;min-width:0;padding:3px 10px}.seat.left .who .pname,.seat.right .who .pname{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.seat.left .who,.seat.right .who{max-width:100%}.seat .who.active{background:var(--gold);color:#1b1503}.seat .who.active .seat-letter{color:#1b1503;background:#00000026}.seat .who.vul .seat-letter{color:#ff9d94}.seat .who.active.vul .seat-letter{color:var(--red)}.seat .who .pname{cursor:pointer}.seat .who .pname:hover{text-decoration:underline}.seat .who{position:relative}.player-tooltip{z-index:50;color:#eee;text-align:center;white-space:normal;background:#1a1a2e;border:1px solid #444;border-radius:8px;min-width:140px;max-width:260px;padding:8px 12px;font-size:.85rem;line-height:1.4;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);box-shadow:0 4px 12px #0006}.player-tooltip b{margin-bottom:2px;font-size:.9rem;display:block}.player-tooltip p{opacity:.85;margin:0}.seat.left .player-tooltip,.seat.right .player-tooltip{top:calc(100% + 6px);bottom:auto}.hand{flex-wrap:wrap;justify-content:center;gap:0;display:flex}.hand .suit-group{gap:0;margin:0;display:flex}.pc{width:var(--card-w);aspect-ratio:59/79;color:#14201a;font-weight:700;line-height:.78;font-size:var(--card-font);background:#fff;border:1px solid #14201a;border-radius:0;flex-direction:column;flex:none;justify-content:center;align-items:center;gap:0;margin-right:-1px;padding:0;font-family:Arial,Helvetica,Liberation Sans,sans-serif;display:flex}.pc.red{border-color:var(--red)}.hand .pc:last-child{margin-right:0}.seat.top .hand:not(.backs),.seat.bottom .hand:not(.backs){background:#0d2f23;border:2px solid #0d2f23;border-radius:3px;width:max-content;max-width:100%;margin:0 auto}.seat.top,.seat.bottom,.seat.left,.seat.right{container-type:inline-size}.seat.top .hand,.seat.bottom .hand{--cw:min(var(--card-w), calc((100cqw - 12px) / 13));flex-wrap:nowrap}.seat.left .hand:not(.backs),.seat.right .hand:not(.backs){--cw:min(var(--card-w), calc((100cqw - 8px) / 6));flex-flow:column}.seat.left .hand:not(.backs){align-items:flex-start}.seat.right .hand:not(.backs){align-items:flex-end}.seat.left .hand .suit-group,.seat.right .hand .suit-group{flex-wrap:wrap}.seat.right .hand .suit-group{justify-content:flex-end}.seat .hand .pc{width:var(--cw);font-size:calc(var(--cw) * .5)}.center .pc{font-size:calc(var(--card-w) * .5)}.pc .rank{font-size:1.51em;line-height:.72;display:block}.pc .rank.ten{letter-spacing:-.09em}.pc .suit{margin-top:-.025em;font-size:1.7em;font-weight:400;line-height:.72;display:block}.pc.red{color:var(--red)}.pc.black{color:#14201a}button.pc:not(:disabled){cursor:pointer;box-shadow:0 0 0 2.5px var(--gold), 0 2px 6px #0000004d;transform:translateY(-5px)}button.pc:not(:disabled):hover{box-shadow:0 0 0 2.5px var(--gold), 0 4px 12px #00000059;transform:translateY(-10px)}button.pc:disabled{opacity:1}.hand.dim .pc{opacity:.7}.pc.card-back{background:var(--back-color);background-image:repeating-linear-gradient(45deg, var(--back-stripe) 0px, var(--back-stripe) 1px, transparent 1px, transparent 6px), repeating-linear-gradient(-45deg, var(--back-stripe) 0px, var(--back-stripe) 1px, transparent 1px, transparent 6px);color:#0000;border-color:#1a6080;box-shadow:0 1px 3px #00000040}.hand.backs{flex-wrap:nowrap;gap:0}.seat .hand.backs .pc.card-back{width:calc(var(--card-w) * .62);aspect-ratio:auto;height:calc(var(--card-w) * .62 * 7 / 5);margin-left:calc(var(--card-w) * -.45);border-radius:clamp(3px,.25vw,5px)}.hand.backs .pc.card-back:first-child{margin-left:0}.center{width:100%;max-width:clamp(260px,26vw,440px);min-height:var(--center-h);background:#00000024;border-radius:10px;grid-area:center;justify-self:center;position:relative}.center.bidding{background:#0000002e;flex-direction:column;justify-content:center;align-self:center;align-items:stretch;gap:10px;max-width:clamp(320px,40vw,640px);min-height:0;padding:10px;display:flex}.center.bidding .auction{grid-area:auto;width:100%}.center.bidding .auction table{font-size:clamp(16px,10.3cqw,2.6rem)}.center.bidding .auction{max-height:min(40vh,330px);overflow-y:auto}.center.bidding .bidbox{width:100%;max-width:none;margin-top:0}.center .bidwait{text-align:center;opacity:.85;padding:4px 0 2px;font-size:.85rem}.center .pc{position:absolute;top:50%;left:50%}.center .t-top{transform:translate(-50%,calc(-100% - 10px))}.center .t-bottom{transform:translate(-50%,10px)}.center .t-left{transform:translate(calc(-100% - 58px),-50%)}.center .t-right{transform:translate(58px,-50%)}.center.last .pc{opacity:.55}.center .msg{text-align:center;pointer-events:none;justify-content:center;align-items:center;padding:10px;font-size:.9rem;display:flex;position:absolute;inset:0}.center.last .msg{opacity:.9;align-items:flex-end;padding-bottom:8px;font-size:.75rem}.auction{container-type:inline-size}.auction table{border-collapse:collapse;width:100%;font-size:var(--auction-font);background:var(--auction-bg);color:var(--auction-ink);border-radius:8px;font-family:Arial,Helvetica,Liberation Sans,sans-serif;line-height:1.16;overflow:hidden}.auction th,.auction td{text-align:center;width:25%;padding:.07em .1em}.auction th{letter-spacing:.03em;color:#16211c;background:#fff;border-bottom:1px solid #0000002e;font-weight:700}.auction th.vul{background:var(--red);color:#fff}.auction td{font-weight:600}.auction .call-pass{opacity:.9}.auction .call-bid{background:#d6d6d6;border-radius:4px;font-weight:700}.auction .call-bid.r,.auction .r{color:var(--red)}.auction .call-dbl,.auction .call-rdbl{color:var(--red);font-weight:800}.auction .call-rdbl{color:#1549a8}.auction .pending{opacity:.5}.auction .alerted{background:var(--alert-bg);cursor:help;box-shadow:inset 0 0 0 1px #0000001f}.bidbox{background:var(--bidbox-bg);border-radius:8px;gap:6px;margin-top:10px;padding:8px;display:grid;container-type:inline-size}.bidbox .bidrow,.bidbox .suitrow{flex-wrap:nowrap;gap:5px;min-height:clamp(36px,8cqw,60px);display:flex}.bidbox button{border:1.5px solid var(--line);min-width:0;color:var(--ink);cursor:pointer;background:#fff;border-radius:7px;flex:1 1 0;padding:4px 2px;font-size:min(1.85rem,6.7cqw);font-weight:700;line-height:1.1;transition:transform .1s,box-shadow .1s}.bidbox button:hover{transform:translateY(-1px);box-shadow:0 2px 6px #00000026}.bidbox .calls .pass{background:var(--accent);border-color:var(--accent);color:#fff;flex:2 1 0}.bidbox .calls .dbl{background:var(--red);border-color:var(--red);color:#fff}.bidbox .levels .lvl.selected{background:var(--gold);border-color:var(--gold);color:#1b1503}.bidbox .suitrow button{border-radius:18px;font-size:min(2.1rem,8.2cqw)}.bidbox .suitrow button.red{color:var(--red)}.bidbox .alertrow{align-items:center;gap:8px;display:flex}.bidbox .alert-label{color:#2a2616;flex:none;font-size:min(1rem,4.6cqw);font-weight:700}.bidbox .alert-text{border:1.5px solid var(--line);min-width:0;color:var(--ink);background:#fff;border-radius:7px;flex:auto;padding:6px 9px;font-size:min(.95rem,4.4cqw)}.bidbox .alert-text::placeholder{color:#8a8a80}.bidbox .alert-text:focus{outline:2px solid var(--accent);outline-offset:1px}.status-line{min-height:1.5em;margin-top:10px}.scorecard tfoot td{border-top:2px solid var(--line);background:#fbf6e6}.list tr.me>td{background:#fbf3dc}.deal{grid-template-columns:repeat(3,minmax(0,max-content));grid-template-areas:".top.""left mid right"".bottom.";justify-content:center;gap:10px;display:grid}.deal .d-top{grid-area:top}.deal .d-left{grid-area:left}.deal .d-right{grid-area:right}.deal .d-bottom{grid-area:bottom}.deal .d-mid{text-align:center;grid-area:mid;place-self:center;font-size:.85rem;line-height:1.5}.handblock{border:1px solid var(--line);background:#fff;border-radius:6px;min-width:clamp(118px,11vw,168px);padding:6px 9px;font-family:Arial,Helvetica,Liberation Sans,sans-serif}.handblock .hname{letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:2px;font-size:.72rem}.handblock .hl{gap:6px;font-size:clamp(.9rem,1vw,1.08rem);line-height:1.32;display:flex}.handblock .hl.r{color:var(--red)}.handblock .hs{text-align:center;width:1em}.handblock .hr{letter-spacing:.06em;font-weight:700}.review-auction{width:min(320px,100%)}.review-auction table{color:var(--ink);background:#fff;max-width:320px;font-size:clamp(14px,8cqw,1.35rem)}.review-auction th{color:var(--ink);background:#eceade}.review-auction td.r{color:var(--red)}.review-auction td.alerted{cursor:help;background:#e3e3e3}.list tr.pick{cursor:pointer}.list tr.pick:hover>td{background:#f3efe2}.list tr.sel>td{box-shadow:inset 2px 0 0 var(--accent);background:#e4eee7}.list tr.me.sel>td{background:#efe6cd}.deal-wrap{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}.handblock.me{border-color:var(--accent);box-shadow:0 0 0 2px #1f5c4526}
