vibespot 1.0.6 → 1.0.8

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.
@@ -0,0 +1,977 @@
1
+ /* vibeSpot Documentation — Dark theme matching the app */
2
+
3
+ /* ================================================================
4
+ Reset & Base
5
+ ================================================================ */
6
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
7
+
8
+ :root {
9
+ --doc-bg: #0c0a09;
10
+ --doc-bg-panel: #141210;
11
+ --doc-bg-card: rgba(255,255,255,0.03);
12
+ --doc-bg-code: rgba(255,255,255,0.05);
13
+ --doc-bg-input: rgba(255,255,255,0.06);
14
+ --doc-text: #f0ece8;
15
+ --doc-text-dim: rgba(255,255,255,0.55);
16
+ --doc-text-muted: rgba(255,255,255,0.3);
17
+ --doc-accent: #e8613a;
18
+ --doc-accent-hover: #f2825f;
19
+ --doc-accent-dim: rgba(232,97,58,0.12);
20
+ --doc-accent-glow: rgba(232,97,58,0.25);
21
+ --doc-green: #4ade80;
22
+ --doc-yellow: #f59e0b;
23
+ --doc-red: #ef4444;
24
+ --doc-blue: #60a5fa;
25
+ --doc-border: rgba(255,255,255,0.08);
26
+ --doc-border-strong: rgba(255,255,255,0.14);
27
+ --doc-radius: 8px;
28
+ --doc-radius-lg: 12px;
29
+ --doc-font: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
30
+ --doc-font-display: "Space Grotesk", var(--doc-font);
31
+ --doc-font-mono: "SF Mono", SFMono-Regular, "Cascadia Code", Consolas, monospace;
32
+ --doc-sidebar-w: 280px;
33
+ --doc-max-w: 820px;
34
+ --doc-topbar-h: 56px;
35
+ }
36
+
37
+ html { scroll-behavior: smooth; scroll-padding-top: calc(var(--doc-topbar-h) + 24px); }
38
+
39
+ body {
40
+ font-family: var(--doc-font);
41
+ font-size: 15px;
42
+ line-height: 1.7;
43
+ color: var(--doc-text);
44
+ background: var(--doc-bg);
45
+ -webkit-font-smoothing: antialiased;
46
+ }
47
+
48
+ a { color: var(--doc-accent); text-decoration: none; transition: color 0.15s; }
49
+ a:hover { color: var(--doc-accent-hover); }
50
+
51
+ ::selection { background: var(--doc-accent-dim); color: var(--doc-text); }
52
+
53
+ /* ================================================================
54
+ Topbar
55
+ ================================================================ */
56
+ .doc-topbar {
57
+ position: fixed; top: 0; left: 0; right: 0; z-index: 100;
58
+ height: var(--doc-topbar-h);
59
+ display: flex; align-items: center; gap: 16px;
60
+ padding: 0 24px;
61
+ background: rgba(12,10,9,0.92);
62
+ backdrop-filter: blur(12px);
63
+ border-bottom: 1px solid var(--doc-border);
64
+ }
65
+ .doc-topbar__logo {
66
+ display: flex; align-items: center; gap: 10px;
67
+ font-family: var(--doc-font-display);
68
+ font-size: 18px; font-weight: 700; color: var(--doc-text);
69
+ text-decoration: none;
70
+ }
71
+ .doc-topbar__logo img { height: 28px; width: 28px; border-radius: 6px; }
72
+ .doc-topbar__logo span { color: var(--doc-text-dim); font-weight: 400; font-size: 14px; margin-left: 4px; }
73
+ .doc-topbar__search {
74
+ flex: 1; max-width: 400px; margin-left: auto;
75
+ position: relative;
76
+ }
77
+ .doc-topbar__search input {
78
+ width: 100%; height: 36px;
79
+ padding: 0 12px 0 36px;
80
+ background: var(--doc-bg-input);
81
+ border: 1px solid var(--doc-border);
82
+ border-radius: 8px;
83
+ color: var(--doc-text);
84
+ font-family: var(--doc-font);
85
+ font-size: 13px;
86
+ outline: none;
87
+ transition: border-color 0.15s, background 0.15s;
88
+ }
89
+ .doc-topbar__search input:focus {
90
+ border-color: var(--doc-accent);
91
+ background: rgba(255,255,255,0.08);
92
+ }
93
+ .doc-topbar__search input::placeholder { color: var(--doc-text-muted); }
94
+ .doc-topbar__search-icon {
95
+ position: absolute; left: 10px; top: 50%; transform: translateY(-50%);
96
+ color: var(--doc-text-muted); font-size: 14px; pointer-events: none;
97
+ }
98
+ .doc-topbar__shortcut {
99
+ position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
100
+ font-size: 11px; color: var(--doc-text-muted);
101
+ background: var(--doc-bg-card);
102
+ border: 1px solid var(--doc-border);
103
+ border-radius: 4px; padding: 1px 6px;
104
+ pointer-events: none;
105
+ }
106
+ .doc-topbar__back {
107
+ display: flex; align-items: center; gap: 6px;
108
+ color: var(--doc-text-dim); font-size: 13px;
109
+ padding: 6px 12px; border-radius: 6px;
110
+ background: var(--doc-bg-card);
111
+ border: 1px solid var(--doc-border);
112
+ text-decoration: none;
113
+ transition: all 0.15s;
114
+ }
115
+ .doc-topbar__back:hover { background: var(--doc-accent-dim); color: var(--doc-accent); border-color: var(--doc-accent-dim); }
116
+ .doc-menu-btn {
117
+ display: none;
118
+ background: none; border: none; color: var(--doc-text-dim);
119
+ font-size: 22px; cursor: pointer; padding: 4px;
120
+ }
121
+
122
+ /* ================================================================
123
+ Layout
124
+ ================================================================ */
125
+ .doc-layout {
126
+ display: flex;
127
+ padding-top: var(--doc-topbar-h);
128
+ min-height: 100vh;
129
+ }
130
+
131
+ /* ================================================================
132
+ Sidebar Navigation
133
+ ================================================================ */
134
+ .doc-sidebar {
135
+ position: fixed; top: var(--doc-topbar-h); left: 0; bottom: 0;
136
+ width: var(--doc-sidebar-w);
137
+ overflow-y: auto; overflow-x: hidden;
138
+ padding: 20px 16px 40px;
139
+ border-right: 1px solid var(--doc-border);
140
+ background: var(--doc-bg-panel);
141
+ z-index: 50;
142
+ scrollbar-width: thin;
143
+ scrollbar-color: rgba(255,255,255,0.1) transparent;
144
+ }
145
+ .doc-sidebar::-webkit-scrollbar { width: 4px; }
146
+ .doc-sidebar::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 4px; }
147
+
148
+ .doc-nav__section {
149
+ margin-bottom: 4px;
150
+ padding-bottom: 4px;
151
+ border-bottom: 1px solid var(--doc-border);
152
+ }
153
+ .doc-nav__section:last-child { border-bottom: none; }
154
+ .doc-nav__heading {
155
+ display: block; width: 100%;
156
+ font-size: 10px; font-weight: 700;
157
+ text-transform: uppercase;
158
+ letter-spacing: 0.1em;
159
+ color: var(--doc-text-muted);
160
+ padding: 10px 10px 3px;
161
+ cursor: default;
162
+ }
163
+ .doc-nav__link {
164
+ display: block;
165
+ padding: 4px 10px 4px 14px;
166
+ font-size: 13px;
167
+ color: var(--doc-text-dim);
168
+ border-radius: 6px;
169
+ transition: all 0.12s;
170
+ text-decoration: none;
171
+ line-height: 1.4;
172
+ }
173
+ .doc-nav__link:hover { color: var(--doc-text); background: var(--doc-bg-card); }
174
+ .doc-nav__link.active { color: var(--doc-accent); background: var(--doc-accent-dim); font-weight: 500; }
175
+ .doc-nav__link--sub { padding-left: 26px; font-size: 12px; color: var(--doc-text-muted); }
176
+
177
+ /* ================================================================
178
+ Main Content
179
+ ================================================================ */
180
+ .doc-main {
181
+ flex: 1;
182
+ margin-left: var(--doc-sidebar-w);
183
+ padding: 48px 56px 100px;
184
+ max-width: calc(var(--doc-max-w) + 112px);
185
+ }
186
+
187
+ /* ================================================================
188
+ Search Results Overlay
189
+ ================================================================ */
190
+ .doc-search-results {
191
+ display: none;
192
+ position: fixed;
193
+ top: var(--doc-topbar-h);
194
+ left: 50%;
195
+ transform: translateX(-50%);
196
+ width: 560px; max-height: 440px;
197
+ overflow-y: auto;
198
+ background: var(--doc-bg-panel);
199
+ border: 1px solid var(--doc-border-strong);
200
+ border-radius: var(--doc-radius-lg);
201
+ box-shadow: 0 16px 48px rgba(0,0,0,0.5);
202
+ z-index: 200;
203
+ padding: 8px;
204
+ }
205
+ .doc-search-results.visible { display: block; }
206
+ .doc-search-result {
207
+ display: block;
208
+ padding: 10px 14px;
209
+ border-radius: 6px;
210
+ text-decoration: none;
211
+ transition: background 0.1s;
212
+ }
213
+ .doc-search-result:hover, .doc-search-result.focused { background: var(--doc-accent-dim); }
214
+ .doc-search-result__title { font-size: 14px; font-weight: 600; color: var(--doc-text); }
215
+ .doc-search-result__section { font-size: 11px; color: var(--doc-text-muted); margin-left: 8px; }
216
+ .doc-search-result__snippet {
217
+ font-size: 12.5px; color: var(--doc-text-dim);
218
+ margin-top: 2px; line-height: 1.4;
219
+ }
220
+ .doc-search-result__snippet mark {
221
+ background: var(--doc-accent-dim); color: var(--doc-accent);
222
+ border-radius: 2px; padding: 0 2px;
223
+ }
224
+ .doc-search-empty {
225
+ padding: 24px; text-align: center;
226
+ color: var(--doc-text-muted); font-size: 13px;
227
+ }
228
+
229
+ /* ================================================================
230
+ Typography
231
+ ================================================================ */
232
+ .doc-section {
233
+ margin-bottom: 0;
234
+ padding: 48px 0 56px;
235
+ border-bottom: 1px solid var(--doc-border);
236
+ }
237
+ .doc-section:last-child { border-bottom: none; }
238
+ .doc-section > *:first-child { margin-top: 0; }
239
+ .doc-section + .doc-section { border-top: none; }
240
+
241
+ h1, h2, h3, h4 { font-family: var(--doc-font-display); color: var(--doc-text); line-height: 1.25; }
242
+
243
+ h1 {
244
+ font-size: clamp(1.8rem, 3vw, 2.4rem);
245
+ font-weight: 700;
246
+ margin: 0 0 12px;
247
+ letter-spacing: -0.02em;
248
+ }
249
+ h1 + .doc-subtitle {
250
+ font-size: 17px; color: var(--doc-text-dim);
251
+ margin-bottom: 40px; line-height: 1.6;
252
+ }
253
+
254
+ h2 {
255
+ font-size: 1.5rem; font-weight: 700;
256
+ margin: 0 0 16px;
257
+ padding-bottom: 12px;
258
+ border-bottom: 1px solid var(--doc-border);
259
+ letter-spacing: -0.01em;
260
+ }
261
+ h2 .doc-anchor { display: none; }
262
+ h2:hover .doc-anchor { display: inline; }
263
+
264
+ h3 {
265
+ font-size: 1.1rem; font-weight: 600;
266
+ margin: 40px 0 12px;
267
+ padding-top: 8px;
268
+ color: var(--doc-text);
269
+ }
270
+ /* First h3 after intro paragraph needs less top margin */
271
+ h2 + p + h3, h2 + .doc-callout + h3 { margin-top: 28px; }
272
+
273
+ h4 { font-size: 0.95rem; font-weight: 600; margin: 28px 0 8px; color: var(--doc-text-dim); }
274
+
275
+ p { margin: 0 0 16px; }
276
+ ul, ol { margin: 0 0 20px; padding-left: 24px; }
277
+ li { margin-bottom: 6px; line-height: 1.65; }
278
+ li > ul, li > ol { margin-top: 6px; margin-bottom: 6px; }
279
+
280
+ /* Section lead text — dimmer, acts as subtitle */
281
+ h2 + p { color: var(--doc-text-dim); font-size: 15.5px; margin-bottom: 24px; line-height: 1.65; }
282
+
283
+ strong { font-weight: 600; }
284
+ em { font-style: italic; }
285
+
286
+ hr {
287
+ border: none;
288
+ border-top: 1px solid var(--doc-border);
289
+ margin: 32px 0;
290
+ }
291
+
292
+ /* Anchor links */
293
+ .doc-anchor {
294
+ color: var(--doc-text-muted);
295
+ text-decoration: none;
296
+ margin-left: 6px;
297
+ font-weight: 400;
298
+ opacity: 0; transition: opacity 0.15s;
299
+ }
300
+ h2:hover .doc-anchor, h3:hover .doc-anchor { opacity: 1; }
301
+ .doc-anchor:hover { color: var(--doc-accent); }
302
+
303
+ /* ================================================================
304
+ Code
305
+ ================================================================ */
306
+ code {
307
+ font-family: var(--doc-font-mono);
308
+ font-size: 0.88em;
309
+ background: var(--doc-bg-code);
310
+ padding: 2px 6px;
311
+ border-radius: 4px;
312
+ color: var(--doc-accent);
313
+ }
314
+
315
+ pre {
316
+ position: relative;
317
+ margin: 12px 0 24px;
318
+ padding: 14px 18px;
319
+ background: var(--doc-bg-code);
320
+ border: 1px solid var(--doc-border);
321
+ border-radius: var(--doc-radius);
322
+ overflow-x: auto;
323
+ line-height: 1.6;
324
+ scrollbar-width: thin;
325
+ }
326
+ pre code {
327
+ background: none;
328
+ padding: 0;
329
+ font-size: 13px;
330
+ color: var(--doc-text-dim);
331
+ letter-spacing: -0.01em;
332
+ }
333
+ .doc-code-copy {
334
+ position: absolute; top: 8px; right: 8px;
335
+ background: var(--doc-bg-card);
336
+ border: 1px solid var(--doc-border);
337
+ border-radius: 4px;
338
+ color: var(--doc-text-muted);
339
+ font-size: 11px;
340
+ padding: 3px 8px;
341
+ cursor: pointer;
342
+ opacity: 0; transition: opacity 0.15s;
343
+ }
344
+ pre:hover .doc-code-copy { opacity: 1; }
345
+ .doc-code-copy:hover { background: var(--doc-accent-dim); color: var(--doc-accent); }
346
+
347
+ /* ================================================================
348
+ Callout Boxes
349
+ ================================================================ */
350
+ .doc-callout {
351
+ padding: 16px 20px;
352
+ border-radius: var(--doc-radius);
353
+ margin: 24px 0 28px;
354
+ border-left: 3px solid;
355
+ font-size: 13.5px;
356
+ line-height: 1.6;
357
+ }
358
+ .doc-callout p { margin-bottom: 8px; }
359
+ .doc-callout p:last-child { margin-bottom: 0; }
360
+ .doc-callout__label { font-weight: 600; margin-bottom: 6px; display: flex; align-items: center; gap: 6px; font-size: 13px; }
361
+
362
+ .doc-callout--tip { background: rgba(74,222,128,0.06); border-color: var(--doc-green); }
363
+ .doc-callout--tip .doc-callout__label { color: var(--doc-green); }
364
+
365
+ .doc-callout--warning { background: rgba(245,158,11,0.06); border-color: var(--doc-yellow); }
366
+ .doc-callout--warning .doc-callout__label { color: var(--doc-yellow); }
367
+
368
+ .doc-callout--info { background: rgba(96,165,250,0.06); border-color: var(--doc-blue); }
369
+ .doc-callout--info .doc-callout__label { color: var(--doc-blue); }
370
+
371
+ .doc-callout--danger { background: rgba(239,68,68,0.06); border-color: var(--doc-red); }
372
+ .doc-callout--danger .doc-callout__label { color: var(--doc-red); }
373
+
374
+ /* ================================================================
375
+ Tables
376
+ ================================================================ */
377
+ table {
378
+ width: 100%;
379
+ border-collapse: collapse;
380
+ margin: 12px 0 28px;
381
+ font-size: 13.5px;
382
+ border: 1px solid var(--doc-border);
383
+ border-radius: var(--doc-radius);
384
+ overflow: hidden;
385
+ }
386
+ thead { background: rgba(255,255,255,0.02); border-bottom: 1px solid var(--doc-border-strong); }
387
+ th {
388
+ text-align: left;
389
+ padding: 10px 14px;
390
+ font-weight: 600;
391
+ color: var(--doc-text-dim);
392
+ font-size: 11px;
393
+ text-transform: uppercase;
394
+ letter-spacing: 0.05em;
395
+ }
396
+ td {
397
+ padding: 9px 14px;
398
+ border-bottom: 1px solid var(--doc-border);
399
+ vertical-align: top;
400
+ line-height: 1.5;
401
+ }
402
+ tr:last-child td { border-bottom: none; }
403
+ tbody tr:nth-child(even) { background: rgba(255,255,255,0.015); }
404
+ tbody tr:hover { background: var(--doc-bg-card); }
405
+
406
+ /* ================================================================
407
+ Collapsible Sections
408
+ ================================================================ */
409
+ .doc-collapse { margin: 0 0 10px; }
410
+ .doc-collapse__trigger {
411
+ display: flex; align-items: center; gap: 8px;
412
+ width: 100%; text-align: left;
413
+ background: var(--doc-bg-card);
414
+ border: 1px solid var(--doc-border);
415
+ border-radius: var(--doc-radius);
416
+ padding: 10px 14px;
417
+ color: var(--doc-text);
418
+ font-family: var(--doc-font);
419
+ font-size: 14px; font-weight: 500;
420
+ cursor: pointer;
421
+ transition: all 0.15s;
422
+ }
423
+ .doc-collapse__trigger:hover { background: var(--doc-accent-dim); border-color: var(--doc-accent-dim); }
424
+ .doc-collapse__arrow {
425
+ font-size: 10px; color: var(--doc-text-muted);
426
+ transition: transform 0.2s;
427
+ }
428
+ .doc-collapse.open .doc-collapse__arrow { transform: rotate(90deg); }
429
+ .doc-collapse__content {
430
+ display: none;
431
+ padding: 12px 14px;
432
+ border: 1px solid var(--doc-border);
433
+ border-top: none;
434
+ border-radius: 0 0 var(--doc-radius) var(--doc-radius);
435
+ background: var(--doc-bg);
436
+ }
437
+ .doc-collapse.open .doc-collapse__content { display: block; }
438
+
439
+ /* ================================================================
440
+ Tabs
441
+ ================================================================ */
442
+ .doc-tabs { margin: 16px 0 28px; }
443
+ .doc-tabs__bar {
444
+ display: flex; gap: 0;
445
+ border-bottom: 1px solid var(--doc-border);
446
+ margin-bottom: 20px;
447
+ }
448
+ .doc-tabs__tab {
449
+ padding: 8px 16px;
450
+ font-size: 13px; font-weight: 500;
451
+ color: var(--doc-text-dim);
452
+ background: none; border: none;
453
+ border-bottom: 2px solid transparent;
454
+ cursor: pointer;
455
+ font-family: var(--doc-font);
456
+ transition: all 0.15s;
457
+ }
458
+ .doc-tabs__tab:hover { color: var(--doc-text); }
459
+ .doc-tabs__tab.active { color: var(--doc-accent); border-bottom-color: var(--doc-accent); }
460
+ .doc-tabs__panel { display: none; }
461
+ .doc-tabs__panel.active { display: block; }
462
+
463
+ /* ================================================================
464
+ Pipeline Diagram (interactive)
465
+ ================================================================ */
466
+ .doc-pipeline {
467
+ display: flex; align-items: center; gap: 0;
468
+ margin: 20px 0 32px;
469
+ overflow-x: auto;
470
+ padding: 8px 0;
471
+ }
472
+ .doc-pipeline__stage {
473
+ display: flex; flex-direction: column; align-items: center; gap: 6px;
474
+ padding: 14px 20px;
475
+ background: var(--doc-bg-card);
476
+ border: 1px solid var(--doc-border);
477
+ border-radius: var(--doc-radius-lg);
478
+ min-width: 140px;
479
+ cursor: default;
480
+ transition: all 0.2s;
481
+ position: relative;
482
+ }
483
+ .doc-pipeline__stage:hover {
484
+ border-color: var(--doc-accent);
485
+ background: var(--doc-accent-dim);
486
+ transform: translateY(-2px);
487
+ }
488
+ .doc-pipeline__stage-num {
489
+ width: 24px; height: 24px;
490
+ display: flex; align-items: center; justify-content: center;
491
+ background: var(--doc-accent);
492
+ color: #fff; font-size: 12px; font-weight: 700;
493
+ border-radius: 50%;
494
+ }
495
+ .doc-pipeline__stage-label {
496
+ font-size: 13px; font-weight: 600; color: var(--doc-text);
497
+ text-align: center;
498
+ }
499
+ .doc-pipeline__stage-desc {
500
+ font-size: 11px; color: var(--doc-text-muted);
501
+ text-align: center; line-height: 1.3;
502
+ max-width: 120px;
503
+ }
504
+ .doc-pipeline__arrow {
505
+ font-size: 18px; color: var(--doc-text-muted);
506
+ flex-shrink: 0; margin: 0 4px;
507
+ }
508
+ .doc-pipeline__tooltip {
509
+ display: none;
510
+ position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
511
+ margin-top: 8px;
512
+ background: var(--doc-bg-panel);
513
+ border: 1px solid var(--doc-border-strong);
514
+ border-radius: var(--doc-radius);
515
+ padding: 10px 14px;
516
+ font-size: 12px; color: var(--doc-text-dim);
517
+ width: 220px; z-index: 10;
518
+ box-shadow: 0 8px 24px rgba(0,0,0,0.4);
519
+ line-height: 1.5;
520
+ }
521
+ .doc-pipeline__stage:hover .doc-pipeline__tooltip { display: block; }
522
+
523
+ /* ================================================================
524
+ Keyboard Shortcut Badge
525
+ ================================================================ */
526
+ kbd {
527
+ display: inline-block;
528
+ padding: 2px 7px;
529
+ font-family: var(--doc-font-mono);
530
+ font-size: 12px;
531
+ color: var(--doc-text-dim);
532
+ background: var(--doc-bg-code);
533
+ border: 1px solid var(--doc-border);
534
+ border-radius: 4px;
535
+ line-height: 1.4;
536
+ }
537
+
538
+ /* ================================================================
539
+ Step List (tutorial-style)
540
+ ================================================================ */
541
+ .doc-steps { counter-reset: step; list-style: none; padding-left: 0; margin: 16px 0 28px; }
542
+ .doc-steps li {
543
+ counter-increment: step;
544
+ position: relative;
545
+ padding: 16px 0 18px 56px;
546
+ border-bottom: 1px solid var(--doc-border);
547
+ line-height: 1.65;
548
+ }
549
+ .doc-steps li:last-child { border-bottom: none; padding-bottom: 0; }
550
+ .doc-steps li::before {
551
+ content: counter(step);
552
+ position: absolute; left: 0; top: 14px;
553
+ width: 30px; height: 30px;
554
+ display: flex; align-items: center; justify-content: center;
555
+ background: var(--doc-accent);
556
+ color: #fff; font-size: 13px; font-weight: 700;
557
+ border-radius: 50%;
558
+ box-shadow: 0 2px 8px rgba(232,97,58,0.25);
559
+ }
560
+
561
+ /* ================================================================
562
+ Feature Grid
563
+ ================================================================ */
564
+ .doc-features {
565
+ display: grid;
566
+ grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
567
+ gap: 12px;
568
+ margin: 16px 0 28px;
569
+ }
570
+ .doc-feature {
571
+ padding: 16px 18px;
572
+ background: var(--doc-bg-card);
573
+ border: 1px solid var(--doc-border);
574
+ border-radius: var(--doc-radius-lg);
575
+ transition: border-color 0.15s, transform 0.15s;
576
+ }
577
+ .doc-feature:hover { border-color: var(--doc-accent-dim); transform: translateY(-1px); }
578
+ .doc-feature__icon { font-size: 22px; margin-bottom: 8px; }
579
+ .doc-feature__title { font-size: 14px; font-weight: 600; margin-bottom: 4px; }
580
+ .doc-feature__desc { font-size: 12.5px; color: var(--doc-text-dim); line-height: 1.55; }
581
+
582
+ /* ================================================================
583
+ UI Mockups — interactive illustrations of the vibespot interface
584
+ ================================================================ */
585
+ .doc-mockup {
586
+ margin: 24px 0 32px;
587
+ border: 1px solid var(--doc-border-strong);
588
+ border-radius: var(--doc-radius-lg);
589
+ overflow: hidden;
590
+ background: var(--doc-bg);
591
+ font-size: 12px;
592
+ line-height: 1.4;
593
+ user-select: none;
594
+ box-shadow: 0 4px 24px rgba(0,0,0,0.2);
595
+ }
596
+ .doc-mockup * { box-sizing: border-box; }
597
+
598
+ /* Shared bar styles */
599
+ .mock-topbar {
600
+ display: flex; align-items: center; gap: 10px;
601
+ padding: 0 14px; height: 40px;
602
+ background: rgba(255,255,255,0.03);
603
+ border-bottom: 1px solid var(--doc-border);
604
+ }
605
+ .mock-topbar__back { color: var(--doc-text-muted); font-size: 14px; }
606
+ .mock-topbar__title { font-weight: 600; color: var(--doc-text); font-size: 13px; }
607
+ .mock-topbar__pill {
608
+ font-size: 10px; padding: 2px 8px;
609
+ background: var(--doc-accent-dim); color: var(--doc-accent);
610
+ border-radius: 10px; font-weight: 500;
611
+ }
612
+ .mock-topbar__spacer { flex: 1; }
613
+ .mock-topbar__btn {
614
+ padding: 4px 10px; font-size: 11px;
615
+ background: var(--doc-bg-card); border: 1px solid var(--doc-border);
616
+ border-radius: 5px; color: var(--doc-text-dim);
617
+ }
618
+ .mock-topbar__btn--accent {
619
+ background: var(--doc-accent); color: #fff; border-color: var(--doc-accent);
620
+ font-weight: 600;
621
+ }
622
+ .mock-topbar__responsive {
623
+ display: flex; gap: 0; border: 1px solid var(--doc-border); border-radius: 5px; overflow: hidden;
624
+ }
625
+ .mock-topbar__responsive span {
626
+ padding: 3px 8px; font-size: 10px; color: var(--doc-text-muted);
627
+ border-right: 1px solid var(--doc-border);
628
+ }
629
+ .mock-topbar__responsive span:last-child { border-right: none; }
630
+ .mock-topbar__responsive span.active { background: var(--doc-accent-dim); color: var(--doc-accent); }
631
+
632
+ /* Status bar */
633
+ .mock-statusbar {
634
+ display: flex; align-items: center; gap: 8px;
635
+ padding: 0 14px; height: 24px;
636
+ background: rgba(255,255,255,0.02);
637
+ border-top: 1px solid var(--doc-border);
638
+ font-size: 10px; color: var(--doc-text-muted);
639
+ }
640
+ .mock-statusbar__dot {
641
+ width: 6px; height: 6px; border-radius: 50%;
642
+ background: var(--doc-green); display: inline-block;
643
+ }
644
+ .mock-statusbar__spacer { flex: 1; }
645
+
646
+ /* --- Editor Layout Mockup --- */
647
+ .mock-editor {
648
+ display: flex; height: 340px;
649
+ }
650
+ .mock-editor__left {
651
+ width: 38%; min-width: 200px;
652
+ display: flex; flex-direction: column;
653
+ }
654
+ .mock-editor__resize {
655
+ width: 4px; cursor: col-resize;
656
+ background: transparent;
657
+ transition: background 0.15s;
658
+ flex-shrink: 0;
659
+ }
660
+ .mock-editor__resize:hover { background: var(--doc-accent); }
661
+ .mock-editor__right {
662
+ flex: 1; display: flex; flex-direction: column;
663
+ }
664
+
665
+ /* Module list */
666
+ .mock-modules {
667
+ padding: 8px;
668
+ border-bottom: 1px solid var(--doc-border);
669
+ }
670
+ .mock-modules__header {
671
+ display: flex; align-items: center; justify-content: space-between;
672
+ padding: 4px 6px; margin-bottom: 4px;
673
+ font-size: 11px; font-weight: 600; color: var(--doc-text-dim);
674
+ }
675
+ .mock-modules__count {
676
+ font-size: 10px; background: var(--doc-bg-card); border: 1px solid var(--doc-border);
677
+ border-radius: 10px; padding: 0 6px; color: var(--doc-text-muted);
678
+ }
679
+ .mock-module-item {
680
+ display: flex; align-items: center; gap: 6px;
681
+ padding: 5px 8px; border-radius: 5px;
682
+ font-size: 11px; color: var(--doc-text-dim);
683
+ transition: background 0.1s;
684
+ }
685
+ .mock-module-item:hover { background: var(--doc-bg-card); }
686
+ .mock-module-item__grip { color: var(--doc-text-muted); font-size: 10px; cursor: grab; }
687
+ .mock-module-item__name { flex: 1; }
688
+ .mock-module-item__actions { display: flex; gap: 4px; opacity: 0; transition: opacity 0.1s; }
689
+ .mock-module-item:hover .mock-module-item__actions { opacity: 1; }
690
+ .mock-module-item__action { color: var(--doc-text-muted); font-size: 10px; cursor: pointer; }
691
+ .mock-module-item__action:hover { color: var(--doc-accent); }
692
+
693
+ /* Chat area */
694
+ .mock-chat {
695
+ flex: 1; display: flex; flex-direction: column;
696
+ min-height: 0;
697
+ }
698
+ .mock-chat__messages {
699
+ flex: 1; overflow-y: auto; padding: 10px;
700
+ display: flex; flex-direction: column; gap: 8px;
701
+ }
702
+ .mock-chat__msg {
703
+ display: flex; gap: 6px; max-width: 90%;
704
+ }
705
+ .mock-chat__msg--user { align-self: flex-end; flex-direction: row-reverse; }
706
+ .mock-chat__avatar {
707
+ width: 22px; height: 22px; border-radius: 50%; flex-shrink: 0;
708
+ display: flex; align-items: center; justify-content: center;
709
+ font-size: 9px; font-weight: 700;
710
+ }
711
+ .mock-chat__msg--user .mock-chat__avatar { background: var(--doc-accent); color: #fff; }
712
+ .mock-chat__msg--ai .mock-chat__avatar { background: var(--doc-bg-card); color: var(--doc-text-dim); border: 1px solid var(--doc-border); }
713
+ .mock-chat__bubble {
714
+ padding: 6px 10px; border-radius: 8px;
715
+ font-size: 11px; line-height: 1.5;
716
+ }
717
+ .mock-chat__msg--user .mock-chat__bubble { background: var(--doc-accent); color: #fff; }
718
+ .mock-chat__msg--ai .mock-chat__bubble { background: var(--doc-bg-card); color: var(--doc-text-dim); border: 1px solid var(--doc-border); }
719
+
720
+ .mock-chat__pipeline {
721
+ padding: 6px 10px; border-radius: 8px;
722
+ background: var(--doc-bg-card); border: 1px solid var(--doc-border);
723
+ font-size: 10px; line-height: 1.6;
724
+ }
725
+ .mock-chat__step {
726
+ display: flex; align-items: center; gap: 5px;
727
+ color: var(--doc-green);
728
+ }
729
+ .mock-chat__step--active { color: var(--doc-accent); }
730
+ .mock-chat__module-cards { display: flex; gap: 4px; margin-top: 4px; flex-wrap: wrap; }
731
+ .mock-chat__module-card {
732
+ padding: 2px 8px; border-radius: 4px; font-size: 10px;
733
+ border: 1px solid var(--doc-border);
734
+ }
735
+ .mock-chat__module-card--done { border-color: var(--doc-green); color: var(--doc-green); }
736
+ .mock-chat__module-card--active { border-color: var(--doc-accent); color: var(--doc-accent); animation: mock-pulse 1.5s infinite; }
737
+ @keyframes mock-pulse { 0%,100%{ opacity:1 } 50%{ opacity:.5 } }
738
+
739
+ .mock-chat__input {
740
+ display: flex; align-items: center; gap: 6px;
741
+ padding: 8px 10px; border-top: 1px solid var(--doc-border);
742
+ }
743
+ .mock-chat__input-field {
744
+ flex: 1; height: 30px; padding: 0 10px;
745
+ background: var(--doc-bg-input); border: 1px solid var(--doc-border);
746
+ border-radius: 6px; color: var(--doc-text-muted); font-size: 11px;
747
+ font-family: var(--doc-font);
748
+ }
749
+ .mock-chat__input-btn {
750
+ width: 28px; height: 28px; border-radius: 50%;
751
+ background: var(--doc-accent); border: none;
752
+ color: #fff; font-size: 12px; cursor: pointer;
753
+ display: flex; align-items: center; justify-content: center;
754
+ }
755
+
756
+ /* Preview area */
757
+ .mock-preview {
758
+ flex: 1; display: flex; flex-direction: column;
759
+ }
760
+ .mock-preview__tabs {
761
+ display: flex; gap: 0; padding: 0 12px;
762
+ border-bottom: 1px solid var(--doc-border);
763
+ }
764
+ .mock-preview__tab {
765
+ padding: 8px 14px; font-size: 11px; font-weight: 500;
766
+ color: var(--doc-text-muted); border-bottom: 2px solid transparent;
767
+ }
768
+ .mock-preview__tab.active { color: var(--doc-text); border-bottom-color: var(--doc-accent); }
769
+ .mock-preview__chrome {
770
+ display: flex; align-items: center; gap: 6px;
771
+ padding: 6px 12px;
772
+ background: rgba(255,255,255,0.02);
773
+ border-bottom: 1px solid var(--doc-border);
774
+ }
775
+ .mock-preview__dots { display: flex; gap: 4px; }
776
+ .mock-preview__dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,0.1); }
777
+ .mock-preview__url {
778
+ flex: 1; height: 20px; padding: 0 8px;
779
+ background: var(--doc-bg-input); border-radius: 4px;
780
+ font-size: 10px; color: var(--doc-text-muted);
781
+ display: flex; align-items: center;
782
+ }
783
+ .mock-preview__body {
784
+ flex: 1; padding: 12px;
785
+ display: flex; flex-direction: column; gap: 8px;
786
+ overflow: hidden;
787
+ }
788
+ .mock-preview__section {
789
+ border-radius: 6px; padding: 10px 14px;
790
+ }
791
+ .mock-preview__hero {
792
+ background: linear-gradient(135deg, rgba(232,97,58,0.15), rgba(232,97,58,0.05));
793
+ border: 1px solid rgba(232,97,58,0.15);
794
+ text-align: center;
795
+ }
796
+ .mock-preview__hero-title { font-family: var(--doc-font-display); font-size: 16px; font-weight: 700; color: var(--doc-text); margin-bottom: 4px; }
797
+ .mock-preview__hero-sub { font-size: 10px; color: var(--doc-text-dim); margin-bottom: 6px; }
798
+ .mock-preview__hero-btn {
799
+ display: inline-block; padding: 3px 12px;
800
+ background: var(--doc-accent); color: #fff; border-radius: 4px;
801
+ font-size: 10px; font-weight: 600;
802
+ }
803
+ .mock-preview__cards {
804
+ display: flex; gap: 6px;
805
+ }
806
+ .mock-preview__card {
807
+ flex: 1; padding: 8px; border-radius: 5px;
808
+ background: var(--doc-bg-card); border: 1px solid var(--doc-border);
809
+ }
810
+ .mock-preview__card-title { font-size: 10px; font-weight: 600; color: var(--doc-text); margin-bottom: 2px; }
811
+ .mock-preview__card-text { font-size: 9px; color: var(--doc-text-muted); }
812
+
813
+ /* --- Settings Mockup --- */
814
+ .mock-settings {
815
+ padding: 16px; max-height: 320px; overflow-y: auto;
816
+ }
817
+ .mock-settings__tabs {
818
+ display: flex; gap: 0; margin-bottom: 14px;
819
+ border-bottom: 1px solid var(--doc-border);
820
+ }
821
+ .mock-settings__tab {
822
+ padding: 6px 14px; font-size: 11px; font-weight: 500;
823
+ color: var(--doc-text-muted); border-bottom: 2px solid transparent;
824
+ cursor: pointer;
825
+ }
826
+ .mock-settings__tab.active { color: var(--doc-accent); border-bottom-color: var(--doc-accent); }
827
+ .mock-settings__section-title { font-size: 12px; font-weight: 600; color: var(--doc-text-dim); margin-bottom: 8px; }
828
+ .mock-settings__engines {
829
+ display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px;
830
+ }
831
+ .mock-settings__engine-btn {
832
+ padding: 5px 12px; font-size: 10px;
833
+ background: var(--doc-bg-card); border: 1px solid var(--doc-border);
834
+ border-radius: 6px; color: var(--doc-text-dim);
835
+ }
836
+ .mock-settings__engine-btn.active { border-color: var(--doc-accent); color: var(--doc-accent); background: var(--doc-accent-dim); }
837
+ .mock-settings__engine-btn.disabled { opacity: 0.35; }
838
+ .mock-settings__row {
839
+ display: flex; align-items: center; gap: 8px;
840
+ margin-bottom: 10px;
841
+ }
842
+ .mock-settings__label { font-size: 11px; color: var(--doc-text-dim); min-width: 70px; }
843
+ .mock-settings__input {
844
+ flex: 1; height: 28px; padding: 0 10px;
845
+ background: var(--doc-bg-input); border: 1px solid var(--doc-border);
846
+ border-radius: 5px; font-size: 11px; color: var(--doc-text-muted);
847
+ }
848
+ .mock-settings__toggle {
849
+ width: 32px; height: 18px; border-radius: 9px;
850
+ background: var(--doc-bg-card); border: 1px solid var(--doc-border);
851
+ position: relative; cursor: pointer;
852
+ }
853
+ .mock-settings__toggle.active { background: var(--doc-accent); border-color: var(--doc-accent); }
854
+ .mock-settings__toggle::after {
855
+ content: ""; position: absolute; top: 2px; left: 2px;
856
+ width: 12px; height: 12px; border-radius: 50%;
857
+ background: #fff; transition: left 0.15s;
858
+ }
859
+ .mock-settings__toggle.active::after { left: 16px; }
860
+ .mock-settings__key-row {
861
+ display: flex; align-items: center; gap: 6px;
862
+ padding: 6px 0; border-bottom: 1px solid var(--doc-border);
863
+ }
864
+ .mock-settings__key-status {
865
+ font-size: 10px; font-weight: 600;
866
+ }
867
+ .mock-settings__key-status--set { color: var(--doc-green); }
868
+ .mock-settings__key-status--missing { color: var(--doc-text-muted); }
869
+
870
+ /* --- Upload Flow Mockup --- */
871
+ .mock-upload {
872
+ padding: 16px; min-height: 160px;
873
+ }
874
+ .mock-upload__progress {
875
+ margin-bottom: 10px;
876
+ }
877
+ .mock-upload__bar-bg {
878
+ height: 6px; background: var(--doc-bg-card); border-radius: 3px;
879
+ overflow: hidden;
880
+ }
881
+ .mock-upload__bar-fill {
882
+ height: 100%; width: 72%;
883
+ background: var(--doc-accent);
884
+ border-radius: 3px;
885
+ transition: width 0.3s;
886
+ }
887
+ .mock-upload__status {
888
+ font-size: 11px; color: var(--doc-text-dim); margin-top: 6px;
889
+ display: flex; align-items: center; gap: 6px;
890
+ }
891
+ .mock-upload__log {
892
+ background: var(--doc-bg-code); border: 1px solid var(--doc-border);
893
+ border-radius: 6px; padding: 10px 12px;
894
+ font-family: var(--doc-font-mono); font-size: 10px;
895
+ color: var(--doc-text-muted); line-height: 1.6;
896
+ max-height: 80px; overflow-y: auto;
897
+ }
898
+ .mock-upload__log .green { color: var(--doc-green); }
899
+ .mock-upload__log .accent { color: var(--doc-accent); }
900
+
901
+ /* --- Setup Screen Mockup --- */
902
+ .mock-setup {
903
+ display: flex; height: 260px;
904
+ }
905
+ .mock-setup__rail {
906
+ width: 48px; background: rgba(255,255,255,0.02);
907
+ border-right: 1px solid var(--doc-border);
908
+ display: flex; flex-direction: column; align-items: center; gap: 8px;
909
+ padding: 12px 0;
910
+ }
911
+ .mock-setup__rail-dot {
912
+ width: 28px; height: 28px; border-radius: 6px;
913
+ background: var(--doc-accent-dim); color: var(--doc-accent);
914
+ display: flex; align-items: center; justify-content: center;
915
+ font-size: 10px; font-weight: 700;
916
+ }
917
+ .mock-setup__rail-dot--active { background: var(--doc-accent); color: #fff; }
918
+ .mock-setup__main {
919
+ flex: 1; display: flex; flex-direction: column;
920
+ align-items: center; justify-content: center; gap: 12px;
921
+ padding: 20px;
922
+ }
923
+ .mock-setup__logo {
924
+ font-family: var(--doc-font-display);
925
+ font-size: 24px; font-weight: 700; color: var(--doc-text);
926
+ }
927
+ .mock-setup__logo span { color: var(--doc-accent); }
928
+ .mock-setup__subtitle { font-size: 12px; color: var(--doc-text-muted); margin-top: -8px; }
929
+ .mock-setup__actions {
930
+ display: flex; gap: 8px; flex-wrap: wrap; justify-content: center;
931
+ }
932
+ .mock-setup__action {
933
+ padding: 10px 16px; border-radius: 8px;
934
+ background: var(--doc-bg-card); border: 1px solid var(--doc-border);
935
+ text-align: center; min-width: 120px;
936
+ transition: all 0.15s; cursor: default;
937
+ }
938
+ .mock-setup__action:hover { border-color: var(--doc-accent); background: var(--doc-accent-dim); }
939
+ .mock-setup__action-icon { font-size: 18px; margin-bottom: 4px; }
940
+ .mock-setup__action-label { font-size: 12px; font-weight: 600; color: var(--doc-text); }
941
+ .mock-setup__action-desc { font-size: 10px; color: var(--doc-text-muted); }
942
+
943
+ /* Annotation labels on mockups */
944
+ .mock-label {
945
+ position: absolute; font-size: 9px; font-weight: 600;
946
+ color: var(--doc-accent); background: var(--doc-accent-dim);
947
+ padding: 1px 6px; border-radius: 3px;
948
+ pointer-events: none; white-space: nowrap;
949
+ z-index: 5;
950
+ }
951
+
952
+ /* ================================================================
953
+ Responsive
954
+ ================================================================ */
955
+ @media (max-width: 900px) {
956
+ .doc-sidebar {
957
+ transform: translateX(-100%);
958
+ transition: transform 0.25s ease;
959
+ box-shadow: none;
960
+ }
961
+ .doc-sidebar.open {
962
+ transform: translateX(0);
963
+ box-shadow: 4px 0 24px rgba(0,0,0,0.4);
964
+ }
965
+ .doc-main { margin-left: 0; padding: 24px 20px 60px; }
966
+ .doc-menu-btn { display: block; }
967
+ .doc-topbar__search { max-width: 200px; }
968
+ .doc-search-results { width: calc(100vw - 32px); left: 16px; transform: none; }
969
+ .doc-pipeline { flex-wrap: wrap; }
970
+ }
971
+
972
+ @media (max-width: 560px) {
973
+ .doc-topbar__back { display: none; }
974
+ .doc-topbar__shortcut { display: none; }
975
+ h1 { font-size: 1.5rem; }
976
+ h2 { font-size: 1.2rem; }
977
+ }