@codemieai/code 0.0.55 → 0.0.56

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.
Files changed (110) hide show
  1. package/README.md +28 -0
  2. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  3. package/dist/agents/core/AgentCLI.js +10 -2
  4. package/dist/agents/core/AgentCLI.js.map +1 -1
  5. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  6. package/dist/agents/core/BaseAgentAdapter.js +20 -6
  7. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  8. package/dist/agents/core/session/ensure-session.d.ts.map +1 -1
  9. package/dist/agents/core/session/ensure-session.js +7 -2
  10. package/dist/agents/core/session/ensure-session.js.map +1 -1
  11. package/dist/agents/core/session/types.d.ts +1 -0
  12. package/dist/agents/core/session/types.d.ts.map +1 -1
  13. package/dist/agents/plugins/claude/claude.plugin.js +4 -4
  14. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  15. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  16. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/SKILL.md +273 -0
  17. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/base.css +166 -0
  18. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/buttons.css +253 -0
  19. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/components.css +605 -0
  20. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/forms.css +550 -0
  21. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/layout.css +410 -0
  22. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/tokens.css +323 -0
  23. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/typography.css +155 -0
  24. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/utilities.css +238 -0
  25. package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +1 -0
  26. package/dist/cli/commands/hook.d.ts +2 -0
  27. package/dist/cli/commands/hook.d.ts.map +1 -1
  28. package/dist/cli/commands/hook.js +36 -31
  29. package/dist/cli/commands/hook.js.map +1 -1
  30. package/dist/cli/commands/setup.js +11 -1
  31. package/dist/cli/commands/setup.js.map +1 -1
  32. package/dist/providers/core/codemie-auth-helpers.d.ts +22 -0
  33. package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -0
  34. package/dist/providers/core/codemie-auth-helpers.js +118 -0
  35. package/dist/providers/core/codemie-auth-helpers.js.map +1 -0
  36. package/dist/providers/core/index.d.ts +1 -0
  37. package/dist/providers/core/index.d.ts.map +1 -1
  38. package/dist/providers/core/index.js +1 -0
  39. package/dist/providers/core/index.js.map +1 -1
  40. package/dist/providers/core/types.d.ts +4 -0
  41. package/dist/providers/core/types.d.ts.map +1 -1
  42. package/dist/providers/core/types.js.map +1 -1
  43. package/dist/providers/index.d.ts +2 -0
  44. package/dist/providers/index.d.ts.map +1 -1
  45. package/dist/providers/index.js +2 -0
  46. package/dist/providers/index.js.map +1 -1
  47. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.d.ts +11 -0
  48. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.d.ts.map +1 -0
  49. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.js +30 -0
  50. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.js.map +1 -0
  51. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.d.ts +8 -0
  52. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.d.ts.map +1 -0
  53. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.js +88 -0
  54. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.js.map +1 -0
  55. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.d.ts +11 -0
  56. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.d.ts.map +1 -0
  57. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.js +119 -0
  58. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.js.map +1 -0
  59. package/dist/providers/plugins/anthropic-subscription/index.d.ts +9 -0
  60. package/dist/providers/plugins/anthropic-subscription/index.d.ts.map +1 -0
  61. package/dist/providers/plugins/anthropic-subscription/index.js +9 -0
  62. package/dist/providers/plugins/anthropic-subscription/index.js.map +1 -0
  63. package/dist/providers/plugins/jwt/jwt.setup-steps.js +1 -1
  64. package/dist/providers/plugins/jwt/jwt.setup-steps.js.map +1 -1
  65. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.d.ts +30 -0
  66. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.d.ts.map +1 -0
  67. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.js +111 -0
  68. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.js.map +1 -0
  69. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  70. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  71. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  72. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  73. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.d.ts.map +1 -1
  74. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js +9 -7
  75. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js.map +1 -1
  76. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts +1 -0
  77. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts.map +1 -1
  78. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +2 -0
  79. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
  80. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  81. package/dist/providers/plugins/sso/proxy/sso.proxy.js +10 -0
  82. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  83. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +1 -1
  84. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
  85. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts +2 -2
  86. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts.map +1 -1
  87. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js +4 -4
  88. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js.map +1 -1
  89. package/dist/providers/plugins/sso/sso.auth.d.ts +0 -4
  90. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
  91. package/dist/providers/plugins/sso/sso.auth.js +3 -13
  92. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  93. package/dist/providers/plugins/sso/sso.http-client.d.ts +3 -42
  94. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  95. package/dist/providers/plugins/sso/sso.http-client.js +4 -75
  96. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  97. package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -1
  98. package/dist/providers/plugins/sso/sso.setup-steps.js +15 -66
  99. package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
  100. package/dist/providers/plugins/sso/sso.template.d.ts.map +1 -1
  101. package/dist/providers/plugins/sso/sso.template.js +2 -1
  102. package/dist/providers/plugins/sso/sso.template.js.map +1 -1
  103. package/dist/utils/config.d.ts.map +1 -1
  104. package/dist/utils/config.js +17 -0
  105. package/dist/utils/config.js.map +1 -1
  106. package/dist/utils/processes.d.ts +9 -0
  107. package/dist/utils/processes.d.ts.map +1 -1
  108. package/dist/utils/processes.js +21 -0
  109. package/dist/utils/processes.js.map +1 -1
  110. package/package.json +3 -3
