@mahekara28/context-relay 0.0.0-stage → 0.3.0-beta.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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -2
  3. package/README.python.md +246 -0
  4. package/dist/adapters/capture.d.ts +4 -0
  5. package/dist/adapters/capture.js +286 -0
  6. package/dist/adapters/capture.js.map +1 -0
  7. package/dist/adapters/config.d.ts +11 -0
  8. package/dist/adapters/config.js +139 -0
  9. package/dist/adapters/config.js.map +1 -0
  10. package/dist/adapters/manager.d.ts +57 -0
  11. package/dist/adapters/manager.js +220 -0
  12. package/dist/adapters/manager.js.map +1 -0
  13. package/dist/adapters/normalize.d.ts +9 -0
  14. package/dist/adapters/normalize.js +166 -0
  15. package/dist/adapters/normalize.js.map +1 -0
  16. package/dist/adapters/rpc.d.ts +12 -0
  17. package/dist/adapters/rpc.js +100 -0
  18. package/dist/adapters/rpc.js.map +1 -0
  19. package/dist/adapters/types.d.ts +59 -0
  20. package/dist/adapters/types.js +51 -0
  21. package/dist/adapters/types.js.map +1 -0
  22. package/dist/cli.d.ts +2 -0
  23. package/dist/cli.js +427 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/client.d.ts +11 -0
  26. package/dist/client.js +136 -0
  27. package/dist/client.js.map +1 -0
  28. package/dist/delivery.d.ts +9 -0
  29. package/dist/delivery.js +35 -0
  30. package/dist/delivery.js.map +1 -0
  31. package/dist/index.d.ts +5 -0
  32. package/dist/index.js +5 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/mcp.d.ts +3 -0
  35. package/dist/mcp.js +109 -0
  36. package/dist/mcp.js.map +1 -0
  37. package/dist/model.d.ts +169 -0
  38. package/dist/model.js +79 -0
  39. package/dist/model.js.map +1 -0
  40. package/dist/proposals.d.ts +65 -0
  41. package/dist/proposals.js +134 -0
  42. package/dist/proposals.js.map +1 -0
  43. package/dist/server.d.ts +21 -0
  44. package/dist/server.js +375 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/store.d.ts +33 -0
  47. package/dist/store.js +393 -0
  48. package/dist/store.js.map +1 -0
  49. package/dist/ui/app.js +845 -0
  50. package/dist/ui/assets/THIRD_PARTY_LICENSE.txt +25 -0
  51. package/dist/ui/assets/claude.svg +1 -0
  52. package/dist/ui/assets/codex.svg +1 -0
  53. package/dist/ui/assets/goose.svg +1 -0
  54. package/dist/ui/assets/opencode.svg +1 -0
  55. package/dist/ui/assets/relay.svg +1 -0
  56. package/dist/ui/index.html +23 -0
  57. package/dist/ui/style.css +989 -0
  58. package/dist/util.d.ts +16 -0
  59. package/dist/util.js +86 -0
  60. package/dist/util.js.map +1 -0
  61. package/docs/HARNESS_CONNECTIONS.md +53 -0
  62. package/docs/NPM_QUICKSTART.md +150 -0
  63. package/docs/WORKSPACE.md +61 -0
  64. package/docs/releases/NPM_PUBLISHING.md +60 -0
  65. package/package.json +78 -4
