orbcafe-ui 1.4.5 → 2.0.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/dist/orbis.css ADDED
@@ -0,0 +1,2519 @@
1
+ @font-face {
2
+ font-family: "SAP-icons";
3
+ src:
4
+ url("./fonts/SAP-icons.woff2") format("woff2"),
5
+ url("./fonts/SAP-icons.ttf") format("truetype");
6
+ font-weight: normal;
7
+ font-style: normal;
8
+ font-display: block;
9
+ }
10
+
11
+ /* ==========================================================================
12
+ ORBCAFE × ORBIS — orbis.css
13
+ Adapted from the official ORBIS design handoff (orbis-reference.css).
14
+ Token discipline: every literal is a registered ORBIS brand color
15
+ (#ffffff #f5f5f5 #555555 #8c8c8c #dbdbdb #154194 #fc4c02) plus the
16
+ brief-mandated dark tokens (#01091a #0a1526). All other values are
17
+ OKLCh mixes / alpha derivations of those literals via color-mix().
18
+
19
+ Consumers must import this file once: import 'orbcafe-ui/dist/orbis.css';
20
+ Dark mode: add class "orb-dark" (or data-orb-mode="dark") on <html>.
21
+ OrbisModeProvider does this automatically.
22
+ ========================================================================== */
23
+
24
+ :root {
25
+ --orb-font: "Montserrat", system-ui, -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
26
+ --orb-r: 10px;
27
+ --orb-r-container: var(--orb-r);
28
+ --orb-t-fast: 0.2s ease;
29
+
30
+ /* ---------- light tokens (default) ---------- */
31
+ --orb-canvas: #ffffff;
32
+ --orb-surface: #f5f5f5;
33
+ --orb-surface-2: #f5f5f5;
34
+ --orb-surface-3: #f5f5f5;
35
+ --orb-fg: #555555;
36
+ --orb-fg-strong: #555555;
37
+ --orb-table-fg: color-mix(in oklch, #555555 92%, #01091a);
38
+ --orb-muted: #8c8c8c;
39
+ --orb-border: #dbdbdb;
40
+ --orb-primary: #154194;
41
+ --orb-on-primary: #ffffff;
42
+ --orb-link: #154194;
43
+ --orb-p50: color-mix(in oklch, #154194 6%, #ffffff);
44
+ --orb-p100: color-mix(in oklch, #154194 14%, #ffffff);
45
+ --orb-p200: color-mix(in oklch, #154194 28%, #ffffff);
46
+ --orb-p300: color-mix(in oklch, #154194 45%, #ffffff);
47
+ --orb-p600: color-mix(in oklch, #154194 85%, #000000);
48
+ --orb-p700: color-mix(in oklch, #154194 70%, #000000);
49
+ --orb-accent: #fc4c02;
50
+ --orb-divider: var(--orb-border);
51
+ --orb-primary-bg: var(--orb-p50);
52
+ --orb-info: var(--orb-primary);
53
+ --orb-info-bg: var(--orb-p50);
54
+ --orb-success: var(--orb-primary);
55
+ --orb-success-bg: var(--orb-p50);
56
+ --orb-warn: var(--orb-accent);
57
+ --orb-err: color-mix(in oklch, #fc4c02 75%, #000000);
58
+ --orb-err-bg: color-mix(in oklch, #fc4c02 7%, #ffffff);
59
+ --orb-warn-bg: color-mix(in oklch, #fc4c02 8%, #ffffff);
60
+ --orb-hover: color-mix(in oklch, #154194 6%, transparent);
61
+ --orb-selected: color-mix(in oklch, #154194 10%, transparent);
62
+ --orb-focus-ring: color-mix(in oklch, #154194 18%, transparent);
63
+ --orb-focus-solid: #154194;
64
+ --orb-disabled-fg: color-mix(in oklch, #555555 45%, #ffffff);
65
+ --orb-disabled-bg: color-mix(in oklch, #555555 8%, #ffffff);
66
+ --orb-chart-grid: #dbdbdb;
67
+ --orb-chart-text: #8c8c8c;
68
+ --orb-track: #f5f5f5;
69
+ --orb-shadow-1: 0 1px 2px rgba(1, 9, 26, 0.05), 0 2px 6px rgba(1, 9, 26, 0.06);
70
+ --orb-shadow-2: 0 4px 14px rgba(1, 9, 26, 0.1);
71
+ --orb-shadow-3: 0 12px 32px rgba(1, 9, 26, 0.16);
72
+ color-scheme: light;
73
+ }
74
+
75
+ .orb-dark,
76
+ [data-orb-mode="dark"] {
77
+ --orb-canvas: #01091a;
78
+ --orb-surface: #0a1526;
79
+ --orb-surface-2: color-mix(in oklch, #ffffff 5%, #01091a);
80
+ --orb-surface-3: color-mix(in oklch, #ffffff 9%, #01091a);
81
+ --orb-fg: #ffffff;
82
+ --orb-fg-strong: #ffffff;
83
+ --orb-table-fg: #ffffff;
84
+ --orb-muted: rgba(255, 255, 255, 0.7);
85
+ --orb-border: rgba(255, 255, 255, 0.12);
86
+ --orb-primary: #154194;
87
+ --orb-on-primary: #ffffff;
88
+ --orb-link: color-mix(in oklch, #154194 45%, #ffffff);
89
+ --orb-p50: color-mix(in oklch, #154194 22%, #01091a);
90
+ --orb-p100: color-mix(in oklch, #154194 32%, #01091a);
91
+ --orb-p200: color-mix(in oklch, #154194 28%, #ffffff);
92
+ --orb-p300: color-mix(in oklch, #154194 45%, #ffffff);
93
+ --orb-p600: color-mix(in oklch, #154194 85%, #ffffff);
94
+ --orb-p700: color-mix(in oklch, #154194 60%, #ffffff);
95
+ --orb-accent: #fc4c02;
96
+ --orb-divider: var(--orb-border);
97
+ --orb-primary-bg: var(--orb-p50);
98
+ --orb-info: var(--orb-p300);
99
+ --orb-info-bg: var(--orb-p50);
100
+ --orb-success: var(--orb-p300);
101
+ --orb-success-bg: var(--orb-p50);
102
+ --orb-warn: var(--orb-accent);
103
+ --orb-err: color-mix(in oklch, #fc4c02 88%, #000000);
104
+ --orb-err-bg: color-mix(in oklch, #fc4c02 16%, #01091a);
105
+ --orb-warn-bg: color-mix(in oklch, #fc4c02 18%, #01091a);
106
+ --orb-hover: rgba(255, 255, 255, 0.08);
107
+ --orb-selected: color-mix(in oklch, #154194 45%, transparent);
108
+ --orb-focus-ring: color-mix(in oklch, #154194 45%, #ffffff 25%);
109
+ --orb-focus-solid: color-mix(in oklch, #154194 45%, #ffffff);
110
+ --orb-disabled-fg: rgba(255, 255, 255, 0.38);
111
+ --orb-disabled-bg: rgba(255, 255, 255, 0.07);
112
+ --orb-chart-grid: rgba(255, 255, 255, 0.12);
113
+ --orb-chart-text: rgba(255, 255, 255, 0.7);
114
+ --orb-track: rgba(255, 255, 255, 0.1);
115
+ --orb-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.35);
116
+ --orb-shadow-2: 0 4px 16px rgba(0, 0, 0, 0.5);
117
+ --orb-shadow-3: 0 12px 32px rgba(0, 0, 0, 0.55);
118
+ color-scheme: dark;
119
+ }
120
+
121
+ /* ---------- base ---------- */
122
+ .orb-root {
123
+ background: var(--orb-canvas);
124
+ color: var(--orb-fg);
125
+ font: 300 14px/1.5 var(--orb-font);
126
+ -webkit-font-smoothing: antialiased;
127
+ }
128
+
129
+ .orb-root ::selection {
130
+ background: var(--orb-selected);
131
+ }
132
+
133
+ .orb-root :focus-visible,
134
+ .orb-focus-visible:focus-visible {
135
+ outline: 2px solid var(--orb-focus-solid);
136
+ outline-offset: 1px;
137
+ }
138
+
139
+ /* typography helpers (type scale from the handoff §2) */
140
+ .orb-h1 { font: 600 32px/1.25 var(--orb-font); color: var(--orb-fg-strong); }
141
+ .orb-h2 { font: 600 24px/1.3 var(--orb-font); color: var(--orb-fg-strong); }
142
+ .orb-h3 { font: 600 19px/1.3 var(--orb-font); color: var(--orb-fg-strong); }
143
+ .orb-subtitle { font: 500 16px/1.4 var(--orb-font); color: var(--orb-fg); }
144
+ .orb-body { font: 300 16px/1.5 var(--orb-font); color: var(--orb-fg); }
145
+ .orb-body-dense { font: 300 14px/1.5 var(--orb-font); color: var(--orb-fg); }
146
+ .orb-label { font: 500 13px/1.3 var(--orb-font); color: var(--orb-fg); }
147
+ .orb-meta { font: 500 12px/1.4 var(--orb-font); color: var(--orb-muted); }
148
+ .orb-overline {
149
+ font: 500 11px/1.4 var(--orb-font);
150
+ letter-spacing: 0.06em;
151
+ text-transform: uppercase;
152
+ color: var(--orb-muted);
153
+ }
154
+ .orb-num { font-variant-numeric: tabular-nums; }
155
+
156
+ .orb-link {
157
+ font: 500 13px/1.4 var(--orb-font);
158
+ color: var(--orb-link);
159
+ text-decoration: none;
160
+ cursor: pointer;
161
+ background: none;
162
+ border: none;
163
+ padding: 0;
164
+ }
165
+ .orb-link:hover { text-decoration: underline; }
166
+
167
+ .orb-divider { border: none; border-top: 1px solid var(--orb-border); }
168
+ .orb-divider-v { border: none; border-left: 1px solid var(--orb-border); }
169
+
170
+ /* ---------- buttons ---------- */
171
+ .orb-btn {
172
+ appearance: none;
173
+ cursor: pointer;
174
+ font: 500 14px/1 var(--orb-font);
175
+ min-height: 36px;
176
+ padding: 0 18px;
177
+ border-radius: var(--orb-r-container);
178
+ border: 1px solid transparent;
179
+ display: inline-flex;
180
+ align-items: center;
181
+ justify-content: center;
182
+ gap: 8px;
183
+ transition: background var(--orb-t-fast), color var(--orb-t-fast),
184
+ border-color var(--orb-t-fast), box-shadow var(--orb-t-fast);
185
+ }
186
+ .orb-btn-lg { min-height: 44px; padding: 0 24px; font-size: 15px; }
187
+ .orb-btn-sm { min-height: 32px; padding: 0 12px; font-size: 13px; }
188
+ .orb-btn-block { width: 100%; }
189
+ .orb-btn-primary { background: var(--orb-primary); color: var(--orb-on-primary); box-shadow: var(--orb-shadow-1); }
190
+ .orb-btn-primary:hover:not(:disabled) { background: var(--orb-p600); }
191
+ .orb-btn-primary:active:not(:disabled) { background: var(--orb-p700); box-shadow: none; }
192
+ .orb-btn-secondary { background: transparent; color: var(--orb-primary); border-color: var(--orb-primary); }
193
+ .orb-btn-secondary:hover:not(:disabled) { background: var(--orb-hover); }
194
+ .orb-btn-ghost { background: transparent; color: var(--orb-primary); }
195
+ .orb-btn-ghost:hover:not(:disabled) { background: var(--orb-hover); }
196
+ .orb-btn-neutral { background: transparent; color: var(--orb-fg); border-color: var(--orb-border); }
197
+ .orb-btn-neutral:hover:not(:disabled) { background: var(--orb-hover); border-color: var(--orb-muted); }
198
+ .orb-btn:disabled,
199
+ .orb-btn.orb-is-disabled {
200
+ cursor: not-allowed;
201
+ background: var(--orb-disabled-bg);
202
+ color: var(--orb-disabled-fg);
203
+ border-color: transparent;
204
+ box-shadow: none;
205
+ }
206
+ .orb-btn:disabled:hover { background: var(--orb-disabled-bg); }
207
+ .orb-btn.orb-is-loading { pointer-events: none; }
208
+
209
+ .orb-icon-btn {
210
+ width: 36px;
211
+ height: 36px;
212
+ display: inline-flex;
213
+ align-items: center;
214
+ justify-content: center;
215
+ border-radius: var(--orb-r);
216
+ border: 1px solid transparent;
217
+ background: transparent;
218
+ color: var(--orb-muted);
219
+ cursor: pointer;
220
+ flex: none;
221
+ transition: background var(--orb-t-fast), color var(--orb-t-fast);
222
+ }
223
+ .orb-icon-btn:hover:not(:disabled) { background: var(--orb-hover); color: var(--orb-fg); }
224
+ .orb-icon-btn:disabled { cursor: not-allowed; color: var(--orb-disabled-fg); }
225
+ .orb-icon-btn-sm { width: 32px; height: 32px; }
226
+
227
+ .orb-segmented-control {
228
+ --orb-segmented-slot: 36px;
229
+ --orb-segmented-height: 32px;
230
+ --orb-segmented-pad: 2px;
231
+ position: relative;
232
+ isolation: isolate;
233
+ box-sizing: border-box;
234
+ display: inline-grid;
235
+ grid-template-columns: repeat(var(--orb-segmented-count), minmax(var(--orb-segmented-slot), 1fr));
236
+ align-items: center;
237
+ gap: 0;
238
+ height: var(--orb-segmented-height);
239
+ padding: var(--orb-segmented-pad);
240
+ border: 1px solid var(--orb-border);
241
+ border-radius: calc(var(--orb-segmented-height) / 2);
242
+ background: var(--orb-surface);
243
+ box-shadow: inset 0 1px 2px rgba(85, 85, 85, 0.08);
244
+ user-select: none;
245
+ vertical-align: middle;
246
+ }
247
+ .orb-segmented-control-thumb {
248
+ position: absolute;
249
+ z-index: 0;
250
+ top: var(--orb-segmented-pad);
251
+ bottom: var(--orb-segmented-pad);
252
+ left: var(--orb-segmented-pad);
253
+ width: calc((100% - (var(--orb-segmented-pad) * 2)) / var(--orb-segmented-count));
254
+ border-radius: 999px;
255
+ background: var(--orb-primary);
256
+ box-shadow: 0 1px 2px rgba(21, 65, 148, 0.3), 0 0 1px rgba(21, 65, 148, 0.24);
257
+ opacity: 1;
258
+ pointer-events: none;
259
+ transform: translateX(calc(var(--orb-segmented-index) * 100%));
260
+ transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1), background-color 120ms ease, opacity 120ms ease;
261
+ }
262
+ .orb-segmented-control[data-has-selection="false"] .orb-segmented-control-thumb {
263
+ opacity: 0;
264
+ }
265
+ .orb-segmented-control .orb-segmented-control-item {
266
+ position: relative;
267
+ z-index: 1;
268
+ width: 100%;
269
+ min-width: var(--orb-segmented-slot);
270
+ height: 100%;
271
+ padding: 0;
272
+ border: 0;
273
+ border-radius: 999px;
274
+ background: transparent;
275
+ color: var(--orb-muted);
276
+ box-shadow: none;
277
+ transition: color 120ms ease, background-color 120ms ease;
278
+ }
279
+ .orb-segmented-control .orb-segmented-control-item > svg {
280
+ width: 16px;
281
+ height: 16px;
282
+ }
283
+ .orb-segmented-control .orb-segmented-control-item:hover:not(:disabled):not([data-selected="true"]) {
284
+ border-color: transparent;
285
+ background: color-mix(in oklch, var(--orb-fg) 6%, transparent);
286
+ color: var(--orb-fg);
287
+ }
288
+ .orb-segmented-control .orb-segmented-control-item[data-selected="true"] {
289
+ border-color: transparent;
290
+ background: transparent;
291
+ color: var(--orb-on-primary);
292
+ box-shadow: none;
293
+ }
294
+ .orb-segmented-control .orb-segmented-control-item:active:not(:disabled) {
295
+ background: color-mix(in oklch, var(--orb-fg) 10%, transparent);
296
+ }
297
+ .orb-segmented-control .orb-segmented-control-item[data-selected="true"]:active {
298
+ background: transparent;
299
+ }
300
+ .orb-segmented-control:has(.orb-segmented-control-item[data-selected="true"]:active) .orb-segmented-control-thumb {
301
+ background: color-mix(in oklch, var(--orb-primary) 92%, #000000);
302
+ }
303
+ .orb-segmented-control .orb-segmented-control-item:focus {
304
+ outline: none;
305
+ }
306
+ .orb-segmented-control:has(.orb-segmented-control-item:focus-visible) {
307
+ outline: 2px solid var(--orb-focus-solid);
308
+ outline-offset: 2px;
309
+ }
310
+ .orb-segmented-control .orb-segmented-control-item:disabled {
311
+ opacity: 0.4;
312
+ }
313
+ .orb-segmented-control-sm {
314
+ --orb-segmented-slot: 28px;
315
+ --orb-segmented-height: 24px;
316
+ }
317
+ .orb-segmented-control-sm .orb-segmented-control-item > svg {
318
+ width: 12px;
319
+ height: 12px;
320
+ }
321
+ .orb-segmented-control .orb-segmented-control-item-label {
322
+ width: auto;
323
+ min-width: var(--orb-segmented-slot);
324
+ padding-inline: 8px;
325
+ }
326
+ .orb-segmented-control-sm .orb-segmented-control-item-label {
327
+ min-width: var(--orb-segmented-slot);
328
+ padding-inline: 6px;
329
+ }
330
+ .orb-segmented-control-label {
331
+ padding: 0 6px;
332
+ overflow: hidden;
333
+ font: 500 12px/1 var(--orb-font);
334
+ letter-spacing: 0;
335
+ text-overflow: ellipsis;
336
+ white-space: nowrap;
337
+ }
338
+ .orb-dark .orb-segmented-control,
339
+ [data-orb-mode="dark"] .orb-segmented-control {
340
+ border-color: rgba(255, 255, 255, 0.14);
341
+ background: color-mix(in oklch, #ffffff 6%, transparent);
342
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.4);
343
+ }
344
+ .orb-dark .orb-segmented-control-thumb,
345
+ [data-orb-mode="dark"] .orb-segmented-control-thumb {
346
+ background: var(--orb-primary);
347
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5), 0 0 1px rgba(0, 0, 0, 0.6);
348
+ }
349
+ .orb-dark .orb-segmented-control .orb-segmented-control-item:hover:not(:disabled):not([data-selected="true"]),
350
+ [data-orb-mode="dark"] .orb-segmented-control .orb-segmented-control-item:hover:not(:disabled):not([data-selected="true"]) {
351
+ background: rgba(255, 255, 255, 0.08);
352
+ color: var(--orb-fg);
353
+ }
354
+ .orb-dark .orb-segmented-control .orb-segmented-control-item:active:not(:disabled):not([data-selected="true"]),
355
+ [data-orb-mode="dark"] .orb-segmented-control .orb-segmented-control-item:active:not(:disabled):not([data-selected="true"]) {
356
+ background: rgba(255, 255, 255, 0.12);
357
+ }
358
+ .orb-dark .orb-segmented-control:has(.orb-segmented-control-item:focus-visible),
359
+ [data-orb-mode="dark"] .orb-segmented-control:has(.orb-segmented-control-item:focus-visible) {
360
+ outline-color: var(--orb-p300);
361
+ }
362
+
363
+ @media (prefers-reduced-motion: reduce) {
364
+ .orb-segmented-control-thumb {
365
+ transition: transform 1ms linear, background-color 120ms ease, opacity 1ms linear;
366
+ }
367
+ }
368
+
369
+ /* ---------- form fields ---------- */
370
+ .orb-fld { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
371
+ .orb-fld > label,
372
+ .orb-fld-label { font: 500 13px/1.3 var(--orb-font); color: var(--orb-fg); }
373
+ .orb-inp {
374
+ font: 300 14px/1.4 var(--orb-font);
375
+ color: var(--orb-fg);
376
+ background: var(--orb-canvas);
377
+ border: 1px solid var(--orb-border);
378
+ border-radius: var(--orb-r);
379
+ min-height: 44px;
380
+ padding: 10px 14px;
381
+ width: 100%;
382
+ transition: border-color var(--orb-t-fast), box-shadow var(--orb-t-fast), background var(--orb-t-fast);
383
+ }
384
+ .orb-inp::placeholder { color: var(--orb-muted); }
385
+ .orb-inp:hover:not(:disabled):not(:focus) { border-color: var(--orb-muted); }
386
+ .orb-inp:focus { outline: none; border-color: var(--orb-primary); box-shadow: 0 0 0 3px var(--orb-focus-ring); }
387
+ .orb-inp:disabled { background: var(--orb-disabled-bg); color: var(--orb-disabled-fg); cursor: not-allowed; }
388
+ .orb-inp-dense { min-height: 36px; padding: 7px 12px; }
389
+ .orb-inp-adornment-wrap { position: relative; display: flex; align-items: center; }
390
+ .orb-inp-adornment-wrap .orb-inp { padding-left: 38px; }
391
+ .orb-inp-adornment {
392
+ position: absolute;
393
+ left: 10px;
394
+ display: inline-flex;
395
+ align-items: center;
396
+ color: var(--orb-muted);
397
+ pointer-events: none;
398
+ }
399
+ .orb-inp-adornment-end { left: auto; right: 10px; }
400
+ .orb-inp-adornment-end ~ .orb-inp,
401
+ .orb-inp-adornment-wrap:has(.orb-inp-adornment-end) .orb-inp { padding-left: 14px; padding-right: 38px; }
402
+ textarea.orb-inp { min-height: 80px; resize: vertical; }
403
+ .orb-fld-msg { font: 500 12px/1.4 var(--orb-font); color: var(--orb-muted); }
404
+ .orb-fld.orb-is-error .orb-inp { border-color: var(--orb-err); }
405
+ .orb-fld.orb-is-error .orb-inp:focus {
406
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--orb-err) 18%, transparent);
407
+ }
408
+ .orb-fld.orb-is-error .orb-fld-msg { color: var(--orb-err); }
409
+ select.orb-inp {
410
+ appearance: none;
411
+ padding-right: 36px;
412
+ background-image: linear-gradient(45deg, transparent 50%, var(--orb-muted) 50%),
413
+ linear-gradient(135deg, var(--orb-muted) 50%, transparent 50%);
414
+ background-position: calc(100% - 18px) 50%, calc(100% - 13px) 50%;
415
+ background-size: 5px 5px;
416
+ background-repeat: no-repeat;
417
+ }
418
+
419
+ .orb-chk,
420
+ .orb-rdo {
421
+ position: relative;
422
+ display: inline-flex;
423
+ align-items: center;
424
+ gap: 10px;
425
+ font: 300 14px/1.4 var(--orb-font);
426
+ color: var(--orb-fg);
427
+ cursor: pointer;
428
+ }
429
+ .orb-chk input,
430
+ .orb-rdo input {
431
+ appearance: none;
432
+ width: 18px;
433
+ height: 18px;
434
+ margin: 0;
435
+ flex: none;
436
+ border: 1px solid var(--orb-muted);
437
+ background: var(--orb-canvas);
438
+ transition: background var(--orb-t-fast), border-color var(--orb-t-fast);
439
+ cursor: pointer;
440
+ }
441
+ .orb-chk input { border-radius: 5px; }
442
+ .orb-chk input:checked {
443
+ background: var(--orb-primary);
444
+ border-color: var(--orb-primary);
445
+ }
446
+ .orb-chk:has(input:checked)::after {
447
+ content: "\e05b";
448
+ position: absolute;
449
+ left: 0;
450
+ top: 50%;
451
+ width: 18px;
452
+ height: 18px;
453
+ display: inline-flex;
454
+ align-items: center;
455
+ justify-content: center;
456
+ color: var(--orb-on-primary);
457
+ font-family: "SAP-icons";
458
+ font-size: 13px;
459
+ font-style: normal;
460
+ font-weight: normal;
461
+ line-height: 1;
462
+ pointer-events: none;
463
+ transform: translateY(-50%);
464
+ -webkit-font-smoothing: antialiased;
465
+ }
466
+
467
+ /* SAP-icons' accept glyph is optically left-heavy; compensate inside table cells. */
468
+ .orb-ctable .orb-chk:has(input:checked)::after {
469
+ transform: translate(1.5px, calc(-50% - 0.5px));
470
+ }
471
+ .orb-rdo input { border-radius: 50%; }
472
+ .orb-rdo input:checked { border: 5px solid var(--orb-primary); }
473
+ .orb-chk input:focus-visible,
474
+ .orb-rdo input:focus-visible { outline: 2px solid var(--orb-focus-solid); outline-offset: 1px; }
475
+ .orb-chk input:disabled,
476
+ .orb-rdo input:disabled { background: var(--orb-disabled-bg); border-color: var(--orb-border); cursor: not-allowed; }
477
+
478
+ .orb-sw {
479
+ position: relative;
480
+ display: inline-flex;
481
+ align-items: center;
482
+ gap: 10px;
483
+ cursor: pointer;
484
+ font: 300 14px/1.4 var(--orb-font);
485
+ color: var(--orb-fg);
486
+ }
487
+ .orb-sw input {
488
+ appearance: none;
489
+ width: 38px;
490
+ height: 22px;
491
+ margin: 0;
492
+ border-radius: 11px;
493
+ background: var(--orb-disabled-bg);
494
+ border: 1px solid var(--orb-border);
495
+ transition: background var(--orb-t-fast);
496
+ cursor: pointer;
497
+ flex: none;
498
+ }
499
+ .orb-sw input::after {
500
+ content: "";
501
+ position: absolute;
502
+ top: 4px;
503
+ left: 3px;
504
+ width: 16px;
505
+ height: 16px;
506
+ border-radius: 50%;
507
+ background: var(--orb-canvas);
508
+ box-shadow: var(--orb-shadow-1);
509
+ transition: transform var(--orb-t-fast);
510
+ }
511
+ .orb-sw input:checked { background: var(--orb-primary); border-color: var(--orb-primary); }
512
+ .orb-sw input:checked::after { transform: translateX(16px); }
513
+ .orb-sw input:focus-visible { outline: 2px solid var(--orb-focus-solid); outline-offset: 1px; }
514
+
515
+ /* ---------- chips / badges / alerts / feedback ---------- */
516
+ .orb-chip {
517
+ display: inline-flex;
518
+ align-items: center;
519
+ gap: 6px;
520
+ height: 26px;
521
+ padding: 0 12px;
522
+ border-radius: var(--orb-r);
523
+ font: 500 12px/1 var(--orb-font);
524
+ border: 1px solid transparent;
525
+ white-space: nowrap;
526
+ }
527
+ .orb-chip-blue { background: var(--orb-p50); color: var(--orb-primary); }
528
+ .orb-chip-gray { background: var(--orb-surface); color: var(--orb-fg); border-color: var(--orb-border); }
529
+ .orb-chip-orange { background: var(--orb-warn-bg); color: var(--orb-err); }
530
+ .orb-chip-outline { background: transparent; border-color: var(--orb-border); color: var(--orb-muted); }
531
+ .orb-dark .orb-chip-blue,
532
+ [data-orb-mode="dark"] .orb-chip-blue { color: var(--orb-p300); }
533
+
534
+ .orb-badge {
535
+ display: inline-flex;
536
+ align-items: center;
537
+ justify-content: center;
538
+ min-width: 18px;
539
+ height: 18px;
540
+ padding: 0 5px;
541
+ border-radius: 9px;
542
+ background: var(--orb-primary);
543
+ color: var(--orb-on-primary);
544
+ font: 500 11px/1 var(--orb-font);
545
+ }
546
+ .orb-badge-err { background: var(--orb-err); }
547
+ .orb-badge-muted { background: var(--orb-surface-3); color: var(--orb-muted); border: 1px solid var(--orb-border); }
548
+
549
+ .orb-alert {
550
+ position: relative;
551
+ display: flex;
552
+ gap: 12px;
553
+ align-items: flex-start;
554
+ border: 1px solid var(--orb-border);
555
+ border-radius: var(--orb-r);
556
+ padding: 13px 16px 13px 18px;
557
+ font: 300 14px/1.5 var(--orb-font);
558
+ color: var(--orb-fg);
559
+ background: var(--orb-canvas);
560
+ }
561
+ .orb-alert::before {
562
+ content: "";
563
+ position: absolute;
564
+ left: 0;
565
+ top: 0;
566
+ bottom: 0;
567
+ width: 2px;
568
+ border-radius: 2px 0 0 2px;
569
+ }
570
+ .orb-alert b { font-weight: 600; display: block; margin-bottom: 2px; }
571
+ .orb-alert-info { background: var(--orb-p50); border-color: var(--orb-p100); }
572
+ .orb-alert-info::before { background: var(--orb-primary); }
573
+ .orb-alert-success { background: var(--orb-p50); border-color: var(--orb-p100); }
574
+ .orb-alert-success::before { background: var(--orb-primary); }
575
+ .orb-alert-warning { background: var(--orb-warn-bg); border-color: color-mix(in oklch, var(--orb-accent) 25%, var(--orb-border)); }
576
+ .orb-alert-warning::before { background: var(--orb-accent); }
577
+ .orb-alert-error { background: var(--orb-err-bg); border-color: color-mix(in oklch, var(--orb-err) 25%, var(--orb-border)); }
578
+ .orb-alert-error::before { background: var(--orb-err); }
579
+
580
+ .orb-prog { height: 4px; border-radius: 2px; background: var(--orb-track); overflow: hidden; }
581
+ .orb-prog > i { display: block; height: 100%; background: var(--orb-primary); border-radius: 2px; transition: width var(--orb-t-fast); }
582
+
583
+ .orb-skel {
584
+ border-radius: 6px;
585
+ background: linear-gradient(90deg, var(--orb-track) 25%, var(--orb-surface-3) 50%, var(--orb-track) 75%);
586
+ background-size: 200% 100%;
587
+ animation: orb-sk 1.6s linear infinite;
588
+ }
589
+ @keyframes orb-sk { to { background-position: -200% 0; } }
590
+
591
+ .orb-spin {
592
+ width: 12px;
593
+ height: 12px;
594
+ flex: none;
595
+ border-radius: 50%;
596
+ border: 2px solid var(--orb-p100);
597
+ border-top-color: var(--orb-primary);
598
+ animation: orb-rot 1s linear infinite;
599
+ display: inline-block;
600
+ }
601
+ .orb-spin-light { border-color: rgba(255, 255, 255, 0.35); border-top-color: #ffffff; }
602
+ @keyframes orb-rot { to { transform: rotate(360deg); } }
603
+
604
+ .orb-snack {
605
+ display: inline-flex;
606
+ align-items: center;
607
+ gap: 16px;
608
+ background: #01091a;
609
+ color: #ffffff;
610
+ border-radius: var(--orb-r);
611
+ padding: 13px 18px;
612
+ font: 300 14px/1.4 var(--orb-font);
613
+ box-shadow: var(--orb-shadow-2);
614
+ }
615
+ .orb-snack button { background: none; border: none; color: #91a8d1; font: 500 13px var(--orb-font); cursor: pointer; padding: 0; }
616
+
617
+ /* ---------- cards / surfaces ---------- */
618
+ .orb-card {
619
+ background: var(--orb-canvas);
620
+ border: 1px solid var(--orb-border);
621
+ border-radius: var(--orb-r);
622
+ padding: 16px;
623
+ }
624
+ .orb-card-raised { box-shadow: var(--orb-shadow-1); }
625
+ .orb-surface { background: var(--orb-surface); border: 1px solid var(--orb-border); border-radius: var(--orb-r-container); }
626
+
627
+ /* ---------- tables ---------- */
628
+ .orb-table-toolbar {
629
+ width: 100%;
630
+ min-width: 0;
631
+ display: flex;
632
+ flex-direction: row;
633
+ padding: 6px 14px 6px 0;
634
+ background: var(--orb-canvas);
635
+ border-bottom: 1px solid var(--orb-border);
636
+ box-sizing: border-box;
637
+ }
638
+
639
+ .orb-planning-gantt {
640
+ background: var(--orb-canvas);
641
+ }
642
+
643
+ .orb-planning-table-toolbar {
644
+ padding-left: 14px;
645
+ }
646
+
647
+ .orb-planning-table-toolbar .orb-table-toolbar-custom {
648
+ flex: 0 0 auto;
649
+ }
650
+
651
+ .orb-planning-extra-tool {
652
+ display: flex;
653
+ align-items: center;
654
+ }
655
+
656
+ .orb-planning-pane-controls .orb-segmented-control {
657
+ min-height: 32px;
658
+ height: 32px;
659
+ }
660
+
661
+ .orb-planning-scale-control .orb-fld {
662
+ width: 120px;
663
+ min-width: 120px;
664
+ }
665
+
666
+ .orb-planning-scale-control .orb-select-trigger {
667
+ min-height: 32px;
668
+ height: 32px;
669
+ font-size: 12px;
670
+ }
671
+
672
+ .orb-table-sort-dialog {
673
+ gap: 18px;
674
+ }
675
+
676
+ .orb-table-sort-dialog > div:first-child {
677
+ align-items: center !important;
678
+ }
679
+
680
+ .orb-table-sort-dialog-content {
681
+ display: grid;
682
+ gap: 16px;
683
+ }
684
+
685
+ .orb-table-sort-empty {
686
+ min-height: 56px;
687
+ display: flex;
688
+ align-items: center;
689
+ padding: 12px 14px;
690
+ border: 1px dashed var(--orb-border);
691
+ border-radius: var(--orb-r);
692
+ background: var(--orb-surface);
693
+ color: var(--orb-muted);
694
+ }
695
+
696
+ .orb-table-sort-rules {
697
+ gap: 8px !important;
698
+ }
699
+
700
+ .orb-table-sort-rule {
701
+ display: grid;
702
+ grid-template-columns: 28px minmax(160px, 1fr) 150px 32px 32px 32px;
703
+ align-items: center;
704
+ gap: 8px;
705
+ min-height: 48px;
706
+ padding: 6px 8px;
707
+ border: 1px solid var(--orb-border);
708
+ border-radius: var(--orb-r);
709
+ background: var(--orb-canvas);
710
+ }
711
+
712
+ .orb-table-sort-rule .orb-select-trigger {
713
+ min-height: 34px;
714
+ height: 34px;
715
+ }
716
+
717
+ .orb-table-sort-order {
718
+ justify-self: center;
719
+ }
720
+
721
+ .orb-table-sort-icon-button {
722
+ width: 32px !important;
723
+ height: 32px !important;
724
+ color: var(--orb-muted) !important;
725
+ }
726
+
727
+ .orb-table-sort-icon-button:hover:not(:disabled) {
728
+ background: var(--orb-hover) !important;
729
+ color: var(--orb-fg) !important;
730
+ }
731
+
732
+ .orb-table-sort-delete:hover:not(:disabled) {
733
+ color: var(--orb-danger) !important;
734
+ }
735
+
736
+ .orb-table-sort-add {
737
+ justify-self: start;
738
+ }
739
+
740
+ .orb-table-sort-dialog .orb-dialog-actions {
741
+ margin-top: 0;
742
+ padding-top: 2px;
743
+ }
744
+
745
+ .orb-table-sort-action-spacer {
746
+ flex: 1 1 auto;
747
+ }
748
+
749
+ @media (max-width: 680px) {
750
+ .orb-table-sort-rule {
751
+ grid-template-columns: 28px minmax(0, 1fr) 32px 32px 32px;
752
+ }
753
+
754
+ .orb-table-sort-rule > .orb-fld:nth-of-type(2) {
755
+ grid-column: 2 / -1;
756
+ grid-row: 2;
757
+ }
758
+ }
759
+
760
+ .orb-ctable-surface {
761
+ padding-top: 4px;
762
+ }
763
+
764
+ .orb-table-toolbar-primary,
765
+ .orb-table-toolbar-secondary,
766
+ .orb-table-toolbar-actions,
767
+ .orb-table-toolbar-custom,
768
+ .orb-table-tool-group,
769
+ .orb-table-pager {
770
+ display: flex;
771
+ align-items: center;
772
+ }
773
+
774
+ .orb-table-toolbar-primary {
775
+ width: 100%;
776
+ min-width: 0;
777
+ gap: 10px;
778
+ flex-wrap: nowrap;
779
+ }
780
+
781
+ .orb-table-toolbar-search {
782
+ flex: 0 1 320px;
783
+ width: 320px;
784
+ min-width: 200px;
785
+ max-width: 320px;
786
+ }
787
+
788
+ .orb-table-toolbar-search-field .orb-inp {
789
+ min-height: 32px;
790
+ height: 32px;
791
+ font-size: 13px;
792
+ background: var(--orb-canvas);
793
+ }
794
+
795
+ .orb-table-toolbar-search .orb-inp-adornment {
796
+ top: 50%;
797
+ transform: translateY(-50%);
798
+ }
799
+
800
+ .orb-table-pager {
801
+ margin-left: 0;
802
+ flex: 0 0 auto;
803
+ gap: 4px;
804
+ min-height: 32px;
805
+ color: var(--orb-muted);
806
+ }
807
+
808
+ .orb-table-pager .orb-select-trigger {
809
+ border-color: transparent !important;
810
+ background: transparent !important;
811
+ box-shadow: none !important;
812
+ }
813
+
814
+ .orb-table-pager .orb-select-trigger:hover:not(:disabled),
815
+ .orb-table-pager .orb-select-trigger[data-state="open"] {
816
+ border-color: transparent !important;
817
+ background: var(--orb-hover) !important;
818
+ }
819
+
820
+ .orb-table-pager-label,
821
+ .orb-table-pager-page {
822
+ color: var(--orb-muted);
823
+ font: 500 12px/1 var(--orb-font);
824
+ white-space: nowrap;
825
+ }
826
+
827
+ .orb-table-pager-label {
828
+ margin-right: 4px;
829
+ }
830
+
831
+ .orb-table-pager-page {
832
+ min-width: 44px;
833
+ color: var(--orb-fg);
834
+ text-align: center;
835
+ font-variant-numeric: tabular-nums;
836
+ }
837
+
838
+ .orb-table-pager-divider {
839
+ width: 1px;
840
+ height: 18px;
841
+ margin: 0 3px;
842
+ background: var(--orb-border);
843
+ }
844
+
845
+ .orb-table-toolbar-secondary {
846
+ width: 100%;
847
+ min-width: 0;
848
+ min-height: 37px;
849
+ gap: 12px;
850
+ padding-top: 8px;
851
+ border-top: 1px solid var(--orb-border);
852
+ }
853
+
854
+ .orb-table-toolbar-spacer {
855
+ flex: 1 1 auto;
856
+ min-width: 8px;
857
+ }
858
+
859
+ .orb-table-toolbar-custom {
860
+ min-width: 0;
861
+ flex-wrap: wrap;
862
+ gap: 4px;
863
+ }
864
+
865
+ .orb-table-toolbar-actions {
866
+ margin-left: 0;
867
+ flex: 0 0 auto;
868
+ gap: 10px;
869
+ }
870
+
871
+ .orb-table-tool-group {
872
+ position: relative;
873
+ gap: 1px;
874
+ }
875
+
876
+ .orb-table-tool-group + .orb-table-tool-group {
877
+ padding-left: 11px;
878
+ }
879
+
880
+ .orb-table-tool-group + .orb-table-tool-group::before {
881
+ content: "";
882
+ position: absolute;
883
+ left: 0;
884
+ top: 9px;
885
+ bottom: 9px;
886
+ width: 1px;
887
+ background: var(--orb-border);
888
+ }
889
+
890
+ .orb-table-tool-button,
891
+ .orb-table-pager-button {
892
+ border: 1px solid transparent !important;
893
+ border-radius: var(--orb-r) !important;
894
+ background: transparent !important;
895
+ color: var(--orb-muted) !important;
896
+ }
897
+
898
+ .orb-table-tool-button [data-sap-icon],
899
+ .orb-table-pager-button [data-sap-icon] {
900
+ width: 16px !important;
901
+ height: 16px !important;
902
+ font-size: 16px !important;
903
+ }
904
+
905
+ .orb-table-tool-button:hover:not(:disabled),
906
+ .orb-table-pager-button:hover:not(:disabled) {
907
+ background: var(--orb-hover) !important;
908
+ color: var(--orb-fg) !important;
909
+ }
910
+
911
+ .orb-table-tool-button[data-active="true"],
912
+ .orb-table-tool-button.orb-is-active {
913
+ background: var(--orb-selected) !important;
914
+ color: var(--orb-primary) !important;
915
+ }
916
+
917
+ @media (max-width: 760px) {
918
+ .orb-table-toolbar-primary {
919
+ align-items: stretch;
920
+ flex-direction: column;
921
+ gap: 8px;
922
+ }
923
+
924
+ .orb-table-toolbar-search {
925
+ width: 100%;
926
+ max-width: none;
927
+ min-width: 0;
928
+ }
929
+
930
+ .orb-table-pager {
931
+ width: 100%;
932
+ margin-left: 0;
933
+ justify-content: flex-end;
934
+ }
935
+
936
+ .orb-table-toolbar-secondary {
937
+ align-items: flex-start;
938
+ }
939
+
940
+ .orb-table-toolbar-actions {
941
+ flex-wrap: wrap;
942
+ justify-content: flex-end;
943
+ }
944
+ }
945
+
946
+ .orb-table-footer {
947
+ position: sticky;
948
+ bottom: 0;
949
+ background: var(--orb-surface);
950
+ }
951
+
952
+ .orb-tbl .orb-table-footer td {
953
+ height: 42px;
954
+ box-sizing: border-box;
955
+ padding: 10px 14px;
956
+ border-top: 1px solid var(--orb-border);
957
+ border-bottom: 0;
958
+ background: var(--orb-surface);
959
+ color: var(--orb-fg);
960
+ font: 700 12px/1.4 var(--orb-font);
961
+ letter-spacing: 0.01em;
962
+ }
963
+
964
+ .orb-tbl .orb-table-footer .orb-table-footer-control {
965
+ padding: 0 4px;
966
+ }
967
+
968
+ .orb-tbl .orb-table-footer .orb-table-footer-cell.orb-num {
969
+ font-variant-numeric: tabular-nums;
970
+ text-align: right;
971
+ }
972
+
973
+ .orb-table-group-menu-header {
974
+ min-height: 38px;
975
+ display: flex;
976
+ align-items: center;
977
+ justify-content: space-between;
978
+ gap: 8px;
979
+ padding: 4px 8px 6px;
980
+ }
981
+
982
+ .orb-table-group-menu-title {
983
+ color: var(--orb-fg-strong);
984
+ font: 600 13px/1.2 var(--orb-font);
985
+ }
986
+
987
+ .orb-table-group-menu-clear {
988
+ min-height: 28px !important;
989
+ height: 28px !important;
990
+ padding: 0 8px !important;
991
+ border: 0 !important;
992
+ background: transparent !important;
993
+ color: var(--orb-err) !important;
994
+ box-shadow: none !important;
995
+ font-size: 11px !important;
996
+ }
997
+
998
+ .orb-table-group-menu-clear [data-sap-icon] {
999
+ width: 13px !important;
1000
+ height: 13px !important;
1001
+ font-size: 13px !important;
1002
+ }
1003
+
1004
+ .orb-table-group-menu-divider {
1005
+ margin: 0 6px 4px !important;
1006
+ }
1007
+
1008
+ .orb-menu-item.orb-table-group-menu-option {
1009
+ min-height: 36px;
1010
+ padding: 5px 8px;
1011
+ border-radius: var(--orb-r);
1012
+ font-weight: 400;
1013
+ }
1014
+
1015
+ .orb-table-group-menu-option-content {
1016
+ width: 100%;
1017
+ min-width: 0;
1018
+ display: flex;
1019
+ align-items: center;
1020
+ gap: 10px;
1021
+ }
1022
+
1023
+ .orb-table-group-menu-checkbox {
1024
+ flex: 0 0 18px;
1025
+ }
1026
+
1027
+ .orb-table-group-menu-checkbox input {
1028
+ width: 16px;
1029
+ height: 16px;
1030
+ border-radius: 4px;
1031
+ }
1032
+
1033
+ .orb-table-group-menu-checkbox:has(input:checked)::after {
1034
+ left: 0;
1035
+ width: 16px;
1036
+ height: 16px;
1037
+ font-size: 12px;
1038
+ }
1039
+
1040
+ .orb-table-group-menu-label {
1041
+ min-width: 0;
1042
+ flex: 1 1 auto;
1043
+ overflow: hidden;
1044
+ color: inherit;
1045
+ font: 400 13px/1.25 var(--orb-font);
1046
+ text-overflow: ellipsis;
1047
+ white-space: nowrap;
1048
+ }
1049
+
1050
+ .orb-table-group-menu-order {
1051
+ width: 20px;
1052
+ height: 20px;
1053
+ flex: 0 0 20px;
1054
+ display: inline-flex;
1055
+ align-items: center;
1056
+ justify-content: center;
1057
+ border-radius: 50%;
1058
+ background: var(--orb-primary);
1059
+ color: var(--orb-on-primary);
1060
+ font: 600 10px/1 var(--orb-font);
1061
+ }
1062
+
1063
+ .orb-table-group-menu-footer {
1064
+ position: sticky;
1065
+ bottom: -6px;
1066
+ display: flex;
1067
+ align-items: center;
1068
+ justify-content: flex-end;
1069
+ gap: 6px;
1070
+ margin: 4px -6px -6px;
1071
+ padding: 8px 10px;
1072
+ border-top: 1px solid var(--orb-border);
1073
+ background: var(--orb-canvas);
1074
+ }
1075
+
1076
+ .orb-table-group-menu-footer .orb-btn {
1077
+ min-height: 30px;
1078
+ height: 30px;
1079
+ padding: 0 12px;
1080
+ font-size: 12px;
1081
+ }
1082
+
1083
+ .orb-tbl { --orb-fg: var(--orb-table-fg); width: 100%; border-collapse: collapse; font: 380 14px/1.5 var(--orb-font); }
1084
+ .orb-tbl th {
1085
+ text-align: left;
1086
+ font: 700 11px/1.3 var(--orb-font);
1087
+ letter-spacing: 0.06em;
1088
+ text-transform: uppercase;
1089
+ color: var(--orb-fg);
1090
+ background: var(--orb-surface);
1091
+ padding: 10px 14px;
1092
+ border-bottom: 1px solid var(--orb-border);
1093
+ white-space: nowrap;
1094
+ }
1095
+ .orb-tbl thead th {
1096
+ position: sticky;
1097
+ top: 0;
1098
+ z-index: 4;
1099
+ height: 36px;
1100
+ box-sizing: border-box;
1101
+ user-select: none;
1102
+ }
1103
+ .orb-table-control-head {
1104
+ padding: 0 4px !important;
1105
+ text-align: center !important;
1106
+ vertical-align: middle;
1107
+ }
1108
+ .orb-table-head-cell {
1109
+ position: relative;
1110
+ overflow: visible;
1111
+ }
1112
+ .orb-table-head-cell.orb-is-reorderable { cursor: grab; }
1113
+ .orb-table-head-cell.orb-is-reorderable.orb-is-dragging { cursor: grabbing; }
1114
+ .orb-table-head-label {
1115
+ min-width: 0;
1116
+ display: inline-flex;
1117
+ align-items: center;
1118
+ gap: 5px;
1119
+ overflow: hidden;
1120
+ text-overflow: ellipsis;
1121
+ white-space: nowrap;
1122
+ }
1123
+ .orb-table-sort-label {
1124
+ width: 100%;
1125
+ min-width: 0;
1126
+ display: inline-flex;
1127
+ align-items: center;
1128
+ gap: 5px;
1129
+ padding: 0;
1130
+ border: 0;
1131
+ background: transparent;
1132
+ color: inherit;
1133
+ font: inherit;
1134
+ letter-spacing: inherit;
1135
+ text-transform: inherit;
1136
+ text-align: left;
1137
+ cursor: pointer;
1138
+ }
1139
+ .orb-table-sort-content {
1140
+ min-width: 0;
1141
+ display: inline-flex;
1142
+ align-items: center;
1143
+ }
1144
+ .orb-table-sort-icon {
1145
+ flex: 0 0 auto;
1146
+ color: var(--orb-muted);
1147
+ opacity: 0;
1148
+ transition: opacity var(--orb-t-fast), color var(--orb-t-fast);
1149
+ }
1150
+ .orb-table-sort-label:hover .orb-table-sort-icon { opacity: 0.55; }
1151
+ .orb-table-sort-label.orb-is-active .orb-table-sort-icon {
1152
+ opacity: 1;
1153
+ color: var(--orb-primary);
1154
+ }
1155
+ .orb-table-sort-priority {
1156
+ min-width: 16px;
1157
+ height: 16px;
1158
+ padding: 0 4px;
1159
+ display: inline-flex;
1160
+ align-items: center;
1161
+ justify-content: center;
1162
+ border-radius: 8px;
1163
+ background: var(--orb-primary);
1164
+ color: var(--orb-on-primary);
1165
+ font: 500 10px/1 var(--orb-font);
1166
+ }
1167
+ .orb-table-resize-handle {
1168
+ position: absolute;
1169
+ top: 7px;
1170
+ right: -2px;
1171
+ bottom: 7px;
1172
+ z-index: 1;
1173
+ width: 5px;
1174
+ border-radius: 2px;
1175
+ background: transparent;
1176
+ cursor: col-resize;
1177
+ transition: background var(--orb-t-fast);
1178
+ }
1179
+ .orb-table-resize-handle:hover { background: var(--orb-p200); }
1180
+ .orb-tbl td { padding: 11px 14px; border-bottom: 1px solid var(--orb-border); font-weight: 380; color: var(--orb-fg); }
1181
+ .orb-tbl tbody tr:hover td { background: var(--orb-hover); }
1182
+ .orb-tbl tbody tr.orb-is-selected td { background: var(--orb-p50); }
1183
+ .orb-planning-table { background: var(--orb-canvas); }
1184
+ .orb-planning-table tbody tr { height: 58px; }
1185
+ .orb-planning-table tbody tr > td { box-sizing: border-box; }
1186
+ .orb-planning-table tbody tr.orb-is-drop-target > td { border-top: 2px solid var(--orb-primary); }
1187
+ .orb-planning-timeline-header { background: var(--orb-surface); }
1188
+ .orb-planning-timeline-row { background-color: var(--orb-canvas); }
1189
+ .orb-planning-timeline-row.orb-table-group-row { background-color: var(--orb-surface); }
1190
+ .orb-planning-timeline-row.orb-is-selected { background-color: var(--orb-p50); }
1191
+ .orb-tbl .orb-num,
1192
+ .orb-tbl td.orb-num,
1193
+ .orb-tbl th.orb-num { font-variant-numeric: tabular-nums; text-align: right; }
1194
+ .orb-tbl a,
1195
+ .orb-tbl .orb-tbl-link { color: var(--orb-link); text-decoration: none; font-weight: 500; cursor: pointer; background: none; border: none; padding: 0; font: inherit; }
1196
+ .orb-tbl a:hover,
1197
+ .orb-tbl .orb-tbl-link:hover { text-decoration: underline; }
1198
+ .orb-tbl-sort {
1199
+ display: inline-flex;
1200
+ align-items: center;
1201
+ gap: 4px;
1202
+ background: none;
1203
+ border: none;
1204
+ padding: 0;
1205
+ cursor: pointer;
1206
+ font: inherit;
1207
+ letter-spacing: inherit;
1208
+ text-transform: inherit;
1209
+ color: inherit;
1210
+ }
1211
+ .orb-tbl-sort:hover { color: var(--orb-fg); }
1212
+
1213
+ .orb-pager {
1214
+ display: flex;
1215
+ align-items: center;
1216
+ justify-content: flex-end;
1217
+ gap: 14px;
1218
+ padding: 10px 4px 0;
1219
+ font: 500 12px/1 var(--orb-font);
1220
+ color: var(--orb-muted);
1221
+ }
1222
+
1223
+ .orb-avatar {
1224
+ width: 28px;
1225
+ height: 28px;
1226
+ border-radius: 50%;
1227
+ background: var(--orb-p100);
1228
+ color: var(--orb-p700);
1229
+ display: inline-flex;
1230
+ align-items: center;
1231
+ justify-content: center;
1232
+ font: 500 11px/1 var(--orb-font);
1233
+ flex: none;
1234
+ }
1235
+ .orb-dark .orb-avatar,
1236
+ [data-orb-mode="dark"] .orb-avatar { color: var(--orb-p200); }
1237
+
1238
+ /* ---------- tabs ---------- */
1239
+ .orb-tabs { display: flex; gap: 20px; border-bottom: 1px solid var(--orb-border); }
1240
+ .orb-tab {
1241
+ font: 500 13px/1 var(--orb-font);
1242
+ color: var(--orb-muted);
1243
+ padding: 10px 2px;
1244
+ cursor: pointer;
1245
+ background: none;
1246
+ border: none;
1247
+ border-bottom: 2px solid transparent;
1248
+ margin-bottom: -1px;
1249
+ transition: color var(--orb-t-fast), border-color var(--orb-t-fast);
1250
+ }
1251
+ .orb-tab:hover { color: var(--orb-fg); }
1252
+ .orb-tab.orb-is-active { color: var(--orb-primary); border-bottom-color: var(--orb-primary); }
1253
+ .orb-dark .orb-tab.orb-is-active,
1254
+ [data-orb-mode="dark"] .orb-tab.orb-is-active { color: var(--orb-p300); border-bottom-color: var(--orb-p300); }
1255
+
1256
+ /* ---------- overlays: dialog / popover / menu / tooltip ---------- */
1257
+ .orb-overlay {
1258
+ position: fixed;
1259
+ inset: 0;
1260
+ background: rgba(1, 9, 26, 0.45);
1261
+ animation: orb-fade-in 0.15s ease;
1262
+ z-index: 1300;
1263
+ }
1264
+ .orb-dialog {
1265
+ position: fixed;
1266
+ top: 50%;
1267
+ left: 50%;
1268
+ transform: translate(-50%, -50%);
1269
+ z-index: 1301;
1270
+ background: var(--orb-canvas);
1271
+ border: 1px solid var(--orb-border);
1272
+ border-radius: var(--orb-r);
1273
+ box-shadow: var(--orb-shadow-3);
1274
+ padding: 24px;
1275
+ max-width: min(560px, calc(100vw - 32px));
1276
+ max-height: calc(100vh - 64px);
1277
+ overflow: auto;
1278
+ display: flex;
1279
+ flex-direction: column;
1280
+ gap: 16px;
1281
+ animation: orb-fade-in 0.15s ease;
1282
+ color: var(--orb-fg);
1283
+ font: 300 14px/1.5 var(--orb-font);
1284
+ }
1285
+ .orb-dialog-title { font: 600 19px/1.3 var(--orb-font); color: var(--orb-fg-strong); margin: 0; }
1286
+ .orb-dialog-actions { display: flex; justify-content: flex-end; gap: 12px; margin-top: 8px; }
1287
+
1288
+ .orb-layout-save-dialog {
1289
+ gap: 18px;
1290
+ }
1291
+
1292
+ .orb-layout-save-dialog > div:first-child {
1293
+ align-items: center !important;
1294
+ }
1295
+
1296
+ .orb-layout-save-form {
1297
+ display: grid;
1298
+ gap: 16px;
1299
+ }
1300
+
1301
+ .orb-layout-save-warning {
1302
+ margin-top: -10px;
1303
+ padding-left: 2px;
1304
+ }
1305
+
1306
+ .orb-layout-save-option {
1307
+ min-height: 24px;
1308
+ gap: 10px;
1309
+ font: 400 14px/1.4 var(--orb-font);
1310
+ }
1311
+
1312
+ .orb-layout-save-dialog .orb-dialog-actions {
1313
+ margin-top: 2px;
1314
+ padding-top: 2px;
1315
+ }
1316
+
1317
+ .orb-layout-save-dialog .orb-dialog-actions .orb-btn {
1318
+ min-width: 84px;
1319
+ }
1320
+
1321
+ .orb-pop {
1322
+ z-index: 1302;
1323
+ background: var(--orb-canvas);
1324
+ border: 1px solid var(--orb-border);
1325
+ border-radius: var(--orb-r);
1326
+ box-shadow: var(--orb-shadow-2);
1327
+ color: var(--orb-fg);
1328
+ font: 300 14px/1.5 var(--orb-font);
1329
+ animation: orb-fade-in 0.12s ease;
1330
+ }
1331
+ .orb-menu { min-width: 180px; padding: 6px; }
1332
+ .orb-menu-item {
1333
+ display: flex;
1334
+ align-items: center;
1335
+ gap: 10px;
1336
+ width: 100%;
1337
+ padding: 8px 10px;
1338
+ border: none;
1339
+ background: none;
1340
+ border-radius: 8px;
1341
+ font: 500 13px/1.3 var(--orb-font);
1342
+ color: var(--orb-fg);
1343
+ cursor: pointer;
1344
+ text-align: left;
1345
+ transition: background var(--orb-t-fast), color var(--orb-t-fast);
1346
+ }
1347
+ .orb-menu-item:hover,
1348
+ .orb-menu-item[data-highlighted] { background: var(--orb-hover); outline: none; }
1349
+ .orb-menu-item[data-disabled] { color: var(--orb-disabled-fg); cursor: not-allowed; }
1350
+ .orb-menu-sep { height: 1px; background: var(--orb-border); margin: 6px 4px; }
1351
+ .orb-menu-label { padding: 8px 10px 4px; font: 500 10px/1 var(--orb-font); letter-spacing: 0.08em; text-transform: uppercase; color: var(--orb-muted); }
1352
+
1353
+ .orb-select-trigger {
1354
+ width: 100%;
1355
+ display: flex;
1356
+ align-items: center;
1357
+ justify-content: space-between;
1358
+ gap: 10px;
1359
+ text-align: left;
1360
+ cursor: pointer;
1361
+ }
1362
+
1363
+ .orb-select-trigger[data-placeholder] {
1364
+ color: var(--orb-muted);
1365
+ }
1366
+
1367
+ .orb-select-value {
1368
+ min-width: 0;
1369
+ overflow: hidden;
1370
+ text-overflow: ellipsis;
1371
+ white-space: nowrap;
1372
+ }
1373
+
1374
+ .orb-select-chevron {
1375
+ color: var(--orb-muted);
1376
+ transition: transform var(--orb-t-fast), color var(--orb-t-fast);
1377
+ }
1378
+
1379
+ .orb-select-trigger[data-state="open"] .orb-select-chevron {
1380
+ transform: rotate(180deg);
1381
+ color: var(--orb-primary);
1382
+ }
1383
+
1384
+ .orb-select-menu {
1385
+ max-width: min(360px, calc(100vw - 16px));
1386
+ max-height: min(320px, calc(100vh - 24px));
1387
+ overflow: auto;
1388
+ padding: 5px;
1389
+ border-radius: var(--orb-r);
1390
+ }
1391
+
1392
+ .orb-select-option {
1393
+ display: flex;
1394
+ align-items: center;
1395
+ gap: 8px;
1396
+ min-height: 34px;
1397
+ padding: 7px 10px 7px 8px;
1398
+ border-radius: 7px;
1399
+ color: var(--orb-fg);
1400
+ font: 400 14px/1.3 var(--orb-font);
1401
+ cursor: pointer;
1402
+ user-select: none;
1403
+ outline: none;
1404
+ }
1405
+
1406
+ .orb-select-option[data-highlighted] {
1407
+ background: var(--orb-hover);
1408
+ }
1409
+
1410
+ .orb-select-option[data-state="checked"] {
1411
+ background: var(--orb-selected);
1412
+ color: var(--orb-primary);
1413
+ font-weight: 500;
1414
+ }
1415
+
1416
+ .orb-select-option[data-disabled] {
1417
+ color: var(--orb-disabled-fg);
1418
+ cursor: not-allowed;
1419
+ }
1420
+
1421
+ .orb-select-check {
1422
+ width: 14px;
1423
+ height: 14px;
1424
+ display: inline-flex;
1425
+ align-items: center;
1426
+ justify-content: center;
1427
+ flex: 0 0 14px;
1428
+ color: var(--orb-primary);
1429
+ }
1430
+
1431
+ .orb-tooltip {
1432
+ z-index: 1310;
1433
+ background: #01091a;
1434
+ color: #ffffff;
1435
+ border-radius: 8px;
1436
+ padding: 6px 10px;
1437
+ font: 500 12px/1.4 var(--orb-font);
1438
+ box-shadow: var(--orb-shadow-2);
1439
+ max-width: 280px;
1440
+ animation: orb-fade-in 0.12s ease;
1441
+ }
1442
+
1443
+ @keyframes orb-fade-in { from { opacity: 0; } to { opacity: 1; } }
1444
+
1445
+ /* ---------- calendar (x-date-pickers replacement) ---------- */
1446
+ .orb-cal { padding: 12px; width: 280px; user-select: none; }
1447
+ .orb-cal-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
1448
+ .orb-cal-title { font: 600 14px/1.3 var(--orb-font); color: var(--orb-fg-strong); }
1449
+ .orb-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
1450
+ .orb-cal-dow {
1451
+ font: 500 10px/1 var(--orb-font);
1452
+ letter-spacing: 0.06em;
1453
+ text-transform: uppercase;
1454
+ color: var(--orb-muted);
1455
+ text-align: center;
1456
+ padding: 6px 0;
1457
+ }
1458
+ .orb-cal-day {
1459
+ appearance: none;
1460
+ border: none;
1461
+ background: none;
1462
+ width: 34px;
1463
+ height: 34px;
1464
+ margin: 0 auto;
1465
+ border-radius: 50%;
1466
+ font: 300 13px/1 var(--orb-font);
1467
+ font-variant-numeric: tabular-nums;
1468
+ color: var(--orb-fg);
1469
+ cursor: pointer;
1470
+ display: flex;
1471
+ align-items: center;
1472
+ justify-content: center;
1473
+ transition: background var(--orb-t-fast), color var(--orb-t-fast);
1474
+ }
1475
+ .orb-cal-day:hover:not(:disabled):not(.orb-is-selected) { background: var(--orb-hover); }
1476
+ .orb-cal-day:disabled { color: var(--orb-disabled-fg); cursor: not-allowed; }
1477
+ .orb-cal-day.orb-is-outside { color: var(--orb-muted); opacity: 0.6; }
1478
+ .orb-cal-day.orb-is-today { box-shadow: inset 0 0 0 1px var(--orb-primary); }
1479
+ .orb-cal-day.orb-is-selected { background: var(--orb-primary); color: var(--orb-on-primary); font-weight: 500; }
1480
+ .orb-cal-day.orb-is-in-range { background: var(--orb-p50); border-radius: 0; }
1481
+ .orb-cal-day.orb-is-range-start { background: var(--orb-primary); color: var(--orb-on-primary); border-radius: 50% 0 0 50%; }
1482
+ .orb-cal-day.orb-is-range-end { background: var(--orb-primary); color: var(--orb-on-primary); border-radius: 0 50% 50% 0; }
1483
+ .orb-cal-day.orb-is-range-start.orb-is-range-end { border-radius: 50%; }
1484
+
1485
+ /* ---------- date range picker ---------- */
1486
+ .orb-date-range-picker,
1487
+ .orb-date-range-field,
1488
+ .orb-date-range-field .orb-inp-adornment-wrap {
1489
+ width: 100%;
1490
+ }
1491
+
1492
+ .orb-date-range-field .orb-inp {
1493
+ padding-right: 44px !important;
1494
+ }
1495
+
1496
+ .orb-date-range-field .orb-inp-adornment-end {
1497
+ right: 5px;
1498
+ pointer-events: auto;
1499
+ }
1500
+
1501
+ .orb-date-range-calendar-trigger {
1502
+ width: 30px !important;
1503
+ height: 30px !important;
1504
+ border-radius: 7px !important;
1505
+ color: var(--orb-muted);
1506
+ }
1507
+
1508
+ .orb-date-range-calendar-trigger:hover {
1509
+ background: var(--orb-hover);
1510
+ color: var(--orb-primary);
1511
+ }
1512
+
1513
+ .orb-date-range-popover {
1514
+ width: min(400px, calc(100vw - 24px));
1515
+ max-height: calc(100vh - 24px);
1516
+ display: flex;
1517
+ flex-direction: column;
1518
+ overflow: auto;
1519
+ padding: 0;
1520
+ border-radius: var(--orb-r-container);
1521
+ }
1522
+
1523
+ .orb-date-range-inputs {
1524
+ padding: 16px;
1525
+ background: var(--orb-surface);
1526
+ border-bottom: 1px solid var(--orb-border);
1527
+ }
1528
+
1529
+ .orb-date-range-input-row {
1530
+ width: 100%;
1531
+ }
1532
+
1533
+ .orb-date-range-manual-field {
1534
+ flex: 0 0 156px;
1535
+ width: 156px !important;
1536
+ }
1537
+
1538
+ .orb-date-range-shortcuts {
1539
+ padding: 14px 16px 0;
1540
+ }
1541
+
1542
+ .orb-date-range-calendar {
1543
+ width: 100%;
1544
+ display: flex;
1545
+ justify-content: center;
1546
+ padding: 8px 16px 14px;
1547
+ }
1548
+
1549
+ .orb-date-range-calendar .orb-cal {
1550
+ margin: 0 auto;
1551
+ }
1552
+
1553
+ @media (max-width: 420px) {
1554
+ .orb-date-range-manual-field {
1555
+ flex: 1 1 0;
1556
+ width: auto !important;
1557
+ min-width: 0;
1558
+ }
1559
+ }
1560
+
1561
+ /* ---------- value help ---------- */
1562
+ .orb-value-help-field,
1563
+ .orb-value-help-field .orb-inp-adornment-wrap {
1564
+ width: 100%;
1565
+ }
1566
+
1567
+ .orb-value-help-field .orb-inp {
1568
+ padding-right: 44px !important;
1569
+ }
1570
+
1571
+ .orb-value-help-field.orb-value-help-has-clear .orb-inp {
1572
+ padding-right: 74px !important;
1573
+ }
1574
+
1575
+ .orb-value-help-field .orb-inp-adornment-end {
1576
+ right: 5px;
1577
+ pointer-events: auto;
1578
+ }
1579
+
1580
+ .orb-value-help-actions {
1581
+ display: inline-flex;
1582
+ align-items: center;
1583
+ gap: 2px;
1584
+ }
1585
+
1586
+ .orb-value-help-search-trigger,
1587
+ .orb-value-help-clear-trigger {
1588
+ border-radius: 7px !important;
1589
+ color: var(--orb-muted);
1590
+ }
1591
+
1592
+ .orb-value-help-search-trigger {
1593
+ width: 30px !important;
1594
+ height: 30px !important;
1595
+ }
1596
+
1597
+ .orb-value-help-clear-trigger {
1598
+ width: 26px !important;
1599
+ height: 26px !important;
1600
+ }
1601
+
1602
+ .orb-value-help-search-trigger:hover,
1603
+ .orb-value-help-clear-trigger:hover {
1604
+ background: var(--orb-hover);
1605
+ color: var(--orb-primary);
1606
+ }
1607
+
1608
+ /* ---------- smart filter ---------- */
1609
+ .orb-smart-filter {
1610
+ padding: 0;
1611
+ transition: min-height var(--orb-t-fast), border-color var(--orb-t-fast), box-shadow var(--orb-t-fast);
1612
+ }
1613
+
1614
+ .orb-smart-filter-header {
1615
+ display: flex;
1616
+ align-items: center;
1617
+ justify-content: space-between;
1618
+ gap: 16px;
1619
+ padding: 16px;
1620
+ }
1621
+
1622
+ .orb-smart-filter-actions,
1623
+ .orb-variant-management {
1624
+ display: flex;
1625
+ align-items: center;
1626
+ gap: 8px;
1627
+ }
1628
+
1629
+ .orb-variant-management {
1630
+ width: 100%;
1631
+ max-width: 100%;
1632
+ min-width: 0;
1633
+ flex: 1 1 auto;
1634
+ }
1635
+
1636
+ .orb-variant-save-button {
1637
+ flex: 0 0 auto;
1638
+ align-self: center;
1639
+ }
1640
+
1641
+ .orb-smart-filter-grid {
1642
+ padding: 0 16px 16px;
1643
+ }
1644
+
1645
+ .orb-smart-filter-adapt {
1646
+ height: 36px !important;
1647
+ min-height: 36px !important;
1648
+ }
1649
+
1650
+ .orb-smart-filter-go {
1651
+ width: 36px !important;
1652
+ height: 36px !important;
1653
+ flex: 0 0 36px;
1654
+ border-radius: 9px !important;
1655
+ background: var(--orb-primary) !important;
1656
+ color: var(--orb-on-primary) !important;
1657
+ box-shadow: var(--orb-shadow-1);
1658
+ }
1659
+
1660
+ .orb-smart-filter-go:hover:not(:disabled) {
1661
+ background: color-mix(in oklch, var(--orb-primary) 88%, #01091a) !important;
1662
+ }
1663
+
1664
+ .orb-smart-filter-toggle {
1665
+ position: absolute;
1666
+ bottom: 0;
1667
+ left: 50%;
1668
+ z-index: 10;
1669
+ transform: translate(-50%, 50%);
1670
+ }
1671
+
1672
+ .orb-smart-filter-toggle-button {
1673
+ width: 24px !important;
1674
+ height: 24px !important;
1675
+ min-width: 24px !important;
1676
+ min-height: 24px !important;
1677
+ padding: 0 !important;
1678
+ border-radius: 7px !important;
1679
+ }
1680
+
1681
+ .orb-smart-filter-toggle-icon {
1682
+ width: 12px !important;
1683
+ height: 12px !important;
1684
+ font-size: 12px !important;
1685
+ }
1686
+
1687
+ .orb-smart-filter-collapsed {
1688
+ height: 0;
1689
+ min-height: 0;
1690
+ padding: 0;
1691
+ border-width: 0;
1692
+ background: transparent;
1693
+ box-shadow: none;
1694
+ }
1695
+
1696
+ .orb-filter-operator-field .orb-inp-adornment:first-child {
1697
+ pointer-events: auto;
1698
+ }
1699
+
1700
+ .orb-filter-operator-trigger {
1701
+ border-radius: 7px !important;
1702
+ }
1703
+
1704
+ .orb-filter-operator-symbol {
1705
+ width: 24px;
1706
+ display: inline-flex;
1707
+ justify-content: center;
1708
+ flex: 0 0 24px;
1709
+ color: var(--orb-primary);
1710
+ font-weight: 600;
1711
+ }
1712
+
1713
+ .orb-menu-item.orb-selected {
1714
+ background: var(--orb-selected);
1715
+ color: var(--orb-primary);
1716
+ }
1717
+
1718
+ @media (max-width: 700px) {
1719
+ .orb-smart-filter-header {
1720
+ align-items: stretch;
1721
+ flex-direction: column;
1722
+ }
1723
+
1724
+ .orb-smart-filter-actions {
1725
+ justify-content: flex-end;
1726
+ }
1727
+ }
1728
+
1729
+ /* ---------- charts (SVG classes, per handoff modules §1) ---------- */
1730
+ .orb-axis-lbl { font: 500 11px var(--orb-font); fill: var(--orb-chart-text); }
1731
+ .orb-grid-ln { stroke: var(--orb-chart-grid); stroke-width: 1; }
1732
+ .orb-c1 { fill: var(--orb-primary); }
1733
+ .orb-c2 { fill: var(--orb-p300); }
1734
+ .orb-c3 { fill: var(--orb-muted); }
1735
+ .orb-c4 { fill: var(--orb-p700); }
1736
+ .orb-l1 { stroke: var(--orb-primary); }
1737
+ .orb-l2 { stroke: var(--orb-muted); }
1738
+ .orb-legend { display: flex; flex-wrap: wrap; gap: 14px; font: 500 12px/1 var(--orb-font); color: var(--orb-muted); }
1739
+ .orb-legend i { width: 10px; height: 10px; border-radius: 3px; display: inline-block; margin-right: 6px; }
1740
+
1741
+ /* ---------- login / auth (per login reference) ---------- */
1742
+ .orb-auth-frame {
1743
+ display: grid;
1744
+ grid-template-columns: 5fr 7fr;
1745
+ min-height: 100vh;
1746
+ background: var(--orb-canvas);
1747
+ }
1748
+ .orb-auth-brand {
1749
+ position: relative;
1750
+ background: #01091a;
1751
+ color: #ffffff;
1752
+ padding: 44px 44px 36px;
1753
+ display: flex;
1754
+ flex-direction: column;
1755
+ overflow: hidden;
1756
+ background-image:
1757
+ repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 0 1px, transparent 1px 64px),
1758
+ repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.05) 0 1px, transparent 1px 64px);
1759
+ }
1760
+ .orb-auth-brand .orb-logo-slot { border-color: rgba(255, 255, 255, 0.4); color: rgba(255, 255, 255, 0.7); align-self: flex-start; }
1761
+ .orb-auth-dia {
1762
+ position: absolute;
1763
+ transform: rotate(45deg);
1764
+ border: 1px solid rgba(255, 255, 255, 0.14);
1765
+ border-radius: 6px;
1766
+ pointer-events: none;
1767
+ }
1768
+ .orb-auth-claim { margin-top: auto; position: relative; }
1769
+ .orb-auth-rule { width: 48px; height: 2px; background: #fc4c02; border-radius: 2px; margin-bottom: 18px; }
1770
+ .orb-auth-claim h2 { font: 600 30px/1.25 var(--orb-font); color: #ffffff; max-width: 320px; margin: 0; }
1771
+ .orb-auth-claim p { margin: 10px 0 0; font: 300 14px/1.55 var(--orb-font); color: rgba(255, 255, 255, 0.7); max-width: 340px; }
1772
+ .orb-auth-meta { margin-top: 36px; font: 500 10px/1.6 var(--orb-font); letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255, 255, 255, 0.45); }
1773
+ .orb-auth-form {
1774
+ display: flex;
1775
+ align-items: center;
1776
+ justify-content: center;
1777
+ padding: 48px 32px;
1778
+ background: var(--orb-canvas);
1779
+ }
1780
+ .orb-auth-card { width: 100%; max-width: 360px; display: flex; flex-direction: column; gap: 16px; }
1781
+
1782
+ .orb-logo-slot {
1783
+ display: inline-flex;
1784
+ align-items: center;
1785
+ justify-content: center;
1786
+ gap: 8px;
1787
+ border: 1px dashed var(--orb-muted);
1788
+ border-radius: 6px;
1789
+ color: var(--orb-muted);
1790
+ font: 500 11px/1 var(--orb-font);
1791
+ letter-spacing: 0.08em;
1792
+ text-transform: uppercase;
1793
+ padding: 10px 16px;
1794
+ }
1795
+
1796
+ @media (max-width: 900px) {
1797
+ .orb-auth-frame { grid-template-columns: 1fr; min-height: 0; }
1798
+ .orb-auth-brand { min-height: 0; padding: 22px 24px; }
1799
+ .orb-auth-brand .orb-auth-claim { margin-top: 14px; }
1800
+ .orb-auth-brand .orb-auth-claim h2 { font-size: 18px; display: flex; align-items: center; gap: 12px; max-width: none; }
1801
+ .orb-auth-brand .orb-auth-claim p { display: none; }
1802
+ .orb-auth-brand .orb-auth-rule { width: 24px; margin-bottom: 0; flex: none; }
1803
+ .orb-auth-brand .orb-auth-claim { display: flex; align-items: center; gap: 12px; }
1804
+ .orb-auth-brand .orb-auth-meta { display: none; }
1805
+ .orb-auth-brand .orb-auth-dia-sm-hide { display: none; }
1806
+ .orb-auth-form { padding: 24px; }
1807
+ }
1808
+
1809
+ /* ---------- app shell floating search ---------- */
1810
+ .orb-float-search {
1811
+ position: fixed;
1812
+ left: 12px;
1813
+ right: 12px;
1814
+ bottom: 12px;
1815
+ width: auto;
1816
+ max-width: calc(100vw - 24px);
1817
+ z-index: 1330;
1818
+ pointer-events: auto;
1819
+ filter: drop-shadow(0 18px 36px rgba(1, 9, 26, 0.18));
1820
+ }
1821
+ .orb-dark .orb-float-search,
1822
+ [data-orb-mode="dark"] .orb-float-search {
1823
+ filter: drop-shadow(0 18px 42px rgba(0, 0, 0, 0.58));
1824
+ }
1825
+ @media (min-width: 600px) {
1826
+ .orb-float-search { left: auto; width: 540px; }
1827
+ }
1828
+ @media (min-width: 900px) {
1829
+ .orb-float-search { right: 24px; bottom: 24px; }
1830
+ }
1831
+
1832
+ /* ---------- application header ---------- */
1833
+ .orb-app-header {
1834
+ position: relative;
1835
+ z-index: 1210;
1836
+ width: 100%;
1837
+ height: 64px;
1838
+ flex: 0 0 64px;
1839
+ display: grid;
1840
+ grid-template-columns: minmax(220px, 1fr) minmax(320px, 560px) minmax(300px, 1fr);
1841
+ align-items: center;
1842
+ column-gap: 24px;
1843
+ padding: 0 20px;
1844
+ background: color-mix(in srgb, var(--orb-canvas) 94%, transparent);
1845
+ border-bottom: 1px solid var(--orb-border);
1846
+ backdrop-filter: blur(14px) saturate(130%);
1847
+ -webkit-backdrop-filter: blur(14px) saturate(130%);
1848
+ }
1849
+
1850
+ .orb-app-header-brand,
1851
+ .orb-app-header-center,
1852
+ .orb-app-header-actions,
1853
+ .orb-app-header-utilities,
1854
+ .orb-app-header-user-trigger {
1855
+ min-width: 0;
1856
+ display: flex;
1857
+ align-items: center;
1858
+ }
1859
+
1860
+ .orb-app-header-brand {
1861
+ justify-self: stretch;
1862
+ gap: 12px;
1863
+ overflow: hidden;
1864
+ }
1865
+
1866
+ .orb-app-header-brand > img {
1867
+ max-height: 48px;
1868
+ }
1869
+
1870
+ .orb-app-header-center {
1871
+ width: 100%;
1872
+ justify-content: center;
1873
+ }
1874
+
1875
+ .orb-app-header-search {
1876
+ width: 100%;
1877
+ }
1878
+
1879
+ .orb-app-header-search-shell {
1880
+ min-height: 40px;
1881
+ background: var(--orb-surface) !important;
1882
+ box-shadow: 0 2px 8px rgba(1, 20, 50, 0.06), 0 0 0 1px rgba(255, 255, 255, 0.5) inset;
1883
+ transition: border-color 160ms ease, box-shadow 160ms ease, background 160ms ease;
1884
+ }
1885
+
1886
+ .orb-app-header-search-shell .orb-inp-adornment {
1887
+ position: static;
1888
+ flex: 0 0 auto;
1889
+ padding-left: 4px;
1890
+ pointer-events: auto;
1891
+ }
1892
+
1893
+ .orb-app-header-search-shell .orb-inp {
1894
+ min-width: 0;
1895
+ padding: 7px 8px !important;
1896
+ }
1897
+
1898
+ .orb-app-header-search-shell .orb-inp-adornment-end {
1899
+ gap: 1px;
1900
+ margin-left: auto;
1901
+ padding-right: 0;
1902
+ padding-left: 0;
1903
+ }
1904
+
1905
+ .orb-app-header-ai-action {
1906
+ width: 32px !important;
1907
+ height: 32px !important;
1908
+ border-radius: 8px !important;
1909
+ color: var(--orb-muted);
1910
+ }
1911
+
1912
+ .orb-app-header-ai-action:hover:not(:disabled) {
1913
+ background: var(--orb-hover);
1914
+ color: var(--orb-primary);
1915
+ }
1916
+
1917
+ .orb-app-header-ai-action:focus-visible {
1918
+ outline: 2px solid var(--orb-focus-solid);
1919
+ outline-offset: 1px;
1920
+ }
1921
+
1922
+ .orb-app-header-ai-input {
1923
+ font-family: "Montserrat", "Noto Sans CJK SC", "Noto Sans CJK JP", "PingFang SC", "Hiragino Sans", "Yu Gothic UI", system-ui, sans-serif !important;
1924
+ font-size: 14px !important;
1925
+ font-weight: 400 !important;
1926
+ line-height: 1.4 !important;
1927
+ letter-spacing: 0.01em;
1928
+ }
1929
+
1930
+ .orb-app-header-ai-input::placeholder {
1931
+ color: var(--orb-muted);
1932
+ font-weight: 400;
1933
+ opacity: 0.82;
1934
+ }
1935
+
1936
+ .orb-app-header-search-shell:focus-within {
1937
+ border-color: var(--orb-primary) !important;
1938
+ background: var(--orb-canvas) !important;
1939
+ box-shadow: 0 0 0 3px var(--orb-focus-ring), 0 4px 14px rgba(1, 20, 50, 0.08);
1940
+ }
1941
+
1942
+ .orb-app-header-actions {
1943
+ justify-self: stretch;
1944
+ justify-content: flex-end;
1945
+ gap: 6px;
1946
+ }
1947
+
1948
+ .orb-app-header-utilities {
1949
+ gap: 6px;
1950
+ }
1951
+
1952
+ .orb-app-header-locale {
1953
+ height: 34px;
1954
+ display: inline-flex;
1955
+ align-items: center;
1956
+ justify-content: center;
1957
+ gap: 5px;
1958
+ padding: 0 7px;
1959
+ border: 0;
1960
+ border-radius: 6px;
1961
+ background: transparent;
1962
+ color: var(--orb-muted);
1963
+ font: 600 11px/1 var(--orb-font);
1964
+ letter-spacing: 0.06em;
1965
+ white-space: nowrap;
1966
+ }
1967
+
1968
+ button.orb-app-header-locale {
1969
+ cursor: pointer;
1970
+ }
1971
+
1972
+ button.orb-app-header-locale:hover,
1973
+ .orb-app-header-theme:hover {
1974
+ background: var(--orb-hover);
1975
+ color: var(--orb-primary);
1976
+ }
1977
+
1978
+ .orb-app-header-theme {
1979
+ width: 34px !important;
1980
+ height: 34px !important;
1981
+ border-radius: 6px !important;
1982
+ color: var(--orb-muted) !important;
1983
+ }
1984
+
1985
+ .orb-app-header-theme:hover {
1986
+ color: var(--orb-primary) !important;
1987
+ }
1988
+
1989
+ .orb-app-header-divider {
1990
+ width: 1px;
1991
+ height: 22px;
1992
+ flex: 0 0 1px;
1993
+ margin: 0 7px;
1994
+ background: var(--orb-border);
1995
+ }
1996
+
1997
+ .orb-app-header-user-trigger {
1998
+ gap: 12px;
1999
+ max-width: 246px;
2000
+ min-height: 40px;
2001
+ padding: 3px 5px 3px 9px;
2002
+ border: 1px solid transparent;
2003
+ border-radius: var(--orb-r-container);
2004
+ background: transparent;
2005
+ color: var(--orb-fg);
2006
+ cursor: pointer;
2007
+ transition: border-color 160ms ease, background 160ms ease;
2008
+ }
2009
+
2010
+ .orb-app-header-user-trigger:hover,
2011
+ .orb-app-header-user-trigger[data-state="open"] {
2012
+ border-color: var(--orb-border);
2013
+ background: var(--orb-hover);
2014
+ }
2015
+
2016
+ .orb-app-header-user-trigger:focus-visible,
2017
+ .orb-app-header-locale:focus-visible {
2018
+ outline: 2px solid var(--orb-focus-solid);
2019
+ outline-offset: 2px;
2020
+ }
2021
+
2022
+ .orb-app-header-user-copy {
2023
+ min-width: 0;
2024
+ display: flex;
2025
+ flex-direction: column;
2026
+ align-items: flex-end;
2027
+ text-align: right;
2028
+ }
2029
+
2030
+ .orb-app-header-user-name {
2031
+ max-width: 184px;
2032
+ overflow: hidden;
2033
+ color: var(--orb-fg-strong);
2034
+ font-size: 13px !important;
2035
+ font-weight: 700 !important;
2036
+ line-height: 1.15 !important;
2037
+ text-overflow: ellipsis;
2038
+ white-space: nowrap;
2039
+ }
2040
+
2041
+ .orb-app-header-user-subtitle {
2042
+ display: block;
2043
+ max-width: 184px;
2044
+ margin-top: 2px;
2045
+ overflow: hidden;
2046
+ font-size: 9.5px !important;
2047
+ line-height: 1.1 !important;
2048
+ text-overflow: ellipsis;
2049
+ white-space: nowrap;
2050
+ }
2051
+
2052
+ .orb-app-header-user-trigger .orb-avatar {
2053
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--orb-border) 82%, transparent);
2054
+ }
2055
+
2056
+ @media (max-width: 1100px) {
2057
+ .orb-app-header {
2058
+ grid-template-columns: minmax(170px, 1fr) minmax(280px, 460px) auto;
2059
+ column-gap: 12px;
2060
+ padding: 0 12px;
2061
+ }
2062
+
2063
+ .orb-app-header-user-subtitle {
2064
+ display: none;
2065
+ }
2066
+
2067
+ .orb-app-header-user-trigger {
2068
+ max-width: 190px;
2069
+ }
2070
+ }
2071
+
2072
+ @media (max-width: 820px) {
2073
+ .orb-app-header {
2074
+ grid-template-columns: minmax(120px, 1fr) minmax(240px, 1.4fr) auto;
2075
+ column-gap: 8px;
2076
+ }
2077
+
2078
+ .orb-app-header-user-copy,
2079
+ .orb-app-header-divider {
2080
+ display: none;
2081
+ }
2082
+
2083
+ .orb-app-header-user-trigger {
2084
+ padding-left: 4px;
2085
+ }
2086
+ }
2087
+
2088
+ @media (max-width: 640px) {
2089
+ .orb-app-header {
2090
+ grid-template-columns: minmax(0, 1fr) auto;
2091
+ }
2092
+
2093
+ .orb-app-header-center {
2094
+ display: none;
2095
+ }
2096
+
2097
+ .orb-app-header-locale .orb-label {
2098
+ display: none;
2099
+ }
2100
+ }
2101
+
2102
+ /* ---------- navigation island v2 ---------- */
2103
+ .orb-navigation-island-v2 {
2104
+ isolation: isolate;
2105
+ overflow: visible;
2106
+ border: 1px solid #cbd7e7 !important;
2107
+ border-radius: var(--orb-r-container) !important;
2108
+ background-color: rgba(250, 252, 255, 0.96) !important;
2109
+ background-image:
2110
+ linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(244, 248, 253, 0.96)) !important;
2111
+ box-shadow:
2112
+ 0 1px 0 rgba(255, 255, 255, 0.95) inset,
2113
+ 0 14px 34px rgba(1, 20, 50, 0.12),
2114
+ 0 2px 8px rgba(1, 20, 50, 0.08) !important;
2115
+ backdrop-filter: blur(22px) saturate(150%) !important;
2116
+ -webkit-backdrop-filter: blur(22px) saturate(150%) !important;
2117
+ }
2118
+
2119
+ .orb-navigation-island-v2[data-collapsed] {
2120
+ border-radius: var(--orb-r-container) !important;
2121
+ }
2122
+
2123
+ .orb-navigation-island-v2 > div:first-child {
2124
+ padding-top: 12px !important;
2125
+ padding-bottom: 8px !important;
2126
+ }
2127
+
2128
+ .orb-navigation-island-v2 input[type="text"],
2129
+ .orb-navigation-island-v2 input[type="search"] {
2130
+ height: 38px;
2131
+ border: 1px solid #d6dfeb !important;
2132
+ border-radius: 10px !important;
2133
+ background: rgba(255, 255, 255, 0.9) !important;
2134
+ color: #0b2343 !important;
2135
+ box-shadow: 0 1px 2px rgba(1, 20, 50, 0.04) inset;
2136
+ }
2137
+
2138
+ .orb-navigation-island-v2 input[type="text"]:focus,
2139
+ .orb-navigation-island-v2 input[type="search"]:focus {
2140
+ border-color: #2878c8 !important;
2141
+ box-shadow: 0 0 0 3px rgba(40, 120, 200, 0.14) !important;
2142
+ }
2143
+
2144
+ .orb-navigation-island-v2 nav {
2145
+ scrollbar-color: rgba(21, 65, 148, 0.25) transparent;
2146
+ scrollbar-width: thin;
2147
+ }
2148
+
2149
+ .orb-navigation-island-v2-footer {
2150
+ border-color: #dce4ee;
2151
+ }
2152
+
2153
+ .orb-navigation-island-v2 .tree-menu-item > button:not(.orb-navigation-pin-button) {
2154
+ min-height: 40px;
2155
+ border: 1px solid transparent;
2156
+ border-radius: 10px !important;
2157
+ color: #344861 !important;
2158
+ }
2159
+
2160
+ .orb-navigation-island-v2 .tree-menu-item > button:not(.orb-navigation-pin-button):hover {
2161
+ border-color: #d7e1ed;
2162
+ background: #edf3fa !important;
2163
+ color: #0b2343 !important;
2164
+ }
2165
+
2166
+ .orb-navigation-island-v2 .tree-menu-item:has(> div.absolute.left-0) > button:not(.orb-navigation-pin-button) {
2167
+ border-color: rgba(21, 65, 148, 0.16);
2168
+ background: linear-gradient(90deg, rgba(21, 65, 148, 0.11), rgba(40, 120, 200, 0.035)) !important;
2169
+ color: #154194 !important;
2170
+ }
2171
+
2172
+ .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button {
2173
+ min-height: 0;
2174
+ border: 0;
2175
+ background: transparent !important;
2176
+ color: #a7b1bf !important;
2177
+ box-shadow: none;
2178
+ }
2179
+
2180
+ .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button:hover {
2181
+ background: rgba(21, 65, 148, 0.07) !important;
2182
+ color: #154194 !important;
2183
+ }
2184
+
2185
+ .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button.orb-is-pinned,
2186
+ .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button.orb-is-pinned:hover {
2187
+ background: transparent !important;
2188
+ color: #154194 !important;
2189
+ }
2190
+
2191
+ .orb-navigation-island-v2 .tree-menu-item > div.absolute.left-0 {
2192
+ top: 7px !important;
2193
+ bottom: 7px !important;
2194
+ width: 4px !important;
2195
+ border-radius: 0 4px 4px 0 !important;
2196
+ background: #fc4c02 !important;
2197
+ }
2198
+
2199
+ .orb-dark .orb-navigation-island-v2,
2200
+ [data-orb-mode="dark"] .orb-navigation-island-v2 {
2201
+ border-color: #283b55 !important;
2202
+ background-color: rgba(8, 20, 38, 0.96) !important;
2203
+ background-image: linear-gradient(180deg, rgba(12, 29, 52, 0.97), rgba(5, 16, 32, 0.97)) !important;
2204
+ box-shadow:
2205
+ 0 1px 0 rgba(255, 255, 255, 0.08) inset,
2206
+ 0 18px 44px rgba(0, 0, 0, 0.42) !important;
2207
+ }
2208
+
2209
+ .orb-dark .orb-navigation-island-v2 input[type="text"],
2210
+ .orb-dark .orb-navigation-island-v2 input[type="search"],
2211
+ [data-orb-mode="dark"] .orb-navigation-island-v2 input[type="text"],
2212
+ [data-orb-mode="dark"] .orb-navigation-island-v2 input[type="search"] {
2213
+ border-color: #30455f !important;
2214
+ background: rgba(5, 16, 32, 0.78) !important;
2215
+ color: #f3f7fc !important;
2216
+ }
2217
+
2218
+ .orb-dark .orb-navigation-island-v2-footer,
2219
+ [data-orb-mode="dark"] .orb-navigation-island-v2-footer {
2220
+ border-color: #263b55;
2221
+ }
2222
+
2223
+ .orb-dark .orb-navigation-island-v2 > button,
2224
+ .orb-dark .orb-navigation-island-v2 nav > div > button,
2225
+ [data-orb-mode="dark"] .orb-navigation-island-v2 > button,
2226
+ [data-orb-mode="dark"] .orb-navigation-island-v2 nav > div > button {
2227
+ color: #9fb0c4;
2228
+ }
2229
+
2230
+ .orb-dark .orb-navigation-island-v2 .tree-menu-item > button:not(.orb-navigation-pin-button),
2231
+ [data-orb-mode="dark"] .orb-navigation-island-v2 .tree-menu-item > button:not(.orb-navigation-pin-button) {
2232
+ color: #c6d2e1 !important;
2233
+ }
2234
+
2235
+ .orb-dark .orb-navigation-island-v2 .tree-menu-item > button:not(.orb-navigation-pin-button):hover,
2236
+ [data-orb-mode="dark"] .orb-navigation-island-v2 .tree-menu-item > button:not(.orb-navigation-pin-button):hover {
2237
+ border-color: #304965;
2238
+ background: rgba(36, 69, 105, 0.42) !important;
2239
+ color: #ffffff !important;
2240
+ }
2241
+
2242
+ .orb-dark .orb-navigation-island-v2 .tree-menu-item:has(> div.absolute.left-0) > button:not(.orb-navigation-pin-button),
2243
+ [data-orb-mode="dark"] .orb-navigation-island-v2 .tree-menu-item:has(> div.absolute.left-0) > button:not(.orb-navigation-pin-button) {
2244
+ border-color: rgba(110, 174, 235, 0.24);
2245
+ background: linear-gradient(90deg, rgba(54, 130, 206, 0.24), rgba(54, 130, 206, 0.04)) !important;
2246
+ color: #a9d2f7 !important;
2247
+ }
2248
+
2249
+ .orb-dark .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button,
2250
+ [data-orb-mode="dark"] .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button {
2251
+ background: transparent !important;
2252
+ color: #71839a !important;
2253
+ }
2254
+
2255
+ .orb-dark .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button:hover,
2256
+ [data-orb-mode="dark"] .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button:hover {
2257
+ background: rgba(145, 168, 209, 0.1) !important;
2258
+ color: #91a8d1 !important;
2259
+ }
2260
+
2261
+ .orb-dark .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button.orb-is-pinned,
2262
+ .orb-dark .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button.orb-is-pinned:hover,
2263
+ [data-orb-mode="dark"] .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button.orb-is-pinned,
2264
+ [data-orb-mode="dark"] .orb-navigation-island-v2 .tree-menu-item > button.orb-navigation-pin-button.orb-is-pinned:hover {
2265
+ background: transparent !important;
2266
+ color: #91a8d1 !important;
2267
+ }
2268
+
2269
+ /* ---------- agent UI (AIPanel) ---------- */
2270
+ /* ORBIS brand design language — reference orbcafe-orbis-modules-reference.html §5 Agent UI.
2271
+ Discipline: color + typography only; no glow, no neon — working state reads through motion. */
2272
+ .orb-agent-panel {
2273
+ position: relative;
2274
+ isolation: isolate;
2275
+ display: flex;
2276
+ flex-direction: column;
2277
+ height: 100%;
2278
+ width: 100%;
2279
+ overflow: hidden;
2280
+ border: 1px solid var(--orb-border);
2281
+ border-radius: var(--orb-r-container);
2282
+ background: var(--orb-canvas);
2283
+ box-shadow: var(--orb-shadow-1);
2284
+ }
2285
+
2286
+ .orb-agent-header {
2287
+ display: flex;
2288
+ align-items: center;
2289
+ gap: 10px;
2290
+ padding: 12px 14px;
2291
+ border-bottom: 1px solid var(--orb-border);
2292
+ background: var(--orb-canvas);
2293
+ }
2294
+
2295
+ .orb-agent-avatar {
2296
+ display: inline-flex;
2297
+ align-items: center;
2298
+ justify-content: center;
2299
+ flex: none;
2300
+ width: 32px;
2301
+ height: 32px;
2302
+ border-radius: 50%;
2303
+ background: var(--orb-primary);
2304
+ color: var(--orb-on-primary);
2305
+ font: 600 12px/1 var(--orb-font);
2306
+ letter-spacing: 0.02em;
2307
+ }
2308
+
2309
+ .orb-agent-title {
2310
+ font: 600 14px/1.2 var(--orb-font);
2311
+ color: var(--orb-fg);
2312
+ }
2313
+
2314
+ .orb-agent-subtitle {
2315
+ display: flex;
2316
+ align-items: center;
2317
+ gap: 6px;
2318
+ margin-top: 2px;
2319
+ min-width: 0;
2320
+ font: 500 11px/1.3 var(--orb-font);
2321
+ color: var(--orb-muted);
2322
+ }
2323
+
2324
+ .orb-agent-dot {
2325
+ flex: none;
2326
+ width: 7px;
2327
+ height: 7px;
2328
+ border-radius: 50%;
2329
+ background: var(--orb-primary);
2330
+ }
2331
+
2332
+ .orb-agent-dot[data-active="true"] {
2333
+ animation: orb-agent-pls 1.6s ease infinite;
2334
+ }
2335
+
2336
+ @keyframes orb-agent-pls {
2337
+ 50% {
2338
+ opacity: 0.3;
2339
+ }
2340
+ }
2341
+
2342
+ .orb-agent-status-line {
2343
+ display: flex;
2344
+ align-items: center;
2345
+ gap: 8px;
2346
+ font: 500 11px/1.4 var(--orb-font);
2347
+ color: var(--orb-muted);
2348
+ }
2349
+
2350
+ .orb-agent-spinner {
2351
+ flex: none;
2352
+ width: 12px;
2353
+ height: 12px;
2354
+ border-radius: 50%;
2355
+ border: 2px solid var(--orb-p100);
2356
+ border-top-color: var(--orb-primary);
2357
+ animation: orb-agent-rot 1s linear infinite;
2358
+ }
2359
+
2360
+ @keyframes orb-agent-rot {
2361
+ to {
2362
+ transform: rotate(360deg);
2363
+ }
2364
+ }
2365
+
2366
+ .orb-agent-caret {
2367
+ display: inline-block;
2368
+ width: 2px;
2369
+ height: 13px;
2370
+ margin-left: 2px;
2371
+ vertical-align: -2px;
2372
+ background: var(--orb-primary);
2373
+ animation: orb-agent-blk 1s steps(1) infinite;
2374
+ }
2375
+
2376
+ @keyframes orb-agent-blk {
2377
+ 50% {
2378
+ opacity: 0;
2379
+ }
2380
+ }
2381
+
2382
+ /* ---------- markdown body (AgentUI chat messages) ---------- */
2383
+ /* Self-written typography for markdown rendered by AgentUI MarkdownRenderer.
2384
+ The library must not depend on the host's @tailwindcss/typography (prose). */
2385
+ .markdown-body {
2386
+ font: 300 13px/1.55 var(--orb-font);
2387
+ color: var(--orb-fg);
2388
+ word-break: break-word;
2389
+ }
2390
+
2391
+ .markdown-body > *:first-child {
2392
+ margin-top: 0;
2393
+ }
2394
+
2395
+ .markdown-body > *:last-child {
2396
+ margin-bottom: 0;
2397
+ }
2398
+
2399
+ .markdown-body h1,
2400
+ .markdown-body h2,
2401
+ .markdown-body h3,
2402
+ .markdown-body h4,
2403
+ .markdown-body h5,
2404
+ .markdown-body h6 {
2405
+ font-weight: 600;
2406
+ line-height: 1.3;
2407
+ color: var(--orb-fg-strong);
2408
+ margin: 14px 0 8px;
2409
+ }
2410
+
2411
+ .markdown-body h1 {
2412
+ font-size: 18px;
2413
+ }
2414
+
2415
+ .markdown-body h2 {
2416
+ font-size: 16px;
2417
+ }
2418
+
2419
+ .markdown-body h3 {
2420
+ font-size: 14px;
2421
+ }
2422
+
2423
+ .markdown-body h4,
2424
+ .markdown-body h5,
2425
+ .markdown-body h6 {
2426
+ font-size: 13px;
2427
+ }
2428
+
2429
+ .markdown-body p {
2430
+ margin: 6px 0;
2431
+ }
2432
+
2433
+ .markdown-body ul {
2434
+ margin: 6px 0;
2435
+ padding-left: 16px;
2436
+ list-style: disc;
2437
+ }
2438
+
2439
+ .markdown-body ol {
2440
+ margin: 6px 0;
2441
+ padding-left: 18px;
2442
+ list-style: decimal;
2443
+ }
2444
+
2445
+ .markdown-body li {
2446
+ margin: 2px 0;
2447
+ }
2448
+
2449
+ .markdown-body li > p {
2450
+ margin: 0;
2451
+ }
2452
+
2453
+ .markdown-body strong {
2454
+ font-weight: 600;
2455
+ color: var(--orb-fg-strong);
2456
+ }
2457
+
2458
+ .markdown-body em {
2459
+ font-style: italic;
2460
+ }
2461
+
2462
+ .markdown-body a {
2463
+ color: var(--orb-link);
2464
+ text-decoration: underline;
2465
+ }
2466
+
2467
+ .markdown-body code {
2468
+ font: 500 12px/1.4 ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
2469
+ background: var(--orb-p50);
2470
+ color: var(--orb-fg-strong);
2471
+ padding: 1px 5px;
2472
+ border-radius: 4px;
2473
+ }
2474
+
2475
+ .markdown-body pre {
2476
+ margin: 8px 0;
2477
+ padding: 10px 12px;
2478
+ overflow-x: auto;
2479
+ background: var(--orb-surface);
2480
+ border: 1px solid var(--orb-border);
2481
+ border-radius: var(--orb-r);
2482
+ }
2483
+
2484
+ .markdown-body pre code {
2485
+ background: transparent;
2486
+ padding: 0;
2487
+ font-size: 12px;
2488
+ }
2489
+
2490
+ .markdown-body blockquote {
2491
+ margin: 8px 0;
2492
+ padding: 2px 12px;
2493
+ border-left: 3px solid var(--orb-primary);
2494
+ color: var(--orb-muted);
2495
+ }
2496
+
2497
+ .markdown-body hr {
2498
+ margin: 12px 0;
2499
+ border: 0;
2500
+ border-top: 1px solid var(--orb-border);
2501
+ }
2502
+
2503
+ .markdown-body table {
2504
+ border-collapse: collapse;
2505
+ margin: 8px 0;
2506
+ }
2507
+
2508
+ /* ---------- utility ---------- */
2509
+ .orb-visually-hidden {
2510
+ position: absolute;
2511
+ width: 1px;
2512
+ height: 1px;
2513
+ padding: 0;
2514
+ margin: -1px;
2515
+ overflow: hidden;
2516
+ clip: rect(0, 0, 0, 0);
2517
+ white-space: nowrap;
2518
+ border: 0;
2519
+ }