@@ -0,0 +1,605 @@
1
+ /**
2
+ * CodeMie UI Components
3
+ * Cards, Badges, Status badges, Alerts, Avatars, Tags, Spinner, Tooltip, Progress.
4
+ */
5
+
6
+ /* ============================================================
7
+ CARD
8
+ ============================================================ */
9
+ .card {
10
+ display: flex;
11
+ flex-direction: column;
12
+ background-color: var(--color-bg-card);
13
+ border: 1px solid var(--color-border-structural);
14
+ border-radius: var(--radius-xl);
15
+ overflow: hidden;
16
+ transition:
17
+ border-color var(--transition-base),
18
+ box-shadow var(--transition-base);
19
+ }
20
+
21
+ .card:hover {
22
+ border-color: var(--color-border-secondary);
23
+ }
24
+
25
+ .card-fixed {
26
+ height: var(--card-height); /* 158px */
27
+ }
28
+
29
+ .card-header {
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: space-between;
33
+ padding: var(--space-4);
34
+ border-bottom: 1px solid var(--color-border-structural);
35
+ }
36
+
37
+ .card-body {
38
+ flex: 1;
39
+ padding: var(--space-4);
40
+ overflow: hidden;
41
+ }
42
+
43
+ .card-footer {
44
+ padding: var(--space-3) var(--space-4);
45
+ border-top: 1px solid var(--color-border-structural);
46
+ display: flex;
47
+ align-items: center;
48
+ gap: var(--space-2);
49
+ }
50
+
51
+ .card-title {
52
+ font-size: var(--text-base);
53
+ font-weight: 600;
54
+ color: var(--color-text-primary);
55
+ overflow: hidden;
56
+ text-overflow: ellipsis;
57
+ white-space: nowrap;
58
+ }
59
+
60
+ .card-subtitle {
61
+ font-size: var(--text-xs);
62
+ color: var(--color-text-muted);
63
+ white-space: nowrap;
64
+ overflow: hidden;
65
+ text-overflow: ellipsis;
66
+ }
67
+
68
+ .card-description {
69
+ font-size: var(--text-xs);
70
+ color: var(--color-text-tertiary);
71
+ display: -webkit-box;
72
+ -webkit-line-clamp: 2;
73
+ -webkit-box-orient: vertical;
74
+ overflow: hidden;
75
+ }
76
+
77
+ /* Panel — larger surface for content areas */
78
+ .panel {
79
+ background-color: var(--color-bg-secondary);
80
+ border: 1px solid var(--color-border-panel);
81
+ border-radius: var(--radius-lg);
82
+ overflow: hidden;
83
+ }
84
+
85
+ .panel-header {
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ padding: var(--space-3) var(--space-4);
90
+ border-bottom: 1px solid var(--color-border-structural);
91
+ background-color: var(--color-bg-tertiary);
92
+ }
93
+
94
+ .panel-body {
95
+ padding: var(--space-4);
96
+ }
97
+
98
+ /* ============================================================
99
+ STATUS BADGE
100
+ ============================================================ */
101
+ .badge {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ gap: var(--space-1-5);
105
+ padding: 0 var(--space-2);
106
+ height: 17px;
107
+ line-height: 17px;
108
+ border-radius: var(--radius-full);
109
+ border: 1px solid;
110
+ font-size: var(--text-xs-1);
111
+ font-weight: 700;
112
+ text-transform: uppercase;
113
+ letter-spacing: 0.04em;
114
+ white-space: nowrap;
115
+ user-select: none;
116
+ flex-shrink: 0;
117
+ }
118
+
119
+ .badge-dot {
120
+ width: 7px;
121
+ height: 7px;
122
+ border-radius: var(--radius-full);
123
+ flex-shrink: 0;
124
+ display: inline-block;
125
+ }
126
+
127
+ /* Variants */
128
+ .badge-not-started {
129
+ background-color: var(--status-not-started-bg);
130
+ color: var(--status-not-started-text);
131
+ border-color: var(--status-not-started-border);
132
+ }
133
+ .badge-not-started .badge-dot { background-color: var(--status-not-started-text); }
134
+
135
+ .badge-in-progress {
136
+ background-color: var(--status-in-progress-bg);
137
+ color: var(--status-in-progress-text);
138
+ border-color: var(--status-in-progress-border);
139
+ }
140
+ .badge-in-progress .badge-dot {
141
+ background-color: var(--status-in-progress-text);
142
+ animation: badge-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
143
+ }
144
+
145
+ .badge-pending {
146
+ background-color: var(--status-pending-bg);
147
+ color: var(--status-pending-text);
148
+ border-color: var(--status-pending-border);
149
+ }
150
+ .badge-pending .badge-dot { background-color: var(--status-pending-text); }
151
+
152
+ .badge-success {
153
+ background-color: var(--status-success-bg);
154
+ color: var(--status-success-text);
155
+ border-color: var(--status-success-border);
156
+ }
157
+ .badge-success .badge-dot { background-color: var(--status-success-text); }
158
+
159
+ .badge-error {
160
+ background-color: var(--status-error-bg);
161
+ color: var(--status-error-text);
162
+ border-color: var(--status-error-border);
163
+ }
164
+ .badge-error .badge-dot { background-color: var(--status-error-text); }
165
+
166
+ .badge-warning {
167
+ background-color: var(--status-warning-bg);
168
+ color: var(--status-warning-text);
169
+ border-color: var(--status-warning-border);
170
+ }
171
+ .badge-warning .badge-dot { background-color: var(--status-warning-text); }
172
+
173
+ .badge-advanced {
174
+ background-color: var(--status-advanced-bg);
175
+ color: var(--status-advanced-text);
176
+ border-color: var(--status-advanced-border);
177
+ }
178
+ .badge-advanced .badge-dot { background-color: var(--status-advanced-text); }
179
+
180
+ @keyframes badge-pulse {
181
+ 0%, 100% { opacity: 1; }
182
+ 50% { opacity: 0.4; }
183
+ }
184
+
185
+ /* ============================================================
186
+ TAG (category / label)
187
+ ============================================================ */
188
+ .tag {
189
+ display: inline-flex;
190
+ align-items: center;
191
+ gap: var(--space-1);
192
+ padding: var(--space-1) var(--space-2);
193
+ border-radius: var(--radius-lg);
194
+ border: 1px solid var(--color-border-secondary);
195
+ background-color: var(--color-bg-secondary);
196
+ font-size: var(--text-xs);
197
+ font-weight: 600;
198
+ color: var(--color-text-tertiary);
199
+ white-space: nowrap;
200
+ user-select: none;
201
+ }
202
+
203
+ /* Tag sizes */
204
+ .tag-sm {
205
+ padding: 1px var(--space-1-5);
206
+ font-size: var(--text-xs-1);
207
+ border-radius: var(--radius-md);
208
+ }
209
+
210
+ /* Tag colors */
211
+ .tag-blue {
212
+ background-color: var(--color-info-bg);
213
+ border-color: var(--color-info-border);
214
+ color: var(--color-info-text);
215
+ }
216
+
217
+ .tag-green {
218
+ background-color: var(--color-success-bg);
219
+ border-color: var(--color-success-border);
220
+ color: var(--color-success-text);
221
+ }
222
+
223
+ .tag-red {
224
+ background-color: var(--color-error-bg);
225
+ border-color: var(--color-error-border);
226
+ color: var(--color-error-text);
227
+ }
228
+
229
+ .tag-yellow {
230
+ background-color: var(--color-warning-bg);
231
+ border-color: var(--color-warning-border);
232
+ color: var(--color-warning-text);
233
+ }
234
+
235
+ .tag-purple {
236
+ background-color: var(--color-purple-bg);
237
+ border-color: var(--color-purple-border);
238
+ color: var(--color-purple-text);
239
+ }
240
+
241
+ /* ============================================================
242
+ ALERT / INFO BANNER
243
+ ============================================================ */
244
+ .alert {
245
+ display: flex;
246
+ align-items: flex-start;
247
+ gap: var(--space-2);
248
+ padding: var(--space-2) var(--space-3);
249
+ border-radius: var(--radius-md);
250
+ border: 1px solid;
251
+ font-size: var(--text-xs);
252
+ line-height: 1.5;
253
+ }
254
+
255
+ .alert-icon {
256
+ flex-shrink: 0;
257
+ margin-top: 1px;
258
+ }
259
+
260
+ .alert-info {
261
+ background-color: var(--color-info-bg);
262
+ border-color: var(--color-info-border);
263
+ color: var(--color-info-text);
264
+ }
265
+
266
+ .alert-success {
267
+ background-color: var(--color-success-bg);
268
+ border-color: var(--color-success-border);
269
+ color: var(--color-success-text);
270
+ }
271
+
272
+ .alert-warning {
273
+ background-color: var(--color-warning-bg);
274
+ border-color: var(--color-warning-border);
275
+ color: var(--color-warning-text);
276
+ }
277
+
278
+ .alert-error {
279
+ background-color: var(--color-error-bg);
280
+ border-color: var(--color-error-border);
281
+ color: var(--color-error-text);
282
+ }
283
+
284
+ /* ============================================================
285
+ AVATAR
286
+ ============================================================ */
287
+ .avatar {
288
+ display: flex;
289
+ align-items: center;
290
+ justify-content: center;
291
+ border-radius: var(--radius-full);
292
+ border: 1px solid var(--color-border-secondary);
293
+ background-color: var(--color-bg-elevated);
294
+ overflow: hidden;
295
+ flex-shrink: 0;
296
+ user-select: none;
297
+ font-weight: 600;
298
+ color: #FFFFFF;
299
+ font-size: var(--text-xs);
300
+ }
301
+
302
+ .avatar img {
303
+ width: 100%;
304
+ height: 100%;
305
+ object-fit: cover;
306
+ border-radius: var(--radius-full);
307
+ }
308
+
309
+ /* Sizes */
310
+ .avatar-xs { width: 20px; height: 20px; font-size: 8px; border-width: 1px; }
311
+ .avatar-sm { width: 24px; height: 24px; font-size: 9px; border-width: 1px; }
312
+ .avatar-md { width: 32px; height: 32px; font-size: var(--text-xs); }
313
+ .avatar-chat { width: 40px; height: 40px; font-size: var(--text-sm); }
314
+ .avatar-lg { width: 72px; height: 72px; font-size: var(--text-h3); border-width: 2px; }
315
+ .avatar-xl { width: 96px; height: 96px; font-size: var(--text-h2); border-width: 2px; }
316
+ .avatar-modal { width: 176px; height: 176px; font-size: var(--text-h1); border-width: 2px; }
317
+
318
+ /* Avatar initials color palette */
319
+ .avatar-color-0 { background-color: #AA47BC; }
320
+ .avatar-color-1 { background-color: #7A1FA2; }
321
+ .avatar-color-2 { background-color: #6B8592; }
322
+ .avatar-color-3 { background-color: #465A65; }
323
+ .avatar-color-4 { background-color: #EC407A; }
324
+ .avatar-color-5 { background-color: #C2175B; }
325
+ .avatar-color-6 { background-color: #5C6BC0; }
326
+ .avatar-color-7 { background-color: #0288D1; }
327
+ .avatar-color-8 { background-color: #00579C; }
328
+ .avatar-color-9 { background-color: #0098A6; }
329
+ .avatar-color-10 { background-color: #00887A; }
330
+ .avatar-color-11 { background-color: #004C3F; }
331
+ .avatar-color-12 { background-color: #689F39; }
332
+ .avatar-color-13 { background-color: #33691E; }
333
+ .avatar-color-14 { background-color: #8C6E63; }
334
+ .avatar-color-15 { background-color: #5D4038; }
335
+ .avatar-color-16 { background-color: #7E57C2; }
336
+ .avatar-color-17 { background-color: #512DA7; }
337
+ .avatar-color-18 { background-color: #EF6C00; }
338
+ .avatar-color-19 { background-color: #F5511E; }
339
+ .avatar-color-20 { background-color: #AA3410; }
340
+
341
+ /* Avatar group (stacked) */
342
+ .avatar-group {
343
+ display: flex;
344
+ align-items: center;
345
+ }
346
+
347
+ .avatar-group .avatar {
348
+ margin-left: -8px;
349
+ }
350
+
351
+ .avatar-group .avatar:first-child {
352
+ margin-left: 0;
353
+ }
354
+
355
+ /* ============================================================
356
+ SPINNER
357
+ ============================================================ */
358
+ .spinner {
359
+ display: inline-block;
360
+ border-radius: var(--radius-full);
361
+ border-style: solid;
362
+ border-color: var(--color-border-secondary);
363
+ border-top-color: var(--color-text-primary);
364
+ animation: spinner-spin 0.8s linear infinite;
365
+ flex-shrink: 0;
366
+ }
367
+
368
+ .spinner-xs { width: 12px; height: 12px; border-width: 1.5px; }
369
+ .spinner-sm { width: 16px; height: 16px; border-width: 2px; }
370
+ .spinner-md { width: 24px; height: 24px; border-width: 2px; }
371
+ .spinner-lg { width: 32px; height: 32px; border-width: 3px; }
372
+ .spinner-xl { width: 48px; height: 48px; border-width: 3px; }
373
+
374
+ .spinner-page {
375
+ display: flex;
376
+ justify-content: center;
377
+ align-items: center;
378
+ min-height: 200px;
379
+ }
380
+
381
+ @keyframes spinner-spin {
382
+ to { transform: rotate(360deg); }
383
+ }
384
+
385
+ /* ============================================================
386
+ PROGRESS BAR
387
+ ============================================================ */
388
+ .progress-track {
389
+ position: relative;
390
+ overflow: hidden;
391
+ background-color: var(--color-bg-tertiary);
392
+ border-radius: 68px;
393
+ border: 1px solid var(--color-border-secondary);
394
+ width: 85px;
395
+ height: 14px;
396
+ }
397
+
398
+ .progress-fill {
399
+ height: 100%;
400
+ background: var(--gradient-primary-btn);
401
+ border-radius: 68px;
402
+ transition: width 200ms ease-out;
403
+ }
404
+
405
+ .progress-label {
406
+ position: absolute;
407
+ left: 50%;
408
+ top: 50%;
409
+ transform: translate(-50%, -50%);
410
+ font-size: 9px;
411
+ line-height: 10px;
412
+ font-weight: 600;
413
+ color: var(--color-text-primary);
414
+ white-space: nowrap;
415
+ }
416
+
417
+ /* Full-width progress bar */
418
+ .progress-bar {
419
+ width: 100%;
420
+ height: 4px;
421
+ background-color: var(--color-bg-tertiary);
422
+ border-radius: var(--radius-full);
423
+ overflow: hidden;
424
+ }
425
+
426
+ .progress-bar .progress-fill {
427
+ height: 4px;
428
+ border-radius: var(--radius-full);
429
+ }
430
+
431
+ /* ============================================================
432
+ TOOLTIP
433
+ ============================================================ */
434
+ .tooltip-wrapper {
435
+ position: relative;
436
+ display: inline-flex;
437
+ }
438
+
439
+ .tooltip {
440
+ position: absolute;
441
+ z-index: var(--z-toast);
442
+ bottom: calc(100% + 8px);
443
+ left: 50%;
444
+ transform: translateX(-50%);
445
+ background-color: var(--color-bg-elevated);
446
+ color: var(--color-text-primary);
447
+ padding: var(--space-2) var(--space-3);
448
+ border-radius: var(--radius-md);
449
+ font-size: var(--text-xs);
450
+ line-height: 1;
451
+ white-space: nowrap;
452
+ box-shadow: var(--shadow-md);
453
+ pointer-events: none;
454
+ opacity: 0;
455
+ transition: opacity var(--transition-fast);
456
+ }
457
+
458
+ .tooltip-wrapper:hover .tooltip {
459
+ opacity: 1;
460
+ }
461
+
462
+ /* Tooltip positions */
463
+ .tooltip-right {
464
+ bottom: auto;
465
+ top: 50%;
466
+ left: calc(100% + 8px);
467
+ transform: translateY(-50%);
468
+ }
469
+
470
+ .tooltip-bottom {
471
+ bottom: auto;
472
+ top: calc(100% + 8px);
473
+ }
474
+
475
+ /* ============================================================
476
+ EMPTY STATE
477
+ ============================================================ */
478
+ .empty-state {
479
+ display: flex;
480
+ flex-direction: column;
481
+ align-items: center;
482
+ justify-content: center;
483
+ padding: var(--space-8) var(--space-4);
484
+ text-align: center;
485
+ gap: var(--space-3);
486
+ }
487
+
488
+ .empty-state-icon {
489
+ color: var(--color-icon-tertiary);
490
+ margin-bottom: var(--space-1);
491
+ }
492
+
493
+ .empty-state-title {
494
+ font-size: var(--text-h4);
495
+ font-weight: 600;
496
+ color: var(--color-text-primary);
497
+ }
498
+
499
+ .empty-state-description {
500
+ font-size: var(--text-sm);
501
+ color: var(--color-text-muted);
502
+ max-width: 320px;
503
+ }
504
+
505
+ /* ============================================================
506
+ CHIP / CLOSE TAG
507
+ ============================================================ */
508
+ .chip {
509
+ display: inline-flex;
510
+ align-items: center;
511
+ gap: var(--space-1);
512
+ padding: 2px var(--space-1-5);
513
+ border-radius: var(--radius-full);
514
+ background-color: var(--color-bg-quaternary);
515
+ border: 1px solid var(--color-border-primary);
516
+ font-size: var(--text-xs);
517
+ color: var(--color-text-secondary);
518
+ }
519
+
520
+ .chip-close {
521
+ display: flex;
522
+ align-items: center;
523
+ justify-content: center;
524
+ width: 14px;
525
+ height: 14px;
526
+ border-radius: var(--radius-full);
527
+ background: transparent;
528
+ border: none;
529
+ color: var(--color-icon-tertiary);
530
+ cursor: pointer;
531
+ padding: 0;
532
+ transition: color var(--transition-fast), background-color var(--transition-fast);
533
+ }
534
+
535
+ .chip-close:hover {
536
+ color: var(--color-text-primary);
537
+ background-color: var(--color-bg-hover);
538
+ }
539
+
540
+ /* ============================================================
541
+ STAT CARD (metric KPI tile)
542
+ ============================================================ */
543
+ .stat-card {
544
+ display: flex;
545
+ flex-direction: column;
546
+ gap: var(--space-1);
547
+ padding: var(--space-3) var(--space-4);
548
+ background-color: var(--color-bg-card);
549
+ border: 1px solid var(--color-border-structural);
550
+ border-radius: var(--radius-xl);
551
+ min-width: 0;
552
+ }
553
+
554
+ .stat-card-label {
555
+ font-size: var(--text-xs-1);
556
+ font-weight: 700;
557
+ text-transform: uppercase;
558
+ letter-spacing: 0.04em;
559
+ color: var(--color-text-muted);
560
+ white-space: nowrap;
561
+ overflow: hidden;
562
+ text-overflow: ellipsis;
563
+ }
564
+
565
+ .stat-card-value {
566
+ font-size: var(--text-h2);
567
+ font-weight: 700;
568
+ line-height: 1.2;
569
+ color: var(--color-text-primary);
570
+ }
571
+
572
+ .stat-card-desc {
573
+ font-size: var(--text-xs);
574
+ color: var(--color-text-muted);
575
+ white-space: nowrap;
576
+ overflow: hidden;
577
+ text-overflow: ellipsis;
578
+ }
579
+
580
+ /* Stat card inside a grid */
581
+ .stat-grid {
582
+ display: grid;
583
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
584
+ gap: var(--space-3);
585
+ }
586
+
587
+ /* ============================================================
588
+ DESCRIPTION LIST (key-value pairs)
589
+ ============================================================ */
590
+ .dl-grid {
591
+ display: grid;
592
+ grid-template-columns: max-content 1fr;
593
+ gap: var(--space-2) var(--space-4);
594
+ font-size: var(--text-sm);
595
+ }
596
+
597
+ .dl-grid dt {
598
+ color: var(--color-text-muted);
599
+ font-weight: 500;
600
+ white-space: nowrap;
601
+ }
602
+
603
+ .dl-grid dd {
604
+ color: var(--color-text-primary);
605
+ }