@mahe_pkm/buzl-capi 0.1.2 → 0.1.3

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.
@@ -1,60 +1,136 @@
1
- /* BUZL - CAPI Suite Theme Stylesheet */
1
+ /* ==========================================================================
2
+ LOCATIONS DESIGN SYSTEM — BUZL CAPI SUITE
3
+ Tokenized, Content-First, WCAG 2.2 AA Compliant
4
+ Reference: https://web.gobuzl.com/locations/67ac841e7afd41ccec826b52?tab=3
5
+ ========================================================================== */
6
+
2
7
  :root {
3
- --bg: #0B0F19;
4
- --surface: #111827;
5
- --surface-card: #151F32;
6
- --surface-hover: #1E293B;
7
- --border: #243247;
8
- --border-subtle: #1E293B;
9
- --border-focus: #3B5FF5;
10
- --text: #F8FAFC;
11
- --text-muted: #94A3B8;
12
- --text-dim: #64748B;
13
- --brand-blue: #3B5FF5;
14
- --brand-blue-hover: #2B4DD8;
15
- --brand-blue-glow: rgba(59, 95, 245, 0.25);
16
- --accent-amber: #F59E0B;
17
- --accent-amber-hover: #D97706;
18
- --accent-amber-glow: rgba(245, 158, 11, 0.2);
19
- --ice-blue: #93ADFD;
20
- --success: #10B981;
21
- --success-bg: rgba(16, 185, 129, 0.12);
22
- --danger: #EF4444;
23
- --danger-bg: rgba(239, 68, 68, 0.12);
24
- --danger-hover: #DC2626;
25
- --radius: 10px;
26
- --radius-sm: 6px;
27
- --font: 'Plus Jakarta Sans', system-ui, -apple-system, sans-serif;
28
- --font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
29
- }
30
-
31
- * {
8
+ /* --- Typography Foundations --- */
9
+ --font-family-primary: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
10
+ --font-family-stack: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
11
+ --font-family-mono: 'JetBrains Mono', 'Fira Code', Menlo, Consolas, monospace;
12
+
13
+ --font-size-xs: 12px;
14
+ --font-size-sm: 13.33px;
15
+ --font-size-md: 14px;
16
+ --font-size-lg: 16px;
17
+ --font-size-xl: 18px;
18
+ --font-size-2xl: 20px;
19
+ --font-size-3xl: 21px;
20
+ --font-size-4xl: 24px;
21
+
22
+ --font-weight-regular: 400;
23
+ --font-weight-medium: 500;
24
+ --font-weight-base: 600;
25
+ --font-weight-bold: 700;
26
+
27
+ --font-lineHeight-base: 21.344px;
28
+ --font-lineHeight-tight: 1.25;
29
+
30
+ /* --- Color Palette (Locations Corporate Surface) --- */
31
+ --color-text-primary: #2a3547;
32
+ --color-text-secondary: #004aad;
33
+ --color-text-tertiary: #0000ee;
34
+ --color-text-inverse: #5a6a85;
35
+
36
+ --color-surface-base: #f4f7fb; /* Clean Locations canvas */
37
+ --color-surface-muted: #f2f6fa; /* Neutral container & input bg */
38
+ --color-surface-raised: #ffffff; /* Card surfaces & modals */
39
+ --color-surface-strong: #dfe5ef; /* Hovered rows & dividers */
40
+
41
+ --color-border-muted: #e5eaef; /* Component borders */
42
+ --color-border-interactive: #b8c4d5; /* WCAG 2.2 AA (3.18:1 contrast on #ffffff) for buttons, tabs, inputs */
43
+ --color-border-strong: #2a3547; /* High-contrast active borders */
44
+
45
+ /* --- Semantic Status Tokens --- */
46
+ --color-brand-primary: #004aad;
47
+ --color-brand-primary-hover: #003a88;
48
+ --color-brand-primary-light: rgba(0, 74, 173, 0.08);
49
+
50
+ --color-success: #13deb9;
51
+ --color-success-dark: #02b3a9;
52
+ --color-success-accessible: #087f5b; /* 4.5:1+ contrast on light backgrounds */
53
+ --color-success-light: rgba(19, 222, 185, 0.12);
54
+
55
+ --color-danger: #fa896b;
56
+ --color-danger-dark: #d63d2e;
57
+ --color-danger-accessible: #b02316; /* 5.62:1 contrast on danger-light */
58
+ --color-danger-light: rgba(250, 137, 107, 0.12);
59
+
60
+ --color-warning: #ffa800;
61
+ --color-warning-light: rgba(255, 168, 0, 0.12);
62
+
63
+ --color-info: #539bff;
64
+ --color-info-light: rgba(83, 155, 255, 0.12);
65
+
66
+ /* --- Spacing Scale --- */
67
+ --space-1: 1px;
68
+ --space-2: 2px;
69
+ --space-3: 3px;
70
+ --space-4: 4px;
71
+ --space-5: 5px;
72
+ --space-6: 6px;
73
+ --space-7: 8px;
74
+ --space-8: 10px;
75
+ --space-12: 12px;
76
+ --space-16: 16px;
77
+ --space-20: 20px;
78
+ --space-24: 24px;
79
+ --space-32: 32px;
80
+
81
+ /* --- Radius Scale --- */
82
+ --radius-xs: 5px;
83
+ --radius-sm: 7px;
84
+ --radius-md: 16px;
85
+ --radius-lg: 50px;
86
+
87
+ /* --- Shadows & Depth --- */
88
+ --shadow-1: rgba(149, 157, 165, 0.2) 0px 8px 24px 0px;
89
+ --shadow-card: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.02);
90
+ --shadow-card-hover: 0 4px 12px rgba(0, 0, 0, 0.06);
91
+
92
+ /* --- Motion & Transitions --- */
93
+ --motion-duration-instant: 150ms;
94
+ --motion-duration-fast: 250ms;
95
+ --motion-duration-normal: 300ms;
96
+ --motion-easing-standard: cubic-bezier(0.4, 0, 0.2, 1);
97
+ }
98
+
99
+ /* Base Reset */
100
+ *, *::before, *::after {
32
101
  box-sizing: border-box;
33
102
  margin: 0;
34
103
  padding: 0;
35
104
  }
36
105
 
37
106
  body {
38
- background-color: var(--bg);
39
- color: var(--text);
40
- font-family: var(--font);
41
- line-height: 1.5;
107
+ background-color: var(--color-surface-base);
108
+ color: var(--color-text-primary);
109
+ font-family: var(--font-family-primary);
110
+ font-size: var(--font-size-md);
111
+ font-weight: var(--font-weight-regular);
112
+ line-height: var(--font-lineHeight-base);
42
113
  min-height: 100vh;
43
- padding: 20px 24px;
114
+ padding: var(--space-20) var(--space-24) var(--space-32);
115
+ -webkit-font-smoothing: antialiased;
116
+ -moz-osx-font-smoothing: grayscale;
44
117
  }
45
118
 
46
119
  .app-container {
47
- max-width: 1400px;
120
+ max-width: 1440px;
48
121
  margin: 0 auto;
49
122
  }
50
123
 
51
124
  /* ==========================================================================
52
- Header & Official Buzl Branding
125
+ Header & Command Navbar
53
126
  ========================================================================== */
54
127
  .header {
55
- margin-bottom: 16px;
56
- padding-bottom: 16px;
57
- border-bottom: 1px solid var(--border);
128
+ background: var(--color-surface-raised);
129
+ border: 1px solid var(--color-border-muted);
130
+ border-radius: var(--radius-md);
131
+ padding: var(--space-16) var(--space-24);
132
+ margin-bottom: var(--space-16);
133
+ box-shadow: var(--shadow-card);
58
134
  }
59
135
 
60
136
  .header-content {
@@ -62,279 +138,351 @@ body {
62
138
  justify-content: space-between;
63
139
  align-items: center;
64
140
  flex-wrap: wrap;
65
- gap: 16px;
141
+ gap: var(--space-16);
66
142
  }
67
143
 
68
144
  .brand {
69
145
  display: flex;
70
146
  align-items: center;
71
- gap: 14px;
147
+ gap: var(--space-16);
72
148
  }
73
149
 
74
150
  .brand-code-badge {
75
- background: #0F172A;
76
- border: 1.5px solid var(--brand-blue);
77
- box-shadow: 0 0 14px var(--brand-blue-glow);
78
- padding: 8px 14px;
151
+ background: var(--color-surface-muted);
152
+ border: 1px solid var(--color-border-muted);
153
+ padding: var(--space-6) var(--space-12);
79
154
  border-radius: var(--radius-sm);
80
- font-family: var(--font-mono);
81
- font-weight: 800;
82
- font-size: 18px;
83
- letter-spacing: 1px;
155
+ font-family: var(--font-family-mono);
156
+ font-weight: var(--font-weight-bold);
157
+ font-size: var(--font-size-lg);
158
+ letter-spacing: 0.5px;
84
159
  display: flex;
85
160
  align-items: center;
86
- gap: 6px;
161
+ gap: var(--space-6);
162
+ user-select: none;
87
163
  }
88
164
 
89
165
  .brand-code-badge .brand-logo-svg {
90
- width: 22px;
91
- height: 22px;
92
- color: var(--brand-blue);
166
+ width: 20px;
167
+ height: 20px;
168
+ color: var(--color-brand-primary);
93
169
  flex-shrink: 0;
94
- margin-right: 4px;
95
170
  }
96
171
 
97
172
  .brand-code-badge .code-buzl {
98
- color: var(--brand-blue);
173
+ color: var(--color-brand-primary);
99
174
  }
100
175
 
101
176
  .brand-code-badge .code-divider {
102
- color: var(--text-dim);
177
+ color: var(--color-text-inverse);
103
178
  }
104
179
 
105
180
  .brand-code-badge .code-capi {
106
- color: var(--accent-amber);
107
- }
108
-
109
- .brand-titles h1 {
110
- font-size: 18px;
111
- font-weight: 700;
112
- letter-spacing: -0.3px;
113
- color: #FFFFFF;
181
+ color: var(--color-text-primary);
114
182
  }
115
183
 
116
184
  .brand-headline {
117
185
  display: flex;
118
186
  align-items: center;
119
- gap: 10px;
187
+ gap: var(--space-8);
188
+ }
189
+
190
+ .brand-titles h1 {
191
+ font-size: var(--font-size-xl);
192
+ font-weight: var(--font-weight-bold);
193
+ letter-spacing: -0.3px;
194
+ color: var(--color-text-primary);
120
195
  }
121
196
 
122
197
  .version-badge {
123
- font-family: var(--font-mono);
124
- font-size: 11px;
125
- background: rgba(59, 95, 245, 0.15);
126
- color: var(--ice-blue);
127
- border: 1px solid rgba(59, 95, 245, 0.3);
128
- padding: 1px 6px;
129
- border-radius: 4px;
130
- font-weight: 600;
198
+ font-family: var(--font-family-mono);
199
+ font-size: var(--font-size-xs);
200
+ background: var(--color-brand-primary-light);
201
+ color: var(--color-brand-primary);
202
+ border: 1px solid rgba(0, 74, 173, 0.2);
203
+ padding: 1px var(--space-6);
204
+ border-radius: var(--radius-xs);
205
+ font-weight: var(--font-weight-base);
131
206
  }
132
207
 
133
208
  .subtitle {
134
- color: var(--text-muted);
135
- font-size: 12.5px;
209
+ color: var(--color-text-inverse);
210
+ font-size: var(--font-size-sm);
211
+ margin-top: 1px;
136
212
  }
137
213
 
138
214
  .header-actions {
139
215
  display: flex;
140
216
  align-items: center;
141
- gap: 8px;
217
+ gap: var(--space-8);
142
218
  flex-wrap: wrap;
143
219
  }
144
220
 
221
+ .btn-count-pill {
222
+ background: var(--color-surface-strong);
223
+ color: var(--color-text-primary);
224
+ font-family: var(--font-family-mono);
225
+ font-size: var(--font-size-xs);
226
+ font-weight: var(--font-weight-bold);
227
+ padding: 1px var(--space-6);
228
+ border-radius: var(--radius-lg);
229
+ }
230
+
145
231
  /* ==========================================================================
146
- Buttons & Badges
232
+ Buttons (Explicit States: default, hover, focus-visible, active, disabled)
147
233
  ========================================================================== */
148
234
  .btn {
149
- font-family: var(--font);
150
- font-size: 13px;
151
- font-weight: 600;
152
- padding: 8px 14px;
235
+ font-family: var(--font-family-primary);
236
+ font-size: var(--font-size-sm);
237
+ font-weight: var(--font-weight-base);
238
+ padding: var(--space-7) var(--space-12);
153
239
  border-radius: var(--radius-sm);
154
240
  border: 1px solid transparent;
155
241
  cursor: pointer;
156
- transition: all 0.15s ease-in-out;
242
+ transition: background var(--motion-duration-instant) var(--motion-easing-standard),
243
+ border-color var(--motion-duration-instant) var(--motion-easing-standard),
244
+ color var(--motion-duration-instant) var(--motion-easing-standard),
245
+ box-shadow var(--motion-duration-instant) var(--motion-easing-standard);
157
246
  display: inline-flex;
158
247
  align-items: center;
159
248
  justify-content: center;
160
- gap: 6px;
249
+ gap: var(--space-6);
250
+ user-select: none;
251
+ white-space: nowrap;
252
+ outline: none;
253
+ }
254
+
255
+ .btn:focus-visible {
256
+ outline: 2px solid var(--color-brand-primary);
257
+ outline-offset: 2px;
258
+ }
259
+
260
+ .btn:active:not(:disabled) {
261
+ transform: translateY(1px);
161
262
  }
162
263
 
163
264
  .btn-primary {
164
- background: var(--brand-blue);
165
- color: #FFFFFF;
166
- box-shadow: 0 2px 8px var(--brand-blue-glow);
265
+ background: var(--color-brand-primary);
266
+ color: #ffffff;
267
+ border-color: var(--color-brand-primary);
268
+ --buzl-logo-primary: #ffffff; /* Crucial: renders white Buzl emblem inside primary action buttons */
269
+ --buzl-logo-accent: #ffa800;
270
+ box-shadow: 0 1px 2px rgba(0, 74, 173, 0.2);
167
271
  }
168
272
 
169
273
  .btn-primary:hover:not(:disabled) {
170
- background: var(--brand-blue-hover);
171
- box-shadow: 0 4px 12px var(--brand-blue-glow);
274
+ background: var(--color-brand-primary-hover);
275
+ border-color: var(--color-brand-primary-hover);
276
+ box-shadow: 0 2px 5px rgba(0, 74, 173, 0.3);
172
277
  }
173
278
 
174
279
  .btn-secondary {
175
- background: var(--surface);
176
- color: var(--text);
177
- border-color: var(--border);
280
+ background: var(--color-surface-raised);
281
+ color: var(--color-text-primary);
282
+ border-color: var(--color-border-interactive);
283
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
178
284
  }
179
285
 
180
286
  .btn-secondary:hover:not(:disabled) {
181
- background: var(--surface-hover);
182
- border-color: var(--text-muted);
287
+ background: var(--color-surface-muted);
288
+ border-color: var(--color-brand-primary);
289
+ color: var(--color-brand-primary);
290
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
183
291
  }
184
292
 
185
293
  .btn-outline {
186
294
  background: transparent;
187
- color: var(--text);
188
- border-color: var(--border);
295
+ color: var(--color-text-primary);
296
+ border-color: var(--color-border-interactive);
297
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
189
298
  }
190
299
 
191
300
  .btn-outline:hover:not(:disabled) {
192
- background: var(--surface-hover);
193
- border-color: var(--brand-blue);
301
+ background: var(--color-surface-muted);
302
+ border-color: var(--color-brand-primary);
303
+ color: var(--color-brand-primary);
304
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.06);
194
305
  }
