*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--green: #1a5c2a;--green-dark: #123d1b;--green-mid: #246b33;--felt: #1e6b33;--card-bg: #fffdf7;--card-back: #1a3a8f;--card-shadow: 0 2px 5px rgba(0,0,0,.5);--red: #c0392b;--gold: #e8c84a;--text-light: #f0ede0;--text-dim: #8aaa88;--radius-card: 5px;--font: "Segoe UI", system-ui, sans-serif;--cw: 96px;--ch: 136px;--cws: 54px;--chs: 78px;--fan: -76px}html,body,#root{height:100%;background:var(--green-dark);font-family:var(--font);color:var(--text-light);overflow:hidden}.table-topbar{display:flex;align-items:center;justify-content:space-between;background:var(--green-dark);border-bottom:2px solid #0d3015;padding:5px 10px;height:42px;flex-shrink:0;gap:10px}.table-topbar-actions{display:flex;gap:6px;flex-shrink:0}.game-table{display:flex;flex-direction:column;height:100vh;overflow:hidden}.game-body{display:flex;flex:1;min-height:0;overflow:hidden}.table-grid{display:grid;grid-template-columns:100px 1fr 100px;grid-template-rows:auto 1fr auto;grid-template-areas:". north ." "west center east" ". south .";flex:1;min-width:0;gap:6px;padding:8px;background:var(--felt);overflow:hidden}.table-north{grid-area:north}.table-west{grid-area:west}.table-center{grid-area:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;position:relative;z-index:2}.table-east{grid-area:east}.table-south{grid-area:south}.table-sidebar{width:170px;flex-shrink:0;background:#08190ae6;border-left:1px solid #0d3015;overflow-y:auto;padding:8px}.seat-label{text-align:center;font-size:.68rem;color:var(--text-dim);letter-spacing:.05em;text-transform:uppercase;margin-bottom:3px}.seat-label--active{color:var(--gold);font-weight:700}.card{position:relative;width:var(--cw);height:var(--ch);border-radius:var(--radius-card);box-shadow:var(--card-shadow);flex-shrink:0;-webkit-user-select:none;user-select:none;transition:transform .12s,box-shadow .12s}.card--small{width:var(--cws);height:var(--chs)}.card--face{background:var(--card-bg);border:1px solid #ccc8b0}.card--back{background:var(--card-back);border:2px solid #0f1f6e;overflow:hidden}.card-back-pattern{position:absolute;top:4px;right:4px;bottom:4px;left:4px;border:1px solid rgba(255,255,255,.2);border-radius:3px;background:repeating-linear-gradient(45deg,rgba(255,255,255,.06) 0px,rgba(255,255,255,.06) 2px,transparent 2px,transparent 7px)}.card--clickable{cursor:pointer}.card--clickable:hover,.card--clickable:focus{transform:translateY(-10px);box-shadow:0 10px 22px #000000a6;outline:none;z-index:5}.card--highlighted{box-shadow:0 0 0 2px var(--gold),var(--card-shadow)}.card-corner{position:absolute;display:flex;flex-direction:column;align-items:center;line-height:1;font-weight:700}.card-corner--top{top:4px;left:6px}.card-corner--bottom{bottom:4px;right:6px;transform:rotate(180deg)}.card-rank{font-size:1.4rem;line-height:1}.card-suit{font-size:1.1rem;line-height:1}.card--small .card-rank{font-size:.9rem;line-height:1}.card--small .card-suit{font-size:.75rem;line-height:1}.card-center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:3rem;opacity:.1;pointer-events:none}.card--small .card-center{font-size:1.8rem}.hand{display:flex;flex-direction:column;align-items:center}.hand--horizontal .hand-cards{display:flex;flex-direction:row;align-items:flex-end;padding-bottom:4px}.hand--horizontal .hand-cards .card:not(:first-child){margin-left:var(--fan)}.hand--horizontal .hand-cards .card--clickable:hover,.hand--horizontal .hand-cards .card--clickable:focus{position:relative;z-index:10}.hand--vertical .hand-cards{display:flex;flex-direction:column;align-items:center;gap:2px}.hand--vertical .hand-cards .card:not(:first-child){margin-top:-110px}.hand-label{font-size:.65rem;color:var(--text-dim);margin-bottom:3px;text-align:center}.hand-empty{color:var(--text-dim);font-size:.8rem;padding:6px}@keyframes gather-north{0%{transform:translate(0) scale(1);opacity:1}to{transform:translateY(-160px) scale(.15);opacity:0}}@keyframes gather-south{0%{transform:translate(0) scale(1);opacity:1}to{transform:translateY(160px) scale(.15);opacity:0}}@keyframes gather-east{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(160px) scale(.15);opacity:0}}@keyframes gather-west{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(-160px) scale(.15);opacity:0}}.trick-area{position:relative;width:160px;height:160px;display:grid;grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr;gap:3px}.trick-area--gather-north{animation:gather-north .52s ease-in forwards;pointer-events:none}.trick-area--gather-south{animation:gather-south .52s ease-in forwards;pointer-events:none}.trick-area--gather-east{animation:gather-east .52s ease-in forwards;pointer-events:none}.trick-area--gather-west{animation:gather-west .52s ease-in forwards;pointer-events:none}.trick-card-slot{display:flex;align-items:center;justify-content:center}.trick-north{grid-column:2;grid-row:1}.trick-east{grid-column:3;grid-row:2}.trick-south{grid-column:2;grid-row:3}.trick-west{grid-column:1;grid-row:2}.trick-area-label{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:.9rem;font-weight:700;color:#ffffff40;pointer-events:none}.trick-count{display:flex;gap:20px;font-size:.8rem;color:var(--text-dim)}.bidding-panel{display:flex;flex-direction:column;gap:7px;background:#00000052;border-radius:8px;padding:10px;max-width:310px;width:100%}.bidding-panel__header{display:flex;justify-content:space-between;align-items:center;font-size:.8rem;color:var(--text-dim)}.bidding-current-turn{font-weight:600;color:var(--gold);font-size:.82rem}.bidding-highest{font-size:.75rem}.bid-grid{display:flex;flex-direction:column;gap:2px}.bid-grid__header{display:grid;grid-template-columns:repeat(5,1fr);gap:2px;font-size:1.1rem;text-align:center;color:var(--text-dim);padding-bottom:3px}.bid-grid__strain--hearts,.bid-grid__strain--diamonds{color:#e08080}.bid-grid__row{display:grid;grid-template-columns:repeat(5,1fr);gap:2px}.bid-btn{padding:4px 1px;font-size:.75rem;font-weight:600;border-radius:3px;border:1px solid transparent;cursor:default;text-align:center;background:#ffffff0d;color:#556;transition:background .1s}.bid-btn--legal{background:#ffffff24;color:#eee;cursor:pointer;border-color:#ffffff2e}.bid-btn--legal:hover{background:#ffffff42}.bid-btn--illegal{opacity:.3}.bid-btn--disabled{opacity:.22}.special-calls{display:flex;gap:6px}.special-btn{flex:1;padding:5px;font-size:.78rem;font-weight:700;border-radius:4px;border:1px solid transparent;cursor:default;text-align:center;transition:background .1s}.special-btn--pass.special-btn--legal{background:#2d6e35;color:#c8f0c8;border-color:#4a9d55;cursor:pointer}.special-btn--double.special-btn--legal{background:#6e2d2d;color:#f0c8c8;border-color:#9d4a4a;cursor:pointer}.special-btn--redouble.special-btn--legal{background:#6e4d2d;color:#f0d8c8;border-color:#9d7a4a;cursor:pointer}.special-btn--legal:hover{filter:brightness(1.15)}.special-btn--illegal{opacity:.28;background:#ffffff0a;color:#445}.special-btn--disabled{opacity:.2}.bidding-help{font-size:.72rem;color:#90c0a0;background:#00643226;border-left:2px solid #4a9d55;padding:6px 8px;border-radius:3px;line-height:1.5}.auction-history{font-size:.75rem}.auction-history__title{font-size:.65rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim);margin-bottom:5px}.auction-table{border-collapse:collapse;width:100%}.auction-table th{padding:2px 3px;font-size:.65rem;text-align:center;color:var(--text-dim);border-bottom:1px solid rgba(255,255,255,.1)}.auction-dealer{color:var(--gold)}.auction-table td{padding:2px 3px;text-align:center;min-width:32px;font-size:.72rem}.auction-call{font-weight:600}.auction-call--red{color:#f09090}.auction-call--black{color:#e8e0d0}.auction-call--pass{color:var(--text-dim);font-weight:400}.auction-call--double{color:#f0a060}.auction-call--redouble{color:#d0a0f0}.auction-contract{margin-top:7px;font-size:.72rem;color:#90c490;border-top:1px solid rgba(255,255,255,.1);padding-top:5px;line-height:1.5}.info-panel{display:flex;gap:14px;align-items:center;flex-wrap:wrap}.info-cell{display:flex;flex-direction:column;align-items:center}.info-label{font-size:.56rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim)}.info-value{font-size:.85rem;font-weight:700;line-height:1.2}.info-cell--contract .info-value{color:var(--gold)}.btn{padding:4px 10px;font-size:.73rem;font-weight:600;border-radius:4px;border:1px solid rgba(255,255,255,.18);cursor:pointer;background:#ffffff12;color:var(--text-light);transition:background .12s;white-space:nowrap}.btn:hover{background:#ffffff29}.btn--primary{background:#2c7a3d;border-color:#4aab5e}.btn--primary:hover{background:#38996e}.btn--active{background:#e8c84a38;border-color:var(--gold);color:var(--gold)}.btn--new-deal{background:#2c5c7a8c;border-color:#4a82ac}.score-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:100}.score-modal{background:#1a2e1e;border:1px solid #3a6040;border-radius:10px;padding:24px 32px;min-width:300px;max-width:440px;box-shadow:0 8px 40px #000000b3;display:flex;flex-direction:column;gap:14px}.score-modal__title{font-size:1.2rem;font-weight:700;color:var(--gold);text-align:center}.score-modal__lines{list-style:none;display:flex;flex-direction:column;gap:5px;font-size:.85rem;color:#b8d8b8}.score-modal__points{text-align:center;font-size:1.3rem;font-weight:700}.score-positive{color:#6de86d}.score-negative{color:#e86d6d}.score-modal__passedout{text-align:center;color:var(--text-dim)}.score-modal__next{align-self:center}.help-panel-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:flex-start;justify-content:center;z-index:100;overflow-y:auto;padding:40px 16px}.help-panel{background:#1a2a20;border:1px solid #3a6040;border-radius:10px;max-width:580px;width:100%;box-shadow:0 8px 40px #000000b3}.help-panel__header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #2a4030}.help-panel__header h2{font-size:1rem;color:var(--gold)}.help-panel__close{background:none;border:none;color:var(--text-dim);font-size:1.1rem;cursor:pointer;padding:3px 7px;border-radius:4px}.help-panel__close:hover{background:#ffffff1a}.help-panel__body{padding:16px 18px;overflow-y:auto;max-height:72vh;display:flex;flex-direction:column;gap:14px}.help-intro{font-size:.85rem;color:#b0d0b8;line-height:1.6}.glossary{display:flex;flex-direction:column;gap:10px}.glossary-entry{border-left:2px solid #4a9d55;padding-left:10px}.glossary-entry dt{font-weight:700;font-size:.85rem;color:var(--gold);margin-bottom:3px}.glossary-entry dd{font-size:.78rem;color:#9abca0;line-height:1.55}.version-label{position:fixed;bottom:5px;right:8px;font-size:.6rem;color:#ffffff2e;pointer-events:none;-webkit-user-select:none;user-select:none;z-index:1}.play-help{font-size:.74rem;color:#88c088;background:#005a2333;border:1px solid #285038;border-radius:4px;padding:5px 9px;text-align:center}.tutor-panel{position:fixed;width:340px;max-height:80vh;background:#141e16;border:1px solid #3a5c42;border-radius:8px;box-shadow:0 8px 32px #000000bf,0 0 0 1px #ffffff0f;display:flex;flex-direction:column;z-index:200;overflow:hidden}.tutor-title{display:flex;align-items:center;gap:7px;background:#1a3020;border-bottom:1px solid #2a4830;padding:7px 10px;cursor:grab;-webkit-user-select:none;user-select:none;flex-shrink:0}.tutor-title:active{cursor:grabbing}.tutor-title__icon{font-size:1rem}.tutor-title__text{flex:1;font-size:.82rem;font-weight:700;color:var(--gold);letter-spacing:.03em}.tutor-close{background:none;border:none;color:var(--text-dim);font-size:.95rem;cursor:pointer;padding:2px 6px;border-radius:3px;line-height:1}.tutor-close:hover{background:#ffffff1f;color:#fff}.tutor-headline{font-size:.78rem;font-weight:600;color:#b8d4b8;padding:7px 12px 5px;border-bottom:1px solid #1e3422;flex-shrink:0}.tutor-body{overflow-y:auto;padding:8px 10px;display:flex;flex-direction:column;gap:8px;flex:1;scrollbar-width:thin;scrollbar-color:#2a5030 transparent}.tutor-body::-webkit-scrollbar{width:5px}.tutor-body::-webkit-scrollbar-thumb{background:#2a5030;border-radius:3px}.tutor-empty{font-size:.78rem;color:var(--text-dim);text-align:center;padding:12px}.tutor-section{border-left:3px solid #4a9d55;padding:6px 8px 6px 10px;background:#ffffff08;border-radius:0 4px 4px 0}.tutor-section__title{font-size:.72rem;font-weight:700;margin-bottom:5px;display:flex;align-items:center;gap:5px;letter-spacing:.02em}.tutor-section__icon{font-size:.78rem}.tutor-section__lines{list-style:none;display:flex;flex-direction:column;gap:4px}.tutor-section__lines li{font-size:.74rem;color:#aacaaa;line-height:1.5;padding-left:4px;border-left:1px solid rgba(255,255,255,.06)}
