orbcafe-ui 1.4.6 → 2.0.1

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