yo-bug 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,108 +1,238 @@
1
1
  export const SDK_CSS = `
2
+ /* ─── Design Tokens ─── */
3
+ :host {
4
+ --yb-bg: rgba(15, 23, 42, 0.88);
5
+ --yb-bg-solid: #0f172a;
6
+ --yb-bg-hover: rgba(30, 41, 59, 0.95);
7
+ --yb-surface: rgba(30, 41, 59, 0.75);
8
+ --yb-surface-hover: rgba(51, 65, 85, 0.7);
9
+ --yb-border: rgba(71, 85, 105, 0.35);
10
+ --yb-border-focus: #3b82f6;
11
+ --yb-text: #e2e8f0;
12
+ --yb-text-dim: #94a3b8;
13
+ --yb-text-dimmer: #64748b;
14
+ --yb-accent: #3b82f6;
15
+ --yb-accent-hover: #2563eb;
16
+ --yb-accent-glow: rgba(59, 130, 246, 0.2);
17
+ --yb-green: #22c55e;
18
+ --yb-red: #ef4444;
19
+ --yb-yellow: #f59e0b;
20
+ --yb-purple: #a78bfa;
21
+ --yb-radius: 12px;
22
+ --yb-radius-sm: 8px;
23
+ --yb-radius-xs: 6px;
24
+ --yb-shadow: 0 8px 32px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(255,255,255,0.04);
25
+ --yb-shadow-sm: 0 4px 16px rgba(0, 0, 0, 0.25);
26
+ --yb-blur: blur(20px) saturate(1.3);
27
+ --yb-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', sans-serif;
28
+ --yb-mono: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
29
+ --yb-transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
30
+ }
31
+
2
32
  * {
3
33
  box-sizing: border-box;
4
34
  margin: 0;
5
35
  padding: 0;
6
36
  }
7
37
 
38
+ /* ─── FAB ─── */
8
39
  .vf-fab {
9
40
  position: fixed;
10
41
  bottom: 24px;
11
42
  right: 24px;
12
- width: 52px;
13
- height: 52px;
14
- border-radius: 50%;
15
- border: none;
16
- background: #3b82f6;
17
- color: white;
18
- font-size: 22px;
43
+ width: 48px;
44
+ height: 48px;
45
+ border-radius: 14px;
46
+ border: 1px solid var(--yb-border);
47
+ background: var(--yb-bg);
48
+ backdrop-filter: var(--yb-blur);
49
+ -webkit-backdrop-filter: var(--yb-blur);
50
+ color: var(--yb-text);
19
51
  cursor: pointer;
20
- box-shadow: 0 4px 12px rgba(0,0,0,0.25);
52
+ box-shadow: var(--yb-shadow);
21
53
  display: flex;
22
54
  align-items: center;
23
55
  justify-content: center;
24
56
  pointer-events: auto;
25
- transition: background 0.2s, transform 0.2s;
57
+ transition: transform var(--yb-transition), background var(--yb-transition), border-color var(--yb-transition);
26
58
  z-index: 2147483647;
27
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
59
+ font-family: var(--yb-font);
60
+ padding: 0;
61
+ outline: none;
28
62
  }
29
63
  .vf-fab:hover {
30
- transform: scale(1.08);
64
+ transform: scale(1.06);
65
+ border-color: rgba(99, 102, 241, 0.4);
66
+ background: var(--yb-bg-hover);
67
+ }
68
+ .vf-fab:active {
69
+ transform: scale(0.96);
31
70
  }
32
71
  .vf-fab.active {
33
- background: #f59e0b;
72
+ background: var(--yb-accent);
73
+ border-color: var(--yb-accent);
74
+ color: white;
75
+ }
76
+ .vf-fab.active:hover {
77
+ background: var(--yb-accent-hover);
78
+ }
79
+ .vf-fab svg {
80
+ width: 22px;
81
+ height: 22px;
82
+ }
83
+ .vf-fab .vf-close-icon {
84
+ width: 18px;
85
+ height: 18px;
86
+ stroke-width: 2.5;
87
+ }
88
+
89
+ /* Recording dot */
90
+ .vf-rec-dot {
91
+ position: absolute;
92
+ top: -2px;
93
+ right: -2px;
94
+ width: 10px;
95
+ height: 10px;
96
+ border-radius: 50%;
97
+ background: var(--yb-red);
98
+ border: 2px solid var(--yb-bg-solid);
99
+ animation: vf-pulse 1.5s ease-in-out infinite;
34
100
  }
35
101
 
102
+ @keyframes vf-pulse {
103
+ 0%, 100% { opacity: 1; transform: scale(1); }
104
+ 50% { opacity: 0.5; transform: scale(0.85); }
105
+ }
106
+
107
+ /* ─── Mode Bar ─── */
36
108
  .vf-mode-bar {
37
109
  position: fixed;
38
- bottom: 84px;
110
+ bottom: 80px;
39
111
  right: 16px;
40
- background: #1e293b;
41
- border-radius: 12px;
42
- padding: 6px;
112
+ background: var(--yb-bg);
113
+ backdrop-filter: var(--yb-blur);
114
+ -webkit-backdrop-filter: var(--yb-blur);
115
+ border: 1px solid var(--yb-border);
116
+ border-radius: var(--yb-radius);
117
+ padding: 5px;
43
118
  display: flex;
44
- gap: 4px;
119
+ gap: 3px;
45
120
  pointer-events: auto;
46
- box-shadow: 0 4px 16px rgba(0,0,0,0.3);
47
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
121
+ box-shadow: var(--yb-shadow);
122
+ font-family: var(--yb-font);
123
+ animation: vf-pop-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
124
+ transform-origin: bottom right;
48
125
  }
49
126
  .vf-mode-btn {
50
- padding: 8px 16px;
127
+ padding: 8px 14px;
51
128
  border: none;
52
- border-radius: 8px;
129
+ border-radius: var(--yb-radius-sm);
53
130
  background: transparent;
54
- color: #94a3b8;
55
- font-size: 13px;
131
+ color: var(--yb-text-dim);
132
+ font-size: 12px;
56
133
  cursor: pointer;
57
- transition: all 0.2s;
134
+ transition: all var(--yb-transition);
135
+ display: flex;
136
+ flex-direction: column;
137
+ align-items: center;
138
+ gap: 2px;
139
+ min-width: 72px;
140
+ font-family: var(--yb-font);
141
+ outline: none;
142
+ position: relative;
143
+ }
144
+ .vf-mode-btn:hover:not(.active) {
145
+ background: var(--yb-surface-hover);
146
+ color: var(--yb-text);
58
147
  }
59
148
  .vf-mode-btn.active {
60
- background: #3b82f6;
149
+ background: var(--yb-accent);
61
150
  color: white;
151
+ box-shadow: 0 2px 8px var(--yb-accent-glow);
62
152
  }
63
- .vf-mode-btn:hover:not(.active) {
64
- color: white;
153
+ .vf-mode-btn svg {
154
+ width: 18px;
155
+ height: 18px;
156
+ margin-bottom: 1px;
157
+ }
158
+ .vf-mode-label {
159
+ font-size: 11px;
160
+ font-weight: 500;
161
+ line-height: 1;
162
+ }
163
+ .vf-mode-hint {
164
+ font-size: 9px;
165
+ opacity: 0.55;
166
+ line-height: 1;
167
+ }
168
+ .vf-mode-key {
169
+ position: absolute;
170
+ top: 3px;
171
+ right: 4px;
172
+ font-size: 8px;
173
+ opacity: 0.3;
174
+ font-weight: 600;
175
+ letter-spacing: 0.02em;
65
176
  }
66
177
 
178
+ /* ─── Panel ─── */
67
179
  .vf-panel {
68
180
  position: fixed;
69
- bottom: 84px;
181
+ bottom: 80px;
70
182
  right: 16px;
71
183
  width: 340px;
72
- background: #1e293b;
73
- border-radius: 12px;
74
- padding: 20px;
184
+ background: var(--yb-bg);
185
+ backdrop-filter: var(--yb-blur);
186
+ -webkit-backdrop-filter: var(--yb-blur);
187
+ border: 1px solid var(--yb-border);
188
+ border-radius: var(--yb-radius);
189
+ padding: 18px;
75
190
  pointer-events: auto;
76
- box-shadow: 0 8px 32px rgba(0,0,0,0.4);
77
- color: #e2e8f0;
78
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
79
- font-size: 14px;
191
+ box-shadow: var(--yb-shadow);
192
+ color: var(--yb-text);
193
+ font-family: var(--yb-font);
194
+ font-size: 13px;
195
+ animation: vf-pop-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
196
+ transform-origin: bottom right;
80
197
  }
81
198
  .vf-panel-title {
82
- font-size: 15px;
199
+ font-size: 14px;
83
200
  font-weight: 600;
84
- margin-bottom: 12px;
201
+ margin-bottom: 14px;
85
202
  color: white;
203
+ display: flex;
204
+ align-items: center;
205
+ gap: 8px;
206
+ }
207
+ .vf-panel-title svg {
208
+ width: 16px;
209
+ height: 16px;
210
+ opacity: 0.7;
86
211
  }
87
212
  .vf-panel-element {
88
- background: #0f172a;
89
- border-radius: 8px;
213
+ background: var(--yb-bg-solid);
214
+ border: 1px solid var(--yb-border);
215
+ border-radius: var(--yb-radius-sm);
90
216
  padding: 10px 12px;
91
- margin-bottom: 12px;
92
- font-family: 'SF Mono', 'Consolas', monospace;
93
- font-size: 12px;
217
+ margin-bottom: 14px;
218
+ font-family: var(--yb-mono);
219
+ font-size: 11px;
94
220
  color: #93c5fd;
95
221
  word-break: break-all;
222
+ line-height: 1.5;
96
223
  }
97
224
  .vf-panel-component {
98
- color: #a78bfa;
225
+ color: var(--yb-purple);
99
226
  margin-top: 4px;
100
227
  font-size: 11px;
101
228
  }
102
229
  .vf-panel-label {
103
- font-size: 12px;
104
- color: #94a3b8;
230
+ font-size: 11px;
231
+ font-weight: 500;
232
+ color: var(--yb-text-dim);
105
233
  margin-bottom: 6px;
234
+ text-transform: uppercase;
235
+ letter-spacing: 0.05em;
106
236
  }
107
237
  .vf-type-group {
108
238
  display: flex;
@@ -111,36 +241,47 @@ export const SDK_CSS = `
111
241
  margin-bottom: 14px;
