:root{color:var(--text);background:var(--page);color-scheme:light;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.5;--page: #eaf5ec;--panel: #ffffff;--text: #17322a;--muted: #5d7a6a;--label: #3d5a4a;--border: #bcd6c6;--soft-border: #d2e6da;--table-border: #e0efe7;--primary: #1e9e5a;--primary-focus: rgba(30, 158, 90, .16);--navy: #0f4d2e;--danger: #b42318;--danger-border: #f0b7b7;--danger-bg: #fff1f1;--success: #166b45;--success-bg: #e3f6ec;--role-bg: #dcf3e6;--shadow: rgba(18, 70, 42, .14)}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select{font:inherit}button{border:1px solid #c5c7c2;border-radius:999px;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);box-shadow:0 1px #bbbdba,0 6px 12px -9px var(--shadow);color:#555a58;font-weight:400;cursor:pointer;min-height:40px;padding:0 18px;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease,color .16s ease,font-weight .16s ease}button:hover{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}button:active{box-shadow:none}.primary{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}.danger{border-color:var(--danger-border);color:var(--danger)}.danger.solid{background:var(--danger);border-color:var(--danger);color:#fff}button:disabled,button[disabled]{opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}button:disabled:hover,button[disabled]:hover{border-color:var(--border);background:var(--panel);color:var(--text);transform:none;box-shadow:none}.primary:disabled,.primary:disabled:hover,.danger.solid:disabled,.danger.solid:disabled:hover{background:var(--primary);border-color:var(--primary);color:#fff}.auth-page,.app-shell{min-height:100vh}.auth-page{display:flex;flex-direction:column;padding:32px 16px;height:100vh;height:100dvh;overflow:hidden;background:linear-gradient(135deg,#1e9e5a29,#14b88429),var(--page)}.auth-fit{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center}.auth-panel{position:relative;flex:0 0 auto;width:min(440px,100%);border:1px solid var(--soft-border);border-radius:8px;background:var(--panel);padding:28px;box-shadow:0 24px 60px var(--shadow);transform-origin:center;transition:border-color .18s ease,box-shadow .18s ease}.auth-panel:hover{border-color:var(--border);box-shadow:0 28px 70px var(--shadow)}.auth-panel.register{padding-top:20px;padding-bottom:20px;font-size:1.0625rem}.auth-panel.register .auth-logo{width:75px;height:75px;margin-bottom:10px}.auth-panel.register .auth-brand{margin-bottom:16px}.auth-panel.register .auth-brand .brand-title{font-size:clamp(1.5rem,3.2vw,2.1rem)}.auth-panel.register .tabs{margin-bottom:14px}.auth-panel.register .form{gap:12px}.auth-panel.register label{font-size:1.1rem}.auth-brand{display:flex;flex-direction:column;align-items:center;text-align:center;margin-bottom:22px}.auth-brand .lede{margin-bottom:0;max-width:34ch}.auth-logo{display:block;width:150px;height:150px;object-fit:cover;margin-bottom:16px;border:1px solid var(--soft-border);background:#fff;box-shadow:0 16px 40px var(--shadow)}.brand{display:flex;align-items:center;gap:14px}.brand-logo{display:block;width:46px;height:46px;flex:0 0 auto;object-fit:cover;border:1px solid var(--soft-border);background:#fff;box-shadow:0 6px 16px var(--shadow)}.brand-title{margin:0 0 6px;color:var(--text);font-family:Fredoka,Comic Sans MS,Segoe Print,Trebuchet MS,cursive,sans-serif;font-weight:600;font-size:clamp(2rem,5vw,2.9rem);line-height:1.1}.brand-title.compact{margin:0;font-size:clamp(1.4rem,2.6vw,1.9rem);line-height:1.1}.auth-brand .brand-title{white-space:nowrap}.brand-title .brand-letter{display:inline-block;opacity:0;animation:brand-letter-in .55s cubic-bezier(.22,1,.36,1) forwards;will-change:opacity,transform,filter}@keyframes brand-letter-in{0%{opacity:0;transform:translateY(.6em) scale(1.3) rotate(-8deg);filter:blur(10px)}60%{opacity:1;transform:translateY(-.08em) scale(.97) rotate(2deg);filter:blur(0)}to{opacity:1;transform:translateY(0) scale(1) rotate(0);filter:blur(0)}}h1,h2,p{margin-top:0}h1{margin-bottom:8px;font-size:clamp(2rem,4vw,3rem);line-height:1}h2{margin-bottom:18px;font-size:1.2rem}.lede{margin-bottom:24px;color:var(--muted)}.tabs{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:20px}.tabs button.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}.tabs:has(button:not(.active):hover) button.active{border-color:#c5c7c2;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);color:#555a58;font-weight:400;box-shadow:0 1px #bbbdba,0 6px 12px -9px var(--shadow)}.form{display:grid;gap:14px}label{display:grid;gap:6px;color:var(--label);font-size:.92rem;font-weight:700}input,select{min-height:44px;width:100%;border:1px solid var(--border);border-radius:6px;padding:0 12px;background:var(--panel);color:var(--text)}input:focus,select:focus{border-color:var(--primary);outline:3px solid var(--primary-focus)}.error,.success{margin:0;border-radius:6px;padding:10px 12px;font-weight:700}.error{background:var(--danger-bg);color:var(--danger)}.success{background:var(--success-bg);color:var(--success)}.app-shell{padding:28px;background:var(--page)}.topbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:0 auto 24px;max-width:1180px}.session{display:flex;align-items:center;gap:12px;color:var(--label);font-weight:700;flex-wrap:wrap}.workspace{display:grid;grid-template-columns:minmax(280px,360px) 1fr;gap:20px;margin:0 auto;max-width:1180px}.access-panel{margin:0 auto;max-width:720px;border:1px solid var(--soft-border);border-radius:8px;background:var(--panel);padding:24px;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.access-panel:hover{border-color:var(--border);box-shadow:0 16px 44px var(--shadow);transform:translateY(-2px)}.access-panel p{margin-bottom:0;color:var(--muted)}.toast{position:fixed;top:18px;left:50%;z-index:20;max-width:min(520px,calc(100vw - 32px));transform:translate(-50%);box-shadow:0 16px 44px var(--shadow)}.editor,.users-panel{border:1px solid var(--soft-border);border-radius:8px;background:var(--panel);padding:20px;transition:border-color .18s ease,box-shadow .18s ease}.editor:hover,.users-panel:hover{border-color:var(--border);box-shadow:0 14px 38px var(--shadow)}.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:18px}.stat{border:1px solid var(--table-border);border-radius:8px;padding:14px;background:var(--page);transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.stat:hover{border-color:var(--primary);box-shadow:0 14px 34px var(--shadow);transform:translateY(-3px)}.stat span{display:block;margin-bottom:4px;color:var(--muted);font-size:.8rem;font-weight:800;text-transform:uppercase}.stat strong{color:var(--text);font-size:1.6rem;line-height:1}.actions,.panel-heading,.row-actions{display:flex;align-items:center;gap:10px}.panel-heading{justify-content:space-between;margin-bottom:14px}.table-tools{display:grid;grid-template-columns:minmax(220px,1fr) minmax(160px,220px);gap:12px;margin-bottom:14px}.panel-heading h2{margin:0}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;min-width:700px}th,td{border-bottom:1px solid var(--table-border);padding:14px 12px;text-align:left}th{color:var(--muted);font-size:.8rem;text-transform:uppercase}tbody tr{transition:background .15s ease,transform .15s ease,box-shadow .15s ease}tbody tr:hover{background:var(--page);box-shadow:inset 3px 0 0 var(--primary)}.role{display:inline-flex;align-items:center;min-height:28px;border-radius:999px;background:var(--role-bg);color:var(--primary);padding:0 10px;font-size:.8rem;font-weight:800;transition:transform .16s ease,box-shadow .16s ease}.role:hover{transform:translateY(-1px);box-shadow:0 8px 18px var(--shadow)}.role.admin{background:var(--role-bg);color:var(--primary)}.role.user{background:var(--success-bg);color:var(--success)}.row-actions{justify-content:flex-end}.empty{color:var(--muted);text-align:center}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:grid;place-items:center;padding:20px;background:#070c1494}.modal{width:min(420px,100%);border:1px solid var(--soft-border);border-radius:8px;background:var(--panel);padding:22px;box-shadow:0 24px 70px #00000057;animation:modal-in .16s ease-out}.modal p{color:var(--muted)}.modal .actions{justify-content:flex-end}@keyframes modal-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.field-control{position:relative;display:block}.field-control.password-field input{padding-right:46px}.password-toggle{position:absolute;top:50%;right:6px;transform:translateY(-50%);z-index:2;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;min-height:0;padding:0;border:none;background:transparent;color:var(--muted)}.password-toggle:hover{background:transparent;color:var(--primary);box-shadow:none;transform:translateY(-50%)}.password-toggle:active{transform:translateY(-50%)}input.invalid{border-color:#f2aeb5;background:#ffe9ec}input.invalid:focus{border-color:#e58a93;outline-color:#e46c7633}.input-tooltip{position:absolute;top:calc(100% + 8px);left:0;z-index:6;display:grid;gap:3px;width:100%;border:1px solid #f3bac0;border-radius:10px;background:#fff0f2;color:#8f2f38;padding:8px 10px;font-size:.76rem;font-weight:600;line-height:1.4;box-shadow:0 10px 22px #781e232e;pointer-events:none;animation:tooltip-in .16s ease-out}.input-tooltip strong{font-weight:800}@keyframes tooltip-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.captcha-row{display:flex;align-items:center;gap:10px}.captcha-canvas{display:block;width:180px;height:64px;border:1px solid var(--border);border-radius:10px;object-fit:cover}.captcha-canvas.captcha-placeholder{display:grid;place-items:center;background:var(--page);color:var(--muted);font-size:.8rem;text-align:center;padding:4px}.captcha-refresh{min-height:44px;padding:0 14px;font-size:1.2rem;line-height:1}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;scroll-behavior:auto!important;transition-duration:.01ms!important}.brand-title .brand-letter{animation-delay:0s!important}.bid-switch-new{animation:none!important}}@media (max-width: 820px){.app-shell{padding:18px}.topbar,.workspace{display:grid;grid-template-columns:1fr}.session{justify-content:space-between}.stats-grid,.table-tools{grid-template-columns:1fr}}.bidding-app{min-height:100vh;display:flex;flex-direction:column;background:var(--page)}@media (min-width: 901px){.bidding-app{height:100vh;height:100dvh;overflow:hidden}}@media (min-width: 901px) and (max-height: 520px){.bidding-app{height:auto;min-height:100vh;overflow:visible}}.bidding-app.admin-view{height:100vh;height:100dvh;overflow:hidden}.bidding-app .topbar{margin:0;max-width:none;padding:14px 22px;border-bottom:1px solid var(--soft-border);background:var(--panel);box-shadow:0 10px 26px var(--shadow);flex:0 0 auto}.bidding-layout{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:300px 350px minmax(0,1fr);align-items:stretch}.bidding-column{min-height:0}.bidding-controls{display:flex;flex-direction:column;gap:30px;padding:24px 18px;border-right:1px solid var(--border);box-shadow:20px 0 30px -26px var(--shadow);overflow:visible}.bidding-inbox{border-right:1px solid var(--border);box-shadow:20px 0 30px -26px var(--shadow)}.bid-switches{display:flex;flex-direction:column;gap:10px}.bid-switch{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:46px;padding:0 16px;font-weight:400;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:0 1px #bbbdba,0 6px 12px -9px var(--shadow);color:#555a58}.bid-switch.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}.bid-count{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-width:34px;height:24px;padding:0 12px;border-radius:999px;background:#e7b06a;color:#5a3b18;font-size:.9rem;font-weight:700;line-height:1}.bid-switch.active .bid-count{background:#ffffffeb;color:#39614b}.bid-switch-new{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-width:34px;height:24px;padding:0 12px;border-radius:999px;background:#e7b06a;color:#5a3b18;font-size:.9rem;font-weight:700;line-height:1;animation:bid-switch-new-blink 2.8s ease-in-out infinite}.bid-switch.active .bid-switch-new{background:#ffffffeb;color:#39614b}@keyframes bid-switch-new-blink{0%,to{opacity:1}50%{opacity:.3}}.new-deal-block{display:flex;flex-direction:column;gap:10px;margin-top:auto}.new-deal-caption{color:var(--label);font-size:.8rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.new-deal-actions{display:inline-flex;flex-direction:column;gap:10px;width:auto}.new-deal-action{position:relative;width:auto;text-align:left;white-space:nowrap;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:0 1px #bbbdba,0 6px 12px -9px var(--shadow);color:#555a58}.new-deal-action.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}.new-deal-action:after{content:attr(data-tooltip);position:absolute;left:calc(100% + 12px);top:50%;transform:translateY(-50%);z-index:40;width:300px;padding:8px 10px;border:1px solid #e0cdaa;border-radius:10px;background:#f8efdf;color:#6a5033;box-shadow:0 12px 28px #8c693c33;font-size:.8rem;font-weight:600;line-height:1.4;opacity:0;visibility:hidden;transition:opacity .16s ease,visibility .16s ease;pointer-events:none;white-space:normal}.new-deal-action:hover:after,.new-deal-action:focus-visible:after{opacity:1;visibility:visible}.bidding-main{display:flex;align-items:center;justify-content:center;padding:24px}.bidding-main-hint{color:var(--muted);font-size:1rem;margin:auto}.bidding-main{align-items:stretch;justify-content:flex-start;min-height:0}.bid-deal{cursor:pointer}.bid-deal:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.bid-workspace{width:100%;padding:16px 22px 22px;display:flex;flex-direction:column;gap:16px;overflow:auto}.deal-summary{color:var(--label);font-size:.95rem}.deal-finish-moment{color:var(--muted)}.bid-deal-stack{display:flex;flex-direction:column;align-items:center;align-self:flex-start;width:max-content;max-width:100%}.bid-deal-layout{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start}.deal-hands-block{display:flex;flex-wrap:wrap;column-gap:10ch;row-gap:12px;align-items:flex-start}.deal-hands-block .deal-hand-column{min-width:0}.deal-hand-column{display:flex;flex-direction:column;gap:6px;min-width:210px;font-size:1.05rem}.bid-caption{color:var(--label);font-size:.78rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase}.auction-panel{display:flex;flex-direction:column;gap:6px}.auction-empty{color:var(--muted);font-size:.9rem}.auction-table{border-collapse:collapse;min-width:280px}.auction-table th,.auction-table td{min-width:56px;padding:2px 5px;text-align:center;border:1px solid var(--soft-border);line-height:1.05}.auction-table th{background:linear-gradient(180deg,#f5f5f2,#e2e4df);color:var(--label);font-weight:700;padding:4px 8px}.auction-cell-dash{color:var(--muted)}.auction-cell-empty{border-color:transparent}.bid-waiting{color:var(--muted);font-size:.9rem}.bid-not-estimated{align-self:flex-start;margin:4px 0 0 2ch;padding:8px 12px;max-width:520px;color:#5b3f86;background:#f4effb;border:1px solid #ded0f2;border-radius:8px;font-size:.9rem;text-align:center}.bid-estimation{display:flex;flex-direction:column;align-items:flex-start;align-self:flex-start;margin-left:2ch;gap:18px;margin-top:26px}.bid-estimation-main{margin:0;padding:4px 22px;border:3px solid var(--soft-border);border-radius:999px;background:var(--panel);color:var(--text);font-family:Fredoka,Trebuchet MS,Segoe UI,sans-serif;font-size:1.45rem;font-weight:600;white-space:pre-wrap}.bid-estimation-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;align-items:flex-start;gap:6px}.bid-estimation-item{display:flex;align-items:baseline;padding:1px 14px;border:3px solid var(--soft-border);border-radius:999px;background:var(--panel);color:var(--text);font-size:.95rem}.bid-estimation-value{min-width:2ch;font-weight:700}.bid-estimation-contracts{margin-left:4ch}.bid-estimation .bid-suit-glyph,.bid-deal-estimation .bid-suit-glyph{font-size:inherit}.bid-estimation .bid-suit-glyph.glyph-nt,.bid-deal-estimation .bid-suit-glyph.glyph-nt{color:inherit;font-weight:inherit}.bid-update-toast{position:fixed;right:18px;bottom:18px;z-index:80;max-width:360px;padding:10px 14px;background:var(--navy);color:#fff;border-radius:8px;box-shadow:0 12px 28px var(--shadow);font-size:.9rem}.bid-input{display:flex;flex-direction:column;align-items:center;gap:9px;padding-top:18px;border-top:1px solid var(--soft-border);margin-top:8px}.bid-undo-panel{display:flex;justify-content:center;padding-top:14px;margin-top:8px;border-top:1px solid var(--soft-border)}.bid-input .bid-btn-row,.bid-input .bid-actions-row{justify-content:center}.bid-btn-row{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.bid-btn{min-width:46px;min-height:34px;padding:4px 12px;border-radius:8px;font-weight:700}.bid-btn-quiet{color:#555a58;background:linear-gradient(180deg,#ececea,#dcddd8);border:1px solid #c5c7c2}.bid-btn-pass{color:#fff;background:linear-gradient(180deg,#6f9c81,#54806a);border:1px solid #3d6b52}.bid-btn-dbl{color:#fff;background:linear-gradient(180deg,#e06a67,#c9403f);border:1px solid #a83433}.bid-btn-rdbl{color:#fff;background:linear-gradient(180deg,#4b7fc9,#2b5ea7);border:1px solid #1f4a86}.bid-btn.chosen{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 4px #00000059}.bid-btn:disabled{opacity:.45;cursor:default;box-shadow:none}.bid-actions-row{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:6px}.auction-cell-next{background:#f2e4c8;font-weight:700;font-size:1.05rem}.auction-table td{min-width:56px}.auction-call{font-size:1.2rem;line-height:1.15;white-space:nowrap}.bid-seat-caption{color:var(--label);font-size:1.05rem;font-weight:700}.bid-btn-level,.bid-btn-suit{font-size:1.2rem;line-height:1.1}.bid-suit-glyph{display:inline-block;font-size:1.2rem;line-height:1}.bid-suit-glyph.glyph-s{color:#1b1b1b}.bid-suit-glyph.glyph-h{color:#d32f2f}.bid-suit-glyph.glyph-d{color:#e05a1f}.bid-suit-glyph.glyph-c{color:#14532d}.bid-suit-glyph.glyph-nt{color:#2b5ea7;font-weight:800;font-size:1.05rem}.bid-btn-quiet.chosen{background:#ecd9b8;border-color:#c8a26a;color:#5f4a26;box-shadow:inset 0 1px #fff9}.bidding-inbox{overflow-y:auto}.bid-deal-empty{margin:0;padding:18px 16px;color:var(--muted);font-size:.9rem;text-align:center}.bid-deal-list{list-style:none;margin:0;padding:10px 12px 14px;display:flex;flex-direction:column;gap:8px}.bid-deal{position:relative;padding:8px 26px 8px 10px;border:1px solid var(--soft-border);border-left:3px solid transparent;border-radius:8px;background:var(--panel);box-shadow:0 1px #5a5f5c0f;line-height:1.55;font-weight:400}.bid-deal.unviewed{font-weight:700;border-left-color:#e7b06a}.bid-deal.not-estimated{background:#f4effb;border-color:#ded0f2}.bid-deal.not-estimated.unviewed{border-left-color:#e7b06a}.bid-deal.current{background-image:linear-gradient(#12462a14,#12462a08);box-shadow:inset 0 2px 5px #12462a38;transform:translateY(1px)}.bid-deal-result{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;margin-top:4px}.bid-deal-estimation{display:inline-block;padding:2px 14px;border:3px solid var(--soft-border);border-radius:999px;background:var(--panel);color:var(--text);font-family:Fredoka,Trebuchet MS,Segoe UI,sans-serif;font-size:1.1rem;font-weight:600;line-height:1.35;white-space:pre-wrap}.bid-deal-title{color:var(--label);font-size:.85rem}.bid-deal-core,.bid-deal-partner{white-space:nowrap}.bid-deal-current-mark{position:absolute;top:50%;right:10px;transform:translateY(-50%);width:12px;height:12px;border-radius:50%;background:var(--navy);box-shadow:0 0 0 1px #ffffffbf}.bid-deal-partner-label{font-weight:400}.bid-deal-partner-name{font-weight:700}.bid-deal-hand{word-break:break-word}.bid-deal-date{margin-left:auto;color:var(--muted);font-size:.78rem;font-weight:400;white-space:nowrap}.bid-deal-hand .hand-display{white-space:normal}.bid-deal-hand .hand-suit-group+.hand-suit-group{margin-left:0}.bid-deal-more{padding:0 12px 14px;text-align:center}.deal-dealing-progress{display:flex;align-items:center;gap:10px;margin:4px 0 2px;color:var(--label);font-size:1rem}.deal-dealing-progress .deal-spinner{width:18px;height:18px}.deal-quantity{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;margin:0}.quantity-btn{width:30px;min-height:30px;padding:0;font-size:1rem;line-height:1}.deal-modal input[type=number]{width:56px;min-height:28px;padding:0;text-align:center;font-size:1rem;-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.deal-modal input[type=number]::-webkit-outer-spin-button,.deal-modal input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.deal-modal .deal-field{display:grid;grid-template-columns:120px minmax(0,1fr);align-items:center;column-gap:12px;row-gap:6px;margin-bottom:12px}.deal-field-label{font-weight:600;font-size:.9rem;white-space:nowrap}.deal-modal .deal-field input[type=text]{width:240px;max-width:100%;justify-self:start;min-height:32px;padding:0 12px;border:1px solid var(--border);border-radius:999px;background:var(--panel);color:var(--text);font-size:.95rem}.deal-modal .deal-field input[type=text]:focus{outline:3px solid var(--primary-focus);border-color:var(--primary)}.deal-error{margin:0 0 12px;color:var(--danger);font-weight:600}.deal-modal-actions{display:flex;justify-content:flex-end;align-items:center;gap:10px}.deal-progress{display:inline-flex;align-items:center;gap:8px;margin-right:auto;color:var(--muted);font-size:.9rem}.deal-spinner{width:16px;height:16px;flex:0 0 auto;border:2px solid var(--soft-border);border-top-color:var(--primary);border-radius:50%;animation:deal-spin .8s linear infinite}@keyframes deal-spin{to{transform:rotate(360deg)}}.session .user-menu{position:relative;display:inline-flex}.session .user-menu-toggle{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 10px;font-weight:600;color:var(--label);background:transparent;border:1px solid transparent;border-radius:8px;box-shadow:none}.session .user-menu-toggle:hover,.session .user-menu-toggle:focus-visible{color:var(--label);background:var(--primary-focus);border-color:transparent;box-shadow:none}.session .user-menu-toggle:focus-visible{outline:3px solid var(--primary-focus);outline-offset:2px}.session .user-menu-caret{font-size:1.4rem;line-height:1;opacity:.7}.user-menu-dropdown{position:absolute;top:calc(100% + 8px);right:0;z-index:60;display:flex;flex-direction:column;min-width:190px;padding:6px;gap:2px;border:1px solid #c5c7c2;border-radius:8px;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);box-shadow:0 18px 40px var(--shadow)}.user-menu-dropdown button{width:100%;min-height:34px;justify-content:flex-start;text-align:left;padding:0 12px;font-weight:500;color:var(--text);background:transparent;border:1px solid transparent;border-radius:6px;box-shadow:none}.user-menu-dropdown button:hover,.user-menu-dropdown button:focus-visible{color:#fff;font-weight:600;background:linear-gradient(180deg,#6f9c81,#5d8c6f);border-color:transparent;box-shadow:none}.session .view-switch{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:40px;height:40px;min-height:0;padding:0;border:none;border-radius:50%;background:transparent;color:inherit}.session .view-switch:hover,.session .view-switch:focus-visible{border:1px solid #54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow);transform:none}.session .view-switch:focus-visible{outline:3px solid var(--primary-focus);outline-offset:2px}.session .view-switch-icon{display:block;width:32px;height:32px;object-fit:contain;opacity:.55;-webkit-user-select:none;user-select:none;transition:opacity .16s ease,transform .16s ease,filter .16s ease}.session .view-switch:hover .view-switch-icon,.session .view-switch:focus-visible .view-switch-icon{opacity:1;filter:brightness(0) invert(1)}.session .view-switch:active .view-switch-icon{transform:scale(.92)}.session .sign-out{min-height:28px;padding:0 10px;font-size:.8rem;font-weight:600;color:#555a58;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:0 1px #bbbdba,0 6px 12px -9px var(--shadow)}.session .sign-out:hover,.session .sign-out:focus-visible{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow);transform:none}.session .sign-out:active{transform:none}.admin-panel{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:stretch}.admin-nav{display:flex;align-items:center;justify-content:center;padding:24px 18px;border-right:1px solid var(--border);box-shadow:20px 0 30px -26px var(--shadow)}.admin-sections{display:inline-flex;flex-direction:column;gap:10px;width:auto}.admin-section{display:flex;align-items:center;justify-content:flex-start;gap:12px;width:auto;min-height:40px;padding:0 18px;font-weight:400;text-align:left;white-space:nowrap;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:0 1px #bbbdba,0 6px 12px -9px var(--shadow);color:#555a58}.admin-section.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}.admin-main{min-height:0;display:flex;flex-direction:column;gap:14px;padding:20px 24px}.admin-main-title{margin:0 0 0 auto;flex:0 0 auto}.admin-toolbar{display:flex;align-items:center;gap:12px;flex:0 0 auto}.admin-search{position:relative;flex:0 1 380px;min-width:0}.admin-search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}.admin-search input{width:100%;min-height:38px;padding:0 14px 0 36px;border:1px solid var(--border);border-radius:999px;background:var(--panel);color:var(--text)}.admin-search input:focus{outline:3px solid var(--primary-focus);border-color:var(--primary)}.hidden-file-input{display:none}.admin-load-btn{flex:0 0 auto}.admin-load-status{margin:0 0 2px;color:var(--success);font-size:.9rem;font-weight:600}.admin-load-status.error{color:var(--danger)}.admin-load-highlight{color:var(--navy);font-weight:800}.admin-load-results{width:min(440px,100%)}.admin-load-errors{max-height:180px;overflow-y:auto;margin:0 0 12px;padding-right:6px}.admin-load-errors p{margin:0 0 8px}.admin-table-scroll{flex:1 1 auto;min-height:0;overflow:auto;border:1px solid var(--soft-border);border-radius:8px;background:var(--panel)}.admin-table-scroll table{margin:0}.admin-table-scroll thead th{position:sticky;top:0;z-index:1;background:var(--page)}.admin-table-scroll th.sortable{padding:0}.admin-table-scroll .admin-sort-btn{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;width:100%;min-height:0;padding:14px 12px;background:transparent;border:none;border-radius:0;box-shadow:none;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer}.admin-table-scroll .admin-sort-btn:hover,.admin-table-scroll .admin-sort-btn:focus-visible{background:transparent;color:var(--primary);box-shadow:none}.admin-sort-indicator{font-size:.8em;opacity:.85}.admin-table-scroll td{padding:9px 12px;line-height:1.35}.admin-table-scroll td.admin-cell-strong{font-weight:700}.admin-table-status{margin:0;padding:18px;color:var(--muted);text-align:center}.admin-table-error{color:var(--danger)}.admin-table-scroll tbody tr.selectable{cursor:pointer}.admin-table-scroll tbody tr.selected{background:var(--primary-focus);box-shadow:inset 3px 0 0 var(--primary)}.admin-actions{flex:0 0 auto;display:flex;gap:10px}.admin-dialog h2{margin:0 0 4px}.admin-dialog-user{margin:0 0 14px;font-size:.9rem}.admin-dialog-text{margin:0 0 14px;color:var(--text);line-height:1.5}.admin-dialog-text strong{font-weight:800}.admin-dialog .dialog-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;font-size:.9rem;font-weight:600}.admin-dialog input,.admin-dialog select{width:100%;min-height:40px;padding:0 14px;border:1px solid var(--border);border-radius:999px;background:var(--panel);color:var(--text)}.admin-dialog .admin-dialog-error{margin:0 0 12px;color:var(--danger)!important;font-weight:600}.hand-display{white-space:nowrap}.bid-deal-hand .hand-suit-group,.deal-hand-column .hand-suit-group{letter-spacing:.165em}.bid-deal-hand .hand-suit-group .hand-suit,.deal-hand-column .hand-suit-group .hand-suit{letter-spacing:0;margin-right:.25em}.hand-suit-group+.hand-suit-group{margin-left:5px}.hand-suit{font-weight:600}.hand-suit.suit-s{color:#1b1b1b}.hand-suit.suit-h{color:#d32f2f}.hand-suit.suit-d{color:#e05a1f}.hand-suit.suit-c{color:#14532d}.hand-vertical{display:flex;flex-direction:column;align-items:flex-start;white-space:nowrap}.hand-vertical .hand-suit-group{display:block}.hand-vertical .hand-suit-group+.hand-suit-group{margin-left:0;margin-top:2px}.admin-dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.bidding-layout.conditions-mode{grid-template-columns:300px minmax(0,1fr)}.condition-panel{display:flex;flex-direction:column;gap:16px;width:100%;min-height:0;padding:18px 20px 20px;overflow:auto;border:1px solid var(--soft-border);border-radius:12px;background:var(--panel);box-shadow:0 1px #5a5f5c0f}.condition-panel-head{display:flex;flex-wrap:wrap;align-items:flex-end;gap:18px 28px}.condition-panel-field{display:flex;flex-direction:column;gap:6px}.condition-panel-label{color:var(--label);font-size:.8rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.condition-toggles{display:inline-flex;gap:8px}.condition-toggle{min-height:34px;padding:0 16px;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:0 1px #bbbdba,0 6px 12px -9px var(--shadow);color:#555a58;font-weight:400}.condition-toggle.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}.condition-panel select{min-height:34px;padding:0 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);font-size:.95rem}.condition-panel select:disabled option{color:var(--muted)}.condition-columns{display:flex;align-items:flex-start;gap:12px;min-height:0}.condition-column{display:flex;flex:1 1 0;flex-direction:column;gap:8px;min-width:0;padding:10px;border:1px solid var(--soft-border);border-radius:10px;background:#f7f7f4}.condition-column.ours{border-color:#cfe0d3;background:#f3f8f4}.condition-column.hidden{flex:0 0 auto;align-items:center;padding:10px 5px}.condition-column-head{display:flex;align-items:baseline;gap:8px;width:100%}.condition-column.hidden .condition-column-head{flex-direction:column;align-items:center;gap:4px}.condition-column.hidden .condition-column-seat{white-space:nowrap}.condition-global{flex:0 0 auto;gap:10px}.condition-global-field,.condition-global-lengths{display:flex;flex-direction:column;gap:5px;min-width:0}.condition-global-label{color:var(--label);font-size:.72rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.condition-hcp{display:flex;align-items:center;gap:6px}.condition-count{width:46px;min-height:28px;padding:0 6px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);font:inherit;font-size:.9rem;text-align:center}.condition-count:focus{outline:3px solid var(--primary-focus);border-color:var(--primary)}.condition-count-dash{color:var(--muted)}.condition-length-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.condition-suits{display:inline-flex;gap:2px}.condition-suit{width:24px;min-height:26px;padding:0;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:none;color:#555a58;font-size:.85rem;font-weight:400;line-height:1}.condition-suit.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:700}.condition-suit:disabled,.condition-suit:disabled:hover{border-color:#dcded9;background:#eaeae4;box-shadow:none;color:#a9aca6;cursor:not-allowed;opacity:.8}.condition-length-remove{width:26px;min-height:26px;padding:0;font-size:.95rem;line-height:1}.condition-length-add{align-self:flex-start;width:28px;min-height:28px;padding:0;border-radius:50%;font-size:1.05rem;font-weight:600;line-height:1}.condition-global-hint{margin:0;color:var(--muted);font-size:.72rem;white-space:nowrap}.condition-column-title{color:var(--label);font-weight:700;font-size:.85rem;white-space:nowrap}.condition-column-seat{color:var(--muted);font-size:.75rem;font-weight:600;white-space:nowrap}.condition-column-hide{margin-left:auto;width:22px;min-height:22px;padding:0;line-height:1;font-size:.9rem}.condition-column.hidden .condition-column-hide{margin-left:0}.condition-source{width:100%}.condition-picker{--condition-system-width: 108px;display:flex;flex-direction:column;gap:6px;min-height:0}.condition-picker-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px}.condition-search-field{position:relative;min-width:0}.condition-search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}.condition-filter{position:relative;justify-self:end}.condition-filter-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:30px;min-height:30px;padding:0;color:#555a58}.condition-filter-btn svg{pointer-events:none}.condition-filter-btn.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff}.condition-filter-count{position:absolute;top:-5px;right:-5px;min-width:15px;height:15px;padding:0 4px;border-radius:999px;background:#e7b06a;color:#5a3b18;font-size:.62rem;font-weight:700;line-height:15px}.condition-filter-pop{position:absolute;top:calc(100% + 4px);right:0;z-index:20;width:170px;max-width:60vw;padding:6px;border:1px solid var(--border);border-radius:8px;background:var(--panel);box-shadow:0 12px 26px -14px var(--shadow)}.condition-filter-empty{margin:0;padding:4px 6px;color:var(--muted);font-size:.78rem}.condition-filter-clear{width:100%;min-height:0;margin-top:4px;padding:3px 6px;font-size:.72rem}.condition-systems{display:flex;flex-direction:column;gap:3px;max-height:140px;overflow-y:auto}.condition-system{width:100%;min-height:0;padding:3px 6px;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:none;color:#555a58;font-size:.68rem;font-weight:400;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.condition-system.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:600}.condition-system:hover{background:#eef3ef;color:#555a58;font-weight:600}.condition-system.active:hover{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff}.condition-search{width:100%;min-height:30px;padding:0 10px 0 30px;border:1px solid var(--border);border-radius:999px;background:var(--panel);color:var(--text);font-size:.85rem}.condition-search:focus{outline:3px solid var(--primary-focus);border-color:var(--primary)}.condition-titles{display:grid;grid-template-columns:minmax(0,1fr) var(--condition-system-width);gap:6px;padding:0 13px}.condition-title{color:var(--label);font-size:.68rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.condition-list{list-style:none;margin:0;padding:4px;max-height:220px;overflow-y:auto;border:1px solid var(--soft-border);border-radius:8px;background:var(--panel)}.condition-option{display:grid;grid-template-columns:minmax(0,1fr) var(--condition-system-width);align-items:baseline;gap:6px;width:100%;min-height:0;padding:5px 8px;border:1px solid transparent;border-radius:6px;background:transparent;box-shadow:none;color:var(--text);text-align:left;font-weight:400;white-space:normal}.condition-option:hover{background:#eef3ef;color:var(--text);font-weight:400}.condition-option.active{border-color:#54806a;background:#e3efe6}.condition-option-name{color:var(--text);font-size:.85rem;font-weight:600}.condition-option.active .condition-option-name{font-weight:700}.condition-option-system{color:var(--muted);font-size:.75rem;text-align:left}.condition-list-empty{padding:6px 8px;color:var(--muted);font-size:.8rem}.condition-picked{margin:0;color:var(--label);font-size:.78rem}.condition-picked-label{font-weight:600}.condition-panel-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:auto;padding-top:4px}.condition-panel-actions .condition-panel-json{margin-right:18px}.condition-panel-error{margin:0 auto 0 0;align-self:center;color:var(--danger);font-size:.85rem;font-weight:600}.condition-column.manual{flex:0 0 auto;width:320px;max-width:100%}.condition-columns.has-manual{flex-wrap:wrap}.condition-manual{display:flex;flex-direction:column;gap:9px;min-width:0}.condition-manual-group{display:flex;flex-direction:column;gap:5px;min-width:0}.condition-manual-head{display:flex;align-items:center;gap:6px;width:100%;min-height:28px;padding:0 8px;border:1px solid #cfe0d3;border-radius:8px;background:var(--role-bg);box-shadow:none;color:var(--text);font-weight:800;text-align:left}.condition-manual-head:hover{border-color:#a9cdb6;background:#c8e6d5;color:var(--text);font-weight:800}.condition-manual-head.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:800;box-shadow:inset 0 1px #ffffff40,0 6px 14px -8px var(--shadow)}.condition-manual-head.active:hover{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff}.condition-manual-title{color:inherit;font-size:.72rem;letter-spacing:.04em;text-transform:uppercase}.condition-manual-caret{margin-left:auto;color:inherit;font-size:.7rem;line-height:1}.condition-manual-body{display:flex;flex-direction:column;gap:5px;min-width:0;padding:2px 2px 0}.condition-manual-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0}.condition-manual-label{min-width:92px;color:var(--label);font-size:.78rem;font-weight:600}.condition-manual-row select{flex:1 1 120px;min-width:0}.condition-manual-row .condition-suits{flex:0 0 auto}.condition-bounds-row{display:flex;align-items:center;gap:4px;min-width:0}.condition-bounds-row select{flex:1 1 auto;min-width:0}.condition-suit-mark{width:16px;color:var(--text);font-size:.85rem;text-align:center}.condition-manual-subhead{margin-top:2px;color:var(--label);font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.condition-shapes{display:flex;flex-wrap:wrap;gap:3px}.condition-shape{min-width:38px;min-height:24px;padding:0 2px;background:linear-gradient(180deg,#f5f5f2,#e5e6e1);border:1px solid #c5c7c2;box-shadow:none;color:#555a58;font-size:.72rem;font-weight:400;line-height:1}.condition-shape.active{border-color:#54806a;background:linear-gradient(180deg,#6f9c81,#5d8c6f);color:#fff;font-weight:700}.condition-compare-row{display:flex;flex-wrap:nowrap;align-items:center;gap:3px;min-width:0}.condition-compare-rows{display:flex;flex-wrap:wrap;align-items:center;gap:3px 6px;min-width:0}.condition-compare-row select{flex:0 1 auto;min-width:0}.condition-compare-rows .condition-length-add{align-self:center}.condition-count-plus{color:var(--muted)}.condition-manual-hint{margin:0;color:var(--muted);font-size:.72rem}.condition-manual-error{margin:0;color:var(--danger);font-size:.75rem;font-weight:600}@media (max-width: 900px){.bidding-app .topbar{display:flex;flex-wrap:wrap;padding:10px 12px;gap:8px}.bidding-app .brand{gap:8px;min-width:0}.bidding-app .brand-logo{width:30px;height:30px}.bidding-app .brand-title.compact{font-size:1.05rem;white-space:nowrap}.bidding-app .session{gap:8px;flex-wrap:nowrap;min-width:0}.bidding-app .session .user-menu{min-width:0}.bidding-app .session .user-menu-toggle{min-height:28px;padding:0 6px;max-width:34vw}.bidding-app .session .user-menu-toggle>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bidding-app .session .sign-out{flex:0 0 auto}.bidding-layout{display:flex;flex-direction:column}.bidding-controls{display:contents}.bidding-inbox{order:2;display:block;overflow-x:auto;border-right:none;border-bottom:1px solid var(--border);box-shadow:none}.bid-deal-list{display:flex;flex-direction:row;align-items:stretch;gap:8px;overflow-x:auto;padding:8px 10px 10px}.bid-deal{flex:0 0 auto;width:max-content;min-width:300px;max-width:calc(100vw - 28px)}.bid-deal-empty{padding:12px 14px;text-align:left}.bid-deal-more{padding:6px 12px 12px}.bid-switches{order:1;display:flex;flex-direction:row;gap:8px;padding:12px 10px 4px;border-bottom:1px solid var(--soft-border)}.bid-switch{flex:1;justify-content:center;padding:0 10px}.bidding-main{order:3;flex:1 1 auto}.new-deal-block{order:4;gap:10px;padding:12px 12px 18px;border-top:1px solid var(--border);margin-top:0}.new-deal-actions{display:flex;width:100%;flex-direction:row;flex-wrap:wrap}.new-deal-action{flex:1 1 160px;text-align:center;white-space:normal}.new-deal-action:after{left:auto;right:0;top:auto;bottom:calc(100% + 8px);transform:none;width:min(300px,90vw)}.deal-modal .deal-field{flex-wrap:wrap}}@media (max-width: 900px){.admin-panel{display:flex;flex-direction:column}.admin-nav{align-items:stretch;justify-content:center;padding:14px 12px;border-right:none;border-bottom:1px solid var(--border);box-shadow:0 16px 24px -26px var(--shadow)}.admin-sections{display:flex;width:100%;flex-direction:row}.admin-section{flex:1 1 0;justify-content:center;text-align:center;padding:0 10px}.admin-main{flex:1 1 auto}}@media (max-width: 900px){.condition-panel{padding:14px 12px 18px}.condition-columns{flex-wrap:wrap}.condition-column{flex:1 1 150px}.condition-global{flex:1 1 100%}.condition-column.manual{flex:1 1 100%;width:auto}.condition-column.hidden{flex:0 0 auto}.condition-picker{--condition-system-width: 84px}.condition-panel-actions{justify-content:flex-end;margin-top:4px}}.json-dialog{width:min(760px,100%)}.json-dialog-hint{margin-bottom:10px}.json-dialog-text{max-height:55vh;margin:0;padding:10px 12px;overflow:auto;border:1px solid var(--soft-border);border-radius:6px;background:var(--page);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace;font-size:.82rem;line-height:1.45;-moz-tab-size:2;tab-size:2;white-space:pre;-webkit-user-select:text;user-select:text}.json-dialog-text:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
