@bvdm/delano 0.2.0 → 0.2.1

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 (36) hide show
  1. package/.delano/viewer/public/explorer.svg +2 -2
  2. package/.delano/viewer/public/index.html +21 -21
  3. package/.delano/viewer/public/markdown.svg +5 -5
  4. package/.delano/viewer/public/styles.css +1042 -1042
  5. package/.delano/viewer/public/vscode.svg +23 -23
  6. package/README.md +17 -0
  7. package/assets/payload/.agents/hooks/bash-worktree-fix.sh +0 -0
  8. package/assets/payload/.agents/hooks/post-tool-logger.js +0 -0
  9. package/assets/payload/.agents/hooks/session-tracker.js +0 -0
  10. package/assets/payload/.agents/hooks/user-prompt-logger.js +0 -0
  11. package/assets/payload/.agents/scripts/check-log-safety.sh +0 -0
  12. package/assets/payload/.agents/scripts/check-path-standards.sh +0 -0
  13. package/assets/payload/.agents/scripts/fix-path-standards.sh +0 -0
  14. package/assets/payload/.agents/scripts/git-sparse-download.sh +0 -0
  15. package/assets/payload/.agents/scripts/log-event.js +0 -0
  16. package/assets/payload/.agents/scripts/log-event.sh +0 -0
  17. package/assets/payload/.agents/scripts/pm/blocked.sh +0 -0
  18. package/assets/payload/.agents/scripts/pm/epic-list.sh +0 -0
  19. package/assets/payload/.agents/scripts/pm/in-progress.sh +0 -0
  20. package/assets/payload/.agents/scripts/pm/init.sh +0 -0
  21. package/assets/payload/.agents/scripts/pm/next.sh +0 -0
  22. package/assets/payload/.agents/scripts/pm/prd-list.sh +0 -0
  23. package/assets/payload/.agents/scripts/pm/search.sh +0 -0
  24. package/assets/payload/.agents/scripts/pm/standup.sh +0 -0
  25. package/assets/payload/.agents/scripts/pm/status.sh +0 -0
  26. package/assets/payload/.agents/scripts/pm/validate.sh +0 -0
  27. package/assets/payload/.agents/scripts/query-log.sh +0 -0
  28. package/assets/payload/.agents/scripts/test-and-log.sh +0 -0
  29. package/assets/payload/.delano/viewer/public/explorer.svg +2 -2
  30. package/assets/payload/.delano/viewer/public/index.html +21 -21
  31. package/assets/payload/.delano/viewer/public/markdown.svg +5 -5
  32. package/assets/payload/.delano/viewer/public/styles.css +1042 -1042
  33. package/assets/payload/.delano/viewer/public/vscode.svg +23 -23
  34. package/assets/payload/install-delano.sh +0 -0
  35. package/install-delano.sh +0 -0
  36. package/package.json +9 -1
