claude-code-workflow 6.3.11 → 6.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.claude/CLAUDE.md +33 -33
  2. package/.claude/agents/issue-plan-agent.md +77 -5
  3. package/.claude/agents/issue-queue-agent.md +122 -18
  4. package/.claude/commands/issue/execute.md +53 -40
  5. package/.claude/commands/issue/new.md +113 -11
  6. package/.claude/commands/issue/plan.md +112 -37
  7. package/.claude/commands/issue/queue.md +28 -18
  8. package/.claude/skills/software-manual/scripts/assemble_docsify.py +584 -0
  9. package/.claude/skills/software-manual/templates/css/docsify-base.css +984 -0
  10. package/.claude/skills/software-manual/templates/docsify-shell.html +466 -0
  11. package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +141 -168
  12. package/.claude/workflows/cli-templates/schemas/solution-schema.json +3 -2
  13. package/.codex/prompts/issue-execute.md +3 -3
  14. package/.codex/prompts/issue-queue.md +3 -3
  15. package/ccw/dist/commands/issue.d.ts.map +1 -1
  16. package/ccw/dist/commands/issue.js +2 -1
  17. package/ccw/dist/commands/issue.js.map +1 -1
  18. package/ccw/src/commands/issue.ts +2 -1
  19. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +580 -467
  20. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +532 -461
  21. package/ccw/src/templates/dashboard-js/components/notifications.js +774 -774
  22. package/ccw/src/templates/dashboard-js/i18n.js +4 -0
  23. package/ccw/src/templates/dashboard.html +10 -0
  24. package/ccw/src/tools/claude-cli-tools.ts +388 -388
  25. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  26. package/codex-lens/src/codexlens/config.py +19 -3
  27. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  28. package/codex-lens/src/codexlens/search/ranking.py +15 -4
  29. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  30. package/codex-lens/src/codexlens/semantic/vector_store.py +57 -47
  31. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-313.pyc +0 -0
  32. package/codex-lens/src/codexlens/storage/registry.py +114 -101
  33. package/package.json +83 -83