@@ -0,0 +1,989 @@
1
+ :root {
2
+ --bg: #f6f5f1;
3
+ --surface: #fff;
4
+ --soft: #f1f0ec;
5
+ --ink: #222827;
6
+ --muted: #717774;
7
+ --line: #e0e3dc;
8
+ --accent: #c84429;
9
+ --accentsoft: #fbede7;
10
+ --good: #33765b;
11
+ --bad: #ab342c;
12
+ --shadow: 0 12px 40px #2028200b;
13
+ color-scheme: light;
14
+ font-family:
15
+ Inter,
16
+ -apple-system,
17
+ BlinkMacSystemFont,
18
+ "Segoe UI",
19
+ sans-serif;
20
+ font-size: 14px;
21
+ line-height: 1.5;
22
+ }
23
+ :root[data-theme="dark"] {
24
+ --bg: #171b1b;
25
+ --surface: #1e2323;
26
+ --soft: #282e2d;
27
+ --ink: #e7ece8;
28
+ --muted: #a1aba5;
29
+ --line: #353e3a;
30
+ --accent: #f18e70;
31
+ --accentsoft: #372a25;
32
+ --good: #8dccaa;
33
+ --bad: #ffa89a;
34
+ --shadow: 0 12px 40px #0002;
35
+ color-scheme: dark;
36
+ }
37
+ * {
38
+ box-sizing: border-box;
39
+ }
40
+ body {
41
+ margin: 0;
42
+ background: var(--bg);
43
+ color: var(--ink);
44
+ }
45
+ button,
46
+ input,
47
+ select,
48
+ textarea {
49
+ font: inherit;
50
+ }
51
+ button,
52
+ a,
53
+ input,
54
+ textarea,
55
+ select {
56
+ touch-action: manipulation;
57
+ }
58
+ button {
59
+ cursor: pointer;
60
+ color: inherit;
61
+ border: 1px solid var(--line);
62
+ background: var(--surface);
63
+ border-radius: 8px;
64
+ padding: 9px 13px;
65
+ font-weight: 550;
66
+ transition: background 0.15s;
67
+ }
68
+ button:hover {
69
+ background: var(--soft);
70
+ }
71
+ button:disabled {
72
+ opacity: 0.5;
73
+ cursor: wait;
74
+ }
75
+ button.primary {
76
+ background: var(--accent);
77
+ border-color: var(--accent);
78
+ color: #fff;
79
+ }
80
+ button.quiet {
81
+ background: transparent;
82
+ border-color: transparent;
83
+ color: var(--muted);
84
+ }
85
+ button.small {
86
+ padding: 5px 9px;
87
+ font-size: 12px;
88
+ }
89
+ button.danger {
90
+ color: var(--bad);
91
+ }
92
+ a {
93
+ color: var(--accent);
94
+ }
95
+ :focus-visible {
96
+ outline: 3px solid var(--accent);
97
+ outline-offset: 3px;
98
+ }
99
+ input,
100
+ select,
101
+ textarea {
102
+ width: 100%;
103
+ padding: 10px 12px;
104
+ border: 1px solid var(--line);
105
+ background: var(--surface);
106
+ color: var(--ink);
107
+ border-radius: 7px;
108
+ }
109
+ textarea {
110
+ resize: vertical;
111
+ min-height: 90px;
112
+ line-height: 1.55;
113
+ }
114
+ input[type="checkbox"],
115
+ input[type="radio"] {
116
+ width: 17px;
117
+ height: 17px;
118
+ accent-color: var(--accent);
119
+ flex: none;
120
+ }
121
+ label {
122
+ display: block;
123
+ font-size: 12px;
124
+ font-weight: 600;
125
+ }
126
+ label input,
127
+ label textarea,
128
+ label select {
129
+ margin-top: 6px;
130
+ font-weight: 400;
131
+ font-size: 14px;
132
+ }
133
+ h1,
134
+ h2,
135
+ h3,
136
+ p {
137
+ margin: 0;
138
+ }
139
+ h1 {
140
+ font-size: 30px;
141
+ line-height: 1.2;
142
+ letter-spacing: -1px;
143
+ font-weight: 650;
144
+ }
145
+ h2 {
146
+ font-size: 19px;
147
+ letter-spacing: -0.4px;
148
+ }
149
+ h3 {
150
+ font-size: 14px;
151
+ }
152
+ p {
153
+ line-height: 1.65;
154
+ }
155
+ .muted,
156
+ .help {
157
+ color: var(--muted);
158
+ }
159
+ .help {
160
+ font-size: 12px;
161
+ font-weight: 400;
162
+ line-height: 1.65;
163
+ margin-top: 6px;
164
+ }
165
+ .mono,
166
+ code,
167
+ pre {
168
+ font-family: "SFMono-Regular", Consolas, monospace;
169
+ font-size: 12px;
170
+ }
171
+ pre {
172
+ white-space: pre-wrap;
173
+ overflow-wrap: anywhere;
174
+ line-height: 1.7;
175
+ }
176
+ .eyebrow {
177
+ font-size: 10px;
178
+ text-transform: uppercase;
179
+ letter-spacing: 1.8px;
180
+ font-weight: 700;
181
+ color: var(--muted);
182
+ }
183
+ .row {
184
+ display: flex;
185
+ align-items: center;
186
+ gap: 12px;
187
+ flex-wrap: wrap;
188
+ }
189
+ .between {
190
+ justify-content: space-between;
191
+ }
192
+ .stack {
193
+ display: grid;
194
+ gap: 18px;
195
+ }
196
+ .grid2 {
197
+ display: grid;
198
+ grid-template-columns: 1fr 1fr;
199
+ gap: 18px;
200
+ }
201
+ .check {
202
+ display: flex;
203
+ align-items: flex-start;
204
+ gap: 9px;
205
+ font-weight: 400;
206
+ font-size: 13px;
207
+ }
208
+ .check input {
209
+ margin-top: 2px;
210
+ }
211
+ .pill {
212
+ display: inline-flex;
213
+ align-items: center;
214
+ gap: 6px;
215
+ font-size: 10px;
216
+ letter-spacing: 0.4px;
217
+ font-weight: 600;
218
+ border: 1px solid var(--line);
219
+ border-radius: 5px;
220
+ padding: 3px 7px;
221
+ white-space: nowrap;
222
+ color: var(--muted);
223
+ }
224
+ .pill.good {
225
+ color: var(--good);
226
+ background: var(--soft);
227
+ }
228
+ .pill.warn {
229
+ color: var(--accent);
230
+ background: var(--accentsoft);
231
+ border-color: transparent;
232
+ }
233
+ .logo {
234
+ width: 21px;
235
+ height: 21px;
236
+ object-fit: contain;
237
+ flex: none;
238
+ }
239
+ :root[data-theme="dark"] .logo {
240
+ filter: invert(1);
241
+ }
242
+ .brand img {
243
+ width: 31px;
244
+ height: 31px;
245
+ }
246
+ .brand {
247
+ display: flex;
248
+ gap: 10px;
249
+ align-items: center;
250
+ font-size: 15px;
251
+ font-weight: 650;
252
+ letter-spacing: -0.3px;
253
+ }
254
+ .shell {
255
+ display: grid;
256
+ grid-template-columns: 226px minmax(0, 1fr);
257
+ min-height: 100vh;
258
+ }
259
+ .sidebar {
260
+ position: sticky;
261
+ top: 0;
262
+ height: 100vh;
263
+ border-right: 1px solid var(--line);
264
+ padding: 28px 18px;
265
+ background: var(--surface);
266
+ display: flex;
267
+ flex-direction: column;
268
+ gap: 27px;
269
+ }
270
+ .sidebar .project {
271
+ padding-top: 6px;
272
+ }
273
+ .sidebar label {
274
+ color: var(--muted);
275
+ font-size: 10px;
276
+ letter-spacing: 1px;
277
+ text-transform: uppercase;
278
+ }
279
+ .sidebar select {
280
+ font-size: 12px;
281
+ letter-spacing: 0;
282
+ text-transform: none;
283
+ }
284
+ .nav {
285
+ display: grid;
286
+ gap: 6px;
287
+ }
288
+ .nav button {
289
+ text-align: left;
290
+ border: 0;
291
+ background: transparent;
292
+ display: flex;
293
+ align-items: center;
294
+ gap: 11px;
295
+ padding: 11px;
296
+ font-size: 13px;
297
+ color: var(--muted);
298
+ }
299
+ .nav button[aria-current="page"] {
300
+ background: var(--accentsoft);
301
+ color: var(--accent);
302
+ }
303
+ .nav .symbol {
304
+ font-size: 17px;
305
+ width: 20px;
306
+ }
307
+ .sidefooter {
308
+ margin-top: auto;
309
+ border-top: 1px solid var(--line);
310
+ padding-top: 18px;
311
+ display: grid;
312
+ gap: 14px;
313
+ }
314
+ .localdot {
315
+ width: 6px;
316
+ height: 6px;
317
+ display: inline-block;
318
+ border-radius: 50%;
319
+ background: var(--good);
320
+ }
321
+ .main {
322
+ min-width: 0;
323
+ }
324
+ .topbar {
325
+ height: 68px;
326
+ display: flex;
327
+ justify-content: space-between;
328
+ align-items: center;
329
+ padding: 0 36px;
330
+ border-bottom: 1px solid var(--line);
331
+ background: var(--surface);
332
+ gap: 12px;
333
+ }
334
+ .breadcrumb {
335
+ color: var(--muted);
336
+ font-size: 12px;
337
+ overflow: hidden;
338
+ text-overflow: ellipsis;
339
+ white-space: nowrap;
340
+ }
341
+ .breadcrumb span {
342
+ color: var(--ink);
343
+ margin-left: 9px;
344
+ }
345
+ .topbar button {
346
+ padding: 6px 10px;
347
+ }
348
+ .content {
349
+ max-width: 1450px;
350
+ margin: auto;
351
+ padding: 36px;
352
+ }
353
+ .pagehead {
354
+ display: flex;
355
+ justify-content: space-between;
356
+ align-items: flex-end;
357
+ gap: 20px;
358
+ margin-bottom: 28px;
359
+ }
360
+ .pagehead .eyebrow {
361
+ margin-bottom: 9px;
362
+ }
363
+ .pagehead p {
364
+ color: var(--muted);
365
+ margin-top: 10px;
366
+ max-width: 620px;
367
+ font-size: 13px;
368
+ }
369
+ .stats {
370
+ display: grid;
371
+ grid-template-columns: repeat(3, 1fr);
372
+ gap: 1px;
373
+ background: var(--line);
374
+ border: 1px solid var(--line);
375
+ border-radius: 12px;
376
+ overflow: hidden;
377
+ margin-bottom: 26px;
378
+ }
379
+ .stat {
380
+ background: var(--surface);
381
+ padding: 19px 23px;
382
+ }
383
+ .stat strong {
384
+ display: block;
385
+ font-size: 25px;
386
+ font-weight: 550;
387
+ letter-spacing: -0.8px;
388
+ margin-top: 5px;
389
+ }
390
+ .stat small {
391
+ color: var(--muted);
392
+ font-size: 11px;
393
+ }
394
+ .panel {
395
+ border: 1px solid var(--line);
396
+ background: var(--surface);
397
+ border-radius: 12px;
398
+ box-shadow: var(--shadow);
399
+ min-width: 0;
400
+ }
401
+ .pad {
402
+ padding: 23px;
403
+ }
404
+ .panelhead {
405
+ padding: 17px 21px;
406
+ border-bottom: 1px solid var(--line);
407
+ }
408
+ .threadlayout {
409
+ display: grid;
410
+ grid-template-columns: 290px minmax(0, 1fr);
411
+ gap: 22px;
412
+ align-items: start;
413
+ }
414
+ .threadlist {
415
+ padding: 10px;
416
+ }
417
+ .search {
418
+ padding: 6px 6px 14px;
419
+ }
420
+ .thread {
421
+ display: block;
422
+ width: 100%;
423
+ text-align: left;
424
+ border: 1px solid transparent;
425
+ border-radius: 8px;
426
+ padding: 15px 12px;
427
+ margin-bottom: 5px;
428
+ background: transparent;
429
+ }
430
+ .thread[aria-pressed="true"] {
431
+ background: var(--soft);
432
+ border-color: var(--line);
433
+ }
434
+ .thread strong {
435
+ font-size: 12px;
436
+ display: block;
437
+ margin: 10px 0 8px;
438
+ line-height: 1.5;
439
+ }
440
+ .thread .meta {
441
+ font-size: 10px;
442
+ color: var(--muted);
443
+ display: flex;
444
+ justify-content: space-between;
445
+ gap: 8px;
446
+ }
447
+ .thread .row {
448
+ font-size: 11px;
449
+ color: var(--muted);
450
+ }
451
+ .timeline {
452
+ padding: 0 23px 24px;
453
+ }
454
+ .event {
455
+ padding: 21px 0 21px 23px;
456
+ border-left: 1px solid var(--line);
457
+ position: relative;
458
+ margin-left: 9px;
459
+ border-bottom: 1px solid var(--line);
460
+ }
461
+ .event:before {
462
+ content: "";
463
+ position: absolute;
464
+ left: -5px;
465
+ top: 26px;
466
+ width: 8px;
467
+ height: 8px;
468
+ background: var(--surface);
469
+ border: 1px solid var(--muted);
470
+ border-radius: 50%;
471
+ }
472
+ .event:has(input:checked):before {
473
+ background: var(--accent);
474
+ border-color: var(--accent);
475
+ }
476
+ .event .row {
477
+ gap: 8px;
478
+ font-size: 11px;
479
+ margin-bottom: 10px;
480
+ }
481
+ .event .check {
482
+ margin-left: auto;
483
+ }
484
+ .event p {
485
+ font-size: 13px;
486
+ white-space: pre-wrap;
487
+ overflow-wrap: anywhere;
488
+ }
489
+ .event .sourceid {
490
+ color: var(--muted);
491
+ font-family: monospace;
492
+ font-size: 10px;
493
+ overflow-wrap: anywhere;
494
+ margin-top: 10px;
495
+ }
496
+ .event details summary {
497
+ cursor: pointer;
498
+ color: var(--muted);
499
+ font-size: 12px;
500
+ }
501
+ .growth {
502
+ margin: 0 23px 8px;
503
+ border-bottom: 1px solid var(--line);
504
+ padding: 18px 0;
505
+ }
506
+ .growth svg {
507
+ display: block;
508
+ width: 100%;
509
+ height: 80px;
510
+ }
511
+ .growth .line {
512
+ fill: none;
513
+ stroke: var(--accent);
514
+ stroke-width: 2;
515
+ }
516
+ .growth .area {
517
+ fill: var(--accentsoft);
518
+ }
519
+ .toolbar {
520
+ padding: 14px 22px;
521
+ border-top: 1px solid var(--line);
522
+ display: flex;
523
+ align-items: center;
524
+ justify-content: space-between;
525
+ gap: 12px;
526
+ }
527
+ .empty {
528
+ padding: 55px 25px;
529
+ text-align: center;
530
+ display: grid;
531
+ justify-items: center;
532
+ gap: 14px;
533
+ color: var(--muted);
534
+ }
535
+ .empty h2 {
536
+ color: var(--ink);
537
+ }
538
+ .empty p {
539
+ max-width: 470px;
540
+ }
541
+ .empty .mark {
542
+ font-size: 32px;
543
+ color: var(--accent);
544
+ }
545
+ .reviewlayout {
546
+ display: grid;
547
+ grid-template-columns: minmax(0, 1.5fr) minmax(270px, 1fr);
548
+ gap: 22px;
549
+ align-items: start;
550
+ }
551
+ .section {
552
+ padding: 23px;
553
+ border-bottom: 1px solid var(--line);
554
+ }
555
+ .section:last-child {
556
+ border: 0;
557
+ }
558
+ .section h3 {
559
+ margin-bottom: 14px;
560
+ }
561
+ .section .number {
562
+ display: inline-block;
563
+ color: var(--accent);
564
+ font-size: 11px;
565
+ font-family: monospace;
566
+ margin-right: 8px;
567
+ }
568
+ .instruction {
569
+ padding: 14px;
570
+ background: var(--soft);
571
+ border-radius: 8px;
572
+ display: grid;
573
+ gap: 10px;
574
+ margin-top: 12px;
575
+ }
576
+ .instruction textarea {
577
+ min-height: 70px;
578
+ background: var(--surface);
579
+ }
580
+ .instruction .cite {
581
+ font-size: 10px;
582
+ color: var(--muted);
583
+ overflow-wrap: anywhere;
584
+ }
585
+ .conflict {
586
+ padding: 15px;
587
+ border: 1px solid var(--accent);
588
+ background: var(--accentsoft);
589
+ border-radius: 8px;
590
+ display: grid;
591
+ gap: 12px;
592
+ }
593
+ .evidencecard {
594
+ padding: 12px 0;
595
+ border-bottom: 1px solid var(--line);
596
+ font-size: 12px;
597
+ }
598
+ .evidencecard p {
599
+ white-space: pre-wrap;
600
+ overflow-wrap: anywhere;
601
+ }
602
+ .evidencecard .mono {
603
+ font-size: 9px;
604
+ color: var(--muted);
605
+ margin-top: 5px;
606
+ }
607
+ .cards {
608
+ display: grid;
609
+ gap: 16px;
610
+ }
611
+ .checkpoint {
612
+ padding: 21px;
613
+ }
614
+ .checkpoint .summary {
615
+ margin: 10px 0 15px;
616
+ font-size: 13px;
617
+ color: var(--muted);
618
+ }
619
+ .handoff {
620
+ padding: 22px;
621
+ }
622
+ .handoff .route {
623
+ font-size: 12px;
624
+ color: var(--muted);
625
+ margin-bottom: 16px;
626
+ }
627
+ .handoff h3 {
628
+ font-size: 16px;
629
+ }
630
+ .handoff .id {
631
+ font-family: monospace;
632
+ font-size: 10px;
633
+ overflow-wrap: anywhere;
634
+ color: var(--muted);
635
+ margin: 10px 0 18px;
636
+ }
637
+ .handoff .prompt {
638
+ background: var(--soft);
639
+ padding: 12px;
640
+ border-radius: 7px;
641
+ font-size: 11px;
642
+ line-height: 1.6;
643
+ margin-bottom: 16px;
644
+ overflow-wrap: anywhere;
645
+ }
646
+ .connection {
647
+ padding: 21px;
648
+ }
649
+ .connection .row strong {
650
+ font-size: 15px;
651
+ }
652
+ .connection .detail {
653
+ font-size: 12px;
654
+ margin: 15px 0;
655
+ color: var(--muted);
656
+ overflow-wrap: anywhere;
657
+ }
658
+ .connection .error {
659
+ color: var(--bad);
660
+ }
661
+ .banner {
662
+ padding: 15px 18px;
663
+ border: 1px solid var(--line);
664
+ background: var(--soft);
665
+ border-radius: 9px;
666
+ font-size: 12px;
667
+ line-height: 1.7;
668
+ }
669
+ .banner.warning {
670
+ background: var(--accentsoft);
671
+ border-color: transparent;
672
+ color: var(--ink);
673
+ }
674
+ .architecture {
675
+ padding: 30px;
676
+ display: grid;
677
+ gap: 24px;
678
+ }
679
+ .harnesses {
680
+ display: grid;
681
+ grid-template-columns: repeat(4, 1fr);
682
+ gap: 12px;
683
+ }
684
+ .harness {
685
+ display: grid;
686
+ justify-items: center;
687
+ text-align: center;
688
+ gap: 9px;
689
+ padding: 17px 10px;
690
+ border: 1px solid var(--line);
691
+ border-radius: 9px;
692
+ font-size: 12px;
693
+ }
694
+ .harness .logo {
695
+ width: 30px;
696
+ height: 30px;
697
+ }
698
+ .lane {
699
+ border: 1px dashed var(--line);
700
+ border-radius: 9px;
701
+ padding: 18px;
702
+ text-align: center;
703
+ }
704
+ .lane h3 {
705
+ margin-bottom: 6px;
706
+ }
707
+ .core {
708
+ background: var(--accentsoft);
709
+ border: 1px solid var(--accent);
710
+ border-radius: 10px;
711
+ padding: 25px;
712
+ text-align: center;
713
+ }
714
+ .flowarrow {
715
+ text-align: center;
716
+ color: var(--muted);
717
+ font-size: 20px;
718
+ }
719
+ .job {
720
+ padding: 14px 0;
721
+ border-bottom: 1px solid var(--line);
722
+ font-size: 12px;
723
+ }
724
+ progress {
725
+ width: 100%;
726
+ height: 6px;
727
+ accent-color: var(--accent);
728
+ }
729
+ .welcome {
730
+ max-width: 460px;
731
+ margin: 15vh auto;
732
+ padding: 30px;
733
+ display: grid;
734
+ gap: 20px;
735
+ }
736
+ .welcome .brand {
737
+ margin-bottom: 20px;
738
+ }
739
+ .welcome h1 {
740
+ font-size: 28px;
741
+ }
742
+ .skip {
743
+ position: absolute;
744
+ top: -50px;
745
+ left: 20px;
746
+ z-index: 99;
747
+ background: var(--surface);
748
+ padding: 10px;
749
+ }
750
+ .skip:focus {
751
+ top: 10px;
752
+ }
753
+ #notice {
754
+ position: fixed;
755
+ bottom: 22px;
756
+ left: 50%;
757
+ transform: translateX(-50%);
758
+ max-width: calc(100vw - 40px);
759
+ width: max-content;
760
+ background: var(--ink);
761
+ color: var(--surface);
762
+ padding: 12px 20px;
763
+ border-radius: 8px;
764
+ box-shadow: var(--shadow);
765
+ font-size: 13px;
766
+ z-index: 50;
767
+ display: none;
768
+ }
769
+ #notice.visible {
770
+ display: block;
771
+ }
772
+ dialog {
773
+ max-width: 700px;
774
+ width: calc(100vw - 36px);
775
+ max-height: 88vh;
776
+ border: 1px solid var(--line);
777
+ border-radius: 14px;
778
+ background: var(--surface);
779
+ color: var(--ink);
780
+ padding: 26px;
781
+ box-shadow: 0 30px 120px #0003;
782
+ }
783
+ dialog::backdrop {
784
+ background: #10191870;
785
+ backdrop-filter: blur(3px);
786
+ }
787
+ dialog h2 {
788
+ margin-bottom: 12px;
789
+ }
790
+ dialog .actions {
791
+ display: flex;
792
+ justify-content: flex-end;
793
+ gap: 10px;
794
+ margin-top: 22px;
795
+ }
796
+ dialog pre {
797
+ max-height: 35vh;
798
+ overflow: auto;
799
+ background: var(--soft);
800
+ padding: 14px;
801
+ border-radius: 7px;
802
+ }
803
+ dialog label {
804
+ margin-top: 15px;
805
+ }
806
+ .tagline {
807
+ font-size: 11px;
808
+ color: var(--muted);
809
+ }
810
+ .sr-only {
811
+ position: absolute;
812
+ width: 1px;
813
+ height: 1px;
814
+ overflow: hidden;
815
+ clip: rect(0, 0, 0, 0);
816
+ }
817
+ @media (min-width: 1450px) {
818
+ .content {
819
+ padding: 44px 48px;
820
+ }
821
+ .threadlayout {
822
+ grid-template-columns: 320px 1fr;
823
+ }
824
+ }
825
+ @media (max-width: 1050px) {
826
+ .shell {
827
+ grid-template-columns: 190px 1fr;
828
+ }
829
+ .sidebar {
830
+ padding: 24px 12px;
831
+ }
832
+ .content {
833
+ padding: 25px;
834
+ }
835
+ .topbar {
836
+ padding: 0 25px;
837
+ }
838
+ .threadlayout {
839
+ grid-template-columns: 235px 1fr;
840
+ gap: 15px;
841
+ }
842
+ .reviewlayout {
843
+ grid-template-columns: 1fr;
844
+ }
845
+ .harnesses {
846
+ grid-template-columns: 1fr 1fr;
847
+ }
848
+ }
849
+ @media (max-width: 760px) {
850
+ .shell {
851
+ display: block;
852
+ }
853
+ .sidebar {
854
+ position: static;
855
+ height: auto;
856
+ padding: 16px;
857
+ border-right: 0;
858
+ border-bottom: 1px solid var(--line);
859
+ gap: 15px;
860
+ }
861
+ .sidebar .brand {
862
+ font-size: 16px;
863
+ }
864
+ .sidebar .project {
865
+ display: flex;
866
+ align-items: center;
867
+ gap: 12px;
868
+ }
869
+ .sidebar .project label {
870
+ flex: 1;
871
+ }
872
+ .sidebar .project select {
873
+ margin-top: 0;
874
+ }
875
+ .nav {
876
+ display: flex;
877
+ overflow: auto;
878
+ gap: 3px;
879
+ }
880
+ .nav button {
881
+ flex: none;
882
+ font-size: 11px;
883
+ padding: 9px;
884
+ }
885
+ .nav .symbol {
886
+ display: none;
887
+ }
888
+ .sidefooter {
889
+ display: none;
890
+ }
891
+ .topbar {
892
+ height: 51px;
893
+ padding: 0 18px;
894
+ }
895
+ .content {
896
+ padding: 23px 16px;
897
+ }
898
+ .pagehead {
899
+ align-items: flex-start;
900
+ flex-direction: column;
901
+ gap: 15px;
902
+ }
903
+ h1 {
904
+ font-size: 27px;
905
+ }
906
+ .stats {
907
+ margin-bottom: 18px;
908
+ }
909
+ .stat {
910
+ padding: 13px;
911
+ }
912
+ .stat strong {
913
+ font-size: 21px;
914
+ }
915
+ .stat small {
916
+ font-size: 10px;
917
+ }
918
+ .threadlayout {
919
+ display: block;
920
+ }
921
+ .threadlist {
922
+ margin-bottom: 18px;
923
+ max-height: 300px;
924
+ overflow: auto;
925
+ }
926
+ .thread {
927
+ padding: 10px;
928
+ }
929
+ .thread strong {
930
+ margin: 6px 0;
931
+ }
932
+ .grid2 {
933
+ grid-template-columns: 1fr;
934
+ }
935
+ .panelhead,
936
+ .section,
937
+ .pad {
938
+ padding: 18px;
939
+ }
940
+ .growth {
941
+ margin-left: 18px;
942
+ margin-right: 18px;
943
+ }
944
+ .timeline {
945
+ padding: 0 18px 18px;
946
+ }
947
+ .toolbar {
948
+ padding: 13px 18px;
949
+ flex-wrap: wrap;
950
+ }
951
+ .architecture {
952
+ padding: 18px;
953
+ }
954
+ .reviewlayout {
955
+ gap: 17px;
956
+ }
957
+ .breadcrumb {
958
+ max-width: 60vw;
959
+ }
960
+ .topbar .pill {
961
+ display: none;
962
+ }
963
+ .welcome {
964
+ margin: 6vh auto;
965
+ }
966
+ .event {
967
+ padding-left: 17px;
968
+ }
969
+ .harnesses {
970
+ gap: 9px;
971
+ }
972
+ .harness {
973
+ font-size: 11px;
974
+ }
975
+ .row {
976
+ gap: 9px;
977
+ }
978
+ }
979
+ @media (prefers-reduced-motion: reduce) {
980
+ * {
981
+ transition: none !important;
982
+ scroll-behavior: auto !important;
983
+ }
984
+ }
985
+
986
+ .spaced,
987
+ .jobs-panel {
988
+ margin-top: 20px;
989
+ }