195
306
 
196
307
  .btn-danger {
197
- background: var(--danger);
198
- color: #FFFFFF;
308
+ background: var(--color-danger-dark);
309
+ color: #ffffff;
310
+ border-color: var(--color-danger-dark);
199
311
  }
200
312
 
201
313
  .btn-danger:hover:not(:disabled) {
202
- background: var(--danger-hover);
314
+ background: #c02b1c;
315
+ border-color: #c02b1c;
203
316
  }
204
317
 
205
318
  .btn-danger-outline {
206
319
  background: transparent;
207
- color: var(--danger);
208
- border-color: rgba(239, 68, 68, 0.3);
320
+ color: var(--color-danger-dark);
321
+ border-color: rgba(214, 61, 46, 0.35);
209
322
  }
210
323
 
211
324
  .btn-danger-outline:hover:not(:disabled) {
212
- background: var(--danger-bg);
213
- border-color: var(--danger);
325
+ background: var(--color-danger-light);
326
+ border-color: var(--color-danger-dark);
214
327
  }
215
328
 
216
329
  .btn-xs {
217
- font-size: 11px;
218
- padding: 2px 7px;
219
- border-radius: 4px;
330
+ font-size: var(--font-size-xs);
331
+ padding: var(--space-3) var(--space-7);
332
+ border-radius: var(--radius-xs);
220
333
  }
221
334
 
222
335
  .btn-sm {
223
- font-size: 12px;
224
- padding: 4px 10px;
336
+ font-size: var(--font-size-xs);
337
+ padding: var(--space-5) var(--space-8);
338
+ border-radius: var(--radius-sm);
225
339
  }
226
340
 
227
341
  .btn-large {
228
- font-size: 14.5px;
229
- padding: 12px 20px;
342
+ font-size: var(--font-size-md);
343
+ padding: var(--space-12) var(--space-20);
230
344
  width: 100%;
345
+ border-radius: var(--radius-sm);
346
+ }
347
+
348
+ #btnSubmit {
349
+ font-size: var(--font-size-md);
350
+ font-weight: var(--font-weight-bold);
351
+ padding: var(--space-12) var(--space-20);
352
+ letter-spacing: 0.3px;
353
+ box-shadow: 0 2px 6px rgba(0, 74, 173, 0.3);
354
+ }
355
+
356
+ #btnSubmit:focus-visible {
357
+ outline: 2px solid var(--color-brand-primary);
358
+ outline-offset: 2px;
359
+ box-shadow: 0 0 0 4px rgba(0, 74, 173, 0.25);
231
360
  }
232
361
 
233
362
  .btn:disabled {
234
- opacity: 0.6;
363
+ opacity: 0.55;
235
364
  cursor: not-allowed;
365
+ filter: grayscale(0.2);
236
366
  }
237
367
 
238
368
  .btn-remove-service {
239
- background: rgba(239, 68, 68, 0.12);
240
- color: #F87171;
241
- border: 1px solid rgba(239, 68, 68, 0.3);
242
- font-weight: 600;
243
- transition: all 0.15s ease;
369
+ background: var(--color-danger-light);
370
+ color: var(--color-danger-accessible);
371
+ border: 1px solid rgba(176, 35, 22, 0.35);
372
+ font-weight: var(--font-weight-base);
373
+ min-height: 24px;
374
+ padding: var(--space-4) var(--space-8);
375
+ display: inline-flex;
376
+ align-items: center;
377
+ gap: var(--space-4);
244
378
  }
245
379
 
246
380
  .btn-remove-service:hover {
247
- background: var(--danger);
248
- color: #FFFFFF;
249
- border-color: var(--danger);
381
+ background: var(--color-danger-accessible);
382
+ color: #ffffff;
383
+ border-color: var(--color-danger-accessible);
384
+ }
385
+
386
+ .btn-remove-service:focus-visible {
387
+ outline: 2px solid var(--color-danger-accessible);
388
+ outline-offset: 1px;
250
389
  }
251
390
 
391
+ /* Badges */
252
392
  .badge {
253
- font-size: 11.5px;
254
- font-weight: 600;
255
- padding: 3px 8px;
256
- border-radius: 4px;
393
+ font-size: var(--font-size-xs);
394
+ font-weight: var(--font-weight-base);
395
+ padding: var(--space-3) var(--space-7);
396
+ border-radius: var(--radius-xs);
257
397
  display: inline-flex;
258
398
  align-items: center;
259
- gap: 4px;
399
+ gap: var(--space-4);
400
+ line-height: 1;
260
401
  }
261
402
 
262
403
  .badge-info {
263
- background: rgba(59, 95, 245, 0.15);
264
- color: var(--ice-blue);
265
- border: 1px solid rgba(59, 95, 245, 0.3);
404
+ background: var(--color-info-light);
405
+ color: var(--color-brand-primary);
406
+ border: 1px solid rgba(83, 155, 255, 0.25);
266
407
  }
267
408
 
268
409
  .badge-success {
269
- background: var(--success-bg);
270
- color: #34D399;
271
- border: 1px solid rgba(16, 185, 129, 0.3);
410
+ background: var(--color-success-light);
411
+ color: var(--color-success-dark);
412
+ border: 1px solid rgba(19, 222, 185, 0.3);
272
413
  }
273
414
 
274
415
  .badge-danger {
275
- background: var(--danger-bg);
276
- color: #F87171;
277
- border: 1px solid rgba(239, 68, 68, 0.3);
416
+ background: var(--color-danger-light);
417
+ color: var(--color-danger-dark);
418
+ border: 1px solid rgba(250, 137, 107, 0.35);
278
419
  }
279
420
 
280
421
  .badge-neutral {
281
- background: #1E293B;
282
- color: var(--text-muted);
283
- border: 1px solid var(--border);
422
+ background: var(--color-surface-muted);
423
+ color: var(--color-text-inverse);
424
+ border: 1px solid var(--color-border-muted);
284
425
  }
285
426
 
286
- /* Vector Icon Utilities */
427
+ .cursor-pointer {
428
+ cursor: pointer;
429
+ }
430
+
431
+ /* Vector Icons */
287
432
  .icon-sm {
288
- width: 14px;
289
- height: 14px;
433
+ width: 16px;
434
+ height: 16px;
290
435
  stroke: currentColor;
291
436
  vertical-align: middle;
292
437
  flex-shrink: 0;
293
438
  }
294
439
 
295
440
  .icon-xs {
296
- width: 12px;
297
- height: 12px;
441
+ width: 14px;
442
+ height: 14px;
298
443
  stroke: currentColor;
299
444
  vertical-align: middle;
300
445
  flex-shrink: 0;
301
446
  }
302
447
 
303
448
  .icon-spin {
304
- animation: spin 1s linear infinite;
449
+ animation: spin 0.9s linear infinite;
450
+ transform-origin: center center;
305
451
  }
306
452
 
307
453
  @keyframes spin {
308
454
  100% { transform: rotate(360deg); }
309
455
  }
310
456
 
311
- /* Precision Status Dots (Replacing Emojis) */
457
+ /* Status Dots */
312
458
  .status-dot {
313
- width: 7px;
314
- height: 7px;
459
+ width: 8px;
460
+ height: 8px;
315
461
  border-radius: 50%;
316
462
  display: inline-block;
317
463
  flex-shrink: 0;
318
464
  }
319
465
 
320
466
  .dot-active {
321
- background-color: var(--success);
322
- box-shadow: 0 0 6px rgba(16, 185, 129, 0.7);
467
+ background-color: var(--color-success-accessible);
468
+ box-shadow: 0 0 0 2px rgba(8, 127, 91, 0.2);
323
469
  }
324
470
 
325
471
  .dot-inactive {
326
- background-color: var(--text-dim);
472
+ background-color: #64748b;
473
+ opacity: 0.8;
327
474
  }
328
475
 
329
476
  /* ==========================================================================
330
- Live Status Bar & Service Matrix
477
+ Target Workspace & Active Service Matrix Bar
331
478
  ========================================================================== */
332
479
  .live-state-bar {
333
- background: var(--surface);
334
- border: 1px solid var(--border);
335
- border-radius: var(--radius);
336
- padding: 12px 16px;
337
- margin-bottom: 20px;
480
+ background: var(--color-surface-raised);
481
+ border: 1px solid var(--color-border-muted);
482
+ border-radius: var(--radius-md);
483
+ padding: var(--space-16);
484
+ margin-bottom: var(--space-20);
485
+ box-shadow: var(--shadow-card);
338
486
  }
339
487
 