112
242
  }
113
243
  .vf-type-btn {
114
- padding: 6px 12px;
115
- border: 1px solid #334155;
116
- border-radius: 6px;
244
+ padding: 5px 12px;
245
+ border: 1px solid var(--yb-border);
246
+ border-radius: 20px;
117
247
  background: transparent;
118
- color: #94a3b8;
248
+ color: var(--yb-text-dim);
119
249
  font-size: 12px;
250
+ font-family: var(--yb-font);
120
251
  cursor: pointer;
121
- transition: all 0.15s;
252
+ transition: all var(--yb-transition);
253
+ outline: none;
254
+ }
255
+ .vf-type-btn:hover {
256
+ border-color: rgba(148, 163, 184, 0.4);
257
+ color: var(--yb-text);
122
258
  }
123
259
  .vf-type-btn.selected {
124
- border-color: #3b82f6;
125
- background: rgba(59,130,246,0.15);
126
- color: #60a5fa;
260
+ border-color: var(--yb-accent);
261
+ background: var(--yb-accent-glow);
262
+ color: #93c5fd;
127
263
  }
128
264
  .vf-textarea {
129
265
  width: 100%;
130
266
  height: 72px;
131
- background: #0f172a;
132
- border: 1px solid #334155;
133
- border-radius: 8px;
267
+ background: var(--yb-bg-solid);
268
+ border: 1px solid var(--yb-border);
269
+ border-radius: var(--yb-radius-sm);
134
270
  padding: 10px 12px;
135
- color: #e2e8f0;
271
+ color: var(--yb-text);
136
272
  font-size: 13px;
137
- font-family: inherit;
273
+ font-family: var(--yb-font);
138
274
  resize: vertical;
139
275
  margin-bottom: 14px;
276
+ transition: border-color var(--yb-transition);
277
+ outline: none;
140
278
  }