@@ -1,1042 +1,1042 @@
1
- :root {
2
- color-scheme: light;
3
- --canvas: #f7f6f3;
4
- --paper: #ffffff;
5
- --paper-soft: #fbfbfa;
6
- --ink: #111111;
7
- --text: #2f3437;
8
- --muted: #787774;
9
- --faint: #a5a19b;
10
- --line: #eaeaea;
11
- --line-soft: rgba(0, 0, 0, 0.06);
12
- --red-bg: #fdebec;
13
- --red-text: #9f2f2d;
14
- --blue-bg: #e1f3fe;
15
- --blue-text: #1f6c9f;
16
- --green-bg: #edf3ec;
17
- --green-text: #346538;
18
- --yellow-bg: #fbf3db;
19
- --yellow-text: #956400;
20
- --sans: "Aptos", "Segoe UI Variable", "Segoe UI", "SF Pro Display", "Geist Sans", "Helvetica Neue", Arial, sans-serif;
21
- --display: "Aptos Display", "Segoe UI Variable Display", "Segoe UI", "SF Pro Display", "Geist Sans", "Helvetica Neue", Arial, sans-serif;
22
- --serif: "Newsreader", "Instrument Serif", "Lyon Text", "Iowan Old Style", "Sitka Text", "Charter", "Cambria", Georgia, serif;
23
- --mono: "Geist Mono", "SF Mono", "JetBrains Mono", Consolas, monospace;
24
- --shadow-card-rest: 0 0 0 rgba(0, 0, 0, 0);
25
- --shadow-card-hover: 0 2px 8px rgba(0, 0, 0, 0.04);
26
- }
27
-
28
- * { box-sizing: border-box; }
29
-
30
- html { background: var(--canvas); }
31
-
32
- body {
33
- margin: 0;
34
- min-height: 100vh;
35
- background: var(--canvas);
36
- color: var(--text);
37
- font: 14px/1.6 var(--sans);
38
- letter-spacing: 0;
39
- -webkit-font-smoothing: antialiased;
40
- text-rendering: optimizeLegibility;
41
- }
42
-
43
- .ambient {
44
- position: fixed;
45
- inset: 0;
46
- pointer-events: none;
47
- z-index: 0;
48
- background:
49
- radial-gradient(ellipse 70% 55% at 18% 8%, rgba(180, 150, 110, 0.045), transparent 60%),
50
- radial-gradient(ellipse 60% 50% at 92% 90%, rgba(120, 130, 160, 0.035), transparent 60%);
51
- animation: ambient-drift 28s ease-in-out infinite alternate;
52
- }
53
-
54
- @keyframes ambient-drift {
55
- 0% { transform: translate3d(0, 0, 0); }
56
- 100% { transform: translate3d(-1.2%, 0.8%, 0); }
57
- }
58
-
59
- @media (prefers-reduced-motion: reduce) {
60
- .ambient { animation: none; }
61
- }
62
-
63
- button, input { font: inherit; }
64
- button { color: inherit; }
65
-
66
- #app {
67
- position: relative;
68
- z-index: 1;
69
- min-height: 100vh;
70
- padding: 18px;
71
- }
72
-
73
- .viewer-frame {
74
- min-height: calc(100vh - 36px);
75
- border: 1px solid var(--line);
76
- border-radius: 12px;
77
- background: var(--paper);
78
- overflow: hidden;
79
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.02), 0 12px 40px rgba(40, 30, 10, 0.025);
80
- }
81
-
82
- .top-bar {
83
- display: flex;
84
- align-items: stretch;
85
- height: 60px;
86
- padding: 0 28px;
87
- gap: 28px;
88
- border-bottom: 1px solid var(--line);
89
- background: var(--paper);
90
- }
91
-
92
- .brand-mark {
93
- display: flex;
94
- align-items: center;
95
- flex-shrink: 0;
96
- padding-right: 28px;
97
- border-right: 1px solid var(--line);
98
- font-family: var(--serif);
99
- font-size: 22px;
100
- font-weight: 500;
101
- letter-spacing: -0.025em;
102
- color: var(--ink);
103
- }
104
-
105
- .tabs {
106
- position: relative;
107
- display: flex;
108
- flex: 1;
109
- align-items: stretch;
110
- gap: 6px;
111
- min-width: 0;
112
- }
113
-
114
- .tab.overflow-hidden { display: none; }
115
-
116
- .tab-more {
117
- position: relative;
118
- display: inline-flex;
119
- align-items: center;
120
- justify-content: center;
121
- width: 32px;
122
- margin-left: auto;
123
- padding: 0;
124
- border: 0;
125
- background: transparent;
126
- color: var(--muted);
127
- cursor: pointer;
128
- border-radius: 5px;
129
- transition: color 200ms ease, background 200ms ease;
130
- }
131
-
132
- .tab-more:hover { color: var(--ink); background: var(--paper-soft); }
133
-
134
- .tab-more[aria-expanded="true"] {
135
- color: var(--ink);
136
- background: var(--paper-soft);
137
- }
138
-
139
- .tab-more.has-active { color: var(--ink); }
140
-
141
- .tab-more.has-active::after {
142
- content: '';
143
- position: absolute;
144
- left: 6px;
145
- right: 6px;
146
- bottom: -1px;
147
- height: 2px;
148
- background: var(--ink);
149
- }
150
-
151
- .tab-more svg { display: block; }
152
-
153
- .tab-more.hidden { display: none; }
154
-
155
- .tab-dropdown {
156
- position: absolute;
157
- top: calc(100% + 6px);
158
- right: 0;
159
- min-width: 240px;
160
- max-width: min(320px, 90vw);
161
- max-height: min(420px, 70vh);
162
- overflow-y: auto;
163
- background: var(--paper);
164
- border: 1px solid var(--line);
165
- border-radius: 10px;
166
- padding: 5px;
167
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.02), 0 8px 28px rgba(40, 30, 10, 0.08);
168
- z-index: 50;
169
- display: none;
170
- }
171
-
172
- .tab-dropdown[data-open="true"] {
173
- display: block;
174
- animation: dropdown-in 180ms cubic-bezier(0.16, 1, 0.3, 1);
175
- }
176
-
177
- @keyframes dropdown-in {
178
- from { opacity: 0; transform: translateY(-4px); }
179
- to { opacity: 1; transform: translateY(0); }
180
- }
181
-
182
- .dropdown-item {
183
- display: flex;
184
- align-items: center;
185
- justify-content: space-between;
186
- gap: 16px;
187
- width: 100%;
188
- text-align: left;
189
- padding: 9px 11px;
190
- border: 0;
191
- background: transparent;
192
- color: var(--text);
193
- cursor: pointer;
194
- border-radius: 6px;
195
- font-size: 13px;
196
- font-weight: 500;
197
- white-space: nowrap;
198
- transition: background 150ms ease, color 150ms ease;
199
- }
200
-
201
- .dropdown-item:hover { background: var(--paper-soft); color: var(--ink); }
202
-
203
- .dropdown-item.active {
204
- background: var(--paper-soft);
205
- color: var(--ink);
206
- font-weight: 600;
207
- }
208
-
209
- .dropdown-item .count {
210
- font-family: var(--mono);
211
- font-size: 10.5px;
212
- color: var(--faint);
213
- font-weight: 400;
214
- }
215
-
216
- .dropdown-item:focus-visible {
217
- outline: 2px solid var(--blue-text);
218
- outline-offset: -2px;
219
- }
220
-
221
- .tab {
222
- position: relative;
223
- display: inline-flex;
224
- align-items: center;
225
- gap: 9px;
226
- padding: 0 10px;
227
- border: 0;
228
- background: transparent;
229
- color: var(--muted);
230
- cursor: pointer;
231
- font-size: 13px;
232
- font-weight: 600;
233
- white-space: nowrap;
234
- transition: color 200ms ease;
235
- }
236
-
237
- .tab:hover { color: var(--ink); }
238
- .tab.active { color: var(--ink); }
239
-
240
- .tab.active::after {
241
- content: '';
242
- position: absolute;
243
- left: 6px;
244
- right: 6px;
245
- bottom: -1px;
246
- height: 2px;
247
- background: var(--ink);
248
- }
249
-
250
- .tab .count {
251
- font-family: var(--mono);
252
- font-size: 10.5px;
253
- font-weight: 400;
254
- color: var(--faint);
255
- letter-spacing: 0;
256
- }
257
-
258
- .tab.active .count { color: var(--muted); }
259
-
260
- .outline-toggle {
261
- align-self: center;
262
- flex-shrink: 0;
263
- border: 1px solid var(--line);
264
- border-radius: 6px;
265
- background: var(--paper);
266
- color: var(--muted);
267
- cursor: pointer;
268
- font-size: 12px;
269
- font-weight: 600;
270
- padding: 7px 11px;
271
- transition: color 200ms ease, border-color 200ms ease, background 200ms ease;
272
- }
273
-
274
- .outline-toggle:hover {
275
- color: var(--ink);
276
- border-color: #d9d5ce;
277
- background: var(--paper-soft);
278
- }
279
-
280
- .shell {
281
- display: grid;
282
- grid-template-columns: 380px minmax(0, 1fr);
283
- height: calc(100vh - 98px);
284
- background: var(--paper);
285
- }
286
-
287
- .list, .reader, .outline {
288
- min-width: 0;
289
- border-right: 1px solid var(--line);
290
- background: var(--paper);
291
- }
292
-
293
- .filter-label, .outline-label, .eyebrow {
294
- color: var(--muted);
295
- font-size: 10px;
296
- font-weight: 750;
297
- text-transform: uppercase;
298
- letter-spacing: 0.08em;
299
- }
300
-
301
- .count {
302
- color: var(--muted);
303
- font: 11px/1 var(--mono);
304
- }
305
-
306
- .pill {
307
- display: inline-flex;
308
- align-items: center;
309
- justify-content: center;
310
- flex: 0 0 auto;
311
- align-self: flex-start;
312
- min-height: 22px;
313
- max-height: 22px;
314
- border: 1px solid transparent;
315
- background: #f1f0ed;
316
- border-radius: 9999px;
317
- padding: 0 10px;
318
- color: var(--muted);
319
- font-family: var(--mono);
320
- font-size: 10px;
321
- font-weight: 600;
322
- line-height: 1;
323
- letter-spacing: 0.08em;
324
- text-transform: uppercase;
325
- white-space: nowrap;
326
- }
327
-
328
- .pill.active, .pill.approved, .pill.complete, .pill.done {
329
- color: var(--green-text);
330
- background: var(--green-bg);
331
- }
332
-
333
- .pill.in-progress, .pill.planned, .pill.ready {
334
- color: var(--yellow-text);
335
- background: var(--yellow-bg);
336
- }
337
-
338
- .pill.blocked {
339
- color: var(--red-text);
340
- background: var(--red-bg);
341
- }
342
-
343
- .list {
344
- padding: 20px;
345
- overflow: auto;
346
- background: #fcfbf9;
347
- }
348
-
349
- .search {
350
- width: 100%;
351
- border: 1px solid var(--line);
352
- border-radius: 6px;
353
- padding: 11px 12px;
354
- background: var(--paper);
355
- color: var(--ink);
356
- outline: none;
357
- transition: border-color 160ms ease, background 160ms ease;
358
- }
359
-
360
- .search::placeholder { color: var(--faint); }
361
- .search:focus {
362
- border-color: #cfcac2;
363
- background: #fff;
364
- }
365
-
366
- .filters {
367
- display: flex;
368
- gap: 8px;
369
- flex-wrap: wrap;
370
- margin: 16px 0 18px;
371
- }
372
-
373
- .filter-group {
374
- display: flex;
375
- gap: 7px;
376
- flex-wrap: wrap;
377
- align-items: center;
378
- width: 100%;
379
- }
380
-
381
- .filter-label { margin-right: 4px; }
382
- .filter-note { color: var(--muted); font-size: 12px; width: 100%; padding: 4px 2px; }
383
-
384
- .sort-group {
385
- align-items: center;
386
- }
387
-
388
- .sort-field {
389
- appearance: none;
390
- -webkit-appearance: none;
391
- -moz-appearance: none;
392
- height: 28px;
393
- padding: 0 26px 0 10px;
394
- border: 1px solid var(--line);
395
- border-radius: 6px;
396
- background-color: var(--paper);
397
- background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23787774' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='4,6 8,10 12,6'/></svg>");
398
- background-repeat: no-repeat;
399
- background-position: right 8px center;
400
- background-size: 12px;
401
- color: var(--ink);
402
- font-family: inherit;
403
- font-size: 12px;
404
- font-weight: 500;
405
- cursor: pointer;
406
- outline: none;
407
- transition: border-color 150ms ease, background-color 150ms ease;
408
- }
409
-
410
- .sort-field:hover { background-color: var(--paper-soft); border-color: #d9d5ce; }
411
- .sort-field:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
412
-
413
- .sort-dir {
414
- display: inline-flex;
415
- align-items: center;
416
- justify-content: center;
417
- width: 28px;
418
- height: 28px;
419
- padding: 0;
420
- border: 1px solid var(--line);
421
- border-radius: 6px;
422
- background: var(--paper);
423
- color: var(--muted);
424
- cursor: pointer;
425
- transition: background 150ms ease, color 150ms ease, border-color 150ms ease;
426
- }
427
-
428
- .sort-dir:hover { background: var(--paper-soft); border-color: #d9d5ce; color: var(--ink); }
429
- .sort-dir:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
430
-
431
- .workstream-scope, .filter {
432
- border: 1px solid var(--line);
433
- background: var(--paper);
434
- border-radius: 6px;
435
- padding: 6px 9px;
436
- color: var(--muted);
437
- cursor: pointer;
438
- font-size: 12px;
439
- }
440
-
441
- .workstream-scope, .filter.active {
442
- border-color: transparent;
443
- color: var(--blue-text);
444
- background: var(--blue-bg);
445
- }
446
-
447
- .doc {
448
- border: 1px solid var(--line);
449
- border-radius: 12px;
450
- padding: 18px 18px 16px;
451
- margin: 10px 0;
452
- cursor: pointer;
453
- background: var(--paper);
454
- box-shadow: var(--shadow-card-rest);
455
- transition: background 200ms ease, border-color 200ms ease, transform 200ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 200ms ease;
456
- }
457
-
458
- .doc:hover, .doc.active {
459
- border-color: #dedbd5;
460
- background: #fff;
461
- box-shadow: var(--shadow-card-hover);
462
- }
463
-
464
- .doc:hover { transform: translateY(-1px); }
465
- .doc:active { transform: scale(0.995); }
466
-
467
- .doc-title {
468
- color: var(--ink);
469
- font-weight: 760;
470
- letter-spacing: -0.01em;
471
- display: flex;
472
- justify-content: space-between;
473
- align-items: flex-start;
474
- gap: 12px;
475
- }
476
-
477
- .doc-title span:first-child {
478
- min-width: 0;
479
- overflow-wrap: anywhere;
480
- }
481
-
482
- .doc-path {
483
- color: var(--faint);
484
- font: 11px/1.4 var(--mono);
485
- margin-top: 6px;
486
- overflow: hidden;
487
- text-overflow: ellipsis;
488
- white-space: nowrap;
489
- }
490
-
491
- .doc-snippet {
492
- color: var(--muted);
493
- font-size: 13px;
494
- margin-top: 10px;
495
- }
496
-
497
- .reader {
498
- overflow: auto;
499
- background: var(--paper);
500
- }
501
-
502
- .reader-inner {
503
- max-width: 940px;
504
- margin: 0 auto;
505
- padding: 64px 80px 112px;
506
- }
507
-
508
- .reader-head {
509
- border-bottom: 1px solid var(--line);
510
- padding-bottom: 32px;
511
- margin-bottom: 44px;
512
- }
513
-
514
- .reader h1 {
515
- color: var(--ink);
516
- font-family: var(--serif);
517
- font-size: clamp(34px, 3.4vw, 48px);
518
- font-weight: 500;
519
- line-height: 1.06;
520
- letter-spacing: -0.025em;
521
- margin: 0 0 22px;
522
- }
523
-
524
- .reader-top {
525
- display: block;
526
- }
527
-
528
- .reader-actions {
529
- display: flex;
530
- gap: 8px;
531
- flex-wrap: wrap;
532
- justify-content: flex-start;
533
- margin-top: 14px;
534
- }
535
-
536
- /* Shadcn-style action buttons. .action = outline variant, .action.primary = default variant. */
537
- .action {
538
- display: inline-flex;
539
- align-items: center;
540
- justify-content: center;
541
- gap: 8px;
542
- height: 36px;
543
- padding: 0 16px;
544
- border: 1px solid var(--line);
545
- border-radius: 6px;
546
- background: var(--paper);
547
- color: var(--ink);
548
- cursor: pointer;
549
- font-family: inherit;
550
- font-size: 14px;
551
- font-weight: 500;
552
- letter-spacing: 0;
553
- white-space: nowrap;
554
- user-select: none;
555
- transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
556
- }
557
-
558
- .action:hover {
559
- background: var(--paper-soft);
560
- border-color: #d9d5ce;
561
- color: var(--ink);
562
- }
563
-
564
- .action:focus-visible {
565
- outline: 2px solid var(--ink);
566
- outline-offset: 2px;
567
- }
568
-
569
- .action:active { transform: translateY(0.5px); }
570
-
571
- .action.primary {
572
- background: var(--ink);
573
- border-color: var(--ink);
574
- color: #ffffff;
575
- }
576
-
577
- .action.primary:hover {
578
- background: #1f1f1f;
579
- border-color: #1f1f1f;
580
- color: #ffffff;
581
- }
582
-
583
- .action.primary:focus-visible {
584
- outline: 2px solid var(--ink);
585
- outline-offset: 2px;
586
- }
587
-
588
- .action-icon {
589
- width: 16px;
590
- height: 16px;
591
- flex-shrink: 0;
592
- display: block;
593
- pointer-events: none;
594
- }
595
-
596
- /* Markdown logomark is a monochrome path; tone it down to read as a UI icon. */
597
- .action-icon-md { opacity: 0.78; }
598
- .action:hover .action-icon-md { opacity: 0.9; }
599
- .action.copied .action-icon-md { opacity: 0.9; }
600
-
601
- .action-label { line-height: 1; }
602
-
603
- .open-feedback {
604
- min-height: 18px;
605
- margin-top: 10px;
606
- color: var(--muted);
607
- font-size: 12px;
608
- }
609
-
610
- .path-pill {
611
- max-width: min(100%, 420px);
612
- overflow: hidden;
613
- text-overflow: ellipsis;
614
- }
615
-
616
- .eyebrow { margin-bottom: 12px; }
617
- .meta { display: flex; gap: 8px; flex-wrap: wrap; color: var(--muted); }
618
-
619
- .properties {
620
- display: grid;
621
- grid-template-columns: 150px minmax(0, 1fr);
622
- gap: 8px 16px;
623
- margin-top: 18px;
624
- padding: 16px;
625
- border: 1px solid var(--line);
626
- border-radius: 10px;
627
- background: var(--paper-soft);
628
- }
629
-
630
- .prop-key {
631
- color: var(--muted);
632
- font: 11px/1.4 var(--mono);
633
- padding-top: 3px;
634
- }
635
-
636
- .prop-value {
637
- display: flex;
638
- align-items: flex-start;
639
- gap: 8px;
640
- min-width: 0;
641
- }
642
-
643
- .prop-value .prop-text {
644
- flex: 1;
645
- min-width: 0;
646
- overflow-wrap: anywhere;
647
- }
648
-
649
- .copy-btn {
650
- display: inline-flex;
651
- align-items: center;
652
- justify-content: center;
653
- width: 24px;
654
- height: 24px;
655
- padding: 0;
656
- border: 1px solid var(--line);
657
- border-radius: 5px;
658
- background: var(--paper);
659
- color: var(--muted);
660
- cursor: pointer;
661
- flex-shrink: 0;
662
- transition: color 200ms ease, border-color 200ms ease, background 200ms ease;
663
- }
664
-
665
- .copy-btn:hover {
666
- color: var(--ink);
667
- border-color: #d9d5ce;
668
- background: var(--paper-soft);
669
- }
670
-
671
- .copy-btn:focus-visible {
672
- outline: 2px solid var(--blue-text);
673
- outline-offset: 1px;
674
- }
675
-
676
- .copy-btn.copied {
677
- color: var(--green-text);
678
- border-color: var(--green-bg);
679
- background: var(--green-bg);
680
- }
681
-
682
- .copy-btn svg { display: block; }
683
-
684
- .copy-btn.pre-copy {
685
- position: absolute;
686
- top: 8px;
687
- right: 8px;
688
- opacity: 0;
689
- transition: opacity 200ms ease, color 200ms ease, border-color 200ms ease, background 200ms ease;
690
- }
691
-
692
- .markdown pre:hover .copy-btn.pre-copy,
693
- .copy-btn.pre-copy:focus-visible,
694
- .copy-btn.pre-copy.copied {
695
- opacity: 1;
696
- }
697
-
698
- .action.copied {
699
- color: var(--green-text);
700
- border-color: var(--green-bg);
701
- background: var(--green-bg);
702
- }
703
-
704
- .action.primary.copied {
705
- color: var(--green-text);
706
- border-color: var(--green-bg);
707
- background: var(--green-bg);
708
- }
709
-
710
- .visually-hidden {
711
- position: absolute;
712
- width: 1px;
713
- height: 1px;
714
- margin: -1px;
715
- padding: 0;
716
- overflow: hidden;
717
- clip: rect(0, 0, 0, 0);
718
- white-space: nowrap;
719
- border: 0;
720
- }
721
-
722
- .markdown {
723
- max-width: 780px;
724
- font-size: 16px;
725
- line-height: 1.72;
726
- color: var(--text);
727
- }
728
-
729
- .markdown h1, .markdown h2, .markdown h3 {
730
- color: var(--ink);
731
- line-height: 1.1;
732
- letter-spacing: -0.018em;
733
- margin: 1.7em 0 0.55em;
734
- }
735
-
736
- .markdown h1 {
737
- font-family: var(--serif);
738
- font-size: 32px;
739
- font-weight: 500;
740
- letter-spacing: -0.022em;
741
- }
742
-
743
- .markdown h2 {
744
- font-family: var(--display);
745
- font-size: 24px;
746
- font-weight: 620;
747
- }
748
-
749
- .markdown h3 { font-size: 18px; }
750
-
751
- .markdown h4, .markdown h5, .markdown h6 {
752
- color: var(--ink);
753
- line-height: 1.2;
754
- margin: 1.4em 0 0.45em;
755
- }
756
- .markdown h4 { font-size: 16px; font-weight: 650; letter-spacing: -0.01em; }
757
- .markdown h5 {
758
- font-family: var(--mono);
759
- font-size: 12px;
760
- font-weight: 650;
761
- text-transform: uppercase;
762
- letter-spacing: 0.06em;
763
- color: var(--muted);
764
- }
765
- .markdown h6 {
766
- font-family: var(--mono);
767
- font-size: 11px;
768
- font-weight: 650;
769
- text-transform: uppercase;
770
- letter-spacing: 0.08em;
771
- color: var(--faint);
772
- }
773
-
774
- .markdown p { margin: 0 0 1em; }
775
- .markdown ul, .markdown ol { padding-left: 1.5em; margin: 0 0 1em; }
776
- .markdown ul ul, .markdown ol ol, .markdown ul ol, .markdown ol ul { margin: 0.35em 0 0.1em; }
777
- .markdown li { margin: 0.32em 0; }
778
- .markdown li > p:last-child { margin-bottom: 0; }
779
-
780
- .markdown ul.task-list, .markdown ul.task-list ul.task-list { list-style: none; padding-left: 0.2em; }
781
- .markdown .task-item {
782
- display: flex;
783
- align-items: flex-start;
784
- gap: 10px;
785
- }
786
- .markdown .task-marker {
787
- flex: 0 0 16px;
788
- width: 16px;
789
- height: 16px;
790
- display: inline-flex;
791
- align-items: center;
792
- justify-content: center;
793
- border: 1px solid var(--line);
794
- border-radius: 4px;
795
- background: var(--paper);
796
- color: var(--green-text);
797
- margin-top: 3px;
798
- }
799
- .markdown .task-item.checked .task-marker {
800
- background: var(--green-bg);
801
- border-color: var(--green-bg);
802
- }
803
- .markdown .task-text { flex: 1; min-width: 0; overflow-wrap: anywhere; }
804
- .markdown .task-item.checked .task-text { color: var(--muted); }
805
-
806
- .markdown .table-wrap {
807
- margin: 1.3em 0;
808
- border: 1px solid var(--line);
809
- border-radius: 10px;
810
- overflow-x: auto;
811
- }
812
- .markdown table {
813
- border-collapse: collapse;
814
- width: 100%;
815
- font-size: 14.5px;
816
- }
817
- .markdown th, .markdown td {
818
- padding: 11px 14px;
819
- text-align: left;
820
- border-bottom: 1px solid var(--line);
821
- vertical-align: top;
822
- }
823
- .markdown thead th {
824
- background: var(--paper-soft);
825
- font-weight: 650;
826
- color: var(--ink);
827
- }
828
- .markdown tbody tr:last-child td { border-bottom: 0; }
829
- .markdown tbody tr:hover { background: var(--paper-soft); }
830
-
831
- .markdown pre.has-lang code { display: block; margin-top: 18px; }
832
- .markdown pre .code-lang {
833
- position: absolute;
834
- top: 9px;
835
- left: 14px;
836
- font-family: var(--mono);
837
- font-size: 10.5px;
838
- letter-spacing: 0.05em;
839
- text-transform: uppercase;
840
- color: var(--faint);
841
- pointer-events: none;
842
- user-select: none;
843
- }
844
-
845
- .markdown .mermaid-block {
846
- margin: 1.3em 0;
847
- padding: 0;
848
- }
849
- .markdown .mermaid-block figcaption {
850
- font-family: var(--mono);
851
- font-size: 10.5px;
852
- letter-spacing: 0.06em;
853
- text-transform: uppercase;
854
- color: var(--muted);
855
- margin-bottom: 6px;
856
- }
857
- .markdown .mermaid-block pre { margin: 0; }
858
-
859
- .markdown hr.rule {
860
- border: 0;
861
- border-top: 1px solid var(--line);
862
- margin: 2em 0;
863
- }
864
-
865
- .markdown a, .wikilink {
866
- color: var(--blue-text);
867
- text-decoration: none;
868
- border-bottom: 1px solid rgba(31, 108, 159, 0.25);
869
- cursor: pointer;
870
- }
871
-
872
- .markdown code {
873
- background: #f1f0ed;
874
- border: 1px solid var(--line);
875
- border-radius: 4px;
876
- padding: 0.1em 0.35em;
877
- font-family: var(--mono);
878
- font-size: 0.88em;
879
- }
880
-
881
- .markdown pre {
882
- position: relative;
883
- background: #fbfbfa;
884
- color: var(--ink);
885
- border: 1px solid var(--line);
886
- border-radius: 10px;
887
- padding: 18px;
888
- overflow: auto;
889
- }
890
-
891
- .markdown pre code {
892
- background: transparent;
893
- border: 0;
894
- color: inherit;
895
- padding: 0;
896
- }
897
-
898
- .markdown blockquote {
899
- margin: 1.4em 0;
900
- padding: 2px 0 2px 20px;
901
- border-left: 2px solid #d9d5ce;
902
- color: var(--muted);
903
- font-family: var(--serif);
904
- font-style: italic;
905
- font-size: 17px;
906
- line-height: 1.55;
907
- }
908
-
909
- .empty {
910
- color: var(--muted);
911
- padding: 40px;
912
- text-align: center;
913
- }
914
-
915
- .outline {
916
- border-right: 0;
917
- overflow: auto;
918
- padding: 28px 18px;
919
- background: var(--paper-soft);
920
- display: none;
921
- }
922
-
923
- .viewer-frame.outline-open .shell {
924
- grid-template-columns: 380px minmax(0, 1fr) 320px;
925
- }
926
-
927
- .viewer-frame.outline-open .outline {
928
- display: block;
929
- }
930
-
931
- .outline-title {
932
- color: var(--ink);
933
- font-family: var(--serif);
934
- font-size: 26px;
935
- font-weight: 500;
936
- line-height: 1.04;
937
- letter-spacing: -0.025em;
938
- }
939
-
940
- .outline-help {
941
- color: var(--muted);
942
- font-size: 12.5px;
943
- line-height: 1.55;
944
- margin: 10px 0 24px;
945
- max-width: 36ch;
946
- }
947
-
948
- .outline-section { margin: 18px 0; }
949
- .outline-label { margin: 18px 4px 8px; }
950
-
951
- .outline-link {
952
- width: 100%;
953
- border: 1px solid transparent;
954
- background: transparent;
955
- text-align: left;
956
- border-radius: 8px;
957
- padding: 8px 9px;
958
- display: flex;
959
- gap: 9px;
960
- align-items: center;
961
- justify-content: space-between;
962
- cursor: pointer;
963
- }
964
-
965
- .outline-link span:first-child {
966
- min-width: 0;
967
- overflow-wrap: anywhere;
968
- }
969
-
970
- .outline-link:hover, .outline-link.active, .workstream-block.active > .outline-link {
971
- background: var(--paper);
972
- border-color: var(--line);
973
- }
974
-
975
- .workstream-block {
976
- border-left: 1px solid var(--line);
977
- margin-left: 4px;
978
- padding-left: 8px;
979
- }
980
-
981
- .subtasks { margin: 5px 0 10px 10px; }
982
- .subtasks .outline-link { font-size: 12px; padding: 7px 8px; }
983
- .small { padding: 10px; text-align: left; font-size: 12px; }
984
-
985
- .reveal {
986
- opacity: 0;
987
- transform: translateY(12px);
988
- transition: opacity 600ms cubic-bezier(0.16, 1, 0.3, 1), transform 600ms cubic-bezier(0.16, 1, 0.3, 1);
989
- transition-delay: calc(var(--index, 0) * 60ms);
990
- }
991
-
992
- .reveal.visible {
993
- opacity: 1;
994
- transform: translateY(0);
995
- }
996
-
997
- @media (prefers-reduced-motion: reduce) {
998
- .reveal {
999
- opacity: 1;
1000
- transform: none;
1001
- transition: none;
1002
- }
1003
- }
1004
-
1005
- @media (max-width: 1180px) {
1006
- .shell { grid-template-columns: 320px minmax(0, 1fr); }
1007
- .viewer-frame.outline-open .shell { grid-template-columns: 320px minmax(0, 1fr); }
1008
- .reader-inner { padding: 52px 56px 92px; }
1009
- }
1010
-
1011
- @media (max-width: 820px) {
1012
- #app { padding: 10px; }
1013
- .viewer-frame { min-height: calc(100vh - 20px); }
1014
- .top-bar {
1015
- height: auto;
1016
- flex-wrap: wrap;
1017
- gap: 12px 18px;
1018
- padding: 14px 18px;
1019
- }
1020
- .brand-mark {
1021
- padding-right: 0;
1022
- border-right: 0;
1023
- font-size: 20px;
1024
- }
1025
- .tabs { width: 100%; gap: 4px; flex-wrap: wrap; }
1026
- .tab-more { display: none; }
1027
- .tab-dropdown { display: none !important; }
1028
- .shell { display: block; height: auto; }
1029
- .list, .reader, .outline {
1030
- height: auto;
1031
- border-right: 0;
1032
- border-bottom: 1px solid var(--line);
1033
- }
1034
- .outline { display: none; }
1035
- .viewer-frame.outline-open .outline { display: block; }
1036
- .list, .outline { padding: 20px; }
1037
- .reader-top { display: block; }
1038
- .reader-actions { margin: 14px 0 0; }
1039
- .reader-inner { padding: 32px 24px 56px; }
1040
- .reader h1 { font-size: 34px; }
1041
- .properties { grid-template-columns: 1fr; }
1042
- }
1
+ :root {
2
+ color-scheme: light;
3
+ --canvas: #f7f6f3;
4
+ --paper: #ffffff;
5
+ --paper-soft: #fbfbfa;
6
+ --ink: #111111;
7
+ --text: #2f3437;
8
+ --muted: #787774;
9
+ --faint: #a5a19b;
10
+ --line: #eaeaea;
11
+ --line-soft: rgba(0, 0, 0, 0.06);
12
+ --red-bg: #fdebec;
13
+ --red-text: #9f2f2d;
14
+ --blue-bg: #e1f3fe;
15
+ --blue-text: #1f6c9f;
16
+ --green-bg: #edf3ec;
17
+ --green-text: #346538;
18
+ --yellow-bg: #fbf3db;
19
+ --yellow-text: #956400;
20
+ --sans: "Aptos", "Segoe UI Variable", "Segoe UI", "SF Pro Display", "Geist Sans", "Helvetica Neue", Arial, sans-serif;
21
+ --display: "Aptos Display", "Segoe UI Variable Display", "Segoe UI", "SF Pro Display", "Geist Sans", "Helvetica Neue", Arial, sans-serif;
22
+ --serif: "Newsreader", "Instrument Serif", "Lyon Text", "Iowan Old Style", "Sitka Text", "Charter", "Cambria", Georgia, serif;
23
+ --mono: "Geist Mono", "SF Mono", "JetBrains Mono", Consolas, monospace;
24
+ --shadow-card-rest: 0 0 0 rgba(0, 0, 0, 0);
25
+ --shadow-card-hover: 0 2px 8px rgba(0, 0, 0, 0.04);
26
+ }
27
+
28
+ * { box-sizing: border-box; }
29
+
30
+ html { background: var(--canvas); }
31
+
32
+ body {
33
+ margin: 0;
34
+ min-height: 100vh;
35
+ background: var(--canvas);
36
+ color: var(--text);
37
+ font: 14px/1.6 var(--sans);
38
+ letter-spacing: 0;
39
+ -webkit-font-smoothing: antialiased;
40
+ text-rendering: optimizeLegibility;
41
+ }
42
+
43
+ .ambient {
44
+ position: fixed;
45
+ inset: 0;
46
+ pointer-events: none;
47
+ z-index: 0;
48
+ background:
49
+ radial-gradient(ellipse 70% 55% at 18% 8%, rgba(180, 150, 110, 0.045), transparent 60%),
50
+ radial-gradient(ellipse 60% 50% at 92% 90%, rgba(120, 130, 160, 0.035), transparent 60%);
51
+ animation: ambient-drift 28s ease-in-out infinite alternate;
52
+ }
53
+
54
+ @keyframes ambient-drift {
55
+ 0% { transform: translate3d(0, 0, 0); }
56
+ 100% { transform: translate3d(-1.2%, 0.8%, 0); }
57
+ }
58
+
59
+ @media (prefers-reduced-motion: reduce) {
60
+ .ambient { animation: none; }
61
+ }
62
+
63
+ button, input { font: inherit; }
64
+ button { color: inherit; }
65
+
66
+ #app {
67
+ position: relative;
68
+ z-index: 1;
69
+ min-height: 100vh;
70
+ padding: 18px;
71
+ }
72
+
73
+ .viewer-frame {
74
+ min-height: calc(100vh - 36px);
75
+ border: 1px solid var(--line);
76
+ border-radius: 12px;
77
+ background: var(--paper);
78
+ overflow: hidden;
79
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.02), 0 12px 40px rgba(40, 30, 10, 0.025);
80
+ }
81
+
82
+ .top-bar {
83
+ display: flex;
84
+ align-items: stretch;
85
+ height: 60px;
86
+ padding: 0 28px;
87
+ gap: 28px;
88
+ border-bottom: 1px solid var(--line);
89
+ background: var(--paper);
90
+ }
91
+
92
+ .brand-mark {
93
+ display: flex;
94
+ align-items: center;
95
+ flex-shrink: 0;
96
+ padding-right: 28px;
97
+ border-right: 1px solid var(--line);
98
+ font-family: var(--serif);
99
+ font-size: 22px;
100
+ font-weight: 500;
101
+ letter-spacing: -0.025em;
102
+ color: var(--ink);
103
+ }
104
+
105
+ .tabs {
106
+ position: relative;
107
+ display: flex;
108
+ flex: 1;
109
+ align-items: stretch;
110
+ gap: 6px;
111
+ min-width: 0;
112
+ }
113
+
114
+ .tab.overflow-hidden { display: none; }
115
+
116
+ .tab-more {
117
+ position: relative;
118
+ display: inline-flex;
119
+ align-items: center;
120
+ justify-content: center;
121
+ width: 32px;
122
+ margin-left: auto;
123
+ padding: 0;
124
+ border: 0;
125
+ background: transparent;
126
+ color: var(--muted);
127
+ cursor: pointer;
128
+ border-radius: 5px;
129
+ transition: color 200ms ease, background 200ms ease;
130
+ }
131
+
132
+ .tab-more:hover { color: var(--ink); background: var(--paper-soft); }
133
+
134
+ .tab-more[aria-expanded="true"] {
135
+ color: var(--ink);
136
+ background: var(--paper-soft);
137
+ }
138
+
139
+ .tab-more.has-active { color: var(--ink); }
140
+
141
+ .tab-more.has-active::after {
142
+ content: '';
143
+ position: absolute;
144
+ left: 6px;
145
+ right: 6px;
146
+ bottom: -1px;
147
+ height: 2px;
148
+ background: var(--ink);
149
+ }
150
+
151
+ .tab-more svg { display: block; }
152
+
153
+ .tab-more.hidden { display: none; }
154
+
155
+ .tab-dropdown {
156
+ position: absolute;
157
+ top: calc(100% + 6px);
158
+ right: 0;
159
+ min-width: 240px;
160
+ max-width: min(320px, 90vw);
161
+ max-height: min(420px, 70vh);
162
+ overflow-y: auto;
163
+ background: var(--paper);
164
+ border: 1px solid var(--line);
165
+ border-radius: 10px;
166
+ padding: 5px;
167
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.02), 0 8px 28px rgba(40, 30, 10, 0.08);
168
+ z-index: 50;
169
+ display: none;
170
+ }
171
+
172
+ .tab-dropdown[data-open="true"] {
173
+ display: block;
174
+ animation: dropdown-in 180ms cubic-bezier(0.16, 1, 0.3, 1);
175
+ }
176
+
177
+ @keyframes dropdown-in {
178
+ from { opacity: 0; transform: translateY(-4px); }
179
+ to { opacity: 1; transform: translateY(0); }
180
+ }
181
+
182
+ .dropdown-item {
183
+ display: flex;
184
+ align-items: center;
185
+ justify-content: space-between;
186
+ gap: 16px;
187
+ width: 100%;
188
+ text-align: left;
189
+ padding: 9px 11px;
190
+ border: 0;
191
+ background: transparent;
192
+ color: var(--text);
193
+ cursor: pointer;
194
+ border-radius: 6px;
195
+ font-size: 13px;
196
+ font-weight: 500;
197
+ white-space: nowrap;
198
+ transition: background 150ms ease, color 150ms ease;
199
+ }
200
+
201
+ .dropdown-item:hover { background: var(--paper-soft); color: var(--ink); }
202
+
203
+ .dropdown-item.active {
204
+ background: var(--paper-soft);
205
+ color: var(--ink);
206
+ font-weight: 600;
207
+ }
208
+
209
+ .dropdown-item .count {
210
+ font-family: var(--mono);
211
+ font-size: 10.5px;
212
+ color: var(--faint);
213
+ font-weight: 400;
214
+ }
215
+
216
+ .dropdown-item:focus-visible {
217
+ outline: 2px solid var(--blue-text);
218
+ outline-offset: -2px;
219
+ }
220
+
221
+ .tab {
222
+ position: relative;
223
+ display: inline-flex;
224
+ align-items: center;
225
+ gap: 9px;
226
+ padding: 0 10px;
227
+ border: 0;
228
+ background: transparent;
229
+ color: var(--muted);
230
+ cursor: pointer;
231
+ font-size: 13px;
232
+ font-weight: 600;
233
+ white-space: nowrap;
234
+ transition: color 200ms ease;
235
+ }
236
+
237
+ .tab:hover { color: var(--ink); }
238
+ .tab.active { color: var(--ink); }
239
+
240
+ .tab.active::after {
241
+ content: '';
242
+ position: absolute;
243
+ left: 6px;
244
+ right: 6px;
245
+ bottom: -1px;
246
+ height: 2px;
247
+ background: var(--ink);
248
+ }
249
+
250
+ .tab .count {
251
+ font-family: var(--mono);
252
+ font-size: 10.5px;
253
+ font-weight: 400;
254
+ color: var(--faint);
255
+ letter-spacing: 0;
256
+ }
257
+
258
+ .tab.active .count { color: var(--muted); }
259
+
260
+ .outline-toggle {
261
+ align-self: center;
262
+ flex-shrink: 0;
263
+ border: 1px solid var(--line);
264
+ border-radius: 6px;
265
+ background: var(--paper);
266
+ color: var(--muted);
267
+ cursor: pointer;
268
+ font-size: 12px;
269
+ font-weight: 600;
270
+ padding: 7px 11px;
271
+ transition: color 200ms ease, border-color 200ms ease, background 200ms ease;
272
+ }
273
+
274
+ .outline-toggle:hover {
275
+ color: var(--ink);
276
+ border-color: #d9d5ce;
277
+ background: var(--paper-soft);
278
+ }
279
+
280
+ .shell {
281
+ display: grid;
282
+ grid-template-columns: 380px minmax(0, 1fr);
283
+ height: calc(100vh - 98px);
284
+ background: var(--paper);
285
+ }
286
+
287
+ .list, .reader, .outline {
288
+ min-width: 0;
289
+ border-right: 1px solid var(--line);
290
+ background: var(--paper);
291
+ }
292
+
293
+ .filter-label, .outline-label, .eyebrow {
294
+ color: var(--muted);
295
+ font-size: 10px;
296
+ font-weight: 750;
297
+ text-transform: uppercase;
298
+ letter-spacing: 0.08em;
299
+ }
300
+
301
+ .count {
302
+ color: var(--muted);
303
+ font: 11px/1 var(--mono);
304
+ }
305
+
306
+ .pill {
307
+ display: inline-flex;
308
+ align-items: center;
309
+ justify-content: center;
310
+ flex: 0 0 auto;
311
+ align-self: flex-start;
312
+ min-height: 22px;
313
+ max-height: 22px;
314
+ border: 1px solid transparent;
315
+ background: #f1f0ed;
316
+ border-radius: 9999px;
317
+ padding: 0 10px;
318
+ color: var(--muted);
319
+ font-family: var(--mono);
320
+ font-size: 10px;
321
+ font-weight: 600;
322
+ line-height: 1;
323
+ letter-spacing: 0.08em;
324
+ text-transform: uppercase;
325
+ white-space: nowrap;
326
+ }
327
+
328
+ .pill.active, .pill.approved, .pill.complete, .pill.done {
329
+ color: var(--green-text);
330
+ background: var(--green-bg);
331
+ }
332
+
333
+ .pill.in-progress, .pill.planned, .pill.ready {
334
+ color: var(--yellow-text);
335
+ background: var(--yellow-bg);
336
+ }
337
+
338
+ .pill.blocked {
339
+ color: var(--red-text);
340
+ background: var(--red-bg);
341
+ }
342
+
343
+ .list {
344
+ padding: 20px;
345
+ overflow: auto;
346
+ background: #fcfbf9;
347
+ }
348
+
349
+ .search {
350
+ width: 100%;
351
+ border: 1px solid var(--line);
352
+ border-radius: 6px;
353
+ padding: 11px 12px;
354
+ background: var(--paper);
355
+ color: var(--ink);
356
+ outline: none;
357
+ transition: border-color 160ms ease, background 160ms ease;
358
+ }
359
+
360
+ .search::placeholder { color: var(--faint); }
361
+ .search:focus {
362
+ border-color: #cfcac2;
363
+ background: #fff;
364
+ }
365
+
366
+ .filters {
367
+ display: flex;
368
+ gap: 8px;
369
+ flex-wrap: wrap;
370
+ margin: 16px 0 18px;
371
+ }
372
+
373
+ .filter-group {
374
+ display: flex;
375
+ gap: 7px;
376
+ flex-wrap: wrap;
377
+ align-items: center;
378
+ width: 100%;
379
+ }
380
+
381
+ .filter-label { margin-right: 4px; }
382
+ .filter-note { color: var(--muted); font-size: 12px; width: 100%; padding: 4px 2px; }
383
+
384
+ .sort-group {
385
+ align-items: center;
386
+ }
387
+
388
+ .sort-field {
389
+ appearance: none;
390
+ -webkit-appearance: none;
391
+ -moz-appearance: none;
392
+ height: 28px;
393
+ padding: 0 26px 0 10px;
394
+ border: 1px solid var(--line);
395
+ border-radius: 6px;
396
+ background-color: var(--paper);
397
+ background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23787774' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='4,6 8,10 12,6'/></svg>");
398
+ background-repeat: no-repeat;
399
+ background-position: right 8px center;
400
+ background-size: 12px;
401
+ color: var(--ink);
402
+ font-family: inherit;
403
+ font-size: 12px;
404
+ font-weight: 500;
405
+ cursor: pointer;
406
+ outline: none;
407
+ transition: border-color 150ms ease, background-color 150ms ease;
408
+ }
409
+
410
+ .sort-field:hover { background-color: var(--paper-soft); border-color: #d9d5ce; }
411
+ .sort-field:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
412
+
413
+ .sort-dir {
414
+ display: inline-flex;
415
+ align-items: center;
416
+ justify-content: center;
417
+ width: 28px;
418
+ height: 28px;
419
+ padding: 0;
420
+ border: 1px solid var(--line);
421
+ border-radius: 6px;
422
+ background: var(--paper);
423
+ color: var(--muted);
424
+ cursor: pointer;
425
+ transition: background 150ms ease, color 150ms ease, border-color 150ms ease;
426
+ }
427
+
428
+ .sort-dir:hover { background: var(--paper-soft); border-color: #d9d5ce; color: var(--ink); }
429
+ .sort-dir:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
430
+
431
+ .workstream-scope, .filter {
432
+ border: 1px solid var(--line);
433
+ background: var(--paper);
434
+ border-radius: 6px;
435
+ padding: 6px 9px;
436
+ color: var(--muted);
437
+ cursor: pointer;
438
+ font-size: 12px;
439
+ }
440
+
441
+ .workstream-scope, .filter.active {
442
+ border-color: transparent;
443
+ color: var(--blue-text);
444
+ background: var(--blue-bg);
445
+ }
446
+
447
+ .doc {
448
+ border: 1px solid var(--line);
449
+ border-radius: 12px;
450
+ padding: 18px 18px 16px;
451
+ margin: 10px 0;
452
+ cursor: pointer;
453
+ background: var(--paper);
454
+ box-shadow: var(--shadow-card-rest);
455
+ transition: background 200ms ease, border-color 200ms ease, transform 200ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 200ms ease;
456
+ }
457
+
458
+ .doc:hover, .doc.active {
459
+ border-color: #dedbd5;
460
+ background: #fff;
461
+ box-shadow: var(--shadow-card-hover);
462
+ }
463
+
464
+ .doc:hover { transform: translateY(-1px); }
465
+ .doc:active { transform: scale(0.995); }
466
+
467
+ .doc-title {
468
+ color: var(--ink);
469
+ font-weight: 760;
470
+ letter-spacing: -0.01em;
471
+ display: flex;
472
+ justify-content: space-between;
473
+ align-items: flex-start;
474
+ gap: 12px;
475
+ }
476
+
477
+ .doc-title span:first-child {
478
+ min-width: 0;
479
+ overflow-wrap: anywhere;
480
+ }
481
+
482
+ .doc-path {
483
+ color: var(--faint);
484
+ font: 11px/1.4 var(--mono);
485
+ margin-top: 6px;
486
+ overflow: hidden;
487
+ text-overflow: ellipsis;
488
+ white-space: nowrap;
489
+ }
490
+
491
+ .doc-snippet {
492
+ color: var(--muted);
493
+ font-size: 13px;
494
+ margin-top: 10px;
495
+ }
496
+
497
+ .reader {
498
+ overflow: auto;
499
+ background: var(--paper);
500
+ }
501
+
502
+ .reader-inner {
503
+ max-width: 940px;
504
+ margin: 0 auto;
505
+ padding: 64px 80px 112px;
506
+ }
507
+
508
+ .reader-head {
509
+ border-bottom: 1px solid var(--line);
510
+ padding-bottom: 32px;
511
+ margin-bottom: 44px;
512
+ }
513
+
514
+ .reader h1 {
515
+ color: var(--ink);
516
+ font-family: var(--serif);
517
+ font-size: clamp(34px, 3.4vw, 48px);
518
+ font-weight: 500;
519
+ line-height: 1.06;
520
+ letter-spacing: -0.025em;
521
+ margin: 0 0 22px;
522
+ }
523
+
524
+ .reader-top {
525
+ display: block;
526
+ }
527
+
528
+ .reader-actions {
529
+ display: flex;
530
+ gap: 8px;
531
+ flex-wrap: wrap;
532
+ justify-content: flex-start;
533
+ margin-top: 14px;
534
+ }
535
+
536
+ /* Shadcn-style action buttons. .action = outline variant, .action.primary = default variant. */
537
+ .action {
538
+ display: inline-flex;
539
+ align-items: center;
540
+ justify-content: center;
541
+ gap: 8px;
542
+ height: 36px;
543
+ padding: 0 16px;
544
+ border: 1px solid var(--line);
545
+ border-radius: 6px;
546
+ background: var(--paper);
547
+ color: var(--ink);
548
+ cursor: pointer;
549
+ font-family: inherit;
550
+ font-size: 14px;
551
+ font-weight: 500;
552
+ letter-spacing: 0;
553
+ white-space: nowrap;
554
+ user-select: none;
555
+ transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
556
+ }
557
+
558
+ .action:hover {
559
+ background: var(--paper-soft);
560
+ border-color: #d9d5ce;
561
+ color: var(--ink);
562
+ }
563
+
564
+ .action:focus-visible {
565
+ outline: 2px solid var(--ink);
566
+ outline-offset: 2px;
567
+ }
568
+
569
+ .action:active { transform: translateY(0.5px); }
570
+
571
+ .action.primary {
572
+ background: var(--ink);
573
+ border-color: var(--ink);
574
+ color: #ffffff;
575
+ }
576
+
577
+ .action.primary:hover {
578
+ background: #1f1f1f;
579
+ border-color: #1f1f1f;
580
+ color: #ffffff;
581
+ }
582
+
583
+ .action.primary:focus-visible {
584
+ outline: 2px solid var(--ink);
585
+ outline-offset: 2px;
586
+ }
587
+
588
+ .action-icon {
589
+ width: 16px;
590
+ height: 16px;
591
+ flex-shrink: 0;
592
+ display: block;
593
+ pointer-events: none;
594
+ }
595
+
596
+ /* Markdown logomark is a monochrome path; tone it down to read as a UI icon. */
597
+ .action-icon-md { opacity: 0.78; }
598
+ .action:hover .action-icon-md { opacity: 0.9; }
599
+ .action.copied .action-icon-md { opacity: 0.9; }
600
+
601
+ .action-label { line-height: 1; }
602
+
603
+ .open-feedback {
604
+ min-height: 18px;
605
+ margin-top: 10px;
606
+ color: var(--muted);
607
+ font-size: 12px;
608
+ }
609
+
610
+ .path-pill {
611
+ max-width: min(100%, 420px);
612
+ overflow: hidden;
613
+ text-overflow: ellipsis;
614
+ }
615
+
616
+ .eyebrow { margin-bottom: 12px; }
617
+ .meta { display: flex; gap: 8px; flex-wrap: wrap; color: var(--muted); }
618
+
619
+ .properties {
620
+ display: grid;
621
+ grid-template-columns: 150px minmax(0, 1fr);
622
+ gap: 8px 16px;
623
+ margin-top: 18px;
624
+ padding: 16px;
625
+ border: 1px solid var(--line);
626
+ border-radius: 10px;
627
+ background: var(--paper-soft);
628
+ }
629
+
630
+ .prop-key {
631
+ color: var(--muted);
632
+ font: 11px/1.4 var(--mono);
633
+ padding-top: 3px;
634
+ }
635
+
636
+ .prop-value {
637
+ display: flex;
638
+ align-items: flex-start;
639
+ gap: 8px;
640
+ min-width: 0;
641
+ }
642
+
643
+ .prop-value .prop-text {
644
+ flex: 1;
645
+ min-width: 0;
646
+ overflow-wrap: anywhere;
647
+ }
648
+
649
+ .copy-btn {
650
+ display: inline-flex;
651
+ align-items: center;
652
+ justify-content: center;
653
+ width: 24px;
654
+ height: 24px;
655
+ padding: 0;
656
+ border: 1px solid var(--line);
657
+ border-radius: 5px;
658
+ background: var(--paper);
659
+ color: var(--muted);
660
+ cursor: pointer;
661
+ flex-shrink: 0;
662
+ transition: color 200ms ease, border-color 200ms ease, background 200ms ease;
663
+ }
664
+
665
+ .copy-btn:hover {
666
+ color: var(--ink);
667
+ border-color: #d9d5ce;
668
+ background: var(--paper-soft);
669
+ }
670
+
671
+ .copy-btn:focus-visible {
672
+ outline: 2px solid var(--blue-text);
673
+ outline-offset: 1px;
674
+ }
675
+
676
+ .copy-btn.copied {
677
+ color: var(--green-text);
678
+ border-color: var(--green-bg);
679
+ background: var(--green-bg);
680
+ }
681
+
682
+ .copy-btn svg { display: block; }
683
+
684
+ .copy-btn.pre-copy {
685
+ position: absolute;
686
+ top: 8px;
687
+ right: 8px;
688
+ opacity: 0;
689
+ transition: opacity 200ms ease, color 200ms ease, border-color 200ms ease, background 200ms ease;
690
+ }
691
+
692
+ .markdown pre:hover .copy-btn.pre-copy,
693
+ .copy-btn.pre-copy:focus-visible,
694
+ .copy-btn.pre-copy.copied {
695
+ opacity: 1;
696
+ }
697
+
698
+ .action.copied {
699
+ color: var(--green-text);
700
+ border-color: var(--green-bg);
701
+ background: var(--green-bg);
702
+ }
703
+
704
+ .action.primary.copied {
705
+ color: var(--green-text);
706
+ border-color: var(--green-bg);
707
+ background: var(--green-bg);
708
+ }
709
+
710
+ .visually-hidden {
711
+ position: absolute;
712
+ width: 1px;
713
+ height: 1px;
714
+ margin: -1px;
715
+ padding: 0;
716
+ overflow: hidden;
717
+ clip: rect(0, 0, 0, 0);
718
+ white-space: nowrap;
719
+ border: 0;
720
+ }
721
+
722
+ .markdown {
723
+ max-width: 780px;
724
+ font-size: 16px;
725
+ line-height: 1.72;
726
+ color: var(--text);
727
+ }
728
+
729
+ .markdown h1, .markdown h2, .markdown h3 {
730
+ color: var(--ink);
731
+ line-height: 1.1;
732
+ letter-spacing: -0.018em;
733
+ margin: 1.7em 0 0.55em;
734
+ }
735
+
736
+ .markdown h1 {
737
+ font-family: var(--serif);
738
+ font-size: 32px;
739
+ font-weight: 500;
740
+ letter-spacing: -0.022em;
741
+ }
742
+
743
+ .markdown h2 {
744
+ font-family: var(--display);
745
+ font-size: 24px;
746
+ font-weight: 620;
747
+ }
748
+
749
+ .markdown h3 { font-size: 18px; }
750
+
751
+ .markdown h4, .markdown h5, .markdown h6 {
752
+ color: var(--ink);
753
+ line-height: 1.2;
754
+ margin: 1.4em 0 0.45em;
755
+ }
756
+ .markdown h4 { font-size: 16px; font-weight: 650; letter-spacing: -0.01em; }
757
+ .markdown h5 {
758
+ font-family: var(--mono);
759
+ font-size: 12px;
760
+ font-weight: 650;
761
+ text-transform: uppercase;
762
+ letter-spacing: 0.06em;
763
+ color: var(--muted);
764
+ }
765
+ .markdown h6 {
766
+ font-family: var(--mono);
767
+ font-size: 11px;
768
+ font-weight: 650;
769
+ text-transform: uppercase;
770
+ letter-spacing: 0.08em;
771
+ color: var(--faint);
772
+ }
773
+
774
+ .markdown p { margin: 0 0 1em; }
775
+ .markdown ul, .markdown ol { padding-left: 1.5em; margin: 0 0 1em; }
776
+ .markdown ul ul, .markdown ol ol, .markdown ul ol, .markdown ol ul { margin: 0.35em 0 0.1em; }
777
+ .markdown li { margin: 0.32em 0; }
778
+ .markdown li > p:last-child { margin-bottom: 0; }
779
+
780
+ .markdown ul.task-list, .markdown ul.task-list ul.task-list { list-style: none; padding-left: 0.2em; }
781
+ .markdown .task-item {
782
+ display: flex;
783
+ align-items: flex-start;
784
+ gap: 10px;
785
+ }
786
+ .markdown .task-marker {
787
+ flex: 0 0 16px;
788
+ width: 16px;
789
+ height: 16px;
790
+ display: inline-flex;
791
+ align-items: center;
792
+ justify-content: center;
793
+ border: 1px solid var(--line);
794
+ border-radius: 4px;
795
+ background: var(--paper);
796
+ color: var(--green-text);
797
+ margin-top: 3px;
798
+ }
799
+ .markdown .task-item.checked .task-marker {
800
+ background: var(--green-bg);
801
+ border-color: var(--green-bg);
802
+ }
803
+ .markdown .task-text { flex: 1; min-width: 0; overflow-wrap: anywhere; }
804
+ .markdown .task-item.checked .task-text { color: var(--muted); }
805
+
806
+ .markdown .table-wrap {
807
+ margin: 1.3em 0;
808
+ border: 1px solid var(--line);
809
+ border-radius: 10px;
810
+ overflow-x: auto;
811
+ }
812
+ .markdown table {
813
+ border-collapse: collapse;
814
+ width: 100%;
815
+ font-size: 14.5px;
816
+ }
817
+ .markdown th, .markdown td {
818
+ padding: 11px 14px;
819
+ text-align: left;
820
+ border-bottom: 1px solid var(--line);
821
+ vertical-align: top;
822
+ }
823
+ .markdown thead th {
824
+ background: var(--paper-soft);
825
+ font-weight: 650;
826
+ color: var(--ink);
827
+ }
828
+ .markdown tbody tr:last-child td { border-bottom: 0; }
829
+ .markdown tbody tr:hover { background: var(--paper-soft); }
830
+
831
+ .markdown pre.has-lang code { display: block; margin-top: 18px; }
832
+ .markdown pre .code-lang {
833
+ position: absolute;
834
+ top: 9px;
835
+ left: 14px;
836
+ font-family: var(--mono);
837
+ font-size: 10.5px;
838
+ letter-spacing: 0.05em;
839
+ text-transform: uppercase;
840
+ color: var(--faint);
841
+ pointer-events: none;
842
+ user-select: none;
843
+ }
844
+
845
+ .markdown .mermaid-block {
846
+ margin: 1.3em 0;
847
+ padding: 0;
848
+ }
849
+ .markdown .mermaid-block figcaption {
850
+ font-family: var(--mono);
851
+ font-size: 10.5px;
852
+ letter-spacing: 0.06em;
853
+ text-transform: uppercase;
854
+ color: var(--muted);
855
+ margin-bottom: 6px;
856
+ }
857
+ .markdown .mermaid-block pre { margin: 0; }
858
+
859
+ .markdown hr.rule {
860
+ border: 0;
861
+ border-top: 1px solid var(--line);
862
+ margin: 2em 0;
863
+ }
864
+
865
+ .markdown a, .wikilink {
866
+ color: var(--blue-text);
867
+ text-decoration: none;
868
+ border-bottom: 1px solid rgba(31, 108, 159, 0.25);
869
+ cursor: pointer;
870
+ }
871
+
872
+ .markdown code {
873
+ background: #f1f0ed;
874
+ border: 1px solid var(--line);
875
+ border-radius: 4px;
876
+ padding: 0.1em 0.35em;
877
+ font-family: var(--mono);
878
+ font-size: 0.88em;
879
+ }
880
+
881
+ .markdown pre {
882
+ position: relative;
883
+ background: #fbfbfa;
884
+ color: var(--ink);
885
+ border: 1px solid var(--line);
886
+ border-radius: 10px;
887
+ padding: 18px;
888
+ overflow: auto;
889
+ }
890
+
891
+ .markdown pre code {
892
+ background: transparent;
893
+ border: 0;
894
+ color: inherit;
895
+ padding: 0;
896
+ }
897
+
898
+ .markdown blockquote {
899
+ margin: 1.4em 0;
900
+ padding: 2px 0 2px 20px;
901
+ border-left: 2px solid #d9d5ce;
902
+ color: var(--muted);
903
+ font-family: var(--serif);
904
+ font-style: italic;
905
+ font-size: 17px;
906
+ line-height: 1.55;
907
+ }
908
+
909
+ .empty {
910
+ color: var(--muted);
911
+ padding: 40px;
912
+ text-align: center;
913
+ }
914
+
915
+ .outline {
916
+ border-right: 0;
917
+ overflow: auto;
918
+ padding: 28px 18px;
919
+ background: var(--paper-soft);
920
+ display: none;
921
+ }
922
+
923
+ .viewer-frame.outline-open .shell {
924
+ grid-template-columns: 380px minmax(0, 1fr) 320px;
925
+ }
926
+
927
+ .viewer-frame.outline-open .outline {
928
+ display: block;
929
+ }
930
+
931
+ .outline-title {
932
+ color: var(--ink);
933
+ font-family: var(--serif);
934
+ font-size: 26px;
935
+ font-weight: 500;
936
+ line-height: 1.04;
937
+ letter-spacing: -0.025em;
938
+ }
939
+
940
+ .outline-help {
941
+ color: var(--muted);
942
+ font-size: 12.5px;
943
+ line-height: 1.55;
944
+ margin: 10px 0 24px;
945
+ max-width: 36ch;
946
+ }
947
+
948
+ .outline-section { margin: 18px 0; }
949
+ .outline-label { margin: 18px 4px 8px; }
950
+
951
+ .outline-link {
952
+ width: 100%;
953
+ border: 1px solid transparent;
954
+ background: transparent;
955
+ text-align: left;
956
+ border-radius: 8px;
957
+ padding: 8px 9px;
958
+ display: flex;
959
+ gap: 9px;
960
+ align-items: center;
961
+ justify-content: space-between;
962
+ cursor: pointer;
963
+ }
964
+
965
+ .outline-link span:first-child {
966
+ min-width: 0;
967
+ overflow-wrap: anywhere;
968
+ }
969
+
970
+ .outline-link:hover, .outline-link.active, .workstream-block.active > .outline-link {
971
+ background: var(--paper);
972
+ border-color: var(--line);
973
+ }
974
+
975
+ .workstream-block {
976
+ border-left: 1px solid var(--line);
977
+ margin-left: 4px;
978
+ padding-left: 8px;
979
+ }
980
+
981
+ .subtasks { margin: 5px 0 10px 10px; }
982
+ .subtasks .outline-link { font-size: 12px; padding: 7px 8px; }
983
+ .small { padding: 10px; text-align: left; font-size: 12px; }
984
+
985
+ .reveal {
986
+ opacity: 0;
987
+ transform: translateY(12px);
988
+ transition: opacity 600ms cubic-bezier(0.16, 1, 0.3, 1), transform 600ms cubic-bezier(0.16, 1, 0.3, 1);
989
+ transition-delay: calc(var(--index, 0) * 60ms);
990
+ }
991
+
992
+ .reveal.visible {
993
+ opacity: 1;
994
+ transform: translateY(0);
995
+ }
996
+
997
+ @media (prefers-reduced-motion: reduce) {
998
+ .reveal {
999
+ opacity: 1;
1000
+ transform: none;
1001
+ transition: none;
1002
+ }
1003
+ }
1004
+
1005
+ @media (max-width: 1180px) {
1006
+ .shell { grid-template-columns: 320px minmax(0, 1fr); }
1007
+ .viewer-frame.outline-open .shell { grid-template-columns: 320px minmax(0, 1fr); }
1008
+ .reader-inner { padding: 52px 56px 92px; }
1009
+ }
1010
+
1011
+ @media (max-width: 820px) {
1012
+ #app { padding: 10px; }
1013
+ .viewer-frame { min-height: calc(100vh - 20px); }
1014
+ .top-bar {
1015
+ height: auto;
1016
+ flex-wrap: wrap;
1017
+ gap: 12px 18px;
1018
+ padding: 14px 18px;
1019
+ }
1020
+ .brand-mark {
1021
+ padding-right: 0;
1022
+ border-right: 0;
1023
+ font-size: 20px;
1024
+ }
1025
+ .tabs { width: 100%; gap: 4px; flex-wrap: wrap; }
1026
+ .tab-more { display: none; }
1027
+ .tab-dropdown { display: none !important; }
1028
+ .shell { display: block; height: auto; }
1029
+ .list, .reader, .outline {
1030
+ height: auto;
1031
+ border-right: 0;
1032
+ border-bottom: 1px solid var(--line);
1033
+ }
1034
+ .outline { display: none; }
1035
+ .viewer-frame.outline-open .outline { display: block; }
1036
+ .list, .outline { padding: 20px; }
1037
+ .reader-top { display: block; }
1038
+ .reader-actions { margin: 14px 0 0; }
1039
+ .reader-inner { padding: 32px 24px 56px; }
1040
+ .reader h1 { font-size: 34px; }
1041
+ .properties { grid-template-columns: 1fr; }
1042
+ }