340
488
  .live-state-header {
@@ -342,156 +490,193 @@ body {
342
490
  justify-content: space-between;
343
491
  align-items: center;
344
492
  flex-wrap: wrap;
345
- gap: 10px;
346
- padding-bottom: 10px;
347
- border-bottom: 1px solid var(--border-subtle);
493
+ gap: var(--space-8);
494
+ padding-bottom: var(--space-12);
495
+ border-bottom: 1px solid var(--color-border-muted);
348
496
  }
349
497
 
350
498
  .live-title-group {
351
499
  display: flex;
352
500
  align-items: center;
353
- gap: 8px;
354
- font-size: 12px;
501
+ gap: var(--space-8);
502
+ font-size: var(--font-size-sm);
355
503
  }
356
504
 
357
505
  .live-pulse {
358
- width: 9px;
359
- height: 9px;
360
- background-color: var(--success);
506
+ width: 8px;
507
+ height: 8px;
508
+ background-color: var(--color-success-dark);
361
509
  border-radius: 50%;
362
- box-shadow: 0 0 8px var(--success);
363
510
  display: inline-block;
364
- animation: pulse 2s infinite;
365
- }
366
-
367
- @keyframes pulse {
368
- 0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); }
369
- 70% { transform: scale(1); box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); }
370
- 100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
371
511
  }
372
512
 
373
513
  .live-title {
374
- font-weight: 700;
514
+ font-weight: var(--font-weight-bold);
375
515
  letter-spacing: 0.5px;
376
- color: var(--accent-amber);
516
+ color: var(--color-text-primary);
517
+ font-size: var(--font-size-xs);
518
+ text-transform: uppercase;
377
519
  }
378
520
 
379
521
  .live-state-path {
380
- font-family: var(--font-mono);
381
- color: var(--ice-blue);
382
- background: rgba(15, 23, 42, 0.6);
383
- padding: 2px 6px;
384
- border-radius: 4px;
522
+ font-family: var(--font-family-mono);
523
+ color: var(--color-brand-primary);
524
+ background: var(--color-surface-muted);
525
+ padding: var(--space-3) var(--space-8);
526
+ border-radius: var(--radius-xs);
527
+ border: 1px solid var(--color-border-muted);
528
+ font-size: var(--font-size-xs);
385
529
  }
386
530
 
387
531
  .live-meta-badges {
388
532
  display: flex;
389
533
  align-items: center;
390
- gap: 8px;
534
+ gap: var(--space-8);
391
535
  }
392
536
 
393
537
  .live-matrix-container {
394
538
  display: flex;
395
539
  align-items: center;
396
- gap: 12px;
397
- margin-top: 10px;
540
+ gap: var(--space-12);
541
+ margin-top: var(--space-12);
398
542
  flex-wrap: wrap;
399
543
  }
400
544
 
545
+ .matrix-heading {
546
+ display: flex;
547
+ align-items: center;
548
+ gap: var(--space-6);
549
+ }
550
+
401
551
  .matrix-label {
402
- font-size: 11px;
403
- font-weight: 700;
552
+ font-size: var(--font-size-xs);
553
+ font-weight: var(--font-weight-bold);
404
554
  letter-spacing: 0.5px;
405
- color: var(--text-dim);
555
+ color: var(--color-text-inverse);
556
+ text-transform: uppercase;
557
+ }
558
+
559
+ .matrix-hint {
560
+ font-size: var(--font-size-xs);
561
+ color: var(--color-text-inverse);
406
562
  }
407
563
 
408
564
  .live-state-chips {
409
565
  display: flex;
410
- gap: 8px;
566
+ gap: var(--space-7);
411
567
  flex-wrap: wrap;
412
568
  align-items: center;
413
569
  }
414
570
 
415
571
  .chip {
416
- font-size: 11.5px;
417
- padding: 4px 9px;
418
- border-radius: 6px;
419
- font-weight: 500;
572
+ font-size: var(--font-size-xs);
573
+ padding: var(--space-4) var(--space-8);
574
+ border-radius: var(--radius-xs);
575
+ font-weight: var(--font-weight-medium);
420
576
  display: inline-flex;
421
577
  align-items: center;
422
- gap: 6px;
423
- background: var(--surface-card);
424
- border: 1px solid var(--border);
425
- transition: all 0.15s ease;
578
+ gap: var(--space-6);
579
+ background: var(--color-surface-muted);
580
+ border: 1px solid var(--color-border-muted);
581
+ transition: all var(--motion-duration-instant) ease;
582
+ }
583
+
584
+ .chip-loading {
585
+ color: var(--color-text-inverse);
426
586
  }
427
587
 
428
588
  .chip-active {
429
- background: rgba(16, 185, 129, 0.08);
430
- border-color: rgba(16, 185, 129, 0.35);
431
- color: #E2E8F0;
589
+ background: var(--color-success-light);
590
+ border-color: rgba(19, 222, 185, 0.4);
591
+ color: var(--color-text-primary);
432
592
  }
433
593
 
434
594
  .chip-inactive {
435
- background: rgba(15, 23, 42, 0.4);
436
- border-color: var(--border-subtle);
437
- color: var(--text-dim);
595
+ background: var(--color-surface-muted);
596
+ border-color: var(--color-border-muted);
597
+ color: var(--color-text-inverse);
438
598
  }
439
599
 
440
600
  .chip-remove-btn {
441
- color: #F87171;
601
+ color: var(--color-danger-accessible);
442
602
  background: none;
443
603
  border: none;
444
604
  cursor: pointer;
445
- padding: 0 2px;
446
- font-size: 12px;
605
+ padding: 4px;
606
+ min-width: 24px;
607
+ min-height: 24px;
447
608
  display: inline-flex;
448
609
  align-items: center;
449
- transition: color 0.15s;
610
+ justify-content: center;
611
+ border-radius: var(--radius-xs);
612
+ transition: background var(--motion-duration-instant), transform var(--motion-duration-instant);
450
613
  }
451
614
 
452
615
  .chip-remove-btn:hover {
453
- color: #EF4444;
616
+ background: var(--color-danger-light);
617
+ transform: scale(1.15);
618
+ }
619
+
620
+ .chip-remove-btn:focus-visible {
621
+ outline: 2px solid var(--color-danger-accessible);
622
+ outline-offset: 1px;
454
623
  }
455
624
 
456
625
  /* ==========================================================================
457
- Main Grid Layout
626
+ Main Grid & Cards
458
627
  ========================================================================== */
459
628
  .main-grid {
460
629
  display: grid;
461
- grid-template-columns: 1.18fr 0.82fr;
462
- gap: 20px;
630
+ grid-template-columns: 1.15fr 0.85fr;
631
+ gap: var(--space-20);
463
632
  align-items: start;
464
633
  }
465
634
 
