pokertools-arena 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/styles.css ADDED
@@ -0,0 +1,2289 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ --bg: #090b0e;
4
+ --panel: #11151a;
5
+ --panel-2: #171c22;
6
+ --line: rgba(255,255,255,.09);
7
+ --text: #f5f7fa;
8
+ --muted: #8e99a7;
9
+ --accent: #b6ff52;
10
+ --accent-soft: rgba(182,255,82,.12);
11
+ --danger: #ff6b76;
12
+ --gold: #f1c35a;
13
+ --felt: #153c2e;
14
+ --felt-2: #0d2d22;
15
+ --shadow: 0 20px 60px rgba(0,0,0,.34);
16
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
17
+ }
18
+ * { box-sizing: border-box; }
19
+ body { margin: 0; background: radial-gradient(circle at 45% -10%, #1a232b 0, var(--bg) 42%); color: var(--text); min-height: 100vh; }
20
+ button,input,select { font: inherit; }
21
+ button { cursor: pointer; }
22
+ .app-shell { min-height: 100vh; padding: 18px 22px 24px; }
23
+ .topbar { display:flex; justify-content:space-between; align-items:center; max-width: 1600px; margin:0 auto 16px; }
24
+ .eyebrow { font-size: 11px; letter-spacing:.18em; color:var(--accent); font-weight:800; }
25
+ h1,h2,h3,p { margin:0; }
26
+ h1 { margin-top:3px; font-size:24px; letter-spacing:-.03em; }
27
+ h2 { margin-top:4px; font-size:22px; }
28
+ h3 { font-size:15px; margin-bottom:13px; }
29
+ .topbar-actions { display:flex; align-items:center; gap:8px; }
30
+ .button,.icon-button { border:1px solid var(--line); color:var(--text); background:var(--panel-2); border-radius:10px; padding:9px 13px; transition:.15s ease; }
31
+ .button:hover,.icon-button:hover { transform:translateY(-1px); border-color:rgba(255,255,255,.2); }
32
+ .button.primary { background:var(--accent); color:#10150b; border-color:var(--accent); font-weight:800; }
33
+ .button.danger { color:#ffb8be; border-color:rgba(255,107,118,.25); background:rgba(255,107,118,.09); }
34
+ .button.ghost { background:rgba(255,255,255,.035); }
35
+ .small-button { padding:7px 10px; font-size:12px; }
36
+ .icon-button { width:34px; height:34px; padding:0; font-size:22px; display:grid; place-items:center; }
37
+ .pill { padding:7px 10px; border-radius:999px; border:1px solid var(--line); font-size:12px; }
38
+ .pill.good { color:var(--accent); background:var(--accent-soft); }
39
+ .pill.warn { color:var(--gold); background:rgba(241,195,90,.08); }
40
+ .pill.neutral { color:var(--muted); }
41
+ .workspace { display:grid; grid-template-columns:minmax(680px,1fr) 390px; gap:14px; max-width:1600px; margin:0 auto; }
42
+ .arena-card,.inspector { background:rgba(17,21,26,.84); backdrop-filter:blur(16px); border:1px solid var(--line); border-radius:18px; box-shadow:var(--shadow); overflow:hidden; }
43
+ .arena-card { min-height:calc(100vh - 105px); display:flex; flex-direction:column; }
44
+ .arena-head { height:48px; padding:0 16px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; font-size:12px; }
45
+ .status-dot { width:8px;height:8px;border-radius:50%;display:inline-block;background:#4d5660;margin-right:6px;box-shadow:0 0 0 4px rgba(255,255,255,.02); }
46
+ .status-dot.running { background:var(--accent); box-shadow:0 0 16px rgba(182,255,82,.55); }
47
+ .status-dot.paused { background:var(--gold); }
48
+ .status-dot.error { background:var(--danger); }
49
+ .mono { font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace; }
50
+ .muted { color:var(--muted); }
51
+ .small { font-size:12px; }.tiny { font-size:10px; }
52
+ .poker-table { position:relative; flex:1; min-height:650px; overflow:hidden; }
53
+ .poker-table::before { content:""; position:absolute; inset:0; background:radial-gradient(circle at center, rgba(255,255,255,.04), transparent 58%); pointer-events:none; }
54
+ .felt-ring { position:absolute; left:11%;right:11%;top:13%;bottom:13%;border-radius:49%;background:radial-gradient(ellipse at 50% 42%, #1b5641 0%, var(--felt) 44%, var(--felt-2) 100%); border:12px solid #222930; box-shadow:inset 0 0 70px rgba(0,0,0,.42), 0 26px 80px rgba(0,0,0,.45); }
55
+ .felt-ring::after { content:none; }
56
+ .seats-layer { position:absolute; inset:0; }
57
+ .seat { position:absolute; width:176px; min-height:112px; transform:translate(-50%,-50%); border:1px solid var(--line); background:linear-gradient(180deg, rgba(31,38,45,.97), rgba(14,18,23,.97)); border-radius:14px; padding:10px; box-shadow:0 10px 28px rgba(0,0,0,.32); transition:.18s ease; z-index:3; }
58
+ .seat.active { border-color:rgba(182,255,82,.65); box-shadow:0 0 0 2px rgba(182,255,82,.12),0 12px 32px rgba(0,0,0,.38),0 0 30px rgba(182,255,82,.12); }
59
+ .seat.busted { opacity:.42; filter:saturate(.5); }
60
+ .seat-head { display:flex;justify-content:space-between;gap:8px;align-items:flex-start; }
61
+ .seat-name { font-weight:800;font-size:13px; max-width:115px; overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
62
+ .seat-pos { font-size:9px;color:var(--muted);border:1px solid var(--line);padding:2px 4px;border-radius:5px; }
63
+ .seat-model { font-size:9px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px; }
64
+ .seat-stack { display:flex;justify-content:space-between;align-items:baseline;margin:7px 0 6px; }
65
+ .seat-stack strong { font-size:16px; }.seat-stack span { color:var(--muted);font-size:10px; }
66
+ .hole-cards,.board { display:flex;gap:5px;align-items:center;justify-content:center; }
67
+ .card { width:35px;height:48px;border-radius:6px;background:#f7f7f2;color:#101214;border:1px solid rgba(0,0,0,.25);display:grid;place-items:center;font-weight:900;font-size:14px;box-shadow:0 4px 10px rgba(0,0,0,.28); }
68
+ .board .card { width:48px;height:66px;font-size:18px;border-radius:8px; }
69
+ .card.red { color:#d83b48; }
70
+ .card.empty { background:rgba(255,255,255,.045);border:1px dashed rgba(255,255,255,.13);box-shadow:none;color:transparent; }
71
+ .last-action { margin-top:6px;font-size:10px;color:var(--accent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-height:12px; }
72
+ .table-center { position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;text-align:center;width:360px; }
73
+ .street-label { font-size:10px;letter-spacing:.15em;color:rgba(255,255,255,.62);font-weight:800;margin-bottom:8px; }
74
+ .pot-block { margin-top:11px; display:flex;gap:7px;justify-content:center;align-items:baseline; }
75
+ .pot-block strong { font-size:19px; }
76
+ .winner-banner { margin:0 14px 14px; padding:14px 16px; border:1px solid rgba(182,255,82,.26); background:rgba(182,255,82,.09); border-radius:12px; color:#dbffae; font-weight:800; }
77
+ .inspector { height:calc(100vh - 105px); min-height:650px; display:flex; flex-direction:column; }
78
+ .tabs { display:flex;border-bottom:1px solid var(--line);padding:7px;gap:5px; }
79
+ .tab { flex:1;border:0;background:transparent;color:var(--muted);padding:8px;border-radius:8px;font-weight:700; }
80
+ .tab.active { background:rgba(255,255,255,.06);color:var(--text); }
81
+ .tab-panel { display:none;min-height:0;flex:1;overflow:auto; }.tab-panel.active{display:flex;flex-direction:column;}
82
+ .panel-block { padding:14px;border-bottom:1px solid var(--line); }.panel-block.grow{flex:1;}
83
+ .panel-title { font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:800;margin-bottom:11px; }
84
+ .empty-state { font-size:12px;color:var(--muted);line-height:1.6;padding:10px 0; }
85
+ .decision-card { border:1px solid var(--line);background:rgba(255,255,255,.025);border-radius:12px;padding:12px; }
86
+ .decision-top { display:flex;justify-content:space-between;gap:10px; }
87
+ .decision-player { font-weight:900;font-size:15px; }.clock-wrap{text-align:right;}.decision-clock{font-size:28px;font-weight:900;font-variant-numeric:tabular-nums;}
88
+ .legal-actions { display:flex;flex-wrap:wrap;gap:5px;margin-top:11px; }.action-chip{font-size:10px;border:1px solid var(--line);padding:5px 7px;border-radius:7px;color:#c6ced8;background:rgba(255,255,255,.025);}
89
+ .decision-feed { display:flex;flex-direction:column;gap:8px; }.decision-item{border-left:2px solid rgba(182,255,82,.45);padding:8px 9px;background:rgba(255,255,255,.025);border-radius:0 8px 8px 0;}.decision-item.error{border-left-color:var(--danger)}
90
+ .decision-item-head{display:flex;justify-content:space-between;gap:8px;font-size:11px}.decision-item-action{font-weight:900}.decision-reason{margin-top:5px;font-size:11px;line-height:1.45;color:#b7c0cb}.decision-meta{margin-top:5px;font-size:9px;color:var(--muted)}
91
+ .event-log { font-size:10px;line-height:1.55;display:flex;flex-direction:column;gap:6px; }.event-row{padding-bottom:6px;border-bottom:1px solid rgba(255,255,255,.04)}.event-type{color:var(--accent)}
92
+ .stats-grid { display:flex;flex-direction:column;gap:8px; }.stat-card{border:1px solid var(--line);border-radius:10px;padding:10px}.stat-top{display:flex;justify-content:space-between;gap:8px}.stat-name{font-weight:800}.stat-model{font-size:9px;color:var(--muted)}.stat-values{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:9px}.metric{background:rgba(255,255,255,.025);border-radius:7px;padding:6px}.metric b{display:block;font-size:12px}.metric span{font-size:8px;color:var(--muted);text-transform:uppercase}
93
+ .setup-dialog { width:min(1180px,96vw);height:min(850px,94vh);padding:0;border:1px solid rgba(255,255,255,.13);border-radius:18px;background:#0e1216;color:var(--text);box-shadow:0 30px 100px rgba(0,0,0,.65); }
94
+ .setup-dialog::backdrop { background:rgba(0,0,0,.72);backdrop-filter:blur(5px); }
95
+ .setup-dialog form { height:100%;display:flex;flex-direction:column; }
96
+ .dialog-head,.dialog-footer { display:flex;justify-content:space-between;align-items:center;padding:15px 18px;border-bottom:1px solid var(--line); }.dialog-footer{border-top:1px solid var(--line);border-bottom:0;margin-top:auto;gap:15px;}
97
+ .setup-grid { overflow:auto;padding:16px 18px;display:grid;gap:20px; }.setup-section{border:1px solid var(--line);border-radius:12px;padding:14px;background:rgba(255,255,255,.018)}
98
+ .field-grid { display:grid;grid-template-columns:repeat(5,minmax(120px,1fr));gap:9px; }.field-grid label,.player-row label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;display:flex;flex-direction:column;gap:5px;}
99
+ input,select { width:100%;border:1px solid var(--line);background:#10151a;color:var(--text);border-radius:8px;padding:9px;outline:none; }.field-grid input:focus,.player-row input:focus,.player-row select:focus{border-color:rgba(182,255,82,.4)}
100
+ .section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.players-editor{display:flex;flex-direction:column;gap:7px}.player-row{display:grid;grid-template-columns:34px 1fr 130px 1.7fr 1fr 34px;gap:8px;align-items:end;padding:8px;border:1px solid rgba(255,255,255,.05);border-radius:10px;background:rgba(255,255,255,.018)}
101
+ .seat-badge{height:35px;border-radius:8px;background:rgba(182,255,82,.09);color:var(--accent);display:grid;place-items:center;font-size:11px;font-weight:900}.setup-error{margin:0 18px 12px;padding:10px 12px;border:1px solid rgba(255,107,118,.25);background:rgba(255,107,118,.08);color:#ffb4ba;border-radius:9px;font-size:12px}
102
+ .hidden{display:none!important}
103
+ @media(max-width:1100px){.workspace{grid-template-columns:1fr}.inspector{height:auto;min-height:500px}.arena-card{min-height:720px}.field-grid{grid-template-columns:repeat(2,1fr)}.player-row{grid-template-columns:34px 1fr 120px 1.4fr}.provider-field{grid-column:2/4}.remove-player{grid-column:4}.poker-table{min-height:680px}}
104
+ @media(max-width:700px){.app-shell{padding:10px}.topbar{align-items:flex-start}.topbar-actions{flex-wrap:wrap;justify-content:flex-end}.workspace{display:block}.arena-card{min-height:650px}.inspector{margin-top:10px}.felt-ring{left:4%;right:4%;top:17%;bottom:17%}.seat{width:138px;min-height:98px;padding:8px}.seat-model{display:none}.card{width:28px;height:39px}.table-center{width:250px}.board .card{width:36px;height:50px}.player-row{grid-template-columns:34px 1fr}.player-row>*{grid-column:auto}.model-field,.provider-field{grid-column:1/3}.field-grid{grid-template-columns:1fr 1fr}}
105
+
106
+ /* Browser-only additions */
107
+ .wide-dialog { width:min(1320px,97vw); }
108
+ .connections-editor { display:flex; flex-direction:column; gap:8px; margin-top:10px; }
109
+ .connection-row { display:grid; grid-template-columns:150px 160px minmax(260px,1.5fr) minmax(170px,1fr) minmax(180px,1fr) auto minmax(120px,.7fr) 34px; gap:8px; align-items:end; padding:9px; border:1px solid rgba(255,255,255,.05); border-radius:10px; background:rgba(255,255,255,.018); }
110
+ .connection-row label { font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;display:flex;flex-direction:column;gap:5px; }
111
+ .connection-status { align-self:center; line-height:1.3; overflow-wrap:anywhere; }
112
+ .good-text { color:var(--accent)!important; }
113
+ .bad-text { color:#ff9ca5!important; }
114
+ .setup-note { margin-top:10px; line-height:1.5; }
115
+ .browser-player-row { grid-template-columns:34px 1fr 170px minmax(220px,1.5fr) 145px minmax(150px,.8fr) 34px; }
116
+ @media(max-width:1250px){
117
+ .connection-row{grid-template-columns:150px 150px 1fr 1fr;}
118
+ .connection-headers{grid-column:1/3}.connection-status{grid-column:3/5}.remove-connection{grid-column:4}
119
+ .browser-player-row{grid-template-columns:34px 1fr 160px 1fr}.browser-player-row .provider-field{grid-column:2/4}
120
+ }
121
+ @media(max-width:760px){
122
+ .connection-row{grid-template-columns:1fr 1fr}.connection-url,.connection-headers{grid-column:1/3}.connection-status{grid-column:1/3}.remove-connection{grid-column:2}
123
+ .browser-player-row{grid-template-columns:34px 1fr}.browser-player-row .model-field,.browser-player-row .provider-field{grid-column:1/3}
124
+ }
125
+
126
+ /* pokertools-arena visual system */
127
+ :root{
128
+ --bg:#07090c;--panel:#0e1318;--panel-2:#141a20;--line:rgba(255,255,255,.10);
129
+ --text:#f5f7f9;--muted:#8f9ba8;--accent:#c6ff57;--accent-2:#86e94f;
130
+ --felt:#0d4a37;--felt-2:#082f25;--rail:#20262d;--rail-2:#101419;
131
+ }
132
+ html{background:var(--bg)}
133
+ body{background:
134
+ radial-gradient(circle at 50% -15%,rgba(70,92,107,.28),transparent 38%),
135
+ linear-gradient(180deg,#0a0d11 0%,#07090c 100%);overflow-x:hidden}
136
+ .app-shell{padding:16px 18px 22px}
137
+ .topbar{max-width:1680px;margin-bottom:12px}
138
+ h1{font-size:25px;display:flex;align-items:center;gap:9px;font-weight:850;letter-spacing:-.045em}
139
+ .brand-mark{display:grid;place-items:center;width:31px;height:31px;border-radius:9px;background:linear-gradient(145deg,var(--accent),#8fe22e);color:#0a1306;box-shadow:0 6px 22px rgba(198,255,87,.18);font-size:18px}
140
+ .eyebrow{font-size:10px;letter-spacing:.2em}
141
+ .button{backdrop-filter:blur(12px)}
142
+ .sound-button.active{border-color:rgba(198,255,87,.32);color:var(--accent);background:rgba(198,255,87,.08)}
143
+ .workspace{grid-template-columns:minmax(760px,1fr) 410px;gap:12px;max-width:1680px}
144
+ .arena-card,.inspector{border-radius:20px;border-color:rgba(255,255,255,.085);background:rgba(12,16,20,.88)}
145
+ .arena-card{min-height:calc(100vh - 92px)}
146
+ .arena-head{height:46px;background:linear-gradient(180deg,rgba(255,255,255,.025),transparent)}
147
+ .poker-table{min-height:700px;isolation:isolate;perspective:1200px;background:
148
+ radial-gradient(ellipse at 50% 50%,rgba(23,78,59,.16),transparent 48%),
149
+ linear-gradient(180deg,rgba(255,255,255,.012),transparent)}
150
+ .poker-table::before{background:
151
+ radial-gradient(circle at 50% 48%,rgba(255,255,255,.045),transparent 41%),
152
+ linear-gradient(110deg,transparent 0 38%,rgba(255,255,255,.02) 43%,transparent 48%)}
153
+ .felt-ring{
154
+ left:9%;right:9%;top:10%;bottom:10%;border-radius:50%;
155
+ background:
156
+ radial-gradient(ellipse at 50% 38%,rgba(255,255,255,.055),transparent 43%),
157
+ repeating-radial-gradient(ellipse at 45% 45%,rgba(255,255,255,.010) 0 1px,transparent 1px 5px),
158
+ radial-gradient(ellipse at 50% 52%,#175d45 0%,var(--felt) 42%,var(--felt-2) 100%);
159
+ border:14px solid var(--rail);box-shadow:
160
+ inset 0 0 0 2px rgba(255,255,255,.045),
161
+ inset 0 0 100px rgba(0,0,0,.38),
162
+ 0 8px 0 var(--rail-2),0 34px 78px rgba(0,0,0,.52);
163
+ }
164
+ .felt-ring::before{content:"";position:absolute;inset:16px;border:1px solid rgba(255,255,255,.055);border-radius:inherit;pointer-events:none}
165
+ .felt-ring::after{content:""}
166
+ .felt-brand{position:absolute;left:50%;top:59%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;opacity:.115;text-align:center;user-select:none;white-space:nowrap}
167
+ .felt-brand span{font-size:27px;line-height:1}.felt-brand strong{font-size:24px;letter-spacing:-.04em}.felt-brand small{text-transform:uppercase;letter-spacing:.28em;font-size:7px;margin-top:3px}
168
+ .fx-layer{position:absolute;inset:0;z-index:7;pointer-events:none;overflow:hidden}
169
+ .seats-layer{z-index:4}
170
+ .seat{
171
+ width:184px;min-height:124px;padding:10px 11px 9px;border-radius:16px;
172
+ background:linear-gradient(180deg,rgba(29,36,43,.98),rgba(12,16,20,.985));
173
+ border-color:rgba(255,255,255,.105);box-shadow:0 12px 32px rgba(0,0,0,.42),inset 0 1px rgba(255,255,255,.03);
174
+ transition:border-color .18s ease,box-shadow .18s ease,filter .18s ease,opacity .18s ease;
175
+ }
176
+ .seat::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:linear-gradient(120deg,rgba(255,255,255,.035),transparent 32%)}
177
+ .seat.active{border-color:rgba(198,255,87,.67);box-shadow:0 0 0 2px rgba(198,255,87,.10),0 14px 38px rgba(0,0,0,.45),0 0 34px rgba(198,255,87,.12)}
178
+ .seat.active::after{content:"";position:absolute;inset:-5px;border:1px solid rgba(198,255,87,.18);border-radius:20px;animation:activeSeat 1.3s ease-in-out infinite;pointer-events:none}
179
+ @keyframes activeSeat{50%{opacity:.25;transform:scale(1.025)}}
180
+ .seat.busted{opacity:.32;filter:grayscale(.8) saturate(.2)}
181
+ .seat-head{position:relative;z-index:2}.seat-name{font-size:13px;max-width:120px}.seat-model{font-size:8.5px;margin-top:2px}.seat-pos{font-size:8px;background:rgba(255,255,255,.035)}
182
+ .seat-stack{position:relative;z-index:2;margin:7px 0 5px}.seat-stack strong{display:flex;align-items:center;gap:6px;font-size:15px}.seat-stack span{font-size:9px}
183
+ .chip-dot{width:12px;height:12px;border-radius:50%;background:repeating-conic-gradient(#f3f4ec 0 8deg,#db4f59 8deg 17deg);border:2px solid #b62e38;box-shadow:0 2px 5px rgba(0,0,0,.3);flex:0 0 auto}
184
+ .hole-cards{position:relative;z-index:3;gap:4px;min-height:51px}
185
+ .card{
186
+ position:relative;width:37px;height:51px;border-radius:7px;background:linear-gradient(145deg,#fff,#ecece6);color:#11151a;
187
+ border:1px solid rgba(255,255,255,.55);box-shadow:0 5px 12px rgba(0,0,0,.34),inset 0 0 0 1px rgba(0,0,0,.08);display:block;overflow:hidden;
188
+ transform-style:preserve-3d;will-change:transform,opacity;
189
+ }
190
+ .card.red{color:#d52f43}.card.black{color:#151a1f}
191
+ .card-corner{position:absolute;left:4px;top:3px;display:flex;flex-direction:column;align-items:center;line-height:.78;font-style:normal;font-size:9px;font-weight:900}.card-corner b{font-size:10px}.card-corner i{font-style:normal;font-size:8px;margin-top:2px}.card-corner.bottom{left:auto;top:auto;right:4px;bottom:3px;transform:rotate(180deg)}
192
+ .card-suit{position:absolute;inset:0;display:grid;place-items:center;font-size:22px;line-height:1;text-shadow:0 1px rgba(255,255,255,.4)}
193
+ .card.empty{display:grid;place-items:center;background:
194
+ linear-gradient(135deg,rgba(255,255,255,.04),transparent),
195
+ repeating-linear-gradient(45deg,#17232c 0 3px,#101a21 3px 6px);border:1px solid rgba(255,255,255,.09);box-shadow:inset 0 0 0 2px rgba(0,0,0,.16);color:rgba(255,255,255,.12)}
196
+ .card-back-mark{font-size:15px;color:rgba(255,255,255,.15)}
197
+ .board{gap:7px;min-height:70px;perspective:700px}.board .card{width:51px;height:70px;border-radius:9px}.board .card .card-suit{font-size:29px}.board .card .card-corner b{font-size:12px}.board .card .card-corner i{font-size:9px}
198
+ .last-action{position:relative;z-index:2;margin-top:5px;min-height:15px;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:#aab4bf}
199
+ .last-action.raise,.last-action.bet{color:#ffd96f}.last-action.call{color:#91cfff}.last-action.fold{color:#ff8f99}.last-action.check{color:#a9e894}
200
+ .fold-flash .hole-cards{animation:foldCards .55s ease both}@keyframes foldCards{50%{transform:translateY(-5px) rotate(-5deg);opacity:.45}100%{transform:translateY(8px) rotate(5deg);opacity:.62}}
201
+ .check-flash{animation:checkSeat .45s ease}@keyframes checkSeat{50%{box-shadow:0 0 0 5px rgba(127,214,255,.12),0 14px 38px rgba(0,0,0,.45)}}
202
+ .table-center{width:380px;z-index:3}.street-label{font-size:9px;letter-spacing:.24em;margin-bottom:9px}.pot-block{display:inline-flex;margin-top:12px;padding:6px 10px;border:1px solid rgba(255,255,255,.08);border-radius:999px;background:rgba(5,15,12,.38);backdrop-filter:blur(8px)}.pot-block strong{font-size:18px;color:#fff}
203
+ .action-toast{position:absolute;left:50%;top:-57px;transform:translateX(-50%);min-width:150px;padding:9px 13px;border-radius:999px;background:rgba(11,15,18,.92);border:1px solid rgba(255,255,255,.12);box-shadow:0 12px 30px rgba(0,0,0,.35);font-size:10px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;animation:toastIn .25s ease both;white-space:nowrap}.action-toast.raise,.action-toast.bet{color:#ffd96f}.action-toast.fold{color:#ff969e}.action-toast.call{color:#8bcaff}.action-toast.check{color:#b7ee9e}@keyframes toastIn{from{opacity:0;transform:translate(-50%,8px) scale(.95)}to{opacity:1;transform:translate(-50%,0) scale(1)}}
204
+ .flying-chip{position:absolute;width:17px;height:17px;border-radius:50%;background:repeating-conic-gradient(#f6f1df 0 11deg,#e44857 11deg 21deg);border:3px solid #be2635;box-shadow:0 3px 8px rgba(0,0,0,.55);will-change:transform,opacity}.flying-chip.chip-1{filter:hue-rotate(110deg)}.flying-chip.chip-2{filter:hue-rotate(220deg)}
205
+ .winner-banner{margin:0 14px 14px;border-radius:13px;text-align:center;background:linear-gradient(90deg,rgba(198,255,87,.07),rgba(198,255,87,.13),rgba(198,255,87,.07));animation:winnerGlow 1.8s ease-in-out infinite alternate}@keyframes winnerGlow{to{box-shadow:0 0 32px rgba(198,255,87,.13)}}
206
+ .inspector{height:calc(100vh - 92px);min-height:700px}.tabs{position:sticky;top:0;z-index:5;background:rgba(14,19,24,.94);backdrop-filter:blur(12px)}
207
+ .decision-card{background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.012))}.decision-clock{font-size:31px}.action-chip{border-radius:999px;padding:6px 8px}.decision-item{transition:transform .15s ease}.decision-item:first-child{background:rgba(198,255,87,.035)}
208
+
209
+ /* Tablet */
210
+ @media(max-width:1180px){
211
+ .workspace{grid-template-columns:1fr}.arena-card{min-height:760px}.poker-table{min-height:710px}.inspector{height:auto;min-height:460px}.tabs{top:0}.felt-ring{left:8%;right:8%}.field-grid{grid-template-columns:repeat(3,1fr)}
212
+ }
213
+
214
+ /* Mobile spectator mode */
215
+ @media(max-width:720px){
216
+ .app-shell{padding:8px}.topbar{gap:8px;margin-bottom:8px;align-items:flex-start}.topbar>div:first-child{min-width:0}.eyebrow{font-size:7px;letter-spacing:.12em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:52vw}h1{font-size:18px;gap:6px}.brand-mark{width:24px;height:24px;border-radius:7px;font-size:13px}.topbar-actions{gap:5px;max-width:48vw}.topbar-actions .button{padding:7px 8px;font-size:10px}.enginePill{display:none}.pill{display:none}
217
+ .arena-card{min-height:618px;border-radius:14px}.arena-head{height:40px;padding:0 10px;font-size:10px}.tournamentMeta{font-size:8px}.poker-table{min-height:565px;height:70vh;max-height:640px}.felt-ring{left:2.5%;right:2.5%;top:15%;bottom:15%;border-width:8px;box-shadow:inset 0 0 55px rgba(0,0,0,.4),0 5px 0 #101419,0 20px 46px rgba(0,0,0,.48)}.felt-ring::before{inset:8px}.felt-brand{top:64%;opacity:.09}.felt-brand strong{font-size:14px}.felt-brand small{font-size:5px;letter-spacing:.18em}.felt-brand span{font-size:17px}
218
+ .seat{width:110px;min-height:82px;padding:6px 7px;border-radius:11px}.seat.active::after{inset:-3px;border-radius:13px}.seat-name{font-size:10px;max-width:76px}.seat-pos{font-size:6px;padding:1px 3px}.seat-model{display:none}.seat-stack{margin:3px 0 2px}.seat-stack strong{font-size:10px;gap:4px}.seat-stack>span{font-size:7px}.chip-dot{width:8px;height:8px;border-width:1px}.hole-cards{gap:2px;min-height:35px}.card{width:24px;height:34px;border-radius:4px}.card-suit{font-size:14px}.card-corner{left:2px;top:2px;font-size:5px}.card-corner b{font-size:6px}.card-corner i{font-size:5px;margin-top:1px}.card-corner.bottom{right:2px;bottom:2px}.last-action{font-size:6px;min-height:8px;margin-top:2px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
219
+ .table-center{width:185px}.street-label{font-size:7px;margin-bottom:5px}.board{gap:3px;min-height:48px}.board .card{width:31px;height:44px;border-radius:5px}.board .card .card-suit{font-size:18px}.board .card .card-corner b{font-size:7px}.board .card .card-corner i{font-size:6px}.pot-block{margin-top:7px;padding:4px 7px}.pot-block strong{font-size:12px}.pot-block .muted{font-size:7px}.table-center>.mono{font-size:7px}.action-toast{top:-43px;min-width:110px;max-width:180px;font-size:7px;padding:6px 8px;overflow:hidden;text-overflow:ellipsis}
220
+ .winner-banner{margin:0 8px 8px;padding:10px;font-size:11px}.inspector{margin-top:8px;min-height:390px;border-radius:14px}.tabs{padding:5px}.tab{font-size:10px;padding:7px}.panel-block{padding:10px}.decision-player{font-size:13px}.decision-clock{font-size:24px}.decision-model{font-size:8px}.legal-actions{gap:4px}.action-chip{font-size:8px;padding:5px 6px}.decision-reason{font-size:10px}.decision-meta{font-size:8px}
221
+ .setup-dialog{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}.dialog-head,.dialog-footer{padding:11px 12px}.dialog-head h2{font-size:18px}.setup-grid{padding:10px;gap:10px}.setup-section{padding:10px}.field-grid{grid-template-columns:1fr 1fr}.connection-row,.browser-player-row{grid-template-columns:1fr 1fr;padding:8px}.connection-url,.connection-headers,.browser-player-row .model-field,.browser-player-row .provider-field{grid-column:1/3}.connection-status{grid-column:1/3}.dialog-footer{flex-direction:column;align-items:stretch}.dialog-footer .button{width:100%}
222
+ }
223
+
224
+ @media(max-width:420px){
225
+ .poker-table{min-height:540px;height:68vh}.seat{width:101px}.felt-ring{top:16%;bottom:16%}.table-center{width:170px}.board .card{width:28px;height:40px}.topbar-actions #exportBtn{display:none}
226
+ }
227
+
228
+ @media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}.seat{transition:none!important}}
229
+ .felt-ring::after{content:none!important}
230
+
231
+ /* Lobby-first seat configuration and compact navigation */
232
+ .app-shell{padding:10px 14px 18px}
233
+ .topbar{height:46px;max-width:1680px;margin:0 auto 9px;gap:12px;align-items:center}
234
+ .brandbar{display:flex;align-items:center;gap:8px;min-width:0}
235
+ .brand-copy{min-width:0;line-height:1.05}
236
+ .brand-title{font-size:16px;font-weight:900;letter-spacing:-.035em;white-space:nowrap}
237
+ .brand-subtitle{margin-top:3px;color:var(--muted);font-size:7.5px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap}
238
+ .brand-mark{width:28px;height:28px;border-radius:8px;font-size:15px;flex:0 0 auto}
239
+ .topbar-actions{gap:5px;justify-content:flex-end;min-width:0}
240
+ .top-action{min-height:30px;padding:6px 9px;border-radius:8px;display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:800;white-space:nowrap}
241
+ .action-icon{font-size:10px;line-height:1;opacity:.82}
242
+ .compact-pill{padding:5px 8px;font-size:9px;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}
243
+ .topbar .button:hover{transform:none;background:rgba(255,255,255,.065)}
244
+ .topbar .button.primary:hover{background:#d0ff73}
245
+ .workspace{max-width:1680px}
246
+ .arena-card{min-height:calc(100vh - 72px)}
247
+ .inspector{height:calc(100vh - 72px)}
248
+ .arena-head{height:40px;padding:0 13px;font-size:10px}
249
+ .arena-status{display:flex;align-items:center;font-weight:800;letter-spacing:.05em}
250
+
251
+ /* Clickable lobby seats */
252
+ .lobby-mode .felt-ring{filter:saturate(.86)}
253
+ .lobby-mode .felt-brand{opacity:.10}
254
+ .lobby-mode .board{opacity:.16;filter:saturate(.2)}
255
+ .lobby-mode .pot-block{background:rgba(4,15,11,.54);border-color:rgba(198,255,87,.13)}
256
+ .lobby-mode .pot-block strong{color:var(--accent)}
257
+ .lobby-seat{appearance:none;text-align:left;color:var(--text);cursor:pointer;overflow:hidden}
258
+ .lobby-seat:hover{opacity:1!important;filter:none!important;transform:translate(-50%,-50%) scale(1.035);border-color:rgba(198,255,87,.48);box-shadow:0 16px 38px rgba(0,0,0,.48),0 0 0 2px rgba(198,255,87,.08),0 0 28px rgba(198,255,87,.08)}
259
+ .lobby-seat:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
260
+ .empty-seat{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:100px;background:linear-gradient(180deg,rgba(18,25,30,.68),rgba(10,15,19,.64));border:1px dashed rgba(255,255,255,.16);box-shadow:0 10px 26px rgba(0,0,0,.25);opacity:.72}
261
+ .empty-seat-plus{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;border:1px solid rgba(198,255,87,.26);background:rgba(198,255,87,.06);color:var(--accent);font-size:19px;font-weight:400;line-height:1}
262
+ .empty-seat-number{font-size:9px;font-weight:900;text-transform:uppercase;letter-spacing:.11em;color:#d5dbe1}
263
+ .empty-seat-copy{font-size:7px;color:var(--muted);text-transform:uppercase;letter-spacing:.12em}
264
+ .configured-seat{min-height:106px}
265
+ .configured-seat::after{content:"";position:absolute;inset:auto 11px 0;height:2px;background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.45}
266
+ .configured-seat-meta{position:relative;z-index:2;display:flex;gap:5px;flex-wrap:wrap;margin-top:10px}
267
+ .configured-seat-meta span{font-size:7px;text-transform:uppercase;letter-spacing:.08em;padding:3px 5px;border-radius:999px;background:rgba(255,255,255,.045);color:var(--muted);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
268
+ .lobby-edit-hint{position:relative;z-index:2;margin-top:8px;font-size:8px;color:var(--accent);font-weight:800;text-transform:uppercase;letter-spacing:.08em}
269
+ .seat-summary{align-self:center;padding:5px 8px;border-radius:999px;border:1px solid rgba(198,255,87,.16);background:rgba(198,255,87,.055);color:var(--accent);font-size:9px;font-weight:900;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}
270
+
271
+ /* Dedicated seat editor */
272
+ .seat-dialog{width:min(650px,94vw);padding:0;border:1px solid rgba(255,255,255,.13);border-radius:18px;background:#0e1216;color:var(--text);box-shadow:0 30px 100px rgba(0,0,0,.7)}
273
+ .seat-dialog::backdrop{background:rgba(0,0,0,.72);backdrop-filter:blur(6px)}
274
+ .seat-dialog form{display:flex;flex-direction:column;min-height:0}
275
+ .seat-editor-body{padding:16px 18px}
276
+ .seat-editor-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
277
+ .seat-editor-grid label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.07em;display:flex;flex-direction:column;gap:5px}
278
+ .seat-model-field,.seat-provider-field{grid-column:1/3}
279
+ .seat-editor-grid input:focus,.seat-editor-grid select:focus{border-color:rgba(198,255,87,.42);box-shadow:0 0 0 3px rgba(198,255,87,.05)}
280
+ .seat-editor-hint{margin-top:12px;padding-top:11px;border-top:1px solid rgba(255,255,255,.06);font-size:10px;line-height:1.55;color:var(--muted)}
281
+ .seat-lock-notice{margin-bottom:12px;padding:9px 10px;border:1px solid rgba(241,195,90,.2);border-radius:9px;background:rgba(241,195,90,.06);color:#f2d78d;font-size:10px}
282
+ .seat-editor-footer{margin-top:0}
283
+ .seat-footer-actions{display:flex;gap:7px;margin-left:auto}
284
+ .seat-dialog input:disabled,.seat-dialog select:disabled{opacity:.65;cursor:not-allowed}
285
+
286
+ @media(max-width:1180px){
287
+ .arena-card{min-height:730px}.inspector{height:auto}.poker-table{min-height:680px}
288
+ }
289
+ @media(max-width:760px){
290
+ .app-shell{padding:6px}
291
+ .topbar{height:40px;margin-bottom:6px;gap:6px}
292
+ .brandbar{gap:6px}.brand-mark{width:25px;height:25px;font-size:13px}.brand-title{font-size:13px}.brand-subtitle{display:none}
293
+ .topbar-actions{gap:3px;overflow-x:auto;scrollbar-width:none}.topbar-actions::-webkit-scrollbar{display:none}
294
+ .compact-pill{display:none!important}
295
+ .top-action{min-width:29px;min-height:29px;padding:5px 7px;justify-content:center}
296
+ .top-action .action-label{display:none}.top-action .action-icon{font-size:11px}
297
+ #startTopBtn .action-label,#pauseBtn .action-label,#stopBtn .action-label{display:inline;font-size:9px}
298
+ #startTopBtn,#pauseBtn,#stopBtn{padding-inline:8px}
299
+ .arena-card{min-height:610px}.arena-head{height:35px;padding:0 8px}.tournamentMeta{font-size:7px;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
300
+ .poker-table{min-height:560px;height:69vh;max-height:630px}
301
+ .empty-seat{min-height:70px}.empty-seat-plus{width:20px;height:20px;font-size:14px}.empty-seat-number{font-size:6px}.empty-seat-copy{font-size:5px}
302
+ .configured-seat-meta{margin-top:5px}.configured-seat-meta span{font-size:5px;padding:2px 3px}.lobby-edit-hint{font-size:5px;margin-top:4px}
303
+ .seat-dialog{width:calc(100vw - 14px);max-width:none;border-radius:15px}.seat-editor-body{padding:12px}.seat-editor-grid{gap:8px}.seat-dialog .dialog-head,.seat-dialog .dialog-footer{padding:10px 12px}
304
+ }
305
+ @media(max-width:440px){
306
+ .brand-title{font-size:12px}.topbar{gap:4px}.topbar-actions{max-width:72vw}
307
+ .top-action{padding:4px 6px}.seat-editor-grid{grid-template-columns:1fr}.seat-model-field,.seat-provider-field{grid-column:1}.seat-editor-footer{align-items:stretch}.seat-footer-actions{margin-left:0}.seat-footer-actions .button{flex:1}
308
+ .empty-seat{min-height:64px}.empty-seat-plus{width:18px;height:18px}.configured-seat{min-height:76px}
309
+ }
310
+ .button:disabled,.icon-button:disabled{opacity:.42;cursor:not-allowed;transform:none!important}
311
+
312
+ /* Collision-safe perimeter seating -------------------------------------------------
313
+ Seat centers are positioned in JS from their real rendered footprint. These
314
+ rules keep the cards compact enough for the smallest supported phone widths
315
+ while preserving readable hierarchy and generous hit targets. */
316
+ .seats-layer .seat[data-ring-point]{will-change:left,top}
317
+ .lobby-mode .lobby-seat{transition:left .24s ease,top .24s ease,border-color .18s ease,box-shadow .18s ease,filter .18s ease,opacity .18s ease,transform .18s ease}
318
+ @media(max-width:360px){
319
+ .seat{width:92px;min-height:76px;padding:5px 6px}
320
+ .seat-name{max-width:64px;font-size:9px}
321
+ .empty-seat{min-height:58px}
322
+ .empty-seat-plus{width:17px;height:17px;font-size:13px}
323
+ .empty-seat-number{font-size:5.5px}
324
+ .empty-seat-copy{font-size:4.5px}
325
+ .configured-seat{min-height:70px}
326
+ .configured-seat-meta{gap:3px;margin-top:4px}
327
+ .configured-seat-meta span{font-size:4.5px;padding:2px 3px}
328
+ .lobby-edit-hint{font-size:4.5px;margin-top:3px}
329
+ }
330
+
331
+ /* 0.2.5 — dark precision polish ------------------------------------------------ */
332
+ :root{
333
+ --bg:#08090b;
334
+ --panel:#0d0f12;
335
+ --panel-2:#121519;
336
+ --panel-3:#171a1f;
337
+ --line:rgba(224,232,238,.075);
338
+ --line-strong:rgba(224,232,238,.13);
339
+ --text:#e9edf0;
340
+ --muted:#77818b;
341
+ --accent:#9fb4c5;
342
+ --accent-soft:rgba(159,180,197,.09);
343
+ --success:#72b98a;
344
+ --blue:#6f9fd2;
345
+ --gold:#c5a15c;
346
+ --danger:#c85e69;
347
+ --felt:#0d5339;
348
+ --felt-2:#073524;
349
+ --rail:#1b1e22;
350
+ --rail-2:#0b0d0f;
351
+ --shadow:0 24px 72px rgba(0,0,0,.42);
352
+ }
353
+ html,body{margin:0;width:100%;background:var(--bg)}
354
+ body{
355
+ color:var(--text);
356
+ background:
357
+ radial-gradient(circle at 50% -12%,rgba(67,76,84,.16),transparent 36%),
358
+ linear-gradient(180deg,#0a0b0d 0%,#07080a 100%);
359
+ overflow-x:hidden;
360
+ }
361
+ body:has(dialog[open]){overflow:hidden}
362
+ .button,.icon-button{background:#121519;border-color:var(--line);color:#dce2e7;box-shadow:none}
363
+ .button:hover,.icon-button:hover{border-color:var(--line-strong);background:#171a1f}
364
+ .button.primary{background:#d5dce1;border-color:#d5dce1;color:#0a0c0e;box-shadow:0 4px 14px rgba(0,0,0,.18)}
365
+ .button.primary:hover{background:#e1e6ea!important;border-color:#e1e6ea}
366
+ .button.danger{color:#e79aa1;border-color:rgba(200,94,105,.22);background:rgba(200,94,105,.07)}
367
+ .sound-button.active{border-color:rgba(111,159,210,.26);color:#9bc2ea;background:rgba(111,159,210,.07)}
368
+ .pill.good{color:#9bd2ad;background:rgba(114,185,138,.08);border-color:rgba(114,185,138,.18)}
369
+ .status-dot.running{background:var(--success);box-shadow:0 0 12px rgba(114,185,138,.32)}
370
+ .status-dot.paused{background:var(--gold)}
371
+ .status-dot.error{background:var(--danger)}
372
+ .good-text{color:#92cfa6!important}.bad-text{color:#df8a92!important}
373
+ .brand-mark{background:linear-gradient(145deg,#d2d9de,#8fa2b0);color:#080a0b;box-shadow:0 6px 20px rgba(0,0,0,.24)}
374
+ .eyebrow,.dialog-kicker,.section-label{color:#82909b}
375
+ .arena-card,.inspector{background:rgba(12,14,17,.94);border-color:var(--line);box-shadow:0 18px 56px rgba(0,0,0,.34)}
376
+ .arena-head{background:linear-gradient(180deg,rgba(255,255,255,.018),transparent)}
377
+ .poker-table{background:radial-gradient(ellipse at 50% 52%,rgba(20,78,54,.12),transparent 50%),#0b0d10}
378
+ .felt-ring{
379
+ background:
380
+ radial-gradient(ellipse at 50% 36%,rgba(255,255,255,.045),transparent 43%),
381
+ repeating-radial-gradient(ellipse at 45% 45%,rgba(255,255,255,.008) 0 1px,transparent 1px 5px),
382
+ radial-gradient(ellipse at 50% 52%,#146047 0%,var(--felt) 44%,var(--felt-2) 100%);
383
+ border-color:var(--rail);
384
+ box-shadow:inset 0 0 0 1px rgba(255,255,255,.035),inset 0 0 105px rgba(0,0,0,.42),0 8px 0 var(--rail-2),0 30px 72px rgba(0,0,0,.5)
385
+ }
386
+ .felt-ring::before{border-color:rgba(255,255,255,.045)}
387
+ .felt-brand{opacity:.085}
388
+ .seat{background:linear-gradient(180deg,rgba(25,28,33,.985),rgba(11,13,16,.99));border-color:rgba(232,238,242,.09)}
389
+ .seat.active{border-color:rgba(114,185,138,.46);box-shadow:0 0 0 2px rgba(114,185,138,.07),0 14px 38px rgba(0,0,0,.46),0 0 24px rgba(114,185,138,.07)}
390
+ .seat.active::after{border-color:rgba(114,185,138,.12)}
391
+ .configured-seat::after{background:linear-gradient(90deg,transparent,var(--success),transparent);opacity:.38}
392
+ .lobby-seat:hover{border-color:rgba(159,180,197,.3);box-shadow:0 16px 38px rgba(0,0,0,.48),0 0 0 2px rgba(159,180,197,.045)}
393
+ .empty-seat-plus{border-color:rgba(159,180,197,.2);background:rgba(159,180,197,.055);color:#b8c6d0}
394
+ .lobby-edit-hint{color:#9babb7}
395
+ .seat-summary{border-color:rgba(114,185,138,.16);background:rgba(114,185,138,.055);color:#98cbaa}
396
+ .last-action.raise,.last-action.bet,.action-toast.raise,.action-toast.bet{color:#d8b56d}
397
+ .last-action.call,.action-toast.call{color:#8eb6df}
398
+ .last-action.fold,.action-toast.fold{color:#d87982}
399
+ .last-action.check,.action-toast.check{color:#8fc5a1}
400
+ .decision-item{border-left-color:rgba(111,159,210,.42)}
401
+ .decision-item:first-child{background:rgba(111,159,210,.035)}
402
+ .event-type{color:#94aaba}
403
+ .winner-banner{border-color:rgba(114,185,138,.2);background:rgba(114,185,138,.065);color:#a6d5b5;animation:none}
404
+
405
+ /* True viewport fit on desktop: no accidental 2–20px document overflow. */
406
+ @media(min-width:1181px){
407
+ html,body{height:100%;overflow:hidden}
408
+ .app-shell{height:100dvh;min-height:0;padding:10px 14px;display:flex;flex-direction:column}
409
+ .topbar{flex:0 0 46px;height:46px;margin:0 auto 8px;width:100%}
410
+ .workspace{flex:1;min-height:0;width:100%;height:auto}
411
+ .arena-card,.inspector{height:100%;min-height:0}
412
+ .poker-table{flex:1;min-height:0}
413
+ .tab-panel{min-height:0}
414
+ }
415
+ @media(min-width:1181px) and (max-height:730px){
416
+ .app-shell{padding-top:7px;padding-bottom:7px}
417
+ .topbar{flex-basis:40px;height:40px;margin-bottom:6px}
418
+ .brand-mark{width:25px;height:25px}.brand-title{font-size:14px}.brand-subtitle{display:none}
419
+ .top-action{min-height:28px;padding:5px 8px}
420
+ .arena-head{height:36px}
421
+ .seat{width:164px;min-height:104px;padding:8px 9px}.seat-model{font-size:7.5px}.hole-cards{min-height:45px}.card{width:33px;height:45px}
422
+ .board .card{width:45px;height:62px}.table-center{width:340px}
423
+ }
424
+ @media(max-width:1180px){
425
+ html,body{height:auto;min-height:100%;overflow-y:auto}
426
+ .app-shell{height:auto;min-height:100dvh}
427
+ }
428
+
429
+ /* Modal system */
430
+ dialog{color-scheme:dark}
431
+ .setup-dialog,.seat-dialog{
432
+ background:#0b0d10;
433
+ border:1px solid #25292f;
434
+ border-radius:20px;
435
+ box-shadow:0 36px 120px rgba(0,0,0,.72),0 0 0 1px rgba(255,255,255,.018) inset;
436
+ }
437
+ .setup-dialog{width:min(1240px,calc(100vw - 36px));height:min(820px,calc(100dvh - 36px))}
438
+ .seat-dialog{width:min(640px,calc(100vw - 28px));max-height:min(760px,calc(100dvh - 28px))}
439
+ .setup-dialog::backdrop,.seat-dialog::backdrop{background:rgba(2,3,4,.78);backdrop-filter:blur(8px) saturate(.7)}
440
+ .dialog-head{
441
+ flex:0 0 auto;padding:18px 20px 16px;border-bottom:1px solid var(--line);
442
+ background:linear-gradient(180deg,#111419,#0d0f12);gap:18px
443
+ }
444
+ .dialog-title-copy{min-width:0}.dialog-title-copy h2{margin:3px 0 4px;font-size:22px;letter-spacing:-.035em}.dialog-title-copy p{color:var(--muted);font-size:11px;line-height:1.45}
445
+ .dialog-kicker{font-size:8px;font-weight:900;letter-spacing:.17em;text-transform:uppercase}
446
+ .dialog-head-actions{display:flex;align-items:center;gap:9px;flex:0 0 auto}
447
+ .modal-badge{padding:5px 8px;border:1px solid var(--line);border-radius:999px;color:#87929c;background:#0a0c0f;font-size:8px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
448
+ .seat-badge-modal{color:#93bca1;border-color:rgba(114,185,138,.15);background:rgba(114,185,138,.04)}
449
+ .dialog-head .icon-button{width:31px;height:31px;border-radius:9px;font-size:18px;color:#8d98a2;background:#0b0d10}
450
+ .setup-grid{padding:16px 18px 20px;gap:14px;background:#090b0d}
451
+ .setup-section{padding:15px;border:1px solid var(--line);border-radius:14px;background:#0e1114;box-shadow:0 1px rgba(255,255,255,.015) inset}
452
+ .section-head{align-items:center}.section-head h3{margin:2px 0 4px;font-size:14px;letter-spacing:-.015em}.section-label{font-size:7.5px;font-weight:900;letter-spacing:.13em;text-transform:uppercase}
453
+ .connections-editor{gap:9px}
454
+ .connection-row{padding:11px;border:1px solid var(--line);border-radius:12px;background:#0a0c0f}
455
+ .connection-row:hover{border-color:rgba(224,232,238,.11)}
456
+ .field-grid{gap:10px}
457
+ .field-grid label,.connection-row label,.seat-editor-grid label{color:#7c8791;font-size:8px;font-weight:800;letter-spacing:.075em}
458
+ input,select{
459
+ min-height:38px;padding:9px 10px;background:#090b0e;border:1px solid #252a30;border-radius:9px;color:#e4e9ed;
460
+ transition:border-color .14s ease,box-shadow .14s ease,background .14s ease
461
+ }
462
+ input:hover,select:hover{border-color:#30363d;background:#0b0e11}
463
+ input:focus,select:focus,.seat-editor-grid input:focus,.seat-editor-grid select:focus{border-color:#536777;box-shadow:0 0 0 3px rgba(111,159,210,.07);background:#0b0e11}
464
+ input::placeholder{color:#4e5862}
465
+ .setup-note{margin-top:10px;display:flex;gap:8px;align-items:flex-start;padding:9px 10px;border-radius:9px;background:#0a0c0f;border:1px solid rgba(255,255,255,.045);color:#69737d;font-size:9px;line-height:1.5}
466
+ .note-dot{width:6px;height:6px;margin-top:4px;border-radius:50%;background:var(--blue);opacity:.72;flex:0 0 auto}
467
+ .dialog-footer{flex:0 0 auto;padding:12px 18px;border-top:1px solid var(--line);background:#0c0e11}
468
+ .dialog-security{display:flex;align-items:center;gap:8px;color:#6f7983;font-size:9px;line-height:1.35;max-width:720px}.security-dot{width:6px;height:6px;border-radius:50%;background:var(--success);opacity:.75;flex:0 0 auto}
469
+ .dialog-footer .button.primary{min-width:120px}
470
+ .setup-error{border-color:rgba(200,94,105,.18);background:rgba(200,94,105,.06);color:#dc9299}
471
+
472
+ .seat-dialog form{max-height:inherit}
473
+ .seat-editor-body{padding:18px 20px;background:#090b0d;overflow:auto}
474
+ .seat-editor-grid{gap:12px}
475
+ .seat-model-field,.seat-provider-field{grid-column:1/3}
476
+ .model-input-wrap{display:grid;grid-template-columns:minmax(0,1fr) 38px;gap:6px}
477
+ .model-input-wrap input{min-width:0}
478
+ .field-icon-button{width:38px;height:38px;border:1px solid #252a30;border-radius:9px;background:#0d1013;color:#88949e;font-size:16px;cursor:pointer;transition:.14s ease}
479
+ .field-icon-button:hover{background:#14181c;color:#c0c9d0;border-color:#343b43}.field-icon-button:disabled{opacity:.42;cursor:wait}
480
+ .field-help{margin-top:1px;color:#66717b;font-size:8px;line-height:1.35;text-transform:none;letter-spacing:0;font-weight:600;min-height:11px}
481
+ .field-help[data-tone="good"]{color:#7fae8f}.field-help[data-tone="bad"]{color:#c77a82}
482
+ .seat-editor-hint{display:flex;gap:9px;align-items:flex-start;margin-top:15px;padding:11px 12px;border:1px solid rgba(111,159,210,.09);border-radius:10px;background:rgba(111,159,210,.025);font-size:9px;color:#75818b}
483
+ .privacy-mark{color:#7ea8d2;font-size:10px;line-height:1.4}
484
+ .seat-lock-notice{border-color:rgba(197,161,92,.16);background:rgba(197,161,92,.05);color:#c7ad78}
485
+ .seat-editor-footer{background:#0c0e11}
486
+
487
+ @media(max-width:760px){
488
+ .setup-dialog{width:100vw;height:100dvh;max-height:none;border:0;border-radius:0}
489
+ .dialog-head{padding:13px 14px}.dialog-title-copy h2{font-size:19px}.dialog-title-copy p{font-size:9px}.modal-badge{display:none}
490
+ .setup-grid{padding:10px;gap:10px}.setup-section{padding:11px;border-radius:12px}
491
+ .connection-row{padding:9px}.dialog-footer{padding:10px 12px}
492
+ .dialog-security{font-size:8px}
493
+ .seat-dialog{width:calc(100vw - 12px);max-height:calc(100dvh - 12px);border-radius:16px}
494
+ .seat-editor-body{padding:12px}.seat-editor-grid{gap:9px}
495
+ }
496
+ @media(max-width:440px){
497
+ .dialog-head-actions{gap:5px}.seat-editor-grid{grid-template-columns:1fr}.seat-model-field,.seat-provider-field{grid-column:1}
498
+ .seat-footer-actions{width:100%}.seat-editor-footer{gap:8px}.seat-editor-footer>.button{width:100%}
499
+ }
500
+ @media(min-width:761px){
501
+ .setup-dialog{height:auto;max-height:calc(100dvh - 36px)}
502
+ .setup-dialog form{height:auto;max-height:calc(100dvh - 36px)}
503
+ .setup-grid{max-height:calc(100dvh - 180px)}
504
+ }
505
+ @media(min-width:761px){
506
+ .setup-dialog{max-height:min(780px,calc(100dvh - 36px))}
507
+ .setup-dialog form{max-height:min(780px,calc(100dvh - 36px))}
508
+ .setup-grid{max-height:min(620px,calc(100dvh - 180px))}
509
+ }
510
+ @media(min-width:761px){
511
+ .setup-dialog{height:min(720px,calc(100dvh - 36px));max-height:min(720px,calc(100dvh - 36px))}
512
+ .setup-dialog form{height:100%;max-height:100%}
513
+ .setup-grid{max-height:none;min-height:0;flex:1}
514
+ }
515
+
516
+ /* 0.2.6 — reliability telemetry + table hierarchy -------------------------- */
517
+ .winner-banner{
518
+ flex:0 0 auto;
519
+ margin:10px 12px 0;
520
+ min-height:44px;
521
+ padding:9px 13px;
522
+ display:flex;
523
+ align-items:center;
524
+ justify-content:center;
525
+ gap:9px;
526
+ border:1px solid rgba(114,185,138,.18);
527
+ border-radius:11px;
528
+ background:linear-gradient(90deg,rgba(114,185,138,.035),rgba(114,185,138,.09),rgba(114,185,138,.035));
529
+ color:#d8e9de;
530
+ box-shadow:0 8px 26px rgba(0,0,0,.16);
531
+ font-size:12px;
532
+ line-height:1.2;
533
+ letter-spacing:-.01em;
534
+ }
535
+ .winner-icon{font-size:17px;filter:saturate(.75)}
536
+ .winner-line{display:flex;align-items:baseline;justify-content:center;gap:6px;min-width:0;flex-wrap:wrap}
537
+ .winner-line strong{font-size:13px;color:#f0f5f2}
538
+ .winner-line b{font-weight:800;color:#9dcfaf}
539
+
540
+ .table-brand{
541
+ display:inline-flex;
542
+ align-items:center;
543
+ justify-content:center;
544
+ gap:7px;
545
+ margin:0 auto 10px;
546
+ padding:5px 9px;
547
+ border:1px solid rgba(255,255,255,.055);
548
+ border-radius:999px;
549
+ background:rgba(3,18,12,.18);
550
+ color:rgba(238,246,241,.54);
551
+ backdrop-filter:blur(5px);
552
+ user-select:none;
553
+ }
554
+ .table-brand-mark{font-size:13px;color:rgba(157,207,175,.72);line-height:1}
555
+ .table-brand-copy{display:flex;align-items:baseline;gap:7px;white-space:nowrap}
556
+ .table-brand-copy strong{font-size:10px;letter-spacing:-.015em;color:rgba(239,246,242,.65)}
557
+ .table-brand-copy small{font-size:5.5px;font-weight:800;text-transform:uppercase;letter-spacing:.16em;color:rgba(216,227,221,.34)}
558
+ .street-label{margin-top:0}
559
+
560
+ /* Hole cards prioritize the rank in the corner; the large center suit carries suit identity. */
561
+ .hole-cards .card.rank-only-corners{width:39px;height:54px;border-radius:7px}
562
+ .hole-cards .card.rank-only-corners .card-corner{left:4px;top:4px;line-height:1}
563
+ .hole-cards .card.rank-only-corners .card-corner b{font-size:12px;letter-spacing:-.04em}
564
+ .hole-cards .card.rank-only-corners .card-corner.bottom{left:auto;top:auto;right:4px;bottom:4px}
565
+ .hole-cards .card.rank-only-corners .card-suit{font-size:24px}
566
+
567
+ .stat-reliability{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;margin-top:6px;padding-top:7px;border-top:1px solid var(--line)}
568
+ .stat-reliability span{display:flex;justify-content:space-between;gap:4px;padding:4px 5px;border-radius:6px;background:rgba(255,255,255,.018);color:#717c86;font-size:7px;text-transform:uppercase;letter-spacing:.035em}
569
+ .stat-reliability b{color:#aeb8c0;font-size:8px}
570
+
571
+ @media(max-width:720px){
572
+ .winner-banner{margin:6px 7px 0;min-height:36px;padding:7px 9px;font-size:9px;gap:6px}
573
+ .winner-icon{font-size:13px}.winner-line{gap:4px}.winner-line strong{font-size:10px}
574
+ .table-brand{margin-bottom:6px;padding:3px 6px;gap:4px}.table-brand-mark{font-size:9px}.table-brand-copy{gap:4px}.table-brand-copy strong{font-size:7px}.table-brand-copy small{font-size:4px;letter-spacing:.11em}
575
+ .hole-cards .card.rank-only-corners{width:25px;height:36px}.hole-cards .card.rank-only-corners .card-corner{left:2px;top:2px}.hole-cards .card.rank-only-corners .card-corner b{font-size:7px}.hole-cards .card.rank-only-corners .card-corner.bottom{right:2px;bottom:2px}.hole-cards .card.rank-only-corners .card-suit{font-size:15px}
576
+ .stat-reliability{grid-template-columns:repeat(2,minmax(0,1fr))}
577
+ }
578
+
579
+ /* 0.2.7 — context, table HUD, modal polish, decision sanity suite --------- */
580
+ :root{
581
+ --bg:#07090b;
582
+ --panel:#0d1014;
583
+ --panel-2:#12161b;
584
+ --panel-3:#171c22;
585
+ --line:rgba(232,238,243,.085);
586
+ --line-strong:rgba(232,238,243,.14);
587
+ --text:#eef2f4;
588
+ --muted:#77838d;
589
+ --success:#72b98a;
590
+ --blue:#6f9fd2;
591
+ --amber:#c5a15c;
592
+ --danger:#c85e69;
593
+ --accent:#92c9a4;
594
+ --accent-soft:rgba(114,185,138,.09);
595
+ --felt:#104a36;
596
+ --felt-2:#092d22;
597
+ }
598
+
599
+ /* Compact semantic information directly below community cards. */
600
+ .table-hud{
601
+ margin:12px auto 0;
602
+ display:flex;
603
+ justify-content:center;
604
+ align-items:stretch;
605
+ gap:5px;
606
+ max-width:100%;
607
+ flex-wrap:wrap;
608
+ }
609
+ .hud-pill{
610
+ min-width:58px;
611
+ padding:5px 8px 6px;
612
+ display:flex;
613
+ flex-direction:column;
614
+ align-items:center;
615
+ gap:1px;
616
+ border:1px solid rgba(235,242,238,.075);
617
+ border-radius:8px;
618
+ background:rgba(4,18,13,.30);
619
+ box-shadow:0 5px 16px rgba(0,0,0,.10),inset 0 1px rgba(255,255,255,.018);
620
+ backdrop-filter:blur(7px);
621
+ }
622
+ .hud-pill span{font-size:6.5px;font-weight:900;letter-spacing:.13em;color:rgba(222,232,227,.40)}
623
+ .hud-pill strong{font-size:10px;font-weight:850;color:rgba(244,248,246,.84);font-variant-numeric:tabular-nums;white-space:nowrap}
624
+ .hud-pot{border-color:rgba(114,185,138,.13);background:rgba(28,88,62,.18)}
625
+ .hud-pot strong{font-size:14px;color:#e8f4ec}
626
+ .lobby-mode .hud-pill{opacity:.64}.lobby-mode .hud-pot{opacity:1}
627
+
628
+ /* Dark modal system: clear hierarchy, restrained accents, better scanning. */
629
+ .setup-dialog,.seat-dialog,.tests-dialog{
630
+ position:relative;
631
+ overflow:hidden;
632
+ border:1px solid #252a30;
633
+ background:#090b0e;
634
+ box-shadow:0 42px 150px rgba(0,0,0,.78),0 0 0 1px rgba(255,255,255,.018) inset;
635
+ }
636
+ .setup-dialog::before,.seat-dialog::before,.tests-dialog::before{
637
+ content:"";position:absolute;z-index:4;left:0;right:0;top:0;height:2px;
638
+ background:linear-gradient(90deg,transparent,rgba(111,159,210,.50) 27%,rgba(114,185,138,.55) 62%,transparent);
639
+ pointer-events:none;
640
+ }
641
+ .dialog-head{background:linear-gradient(180deg,#111419 0%,#0c0f12 100%);border-bottom-color:#20252b}
642
+ .dialog-head h2{color:#f2f5f7}.dialog-kicker{color:#71808b}
643
+ .dialog-title-copy p{max-width:720px;color:#707c86}
644
+ .setup-section{background:linear-gradient(180deg,#0e1115,#0b0e11);border-color:#20252b}
645
+ .setup-section:hover{border-color:#282e35}
646
+ .dialog-footer{background:#0b0e11;border-top-color:#20252b}
647
+ .seat-editor-body{background:linear-gradient(180deg,#090b0e,#080a0d)}
648
+ .seat-editor-hint{background:rgba(111,159,210,.025);border-color:rgba(111,159,210,.10)}
649
+
650
+ .tests-dialog{
651
+ width:min(1320px,calc(100vw - 32px));
652
+ height:min(850px,calc(100dvh - 32px));
653
+ padding:0;border-radius:20px;color:var(--text);
654
+ }
655
+ .tests-dialog::backdrop{background:rgba(2,3,4,.80);backdrop-filter:blur(8px) saturate(.7)}
656
+ .tests-shell{height:100%;display:flex;flex-direction:column;min-height:0}
657
+ .tests-body{flex:1;min-height:0;overflow:auto;padding:16px 18px 20px;background:#080a0c}
658
+ .tests-toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:13px 14px;border:1px solid #20252b;border-radius:12px;background:#0d1014;position:sticky;top:0;z-index:3;box-shadow:0 8px 22px rgba(0,0,0,.22)}
659
+ .tests-copy{display:flex;flex-direction:column;gap:3px}.tests-copy strong{font-size:12px}.tests-copy span{font-size:9px;color:var(--muted);line-height:1.4}
660
+ .tests-status{font-size:9px;line-height:1.5;padding:10px 2px}
661
+ .tests-empty{padding:34px 20px;border:1px dashed #252b31;border-radius:12px;text-align:center;color:#68747e;font-size:11px}
662
+ .tests-summary{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:9px}.tests-summary span{padding:5px 8px;border:1px solid #20252b;border-radius:999px;background:#0c0f12;color:#77838d;font-size:8px;text-transform:uppercase;letter-spacing:.06em}.tests-summary b{color:#dce3e7;font-size:9px}
663
+ .tests-grid{min-width:860px;border:1px solid #20252b;border-radius:12px;overflow:hidden;background:#0b0e11}
664
+ .tests-grid-head,.tests-grid-row{display:grid;grid-template-columns:minmax(240px,1.35fr) repeat(var(--test-agent-count,3),minmax(180px,1fr))}
665
+ .tests-grid-head{position:sticky;top:61px;z-index:2;background:#11151a;border-bottom:1px solid #252b31}
666
+ .tests-grid-head>div{padding:9px 10px;border-right:1px solid #20252b;color:#7c8790;font-size:8px;font-weight:850;text-transform:uppercase;letter-spacing:.07em}.tests-grid-head>div:last-child{border-right:0}.tests-grid-head strong{display:block;color:#dce2e6;font-size:9px;text-transform:none;letter-spacing:0}.tests-grid-head small{display:block;margin-top:2px;color:#65717a;font-size:7px;text-transform:none;letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
667
+ .tests-grid-row{border-bottom:1px solid #1d2227}.tests-grid-row:last-child{border-bottom:0}.tests-grid-row>div{border-right:1px solid #1d2227}.tests-grid-row>div:last-child{border-right:0}
668
+ .test-spot{padding:10px 11px;background:#0c0f12}.test-spot>span{display:block;color:#63717a;font-size:7px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}.test-spot strong{display:block;margin-top:3px;font-size:10px;color:#e1e6e9}.test-spot p{margin-top:4px;color:#6d7982;font-size:8px;line-height:1.4}.test-spot em{display:block;margin-top:5px;color:#829a89;font-size:7px;font-style:normal;font-weight:800}
669
+ .test-cell{padding:9px 10px;min-height:82px;background:#090c0f;color:#75818a;font-size:8px}.test-cell.pass{background:rgba(114,185,138,.035)}.test-cell.fail{background:rgba(200,94,105,.035)}.test-cell.running{display:flex;align-items:center;gap:6px;color:#8c9aa5}.test-cell.pending{display:grid;place-items:center}.test-cell-top{display:flex;justify-content:space-between;gap:6px;align-items:flex-start}.test-cell-top strong{font-size:7px;letter-spacing:.08em;color:#7fbe93}.test-cell.fail .test-cell-top strong,.test-cell.fail>strong{color:#d27d85}.test-cell-top b{font-size:8px;color:#dce2e5;text-align:right}.test-cell>span{display:block;margin-top:3px;color:#5f6b74;font-size:7px}.test-cell p{margin:5px 0 0;color:#7b8790;line-height:1.35;font-size:7.5px}.test-state-dot{width:6px;height:6px;border-radius:50%;background:var(--blue);box-shadow:0 0 0 3px rgba(111,159,210,.08);animation:testPulse 1s infinite alternate}@keyframes testPulse{to{opacity:.35}}
670
+ .tests-footer{justify-content:space-between}.tests-footer .button{flex:0 0 auto}
671
+
672
+ @media(max-width:720px){
673
+ .table-hud{gap:3px;margin-top:7px;max-width:205px}.hud-pill{min-width:36px;padding:3px 4px 4px;border-radius:6px}.hud-pill span{font-size:4.5px}.hud-pill strong{font-size:7px}.hud-pot strong{font-size:9px}
674
+ .tests-dialog{width:100vw;height:100dvh;max-height:none;border:0;border-radius:0}.tests-body{padding:10px}.tests-toolbar{top:0;padding:10px;align-items:flex-end}.tests-copy span{font-size:8px}.tests-grid{min-width:760px}.tests-grid-head{top:55px}.tests-footer{align-items:stretch}.tests-footer .button{width:100%}
675
+ }
676
+ .poker-profile{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;margin-top:9px;padding:7px;border:1px solid rgba(114,185,138,.09);border-radius:8px;background:rgba(114,185,138,.025)}
677
+ .poker-profile>div{text-align:center;min-width:0}.poker-profile b{display:block;color:#b9d9c4;font-size:9px;font-variant-numeric:tabular-nums}.poker-profile span{display:block;margin-top:2px;color:#65726b;font-size:6px;font-weight:900;letter-spacing:.07em}
678
+ .seat.all-in:not(.busted){border-color:rgba(197,161,92,.28);box-shadow:0 10px 28px rgba(0,0,0,.32),0 0 24px rgba(197,161,92,.055)}
679
+ .seat.all-in:not(.busted) .last-action{color:#c7ad78}
680
+ @media(max-width:720px){.table-center{width:220px}.table-hud{max-width:220px;flex-wrap:nowrap}.hud-pill{min-width:0;flex:1 1 0;padding-left:3px;padding-right:3px}}
681
+
682
+ /* 0.2.8 — viewport-fit table, lighter rendering, refined felt identity -------- */
683
+ .table-brand{
684
+ margin:0 auto 12px;
685
+ padding:0;
686
+ gap:8px;
687
+ border:0;
688
+ border-radius:0;
689
+ background:transparent;
690
+ backdrop-filter:none;
691
+ color:rgba(231,240,235,.62);
692
+ opacity:.82;
693
+ }
694
+ .table-brand-mark{
695
+ width:22px;height:22px;display:grid;place-items:center;
696
+ border:1px solid rgba(154,203,171,.23);border-radius:7px;
697
+ background:rgba(6,34,23,.34);color:#9bc9aa;font-size:11px;
698
+ box-shadow:inset 0 1px rgba(255,255,255,.025);
699
+ }
700
+ .table-brand-copy{display:grid;gap:1px;text-align:left;line-height:1;align-items:start}
701
+ .table-brand-copy strong{font-size:11px;font-weight:850;letter-spacing:-.025em;color:rgba(240,246,242,.76)}
702
+ .table-brand-copy small{font-size:5.5px;letter-spacing:.18em;color:rgba(215,229,220,.34)}
703
+
704
+ /* Keep paint work local and avoid expensive permanent GPU layers. */
705
+ .poker-table{contain:layout paint style}
706
+ .seat{contain:layout paint style;will-change:auto}
707
+ .card{will-change:auto}
708
+ .tab-panel:not(.active){content-visibility:hidden}
709
+ .fx-layer{contain:strict}
710
+ .flying-chip{will-change:transform,opacity}
711
+ .hud-pill,.table-brand{backdrop-filter:none}
712
+ .seat.active::after{animation:none;opacity:.72}
713
+
714
+ /* A real side-by-side spectator layout on ordinary laptop/tablet widths. */
715
+ @media(min-width:860px){
716
+ html,body{height:100%;overflow:hidden}
717
+ .app-shell{height:100dvh;min-height:0;padding:8px 10px;display:flex;flex-direction:column}
718
+ .topbar{flex:0 0 42px;height:42px;margin:0 auto 7px;width:100%;max-width:1720px}
719
+ .workspace{
720
+ flex:1;min-height:0;width:100%;max-width:1720px;
721
+ grid-template-columns:minmax(0,1fr) clamp(270px,25vw,360px);
722
+ gap:9px;
723
+ }
724
+ .arena-card,.inspector{height:100%;min-height:0;border-radius:16px}
725
+ .arena-card{min-height:0}
726
+ .inspector{min-height:0;height:100%}
727
+ .arena-head{flex:0 0 38px;height:38px}
728
+ .poker-table{flex:1;min-height:0;height:auto;max-height:none}
729
+ .winner-banner{margin:7px 9px 0;min-height:36px;padding:7px 10px}
730
+ }
731
+
732
+ /* Undo the older stack-at-1180 rule: keep the table beside the inspector. */
733
+ @media(min-width:860px) and (max-width:1180px){
734
+ .workspace{grid-template-columns:minmax(0,1fr) clamp(260px,28vw,315px)}
735
+ .arena-card{min-height:0}
736
+ .poker-table{min-height:0;height:auto;max-height:none}
737
+ .inspector{height:100%;min-height:0;margin-top:0}
738
+ .field-grid{grid-template-columns:repeat(3,1fr)}
739
+ }
740
+
741
+ /* Automatic table density keeps every seat inside the visible table. */
742
+ .poker-table[data-density="compact"] .seat{width:154px;min-height:104px;padding:8px 9px;border-radius:13px}
743
+ .poker-table[data-density="compact"] .seat-name{font-size:11px;max-width:100px}
744
+ .poker-table[data-density="compact"] .seat-model{font-size:7.5px}
745
+ .poker-table[data-density="compact"] .seat-stack{margin:5px 0 4px}
746
+ .poker-table[data-density="compact"] .seat-stack strong{font-size:13px}
747
+ .poker-table[data-density="compact"] .hole-cards .card.rank-only-corners{width:33px;height:46px}
748
+ .poker-table[data-density="compact"] .table-center{width:330px}
749
+ .poker-table[data-density="compact"] .board .card{width:45px;height:62px}
750
+ .poker-table[data-density="compact"] .felt-ring{left:7%;right:7%;top:8%;bottom:8%}
751
+
752
+ .poker-table[data-density="tight"] .seat{width:122px;min-height:84px;padding:6px 7px;border-radius:11px}
753
+ .poker-table[data-density="tight"] .seat-name{font-size:9px;max-width:82px}
754
+ .poker-table[data-density="tight"] .seat-model{display:none}
755
+ .poker-table[data-density="tight"] .seat-pos{font-size:6px;padding:1px 3px}
756
+ .poker-table[data-density="tight"] .seat-stack{margin:3px 0 2px}
757
+ .poker-table[data-density="tight"] .seat-stack strong{font-size:10px;gap:4px}
758
+ .poker-table[data-density="tight"] .seat-stack>span{font-size:7px}
759
+ .poker-table[data-density="tight"] .chip-dot{width:8px;height:8px;border-width:1px}
760
+ .poker-table[data-density="tight"] .hole-cards{gap:2px;min-height:35px}
761
+ .poker-table[data-density="tight"] .hole-cards .card.rank-only-corners{width:25px;height:36px;border-radius:5px}
762
+ .poker-table[data-density="tight"] .hole-cards .card.rank-only-corners .card-corner b{font-size:7px}
763
+ .poker-table[data-density="tight"] .hole-cards .card.rank-only-corners .card-suit{font-size:15px}
764
+ .poker-table[data-density="tight"] .last-action{font-size:6px;min-height:8px;margin-top:2px}
765
+ .poker-table[data-density="tight"] .table-center{width:245px}
766
+ .poker-table[data-density="tight"] .table-brand{margin-bottom:7px;gap:5px}
767
+ .poker-table[data-density="tight"] .table-brand-mark{width:17px;height:17px;border-radius:5px;font-size:8px}
768
+ .poker-table[data-density="tight"] .table-brand-copy strong{font-size:8px}
769
+ .poker-table[data-density="tight"] .table-brand-copy small{font-size:4px;letter-spacing:.12em}
770
+ .poker-table[data-density="tight"] .street-label{font-size:7px;margin-bottom:5px}
771
+ .poker-table[data-density="tight"] .board{gap:3px;min-height:48px}
772
+ .poker-table[data-density="tight"] .board .card{width:31px;height:44px;border-radius:5px}
773
+ .poker-table[data-density="tight"] .board .card .card-suit{font-size:18px}
774
+ .poker-table[data-density="tight"] .table-hud{margin-top:7px;gap:3px;max-width:240px;flex-wrap:nowrap}
775
+ .poker-table[data-density="tight"] .hud-pill{min-width:0;flex:1 1 0;padding:3px 4px 4px}
776
+ .poker-table[data-density="tight"] .hud-pill span{font-size:4.5px}
777
+ .poker-table[data-density="tight"] .hud-pill strong{font-size:7px}
778
+ .poker-table[data-density="tight"] .hud-pot strong{font-size:9px}
779
+ .poker-table[data-density="tight"] .felt-ring{left:4%;right:4%;top:7%;bottom:7%;border-width:9px}
780
+
781
+ /* Only genuinely narrow screens stack the inspector below the table. */
782
+ @media(max-width:859px){
783
+ html,body{height:auto;min-height:100%;overflow-y:auto}
784
+ .app-shell{height:auto;min-height:100dvh}
785
+ .workspace{display:block}
786
+ .arena-card{min-height:0;height:auto}
787
+ .poker-table{height:clamp(500px,67dvh,610px);min-height:500px;max-height:610px}
788
+ .inspector{height:auto;min-height:360px;margin-top:8px}
789
+ }
790
+
791
+ @media(max-width:520px){
792
+ .poker-table{height:clamp(470px,64dvh,555px);min-height:470px}
793
+ .table-brand{margin-bottom:6px}
794
+ }
795
+ .arena-card,.inspector,.tabs{backdrop-filter:none}
796
+ @media(min-width:860px) and (max-height:700px){
797
+ .topbar{flex-basis:38px;height:38px;margin-bottom:5px}
798
+ .brand-mark{width:24px;height:24px}.brand-title{font-size:13px}.brand-subtitle{display:none}
799
+ .top-action{min-height:27px;padding:4px 7px}
800
+ .arena-head{flex-basis:34px;height:34px}
801
+ .tabs{padding:4px}.tab{padding:6px;font-size:10px}
802
+ .panel-block{padding:9px}.panel-title{margin-bottom:7px;font-size:9px}
803
+ .decision-clock{font-size:24px}.decision-card{padding:9px}
804
+ }
805
+
806
+ /* 0.2.9 — compact modal system + generic OpenAI-compatible connections ------- */
807
+ :root{
808
+ --ui-1:4px;
809
+ --ui-2:8px;
810
+ --ui-3:12px;
811
+ --ui-4:16px;
812
+ --control-h:34px;
813
+ --radius-sm:8px;
814
+ --radius-md:12px;
815
+ --modal-bg:#0b0d10;
816
+ --modal-surface:#101318;
817
+ --modal-border:rgba(232,238,243,.09);
818
+ }
819
+
820
+ /* Header stays intentionally quiet: game state belongs on the table. */
821
+ .topbar{height:36px;flex-basis:36px;margin-bottom:5px;gap:8px}
822
+ .brandbar{gap:7px}.brand-mark{width:24px;height:24px;border-radius:7px;font-size:12px}.brand-title{font-size:13px;line-height:1}
823
+ .topbar-actions{gap:4px}.top-action{min-height:28px;height:28px;padding:0 8px;border-radius:7px;font-size:9px;gap:4px}.action-icon{font-size:9px}
824
+
825
+ /* Shared controls. */
826
+ .setup-dialog,.seat-dialog,.tests-dialog{overflow:hidden!important;background:var(--modal-bg);border:1px solid var(--modal-border);border-radius:14px;box-shadow:0 28px 90px rgba(0,0,0,.62)}
827
+ .setup-dialog::backdrop,.seat-dialog::backdrop,.tests-dialog::backdrop{background:rgba(0,0,0,.72);backdrop-filter:blur(3px)}
828
+ .setup-dialog{width:min(760px,calc(100vw - 24px));height:auto;max-height:min(820px,calc(100dvh - 24px));padding:0}
829
+ .seat-dialog{width:min(560px,calc(100vw - 24px));max-height:calc(100dvh - 24px)}
830
+ .tests-dialog{width:min(980px,calc(100vw - 24px));height:min(780px,calc(100dvh - 24px));max-height:calc(100dvh - 24px)}
831
+ .setup-dialog form,.seat-dialog form,.tests-shell{height:100%;min-height:0;display:flex;flex-direction:column;overflow:hidden}
832
+ .dialog-head{min-height:48px;padding:8px 12px;gap:10px;border-bottom:1px solid var(--modal-border);background:#0d1014;flex:0 0 auto}
833
+ .dialog-head h2{margin:0;font-size:15px;line-height:1.1;letter-spacing:-.015em}.dialog-title-row,.section-title-row,.field-label-row{display:flex;align-items:center;gap:6px;min-width:0}
834
+ .dialog-body,.tests-body{min-width:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}
835
+ .setup-body{padding:12px;display:grid;gap:12px}.seat-editor-body{padding:12px}.tests-body{padding:12px}
836
+ .dialog-footer{min-height:48px;padding:8px 12px;border-top:1px solid var(--modal-border);border-bottom:0;background:#0d1014;flex:0 0 auto}
837
+ .compact-footer{justify-content:flex-end}.split-footer{justify-content:space-between}.seat-footer-actions{display:flex;gap:6px;margin-left:auto}
838
+
839
+ .button,.icon-button,.field-icon-button,input,select{box-sizing:border-box}
840
+ .button{min-height:var(--control-h);padding:0 12px;border-radius:var(--radius-sm);font-size:10px;font-weight:800;line-height:1;white-space:nowrap}
841
+ .small-button{min-height:30px;height:30px;padding-inline:10px;font-size:9px}
842
+ .icon-button{width:30px;height:30px;min-width:30px;border-radius:var(--radius-sm);display:grid;place-items:center;padding:0}
843
+ input,select{width:100%;min-width:0;height:var(--control-h);padding:0 9px;border-radius:var(--radius-sm);font-size:11px;background:#0a0d10;border:1px solid var(--modal-border);color:var(--text)}
844
+ input:focus,select:focus{outline:none;border-color:rgba(146,201,164,.34);box-shadow:0 0 0 3px rgba(146,201,164,.05)}
845
+ label{min-width:0}
846
+
847
+ /* Information is opt-in instead of permanently occupying the modal. */
848
+ .info-button{position:relative;display:inline-grid;place-items:center;width:18px;height:18px;min-width:18px;padding:0;border:1px solid rgba(232,238,243,.12);border-radius:50%;background:#12161a;color:#7d8992;font:800 10px/1 system-ui;cursor:help;text-transform:none;letter-spacing:0}
849
+ .info-button:hover,.info-button:focus-visible{color:#d8e0e5;border-color:rgba(146,201,164,.32);outline:none}
850
+ /* Tooltips are rendered by app.js as one fixed-position element attached to the
851
+ topmost open <dialog>. `position:fixed` escapes the modal's overflow clipping
852
+ and attaching it inside the dialog keeps it in the dialog's top layer, so the
853
+ whole tooltip is always visible. See showTooltip() in app.js. */
854
+ .ui-tooltip{position:fixed;z-index:2147483646;top:0;left:0;width:max-content;max-width:min(320px,calc(100vw - 16px));padding:8px 10px;border:1px solid #2a3036;border-radius:8px;background:#15191e;color:#b6c0c7;font:500 10px/1.45 system-ui;text-align:left;text-transform:none;letter-spacing:0;box-shadow:0 14px 38px rgba(0,0,0,.5);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease,visibility .12s ease}
855
+ .ui-tooltip.is-visible{opacity:1;visibility:visible}
856
+ .ui-tooltip::before{content:"";position:absolute;left:var(--tip-arrow,50%);width:8px;height:8px;margin-left:-4px;background:#15191e;border:1px solid #2a3036;transform:rotate(45deg);pointer-events:none}
857
+ .ui-tooltip[data-placement="bottom"]::before{top:-5px;border-right:0;border-bottom:0}
858
+ .ui-tooltip[data-placement="top"]::before{bottom:-5px;border-left:0;border-top:0}
859
+ .inline-info{width:16px;height:16px;min-width:16px;font-size:9px}.field-label-row{justify-content:flex-start}
860
+
861
+ .settings-section{min-width:0;border:1px solid var(--modal-border);border-radius:var(--radius-md);background:var(--modal-surface);padding:10px}
862
+ .compact-section-head{margin:0 0 9px;display:flex;justify-content:space-between;align-items:center;gap:8px}.compact-section-head h3{margin:0;font-size:11px;line-height:1.2;color:#dfe5e8}
863
+ .connections-editor{display:grid;gap:8px;margin:0;min-width:0}
864
+ .connection-row{display:block!important;min-width:0;padding:9px;border:1px solid rgba(232,238,243,.07);border-radius:10px;background:#0c0f13;overflow:visible}
865
+ .connection-card-head{display:grid;grid-template-columns:minmax(0,1fr) 180px 30px;gap:8px;align-items:end;min-width:0}
866
+ .connection-main-grid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(150px,.85fr) auto;gap:8px;align-items:end;margin-top:8px;min-width:0}
867
+ .connection-row label,.field-grid label,.seat-editor-grid label,.connection-advanced label{display:flex;flex-direction:column;gap:5px;min-width:0;color:#7f8a93;font-size:8px;font-weight:800;letter-spacing:.055em;text-transform:uppercase}
868
+ .connection-url,.connection-name,.connection-kind{min-width:0}.connection-status{min-height:0;margin-top:6px;line-height:1.25;overflow-wrap:anywhere}.connection-status:empty{display:none}
869
+ .connection-advanced{margin-top:7px;border-top:1px solid rgba(232,238,243,.06);padding-top:6px}.connection-advanced summary{width:max-content;color:#68747d;font-size:8px;font-weight:800;cursor:pointer;user-select:none}.connection-advanced[open] summary{margin-bottom:7px;color:#9ca7ae}.connection-headers{max-width:100%}
870
+ .tournament-fields{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.seat-summary{padding:4px 7px;font-size:8px}
871
+ .setup-error{margin:0 12px 8px;overflow-wrap:anywhere}
872
+
873
+ .seat-editor-grid{grid-template-columns:1fr 1fr;gap:9px}.seat-model-field,.seat-provider-field{grid-column:1/3}.model-input-wrap{min-width:0}.field-help{display:block;margin-top:1px;color:#66737c;font-size:8px;line-height:1.25;text-transform:none;letter-spacing:0;overflow-wrap:anywhere}.field-help:empty{display:none}.seat-lock-notice{margin:0 0 9px}.seat-editor-hint,.setup-note,.dialog-security,.dialog-kicker,.modal-badge{display:none!important}
874
+
875
+ /* Test results must adapt to modal width rather than create page-level overflow. */
876
+ .tests-toolbar{position:static!important;padding:0 0 10px!important;display:flex;align-items:center;justify-content:space-between;gap:10px;background:transparent!important;border:0!important}.tests-status{min-width:0;font-size:9px;line-height:1.35}.tests-results{min-width:0;overflow:hidden}.tests-grid{min-width:0!important;width:100%}.tests-grid-head,.tests-grid-row{grid-template-columns:minmax(140px,1.2fr) repeat(var(--test-agent-count,3),minmax(105px,1fr))}.test-spot,.test-cell{min-width:0;padding:8px}.test-spot p,.test-cell p{overflow-wrap:anywhere}.tests-summary{flex-wrap:wrap}
877
+
878
+ @media(max-width:760px){
879
+ .topbar{height:34px;flex-basis:34px}.brand-title{font-size:12px}.brand-mark{width:22px;height:22px}.top-action{height:27px;min-height:27px;padding-inline:7px}
880
+ .setup-dialog,.seat-dialog,.tests-dialog{width:calc(100vw - 12px);max-width:none;height:auto;max-height:calc(100dvh - 12px);border-radius:12px}
881
+ .tests-dialog{height:calc(100dvh - 12px)}
882
+ .setup-body,.seat-editor-body,.tests-body{padding:9px}.dialog-head,.dialog-footer{padding:7px 9px;min-height:44px}
883
+ .connection-card-head{grid-template-columns:minmax(0,1fr) minmax(130px,.75fr) 30px}.connection-main-grid{grid-template-columns:minmax(0,1fr) minmax(130px,.8fr)}.connection-main-grid .test-connection{grid-column:2;justify-self:end}
884
+ .tournament-fields{grid-template-columns:repeat(2,minmax(0,1fr))}
885
+ .tests-grid-head,.tests-grid-row{grid-template-columns:minmax(105px,1fr) repeat(var(--test-agent-count,3),minmax(78px,1fr))}.test-spot p,.test-spot em,.test-cell p{display:none}.test-cell{min-height:54px}
886
+ }
887
+ @media(max-width:480px){
888
+ .topbar-actions .action-label{display:none!important}.topbar-actions #startTopBtn .action-label,.topbar-actions #pauseBtn .action-label,.topbar-actions #stopBtn .action-label{display:inline!important}
889
+ .connection-card-head{grid-template-columns:minmax(0,1fr) 30px}.connection-kind{grid-column:1}.connection-card-head .remove-connection{grid-column:2;grid-row:1;align-self:end}.connection-main-grid{grid-template-columns:1fr}.connection-main-grid .test-connection{grid-column:1;justify-self:stretch}
890
+ .seat-editor-grid{grid-template-columns:1fr}.seat-model-field,.seat-provider-field{grid-column:1}.tournament-fields{grid-template-columns:1fr 1fr}
891
+ .tests-grid-head,.tests-grid-row{grid-template-columns:95px repeat(var(--test-agent-count,3),minmax(64px,1fr))}.tests-grid-head small{display:none}.test-cell-top{display:block}.test-cell-top b{display:block;margin-top:2px;text-align:left;font-size:7px}
892
+ }
893
+ /* Let compact settings dialogs size to their content on desktop. */
894
+ .setup-dialog form,.seat-dialog form{height:auto;max-height:calc(100dvh - 24px)}
895
+ .setup-dialog .dialog-body,.seat-dialog .dialog-body{flex:1 1 auto;min-height:0}
896
+ @media(min-width:761px){
897
+ .setup-dialog{max-height:calc(100dvh - 40px)}
898
+ .setup-dialog form{max-height:calc(100dvh - 40px)}
899
+ }
900
+ @media(min-width:761px){
901
+ .setup-dialog{height:fit-content!important;max-height:calc(100dvh - 40px)!important}
902
+ .setup-dialog form{height:auto!important;max-height:calc(100dvh - 40px)!important}
903
+ .setup-dialog .setup-body{flex:0 1 auto}
904
+ }
905
+
906
+ /* 0.2.10 — felt identity + resilient translucent table HUD ------------------- */
907
+ /* The identity is part of the felt, not a floating UI pill. */
908
+ .table-brand{
909
+ display:flex;
910
+ flex-direction:column;
911
+ align-items:center;
912
+ justify-content:center;
913
+ gap:1px;
914
+ margin:0 auto 8px;
915
+ padding:0;
916
+ border:0;
917
+ border-radius:0;
918
+ background:transparent;
919
+ box-shadow:none;
920
+ backdrop-filter:none;
921
+ color:inherit;
922
+ opacity:.62;
923
+ user-select:none;
924
+ pointer-events:none;
925
+ line-height:1;
926
+ }
927
+ .table-brand-mark{
928
+ display:block;
929
+ margin-bottom:2px;
930
+ font-size:17px;
931
+ line-height:1;
932
+ color:rgba(190,223,201,.48);
933
+ filter:drop-shadow(0 1px 4px rgba(0,0,0,.18));
934
+ }
935
+ .table-brand-copy{
936
+ display:flex;
937
+ flex-direction:column;
938
+ align-items:center;
939
+ gap:3px;
940
+ white-space:nowrap;
941
+ text-align:center;
942
+ }
943
+ .table-brand-copy strong{
944
+ font-size:clamp(17px,1.42vw,23px);
945
+ line-height:.96;
946
+ font-weight:900;
947
+ letter-spacing:-.045em;
948
+ color:rgba(241,248,244,.68);
949
+ text-shadow:0 1px 12px rgba(0,0,0,.12);
950
+ }
951
+ .table-brand-copy small{
952
+ font-size:6px;
953
+ line-height:1;
954
+ font-weight:800;
955
+ text-transform:lowercase;
956
+ letter-spacing:.20em;
957
+ color:rgba(224,235,229,.34);
958
+ }
959
+
960
+ /* One quiet translucent strip scales better than five rigid pills. */
961
+ .table-hud{
962
+ width:min(100%,430px);
963
+ max-width:100%;
964
+ margin:10px auto 0;
965
+ padding:3px 4px;
966
+ display:grid;
967
+ grid-template-columns:minmax(0,1.15fr) minmax(0,1.55fr) repeat(3,minmax(0,.85fr));
968
+ align-items:stretch;
969
+ gap:0;
970
+ border:1px solid rgba(226,238,231,.055);
971
+ border-radius:10px;
972
+ background:rgba(3,15,11,.18);
973
+ box-shadow:0 5px 18px rgba(0,0,0,.07);
974
+ opacity:.72;
975
+ transition:opacity .16s ease,border-color .16s ease,background .16s ease;
976
+ overflow:hidden;
977
+ }
978
+ .table-hud:hover{
979
+ opacity:.88;
980
+ border-color:rgba(226,238,231,.075);
981
+ background:rgba(3,15,11,.22);
982
+ }
983
+ .hud-pill{
984
+ min-width:0;
985
+ max-width:100%;
986
+ padding:4px 7px 5px;
987
+ display:flex;
988
+ flex-direction:column;
989
+ align-items:center;
990
+ justify-content:center;
991
+ gap:1px;
992
+ border:0;
993
+ border-right:1px solid rgba(229,239,233,.052);
994
+ border-radius:0;
995
+ background:transparent;
996
+ box-shadow:none;
997
+ backdrop-filter:none;
998
+ overflow:hidden;
999
+ }
1000
+ .hud-pill:last-child{border-right:0}
1001
+ .hud-pill span{
1002
+ max-width:100%;
1003
+ overflow:hidden;
1004
+ text-overflow:ellipsis;
1005
+ white-space:nowrap;
1006
+ font-size:6px;
1007
+ font-weight:850;
1008
+ letter-spacing:.14em;
1009
+ color:rgba(223,234,228,.34);
1010
+ }
1011
+ .hud-pill strong{
1012
+ display:block;
1013
+ width:100%;
1014
+ min-width:0;
1015
+ overflow:hidden;
1016
+ text-overflow:ellipsis;
1017
+ white-space:nowrap;
1018
+ font-size:clamp(8px,.76vw,11px);
1019
+ line-height:1.16;
1020
+ font-weight:820;
1021
+ color:rgba(245,249,247,.66);
1022
+ font-variant-numeric:tabular-nums;
1023
+ letter-spacing:-.025em;
1024
+ }
1025
+ .hud-pot{
1026
+ border-color:transparent;
1027
+ background:linear-gradient(90deg,rgba(70,139,98,.035),rgba(70,139,98,.075));
1028
+ }
1029
+ .hud-pot strong{
1030
+ font-size:clamp(9px,.9vw,13px);
1031
+ color:rgba(230,246,236,.72);
1032
+ }
1033
+ .lobby-mode .table-hud{opacity:.48}
1034
+ .lobby-mode .hud-pot{opacity:1}
1035
+
1036
+ /* Keep the enlarged identity and every metric inside short/tablet layouts. */
1037
+ .poker-table[data-density="compact"] .table-brand{margin-bottom:7px;gap:0}
1038
+ .poker-table[data-density="compact"] .table-brand-mark{font-size:14px;margin-bottom:1px}
1039
+ .poker-table[data-density="compact"] .table-brand-copy strong{font-size:16px}
1040
+ .poker-table[data-density="compact"] .table-brand-copy small{font-size:5px;letter-spacing:.17em}
1041
+ .poker-table[data-density="compact"] .table-hud{width:min(100%,360px);margin-top:8px}
1042
+
1043
+ .poker-table[data-density="tight"] .table-brand{margin-bottom:5px;gap:0}
1044
+ .poker-table[data-density="tight"] .table-brand-mark{width:auto;height:auto;margin:0 0 1px;border:0;background:none;font-size:10px}
1045
+ .poker-table[data-density="tight"] .table-brand-copy{gap:2px}
1046
+ .poker-table[data-density="tight"] .table-brand-copy strong{font-size:11px;letter-spacing:-.04em}
1047
+ .poker-table[data-density="tight"] .table-brand-copy small{font-size:4px;letter-spacing:.13em}
1048
+ .poker-table[data-density="tight"] .table-hud{width:min(100%,245px);margin-top:6px;padding:2px 3px;border-radius:7px}
1049
+ .poker-table[data-density="tight"] .hud-pill{padding:3px 3px 4px}
1050
+ .poker-table[data-density="tight"] .hud-pill span{font-size:4px;letter-spacing:.09em}
1051
+ .poker-table[data-density="tight"] .hud-pill strong{font-size:6.5px}
1052
+ .poker-table[data-density="tight"] .hud-pot strong{font-size:7.5px}
1053
+
1054
+ @media(max-width:720px){
1055
+ .table-brand{margin-bottom:5px;opacity:.58}
1056
+ .table-brand-mark{font-size:10px;margin-bottom:1px}
1057
+ .table-brand-copy{gap:2px}
1058
+ .table-brand-copy strong{font-size:11px}
1059
+ .table-brand-copy small{font-size:4px;letter-spacing:.13em}
1060
+ .table-hud{width:min(100%,220px);margin-top:6px;padding:2px 3px;border-radius:7px;opacity:.68}
1061
+ .hud-pill{min-width:0;padding:3px 3px 4px}
1062
+ .hud-pill span{font-size:4px;letter-spacing:.09em}
1063
+ .hud-pill strong{font-size:6.5px}
1064
+ .hud-pot strong{font-size:7.5px}
1065
+ }
1066
+
1067
+ /* 0.2.10 finishing pass: clearer identity, still quiet enough for the table. */
1068
+ .table-brand-mark{
1069
+ width:auto!important;
1070
+ height:auto!important;
1071
+ min-width:0!important;
1072
+ border:0!important;
1073
+ border-radius:0!important;
1074
+ background:none!important;
1075
+ box-shadow:none!important;
1076
+ padding:0!important;
1077
+ font-size:18px;
1078
+ }
1079
+ .table-brand-copy strong{font-size:clamp(19px,1.55vw,25px)}
1080
+ .table-hud{opacity:.78;background:rgba(3,15,11,.20)}
1081
+ .hud-pill span{color:rgba(223,234,228,.38)}
1082
+ .hud-pill strong{color:rgba(245,249,247,.72)}
1083
+ .hud-pot strong{color:rgba(230,246,236,.78)}
1084
+ .poker-table[data-density="compact"] .table-brand-mark{font-size:15px}
1085
+ .poker-table[data-density="compact"] .table-brand-copy strong{font-size:17px}
1086
+ .poker-table[data-density="tight"] .table-brand-mark{font-size:11px}
1087
+ .poker-table[data-density="tight"] .table-brand-copy strong{font-size:13px}
1088
+ @media(max-width:720px){
1089
+ .table-brand{opacity:.62}
1090
+ .table-brand-mark{font-size:11px}
1091
+ .table-brand-copy strong{font-size:13px}
1092
+ .table-hud{opacity:.74}
1093
+ }
1094
+
1095
+ /* 0.2.11 — in-felt table identity ----------------------------------------- */
1096
+ .table-brand{
1097
+ position:relative;
1098
+ margin:0 auto 10px;
1099
+ padding:0;
1100
+ gap:2px;
1101
+ opacity:.24;
1102
+ mix-blend-mode:screen;
1103
+ filter:saturate(.72);
1104
+ }
1105
+ .table-brand::before{
1106
+ content:"";
1107
+ position:absolute;
1108
+ inset:-14px -26px;
1109
+ z-index:-1;
1110
+ border-radius:999px;
1111
+ background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.015),transparent 70%);
1112
+ pointer-events:none;
1113
+ }
1114
+ .table-brand-mark{
1115
+ font-size:34px!important;
1116
+ line-height:.9;
1117
+ margin:0 0 3px!important;
1118
+ color:rgba(225,239,230,.72)!important;
1119
+ text-shadow:0 1px 0 rgba(255,255,255,.035),0 -1px 0 rgba(0,0,0,.16);
1120
+ }
1121
+ .table-brand-copy{gap:4px}
1122
+ .table-brand-copy strong{
1123
+ font-size:clamp(28px,2vw,38px)!important;
1124
+ line-height:.92;
1125
+ font-weight:920;
1126
+ letter-spacing:-.055em;
1127
+ color:rgba(235,244,239,.74)!important;
1128
+ text-shadow:0 1px 0 rgba(255,255,255,.025),0 -1px 0 rgba(0,0,0,.18),0 0 18px rgba(255,255,255,.02);
1129
+ }
1130
+ .table-brand-copy small{
1131
+ font-size:7px!important;
1132
+ letter-spacing:.31em!important;
1133
+ font-weight:800;
1134
+ color:rgba(224,236,228,.54)!important;
1135
+ }
1136
+ .table-brand-copy::after{
1137
+ content:"";
1138
+ width:132px;
1139
+ height:1px;
1140
+ margin-top:3px;
1141
+ background:linear-gradient(90deg,transparent,rgba(238,247,241,.15),transparent);
1142
+ }
1143
+ .table-hud{
1144
+ opacity:.58!important;
1145
+ background:rgba(3,15,11,.12)!important;
1146
+ border-color:rgba(226,238,231,.04)!important;
1147
+ box-shadow:none!important;
1148
+ }
1149
+ .table-hud:hover{opacity:.72!important;background:rgba(3,15,11,.16)!important}
1150
+ .hud-pill span{color:rgba(223,234,228,.30)!important}
1151
+ .hud-pill strong{color:rgba(245,249,247,.58)!important}
1152
+ .hud-pot strong{color:rgba(230,246,236,.66)!important}
1153
+
1154
+ .poker-table[data-density="compact"] .table-brand{opacity:.22;margin-bottom:8px}
1155
+ .poker-table[data-density="compact"] .table-brand-mark{font-size:24px!important}
1156
+ .poker-table[data-density="compact"] .table-brand-copy strong{font-size:24px!important}
1157
+ .poker-table[data-density="compact"] .table-brand-copy small{font-size:5.5px!important;letter-spacing:.24em!important}
1158
+ .poker-table[data-density="tight"] .table-brand{opacity:.20;margin-bottom:6px}
1159
+ .poker-table[data-density="tight"] .table-brand-mark{font-size:16px!important}
1160
+ .poker-table[data-density="tight"] .table-brand-copy strong{font-size:16px!important}
1161
+ .poker-table[data-density="tight"] .table-brand-copy small{font-size:4.5px!important;letter-spacing:.18em!important}
1162
+ @media(max-width:720px){
1163
+ .table-brand{opacity:.20;margin-bottom:6px}
1164
+ .table-brand-mark{font-size:17px!important}
1165
+ .table-brand-copy strong{font-size:17px!important}
1166
+ .table-brand-copy small{font-size:4.5px!important;letter-spacing:.18em!important}
1167
+ .table-brand-copy::after{width:74px}
1168
+ .table-hud{opacity:.54!important}
1169
+ }
1170
+
1171
+ /* 0.2.12 UI / pause polish overrides */
1172
+ .winner-banner{display:none!important}
1173
+ .table-brand{
1174
+ position:relative;
1175
+ margin-bottom:12px;
1176
+ display:flex;
1177
+ flex-direction:column;
1178
+ align-items:center;
1179
+ gap:2px;
1180
+ opacity:.12;
1181
+ mix-blend-mode:screen;
1182
+ filter:saturate(.55) contrast(.95);
1183
+ text-shadow:0 1px 0 rgba(255,255,255,.03),0 -1px 0 rgba(0,0,0,.12);
1184
+ }
1185
+ .table-brand::before{
1186
+ content:"";
1187
+ position:absolute;
1188
+ inset:-18px -42px;
1189
+ border-radius:999px;
1190
+ background:radial-gradient(circle at 50% 50%, rgba(255,255,255,.02), transparent 70%);
1191
+ pointer-events:none;
1192
+ }
1193
+ .table-brand-mark{
1194
+ width:auto!important;
1195
+ height:auto!important;
1196
+ border:0!important;
1197
+ background:none!important;
1198
+ font-size:clamp(26px,2vw,36px)!important;
1199
+ line-height:1;
1200
+ color:rgba(232,244,236,.44)!important;
1201
+ box-shadow:none!important;
1202
+ }
1203
+ .table-brand-copy{
1204
+ display:flex!important;
1205
+ flex-direction:column;
1206
+ align-items:center;
1207
+ gap:3px;
1208
+ line-height:1;
1209
+ text-align:center!important;
1210
+ }
1211
+ .table-brand-copy strong{
1212
+ font-size:clamp(28px,2.2vw,40px)!important;
1213
+ letter-spacing:-.055em!important;
1214
+ font-weight:900!important;
1215
+ color:rgba(241,246,243,.36)!important;
1216
+ }
1217
+ .table-brand-copy small{
1218
+ font-size:clamp(6px,.55vw,8px)!important;
1219
+ letter-spacing:.34em!important;
1220
+ text-transform:lowercase!important;
1221
+ color:rgba(229,236,232,.28)!important;
1222
+ }
1223
+ .table-brand-copy::after{
1224
+ content:"";
1225
+ display:block;
1226
+ margin-top:5px;
1227
+ width:130px;
1228
+ height:1px;
1229
+ background:linear-gradient(90deg, transparent, rgba(255,255,255,.10), transparent);
1230
+ }
1231
+ .table-hud{background:rgba(7,15,12,.16);border:1px solid rgba(255,255,255,.045);border-radius:14px;padding:0;overflow:hidden}
1232
+ .hud-pill{background:transparent!important;border:0!important;border-right:1px solid rgba(255,255,255,.04)!important;min-width:0}
1233
+ .hud-pill:last-child{border-right:0!important}
1234
+ .hud-pill span{color:rgba(228,235,231,.38)!important}
1235
+ .hud-pill strong{color:rgba(247,250,248,.66)!important;white-space:normal;overflow-wrap:anywhere;word-break:break-word}
1236
+ .decision-panel .empty-state{min-height:112px;display:flex;align-items:center}
1237
+ .decision-card{min-height:112px;display:grid;align-content:start;gap:10px}
1238
+ .legal-actions .action-chip.wide{max-width:100%;border-radius:12px;white-space:normal;line-height:1.35}
1239
+ .legal-actions .action-chip.selected{background:rgba(198,255,87,.08);border-color:rgba(198,255,87,.24);color:#d8f3b4}
1240
+ @media (max-width: 860px){
1241
+ .table-brand{margin-bottom:8px;opacity:.11}
1242
+ .table-brand-mark{font-size:18px!important}
1243
+ .table-brand-copy strong{font-size:18px!important}
1244
+ .table-brand-copy small{font-size:4.8px!important;letter-spacing:.22em!important}
1245
+ .table-brand-copy::after{width:74px}
1246
+ }
1247
+
1248
+ /* 0.2.13 — spectator dashboard polish ------------------------------------ */
1249
+ /* Live seats are slightly denser than lobby seats so cards/actions stay away
1250
+ from the viewport edges while preserving readable stack/model information. */
1251
+ .poker-table:not(.lobby-mode) .seat{
1252
+ width:clamp(142px,11.5vw,170px);
1253
+ min-height:108px;
1254
+ padding:8px 9px 7px;
1255
+ border-radius:14px;
1256
+ }
1257
+ .poker-table:not(.lobby-mode) .seat-name{font-size:12px;max-width:105px}
1258
+ .poker-table:not(.lobby-mode) .seat-model{font-size:8px}
1259
+ .poker-table:not(.lobby-mode) .seat-stack{margin:5px 0 4px}
1260
+ .poker-table:not(.lobby-mode) .seat-stack strong{font-size:14px}
1261
+ .poker-table:not(.lobby-mode) .hole-cards{min-height:47px}
1262
+ .poker-table:not(.lobby-mode) .last-action{min-height:12px;margin-top:3px;font-size:8px}
1263
+ .poker-table[data-density="compact"]:not(.lobby-mode) .seat{width:126px;min-height:94px;padding:7px}
1264
+ .poker-table[data-density="tight"]:not(.lobby-mode) .seat{width:104px;min-height:78px;padding:5px 6px}
1265
+
1266
+ /* Current decision behaves as a stable instrument panel, not a disappearing
1267
+ transient card. */
1268
+ .decision-panel{padding-bottom:12px}
1269
+ .decision-card{
1270
+ min-height:142px;
1271
+ border-color:rgba(255,255,255,.075);
1272
+ background:linear-gradient(180deg,rgba(255,255,255,.026),rgba(255,255,255,.012));
1273
+ box-shadow:inset 0 1px 0 rgba(255,255,255,.015);
1274
+ }
1275
+ .decision-identity{min-width:0;flex:1}
1276
+ .decision-player{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1277
+ .decision-model{margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1278
+ .clock-wrap{min-width:74px}
1279
+ .decision-phase{
1280
+ display:inline-flex;align-items:center;justify-content:center;
1281
+ min-width:54px;height:18px;padding:0 7px;margin-bottom:3px;
1282
+ border:1px solid rgba(255,255,255,.07);border-radius:999px;
1283
+ color:#929da6;background:rgba(255,255,255,.025);
1284
+ font-size:7px;font-weight:900;letter-spacing:.13em;
1285
+ }
1286
+ .decision-phase.thinking{color:#b8d8c2;border-color:rgba(114,185,138,.18);background:rgba(114,185,138,.055)}
1287
+ .decision-phase.paused{color:#d7bd83;border-color:rgba(197,161,92,.20);background:rgba(197,161,92,.06)}
1288
+ .decision-phase.settled{color:#91a0aa}
1289
+ .decision-public-reason{
1290
+ padding:9px 10px;border-left:2px solid rgba(114,185,138,.28);
1291
+ border-radius:0 8px 8px 0;background:rgba(114,185,138,.035);
1292
+ color:#b7c0c7;font-size:10px;line-height:1.45;
1293
+ }
1294
+ .decision-telemetry{display:grid;gap:6px}
1295
+ .probability-strip{display:grid;grid-template-columns:1fr;gap:4px}
1296
+ .probability-item{
1297
+ display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"label pct" "bar bar";
1298
+ align-items:center;gap:2px 6px;min-width:0;font-size:8px;color:#7e8992;
1299
+ }
1300
+ .probability-item b{grid-area:label;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#c2ccd3;font-size:8px;font-weight:700}
1301
+ .probability-item em{grid-area:pct;font-style:normal;text-align:right;color:#97a4ad;font-variant-numeric:tabular-nums}
1302
+ .probability-item i{grid-area:bar;position:relative;height:3px;border-radius:999px;overflow:hidden;background:rgba(255,255,255,.05)}
1303
+ .probability-item i u{display:block;height:100%;border-radius:999px;background:rgba(114,185,138,.55);text-decoration:none}
1304
+ .decision-facts{display:flex;flex-wrap:wrap;gap:5px}
1305
+ .decision-facts span{padding:3px 5px;border-radius:6px;background:rgba(255,255,255,.022);color:#717e88;font-size:7px;text-transform:uppercase;letter-spacing:.04em}
1306
+ .decision-facts b{color:#aeb9c0;font-size:8px}
1307
+
1308
+ /* Recent decisions: compact reading cards with telemetry below rationale. */
1309
+ .decision-feed{gap:6px}
1310
+ .decision-item{padding:8px 9px;background:rgba(255,255,255,.018);border-left-color:rgba(114,185,138,.28)}
1311
+ .decision-item:first-child{background:rgba(114,185,138,.025)}
1312
+ .decision-item-head{align-items:baseline}
1313
+ .decision-item-action{max-width:54%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1314
+ .decision-reason{color:#aeb8c0;font-size:10px;line-height:1.38;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
1315
+ .decision-item:hover .decision-reason{-webkit-line-clamp:unset}
1316
+ .decision-item-telemetry{margin-top:6px;padding-top:6px;border-top:1px solid rgba(255,255,255,.04)}
1317
+ .decision-item-telemetry .probability-strip{grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}
1318
+ .decision-item-telemetry .probability-item{display:flex;gap:3px}
1319
+ .decision-item-telemetry .probability-item i{display:none}
1320
+ .decision-item-telemetry .probability-item em{margin-left:auto}
1321
+ .decision-item-telemetry .decision-facts{margin-top:4px}
1322
+ .decision-meta{opacity:.74}
1323
+
1324
+ /* Inspector is visually lighter and gives more space to the actual decision
1325
+ stream than to decorative chrome. */
1326
+ .inspector{background:rgba(10,14,18,.92)}
1327
+ .tabs{padding:5px;gap:3px}
1328
+ .tab{padding:7px 6px;font-size:10px}
1329
+ .panel-block{padding:11px 12px}
1330
+ .panel-title{margin-bottom:8px;font-size:9px;letter-spacing:.14em}
1331
+
1332
+ @media(max-width:1180px) and (min-width:861px){
1333
+ .poker-table:not(.lobby-mode) .seat{width:132px;min-height:96px}
1334
+ .decision-item-telemetry .probability-strip{grid-template-columns:repeat(2,minmax(0,1fr))}
1335
+ }
1336
+ @media(max-width:860px){
1337
+ .decision-card{min-height:132px}
1338
+ .probability-strip{grid-template-columns:1fr 1fr}
1339
+ .decision-item-telemetry .probability-strip{grid-template-columns:1fr 1fr}
1340
+ .poker-table:not(.lobby-mode) .seat{width:102px;min-height:78px}
1341
+ }
1342
+
1343
+ /* 0.2.14 — stable spectator panel, model identities, recording, winner state */
1344
+ .record-button.active{border-color:rgba(237,93,103,.42)!important;background:rgba(237,93,103,.08)!important;color:#ffadb4!important}
1345
+ .record-button.active .action-icon{color:#ff6f7a;filter:drop-shadow(0 0 5px rgba(255,91,104,.32))}
1346
+
1347
+ /* Large watermark printed into the felt: intentionally big, quiet and translucent. */
1348
+ .table-brand{
1349
+ margin-bottom:14px!important;
1350
+ gap:1px!important;
1351
+ opacity:.19!important;
1352
+ mix-blend-mode:screen;
1353
+ filter:saturate(.45) contrast(.92);
1354
+ }
1355
+ .table-brand::before{inset:-24px -62px!important;background:radial-gradient(circle at 50% 50%,rgba(255,255,255,.018),transparent 72%)!important}
1356
+ .table-brand-mark{
1357
+ font-size:clamp(34px,3vw,52px)!important;
1358
+ color:rgba(235,246,239,.40)!important;
1359
+ margin-bottom:1px!important;
1360
+ }
1361
+ .table-brand-copy strong{
1362
+ font-size:clamp(36px,3.15vw,54px)!important;
1363
+ line-height:.9!important;
1364
+ color:rgba(241,248,244,.36)!important;
1365
+ letter-spacing:-.06em!important;
1366
+ }
1367
+ .table-brand-copy small{
1368
+ margin-top:4px!important;
1369
+ font-size:clamp(6px,.58vw,9px)!important;
1370
+ color:rgba(231,240,234,.27)!important;
1371
+ letter-spacing:.38em!important;
1372
+ }
1373
+ .table-brand-copy::after{width:160px!important;background:linear-gradient(90deg,transparent,rgba(255,255,255,.085),transparent)!important}
1374
+
1375
+ /* Stable right-side instrument card. Internal areas scroll instead of resizing the panel. */
1376
+ .decision-panel{height:318px;min-height:318px;max-height:318px;display:flex;flex-direction:column;overflow:hidden}
1377
+ .decision-panel>.panel-title{flex:0 0 auto}
1378
+ .decision-card{
1379
+ height:268px!important;
1380
+ min-height:268px!important;
1381
+ max-height:268px!important;
1382
+ overflow:hidden;
1383
+ grid-template-rows:62px minmax(34px,54px) minmax(58px,72px) minmax(42px,60px);
1384
+ align-content:stretch!important;
1385
+ gap:8px!important;
1386
+ }
1387
+ .decision-top{min-height:62px;align-items:start}
1388
+ .decision-identity{min-width:0;padding-top:1px}
1389
+ .decision-player{font-size:16px!important;font-weight:900;letter-spacing:-.025em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1390
+ .decision-model{font-size:9px!important;line-height:1.2;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;max-width:250px}
1391
+ .clock-wrap{min-width:82px;text-align:right}
1392
+ .decision-clock{font-size:31px;line-height:1;font-variant-numeric:tabular-nums}
1393
+ .legal-actions{min-height:34px;max-height:54px;overflow:auto;align-content:flex-start;scrollbar-width:thin}
1394
+ .decision-public-reason{min-height:58px;max-height:72px;overflow:auto;scrollbar-width:thin}
1395
+ .decision-telemetry{min-height:42px;max-height:60px;overflow:auto;scrollbar-width:thin}
1396
+ .decision-card.winner-card{border-color:rgba(219,181,92,.24);background:linear-gradient(180deg,rgba(219,181,92,.055),rgba(255,255,255,.012));box-shadow:inset 0 1px 0 rgba(255,226,148,.04)}
1397
+ .decision-phase.winner{color:#e4c675;border-color:rgba(219,181,92,.25);background:rgba(219,181,92,.07)}
1398
+ .winner-action{border-color:rgba(219,181,92,.25)!important;background:rgba(219,181,92,.07)!important;color:#ecd48c!important}
1399
+ .decision-panel .panel-title.winner-title{color:#e4c675}
1400
+ .decision-phase.winner{letter-spacing:.14em}
1401
+
1402
+ /* Finished table communicates the result without adding layout height. */
1403
+ .street-label.winner-street{font-size:11px!important;letter-spacing:.18em!important;color:rgba(235,205,126,.82)!important;text-shadow:0 0 16px rgba(219,181,92,.13)}
1404
+ .seat.winner{opacity:1!important;filter:none!important;border-color:rgba(219,181,92,.48)!important;box-shadow:0 0 0 1px rgba(219,181,92,.09),0 16px 42px rgba(0,0,0,.46),0 0 34px rgba(219,181,92,.10)!important}
1405
+ .seat.winner::after{content:"♛ WINNER";position:absolute;left:50%;top:-17px;transform:translateX(-50%);height:18px;padding:0 8px;display:flex;align-items:center;border-radius:999px;border:1px solid rgba(219,181,92,.24);background:rgba(13,16,17,.92);color:#e2c577;font-size:7px;font-weight:900;letter-spacing:.12em;white-space:nowrap;pointer-events:none;animation:none!important}
1406
+ .last-action.winner{color:#e2c577!important}
1407
+
1408
+ @media(max-width:1180px) and (min-width:861px){
1409
+ .decision-panel{height:298px;min-height:298px;max-height:298px}
1410
+ .decision-card{height:248px!important;min-height:248px!important;max-height:248px!important;grid-template-rows:58px minmax(30px,48px) minmax(52px,64px) minmax(38px,52px)}
1411
+ .table-brand-copy strong{font-size:34px!important}.table-brand-mark{font-size:32px!important}
1412
+ }
1413
+ @media(max-width:860px){
1414
+ .decision-panel{height:auto;min-height:0;max-height:none}
1415
+ .decision-card{height:auto!important;min-height:220px!important;max-height:none!important;grid-template-rows:auto}
1416
+ .table-brand{margin-bottom:8px!important;opacity:.17!important}
1417
+ .table-brand-mark{font-size:22px!important}
1418
+ .table-brand-copy strong{font-size:23px!important}
1419
+ .table-brand-copy small{font-size:5px!important;letter-spacing:.24em!important}
1420
+ .table-brand-copy::after{width:90px!important}
1421
+ }
1422
+
1423
+ /* 0.2.15 — Decision sanity suite clarity */
1424
+ .tests-dialog{width:min(1080px,calc(100vw - 24px));height:min(860px,calc(100dvh - 24px))}
1425
+ .tests-dialog-head{align-items:flex-start}
1426
+ .dialog-subtitle{margin-top:4px;max-width:620px;color:#7f8b94;font-size:9px;line-height:1.4}
1427
+ .tests-body{display:flex;flex-direction:column;gap:12px}
1428
+ .tests-how{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
1429
+ .tests-how-step{display:flex;gap:8px;min-width:0;padding:9px 10px;border:1px solid #1d2328;border-radius:10px;background:#0b0e11}
1430
+ .tests-how-step>b{display:grid;place-items:center;width:20px;height:20px;flex:0 0 20px;border-radius:50%;border:1px solid #273038;color:#94a0a8;font-size:8px}
1431
+ .tests-how-step span{min-width:0;display:grid;gap:2px}.tests-how-step strong{font-size:9px;color:#d7dde1}.tests-how-step small{font-size:8px;line-height:1.35;color:#707c85}
1432
+ .tests-participants-section{display:grid;gap:7px}
1433
+ .tests-section-title{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:0 2px}.tests-section-title>span{font-size:8px;font-weight:900;text-transform:uppercase;letter-spacing:.13em;color:#7f8a93}.tests-section-title small{font-size:8px;color:#59656e}
1434
+ .tests-participants{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:6px}
1435
+ .tests-model-chip{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:7px;min-width:0;padding:7px 8px;border:1px solid #1e242a;border-radius:9px;background:#0c1013}
1436
+ .tests-model-index{display:grid;place-items:center;width:22px;height:22px;border-radius:7px;background:#151a1f;color:#7f8b94;font:800 8px/1 ui-monospace,SFMono-Regular,Menlo,monospace}
1437
+ .tests-model-copy{min-width:0;display:grid;gap:2px}.tests-model-copy strong{font-size:10px;color:#e0e5e8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tests-model-copy small{font-size:7px;color:#66727b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1438
+ .tests-model-protocol{padding:3px 5px;border-radius:999px;background:rgba(255,255,255,.025);color:#77838c;font-size:6px;font-weight:850;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap}
1439
+ .tests-no-models{grid-column:1/-1;padding:12px;border:1px dashed #252c32;border-radius:9px;color:#707c85;font-size:9px}
1440
+ .tests-toolbar{padding:9px 10px!important;border:1px solid #1d2328!important;border-radius:10px!important;background:#0b0e11!important}
1441
+ .tests-run-copy{min-width:0;display:grid;gap:2px}.tests-status{padding:0!important;color:#a9b2b9;font-size:9px!important}.tests-progress-label{font-size:7px;color:#59656e}
1442
+ .tests-progress{height:3px;margin-top:-8px;border-radius:999px;overflow:hidden;background:#151a1f}.tests-progress i{display:block;width:0;height:100%;border-radius:inherit;background:#739a78;transition:width .18s ease}
1443
+ .tests-results{display:grid;gap:10px!important;overflow:visible!important}
1444
+ .tests-empty-explainer{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid #1c2227;border-radius:9px;background:#0a0d10}.tests-empty-explainer strong{font-size:9px;color:#cdd4d8}.tests-empty-explainer span{font-size:8px;color:#68747d;text-align:right}
1445
+ .tests-catalog{display:grid;grid-template-columns:1fr 1fr;gap:5px}
1446
+ .tests-catalog-row{display:flex;align-items:center;gap:8px;min-width:0;padding:7px 8px;border:1px solid #1b2126;border-radius:8px;background:#0a0d10}.tests-catalog-no{flex:0 0 auto;font:800 7px/1 ui-monospace,SFMono-Regular,Menlo,monospace;color:#59656e}.tests-catalog-main{min-width:0;display:grid;gap:2px}.tests-catalog-main strong{font-size:8px;color:#aeb7bd;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tests-catalog-main small{font-size:7px;color:#59656e}
1447
+ .tests-summary-line{display:flex;align-items:end;justify-content:space-between;gap:12px}.tests-summary-line>div:first-child{display:grid;gap:2px}.tests-summary-line strong{font-size:10px;color:#d5dbdf}.tests-summary-line>div:first-child span{font-size:8px;color:#68737c}.tests-summary-pills{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}.tests-summary-pills span{padding:4px 6px;border:1px solid #20262b;border-radius:999px;background:#0b0f12;color:#6f7b84;font-size:7px;text-transform:uppercase}.tests-summary-pills b{color:#bcc5ca}
1448
+ .tests-model-summaries{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:6px}.tests-model-summary{padding:9px;border:1px solid #1e2429;border-radius:9px;background:#0b0f12}.tests-model-summary-head{display:flex;justify-content:space-between;gap:8px;align-items:start}.tests-model-summary-head>div{min-width:0;display:grid;gap:2px}.tests-model-summary-head strong{font-size:10px;color:#dce2e5}.tests-model-summary-head small{font-size:7px;color:#65717a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tests-model-summary-head>b{font-size:14px;color:#abb5bb}.tests-score-bar{height:3px;margin:8px 0 7px;border-radius:999px;background:#171c20;overflow:hidden}.tests-score-bar i{display:block;height:100%;border-radius:inherit;background:#6e9875}.tests-model-metrics{display:flex;gap:7px;flex-wrap:wrap}.tests-model-metrics span{font-size:7px;color:#66727b}.tests-model-metrics b{color:#aeb8be}
1449
+ .tests-scenarios{display:grid;gap:7px}.tests-scenario-card{border:1px solid #1d2328;border-radius:10px;background:#0a0d10;overflow:hidden}.tests-scenario-head{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid #181e23}.tests-scenario-number{font:850 8px/1 ui-monospace,SFMono-Regular,Menlo,monospace;color:#58646d}.tests-scenario-head>div{min-width:0;display:grid;gap:2px}.tests-scenario-head small{font-size:6px;color:#627079;text-transform:uppercase;letter-spacing:.10em}.tests-scenario-head strong{font-size:10px;color:#d4dade}.tests-expected{padding:3px 6px;border-radius:999px;background:rgba(109,151,116,.06);border:1px solid rgba(109,151,116,.14);color:#8aa790;font-size:7px;white-space:nowrap}.tests-scenario-note{margin:0;padding:7px 10px;color:#707b84;font-size:8px;line-height:1.4;border-bottom:1px solid #181e23}.tests-agent-results{display:grid;grid-template-columns:repeat(var(--test-model-count,3),minmax(0,1fr))}.tests-agent-result{min-width:0;min-height:86px;padding:8px 9px;border-right:1px solid #181e23}.tests-agent-result:last-child{border-right:0}.tests-agent-result-head{display:flex;align-items:center;justify-content:space-between;gap:7px}.tests-agent-result-head strong{min-width:0;font-size:9px;color:#c8d0d5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tests-agent-result-head span{font-size:6px;font-weight:900;letter-spacing:.08em;color:#69757e}.tests-agent-result.pass .tests-agent-result-head span{color:#7fa986}.tests-agent-result.miss .tests-agent-result-head span,.tests-agent-result.error .tests-agent-result-head span{color:#b08383}.tests-agent-result.running .tests-agent-result-head span{color:#a99568}.tests-agent-action{display:grid;gap:2px;margin-top:6px}.tests-agent-action b{font-size:8px;color:#aeb8be}.tests-agent-action small{font-size:7px;color:#59656e}.tests-agent-result>p{margin:6px 0 0;color:#748089;font-size:7.5px;line-height:1.35;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.tests-agent-result> b{display:block;margin-top:6px;font-size:8px;color:#8e9aa2}.test-state-dot{display:inline-block;width:5px;height:5px;margin-right:3px;border-radius:50%;background:#b6a06d;animation:testPulse 1s ease-in-out infinite alternate}@keyframes testPulse{to{opacity:.35}}
1450
+ .tests-footer{align-items:center!important}
1451
+ @media(max-width:760px){
1452
+ .tests-dialog{width:calc(100vw - 10px);height:calc(100dvh - 10px);max-height:calc(100dvh - 10px)}
1453
+ .tests-how{grid-template-columns:1fr}.tests-how-step small{font-size:7.5px}
1454
+ .tests-participants{grid-template-columns:1fr 1fr}.tests-model-chip{grid-template-columns:22px minmax(0,1fr)}.tests-model-protocol{grid-column:2;justify-self:start}
1455
+ .tests-catalog{grid-template-columns:1fr}.tests-empty-explainer{display:grid}.tests-empty-explainer span{text-align:left}
1456
+ .tests-summary-line{align-items:start;display:grid}.tests-summary-pills{justify-content:start}
1457
+ .tests-agent-results{grid-template-columns:1fr!important}.tests-agent-result{min-height:0;border-right:0;border-bottom:1px solid #181e23}.tests-agent-result:last-child{border-bottom:0}
1458
+ .tests-scenario-head{grid-template-columns:24px minmax(0,1fr)}.tests-expected{grid-column:2;justify-self:start}.tests-scenario-note{display:none}
1459
+ }
1460
+ @media(max-width:420px){.tests-participants{grid-template-columns:1fr}.tests-model-summaries{grid-template-columns:1fr}.tests-toolbar{align-items:stretch;flex-direction:column}.tests-toolbar .button{width:100%}}
1461
+
1462
+ /* 0.2.16 — decision history replay + stable action ticker */
1463
+ .arena-head{position:relative;overflow:visible}
1464
+ .arena-head .action-toast{
1465
+ position:absolute!important;
1466
+ left:50%!important;
1467
+ top:50%!important;
1468
+ bottom:auto!important;
1469
+ transform:translate(-50%,-50%)!important;
1470
+ z-index:8;
1471
+ min-width:0!important;
1472
+ max-width:min(44%,420px)!important;
1473
+ padding:5px 10px!important;
1474
+ border-radius:999px!important;
1475
+ background:rgba(16,22,27,.94)!important;
1476
+ border:1px solid rgba(255,255,255,.08)!important;
1477
+ box-shadow:0 5px 18px rgba(0,0,0,.22)!important;
1478
+ font-size:9px!important;
1479
+ line-height:1.1!important;
1480
+ letter-spacing:.02em!important;
1481
+ text-transform:none!important;
1482
+ overflow:hidden;
1483
+ text-overflow:ellipsis;
1484
+ white-space:nowrap;
1485
+ pointer-events:none;
1486
+ animation:arenaTickerIn .18s ease both!important;
1487
+ }
1488
+ @keyframes arenaTickerIn{from{opacity:0;transform:translate(-50%,-44%) scale(.98)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
1489
+ .decision-history-item{
1490
+ appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;
1491
+ border-top:0;border-right:0;border-bottom:0;
1492
+ }
1493
+ .decision-history-item:hover{background:rgba(114,185,138,.055)!important;border-left-color:rgba(138,210,164,.55)}
1494
+ .decision-history-item:focus-visible,.replayable-event:focus-visible{outline:2px solid rgba(130,190,221,.55);outline-offset:2px}
1495
+ .decision-replay-hint{float:right;margin-left:8px;color:rgba(150,199,170,.65);font-family:inherit;font-size:8px;white-space:nowrap}
1496
+ .replayable-event{cursor:pointer;position:relative}
1497
+ .replayable-event:hover{background:rgba(114,185,138,.045)}
1498
+ .event-replay-hint{float:right;color:rgba(150,199,170,.58);font-size:8px}
1499
+
1500
+ .replay-dialog{width:min(900px,calc(100vw - 28px));max-width:900px;max-height:min(820px,calc(100dvh - 28px));padding:0;overflow:hidden}
1501
+ .replay-shell{display:flex;flex-direction:column;max-height:min(820px,calc(100dvh - 28px))}
1502
+ .replay-body{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(280px,.85fr);gap:14px;overflow:auto;padding:14px}
1503
+ .replay-badge{padding:4px 7px;border:1px solid rgba(255,255,255,.08);border-radius:999px;font:800 8px/1 var(--mono,monospace);letter-spacing:.08em;color:rgba(220,230,224,.62)}
1504
+ .replay-table-wrap{min-width:0}
1505
+ .replay-table{position:relative;min-height:420px;border-radius:48%/38%;overflow:hidden;border:9px solid #171d21;background:radial-gradient(ellipse at center,#12603f 0%,#0d4b33 56%,#093825 100%);box-shadow:inset 0 0 55px rgba(0,0,0,.34),0 16px 38px rgba(0,0,0,.32)}
1506
+ .replay-table::before{content:"";position:absolute;inset:9px;border-radius:inherit;border:1px solid rgba(255,255,255,.055);pointer-events:none}
1507
+ .replay-opponents{position:absolute;left:8%;right:8%;top:8%;display:flex;flex-wrap:wrap;justify-content:center;gap:6px;z-index:2}
1508
+ .replay-opponent{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:126px;max-width:180px;padding:7px 9px;border-radius:10px;background:rgba(10,17,20,.72);border:1px solid rgba(255,255,255,.08);box-shadow:0 6px 15px rgba(0,0,0,.18)}
1509
+ .replay-opponent div,.replay-opponent span{display:grid;gap:2px}.replay-opponent b{font-size:10px}.replay-opponent small{font-size:7px;color:var(--muted)}.replay-opponent>span{text-align:right;font-weight:800;font-size:9px}
1510
+ .replay-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-48%);display:grid;justify-items:center;gap:8px;width:78%;z-index:1}
1511
+ .replay-street{font-size:8px;font-weight:900;letter-spacing:.22em;color:rgba(235,242,238,.58)}
1512
+ .replay-board{gap:5px;min-height:58px}.replay-board .card{width:41px;height:57px}.replay-board .card .card-suit{font-size:23px}.replay-board .card .card-corner b{font-size:9px}.replay-board .card .card-corner i{font-size:7px}
1513
+ .replay-pot{font:850 10px/1 var(--mono,monospace);letter-spacing:.08em;color:rgba(239,246,242,.66);padding:6px 10px;border-radius:999px;background:rgba(5,18,13,.28);border:1px solid rgba(255,255,255,.05)}
1514
+ .replay-hero{position:absolute;left:50%;bottom:7%;transform:translateX(-50%);z-index:3;min-width:190px;padding:9px 10px;border-radius:13px;background:rgba(12,18,21,.88);border:1px solid rgba(151,207,171,.2);box-shadow:0 10px 24px rgba(0,0,0,.28)}
1515
+ .replay-hero-head{display:flex;align-items:start;justify-content:space-between;gap:12px}.replay-hero-head>div,.replay-hero-head>span{display:grid;gap:2px}.replay-hero-head b{font-size:12px}.replay-hero-head small{font-size:7px;color:var(--muted)}.replay-hero-head>span{text-align:right;font-size:10px;font-weight:900}
1516
+ .replay-hero-cards{display:flex;justify-content:center;gap:5px;margin-top:7px}.replay-hero-cards .card{width:39px;height:54px}.replay-hero-cards .card-suit{font-size:22px}
1517
+ .replay-unavailable{font-size:10px;color:var(--muted);text-align:center;max-width:240px}
1518
+ .replay-details{min-width:0;display:flex;flex-direction:column;gap:10px}
1519
+ .replay-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.replay-summary span{display:flex;justify-content:space-between;gap:8px;padding:7px 8px;border-radius:8px;background:rgba(255,255,255,.025);font-size:9px;color:var(--muted)}.replay-summary b{color:var(--text);font-weight:850}
1520
+ .replay-action-block,.replay-reason{padding:10px 11px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.02)}
1521
+ .replay-action-block{display:grid;gap:4px}.replay-action-block span{font-size:7px;text-transform:uppercase;letter-spacing:.13em;color:var(--muted);font-weight:800}.replay-action-block strong{font-size:14px;color:#dfeee4}
1522
+ .replay-reason{font-size:10px;line-height:1.5;color:#b9c6be;border-left:2px solid rgba(114,185,138,.4)}
1523
+ .replay-history,.replay-legal{border-top:1px solid rgba(255,255,255,.055);padding-top:8px}.replay-history summary,.replay-legal summary{cursor:pointer;font-size:9px;font-weight:850;color:rgba(226,235,229,.74);margin-bottom:7px}.replay-history-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.035);font-size:9px}.replay-history-row>span{display:grid;gap:1px}.replay-history-row small{font-size:7px;color:var(--muted)}.replay-history-row strong{text-align:right;font-size:9px}.replay-legal>div{display:flex;flex-wrap:wrap;gap:5px}
1524
+ @media(max-width:760px){
1525
+ .arena-head .action-toast{max-width:45%!important;font-size:7px!important;padding:4px 7px!important}
1526
+ .replay-body{grid-template-columns:1fr}.replay-table{min-height:340px}.replay-opponents{left:5%;right:5%}.replay-opponent{min-width:105px;padding:5px 7px}.replay-center{top:48%}.replay-hero{bottom:5%;min-width:165px}.replay-summary{grid-template-columns:1fr 1fr}
1527
+ }
1528
+
1529
+
1530
+ /* 0.2.17 — unclipped current decision layout
1531
+ The card keeps a stable outer height, but its internal rows are flex-based so
1532
+ legal actions can use all free vertical space instead of being clipped by
1533
+ explicit grid tracks when rationale/telemetry are hidden. */
1534
+ .decision-panel{
1535
+ height:318px;
1536
+ min-height:318px;
1537
+ max-height:318px;
1538
+ overflow:hidden;
1539
+ }
1540
+ .decision-card{
1541
+ display:flex!important;
1542
+ flex-direction:column;
1543
+ height:268px!important;
1544
+ min-height:268px!important;
1545
+ max-height:268px!important;
1546
+ gap:8px!important;
1547
+ overflow:hidden!important;
1548
+ }
1549
+ .decision-top{
1550
+ flex:0 0 62px;
1551
+ min-height:62px;
1552
+ }
1553
+ .legal-actions{
1554
+ flex:1 1 auto;
1555
+ min-height:0!important;
1556
+ max-height:none!important;
1557
+ overflow-x:hidden!important;
1558
+ overflow-y:auto!important;
1559
+ align-content:flex-start;
1560
+ align-items:flex-start;
1561
+ padding:1px 2px 4px 0;
1562
+ scrollbar-gutter:stable;
1563
+ overscroll-behavior:contain;
1564
+ }
1565
+ .legal-actions .action-chip{
1566
+ flex:0 0 auto;
1567
+ max-width:100%;
1568
+ min-height:28px;
1569
+ display:inline-flex;
1570
+ align-items:center;
1571
+ line-height:1.2;
1572
+ white-space:normal;
1573
+ }
1574
+ .decision-public-reason:not(.hidden){
1575
+ flex:0 0 auto;
1576
+ min-height:52px;
1577
+ max-height:68px;
1578
+ overflow:auto;
1579
+ }
1580
+ .decision-telemetry:not(.hidden){
1581
+ flex:0 0 auto;
1582
+ min-height:34px;
1583
+ max-height:52px;
1584
+ overflow:auto;
1585
+ }
1586
+ /* Do not reserve invisible grid rows while the model is thinking. */
1587
+ .decision-public-reason.hidden,.decision-telemetry.hidden{display:none!important}
1588
+
1589
+ @media(max-width:1180px) and (min-width:861px){
1590
+ .decision-panel{height:298px;min-height:298px;max-height:298px}
1591
+ .decision-card{height:248px!important;min-height:248px!important;max-height:248px!important}
1592
+ .decision-top{flex-basis:58px;min-height:58px}
1593
+ }
1594
+ @media(max-width:860px){
1595
+ .decision-panel{height:auto;min-height:0;max-height:none;overflow:visible}
1596
+ .decision-card{height:auto!important;min-height:210px!important;max-height:none!important;overflow:visible!important}
1597
+ .legal-actions{max-height:none!important;overflow:visible!important;scrollbar-gutter:auto}
1598
+ }
1599
+
1600
+ /* 0.2.18 — in-table action ticker for captured game video */
1601
+ .table-brand-stage{
1602
+ position:relative;
1603
+ display:grid;
1604
+ place-items:center;
1605
+ min-height:96px;
1606
+ margin-bottom:8px;
1607
+ pointer-events:none;
1608
+ }
1609
+ .table-brand-stage .table-brand{
1610
+ grid-area:1/1;
1611
+ margin:0!important;
1612
+ transition:opacity .18s ease,transform .18s ease,filter .18s ease;
1613
+ }
1614
+ .table-brand-stage .action-toast{
1615
+ grid-area:1/1;
1616
+ position:relative!important;
1617
+ left:auto!important;
1618
+ top:auto!important;
1619
+ bottom:auto!important;
1620
+ transform:none!important;
1621
+ z-index:8;
1622
+ display:flex;
1623
+ align-items:center;
1624
+ justify-content:center;
1625
+ width:auto;
1626
+ max-width:min(92%,560px)!important;
1627
+ min-width:min(270px,80%)!important;
1628
+ min-height:44px;
1629
+ padding:10px 18px!important;
1630
+ border-radius:999px!important;
1631
+ background:rgba(5,15,12,.48)!important;
1632
+ border:1px solid rgba(255,255,255,.075)!important;
1633
+ box-shadow:0 10px 28px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.025)!important;
1634
+ color:rgba(244,248,245,.88);
1635
+ font-size:clamp(11px,1.08vw,15px)!important;
1636
+ font-weight:850!important;
1637
+ line-height:1.2!important;
1638
+ letter-spacing:-.012em!important;
1639
+ text-transform:none!important;
1640
+ text-align:center;
1641
+ white-space:normal!important;
1642
+ overflow-wrap:anywhere;
1643
+ animation:feltActionIn .2s cubic-bezier(.2,.8,.2,1) both!important;
1644
+ backdrop-filter:blur(5px);
1645
+ }
1646
+ .table-brand-stage .action-toast.hidden{display:none!important}
1647
+ .poker-table.action-message-visible .table-brand-stage .table-brand{
1648
+ opacity:.025!important;
1649
+ transform:scale(.97);
1650
+ filter:blur(.4px) saturate(.45);
1651
+ }
1652
+ .table-brand-stage .action-toast.raise,.table-brand-stage .action-toast.bet{color:rgba(247,215,139,.93);border-color:rgba(218,181,109,.18)!important}
1653
+ .table-brand-stage .action-toast.call{color:rgba(163,201,235,.94);border-color:rgba(142,182,223,.17)!important}
1654
+ .table-brand-stage .action-toast.check{color:rgba(166,217,184,.94);border-color:rgba(143,197,161,.17)!important}
1655
+ .table-brand-stage .action-toast.fold{color:rgba(232,157,163,.92);border-color:rgba(216,121,130,.17)!important}
1656
+ @keyframes feltActionIn{from{opacity:0;transform:translateY(5px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
1657
+ /* Neutralize the old header ticker rules now that the element lives on the felt. */
1658
+ .arena-head .action-toast{display:none!important}
1659
+ @media(max-width:860px){
1660
+ .table-brand-stage{min-height:62px;margin-bottom:5px}
1661
+ .table-brand-stage .action-toast{min-width:0!important;max-width:94%!important;min-height:34px;padding:7px 11px!important;font-size:9px!important;border-radius:12px!important}
1662
+ }
1663
+ .poker-table[data-density="compact"] .table-brand-stage{min-height:70px;margin-bottom:5px}
1664
+ .poker-table[data-density="tight"] .table-brand-stage{min-height:50px;margin-bottom:3px}
1665
+ .poker-table[data-density="tight"] .table-brand-stage .action-toast{min-height:30px;padding:6px 9px!important;font-size:8px!important}
1666
+
1667
+ /* 0.2.19 — replay modal + social sharing */
1668
+ .replay-dialog{
1669
+ width:min(980px,calc(100vw - 24px));
1670
+ max-width:980px;
1671
+ max-height:min(900px,calc(100dvh - 24px));
1672
+ border-color:rgba(255,255,255,.09);
1673
+ background:#0b0f11;
1674
+ box-shadow:0 32px 90px rgba(0,0,0,.68);
1675
+ }
1676
+ .replay-shell{max-height:min(900px,calc(100dvh - 24px));background:linear-gradient(180deg,#0d1214,#090d0f)}
1677
+ .replay-dialog .dialog-head{padding:15px 16px 13px;border-bottom:1px solid rgba(255,255,255,.065);background:linear-gradient(180deg,rgba(255,255,255,.018),transparent)}
1678
+ .replay-dialog .dialog-title-row{gap:9px}
1679
+ .replay-dialog .dialog-title-row h2{font-size:18px;letter-spacing:-.025em}
1680
+ .replay-dialog .dialog-subtitle{margin-top:4px;max-width:620px;font-size:9px;color:rgba(203,214,207,.45)}
1681
+ .replay-badge{background:rgba(126,190,151,.055);border-color:rgba(126,190,151,.14);color:rgba(189,220,201,.68)}
1682
+ .replay-body{grid-template-columns:minmax(0,1.2fr) minmax(310px,.8fr);gap:16px;padding:16px;min-height:0}
1683
+ .replay-table-wrap{min-width:0;padding:7px;border-radius:24px;background:rgba(255,255,255,.018);border:1px solid rgba(255,255,255,.05)}
1684
+ .replay-table{min-height:454px;border-width:10px;border-color:#171d20;box-shadow:inset 0 0 68px rgba(0,0,0,.32),0 18px 42px rgba(0,0,0,.30)}
1685
+ .replay-table::after{content:"pokertools-arena";position:absolute;left:50%;top:39%;transform:translate(-50%,-50%);font-size:26px;font-weight:900;letter-spacing:-.05em;color:rgba(231,242,235,.085);pointer-events:none;white-space:nowrap}
1686
+ .replay-center{top:52%;gap:9px}
1687
+ .replay-street{padding:4px 8px;border-radius:999px;background:rgba(4,15,11,.2);font-size:8px;color:rgba(235,242,238,.7)}
1688
+ .replay-pot{background:rgba(5,18,13,.40);border-color:rgba(255,255,255,.075);font-size:11px}
1689
+ .replay-opponent{background:rgba(8,14,16,.82);border-color:rgba(255,255,255,.075)}
1690
+ .replay-hero{bottom:6%;min-width:218px;padding:10px 12px;border-color:rgba(178,231,112,.20);background:rgba(8,13,15,.92)}
1691
+ .replay-hero-head b{font-size:13px}.replay-hero-head>span{font-size:11px}
1692
+ .replay-details{gap:9px}
1693
+ .replay-summary{gap:5px}
1694
+ .replay-summary span{min-height:34px;align-items:center;padding:7px 9px;border:1px solid rgba(255,255,255,.045);background:rgba(255,255,255,.018);font-size:8px}
1695
+ .replay-action-block{position:relative;padding:12px 13px 13px;border-color:rgba(182,236,111,.17);background:linear-gradient(135deg,rgba(182,236,111,.07),rgba(182,236,111,.025))}
1696
+ .replay-action-block::after{content:"SELECTED";position:absolute;right:11px;top:10px;font:800 7px/1 var(--mono,monospace);letter-spacing:.12em;color:rgba(190,230,145,.44)}
1697
+ .replay-action-block span{font-size:7px}.replay-action-block strong{padding-right:58px;font-size:16px;color:#e2f4ca;line-height:1.2}
1698
+ .replay-reason{position:relative;padding:30px 12px 12px;font-size:10px;line-height:1.55;color:#c3cec7;border-left:0;border-color:rgba(255,255,255,.055);background:rgba(255,255,255,.018)}
1699
+ .replay-reason::before{content:"PUBLIC RATIONALE";position:absolute;left:12px;top:10px;font:800 7px/1 var(--mono,monospace);letter-spacing:.12em;color:rgba(204,217,209,.38)}
1700
+ .replay-history,.replay-legal{padding-top:9px}
1701
+ .replay-history summary,.replay-legal summary{display:flex;align-items:center;justify-content:space-between;gap:8px;list-style:none;font-size:9px;color:rgba(226,235,229,.68)}
1702
+ .replay-history summary::-webkit-details-marker,.replay-legal summary::-webkit-details-marker{display:none}
1703
+ .replay-history summary::after,.replay-legal summary::after{content:"+";font-size:13px;color:rgba(216,226,220,.32)}
1704
+ .replay-history[open] summary::after,.replay-legal[open] summary::after{content:"−"}
1705
+ .replay-history-row{padding:7px 2px}
1706
+ .replay-footer{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 16px;border-top:1px solid rgba(255,255,255,.065);background:rgba(7,10,12,.92)}
1707
+ .replay-share-copy{display:grid;gap:3px;min-width:0}.replay-share-copy strong{font-size:10px}.replay-share-copy span{font-size:8px;color:var(--muted);line-height:1.35}
1708
+ .replay-share-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex:0 0 auto}.replay-share-actions .button{min-height:29px;padding:5px 9px;font-size:9px}
1709
+ @media(max-width:760px){
1710
+ .replay-dialog{width:calc(100vw - 12px);max-height:calc(100dvh - 12px)}
1711
+ .replay-shell{max-height:calc(100dvh - 12px)}
1712
+ .replay-body{grid-template-columns:1fr;padding:9px;gap:10px}
1713
+ .replay-table{min-height:330px}
1714
+ .replay-table::after{font-size:18px;top:37%}
1715
+ .replay-opponents{top:5%}.replay-opponent{min-width:96px;max-width:135px}
1716
+ .replay-center{top:48%}.replay-hero{bottom:4%;min-width:168px;padding:7px 8px}
1717
+ .replay-summary{grid-template-columns:1fr 1fr}
1718
+ .replay-footer{align-items:stretch;flex-direction:column;padding:9px}
1719
+ .replay-share-actions{display:grid;grid-template-columns:1fr 1fr 1fr}.replay-share-actions .button{width:100%}
1720
+ }
1721
+ @media(max-width:430px){
1722
+ .replay-dialog .dialog-head{padding:11px}.replay-dialog .dialog-title-row h2{font-size:15px}
1723
+ .replay-table{min-height:315px}.replay-board .card{width:36px;height:50px}.replay-board{gap:3px}
1724
+ .replay-share-actions{grid-template-columns:1fr 1fr}.replay-share-actions #saveReplayImage{grid-column:1/-1}
1725
+ }
1726
+
1727
+ /* 0.2.20 — true viewport-fit seating -------------------------------------- */
1728
+ /* The JS layout now chooses density from the actual rendered table rectangle
1729
+ and clamps every real seat rect back inside it. `micro` is the final safety
1730
+ density for short browser windows, embedded views, and split-screen use. */
1731
+ .poker-table[data-density="micro"] .seat{
1732
+ width:88px!important;
1733
+ min-height:64px!important;
1734
+ padding:4px 5px!important;
1735
+ border-radius:9px!important;
1736
+ }
1737
+ .poker-table[data-density="micro"] .seat-name{font-size:8px!important;max-width:62px!important}
1738
+ .poker-table[data-density="micro"] .seat-model{display:none!important}
1739
+ .poker-table[data-density="micro"] .seat-pos{font-size:5px!important;padding:1px 2px!important}
1740
+ .poker-table[data-density="micro"] .seat-stack{margin:2px 0 1px!important}
1741
+ .poker-table[data-density="micro"] .seat-stack strong{font-size:8px!important;gap:3px!important}
1742
+ .poker-table[data-density="micro"] .seat-stack>span{font-size:5.5px!important}
1743
+ .poker-table[data-density="micro"] .chip-dot{width:6px!important;height:6px!important;border-width:1px!important}
1744
+ .poker-table[data-density="micro"] .hole-cards{gap:1px!important;min-height:28px!important}
1745
+ .poker-table[data-density="micro"] .hole-cards .card.rank-only-corners,
1746
+ .poker-table[data-density="micro"] .hole-cards .card{width:20px!important;height:28px!important;border-radius:4px!important}
1747
+ .poker-table[data-density="micro"] .hole-cards .card .card-corner{left:2px!important;top:2px!important}
1748
+ .poker-table[data-density="micro"] .hole-cards .card .card-corner b{font-size:6px!important}
1749
+ .poker-table[data-density="micro"] .hole-cards .card .card-suit{font-size:12px!important}
1750
+ .poker-table[data-density="micro"] .last-action{font-size:5px!important;min-height:6px!important;margin-top:1px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1751
+ .poker-table[data-density="micro"] .table-center{width:min(210px,46%)!important}
1752
+ .poker-table[data-density="micro"] .table-brand-stage{min-height:42px!important;margin-bottom:2px!important}
1753
+ .poker-table[data-density="micro"] .table-brand{margin-bottom:3px!important;opacity:.16!important}
1754
+ .poker-table[data-density="micro"] .table-brand-mark{font-size:12px!important}
1755
+ .poker-table[data-density="micro"] .table-brand-copy strong{font-size:12px!important}
1756
+ .poker-table[data-density="micro"] .table-brand-copy small{font-size:3.5px!important;letter-spacing:.13em!important}
1757
+ .poker-table[data-density="micro"] .table-brand-copy::after{width:48px!important;margin-top:2px!important}
1758
+ .poker-table[data-density="micro"] .street-label{font-size:5.5px!important;margin-bottom:3px!important}
1759
+ .poker-table[data-density="micro"] .board{gap:2px!important;min-height:34px!important}
1760
+ .poker-table[data-density="micro"] .board .card{width:23px!important;height:32px!important;border-radius:4px!important}
1761
+ .poker-table[data-density="micro"] .board .card .card-suit{font-size:14px!important}
1762
+ .poker-table[data-density="micro"] .board .card .card-corner b{font-size:6px!important}
1763
+ .poker-table[data-density="micro"] .table-hud{width:min(100%,205px)!important;margin-top:4px!important;border-radius:6px!important}
1764
+ .poker-table[data-density="micro"] .hud-pill{padding:2px 2px 3px!important}
1765
+ .poker-table[data-density="micro"] .hud-pill span{font-size:3.5px!important;letter-spacing:.07em!important}
1766
+ .poker-table[data-density="micro"] .hud-pill strong{font-size:5.5px!important}
1767
+ .poker-table[data-density="micro"] .felt-ring{left:3%!important;right:3%!important;top:5%!important;bottom:5%!important;border-width:7px!important}
1768
+ .poker-table[data-density="micro"] .table-brand-stage .action-toast{min-height:25px!important;padding:4px 7px!important;font-size:6.5px!important;max-width:190px!important}
1769
+
1770
+ /* Very short desktop windows are a legitimate layout, not an error case.
1771
+ Preserve the side-by-side dashboard but spend fewer pixels on chrome. */
1772
+ @media(min-width:860px) and (max-height:560px){
1773
+ .app-shell{padding:4px 6px}
1774
+ .topbar{flex-basis:30px;height:30px;margin-bottom:3px}
1775
+ .brand-mark{width:20px;height:20px}.brand-title{font-size:11px}.brand-subtitle{display:none}
1776
+ .top-action{height:24px;min-height:24px;padding:0 6px;font-size:8px}
1777
+ .arena-head{flex-basis:28px;height:28px;padding-inline:9px}
1778
+ .arena-head,.tournamentMeta{font-size:7px}
1779
+ .tabs{min-height:31px;padding:3px}.tab{padding:4px 5px;font-size:8px}
1780
+ .panel-block{padding:7px}.panel-title{margin-bottom:5px;font-size:8px}
1781
+ .decision-card{min-height:0!important}
1782
+ }
1783
+
1784
+ /* Avoid any legacy min-height winning the cascade in desktop/tablet mode. */
1785
+ @media(min-width:860px){
1786
+ .workspace,.arena-card,.poker-table{min-height:0!important}
1787
+ .poker-table{height:100%!important;max-height:none!important}
1788
+ }
1789
+
1790
+ /* 0.2.21 — visible-table sizing + stable decision instrument ---------------- */
1791
+ /* A flex child cannot also be 100% of its parent when the parent contains the
1792
+ arena header. The old 100% rule made the table extend below the clipped arena
1793
+ card by roughly the header height, so bottom seats were laid out inside an
1794
+ invisible region. Use the remaining flex track instead. */
1795
+ @media(min-width:860px){
1796
+ .arena-card{display:flex;flex-direction:column;min-height:0!important}
1797
+ .poker-table{
1798
+ flex:1 1 0!important;
1799
+ height:0!important;
1800
+ min-height:0!important;
1801
+ max-height:none!important;
1802
+ }
1803
+ }
1804
+
1805
+ /* The live decision panel is an instrument, not a variable-height content card.
1806
+ Every model gets the same slots so switching seats never moves the feed. */
1807
+ .decision-panel{
1808
+ height:292px!important;
1809
+ min-height:292px!important;
1810
+ max-height:292px!important;
1811
+ overflow:hidden!important;
1812
+ padding-bottom:10px!important;
1813
+ }
1814
+ .decision-card{
1815
+ display:grid!important;
1816
+ grid-template-rows:62px 44px 18px minmax(0,1fr)!important;
1817
+ height:242px!important;
1818
+ min-height:242px!important;
1819
+ max-height:242px!important;
1820
+ gap:7px!important;
1821
+ overflow:hidden!important;
1822
+ padding:11px!important;
1823
+ }
1824
+ .decision-top{
1825
+ min-height:0!important;
1826
+ height:62px!important;
1827
+ flex:unset!important;
1828
+ display:grid!important;
1829
+ grid-template-columns:minmax(0,1fr) 86px!important;
1830
+ align-items:start!important;
1831
+ gap:10px!important;
1832
+ }
1833
+ .decision-identity{min-width:0;overflow:hidden}
1834
+ .decision-player{
1835
+ white-space:nowrap;
1836
+ overflow:hidden;
1837
+ text-overflow:ellipsis;
1838
+ line-height:1.05;
1839
+ }
1840
+ .decision-model-line{
1841
+ margin-top:4px;
1842
+ max-width:100%;
1843
+ overflow:hidden;
1844
+ text-overflow:ellipsis;
1845
+ white-space:nowrap;
1846
+ color:var(--muted);
1847
+ font-size:9px;
1848
+ line-height:1.2;
1849
+ }
1850
+ .clock-wrap{min-width:0;width:86px;text-align:right}
1851
+ .decision-clock{line-height:.92;font-variant-numeric:tabular-nums}
1852
+ .decision-phase{white-space:nowrap}
1853
+ .decision-context{
1854
+ height:44px;
1855
+ display:grid;
1856
+ grid-template-columns:repeat(4,minmax(0,1fr));
1857
+ gap:5px;
1858
+ padding:5px;
1859
+ border:1px solid rgba(255,255,255,.055);
1860
+ border-radius:10px;
1861
+ background:rgba(255,255,255,.018);
1862
+ }
1863
+ .decision-context>span{
1864
+ min-width:0;
1865
+ display:grid;
1866
+ align-content:center;
1867
+ gap:2px;
1868
+ padding:0 5px;
1869
+ border-right:1px solid rgba(255,255,255,.045);
1870
+ }
1871
+ .decision-context>span:last-child{border-right:0}
1872
+ .decision-context small{
1873
+ font-size:6px;
1874
+ line-height:1;
1875
+ font-weight:850;
1876
+ letter-spacing:.12em;
1877
+ text-transform:uppercase;
1878
+ color:rgba(210,220,226,.42);
1879
+ }
1880
+ .decision-context b{
1881
+ min-width:0;
1882
+ overflow:hidden;
1883
+ text-overflow:ellipsis;
1884
+ white-space:nowrap;
1885
+ font-size:9px;
1886
+ line-height:1.15;
1887
+ color:rgba(241,246,249,.78);
1888
+ font-weight:850;
1889
+ }
1890
+ .decision-actions-head{
1891
+ height:18px;
1892
+ display:flex;
1893
+ align-items:center;
1894
+ justify-content:space-between;
1895
+ gap:8px;
1896
+ padding:0 1px;
1897
+ font-size:7px;
1898
+ font-weight:850;
1899
+ letter-spacing:.11em;
1900
+ text-transform:uppercase;
1901
+ color:rgba(210,220,226,.48);
1902
+ }
1903
+ .decision-actions-head .mono{
1904
+ max-width:55%;
1905
+ overflow:hidden;
1906
+ text-overflow:ellipsis;
1907
+ white-space:nowrap;
1908
+ font-size:6.5px;
1909
+ letter-spacing:.04em;
1910
+ text-transform:none;
1911
+ font-weight:600;
1912
+ }
1913
+ .decision-card .legal-actions{
1914
+ min-height:0!important;
1915
+ max-height:none!important;
1916
+ overflow-y:auto!important;
1917
+ overflow-x:hidden!important;
1918
+ display:grid!important;
1919
+ grid-template-columns:repeat(2,minmax(0,1fr))!important;
1920
+ grid-auto-rows:min-content;
1921
+ align-content:start!important;
1922
+ gap:5px!important;
1923
+ margin:0!important;
1924
+ padding:1px 3px 3px 0!important;
1925
+ scrollbar-gutter:stable;
1926
+ }
1927
+ .decision-card .legal-actions .action-chip{
1928
+ width:100%;
1929
+ min-width:0;
1930
+ min-height:27px;
1931
+ padding:5px 7px;
1932
+ display:flex;
1933
+ align-items:center;
1934
+ justify-content:flex-start;
1935
+ border-radius:8px;
1936
+ font-size:8px;
1937
+ line-height:1.2;
1938
+ white-space:normal;
1939
+ overflow-wrap:anywhere;
1940
+ }
1941
+ .decision-card .legal-actions .action-chip:only-child{grid-column:1/-1}
1942
+ /* Rationale and Jev/model telemetry belong in Recent decisions. Keeping them
1943
+ out of the live instrument guarantees identical geometry across protocols. */
1944
+ .decision-card .decision-public-reason,
1945
+ .decision-card .decision-telemetry{display:none!important}
1946
+
1947
+ @media(min-width:860px) and (max-height:700px){
1948
+ .decision-panel{height:270px!important;min-height:270px!important;max-height:270px!important}
1949
+ .decision-card{height:222px!important;min-height:222px!important;max-height:222px!important;grid-template-rows:56px 40px 16px minmax(0,1fr)!important;padding:9px!important}
1950
+ .decision-top{height:56px!important;grid-template-columns:minmax(0,1fr) 78px!important}
1951
+ .clock-wrap{width:78px}
1952
+ .decision-context{height:40px;padding:4px}
1953
+ .decision-card .legal-actions .action-chip{min-height:24px;font-size:7px;padding:4px 6px}
1954
+ }
1955
+
1956
+ @media(max-width:859px){
1957
+ .decision-panel{height:auto!important;min-height:0!important;max-height:none!important;overflow:visible!important}
1958
+ .decision-card{height:auto!important;min-height:226px!important;max-height:none!important;grid-template-rows:62px 44px 18px auto!important;overflow:visible!important}
1959
+ .decision-card .legal-actions{max-height:180px!important;overflow-y:auto!important}
1960
+ }
1961
+ @media(max-width:430px){
1962
+ .decision-card{padding:9px!important;grid-template-rows:58px 42px 18px auto!important}
1963
+ .decision-top{height:58px!important;grid-template-columns:minmax(0,1fr) 72px!important}
1964
+ .clock-wrap{width:72px}
1965
+ .decision-context{height:42px;gap:3px;padding:4px 3px}
1966
+ .decision-context>span{padding:0 3px}.decision-context small{font-size:5px}.decision-context b{font-size:8px}
1967
+ .decision-card .legal-actions{grid-template-columns:1fr!important;max-height:170px!important}
1968
+ }
1969
+
1970
+ /* 0.2.22 — persistent felt branding + separate in-table action line */
1971
+ .table-brand-stage{
1972
+ display:flex!important;
1973
+ flex-direction:column!important;
1974
+ align-items:center!important;
1975
+ justify-content:flex-start!important;
1976
+ min-height:118px!important;
1977
+ margin-bottom:6px!important;
1978
+ position:relative!important;
1979
+ }
1980
+ .table-brand-stage .table-brand{
1981
+ position:relative!important;
1982
+ z-index:2!important;
1983
+ flex:0 0 auto!important;
1984
+ opacity:.17!important;
1985
+ transform:none!important;
1986
+ filter:saturate(.55) contrast(.95)!important;
1987
+ }
1988
+ .poker-table.action-message-visible .table-brand-stage .table-brand{
1989
+ opacity:.17!important;
1990
+ transform:none!important;
1991
+ filter:saturate(.55) contrast(.95)!important;
1992
+ }
1993
+ .table-brand-stage .action-toast{
1994
+ position:absolute!important;
1995
+ left:50%!important;
1996
+ right:auto!important;
1997
+ top:auto!important;
1998
+ bottom:2px!important;
1999
+ transform:translateX(-50%)!important;
2000
+ z-index:8!important;
2001
+ min-height:34px!important;
2002
+ max-width:min(94%,560px)!important;
2003
+ padding:7px 16px!important;
2004
+ background:rgba(5,15,12,.38)!important;
2005
+ backdrop-filter:blur(4px)!important;
2006
+ box-shadow:0 8px 22px rgba(0,0,0,.14),inset 0 1px 0 rgba(255,255,255,.02)!important;
2007
+ }
2008
+ @keyframes feltActionIn0222{from{opacity:0;transform:translate(-50%,5px) scale(.985)}to{opacity:1;transform:translate(-50%,0) scale(1)}}
2009
+ .table-brand-stage .action-toast:not(.hidden){animation:feltActionIn0222 .2s cubic-bezier(.2,.8,.2,1) both!important}
2010
+ .poker-table[data-density="compact"] .table-brand-stage{min-height:96px!important}
2011
+ .poker-table[data-density="tight"] .table-brand-stage{min-height:72px!important}
2012
+ .poker-table[data-density="micro"] .table-brand-stage{min-height:56px!important;margin-bottom:1px!important}
2013
+ .poker-table[data-density="micro"] .table-brand-stage .action-toast{min-height:22px!important;bottom:0!important;padding:3px 7px!important;font-size:6px!important;max-width:180px!important}
2014
+ @media(max-width:860px){
2015
+ .table-brand-stage{min-height:76px!important;margin-bottom:3px!important}
2016
+ .table-brand-stage .action-toast{min-height:27px!important;bottom:0!important;padding:4px 9px!important;font-size:7.5px!important;max-width:92%!important}
2017
+ }
2018
+
2019
+ /* Keep the table brand (logo + pokertools-arena + description) legible: do not
2020
+ shrink it heavily on small screens or dense tables. These floors come last so
2021
+ they win over the earlier per-density/per-breakpoint reductions. */
2022
+ @media(max-width:860px){
2023
+ .table-brand-mark{font-size:clamp(22px,6.4vw,30px)!important}
2024
+ .table-brand-copy strong{font-size:clamp(21px,6vw,28px)!important;letter-spacing:-.05em!important}
2025
+ .table-brand-copy small{font-size:clamp(7.5px,1.9vw,9px)!important;letter-spacing:.2em!important}
2026
+ .table-brand-copy::after{width:64px!important}
2027
+ }
2028
+ .poker-table[data-density="micro"] .table-brand-mark,
2029
+ .poker-table[data-density="micro"] .table-brand-copy strong{font-size:clamp(18px,5vw,26px)!important}
2030
+ .poker-table[data-density="micro"] .table-brand-copy small{font-size:clamp(7px,1.6vw,9px)!important;letter-spacing:.18em!important}
2031
+ .poker-table[data-density="tight"] .table-brand-mark,
2032
+ .poker-table[data-density="tight"] .table-brand-copy strong{font-size:clamp(18px,4.6vw,24px)!important}
2033
+ .poker-table[data-density="tight"] .table-brand-copy small{font-size:clamp(7px,1.5vw,9px)!important;letter-spacing:.17em!important}
2034
+
2035
+ /* Polished action status on the felt: a type glyph, a soft tinted wash and a
2036
+ matching glow so Call / Check / Bet / Raise / Fold read as game events. */
2037
+ .table-brand-stage .action-toast{gap:0}
2038
+ .table-brand-stage .action-toast::before{
2039
+ content:"●";
2040
+ display:inline-block;
2041
+ font-size:.62em;
2042
+ line-height:1;
2043
+ margin-right:9px;
2044
+ opacity:.95;
2045
+ transform:translateY(-.02em);
2046
+ }
2047
+ .table-brand-stage .action-toast.raise::before,
2048
+ .table-brand-stage .action-toast.bet::before{content:"▲";font-size:.82em}
2049
+ .table-brand-stage .action-toast.check::before{content:"✓";font-size:.92em}
2050
+ .table-brand-stage .action-toast.fold::before{content:"✕";font-size:.82em}
2051
+ .table-brand-stage .action-toast.raise,
2052
+ .table-brand-stage .action-toast.bet{
2053
+ background:linear-gradient(180deg,rgba(218,181,109,.14),rgba(5,15,12,.52))!important;
2054
+ box-shadow:0 10px 28px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.03),0 0 22px rgba(218,181,109,.12)!important;
2055
+ }
2056
+ .table-brand-stage .action-toast.call{
2057
+ background:linear-gradient(180deg,rgba(142,182,223,.14),rgba(5,15,12,.52))!important;
2058
+ box-shadow:0 10px 28px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.03),0 0 22px rgba(142,182,223,.12)!important;
2059
+ }
2060
+ .table-brand-stage .action-toast.check{
2061
+ background:linear-gradient(180deg,rgba(143,197,161,.14),rgba(5,15,12,.52))!important;
2062
+ box-shadow:0 10px 28px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.03),0 0 22px rgba(143,197,161,.12)!important;
2063
+ }
2064
+ .table-brand-stage .action-toast.fold{
2065
+ background:linear-gradient(180deg,rgba(216,121,130,.14),rgba(5,15,12,.52))!important;
2066
+ box-shadow:0 10px 28px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.03),0 0 22px rgba(216,121,130,.12)!important;
2067
+ }
2068
+
2069
+ /* Responsive suit glyphs -----------------------------------------------------
2070
+ Size the centered suit symbol from the card box itself (container query units)
2071
+ instead of a fixed px per breakpoint, so it scales with the responsive card
2072
+ containers and stays clearly visible at every size. cqmin = the smaller of the
2073
+ card's width/height. The !important flags intentionally override the older
2074
+ per-breakpoint and per-density fixed sizes above. */
2075
+ .card{container-type:size}
2076
+ .card .card-suit{font-size:60cqmin!important}
2077
+ .board .card .card-suit{font-size:57cqmin!important}
2078
+ .poker-table[data-density="micro"] .hole-cards .card .card-suit{font-size:60cqmin!important}
2079
+ .poker-table[data-density="micro"] .board .card .card-suit{font-size:57cqmin!important}
2080
+
2081
+ /* Right-panel status lines: keep them single-line so changing status text never
2082
+ wraps or reflows the fixed decision grid (the grid itself lives above at
2083
+ .decision-card / .decision-top). Full text stays available via title. */
2084
+ .clock-wrap{display:flex;flex-direction:column;align-items:flex-end;overflow:hidden}
2085
+ #decisionClock{white-space:nowrap}
2086
+ #bankClock{display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.15}
2087
+ .decision-actions-head #decisionActionLabel{white-space:nowrap}
2088
+ .decision-actions-head #decisionActionHint{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}
2089
+
2090
+ /* Winner block: a compact final-standings podium fills the card body so the
2091
+ winner state has no dead space. Rows are sized to fit the fixed grid row. */
2092
+ .legal-actions .winner-podium{width:100%;display:grid;gap:4px;align-content:start}
2093
+ .podium-row{display:grid;grid-template-columns:16px minmax(0,1fr) auto;align-items:center;gap:6px;min-height:18px;padding:1px 7px;border:1px solid rgba(255,255,255,.05);border-radius:8px;background:rgba(255,255,255,.015)}
2094
+ .podium-row.first{border-color:rgba(219,181,92,.28);background:rgba(219,181,92,.06)}
2095
+ .podium-medal{font-size:11px;line-height:1;text-align:center}
2096
+ .podium-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:800;font-size:10px;color:#e6ebee}
2097
+ .podium-meta{font-size:8px;color:#8b97a0;white-space:nowrap;font-variant-numeric:tabular-nums}
2098
+ .podium-row.first .podium-name{color:#f0d79a}
2099
+ .podium-row.first .podium-meta{color:#cdb476}
2100
+
2101
+ /* Turn timer: a depleting border ring on the seat that is on the clock. No
2102
+ numbers, so spectators can read the remaining time at a glance. --turn is set
2103
+ from requestAnimationFrame in startClock (1 = full, 0 = empty). */
2104
+ .seat .seat-turn{
2105
+ position:absolute;inset:0;z-index:1;border-radius:inherit;padding:2px;pointer-events:none;
2106
+ opacity:0;transition:opacity .3s ease;
2107
+ background:conic-gradient(from -90deg, rgba(255,255,255,.05) 0deg calc((1 - var(--turn,1)) * 360deg), var(--ring,rgba(198,255,87,.92)) calc((1 - var(--turn,1)) * 360deg) 360deg);
2108
+ -webkit-mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
2109
+ mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
2110
+ -webkit-mask-composite:xor;
2111
+ mask-composite:exclude;
2112
+ }
2113
+ .seat.turn-active .seat-turn{opacity:1}
2114
+ .seat.turn-active.turn-low .seat-turn{--ring:rgba(255,168,74,.95)}
2115
+ .seat.turn-active{border-color:rgba(198,255,87,.28)}
2116
+ .seat.turn-active.turn-low{border-color:rgba(255,168,74,.38)}
2117
+
2118
+ /* Keep the position badge (BTN/SB/BB) inside the seat: let the identity column
2119
+ shrink instead of letting the long model id push the badge out of the card. */
2120
+ .seat-head>div{min-width:0;flex:1 1 auto;overflow:hidden}
2121
+ .seat-pos{flex:0 0 auto;white-space:nowrap}
2122
+ .seat-model{max-width:100%}
2123
+ .seat-name{max-width:100%}
2124
+
2125
+ /* Champion badge: a consistent gold medal with a soft sheen instead of a raw
2126
+ emoji, so the winner mark renders identically on every platform. */
2127
+ .champion-badge{position:relative;display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;
2128
+ background:radial-gradient(circle at 50% 30%, rgba(255,231,159,.30), rgba(219,181,92,.10) 60%, rgba(219,181,92,0) 72%);
2129
+ border:1px solid rgba(219,181,92,.55);color:#f2d587;overflow:hidden;vertical-align:middle;
2130
+ box-shadow:inset 0 0 0 1px rgba(255,226,148,.10),0 0 14px rgba(219,181,92,.26);
2131
+ animation:championGlow 3.6s ease-in-out infinite;}
2132
+ .champion-badge svg{width:15px;height:15px;fill:currentColor;filter:drop-shadow(0 1px 0 rgba(0,0,0,.28))}
2133
+ .champion-badge::after{content:"";position:absolute;top:-25%;left:-50%;width:55%;height:150%;transform:rotate(18deg);
2134
+ background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);
2135
+ animation:championSheen 3.6s ease-in-out infinite;}
2136
+ @keyframes championGlow{0%,100%{box-shadow:inset 0 0 0 1px rgba(255,226,148,.10),0 0 12px rgba(219,181,92,.22)}50%{box-shadow:inset 0 0 0 1px rgba(255,226,148,.16),0 0 20px rgba(219,181,92,.42)}}
2137
+ @keyframes championSheen{0%,55%{transform:translateX(-160%) rotate(18deg);opacity:0}70%{opacity:1}100%{transform:translateX(340%) rotate(18deg);opacity:0}}
2138
+ @media (prefers-reduced-motion: reduce){.champion-badge{animation:none}.champion-badge::after{animation:none;opacity:0}}
2139
+
2140
+ /* 0.2.23 — share metadata, repository links, compact model cards ------------- */
2141
+
2142
+ /* The topbar repository control is an anchor styled like the other actions. */
2143
+ a.button{text-decoration:none}
2144
+ .repo-action{color:var(--text)}
2145
+ .repo-icon{width:11px;height:11px;opacity:.82}
2146
+ .repo-action:hover .repo-icon{opacity:1}
2147
+
2148
+ /* Slim project footer with the canonical repository, issues and npm links. */
2149
+ .site-footer{
2150
+ max-width:1680px;
2151
+ margin:12px auto 0;
2152
+ padding:12px 2px 0;
2153
+ display:flex;
2154
+ align-items:center;
2155
+ justify-content:space-between;
2156
+ gap:10px 16px;
2157
+ flex-wrap:wrap;
2158
+ border-top:1px solid rgba(232,238,243,.07);
2159
+ color:var(--muted);
2160
+ font-size:11px;
2161
+ }
2162
+ .site-footer-brand{display:flex;align-items:center;gap:8px;min-width:0;line-height:1.3}
2163
+ .site-footer-mark{display:grid;place-items:center;flex:0 0 auto;width:22px;height:22px;border-radius:7px;background:rgba(143,214,168,.08);border:1px solid rgba(143,214,168,.18);color:#8fd6a8;font-size:12px}
2164
+ .site-footer-sep{opacity:.4}
2165
+ .site-footer-links{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
2166
+ .site-footer-links a{
2167
+ display:inline-flex;align-items:center;gap:6px;
2168
+ padding:6px 11px;border-radius:999px;
2169
+ border:1px solid rgba(232,238,243,.09);
2170
+ background:rgba(255,255,255,.02);
2171
+ color:#aab5bb;text-decoration:none;
2172
+ font-size:10px;font-weight:800;white-space:nowrap;
2173
+ transition:color .15s ease,border-color .15s ease,background .15s ease;
2174
+ }
2175
+ .site-footer-links a:hover{color:#e7f0e9;border-color:rgba(143,214,168,.3);background:rgba(143,214,168,.07)}
2176
+ .site-footer-icon{width:12px;height:12px;flex:0 0 auto;opacity:.85}
2177
+
2178
+ /* Two model stat cards per row whenever the table stacks above the inspector,
2179
+ so the Models tab needs half the vertical scrolling. Inner grids only compact
2180
+ on narrow phones, where each card would otherwise be too tight. */
2181
+ @media(max-width:859px){
2182
+ .stats-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
2183
+ }
2184
+ @media(max-width:720px){
2185
+ .stat-card{padding:8px;border-radius:9px;min-width:0}
2186
+ .stat-top{flex-direction:column;gap:2px}
2187
+ .stat-top>div{min-width:0}
2188
+ .stat-name{font-size:11px;line-height:1.2}
2189
+ .stat-model{font-size:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
2190
+ .stat-card>.stat-top>strong{font-size:12px;line-height:1.2}
2191
+ .poker-profile{grid-template-columns:repeat(3,minmax(0,1fr));gap:3px;margin-top:7px;padding:5px}
2192
+ .poker-profile b{font-size:8px}
2193
+ .poker-profile span{font-size:5.5px}
2194
+ .stat-values{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;margin-top:6px}
2195
+ .metric{padding:5px}
2196
+ .metric b{font-size:10px}
2197
+ .metric span{font-size:6.5px}
2198
+ .stat-reliability{grid-template-columns:repeat(2,minmax(0,1fr));gap:3px;margin-top:5px;padding-top:6px}
2199
+ .stat-reliability span{font-size:6.5px;padding:3px 4px}
2200
+ .stat-reliability b{font-size:7.5px}
2201
+ }
2202
+
2203
+ @media(max-width:420px){
2204
+ .stats-grid{gap:5px}
2205
+ .stat-card{padding:7px}
2206
+ .poker-profile{grid-template-columns:repeat(3,minmax(0,1fr))}
2207
+ .stat-reliability span{font-size:6px}
2208
+ }
2209
+
2210
+ /* The desktop layout is a true viewport fit: the table owns the full height.
2211
+ The footer therefore only appears once the layout stacks and can scroll.
2212
+ Desktop repo access stays available through the topbar GitHub action. */
2213
+ @media(min-width:860px){
2214
+ .site-footer{display:none}
2215
+ }
2216
+ @media(max-width:720px){
2217
+ .site-footer{margin-top:9px;padding-top:10px;align-items:flex-start;flex-direction:column;gap:9px}
2218
+ .site-footer-links{width:100%}
2219
+ }
2220
+
2221
+ /* 0.2.23 — Action message above the board -------------------------------------
2222
+ The old badge used five saturated action hues plus a glyph. It now shares the
2223
+ same quiet translucent surface as the table HUD below the board, so a call,
2224
+ bet, check or fold reads as part of the felt instead of a notification badge.
2225
+ The per-type colour rules from earlier versions are intentionally flattened. */
2226
+ .table-brand-stage .action-toast,
2227
+ .poker-table[data-density] .table-brand-stage .action-toast,
2228
+ .table-brand-stage .action-toast.raise,
2229
+ .table-brand-stage .action-toast.bet,
2230
+ .table-brand-stage .action-toast.call,
2231
+ .table-brand-stage .action-toast.check,
2232
+ .table-brand-stage .action-toast.fold{
2233
+ min-height:30px!important;
2234
+ padding:6px 15px!important;
2235
+ border-radius:11px!important;
2236
+ background:rgba(7,15,12,.30)!important;
2237
+ border:1px solid rgba(255,255,255,.05)!important;
2238
+ color:rgba(245,249,247,.66)!important;
2239
+ font-size:11px!important;
2240
+ font-weight:600!important;
2241
+ letter-spacing:.012em!important;
2242
+ text-transform:none!important;
2243
+ text-shadow:0 1px 6px rgba(0,0,0,.18)!important;
2244
+ box-shadow:0 8px 22px rgba(0,0,0,.14),inset 0 1px 0 rgba(255,255,255,.02)!important;
2245
+ backdrop-filter:blur(3px)!important;
2246
+ }
2247
+ .table-brand-stage .action-toast::before,
2248
+ .table-brand-stage .action-toast.raise::before,
2249
+ .table-brand-stage .action-toast.bet::before,
2250
+ .table-brand-stage .action-toast.call::before,
2251
+ .table-brand-stage .action-toast.check::before,
2252
+ .table-brand-stage .action-toast.fold::before{content:none!important;display:none!important}
2253
+ .poker-table[data-density="compact"] .table-brand-stage .action-toast{font-size:10px!important;min-height:28px!important;padding:5px 13px!important}
2254
+ .poker-table[data-density="tight"] .table-brand-stage .action-toast{font-size:9px!important;min-height:26px!important;padding:5px 11px!important;border-radius:9px!important}
2255
+ .poker-table[data-density="micro"] .table-brand-stage .action-toast{font-size:8px!important;min-height:23px!important;padding:4px 9px!important;border-radius:8px!important}
2256
+ @media(max-width:720px){
2257
+ .poker-table[data-density] .table-brand-stage .action-toast{font-size:9px!important;min-height:26px!important;padding:5px 11px!important;border-radius:9px!important}
2258
+ }
2259
+
2260
+ /* Small screens: a card keeps only its top-left rank and the centred suit. The
2261
+ corner suit glyph and the mirrored bottom-right corner are dropped, so cards
2262
+ stay clean and legible at phone sizes. */
2263
+ @media(max-width:720px){
2264
+ .card .card-corner i{display:none!important}
2265
+ .card .card-corner.bottom{display:none!important}
2266
+ }
2267
+
2268
+ /* 0.2.23 — decision diagnostics + deterministic hand evaluation
2269
+ Spectator-only annotations. The note explicitly separates typed model
2270
+ answers from any fabricated rationale. */
2271
+ .decision-facts-note{margin-top:6px;font-size:10px;line-height:1.4;color:var(--muted,#8aa098);border-left:2px solid rgba(184,236,111,.35);padding-left:8px}
2272
+ .replay-reason-text{margin-bottom:10px;line-height:1.45}
2273
+ .replay-summary span b{white-space:nowrap}
2274
+
2275
+ /* 0.3.0 — hierarchical decision architecture + Strategy/Raw benchmark modes.
2276
+ The two-stage action-family/size contract uses the same instrument geometry
2277
+ for every model; probability telemetry is grouped and translated so raw
2278
+ A0/A1 identifiers are never surfaced to spectators. */
2279
+ .benchmark-advanced{margin-top:10px}
2280
+ .benchmark-advanced summary{cursor:pointer;font-size:12px;color:var(--muted,#8aa098);letter-spacing:.02em}
2281
+ .checkbox-field{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted,#8aa098)}
2282
+ .checkbox-field input{width:auto}
2283
+ .stage-chip{white-space:nowrap}
2284
+ .telemetry-group{margin-top:6px}
2285
+ .telemetry-caption{display:block;font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted,#8aa098);margin-bottom:3px}
2286
+ .decision-facts-note{white-space:normal}
2287
+
2288
+ /* 0.4.0 — methodology, reproducibility and repository-organization release.
2289
+ Browser application source moved under src/; visual behavior is unchanged. */