141
279
  .vf-textarea:focus {
142
- outline: none;
143
- border-color: #3b82f6;
280
+ border-color: var(--yb-accent);
281
+ box-shadow: 0 0 0 3px var(--yb-accent-glow);
282
+ }
283
+ .vf-textarea::placeholder {
284
+ color: var(--yb-text-dimmer);
144
285
  }
145
286
  .vf-btn-row {
146
287
  display: flex;
@@ -148,75 +289,486 @@ export const SDK_CSS = `
148
289
  justify-content: flex-end;
149
290
  }
150
291
  .vf-btn {
151
- padding: 8px 18px;
152
- border-radius: 8px;
292
+ padding: 7px 18px;
293
+ border-radius: var(--yb-radius-sm);
153
294
  border: none;
154
- font-size: 13px;
155
- cursor: pointer;
295
+ font-size: 12px;
156
296
  font-weight: 500;
157
- transition: all 0.15s;
297
+ cursor: pointer;
298
+ font-family: var(--yb-font);
299
+ transition: all var(--yb-transition);
300
+ outline: none;
158
301
  }
159
302
  .vf-btn-cancel {
160
- background: #334155;
161
- color: #94a3b8;
303
+ background: var(--yb-surface);
304
+ color: var(--yb-text-dim);
305
+ border: 1px solid var(--yb-border);
162
306
  }
163
307
  .vf-btn-cancel:hover {
164
- background: #475569;
308
+ background: var(--yb-surface-hover);
309
+ color: var(--yb-text);
165
310
  }
166
311
  .vf-btn-submit {
167
- background: #3b82f6;
312
+ background: var(--yb-accent);
168
313
  color: white;
169
314
  }
170
315
  .vf-btn-submit:hover {
171
- background: #2563eb;
316
+ background: var(--yb-accent-hover);
172
317
  }
173
318
  .vf-btn-submit:disabled {
174
- opacity: 0.5;
319
+ opacity: 0.4;
175
320
  cursor: not-allowed;
176
321
  }
177
- .vf-screenshot-btn {
178
- width: 100%;
179
- padding: 32px 16px;
180
- border: 2px dashed #334155;
181
- border-radius: 8px;
182
- background: transparent;
183
- color: #94a3b8;
184
- font-size: 14px;
185
- cursor: pointer;
186
- margin-bottom: 14px;
187
- transition: all 0.15s;
188
- }
189
- .vf-screenshot-btn:hover {
190
- border-color: #3b82f6;
191
- color: #60a5fa;
192
- }
193
322
  .vf-thumbnail {
194
323
  width: 100%;
195
- border-radius: 8px;
324
+ border-radius: var(--yb-radius-sm);
196
325
  margin-bottom: 14px;
197
- border: 1px solid #334155;
326
+ border: 1px solid var(--yb-border);
198
327
  }
199
328
 
329
+ /* ─── Toast ─── */
200
330
  .vf-toast {
201
331
  position: fixed;
202
332
  top: 20px;
203
333
  right: 20px;
204
- background: #1e293b;
205
- color: #e2e8f0;
206
- padding: 12px 20px;
207
- border-radius: 8px;
208
- font-size: 13px;
334
+ background: var(--yb-bg);
335
+ backdrop-filter: var(--yb-blur);
336
+ -webkit-backdrop-filter: var(--yb-blur);
337
+ border: 1px solid var(--yb-border);
338
+ color: var(--yb-text);
339
+ padding: 10px 16px 10px 14px;
340
+ border-radius: var(--yb-radius-sm);
341
+ font-size: 12px;
342
+ font-weight: 500;
209
343
  pointer-events: auto;
210
- box-shadow: 0 4px 16px rgba(0,0,0,0.3);
211
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
212
- animation: vf-slide-in 0.3s ease-out;
213
- border-left: 3px solid #22c55e;
344
+ box-shadow: var(--yb-shadow-sm);
345
+ font-family: var(--yb-font);
346
+ animation: vf-slide-in 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
347
+ display: flex;
348
+ align-items: center;
349
+ gap: 8px;
350
+ border-left: 3px solid var(--yb-green);
214
351
  }
215
352
  .vf-toast.error {
216
- border-left-color: #ef4444;
353
+ border-left-color: var(--yb-red);
354
+ }
355
+
356
+ /* ─── Checklist Panel ─── */
357
+ .vf-checklist {
358
+ position: fixed;
359
+ top: 16px;
360
+ right: 80px;
361
+ width: 320px;
362
+ max-height: 70vh;
363
+ overflow: hidden;
364
+ background: var(--yb-bg);
365
+ backdrop-filter: var(--yb-blur);
366
+ -webkit-backdrop-filter: var(--yb-blur);
367
+ border: 1px solid var(--yb-border);
368
+ border-radius: var(--yb-radius);
369
+ box-shadow: var(--yb-shadow);
370
+ pointer-events: auto;
371
+ font-family: var(--yb-font);
372
+ font-size: 13px;
373
+ color: var(--yb-text);
374
+ z-index: 2147483647;
375
+ animation: vf-pop-in 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
217
376
  }
377
+ .vf-checklist-header {
378
+ padding: 12px 14px;
379
+ border-bottom: 1px solid var(--yb-border);
380
+ display: flex;
381
+ justify-content: space-between;
382
+ align-items: center;
383
+ cursor: move;
384
+ user-select: none;
385
+ }
386
+ .vf-checklist-title-wrap {
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 8px;
390
+ overflow: hidden;
391
+ }
392
+ .vf-checklist-title {
393
+ font-weight: 600;
394
+ font-size: 12px;
395
+ color: white;
396
+ white-space: nowrap;
397
+ overflow: hidden;
398
+ text-overflow: ellipsis;
399
+ }
400
+ .vf-checklist-badge {
401
+ font-size: 11px;
402
+ color: var(--yb-text-dim);
403
+ flex-shrink: 0;
404
+ }
405
+ .vf-checklist-badge-fail {
406
+ color: var(--yb-red);
407
+ margin-left: 4px;
408
+ }
409
+ .vf-checklist-toggle {
410
+ background: none;
411
+ border: none;
412
+ color: var(--yb-text-dim);
413
+ cursor: pointer;
414
+ font-size: 14px;
415
+ padding: 2px 6px;
416
+ border-radius: 4px;
417
+ line-height: 1;
418
+ transition: background var(--yb-transition);
419
+ outline: none;
420
+ }
421
+ .vf-checklist-toggle:hover {
422
+ background: var(--yb-surface-hover);
423
+ }
424
+ .vf-checklist-progress {
425
+ height: 2px;
426
+ background: rgba(51, 65, 85, 0.5);
427
+ }
428
+ .vf-checklist-progress-bar {
429
+ height: 100%;
430
+ background: var(--yb-green);
431
+ transition: width 0.4s ease;
432
+ }
433
+ .vf-checklist-items {
434
+ max-height: calc(70vh - 56px);
435
+ overflow-y: auto;
436
+ scrollbar-width: thin;
437
+ scrollbar-color: rgba(100,116,139,0.3) transparent;
438
+ }
439
+ .vf-checklist-items::-webkit-scrollbar {
440
+ width: 4px;
441
+ }
442
+ .vf-checklist-items::-webkit-scrollbar-track {
443
+ background: transparent;
444
+ }
445
+ .vf-checklist-items::-webkit-scrollbar-thumb {
446
+ background: rgba(100,116,139,0.3);
447
+ border-radius: 2px;
448
+ }
449
+ .vf-checklist-row {
450
+ padding: 8px 14px;
451
+ border-bottom: 1px solid rgba(15, 23, 42, 0.6);
452
+ display: flex;
453
+ align-items: flex-start;
454
+ gap: 8px;
455
+ transition: background var(--yb-transition);
456
+ }
457
+ .vf-checklist-row:hover {
458
+ background: rgba(30, 41, 59, 0.3);
459
+ }
460
+ .vf-checklist-row:last-child {
461
+ border-bottom: none;
462
+ }
463
+ .vf-checklist-controls {
464
+ display: flex;
465
+ gap: 3px;
466
+ flex-shrink: 0;
467
+ margin-top: 1px;
468
+ }
469
+ .vf-check-btn {
470
+ width: 22px;
471
+ height: 22px;
472
+ border-radius: var(--yb-radius-xs);
473
+ border: 1px solid;
474
+ font-size: 11px;
475
+ cursor: pointer;
476
+ display: flex;
477
+ align-items: center;
478
+ justify-content: center;
479
+ padding: 0;
480
+ transition: all var(--yb-transition);
481
+ outline: none;
482
+ background: transparent;
483
+ }
484
+ .vf-check-btn:hover {
485
+ transform: scale(1.08);
486
+ }
487
+ .vf-check-btn-pass {
488
+ border-color: var(--yb-green);
489
+ color: var(--yb-green);
490
+ }
491
+ .vf-check-btn-pass.active {
492
+ background: var(--yb-green);
493
+ color: white;
494
+ }
495
+ .vf-check-btn-fail {
496
+ border-color: var(--yb-red);
497
+ color: var(--yb-red);
498
+ }
499
+ .vf-check-btn-fail.active {
500
+ background: var(--yb-red);
501
+ color: white;
502
+ }
503
+ .vf-checklist-text {
504
+ flex: 1;
505
+ line-height: 1.4;
506
+ font-size: 12px;
507
+ }
508
+ .vf-checklist-badges {
509
+ display: flex;
510
+ gap: 4px;
511
+ margin-bottom: 3px;
512
+ flex-wrap: wrap;
513
+ }
514
+ .vf-badge {
515
+ display: inline-block;
516
+ font-size: 9px;
517
+ padding: 1px 6px;
518
+ border-radius: 10px;
519
+ font-weight: 600;
520
+ letter-spacing: 0.02em;
521
+ }
522
+ .vf-badge-critical {
523
+ background: rgba(239, 68, 68, 0.12);
524
+ color: var(--yb-red);
525
+ }
526
+ .vf-badge-dim {
527
+ background: rgba(59, 130, 246, 0.1);
528
+ color: #60a5fa;
529
+ font-weight: 500;
530
+ }
531
+ .vf-checklist-step {
532
+ transition: color var(--yb-transition);
533
+ }
534
+ .vf-checklist-step.passed {
535
+ color: var(--yb-green);
536
+ text-decoration: line-through;
537
+ opacity: 0.55;
538
+ }
539
+ .vf-checklist-step.failed {
540
+ color: var(--yb-red);
541
+ }
542
+ .vf-checklist-expect {
543
+ font-size: 11px;
544
+ color: var(--yb-text-dimmer);
545
+ margin-top: 2px;
546
+ }
547
+ .vf-checklist-feedback {
548
+ font-size: 11px;
549
+ color: var(--yb-yellow);
550
+ margin-top: 3px;
551
+ }
552
+
553
+ /* ─── Verify Panel ─── */
554
+ .vf-verify-stack {
555
+ position: fixed;
556
+ bottom: 84px;
557
+ left: 16px;
558
+ width: 300px;
559
+ display: flex;
560
+ flex-direction: column;
561
+ gap: 8px;
562
+ pointer-events: none;
563
+ z-index: 2147483647;
564
+ font-family: var(--yb-font);
565
+ }
566
+ .vf-verify-card {
567
+ background: var(--yb-bg);
568
+ backdrop-filter: var(--yb-blur);
569
+ -webkit-backdrop-filter: var(--yb-blur);
570
+ border: 1px solid var(--yb-border);
571
+ border-radius: var(--yb-radius);
572
+ padding: 14px 16px;
573
+ pointer-events: auto;
574
+ color: var(--yb-text);
575
+ font-size: 13px;
576
+ border-left: 3px solid var(--yb-yellow);
577
+ animation: vf-slide-left 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
578
+ box-shadow: var(--yb-shadow-sm);
579
+ }
580
+ .vf-verify-title {
581
+ font-weight: 600;
582
+ color: var(--yb-yellow);
583
+ margin-bottom: 6px;
584
+ font-size: 11px;
585
+ text-transform: uppercase;
586
+ letter-spacing: 0.05em;
587
+ display: flex;
588
+ align-items: center;
589
+ gap: 6px;
590
+ }
591
+ .vf-verify-desc {
592
+ margin-bottom: 10px;
593
+ line-height: 1.4;
594
+ font-size: 12px;
595
+ }
596
+ .vf-verify-btns {
597
+ display: flex;
598
+ gap: 8px;
599
+ }
600
+ .vf-verify-btn {
601
+ flex: 1;
602
+ padding: 6px;
603
+ border: none;
604
+ border-radius: var(--yb-radius-xs);
605
+ font-size: 12px;
606
+ font-weight: 500;
607
+ cursor: pointer;
608
+ color: white;
609
+ font-family: var(--yb-font);
610
+ transition: all var(--yb-transition);
611
+ outline: none;
612
+ }
613
+ .vf-verify-btn:hover {
614
+ transform: translateY(-1px);
615
+ }
616
+ .vf-verify-btn:active {
617
+ transform: translateY(0);
618
+ }
619
+ .vf-verify-btn-pass {
620
+ background: var(--yb-green);
621
+ }
622
+ .vf-verify-btn-pass:hover {
623
+ background: #16a34a;
624
+ }
625
+ .vf-verify-btn-fail {
626
+ background: var(--yb-red);
627
+ }
628
+ .vf-verify-btn-fail:hover {
629
+ background: #dc2626;
630
+ }
631
+
632
+ /* ─── Hint Bubble ─── */
633
+ .vf-hint {
634
+ position: fixed;
635
+ bottom: 80px;
636
+ right: 16px;
637
+ background: var(--yb-bg);
638
+ backdrop-filter: var(--yb-blur);
639
+ -webkit-backdrop-filter: var(--yb-blur);
640
+ border: 1px solid var(--yb-border);
641
+ color: var(--yb-text);
642
+ padding: 10px 14px;
643
+ border-radius: var(--yb-radius-sm);
644
+ font-size: 12px;
645
+ pointer-events: auto;
646
+ box-shadow: var(--yb-shadow-sm);
647
+ font-family: var(--yb-font);
648
+ animation: vf-pop-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
649
+ max-width: 200px;
650
+ line-height: 1.5;
651
+ }
652
+ .vf-hint-arrow {
653
+ position: absolute;
654
+ bottom: -5px;
655
+ right: 20px;
656
+ width: 10px;
657
+ height: 10px;
658
+ background: var(--yb-bg-solid);
659
+ border-right: 1px solid var(--yb-border);
660
+ border-bottom: 1px solid var(--yb-border);
661
+ transform: rotate(45deg);
662
+ }
663
+
664
+ /* ─── Annotations Toolbar ─── */
665
+ .vf-toolbar {
666
+ position: absolute;
667
+ top: 12px;
668
+ left: 50%;
669
+ transform: translateX(-50%);
670
+ display: flex;
671
+ align-items: center;
672
+ gap: 4px;
673
+ background: var(--yb-bg);
674
+ backdrop-filter: var(--yb-blur);
675
+ -webkit-backdrop-filter: var(--yb-blur);
676
+ border: 1px solid var(--yb-border);
677
+ padding: 6px 10px;
678
+ border-radius: var(--yb-radius);
679
+ box-shadow: var(--yb-shadow);
680
+ z-index: 10;
681
+ font-family: var(--yb-font);
682
+ animation: vf-pop-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
683
+ }
684
+ .vf-tool-btn {
685
+ width: 32px;
686
+ height: 32px;
687
+ border: none;
688
+ border-radius: var(--yb-radius-xs);
689
+ background: transparent;
690
+ color: var(--yb-text-dim);
691
+ font-size: 15px;
692
+ cursor: pointer;
693
+ display: flex;
694
+ align-items: center;
695
+ justify-content: center;
696
+ transition: all var(--yb-transition);
697
+ padding: 0;
698
+ outline: none;
699
+ }
700
+ .vf-tool-btn:hover:not(.active) {
701
+ background: var(--yb-surface-hover);
702
+ color: var(--yb-text);
703
+ }
704
+ .vf-tool-btn.active {
705
+ background: var(--yb-accent);
706
+ color: white;
707
+ }
708
+ .vf-tool-btn svg {
709
+ width: 16px;
710
+ height: 16px;
711
+ }
712
+ .vf-color-btn {
713
+ width: 20px;
714
+ height: 20px;
715
+ border-radius: 50%;
716
+ border: 2px solid transparent;
717
+ cursor: pointer;
718
+ padding: 0;
719
+ transition: border-color var(--yb-transition), transform var(--yb-transition);
720
+ outline: none;
721
+ }
722
+ .vf-color-btn:hover {
723
+ transform: scale(1.15);
724
+ }
725
+ .vf-color-btn.active {
726
+ border-color: white;
727
+ box-shadow: 0 0 0 2px var(--yb-accent);
728
+ }
729
+ .vf-toolbar-sep {
730
+ width: 1px;
731
+ height: 22px;
732
+ background: var(--yb-border);
733
+ margin: 0 4px;
734
+ }
735
+ .vf-tool-action {
736
+ width: 32px;
737
+ height: 32px;
738
+ border: none;
739
+ border-radius: var(--yb-radius-xs);
740
+ font-size: 14px;
741
+ cursor: pointer;
742
+ display: flex;
743
+ align-items: center;
744
+ justify-content: center;
745
+ transition: all var(--yb-transition);
746
+ padding: 0;
747
+ color: white;
748
+ outline: none;
749
+ }
750
+ .vf-tool-action:hover {
751
+ transform: scale(1.08);
752
+ }
753
+ .vf-tool-action:active {
754
+ transform: scale(0.95);
755
+ }
756
+ .vf-tool-action svg {
757
+ width: 15px;
758
+ height: 15px;
759
+ }
760
+
761
+ /* ─── Animations ─── */
218
762
  @keyframes vf-slide-in {
219
- from { transform: translateX(100%); opacity: 0; }
763
+ from { transform: translateX(20px); opacity: 0; }
220
764
  to { transform: translateX(0); opacity: 1; }
221
765
  }
766
+ @keyframes vf-slide-left {
767
+ from { transform: translateX(-20px); opacity: 0; }
768
+ to { transform: translateX(0); opacity: 1; }
769
+ }
770
+ @keyframes vf-pop-in {
771
+ from { transform: scale(0.92); opacity: 0; }
772
+ to { transform: scale(1); opacity: 1; }
773
+ }
222
774
  `;