466
- @media (max-width: 1024px) {
635
+ @media (max-width: 1080px) {
467
636
  .main-grid {
468
637
  grid-template-columns: 1fr;
469
638
  }
470
639
  }
471
640
 
472
641
  .panel-header {
473
- margin-bottom: 12px;
642
+ margin-bottom: var(--space-12);
643
+ }
644
+
645
+ .panel-header-title {
646
+ display: flex;
647
+ align-items: center;
648
+ gap: var(--space-8);
649
+ }
650
+
651
+ .panel-header-icon {
652
+ width: 26px;
653
+ height: 26px;
654
+ border-radius: var(--radius-sm);
655
+ background: var(--color-brand-primary-light);
656
+ color: var(--color-brand-primary);
657
+ display: flex;
658
+ align-items: center;
659
+ justify-content: center;
660
+ flex-shrink: 0;
474
661
  }
475
662
 
476
663
  .panel-header h2 {
477
- font-size: 15px;
478
- font-weight: 700;
479
- color: #FFFFFF;
664
+ font-size: var(--font-size-lg);
665
+ font-weight: var(--font-weight-bold);
666
+ color: var(--color-text-primary);
667
+ letter-spacing: -0.2px;
480
668
  }
481
669
 
482
670
  .panel-sub {
483
- font-size: 12px;
484
- color: var(--text-muted);
671
+ font-size: var(--font-size-xs);
672
+ color: var(--color-text-inverse);
485
673
  }
486
674
 
487
- /* ==========================================================================
488
- Services Grid (Compact 2-Column Desktop Grid)
489
- ========================================================================== */
490
675
  .services-grid {
491
676
  display: grid;
492
677
  grid-template-columns: 1fr 1fr;
493
- gap: 12px;
494
- margin-bottom: 16px;
678
+ gap: var(--space-12);
679
+ margin-bottom: var(--space-16);
495
680
  }
496
681
 
497
682
  @media (max-width: 768px) {
@@ -500,127 +685,114 @@ body {
500
685
  }
501
686
  }
502
687
 
503
- /* Cards */
504
688
  .card {
505
- background-color: var(--surface);
506
- border: 1px solid var(--border);
507
- border-radius: var(--radius);
689
+ background-color: var(--color-surface-raised);
690
+ border: 1px solid var(--color-border-muted);
691
+ border-radius: var(--radius-md);
508
692
  overflow: hidden;
509
- margin-bottom: 14px;
510
- box-shadow: 0 4px 8px -2px rgba(0, 0, 0, 0.3);
693
+ margin-bottom: var(--space-16);
694
+ box-shadow: var(--shadow-card);
695
+ transition: box-shadow var(--motion-duration-fast) var(--motion-easing-standard);
511
696
  }
512
697
 
513
- .card:last-child {
514
- margin-bottom: 0;
698
+ .card:hover {
699
+ box-shadow: var(--shadow-card-hover);
515
700
  }
516
701
 
517
702
  .service-card {
518
703
  margin-bottom: 0;
519
- background: var(--surface-card);
704
+ display: flex;
705
+ flex-direction: column;
520
706
  }
521
707
 
522
708
  .card-header {
523
709
  display: flex;
524
710
  justify-content: space-between;
525
711
  align-items: center;
526
- padding: 12px 14px;
527
- border-bottom: 1px solid var(--border-subtle);
528
- background-color: rgba(255, 255, 255, 0.015);
712
+ padding: var(--space-12) var(--space-16);
713
+ border-bottom: 1px solid var(--color-border-muted);
714
+ background-color: var(--color-surface-raised);
529
715
  }
530
716
 
531
717
  .card-title {
532
718
  display: flex;
533
719
  align-items: center;
534
- gap: 10px;
720
+ gap: var(--space-8);
721
+ }
722
+
723
+ .card-title h3 {
724
+ font-size: var(--font-size-md);
725
+ font-weight: var(--font-weight-bold);
726
+ color: var(--color-text-primary);
727
+ }
728
+
729
+ .card-subtext {
730
+ display: block;
731
+ font-size: var(--font-size-xs);
732
+ color: var(--color-text-inverse);
535
733
  }
536
734
 
537
735
  .card-icon-badge {
538
- width: 32px;
539
- height: 32px;
540
- border-radius: 8px;
736
+ width: 36px;
737
+ height: 36px;
738
+ border-radius: var(--radius-sm);
541
739
  display: inline-flex;
542
740
  align-items: center;
543
741
  justify-content: center;
544
742
  flex-shrink: 0;
545
- transition: all 0.2s ease;
743
+ background: var(--color-surface-muted);
744
+ border: 1px solid var(--color-border-interactive);
745
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
546
746
  }
547
747
 
548
748
  .card-icon-badge .brand-icon {
549
- width: 18px;
550
- height: 18px;
749
+ width: 20px;
750
+ height: 20px;
551
751
  display: block;
552
752
  }
553
753
 
554
- .badge-gtm {
555
- background: rgba(66, 133, 244, 0.12);
556
- border: 1px solid rgba(66, 133, 244, 0.28);
557
- }
558
-
559
- .badge-meta {
560
- background: rgba(0, 129, 251, 0.12);
561
- border: 1px solid rgba(0, 129, 251, 0.28);
562
- }
563
-
564
- .badge-buzl {
565
- background: rgba(59, 95, 245, 0.14);
566
- border: 1px solid rgba(59, 95, 245, 0.32);
567
- color: var(--brand-blue);
568
- }
569
-
570
- .badge-sheets {
571
- background: rgba(15, 157, 88, 0.12);
572
- border: 1px solid rgba(15, 157, 88, 0.28);
754
+ /* Channel Badge Tints */
755
+ .card-icon-badge.badge-gtm {
756
+ background: rgba(36, 193, 224, 0.1);
757
+ border-color: rgba(36, 193, 224, 0.35);
573
758
  }
574
-
575
- .badge-zoho {
576
- background: rgba(229, 57, 53, 0.10);
577
- border: 1px solid rgba(229, 57, 53, 0.25);
759
+ .card-icon-badge.badge-meta {
760
+ background: rgba(0, 129, 251, 0.1);
761
+ border-color: rgba(0, 129, 251, 0.35);
578
762
  }
579
-
580
- .badge-whatsapp {
581
- background: rgba(37, 211, 102, 0.12);
582
- border: 1px solid rgba(37, 211, 102, 0.28);
763
+ .card-icon-badge.badge-buzl {
764
+ background: rgba(0, 74, 173, 0.1);
765
+ border-color: rgba(0, 74, 173, 0.35);
583
766
  }
584
-
585
- .badge-forms {
586
- background: rgba(59, 95, 245, 0.12);
587
- border: 1px solid rgba(59, 95, 245, 0.25);
588
- color: var(--ice-blue);
767
+ .card-icon-badge.badge-sheets {
768
+ background: rgba(15, 157, 88, 0.1);
769
+ border-color: rgba(15, 157, 88, 0.35);
589
770
  }
590
-
591
- .badge-quick {
771
+ .card-icon-badge.badge-zoho {
592
772
  background: rgba(245, 158, 11, 0.12);
593
- border: 1px solid rgba(245, 158, 11, 0.28);
594
- color: var(--accent-amber);
595
- }
596
-
597
- .badge-verify {
598
- background: rgba(16, 185, 129, 0.12);
599
- border: 1px solid rgba(16, 185, 129, 0.28);
600
- color: var(--success);
773
+ border-color: rgba(245, 158, 11, 0.4);
601
774
  }
602
-
603
- .card-title h3 {
604
- font-size: 13.5px;
605
- font-weight: 600;
606
- color: #FFFFFF;
775
+ .card-icon-badge.badge-whatsapp {
776
+ background: rgba(37, 211, 102, 0.12);
777
+ border-color: rgba(37, 211, 102, 0.4);
607
778
  }
608
779
 
609
780
  .card-header-actions {
610
781
  display: flex;
611
782
  align-items: center;
612
- gap: 8px;
783
+ gap: var(--space-7);
613
784
  }
614
785
 
615
786
  .card-body {
616
- padding: 14px;
787
+ padding: var(--space-16);
788
+ flex: 1;
617
789
  }
618
790
 
619
791
  /* ==========================================================================
620
- Form Controls
792
+ Form Controls (Explicit States)
621
793
  ========================================================================== */
622
794
  .form-group {
623
- margin-bottom: 11px;
795
+ margin-bottom: var(--space-12);
624
796
  }
625
797
 
626
798
  .form-group:last-child {
@@ -630,27 +802,27 @@ body {
630
802
  .form-row {
631
803
  display: grid;
632
804
  grid-template-columns: 1fr 1fr;
633
- gap: 10px;
805
+ gap: var(--space-8);
634
806
  }
635
807
 
636
808
  .label-row {
637
809
  display: flex;
638
810
  justify-content: space-between;
639
811
  align-items: center;
640
- margin-bottom: 4px;
812
+ margin-bottom: var(--space-4);
641
813
  }
642
814
 
643
815
  label {
644
816
  display: block;
645
- font-size: 12px;
646
- font-weight: 500;
647
- color: var(--text-muted);
648
- margin-bottom: 4px;
817
+ font-size: var(--font-size-xs);
818
+ font-weight: var(--font-weight-base);
819
+ color: var(--color-text-primary);
820
+ margin-bottom: var(--space-4);
649
821
  }
650
822
 
651
823
  .req {
652
- color: var(--danger);
653
- font-weight: bold;
824
+ color: var(--color-danger-dark);
825
+ font-weight: var(--font-weight-bold);
654
826
  }
655
827
 
656
828
  input[type="text"],
@@ -658,64 +830,87 @@ input[type="url"],
658
830
  input[type="password"],
659
831
  select {
660
832
  width: 100%;
661
- padding: 8px 10px;
662
- background-color: #0F172A;
663
- border: 1px solid var(--border);
833
+ padding: var(--space-7) var(--space-12);
834
+ background-color: var(--color-surface-raised);
835
+ border: 1px solid var(--color-border-muted);
664
836
  border-radius: var(--radius-sm);
665
- color: var(--text);
666
- font-family: var(--font);
667
- font-size: 12.5px;
668
- transition: all 0.15s ease;
837
+ color: var(--color-text-primary);
838
+ font-family: var(--font-family-primary);
839
+ font-size: var(--font-size-sm);
840
+ transition: border-color var(--motion-duration-instant) ease, box-shadow var(--motion-duration-instant) ease;
669
841
  }
670
842
 
671
- input[type="text"]:focus,
672
- input[type="url"]:focus,
673
- input[type="password"]:focus,
674
- select:focus {
675
- outline: none;
676
- border-color: var(--border-focus);
677
- box-shadow: 0 0 0 3px var(--brand-blue-glow);
843
+ input[type="text"]:focus-visible,
844
+ input[type="url"]:focus-visible,
845
+ input[type="password"]:focus-visible,
846
+ select:focus-visible {
847
+ outline: 2px solid var(--color-brand-primary);
848
+ outline-offset: 1px;
849
+ border-color: var(--color-brand-primary);
850
+ }
851
+
852
+ input::placeholder {
853
+ color: var(--color-text-inverse);
854
+ opacity: 0.7;
678
855
  }
679
856
 
680
857
  .helper-text {
681
- font-size: 11px;
682
- color: var(--text-dim);
683
- margin-top: 4px;
858
+ font-size: var(--font-size-xs);
859
+ color: var(--color-text-inverse);
860
+ margin-top: var(--space-4);
684
861
  line-height: 1.4;
685
862
  display: block;
686
863
  }
687
864
 
865
+ .helper-text code {
866
+ font-family: var(--font-family-mono);
867
+ background: var(--color-surface-muted);
868
+ border: 1px solid var(--color-border-muted);
869
+ padding: 1px var(--space-4);
870
+ border-radius: var(--radius-xs);
871
+ color: var(--color-brand-primary);
872
+ }
873
+
874
+ .checkbox-group {
875
+ margin-top: var(--space-8);
876
+ }
877
+
688
878
  .checkbox-group label {
689
879
  display: flex;
690
880
  align-items: flex-start;
691
- gap: 7px;
692
- font-size: 11.5px;
693
- color: var(--text-muted);
881
+ gap: var(--space-7);
882
+ font-size: var(--font-size-xs);
883
+ font-weight: var(--font-weight-regular);
884
+ color: var(--color-text-primary);
694
885
  cursor: pointer;
695
886
  }
696
887
 
697
888
  .checkbox-group input[type="checkbox"] {
698
889
  margin-top: 2px;
890
+ accent-color: var(--color-brand-primary);
699
891
  }
700
892
 
701
893
  .link-btn {
702
- font-size: 11.5px;
703
- color: var(--brand-blue);
894
+ font-size: var(--font-size-xs);
895
+ color: var(--color-brand-primary);
704
896
  text-decoration: none;
705
- font-weight: 600;
897
+ font-weight: var(--font-weight-base);
898
+ display: inline-flex;
899
+ align-items: center;
900
+ gap: var(--space-4);
706
901
  }
707
902
 
708
903
  .link-btn:hover {
709
904
  text-decoration: underline;
710
- color: var(--ice-blue);
905
+ color: var(--color-brand-primary-hover);
711
906
  }
712
907
 
713
- /* Switch Toggle */
908
+ /* Toggle Switch (Tokenized 44x24px, WCAG 2.2 AA SC 2.5.8 & SC 1.4.11) */
714
909
  .switch {
715
910
  position: relative;
716
911
  display: inline-block;
717
- width: 36px;
718
- height: 20px;
912
+ width: 44px;
913
+ height: 24px;
719
914
  }
720
915
 
721
916
  .switch input {
@@ -728,53 +923,67 @@ select:focus {
728
923
  position: absolute;
729
924
  cursor: pointer;
730
925
  top: 0; left: 0; right: 0; bottom: 0;
731
- background-color: #334155;
732
- transition: .2s;
733
- border-radius: 20px;
926
+ background-color: #8c9bb0; /* 3.22:1 contrast against white surfaces */
927
+ transition: var(--motion-duration-fast) var(--motion-easing-standard);
928
+ border-radius: var(--radius-lg);
929
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
734
930
  }
735
931
 
736
932
  .slider:before {
737
933
  position: absolute;
738
934
  content: "";
739
- height: 14px;
740
- width: 14px;
935
+ height: 18px;
936
+ width: 18px;
741
937
  left: 3px;
742
938
  bottom: 3px;
743
- background-color: white;
744
- transition: .2s;
939
+ background-color: #ffffff;
940
+ transition: var(--motion-duration-fast) var(--motion-easing-standard);
745
941
  border-radius: 50%;
942
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.28);
943
+ }
944
+
945
+ .switch input:focus-visible + .slider {
946
+ outline: 2px solid var(--color-brand-primary);
947
+ outline-offset: 2px;
746
948
  }
747
949
 
748
- input:checked + .slider {
749
- background-color: var(--brand-blue);
750
- box-shadow: 0 0 8px var(--brand-blue-glow);
950
+ .switch input:checked + .slider {
951
+ background-color: var(--color-brand-primary);
751
952
  }
752
953
 
753
- input:checked + .slider:before {
754
- transform: translateX(16px);
954
+ .switch input:checked + .slider:before {
955
+ transform: translateX(20px);
755
956
  }
756
957
 
757
958
  /* ==========================================================================
758
- Sheet Preview Drawer (Collapsible & Clean)
959
+ Google Sheets Schema Drawer & Structured Table
759
960
  ========================================================================== */
760
961
  .sheet-preview-drawer {
761
- margin-top: 10px;
762
- border: 1px solid var(--border-subtle);
962
+ margin-top: var(--space-12);
963
+ border: 1px solid var(--color-border-muted);
763
964
  border-radius: var(--radius-sm);
764
- background: rgba(15, 23, 42, 0.4);
965
+ background: var(--color-surface-muted);
966
+ overflow: hidden;
765
967
  }
766
968
 
767
969
  .drawer-summary {
768
- padding: 8px 10px;
769
- font-size: 12px;
770
- font-weight: 600;
771
- color: var(--ice-blue);
970
+ padding: var(--space-8) var(--space-12);
971
+ font-size: var(--font-size-xs);
972
+ font-weight: var(--font-weight-base);
973
+ color: var(--color-brand-primary);
772
974
  cursor: pointer;
773
975
  display: flex;
774
976
  justify-content: space-between;
775
977
  align-items: center;
776
978
  list-style: none;
777
979
  user-select: none;
980
+ background: var(--color-surface-raised);
981
+ }
982
+
983
+ .drawer-summary-left {
984
+ display: flex;
985
+ align-items: center;
986
+ gap: var(--space-6);
778
987
  }
779
988
 
780
989
  .drawer-summary::-webkit-details-marker {
@@ -782,159 +991,290 @@ input:checked + .slider:before {
782
991
  }
783
992
 
784
993
  .drawer-summary:hover {
785
- background: rgba(255, 255, 255, 0.02);
994
+ background: var(--color-surface-muted);
786
995
  }
787
996
 
788
997
  .drawer-content {
789
- padding: 10px;
790
- border-top: 1px solid var(--border-subtle);
998
+ padding: var(--space-12);
999
+ border-top: 1px solid var(--color-border-muted);
1000
+ display: flex;
1001
+ flex-direction: column;
1002
+ gap: var(--space-12);
1003
+ }
1004
+
1005
+ .drawer-subheading {
1006
+ font-weight: var(--font-weight-bold);
1007
+ font-size: var(--font-size-xs);
1008
+ margin-bottom: var(--space-6);
1009
+ display: block;
1010
+ color: var(--color-text-inverse);
1011
+ text-transform: uppercase;
1012
+ letter-spacing: 0.5px;
791
1013
  }
792
1014
 
793
1015
  .column-hierarchy-preview {
794
1016
  display: flex;
795
1017
  flex-wrap: wrap;
796
- gap: 5px;
1018
+ gap: var(--space-5);
797
1019
  }
798
1020
 
799
1021
  .col-pill {
800
- font-size: 11px;
801
- padding: 3px 7px;
802
- border-radius: 4px;
803
- font-weight: 500;
804
- font-family: var(--font-mono);
1022
+ font-size: var(--font-size-xs);
1023
+ padding: var(--space-3) var(--space-8);
1024
+ border-radius: var(--radius-xs);
1025
+ font-weight: var(--font-weight-medium);
1026
+ font-family: var(--font-family-mono);
1027
+ background: var(--color-surface-raised);
1028
+ border: 1px solid var(--color-border-muted);
1029
+ color: var(--color-text-primary);
1030
+ }
1031
+
1032
+ .col-pill-contact {
1033
+ border-color: rgba(0, 74, 173, 0.3);
1034
+ color: var(--color-brand-primary);
1035
+ }
1036
+
1037
+ .col-pill-dynamic {
1038
+ border-color: rgba(83, 155, 255, 0.35);
1039
+ color: #0066cc;
1040
+ }
1041
+
1042
+ .col-pill-crm {
1043
+ border-color: rgba(255, 168, 0, 0.4);
1044
+ color: #b37400;
805
1045
  }
806
1046
 
807
- .col-pill-contact { background: #1e3a5f; color: #93c5fd; border: 1px solid #2563eb; }
808
- .col-pill-dynamic { background: #3b1d54; color: #d8b4fe; border: 1px solid #9333ea; }
809
- .col-pill-crm { background: #3f2c1d; color: #fdba74; border: 1px solid #ea580c; }
810
- .col-pill-attrib { background: #1e293b; color: #94a3b8; border: 1px solid #475569; }
1047
+ .col-pill-attrib {
1048
+ border-color: var(--color-border-muted);
1049
+ color: var(--color-text-inverse);
1050
+ }
811
1051
 
812
1052
  .dynamic-fields-checklist {
813
1053
  display: flex;
814
1054
  flex-wrap: wrap;
815
- gap: 6px;
1055
+ gap: var(--space-6);
816
1056
  }
817
1057
 
818
1058
  .field-checkbox-item {
819
1059
  display: inline-flex;
820
1060
  align-items: center;
821
- gap: 6px;
822
- background: #0F172A;
823
- padding: 4px 8px;
824
- border-radius: 4px;
825
- border: 1px solid var(--border);
826
- font-size: 11px;
827
- color: #E2E8F0;
1061
+ gap: var(--space-6);
1062
+ background: var(--color-surface-raised);
1063
+ padding: var(--space-4) var(--space-8);
1064
+ border-radius: var(--radius-xs);
1065
+ border: 1px solid var(--color-border-muted);
1066
+ font-size: var(--font-size-xs);
1067
+ color: var(--color-text-primary);
1068
+ cursor: pointer;
1069
+ }
1070
+
1071
+ .field-checkbox-item input {
1072
+ accent-color: var(--color-brand-primary);
828
1073
  }
829
1074
 
830
1075
  .crm-tabs-preview {
831
1076
  display: flex;
832
1077
  flex-wrap: wrap;
833
- gap: 5px;
1078
+ gap: var(--space-5);
834
1079
  }
835
1080
 
836
1081
  .tab-pill {
837
- font-size: 10.5px;
838
- padding: 2px 6px;
839
- border-radius: 4px;
840
- font-weight: 600;
1082
+ font-size: 11px;
1083
+ padding: var(--space-2) var(--space-7);
1084
+ border-radius: var(--radius-xs);
1085
+ font-weight: var(--font-weight-base);
1086
+ background: var(--color-surface-raised);
1087
+ border: 1px solid var(--color-border-muted);
1088
+ color: var(--color-text-primary);
1089
+ }
1090
+
1091
+ .tab-pill-master { color: var(--color-brand-primary); border-color: rgba(0, 74, 173, 0.3); }
1092
+ .tab-pill-new { color: var(--color-success-dark); border-color: rgba(19, 222, 185, 0.4); }
1093
+ .tab-pill-contacted { color: #b37400; border-color: rgba(255, 168, 0, 0.4); }
1094
+ .tab-pill-qualified { color: var(--color-brand-primary); border-color: rgba(0, 74, 173, 0.4); }
1095
+ .tab-pill-converted { color: #2e59d9; border-color: rgba(46, 89, 217, 0.4); }
1096
+ .tab-pill-spam { color: var(--color-danger-dark); border-color: rgba(250, 137, 107, 0.4); }
1097
+ .tab-pill-test { color: var(--color-text-inverse); }
1098
+
1099
+ /* ==========================================================================
1100
+ Console Segmented Navigation Tabs
1101
+ ========================================================================== */
1102
+ .console-tab-nav {
1103
+ display: flex;
1104
+ background: var(--color-surface-muted);
1105
+ border: 1px solid var(--color-border-interactive);
1106
+ border-radius: var(--radius-sm);
1107
+ padding: var(--space-4);
1108
+ gap: var(--space-4);
1109
+ margin-bottom: var(--space-16);
1110
+ overflow-x: auto;
1111
+ }
1112
+
1113
+ .console-tab-btn {
1114
+ flex: 1;
1115
+ min-height: 34px;
1116
+ background: transparent;
1117
+ border: 1px solid transparent;
1118
+ color: #3b485e; /* 7.6:1 contrast ratio against surface */
1119
+ font-family: var(--font-family-primary);
1120
+ font-size: var(--font-size-xs);
1121
+ font-weight: var(--font-weight-base);
1122
+ padding: var(--space-6) var(--space-12);
1123
+ border-radius: var(--radius-xs);
1124
+ cursor: pointer;
1125
+ display: inline-flex;
1126
+ align-items: center;
1127
+ justify-content: center;
1128
+ gap: var(--space-6);
1129
+ white-space: nowrap;
1130
+ transition: all var(--motion-duration-instant) ease;
1131
+ outline: none;
1132
+ }
1133
+
1134
+ .console-tab-btn .icon-xs,
1135
+ .console-tab-btn .icon-tab,
1136
+ .icon-tab {
1137
+ width: 16px;
1138
+ height: 16px;
1139
+ stroke: currentColor;
1140
+ vertical-align: middle;
1141
+ flex-shrink: 0;
1142
+ }
1143
+
1144
+ .console-tab-btn:focus-visible {
1145
+ outline: 2px solid var(--color-brand-primary);
1146
+ outline-offset: 1px;
1147
+ }
1148
+
1149
+ .console-tab-btn:hover:not(.active) {
1150
+ color: var(--color-text-primary);
1151
+ background: rgba(0, 74, 173, 0.05);
1152
+ border-color: rgba(0, 74, 173, 0.15);
1153
+ }
1154
+
1155
+ .console-tab-btn.active {
1156
+ background: var(--color-surface-raised);
1157
+ color: var(--color-brand-primary);
1158
+ font-weight: var(--font-weight-bold);
1159
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
1160
+ border: 1px solid var(--color-border-interactive);
841
1161
  }
842
1162
 
843
- .tab-pill-master { background: #1e3a5f; color: #60a5fa; }
844
- .tab-pill-new { background: #064e3b; color: #34d399; }
845
- .tab-pill-contacted { background: #451a03; color: #fbbf24; }
846
- .tab-pill-qualified { background: #312e81; color: #a5b4fc; }
847
- .tab-pill-converted { background: #3730a3; color: #c7d2fe; }
848
- .tab-pill-spam { background: #450a0a; color: #f87171; }
849
- .tab-pill-test { background: #1f2937; color: #9ca3af; }
1163
+ .tab-badge {
1164
+ font-family: var(--font-family-mono);
1165
+ font-size: 10px;
1166
+ background: var(--color-surface-muted);
1167
+ color: var(--color-text-primary);
1168
+ padding: 1px var(--space-5);
1169
+ border-radius: var(--radius-xs);
1170
+ border: 1px solid var(--color-border-muted);
1171
+ }
1172
+
1173
+ .console-tab-content {
1174
+ display: none;
1175
+ }
1176
+
1177
+ .console-tab-content.active {
1178
+ display: block;
1179
+ }
850
1180
 
851
1181
  /* ==========================================================================
852
- Discovered Forms List & Individual Testing Runner
1182
+ Discovered Forms & Runner
853
1183
  ========================================================================== */
854
1184
  .individual-forms-list {
855
1185
  display: flex;
856
1186
  flex-direction: column;
857
- gap: 10px;
1187
+ gap: var(--space-12);
1188
+ max-height: 520px;
1189
+ overflow-y: auto;
1190
+ padding-right: var(--space-4);
858
1191
  }
859
1192
 
860
1193
  .form-item-card {
861
- background: var(--surface-card);
862
- border: 1px solid var(--border);
1194
+ background: var(--color-surface-raised);
1195
+ border: 1px solid var(--color-border-muted);
863
1196
  border-radius: var(--radius-sm);
864
- padding: 10px;
1197
+ padding: var(--space-12);
1198
+ transition: border-color var(--motion-duration-instant) ease;
1199
+ }
1200
+
1201
+ .form-item-card:hover {
1202
+ border-color: rgba(0, 74, 173, 0.4);
865
1203
  }
866
1204
 
867
1205
  .form-item-header {
868
1206
  display: flex;
869
1207
  justify-content: space-between;
870
1208
  align-items: center;
871
- margin-bottom: 8px;
1209
+ margin-bottom: var(--space-8);
872
1210
  }
873
1211
 
874
1212
  .form-selector-tag {
875
- font-family: var(--font-mono);
876
- font-size: 12px;
877
- font-weight: 700;
878
- color: var(--ice-blue);
879
- background: rgba(59, 95, 245, 0.12);
880
- padding: 2px 6px;
881
- border-radius: 4px;
882
- border: 1px solid rgba(59, 95, 245, 0.25);
1213
+ font-family: var(--font-family-mono);
1214
+ font-size: var(--font-size-xs);
1215
+ font-weight: var(--font-weight-bold);
1216
+ color: var(--color-brand-primary);
1217
+ background: var(--color-brand-primary-light);
1218
+ padding: var(--space-2) var(--space-6);
1219
+ border-radius: var(--radius-xs);
1220
+ border: 1px solid rgba(0, 74, 173, 0.2);
883
1221
  }
884
1222
 
885
1223
  .form-fields-grid {
886
1224
  display: grid;
887
1225
  grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
888
- gap: 6px;
889
- margin-bottom: 8px;
1226
+ gap: var(--space-7);
1227
+ margin-bottom: var(--space-8);
890
1228
  }
891
1229
 
892
1230
  .form-field-input-group label {
893
- font-size: 10.5px;
894
- color: var(--text-dim);
1231
+ font-size: 11px;
1232
+ color: var(--color-text-inverse);
895
1233
  margin-bottom: 2px;
896
1234
  }
897
1235
 
898
1236
  .form-field-input-group input {
899
- padding: 5px 8px;
900
- font-size: 11.5px;
1237
+ padding: var(--space-4) var(--space-7);
1238
+ font-size: var(--font-size-xs);
901
1239
  }
902
1240
 
903
1241
  .form-actions-row {
904
1242
  display: flex;
905
1243
  justify-content: space-between;
906
1244
  align-items: center;
907
- gap: 8px;
1245
+ gap: var(--space-8);
1246
+ flex-wrap: wrap;
1247
+ }
1248
+
1249
+ .form-test-result {
1250
+ font-size: var(--font-size-xs);
908
1251
  }
909
1252
 
910
1253
  /* ==========================================================================
911
- Test Verification Console
1254
+ Verification Terminal
912
1255
  ========================================================================== */
913
1256
  .test-console {
914
- background-color: #070D18;
915
- border: 1px solid var(--border);
1257
+ background-color: var(--color-surface-muted);
1258
+ border: 1px solid var(--color-border-muted);
916
1259
  border-radius: var(--radius-sm);
917
- padding: 10px;
918
- max-height: 220px;
1260
+ padding: var(--space-12);
1261
+ max-height: 380px;
919
1262
  overflow-y: auto;
920
- font-family: var(--font-mono);
921
- font-size: 11.5px;
1263
+ font-family: var(--font-family-mono);
1264
+ font-size: var(--font-size-xs);
922
1265
  }
923
1266
 
924
1267
  .test-item {
925
1268
  display: flex;
926
- gap: 8px;
927
- padding: 4px 0;
928
- border-bottom: 1px solid rgba(255, 255, 255, 0.04);
1269
+ gap: var(--space-8);
1270
+ padding: var(--space-6) 0;
1271
+ border-bottom: 1px solid var(--color-border-muted);
929
1272
  }
930
1273
 
931
1274
  .test-item:last-child {
932
1275
  border-bottom: none;
933
1276
  }
934
1277
 
935
- .test-icon.pass { color: var(--success); font-weight: bold; }
936
- .test-icon.fail { color: var(--danger); font-weight: bold; }
937
-
938
1278
  .test-status-svg {
939
1279
  width: 14px;
940
1280
  height: 14px;
@@ -943,13 +1283,13 @@ input:checked + .slider:before {
943
1283
  }
944
1284
 
945
1285
  .test-status-svg.pass {
946
- color: var(--success);
947
- stroke: var(--success);
1286
+ color: var(--color-success-dark);
1287
+ stroke: var(--color-success-dark);
948
1288
  }
949
1289
 
950
1290
  .test-status-svg.fail {
951
- color: var(--danger);
952
- stroke: var(--danger);
1291
+ color: var(--color-danger-dark);
1292
+ stroke: var(--color-danger-dark);
953
1293
  }
954
1294
 
955
1295
  .test-text {
@@ -957,174 +1297,928 @@ input:checked + .slider:before {
957
1297
  }
958
1298
 
959
1299
  .test-detail {
960
- color: var(--text-dim);
961
- font-size: 10.5px;
1300
+ color: var(--color-text-inverse);
1301
+ font-size: 11px;
1302
+ margin-top: 2px;
962
1303
  }
963
1304
 
964
- /* Discovered Files List */
965
- .discovered-files-card summary {
966
- padding: 10px 14px;
1305
+ /* Verification KPI Scorecard */
1306
+ .verification-kpi-bar {
1307
+ display: grid;
1308
+ grid-template-columns: repeat(4, 1fr);
1309
+ gap: var(--space-8);
1310
+ padding: var(--space-12);
1311
+ background: var(--color-surface-muted);
1312
+ border: 1px solid var(--color-border-interactive);
1313
+ border-radius: var(--radius-sm);
1314
+ margin-bottom: var(--space-12);
967
1315
  }
968
1316
 
969
- .file-list {
970
- list-style: none;
971
- max-height: 140px;
972
- overflow-y: auto;
1317
+ @media (max-width: 640px) {
1318
+ .verification-kpi-bar {
1319
+ grid-template-columns: repeat(2, 1fr);
1320
+ }
973
1321
  }
974
1322
 
975
- .file-list li {
976
- padding: 5px 8px;
977
- border-bottom: 1px solid var(--border-subtle);
1323
+ .kpi-item {
978
1324
  display: flex;
979
- justify-content: space-between;
1325
+ flex-direction: column;
980
1326
  align-items: center;
981
- font-size: 12px;
982
- font-family: var(--font-mono);
983
- }
984
-
985
- .file-list li:last-child {
986
- border-bottom: none;
987
- }
988
-
989
- /* Empty State */
990
- .empty-state {
991
- color: var(--text-dim);
992
- font-size: 12px;
1327
+ justify-content: center;
1328
+ gap: 2px;
993
1329
  text-align: center;
994
- padding: 16px 0;
995
1330
  }
996
1331
 
997
- /* Modals */
998
- .modal {
999
- position: fixed;
1000
- top: 0; left: 0; right: 0; bottom: 0;
1001
- display: flex;
1002
- align-items: center;
1003
- justify-content: center;
1004
- z-index: 1000;
1332
+ .kpi-label {
1333
+ font-size: 11px;
1334
+ font-weight: var(--font-weight-bold);
1335
+ text-transform: uppercase;
1336
+ letter-spacing: 0.5px;
1337
+ color: var(--color-text-inverse);
1005
1338
  }
1006
1339
 
1007
- .modal.hidden {
1008
- display: none !important;
1340
+ .kpi-value {
1341
+ font-family: var(--font-family-mono);
1342
+ font-size: var(--font-size-xl);
1343
+ font-weight: var(--font-weight-bold);
1344
+ color: var(--color-text-primary);
1345
+ line-height: 1.2;
1009
1346
  }
1010
1347
 
1011
- .hidden {
1012
- display: none !important;
1348
+ .text-success { color: var(--color-success-accessible) !important; }
1349
+ .text-danger { color: var(--color-danger-accessible) !important; }
1350
+
1351
+ .report-section-header {
1352
+ margin: var(--space-12) 0 var(--space-6);
1013
1353
  }
1014
1354
 
1015
- .modal-backdrop {
1016
- position: absolute;
1017
- top: 0; left: 0; right: 0; bottom: 0;
1018
- background: rgba(3, 7, 18, 0.75);
1019
- backdrop-filter: blur(4px);
1355
+ .report-section-title {
1356
+ font-size: var(--font-size-xs);
1357
+ font-weight: var(--font-weight-bold);
1358
+ text-transform: uppercase;
1359
+ letter-spacing: 0.5px;
1360
+ color: var(--color-text-inverse);
1361
+ display: flex;
1362
+ align-items: center;
1363
+ gap: var(--space-6);
1020
1364
  }
1021
1365
 
1022
- .modal-content {
1023
- position: relative;
1024
- background: var(--surface);
1025
- border: 1px solid var(--border);
1026
- border-radius: var(--radius);
1027
- width: 90%;
1028
- max-width: 600px;
1029
- max-height: 85vh;
1030
- overflow-y: auto;
1031
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.5);
1032
- z-index: 1001;
1366
+ /* Buzl CAPI Live Verification & Response Inspector */
1367
+ .capi-inspector-card {
1368
+ margin-top: var(--space-16);
1369
+ border: 1px solid var(--color-border-interactive);
1370
+ border-radius: var(--radius-sm);
1371
+ background: var(--color-surface-raised);
1372
+ overflow: hidden;
1373
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
1033
1374
  }
1034
1375
 
1035
- .modal-large {
1036
- max-width: 800px;
1376
+ .capi-inspector-header {
1377
+ padding: var(--space-12) var(--space-16);
1378
+ background: var(--color-surface-muted);
1379
+ border-bottom: 1px solid var(--color-border-muted);
1037
1380
  }
1038
1381
 
1039
- .modal-small {
1040
- max-width: 440px;
1382
+ .capi-inspector-title {
1383
+ display: flex;
1384
+ align-items: center;
1385
+ gap: var(--space-8);
1041
1386
  }
1042
1387
 
1043
- .modal-header {
1044
- padding: 14px 18px;
1045
- border-bottom: 1px solid var(--border);
1388
+ .capi-heading-row {
1046
1389
  display: flex;
1047
- justify-content: space-between;
1048
1390
  align-items: center;
1391
+ gap: var(--space-8);
1392
+ flex-wrap: wrap;
1049
1393
  }
1050
1394
 
1051
- .modal-header h3 {
1052
- font-size: 15px;
1053
- font-weight: 700;
1395
+ .capi-heading-row h4 {
1396
+ font-size: var(--font-size-sm);
1397
+ font-weight: var(--font-weight-bold);
1398
+ color: var(--color-text-primary);
1054
1399
  }
1055
1400
 
1056
- .modal-body {
1057
- padding: 18px;
1401
+ .inspector-tab-nav {
1402
+ display: flex;
1403
+ border-bottom: 1px solid var(--color-border-muted);
1404
+ background: var(--color-surface-raised);
1405
+ padding: var(--space-4) var(--space-8) 0;
1406
+ gap: var(--space-4);
1407
+ overflow-x: auto;
1058
1408
  }
1059
1409
 
1060
- .close-btn {
1410
+ .inspector-tab-btn {
1411
+ background: transparent;
1412
+ border: 1px solid transparent;
1413
+ border-bottom: none;
1414
+ border-top-left-radius: var(--radius-xs);
1415
+ border-top-right-radius: var(--radius-xs);
1416
+ font-family: var(--font-family-primary);
1417
+ font-size: var(--font-size-xs);
1418
+ font-weight: var(--font-weight-base);
1419
+ color: var(--color-text-inverse);
1420
+ padding: var(--space-6) var(--space-12);
1421
+ cursor: pointer;
1422
+ display: inline-flex;
1423
+ align-items: center;
1424
+ gap: var(--space-6);
1425
+ white-space: nowrap;
1426
+ transition: all var(--motion-duration-instant) ease;
1427
+ outline: none;
1428
+ }
1429
+
1430
+ .inspector-tab-btn:hover:not(.active) {
1431
+ color: var(--color-text-primary);
1432
+ background: var(--color-surface-muted);
1433
+ }
1434
+
1435
+ .inspector-tab-btn.active {
1436
+ color: var(--color-brand-primary);
1437
+ font-weight: var(--font-weight-bold);
1438
+ background: var(--color-surface-muted);
1439
+ border-color: var(--color-border-interactive) var(--color-border-interactive) transparent;
1440
+ margin-bottom: -1px;
1441
+ border-bottom: 1px solid var(--color-surface-muted);
1442
+ }
1443
+
1444
+ .inspector-tab-btn:focus-visible {
1445
+ outline: 2px solid var(--color-brand-primary);
1446
+ outline-offset: -1px;
1447
+ }
1448
+
1449
+ .inspector-view {
1450
+ padding: var(--space-12);
1451
+ background: var(--color-surface-muted);
1452
+ }
1453
+
1454
+ .inspector-view.hidden {
1455
+ display: none !important;
1456
+ }
1457
+
1458
+ .inspector-view .code-container {
1459
+ margin-top: 0;
1460
+ }
1461
+
1462
+ .console-log-stream {
1463
+ background: #1a2332;
1464
+ color: #e2e8f0;
1465
+ font-family: var(--font-family-mono);
1466
+ font-size: 11.5px;
1467
+ line-height: 1.6;
1468
+ padding: var(--space-12);
1469
+ border-radius: var(--radius-sm);
1470
+ border: 1px solid #2d3d54;
1471
+ max-height: 280px;
1472
+ overflow-y: auto;
1473
+ white-space: pre-wrap;
1474
+ word-break: break-all;
1475
+ }
1476
+
1477
+ .log-row {
1478
+ padding: 2px 0;
1479
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
1480
+ }
1481
+
1482
+ .log-row:last-child {
1483
+ border-bottom: none;
1484
+ }
1485
+
1486
+ .log-info { color: #94a3b8; }
1487
+ .log-success { color: #34d399; }
1488
+ .log-warn { color: #fbbf24; }
1489
+ .log-error { color: #f87171; }
1490
+
1491
+ /* Quick Dispatch Results */
1492
+ .test-dispatch-results {
1493
+ background: var(--color-surface-muted);
1494
+ border: 1px solid var(--color-border-muted);
1495
+ border-radius: var(--radius-sm);
1496
+ padding: var(--space-8) var(--space-12);
1497
+ }
1498
+
1499
+ .dispatch-row {
1500
+ display: flex;
1501
+ justify-content: space-between;
1502
+ align-items: center;
1503
+ padding: var(--space-6) 0;
1504
+ border-bottom: 1px solid var(--color-border-muted);
1505
+ }
1506
+
1507
+ .dispatch-row:last-child {
1508
+ border-bottom: none;
1509
+ }
1510
+
1511
+ .dispatch-service {
1512
+ font-weight: var(--font-weight-base);
1513
+ font-size: var(--font-size-xs);
1514
+ color: var(--color-text-primary);
1515
+ }
1516
+
1517
+ .dispatch-detail {
1518
+ font-size: 11.5px;
1519
+ color: var(--color-text-inverse);
1520
+ }
1521
+
1522
+ /* Discovered Files List */
1523
+ .file-list {
1524
+ list-style: none;
1525
+ max-height: 320px;
1526
+ overflow-y: auto;
1527
+ }
1528
+
1529
+ .file-list li {
1530
+ padding: var(--space-7) var(--space-12);
1531
+ border-bottom: 1px solid var(--color-border-muted);
1532
+ display: flex;
1533
+ justify-content: space-between;
1534
+ align-items: center;
1535
+ font-size: var(--font-size-xs);
1536
+ font-family: var(--font-family-mono);
1537
+ }
1538
+
1539
+ .file-list li:last-child {
1540
+ border-bottom: none;
1541
+ }
1542
+
1543
+ .file-tags {
1544
+ display: flex;
1545
+ gap: var(--space-4);
1546
+ }
1547
+
1548
+ .empty-state {
1549
+ color: var(--color-text-inverse);
1550
+ font-size: var(--font-size-sm);
1551
+ text-align: center;
1552
+ padding: var(--space-24) 0;
1553
+ }
1554
+
1555
+ /* ==========================================================================
1556
+ Modals & Dialogs (Tokenized radius.md: 16px, shadow.1)
1557
+ ========================================================================== */
1558
+ .modal {
1559
+ position: fixed;
1560
+ top: 0; left: 0; right: 0; bottom: 0;
1561
+ display: flex;
1562
+ align-items: center;
1563
+ justify-content: center;
1564
+ z-index: 1000;
1565
+ animation: modalFadeIn var(--motion-duration-instant) ease-out;
1566
+ }
1567
+
1568
+ @keyframes modalFadeIn {
1569
+ from { opacity: 0; }
1570
+ to { opacity: 1; }
1571
+ }
1572
+
1573
+ .modal.hidden {
1574
+ display: none !important;
1575
+ }
1576
+
1577
+ .hidden {
1578
+ display: none !important;
1579
+ }
1580
+
1581
+ .modal-backdrop {
1582
+ position: absolute;
1583
+ top: 0; left: 0; right: 0; bottom: 0;
1584
+ background: rgba(42, 53, 71, 0.45);
1585
+ backdrop-filter: blur(4px);
1586
+ }
1587
+
1588
+ .modal-content {
1589
+ position: relative;
1590
+ background: var(--color-surface-raised);
1591
+ border: 1px solid var(--color-border-muted);
1592
+ border-radius: var(--radius-md);
1593
+ width: 90%;
1594
+ max-width: 620px;
1595
+ max-height: 85vh;
1596
+ overflow-y: auto;
1597
+ box-shadow: var(--shadow-1);
1598
+ z-index: 1001;
1599
+ animation: modalScaleIn var(--motion-duration-instant) var(--motion-easing-standard);
1600
+ }
1601
+
1602
+ @keyframes modalScaleIn {
1603
+ from { transform: scale(0.97); opacity: 0; }
1604
+ to { transform: scale(1); opacity: 1; }
1605
+ }
1606
+
1607
+ .modal-large {
1608
+ max-width: 820px;
1609
+ }
1610
+
1611
+ .modal-small {
1612
+ max-width: 460px;
1613
+ }
1614
+
1615
+ .modal-header {
1616
+ padding: var(--space-16) var(--space-20);
1617
+ border-bottom: 1px solid var(--color-border-muted);
1618
+ display: flex;
1619
+ justify-content: space-between;
1620
+ align-items: center;
1621
+ background: var(--color-surface-raised);
1622
+ }
1623
+
1624
+ .modal-header h3 {
1625
+ font-size: var(--font-size-lg);
1626
+ font-weight: var(--font-weight-bold);
1627
+ color: var(--color-text-primary);
1628
+ }
1629
+
1630
+ .modal-body {
1631
+ padding: var(--space-20);
1632
+ }
1633
+
1634
+ .modal-confirm-text {
1635
+ font-size: var(--font-size-sm);
1636
+ line-height: var(--font-lineHeight-base);
1637
+ color: var(--color-text-primary);
1638
+ margin-bottom: var(--space-20);
1639
+ white-space: pre-line;
1640
+ }
1641
+
1642
+ .modal-actions-row {
1643
+ display: flex;
1644
+ gap: var(--space-8);
1645
+ justify-content: flex-end;
1646
+ }
1647
+
1648
+ .close-btn {
1061
1649
  background: none;
1062
- border: none;
1063
- color: var(--text-muted);
1650
+ border: 1px solid transparent;
1651
+ color: var(--color-text-inverse);
1064
1652
  font-size: 20px;
1653
+ line-height: 1;
1065
1654
  cursor: pointer;
1655
+ padding: var(--space-4);
1656
+ border-radius: var(--radius-xs);
1657
+ min-width: 28px;
1658
+ min-height: 28px;
1659
+ display: inline-flex;
1660
+ align-items: center;
1661
+ justify-content: center;
1662
+ transition: all var(--motion-duration-instant);
1066
1663
  }
1067
1664
 
1068
1665
  .close-btn:hover {
1069
- color: #FFFFFF;
1666
+ color: var(--color-text-primary);
1667
+ background: rgba(0, 0, 0, 0.06);
1668
+ border-color: var(--color-border-muted);
1669
+ }
1670
+
1671
+ .close-btn:focus-visible {
1672
+ outline: 2px solid var(--color-brand-primary);
1673
+ outline-offset: 1px;
1070
1674
  }
1071
1675
 
1072
1676
  /* Backups Table */
1073
1677
  .backups-table-container {
1074
1678
  overflow-x: auto;
1679
+ border: 1px solid var(--color-border-muted);
1680
+ border-radius: var(--radius-sm);
1681
+ margin-top: var(--space-8);
1075
1682
  }
1076
1683
 
1077
1684
  .backups-table {
1078
1685
  width: 100%;
1079
1686
  border-collapse: collapse;
1080
- font-size: 12px;
1687
+ font-size: var(--font-size-xs);
1081
1688
  }
1082
1689
 
1083
1690
  .backups-table th, .backups-table td {
1084
- padding: 8px 10px;
1085
- border-bottom: 1px solid var(--border-subtle);
1691
+ padding: var(--space-8) var(--space-12);
1692
+ border-bottom: 1px solid var(--color-border-muted);
1086
1693
  text-align: left;
1087
1694
  }
1088
1695
 
1089
1696
  .backups-table th {
1090
- color: var(--text-dim);
1091
- font-weight: 600;
1092
- font-size: 11px;
1697
+ background: var(--color-surface-muted);
1698
+ color: var(--color-text-inverse);
1699
+ font-weight: var(--font-weight-bold);
1093
1700
  text-transform: uppercase;
1094
1701
  letter-spacing: 0.5px;
1095
1702
  }
1096
1703
 
1097
- /* Apps Script Code Modal */
1704
+ .backups-table tr:hover td {
1705
+ background: var(--color-surface-muted);
1706
+ }
1707
+
1708
+ /* Apps Script Steps */
1709
+ .script-steps-list {
1710
+ padding-left: var(--space-20);
1711
+ font-size: var(--font-size-sm);
1712
+ line-height: 1.6;
1713
+ color: var(--color-text-primary);
1714
+ }
1715
+
1716
+ .script-steps-list li {
1717
+ margin-bottom: var(--space-6);
1718
+ }
1719
+
1098
1720
  .code-container {
1099
1721
  position: relative;
1100
- margin-top: 12px;
1722
+ margin-top: var(--space-12);
1101
1723
  }
1102
1724
 
1103
1725
  .copy-btn {
1104
1726
  position: absolute;
1105
- top: 8px; right: 8px;
1106
- background: var(--surface-hover);
1107
- border: 1px solid var(--border);
1108
- color: var(--text);
1109
- font-size: 11px;
1110
- padding: 4px 8px;
1111
- border-radius: 4px;
1727
+ top: var(--space-8); right: var(--space-8);
1728
+ background: var(--color-surface-raised);
1729
+ border: 1px solid var(--color-border-interactive);
1730
+ color: var(--color-text-primary);
1731
+ font-size: var(--font-size-xs);
1732
+ font-weight: var(--font-weight-base);
1733
+ padding: var(--space-4) var(--space-8);
1734
+ min-height: 26px;
1735
+ border-radius: var(--radius-xs);
1112
1736
  cursor: pointer;
1737
+ display: inline-flex;
1738
+ align-items: center;
1739
+ gap: var(--space-4);
1740
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
1741
+ transition: all var(--motion-duration-instant) ease;
1113
1742
  }
1114
1743
 
1115
1744
  .copy-btn:hover {
1116
- background: var(--border);
1745
+ background: var(--color-surface-muted);
1746
+ border-color: var(--color-brand-primary);
1747
+ color: var(--color-brand-primary);
1748
+ }
1749
+
1750
+ .copy-btn:focus-visible {
1751
+ outline: 2px solid var(--color-brand-primary);
1752
+ outline-offset: 2px;
1117
1753
  }
1118
1754
 
1119
1755
  pre code {
1120
1756
  display: block;
1121
- background: #070D18;
1122
- border: 1px solid var(--border);
1757
+ background: var(--color-surface-muted);
1758
+ border: 1px solid var(--color-border-muted);
1759
+ border-radius: var(--radius-sm);
1760
+ padding: var(--space-12);
1761
+ font-family: var(--font-family-mono);
1762
+ font-size: var(--font-size-xs);
1763
+ line-height: 1.5;
1764
+ max-height: 380px;
1765
+ overflow-y: auto;
1766
+ color: var(--color-text-primary);
1767
+ }
1768
+
1769
+ /* ==========================================================================
1770
+ Verification Scorecard KPIs & CAPI Inspector Styling
1771
+ ========================================================================== */
1772
+ .verification-kpi-bar {
1773
+ display: grid;
1774
+ grid-template-columns: repeat(4, 1fr);
1775
+ gap: var(--space-8);
1776
+ margin-bottom: var(--space-16);
1777
+ }
1778
+
1779
+ @media (max-width: 640px) {
1780
+ .verification-kpi-bar {
1781
+ grid-template-columns: repeat(2, 1fr);
1782
+ }
1783
+ }
1784
+
1785
+ .kpi-item {
1786
+ background: var(--color-surface-muted);
1787
+ border: 1px solid var(--color-border-interactive);
1788
+ border-radius: var(--radius-sm);
1789
+ padding: var(--space-8) var(--space-12);
1790
+ text-align: center;
1791
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
1792
+ }
1793
+
1794
+ .kpi-label {
1795
+ display: block;
1796
+ font-size: var(--font-size-xs);
1797
+ font-weight: var(--font-weight-bold);
1798
+ color: var(--color-text-inverse);
1799
+ text-transform: uppercase;
1800
+ letter-spacing: 0.5px;
1801
+ margin-bottom: var(--space-2);
1802
+ }
1803
+
1804
+ .kpi-value {
1805
+ display: block;
1806
+ font-family: var(--font-family-mono);
1807
+ font-size: var(--font-size-xl);
1808
+ font-weight: var(--font-weight-bold);
1809
+ color: var(--color-text-primary);
1810
+ }
1811
+
1812
+ .report-section-header {
1813
+ margin: var(--space-12) 0 var(--space-8);
1814
+ border-bottom: 1px solid var(--color-border-muted);
1815
+ padding-bottom: var(--space-4);
1816
+ }
1817
+
1818
+ .report-section-title {
1819
+ font-size: var(--font-size-xs);
1820
+ font-weight: var(--font-weight-bold);
1821
+ color: var(--color-brand-primary);
1822
+ text-transform: uppercase;
1823
+ letter-spacing: 0.5px;
1824
+ display: flex;
1825
+ align-items: center;
1826
+ gap: var(--space-6);
1827
+ }
1828
+
1829
+ .test-console {
1830
+ margin-bottom: var(--space-16);
1831
+ }
1832
+
1833
+ .test-item {
1834
+ display: flex;
1835
+ align-items: flex-start;
1836
+ gap: var(--space-8);
1837
+ padding: var(--space-8) var(--space-12);
1838
+ background: var(--color-surface-muted);
1839
+ border: 1px solid var(--color-border-muted);
1840
+ border-radius: var(--radius-xs);
1841
+ margin-bottom: var(--space-6);
1842
+ font-size: var(--font-size-xs);
1843
+ }
1844
+
1845
+ .test-status-svg {
1846
+ width: 16px;
1847
+ height: 16px;
1848
+ flex-shrink: 0;
1849
+ margin-top: 1px;
1850
+ }
1851
+
1852
+ .test-status-svg.pass {
1853
+ color: var(--color-success-accessible);
1854
+ }
1855
+
1856
+ .test-status-svg.fail {
1857
+ color: var(--color-danger-accessible);
1858
+ }
1859
+
1860
+ .test-text {
1861
+ flex: 1;
1862
+ }
1863
+
1864
+ .test-detail {
1865
+ font-size: var(--font-size-xs);
1866
+ color: var(--color-text-inverse);
1867
+ margin-top: 2px;
1868
+ }
1869
+
1870
+ /* CAPI Inspector Card */
1871
+ .capi-inspector-card {
1872
+ background: #0b1120;
1873
+ border: 1px solid #1e293b;
1874
+ border-radius: var(--radius-md);
1875
+ padding: var(--space-16);
1876
+ margin-top: var(--space-16);
1877
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
1878
+ color: #f1f5f9;
1879
+ }
1880
+
1881
+ .capi-inspector-header {
1882
+ margin-bottom: var(--space-12);
1883
+ }
1884
+
1885
+ .capi-inspector-title {
1886
+ display: flex;
1887
+ align-items: center;
1888
+ gap: var(--space-12);
1889
+ }
1890
+
1891
+ .capi-heading-row {
1892
+ display: flex;
1893
+ align-items: center;
1894
+ gap: var(--space-8);
1895
+ flex-wrap: wrap;
1896
+ }
1897
+
1898
+ .capi-heading-row h4 {
1899
+ font-size: var(--font-size-md);
1900
+ font-weight: var(--font-weight-bold);
1901
+ color: #f8fafc;
1902
+ margin: 0;
1903
+ }
1904
+
1905
+ .capi-inspector-card .card-subtext {
1906
+ color: #94a3b8;
1907
+ font-size: var(--font-size-xs);
1908
+ }
1909
+
1910
+ .inspector-tab-nav {
1911
+ display: flex;
1912
+ gap: var(--space-6);
1913
+ margin-bottom: var(--space-12);
1914
+ border-bottom: 1px solid #1e293b;
1915
+ padding-bottom: var(--space-8);
1916
+ flex-wrap: wrap;
1917
+ }
1918
+
1919
+ .inspector-tab-btn {
1920
+ background: #1e293b;
1921
+ border: 1px solid #334155;
1922
+ color: #cbd5e1;
1923
+ font-size: var(--font-size-xs);
1924
+ font-weight: var(--font-weight-bold);
1925
+ padding: var(--space-6) var(--space-12);
1926
+ border-radius: var(--radius-xs);
1927
+ cursor: pointer;
1928
+ display: inline-flex;
1929
+ align-items: center;
1930
+ gap: var(--space-6);
1931
+ transition: all var(--motion-duration-instant) ease;
1932
+ }
1933
+
1934
+ .inspector-tab-btn:hover {
1935
+ background: #334155;
1936
+ color: #ffffff;
1937
+ }
1938
+
1939
+ .inspector-tab-btn.active {
1940
+ background: var(--color-brand-primary);
1941
+ border-color: var(--color-brand-primary);
1942
+ color: #ffffff;
1943
+ box-shadow: 0 1px 4px rgba(0, 74, 173, 0.4);
1944
+ }
1945
+
1946
+ .inspector-tab-btn:focus-visible {
1947
+ outline: 2px solid #38bdf8;
1948
+ outline-offset: 2px;
1949
+ }
1950
+
1951
+ .inspector-view {
1952
+ position: relative;
1953
+ }
1954
+
1955
+ .capi-inspector-card .code-container {
1956
+ position: relative;
1957
+ }
1958
+
1959
+ .capi-inspector-card pre code {
1960
+ background: #020617;
1961
+ border: 1px solid #1e293b;
1962
+ color: #e2e8f0;
1963
+ font-family: var(--font-family-mono);
1964
+ font-size: 11px;
1965
+ line-height: 1.55;
1966
+ padding: var(--space-16);
1967
+ border-radius: var(--radius-sm);
1968
+ max-height: 380px;
1969
+ overflow-y: auto;
1970
+ white-space: pre-wrap;
1971
+ word-break: break-all;
1972
+ }
1973
+
1974
+ .capi-inspector-card .copy-btn {
1975
+ position: absolute;
1976
+ top: 10px;
1977
+ right: 10px;
1978
+ background: #1e293b;
1979
+ border: 1px solid #334155;
1980
+ color: #f1f5f9;
1981
+ z-index: 5;
1982
+ }
1983
+
1984
+ .capi-inspector-card .copy-btn:hover {
1985
+ background: #334155;
1986
+ border-color: #38bdf8;
1987
+ color: #38bdf8;
1988
+ }
1989
+
1990
+ /* Console Log Stream & Structured Audit */
1991
+ .console-log-stream {
1992
+ background: #020617;
1993
+ border: 1px solid #1e293b;
1123
1994
  border-radius: var(--radius-sm);
1124
- padding: 12px;
1125
- font-family: var(--font-mono);
1995
+ padding: var(--space-16);
1996
+ font-family: var(--font-family-mono);
1126
1997
  font-size: 11px;
1127
- max-height: 350px;
1998
+ line-height: 1.6;
1999
+ max-height: 420px;
1128
2000
  overflow-y: auto;
1129
- color: #CBD5E1;
2001
+ color: #e2e8f0;
2002
+ white-space: pre-wrap;
2003
+ }
2004
+
2005
+ .log-row {
2006
+ padding: 2px 0;
2007
+ word-break: break-word;
2008
+ }
2009
+
2010
+ .log-row.log-info {
2011
+ color: #38bdf8;
2012
+ }
2013
+
2014
+ .log-row.log-success {
2015
+ color: #34d399;
2016
+ }
2017
+
2018
+ .log-row.log-warn {
2019
+ color: #fbbf24;
2020
+ }
2021
+
2022
+ .log-row.log-error {
2023
+ color: #f87171;
2024
+ }
2025
+
2026
+ /* Structured Audit Formatting */
2027
+ .log-audit-border {
2028
+ color: #475569;
2029
+ font-weight: var(--font-weight-bold);
2030
+ }
2031
+
2032
+ .log-audit-title {
2033
+ color: #38bdf8;
2034
+ font-weight: var(--font-weight-bold);
2035
+ font-size: 11.5px;
2036
+ }
2037
+
2038
+ .log-audit-status {
2039
+ color: #34d399;
2040
+ font-weight: var(--font-weight-bold);
2041
+ }
2042
+
2043
+ .log-audit-key {
2044
+ color: #94a3b8;
2045
+ }
2046
+
2047
+ .log-audit-val {
2048
+ color: #f1f5f9;
2049
+ }
2050
+
2051
+ .log-audit-201 {
2052
+ color: #34d399;
2053
+ font-weight: var(--font-weight-bold);
2054
+ background: rgba(52, 211, 153, 0.15);
2055
+ padding: 1px 4px;
2056
+ border-radius: 3px;
2057
+ }
2058
+
2059
+ .log-audit-url {
2060
+ color: #38bdf8;
2061
+ text-decoration: underline;
2062
+ }
2063
+
2064
+ .log-audit-json {
2065
+ color: #fbbf24;
2066
+ }
2067
+
2068
+ .log-audit-banner {
2069
+ color: #34d399;
2070
+ font-weight: var(--font-weight-bold);
2071
+ }
2072
+
2073
+ /* ==========================================================================
2074
+ In-App Toast Notification System (shadow.1, radius.sm: 7px)
2075
+ ========================================================================== */
2076
+ .toast-container {
2077
+ position: fixed;
2078
+ bottom: var(--space-24);
2079
+ right: var(--space-24);
2080
+ display: flex;
2081
+ flex-direction: column;
2082
+ gap: var(--space-8);
2083
+ z-index: 2000;
2084
+ pointer-events: none;
2085
+ }
2086
+
2087
+ .toast {
2088
+ pointer-events: auto;
2089
+ min-width: 280px;
2090
+ max-width: 420px;
2091
+ background: var(--color-surface-raised);
2092
+ border: 1px solid var(--color-border-muted);
2093
+ box-shadow: var(--shadow-1);
2094
+ border-radius: var(--radius-sm);
2095
+ padding: var(--space-12) var(--space-16);
2096
+ display: flex;
2097
+ align-items: flex-start;
2098
+ gap: var(--space-8);
2099
+ font-size: var(--font-size-sm);
2100
+ color: var(--color-text-primary);
2101
+ animation: toastSlideIn var(--motion-duration-fast) var(--motion-easing-standard);
2102
+ transition: opacity var(--motion-duration-fast) ease, transform var(--motion-duration-fast) ease;
2103
+ }
2104
+
2105
+ @keyframes toastSlideIn {
2106
+ from { transform: translateX(100%); opacity: 0; }
2107
+ to { transform: translateX(0); opacity: 1; }
2108
+ }
2109
+
2110
+ .toast.toast-fadeout {
2111
+ opacity: 0;
2112
+ transform: translateY(8px);
2113
+ }
2114
+
2115
+ .toast-icon {
2116
+ flex-shrink: 0;
2117
+ margin-top: 2px;
2118
+ }
2119
+
2120
+ .toast-success {
2121
+ border-left: 3px solid var(--color-success-dark);
2122
+ }
2123
+
2124
+ .toast-success .toast-icon {
2125
+ color: var(--color-success-dark);
2126
+ }
2127
+
2128
+ .toast-error {
2129
+ border-left: 3px solid var(--color-danger-dark);
2130
+ }
2131
+
2132
+ .toast-error .toast-icon {
2133
+ color: var(--color-danger-dark);
2134
+ }
2135
+
2136
+ .toast-info {
2137
+ border-left: 3px solid var(--color-brand-primary);
2138
+ }
2139
+
2140
+ .toast-info .toast-icon {
2141
+ color: var(--color-brand-primary);
2142
+ }
2143
+
2144
+ .toast-body {
2145
+ flex: 1;
2146
+ }
2147
+
2148
+ .toast-title {
2149
+ font-weight: var(--font-weight-bold);
2150
+ font-size: var(--font-size-sm);
2151
+ color: var(--color-text-primary);
2152
+ margin-bottom: 2px;
2153
+ }
2154
+
2155
+ .toast-message {
2156
+ color: var(--color-text-inverse);
2157
+ font-size: var(--font-size-xs);
2158
+ }
2159
+
2160
+ /* ==========================================================================
2161
+ Print & PDF Export Styling (Locations Corporate Audit Letterhead)
2162
+ ========================================================================== */
2163
+ @media print {
2164
+ @page {
2165
+ size: A4 portrait;
2166
+ margin: 12mm 14mm;
2167
+ }
2168
+
2169
+ body {
2170
+ background: #ffffff !important;
2171
+ color: #1a202c !important;
2172
+ padding: 0 !important;
2173
+ font-size: 10.5pt !important;
2174
+ }
2175
+
2176
+ /* Hide interactive GUI shell during print */
2177
+ .header,
2178
+ .live-state-bar,
2179
+ .services-grid,
2180
+ .console-tab-nav,
2181
+ .panel-header,
2182
+ .modal,
2183
+ .toast-container,
2184
+ .card-header-actions,
2185
+ .inspector-tab-nav,
2186
+ .copy-btn,
2187
+ #btnSubmit,
2188
+ .config-panel,
2189
+ #tabForms,
2190
+ #tabQuickLead,
2191
+ #tabFiles {
2192
+ display: none !important;
2193
+ }
2194
+
2195
+ .main-grid {
2196
+ display: block !important;
2197
+ }
2198
+
2199
+ .status-panel,
2200
+ #tabVerification,
2201
+ .card {
2202
+ display: block !important;
2203
+ border: 1px solid #cbd5e1 !important;
2204
+ box-shadow: none !important;
2205
+ page-break-inside: avoid;
2206
+ }
2207
+
2208
+ .test-console,
2209
+ .console-log-stream,
2210
+ pre code {
2211
+ max-height: none !important;
2212
+ overflow: visible !important;
2213
+ white-space: pre-wrap !important;
2214
+ border: 1px solid #cbd5e1 !important;
2215
+ }
2216
+
2217
+ /* Reveal all inspector subviews in print for complete audit record */
2218
+ .inspector-view {
2219
+ display: block !important;
2220
+ margin-top: 10px;
2221
+ border-top: 1px solid #cbd5e1;
2222
+ padding: 8px 0;
2223
+ }
1130
2224
  }