@@ -0,0 +1,984 @@
1
+ /* ========================================
2
+ Docsify-Style Documentation CSS
3
+ Software Manual Skill - Modern Theme
4
+ ======================================== */
5
+
6
+ /* ========== CSS Variables ========== */
7
+ :root {
8
+ /* Light Theme - Teal Accent */
9
+ --bg-color: #ffffff;
10
+ --bg-secondary: #f8fafc;
11
+ --bg-tertiary: #f1f5f9;
12
+ --text-color: #1e293b;
13
+ --text-secondary: #64748b;
14
+ --text-muted: #94a3b8;
15
+ --border-color: #e2e8f0;
16
+ --accent-color: #14b8a6;
17
+ --accent-hover: #0d9488;
18
+ --accent-light: rgba(20, 184, 166, 0.1);
19
+ --link-color: #14b8a6;
20
+ --sidebar-bg: #ffffff;
21
+ --sidebar-width: 280px;
22
+ --code-bg: #1e293b;
23
+ --code-color: #e2e8f0;
24
+ --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
25
+ --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);
26
+ --shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1);
27
+
28
+ /* Callout Colors */
29
+ --tip-bg: rgba(20, 184, 166, 0.08);
30
+ --tip-border: #14b8a6;
31
+ --warning-bg: rgba(245, 158, 11, 0.08);
32
+ --warning-border: #f59e0b;
33
+ --danger-bg: rgba(239, 68, 68, 0.08);
34
+ --danger-border: #ef4444;
35
+ --info-bg: rgba(59, 130, 246, 0.08);
36
+ --info-border: #3b82f6;
37
+
38
+ /* Typography */
39
+ --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Noto Sans SC', sans-serif;
40
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'SF Mono', Monaco, Consolas, monospace;
41
+ --font-size-xs: 0.75rem;
42
+ --font-size-sm: 0.875rem;
43
+ --font-size-base: 1rem;
44
+ --font-size-lg: 1.125rem;
45
+ --line-height: 1.75;
46
+
47
+ /* Spacing */
48
+ --space-xs: 0.25rem;
49
+ --space-sm: 0.5rem;
50
+ --space-md: 1rem;
51
+ --space-lg: 1.5rem;
52
+ --space-xl: 2rem;
53
+ --space-2xl: 3rem;
54
+
55
+ /* Border Radius */
56
+ --radius-sm: 4px;
57
+ --radius-md: 8px;
58
+ --radius-lg: 12px;
59
+
60
+ /* Transitions */
61
+ --transition: 0.2s ease;
62
+ --transition-slow: 0.3s ease;
63
+ }
64
+
65
+ /* Dark Theme */
66
+ [data-theme="dark"] {
67
+ --bg-color: #0f172a;
68
+ --bg-secondary: #1e293b;
69
+ --bg-tertiary: #334155;
70
+ --text-color: #f1f5f9;
71
+ --text-secondary: #94a3b8;
72
+ --text-muted: #64748b;
73
+ --border-color: #334155;
74
+ --sidebar-bg: #1e293b;
75
+ --code-bg: #0f172a;
76
+ --code-color: #e2e8f0;
77
+ --tip-bg: rgba(20, 184, 166, 0.15);
78
+ --warning-bg: rgba(245, 158, 11, 0.15);
79
+ --danger-bg: rgba(239, 68, 68, 0.15);
80
+ --info-bg: rgba(59, 130, 246, 0.15);
81
+ }
82
+
83
+ /* ========== Reset ========== */
84
+ *, *::before, *::after {
85
+ box-sizing: border-box;
86
+ margin: 0;
87
+ padding: 0;
88
+ }
89
+
90
+ html, body {
91
+ height: 100%;
92
+ }
93
+
94
+ body {
95
+ font-family: var(--font-family);
96
+ font-size: var(--font-size-base);
97
+ line-height: var(--line-height);
98
+ color: var(--text-color);
99
+ background-color: var(--bg-color);
100
+ -webkit-font-smoothing: antialiased;
101
+ }
102
+
103
+ /* ========== Layout ========== */
104
+ .docsify-container {
105
+ display: flex;
106
+ min-height: 100vh;
107
+ }
108
+
109
+ /* ========== Sidebar ========== */
110
+ .sidebar {
111
+ position: fixed;
112
+ top: 0;
113
+ left: 0;
114
+ width: var(--sidebar-width);
115
+ height: 100vh;
116
+ background: var(--sidebar-bg);
117
+ border-right: 1px solid var(--border-color);
118
+ display: flex;
119
+ flex-direction: column;
120
+ z-index: 100;
121
+ transition: transform var(--transition);
122
+ }
123
+
124
+ .sidebar-header {
125
+ padding: var(--space-lg);
126
+ border-bottom: 1px solid var(--border-color);
127
+ }
128
+
129
+ .logo {
130
+ display: flex;
131
+ align-items: center;
132
+ gap: var(--space-sm);
133
+ }
134
+
135
+ .logo-icon {
136
+ width: 36px;
137
+ height: 36px;
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ background: linear-gradient(135deg, var(--accent-color), #3eaf7c);
142
+ border-radius: 8px;
143
+ color: #fff;
144
+ font-weight: bold;
145
+ font-size: 1.25rem;
146
+ }
147
+
148
+ .logo-text h1 {
149
+ font-size: var(--font-size-base);
150
+ font-weight: 600;
151
+ color: var(--text-color);
152
+ margin: 0;
153
+ line-height: 1.2;
154
+ }
155
+
156
+ .logo-text .version {
157
+ font-size: var(--font-size-sm);
158
+ color: var(--text-muted);
159
+ }
160
+
161
+ /* ========== Search ========== */
162
+ .sidebar-search {
163
+ padding: var(--space-md);
164
+ position: relative;
165
+ }
166
+
167
+ .search-box {
168
+ position: relative;
169
+ display: flex;
170
+ align-items: center;
171
+ }
172
+
173
+ .search-icon {
174
+ position: absolute;
175
+ left: 10px;
176
+ color: var(--text-muted);
177
+ pointer-events: none;
178
+ }
179
+
180
+ .search-box input {
181
+ width: 100%;
182
+ padding: 10px 60px 10px 36px;
183
+ border: 1px solid var(--border-color);
184
+ border-radius: var(--radius-md);
185
+ font-size: var(--font-size-sm);
186
+ background: var(--bg-secondary);
187
+ color: var(--text-color);
188
+ transition: all var(--transition);
189
+ }
190
+
191
+ .search-box input:focus {
192
+ outline: none;
193
+ border-color: var(--accent-color);
194
+ box-shadow: 0 0 0 3px var(--accent-light);
195
+ background: var(--bg-color);
196
+ }
197
+
198
+ .search-box input::placeholder {
199
+ color: var(--text-muted);
200
+ }
201
+
202
+ /* Keyboard shortcut hint */
203
+ .search-box::after {
204
+ content: 'Ctrl K';
205
+ position: absolute;
206
+ right: 10px;
207
+ top: 50%;
208
+ transform: translateY(-50%);
209
+ font-size: var(--font-size-xs);
210
+ color: var(--text-muted);
211
+ background: var(--bg-color);
212
+ padding: 2px 6px;
213
+ border-radius: var(--radius-sm);
214
+ border: 1px solid var(--border-color);
215
+ font-family: var(--font-mono);
216
+ pointer-events: none;
217
+ }
218
+
219
+ .search-results {
220
+ position: absolute;
221
+ top: 100%;
222
+ left: var(--space-md);
223
+ right: var(--space-md);
224
+ background: var(--bg-color);
225
+ border: 1px solid var(--border-color);
226
+ border-radius: 8px;
227
+ box-shadow: var(--shadow-lg);
228
+ max-height: 400px;
229
+ overflow-y: auto;
230
+ opacity: 0;
231
+ visibility: hidden;
232
+ transform: translateY(-4px);
233
+ transition: all var(--transition);
234
+ z-index: 200;
235
+ }
236
+
237
+ .search-results.visible {
238
+ opacity: 1;
239
+ visibility: visible;
240
+ transform: translateY(0);
241
+ }
242
+
243
+ .search-result-item {
244
+ display: block;
245
+ padding: var(--space-sm) var(--space-md);
246
+ text-decoration: none;
247
+ color: var(--text-color);
248
+ border-bottom: 1px solid var(--border-color);
249
+ transition: background var(--transition);
250
+ }
251
+
252
+ .search-result-item:last-child {
253
+ border-bottom: none;
254
+ }
255
+
256
+ .search-result-item:hover {
257
+ background: var(--bg-secondary);
258
+ }
259
+
260
+ .result-title {
261
+ font-weight: 600;
262
+ font-size: var(--font-size-sm);
263
+ margin-bottom: 2px;
264
+ }
265
+
266
+ .result-excerpt {
267
+ font-size: 0.8rem;
268
+ color: var(--text-secondary);
269
+ line-height: 1.4;
270
+ }
271
+
272
+ .result-excerpt mark {
273
+ background: var(--accent-light);
274
+ color: var(--accent-color);
275
+ padding: 1px 4px;
276
+ border-radius: var(--radius-sm);
277
+ font-weight: 500;
278
+ }
279
+
280
+ .no-results {
281
+ padding: var(--space-md);
282
+ text-align: center;
283
+ color: var(--text-muted);
284
+ font-size: var(--font-size-sm);
285
+ }
286
+
287
+ /* ========== Sidebar Navigation ========== */
288
+ .sidebar-nav {
289
+ flex: 1;
290
+ overflow-y: auto;
291
+ padding: var(--space-md) 0;
292
+ }
293
+
294
+ .nav-group {
295
+ margin-bottom: var(--space-xs);
296
+ }
297
+
298
+ .nav-group-header {
299
+ display: flex;
300
+ align-items: center;
301
+ padding: var(--space-sm) var(--space-md);
302
+ cursor: pointer;
303
+ user-select: none;
304
+ transition: background var(--transition);
305
+ }
306
+
307
+ .nav-group-header:hover {
308
+ background: var(--bg-secondary);
309
+ }
310
+
311
+ .nav-group-toggle {
312
+ width: 20px;
313
+ height: 20px;
314
+ display: flex;
315
+ align-items: center;
316
+ justify-content: center;
317
+ margin-right: var(--space-xs);
318
+ background: none;
319
+ border: none;
320
+ color: var(--text-muted);
321
+ cursor: pointer;
322
+ transition: transform var(--transition);
323
+ }
324
+
325
+ .nav-group-toggle svg {
326
+ width: 12px;
327
+ height: 12px;
328
+ }
329
+
330
+ .nav-group.expanded .nav-group-toggle {
331
+ transform: rotate(90deg);
332
+ }
333
+
334
+ .nav-group-title {
335
+ font-size: var(--font-size-sm);
336
+ font-weight: 600;
337
+ color: var(--text-color);
338
+ }
339
+
340
+ .nav-group-items {
341
+ display: none;
342
+ padding-left: var(--space-lg);
343
+ }
344
+
345
+ .nav-group.expanded .nav-group-items {
346
+ display: block;
347
+ }
348
+
349
+ .nav-item {
350
+ display: block;
351
+ padding: 8px var(--space-md) 8px calc(var(--space-md) + 4px);
352
+ font-size: var(--font-size-sm);
353
+ color: var(--text-secondary);
354
+ text-decoration: none;
355
+ border-left: 2px solid transparent;
356
+ margin: 2px 8px 2px 0;
357
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
358
+ transition: all var(--transition);
359
+ cursor: pointer;
360
+ }
361
+
362
+ .nav-item:hover {
363
+ color: var(--text-color);
364
+ background: var(--bg-secondary);
365
+ }
366
+
367
+ .nav-item.active {
368
+ color: var(--accent-color);
369
+ border-left-color: var(--accent-color);
370
+ background: var(--accent-light);
371
+ font-weight: 500;
372
+ }
373
+
374
+ /* Top-level nav items (no group) */
375
+ .nav-item.top-level {
376
+ padding-left: var(--space-md);
377
+ border-left: none;
378
+ margin: 2px 8px;
379
+ border-radius: var(--radius-md);
380
+ }
381
+
382
+ .nav-item.top-level.active {
383
+ background: var(--accent-light);
384
+ }
385
+
386
+ /* ========== Main Content ========== */
387
+ .main-content {
388
+ flex: 1;
389
+ margin-left: var(--sidebar-width);
390
+ min-height: 100vh;
391
+ overflow-y: auto;
392
+ display: flex;
393
+ flex-direction: column;
394
+ }
395
+
396
+ .mobile-header {
397
+ display: none;
398
+ position: sticky;
399
+ top: 0;
400
+ padding: var(--space-sm) var(--space-md);
401
+ background: var(--bg-color);
402
+ border-bottom: 1px solid var(--border-color);
403
+ z-index: 50;
404
+ align-items: center;
405
+ gap: var(--space-sm);
406
+ }
407
+
408
+ .sidebar-toggle {
409
+ background: none;
410
+ border: none;
411
+ padding: var(--space-xs);
412
+ color: var(--text-color);
413
+ cursor: pointer;
414
+ border-radius: 4px;
415
+ transition: background var(--transition);
416
+ }
417
+
418
+ .sidebar-toggle:hover {
419
+ background: var(--bg-secondary);
420
+ }
421
+
422
+ .current-section {
423
+ flex: 1;
424
+ font-weight: 600;
425
+ font-size: var(--font-size-sm);
426
+ white-space: nowrap;
427
+ overflow: hidden;
428
+ text-overflow: ellipsis;
429
+ }
430
+
431
+ .theme-toggle-mobile {
432
+ background: none;
433
+ border: none;
434
+ padding: var(--space-xs);
435
+ font-size: 1.25rem;
436
+ cursor: pointer;
437
+ }
438
+
439
+ /* ========== Content Sections ========== */
440
+ .content-wrapper {
441
+ flex: 1;
442
+ max-width: 860px;
443
+ margin: 0 auto;
444
+ padding: var(--space-2xl) var(--space-xl);
445
+ width: 100%;
446
+ }
447
+
448
+ .content-section {
449
+ display: none;
450
+ animation: fadeIn 0.3s ease;
451
+ }
452
+
453
+ .content-section.active {
454
+ display: block;
455
+ }
456
+
457
+ @keyframes fadeIn {
458
+ from { opacity: 0; transform: translateY(8px); }
459
+ to { opacity: 1; transform: translateY(0); }
460
+ }
461
+
462
+ /* ========== Content Typography ========== */
463
+ .content-section h1 {
464
+ font-size: 2rem;
465
+ font-weight: 700;
466
+ margin-bottom: var(--space-lg);
467
+ padding-bottom: var(--space-md);
468
+ border-bottom: 1px solid var(--border-color);
469
+ }
470
+
471
+ .content-section h2 {
472
+ font-size: 1.5rem;
473
+ font-weight: 600;
474
+ margin-top: var(--space-2xl);
475
+ margin-bottom: var(--space-md);
476
+ padding-bottom: var(--space-sm);
477
+ border-bottom: 1px solid var(--border-color);
478
+ }
479
+
480
+ .content-section h3 {
481
+ font-size: 1.25rem;
482
+ font-weight: 600;
483
+ margin-top: var(--space-xl);
484
+ margin-bottom: var(--space-sm);
485
+ }
486
+
487
+ .content-section h4 {
488
+ font-size: 1.1rem;
489
+ font-weight: 600;
490
+ margin-top: var(--space-lg);
491
+ margin-bottom: var(--space-sm);
492
+ }
493
+
494
+ .content-section p {
495
+ margin-bottom: var(--space-md);
496
+ }
497
+
498
+ .content-section a {
499
+ color: var(--link-color);
500
+ text-decoration: none;
501
+ }
502
+
503
+ .content-section a:hover {
504
+ text-decoration: underline;
505
+ }
506
+
507
+ /* Lists */
508
+ .content-section ul,
509
+ .content-section ol {
510
+ margin: var(--space-md) 0;
511
+ padding-left: var(--space-xl);
512
+ }
513
+
514
+ .content-section li {
515
+ margin-bottom: var(--space-sm);
516
+ }
517
+
518
+ .content-section li::marker {
519
+ color: var(--accent-color);
520
+ }
521
+
522
+ /* Inline Code */
523
+ .content-section code {
524
+ font-family: var(--font-mono);
525
+ font-size: 0.85em;
526
+ padding: 3px 8px;
527
+ background: var(--bg-tertiary);
528
+ color: var(--accent-color);
529
+ border-radius: var(--radius-sm);
530
+ font-weight: 500;
531
+ }
532
+
533
+ /* Code Blocks */
534
+ .code-block-wrapper {
535
+ position: relative;
536
+ margin: var(--space-lg) 0;
537
+ border-radius: var(--radius-lg);
538
+ overflow: hidden;
539
+ box-shadow: var(--shadow-md);
540
+ }
541
+
542
+ .content-section pre {
543
+ margin: 0;
544
+ padding: var(--space-lg);
545
+ padding-top: calc(var(--space-lg) + 40px);
546
+ background: var(--code-bg);
547
+ overflow-x: auto;
548
+ border-radius: var(--radius-lg);
549
+ }
550
+
551
+ .content-section pre code {
552
+ display: block;
553
+ padding: 0;
554
+ background: none;
555
+ color: var(--code-color);
556
+ font-size: var(--font-size-sm);
557
+ line-height: 1.7;
558
+ }
559
+
560
+ /* Code Block Header */
561
+ .code-block-wrapper::before {
562
+ content: '';
563
+ position: absolute;
564
+ top: 0;
565
+ left: 0;
566
+ right: 0;
567
+ height: 40px;
568
+ background: rgba(255,255,255,0.03);
569
+ border-bottom: 1px solid rgba(255,255,255,0.05);
570
+ }
571
+
572
+ /* Code Block Actions */
573
+ .code-block-actions {
574
+ position: absolute;
575
+ top: 8px;
576
+ right: 12px;
577
+ display: flex;
578
+ gap: 8px;
579
+ z-index: 10;
580
+ }
581
+
582
+ .copy-code-btn {
583
+ position: absolute;
584
+ top: 8px;
585
+ right: 12px;
586
+ padding: 6px 12px;
587
+ background: rgba(255,255,255,0.08);
588
+ border: 1px solid rgba(255,255,255,0.1);
589
+ border-radius: var(--radius-md);
590
+ color: var(--code-color);
591
+ cursor: pointer;
592
+ opacity: 0;
593
+ transition: all var(--transition);
594
+ display: flex;
595
+ align-items: center;
596
+ gap: 6px;
597
+ font-size: var(--font-size-xs);
598
+ font-family: var(--font-family);
599
+ }
600
+
601
+ .code-block-wrapper:hover .copy-code-btn {
602
+ opacity: 1;
603
+ }
604
+
605
+ .copy-code-btn:hover {
606
+ background: rgba(255,255,255,0.15);
607
+ border-color: rgba(255,255,255,0.2);
608
+ }
609
+
610
+ .copy-code-btn.copied {
611
+ background: var(--accent-color);
612
+ border-color: var(--accent-color);
613
+ color: #fff;
614
+ }
615
+
616
+ /* Code syntax colors */
617
+ .content-section pre .keyword { color: #c678dd; }
618
+ .content-section pre .string { color: #98c379; }
619
+ .content-section pre .number { color: #d19a66; }
620
+ .content-section pre .comment { color: #5c6370; font-style: italic; }
621
+ .content-section pre .function { color: #61afef; }
622
+ .content-section pre .operator { color: #56b6c2; }
623
+
624
+ /* Tables */
625
+ .content-section table {
626
+ width: 100%;
627
+ margin: var(--space-lg) 0;
628
+ border-collapse: collapse;
629
+ font-size: var(--font-size-sm);
630
+ border-radius: var(--radius-md);
631
+ overflow: hidden;
632
+ box-shadow: var(--shadow-sm);
633
+ }
634
+
635
+ .content-section th {
636
+ padding: var(--space-md);
637
+ background: var(--accent-color);
638
+ color: #fff;
639
+ font-weight: 600;
640
+ text-align: left;
641
+ font-size: var(--font-size-sm);
642
+ letter-spacing: 0.02em;
643
+ }
644
+
645
+ .content-section th:first-child {
646
+ border-top-left-radius: var(--radius-md);
647
+ }
648
+
649
+ .content-section th:last-child {
650
+ border-top-right-radius: var(--radius-md);
651
+ }
652
+
653
+ .content-section td {
654
+ padding: var(--space-sm) var(--space-md);
655
+ border-bottom: 1px solid var(--border-color);
656
+ vertical-align: top;
657
+ }
658
+
659
+ .content-section tbody tr:nth-child(even) {
660
+ background: var(--bg-secondary);
661
+ }
662
+
663
+ .content-section tbody tr:hover {
664
+ background: var(--accent-light);
665
+ }
666
+
667
+ .content-section tbody tr:last-child td {
668
+ border-bottom: none;
669
+ }
670
+
671
+ .content-section tbody tr:last-child td:first-child {
672
+ border-bottom-left-radius: var(--radius-md);
673
+ }
674
+
675
+ .content-section tbody tr:last-child td:last-child {
676
+ border-bottom-right-radius: var(--radius-md);
677
+ }
678
+
679
+ /* Blockquote / Callouts */
680
+ .content-section blockquote {
681
+ position: relative;
682
+ margin: var(--space-lg) 0;
683
+ padding: var(--space-md) var(--space-lg);
684
+ padding-left: calc(var(--space-lg) + 32px);
685
+ background: var(--tip-bg);
686
+ border: 1px solid var(--tip-border);
687
+ border-radius: var(--radius-lg);
688
+ }
689
+
690
+ .content-section blockquote::before {
691
+ content: '💡';
692
+ position: absolute;
693
+ left: var(--space-md);
694
+ top: var(--space-md);
695
+ font-size: 1.25rem;
696
+ line-height: 1;
697
+ }
698
+
699
+ .content-section blockquote p:last-child {
700
+ margin-bottom: 0;
701
+ }
702
+
703
+ .content-section blockquote p:first-child {
704
+ font-weight: 500;
705
+ color: var(--text-color);
706
+ }
707
+
708
+ /* Warning callout */
709
+ .content-section blockquote.warning,
710
+ .content-section blockquote:has(strong:first-child:contains("警告")),
711
+ .content-section blockquote:has(strong:first-child:contains("Warning")) {
712
+ background: var(--warning-bg);
713
+ border-color: var(--warning-border);
714
+ }
715
+
716
+ .content-section blockquote.warning::before {
717
+ content: '⚠️';
718
+ }
719
+
720
+ /* Danger callout */
721
+ .content-section blockquote.danger,
722
+ .content-section blockquote:has(strong:first-child:contains("危险")),
723
+ .content-section blockquote:has(strong:first-child:contains("Danger")) {
724
+ background: var(--danger-bg);
725
+ border-color: var(--danger-border);
726
+ }
727
+
728
+ .content-section blockquote.danger::before {
729
+ content: '🚨';
730
+ }
731
+
732
+ /* Info callout */
733
+ .content-section blockquote.info,
734
+ .content-section blockquote:has(strong:first-child:contains("注意")),
735
+ .content-section blockquote:has(strong:first-child:contains("Note")) {
736
+ background: var(--info-bg);
737
+ border-color: var(--info-border);
738
+ }
739
+
740
+ .content-section blockquote.info::before {
741
+ content: 'ℹ️';
742
+ }
743
+
744
+ /* Images */
745
+ .content-section img {
746
+ max-width: 100%;
747
+ height: auto;
748
+ border-radius: 8px;
749
+ box-shadow: var(--shadow-md);
750
+ margin: var(--space-md) 0;
751
+ }
752
+
753
+ .screenshot-placeholder {
754
+ padding: var(--space-xl);
755
+ background: var(--bg-secondary);
756
+ border: 2px dashed var(--border-color);
757
+ border-radius: 8px;
758
+ text-align: center;
759
+ color: var(--text-muted);
760
+ margin: var(--space-md) 0;
761
+ }
762
+
763
+ /* ========== Footer ========== */
764
+ .main-footer {
765
+ padding: var(--space-lg);
766
+ text-align: center;
767
+ color: var(--text-muted);
768
+ font-size: var(--font-size-sm);
769
+ border-top: 1px solid var(--border-color);
770
+ margin-top: auto;
771
+ }
772
+
773
+ /* ========== Theme Toggle (Desktop) ========== */
774
+ .theme-toggle {
775
+ position: fixed;
776
+ bottom: var(--space-lg);
777
+ right: var(--space-lg);
778
+ width: 44px;
779
+ height: 44px;
780
+ border-radius: 50%;
781
+ border: 1px solid var(--border-color);
782
+ background: var(--bg-color);
783
+ box-shadow: var(--shadow-md);
784
+ cursor: pointer;
785
+ font-size: 1.25rem;
786
+ z-index: 100;
787
+ transition: transform var(--transition);
788
+ }
789
+
790
+ .theme-toggle:hover {
791
+ transform: scale(1.1);
792
+ }
793
+
794
+ [data-theme="light"] .moon-icon { display: inline; }
795
+ [data-theme="light"] .sun-icon { display: none; }
796
+ [data-theme="dark"] .moon-icon { display: none; }
797
+ [data-theme="dark"] .sun-icon { display: inline; }
798
+
799
+ /* ========== Back to Top ========== */
800
+ .back-to-top {
801
+ position: fixed;
802
+ bottom: calc(var(--space-lg) + 56px);
803
+ right: var(--space-lg);
804
+ width: 40px;
805
+ height: 40px;
806
+ border-radius: 50%;
807
+ border: 1px solid var(--border-color);
808
+ background: var(--bg-color);
809
+ box-shadow: var(--shadow-md);
810
+ color: var(--text-secondary);
811
+ cursor: pointer;
812
+ opacity: 0;
813
+ visibility: hidden;
814
+ transition: all var(--transition);
815
+ z-index: 100;
816
+ display: flex;
817
+ align-items: center;
818
+ justify-content: center;
819
+ }
820
+
821
+ .back-to-top.visible {
822
+ opacity: 1;
823
+ visibility: visible;
824
+ }
825
+
826
+ .back-to-top:hover {
827
+ color: var(--accent-color);
828
+ border-color: var(--accent-color);
829
+ }
830
+
831
+ /* ========== Responsive ========== */
832
+ @media (max-width: 960px) {
833
+ .sidebar {
834
+ transform: translateX(-100%);
835
+ }
836
+
837
+ .sidebar.open {
838
+ transform: translateX(0);
839
+ box-shadow: var(--shadow-lg);
840
+ }
841
+
842
+ .main-content {
843
+ margin-left: 0;
844
+ }
845
+
846
+ .mobile-header {
847
+ display: flex;
848
+ }
849
+
850
+ .content-wrapper {
851
+ padding: var(--space-lg);
852
+ }
853
+
854
+ .theme-toggle {
855
+ display: none;
856
+ }
857
+ }
858
+
859
+ @media (max-width: 640px) {
860
+ .content-section h1 {
861
+ font-size: 1.5rem;
862
+ }
863
+
864
+ .content-section h2 {
865
+ font-size: 1.25rem;
866
+ }
867
+
868
+ .content-wrapper {
869
+ padding: var(--space-md);
870
+ }
871
+ }
872
+
873
+ /* ========== Print Styles ========== */
874
+ @media print {
875
+ .sidebar,
876
+ .mobile-header,
877
+ .theme-toggle,
878
+ .back-to-top,
879
+ .copy-code-btn {
880
+ display: none !important;
881
+ }
882
+
883
+ .main-content {
884
+ margin-left: 0;
885
+ }
886
+
887
+ .content-section {
888
+ display: block !important;
889
+ page-break-after: always;
890
+ }
891
+
892
+ .content-section pre {
893
+ background: #f5f5f5 !important;
894
+ color: #333 !important;
895
+ }
896
+ }
897
+
898
+
899
+ /* ========== Pygments Syntax Highlighting (One Dark Theme) ========== */
900
+ /* Generated for CodeHilite extension */
901
+ .highlight { background: #282c34; border-radius: 8px; padding: 1em; overflow-x: auto; margin: var(--spacing-md) 0; }
902
+ .highlight pre { margin: 0; background: transparent; padding: 0; }
903
+ .highlight code { background: transparent; border: none; padding: 0; color: #abb2bf; font-size: var(--font-size-sm); }
904
+
905
+ /* Pygments Token Colors - One Dark Theme */
906
+ .highlight .hll { background-color: #3e4451; }
907
+ .highlight .c { color: #5c6370; font-style: italic; } /* Comment */
908
+ .highlight .err { color: #e06c75; } /* Error */
909
+ .highlight .k { color: #c678dd; } /* Keyword */
910
+ .highlight .l { color: #98c379; } /* Literal */
911
+ .highlight .n { color: #abb2bf; } /* Name */
912
+ .highlight .o { color: #56b6c2; } /* Operator */
913
+ .highlight .p { color: #abb2bf; } /* Punctuation */
914
+ .highlight .ch { color: #5c6370; font-style: italic; } /* Comment.Hashbang */
915
+ .highlight .cm { color: #5c6370; font-style: italic; } /* Comment.Multiline */
916
+ .highlight .cp { color: #5c6370; font-style: italic; } /* Comment.Preproc */
917
+ .highlight .cpf { color: #5c6370; font-style: italic; } /* Comment.PreprocFile */
918
+ .highlight .c1 { color: #5c6370; font-style: italic; } /* Comment.Single */
919
+ .highlight .cs { color: #5c6370; font-style: italic; } /* Comment.Special */
920
+ .highlight .gd { color: #e06c75; } /* Generic.Deleted */
921
+ .highlight .ge { font-style: italic; } /* Generic.Emph */
922
+ .highlight .gh { color: #abb2bf; font-weight: bold; } /* Generic.Heading */
923
+ .highlight .gi { color: #98c379; } /* Generic.Inserted */
924
+ .highlight .go { color: #5c6370; } /* Generic.Output */
925
+ .highlight .gp { color: #5c6370; } /* Generic.Prompt */
926
+ .highlight .gs { font-weight: bold; } /* Generic.Strong */
927
+ .highlight .gu { color: #56b6c2; font-weight: bold; } /* Generic.Subheading */
928
+ .highlight .gt { color: #e06c75; } /* Generic.Traceback */
929
+ .highlight .kc { color: #c678dd; } /* Keyword.Constant */
930
+ .highlight .kd { color: #c678dd; } /* Keyword.Declaration */
931
+ .highlight .kn { color: #c678dd; } /* Keyword.Namespace */
932
+ .highlight .kp { color: #c678dd; } /* Keyword.Pseudo */
933
+ .highlight .kr { color: #c678dd; } /* Keyword.Reserved */
934
+ .highlight .kt { color: #e5c07b; } /* Keyword.Type */
935
+ .highlight .ld { color: #98c379; } /* Literal.Date */
936
+ .highlight .m { color: #d19a66; } /* Literal.Number */
937
+ .highlight .s { color: #98c379; } /* Literal.String */
938
+ .highlight .na { color: #d19a66; } /* Name.Attribute */
939
+ .highlight .nb { color: #e5c07b; } /* Name.Builtin */
940
+ .highlight .nc { color: #e5c07b; } /* Name.Class */
941
+ .highlight .no { color: #d19a66; } /* Name.Constant */
942
+ .highlight .nd { color: #e5c07b; } /* Name.Decorator */
943
+ .highlight .ni { color: #abb2bf; } /* Name.Entity */
944
+ .highlight .ne { color: #e06c75; } /* Name.Exception */
945
+ .highlight .nf { color: #61afef; } /* Name.Function */
946
+ .highlight .nl { color: #abb2bf; } /* Name.Label */
947
+ .highlight .nn { color: #e5c07b; } /* Name.Namespace */
948
+ .highlight .nx { color: #abb2bf; } /* Name.Other */
949
+ .highlight .py { color: #abb2bf; } /* Name.Property */
950
+ .highlight .nt { color: #e06c75; } /* Name.Tag */
951
+ .highlight .nv { color: #e06c75; } /* Name.Variable */
952
+ .highlight .ow { color: #56b6c2; } /* Operator.Word */
953
+ .highlight .w { color: #abb2bf; } /* Text.Whitespace */
954
+ .highlight .mb { color: #d19a66; } /* Literal.Number.Bin */
955
+ .highlight .mf { color: #d19a66; } /* Literal.Number.Float */
956
+ .highlight .mh { color: #d19a66; } /* Literal.Number.Hex */
957
+ .highlight .mi { color: #d19a66; } /* Literal.Number.Integer */
958
+ .highlight .mo { color: #d19a66; } /* Literal.Number.Oct */
959
+ .highlight .sa { color: #98c379; } /* Literal.String.Affix */
960
+ .highlight .sb { color: #98c379; } /* Literal.String.Backtick */
961
+ .highlight .sc { color: #98c379; } /* Literal.String.Char */
962
+ .highlight .dl { color: #98c379; } /* Literal.String.Delimiter */
963
+ .highlight .sd { color: #98c379; } /* Literal.String.Doc */
964
+ .highlight .s2 { color: #98c379; } /* Literal.String.Double */
965
+ .highlight .se { color: #d19a66; } /* Literal.String.Escape */
966
+ .highlight .sh { color: #98c379; } /* Literal.String.Heredoc */
967
+ .highlight .si { color: #98c379; } /* Literal.String.Interpol */
968
+ .highlight .sx { color: #98c379; } /* Literal.String.Other */
969
+ .highlight .sr { color: #56b6c2; } /* Literal.String.Regex */
970
+ .highlight .s1 { color: #98c379; } /* Literal.String.Single */
971
+ .highlight .ss { color: #56b6c2; } /* Literal.String.Symbol */
972
+ .highlight .bp { color: #e5c07b; } /* Name.Builtin.Pseudo */
973
+ .highlight .fm { color: #61afef; } /* Name.Function.Magic */
974
+ .highlight .vc { color: #e06c75; } /* Name.Variable.Class */
975
+ .highlight .vg { color: #e06c75; } /* Name.Variable.Global */
976
+ .highlight .vi { color: #e06c75; } /* Name.Variable.Instance */
977
+ .highlight .vm { color: #e06c75; } /* Name.Variable.Magic */
978
+ .highlight .il { color: #d19a66; } /* Literal.Number.Integer.Long */
979
+
980
+ /* Dark theme override for highlight */
981
+ [data-theme="dark"] .highlight {
982
+ background: #1e2128;
983
+ border: 1px solid #3d4450;
984
+ }