@atolis-hq/corum 0.1.0 → 0.1.6

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.
package/web/style.css CHANGED
@@ -1,827 +1,827 @@
1
- :root,
2
- [data-theme="light"] {
3
- --paper: #ffffff;
4
- --paper-2: #f7f7f8;
5
- --paper-3: #eeeef1;
6
- --ink: #141519;
7
- --ink-2: #3a3c43;
8
- --ink-3: #6c6f78;
9
- --ink-4: #a8acb5;
10
- --rule: #e4e6ea;
11
- --rule-2: #cdd0d6;
12
- --accent: #e8614a;
13
- --accent-2: #fde6e0;
14
- --accent-ink: #b3422e;
15
- --ok: #3b9a66;
16
- --warn: var(--accent);
17
- --radius: 6px;
18
- color-scheme: light;
19
- }
20
-
21
- body[data-theme="dark"] {
22
- --paper: #15171c;
23
- --paper-2: #1c1f25;
24
- --paper-3: #262a33;
25
- --ink: #f2f3f5;
26
- --ink-2: #d4d6dc;
27
- --ink-3: #9498a2;
28
- --ink-4: #5f636d;
29
- --rule: #2c2f38;
30
- --rule-2: #3d414c;
31
- --accent: #f27561;
32
- --accent-2: #3a221c;
33
- --accent-ink: #ffa796;
34
- --ok: #5bbd85;
35
- --warn: var(--accent);
36
- color-scheme: dark;
37
- }
38
-
39
- * { box-sizing: border-box; }
40
- html,
41
- body {
42
- margin: 0;
43
- padding: 0;
44
- height: 100%;
45
- background: var(--paper);
46
- color: var(--ink);
47
- }
48
-
49
- body {
50
- font-family: "Inter", system-ui, sans-serif;
51
- font-size: 13px;
52
- line-height: 1.45;
53
- -webkit-font-smoothing: antialiased;
54
- }
55
-
56
- button {
57
- font: inherit;
58
- }
59
-
60
- #root {
61
- display: flex;
62
- flex-direction: column;
63
- height: 100vh;
64
- }
65
-
66
- .mono { font-family: "JetBrains Mono", ui-monospace, monospace; }
67
- .label-xs {
68
- color: var(--ink-3);
69
- font-size: 10px;
70
- font-weight: 600;
71
- letter-spacing: 0.12em;
72
- text-transform: uppercase;
73
- }
74
- .label-sm {
75
- color: var(--ink-3);
76
- font-size: 11px;
77
- }
78
-
79
- .topbar {
80
- display: flex;
81
- align-items: center;
82
- gap: 10px;
83
- height: 48px;
84
- padding: 10px 16px;
85
- background: var(--accent);
86
- color: var(--paper);
87
- flex-shrink: 0;
88
- }
89
-
90
- .topbar .brand {
91
- display: flex;
92
- align-items: center;
93
- gap: 8px;
94
- color: #fff;
95
- font-family: 'Space Grotesk', system-ui, sans-serif;
96
- font-size: 18px;
97
- font-weight: 600;
98
- }
99
-
100
- .main {
101
- display: flex;
102
- flex: 1;
103
- min-height: 0;
104
- }
105
-
106
- .nav-rail {
107
- display: flex;
108
- flex-direction: column;
109
- gap: 4px;
110
- width: 72px;
111
- padding: 10px 8px;
112
- background: var(--paper-2);
113
- border-right: 1px solid var(--rule-2);
114
- flex-shrink: 0;
115
- }
116
-
117
- .nav-rail-item {
118
- display: flex;
119
- flex-direction: column;
120
- align-items: center;
121
- justify-content: center;
122
- gap: 5px;
123
- min-height: 54px;
124
- padding: 6px 4px;
125
- border: 1px solid transparent;
126
- border-radius: var(--radius);
127
- color: var(--ink-3);
128
- cursor: pointer;
129
- }
130
-
131
- .nav-rail-item span {
132
- max-width: 58px;
133
- overflow: hidden;
134
- font-size: 10px;
135
- font-weight: 600;
136
- text-overflow: ellipsis;
137
- white-space: nowrap;
138
- }
139
-
140
- .nav-rail-item:hover {
141
- background: var(--paper);
142
- color: var(--ink);
143
- }
144
-
145
- .nav-rail-item.active {
146
- background: var(--accent);
147
- color: var(--paper);
148
- }
149
-
150
- .nav-tree {
151
- width: 280px;
152
- min-width: 280px;
153
- padding: 12px 10px 24px;
154
- overflow: auto;
155
- background: var(--paper);
156
- border-right: 1px solid var(--rule);
157
- }
158
-
159
- .nav-section-head {
160
- display: flex;
161
- align-items: center;
162
- justify-content: space-between;
163
- gap: 8px;
164
- padding: 8px 6px;
165
- color: var(--ink-4);
166
- text-transform: uppercase;
167
- letter-spacing: 0.08em;
168
- font-size: 12px;
169
- font-weight: 700;
170
- cursor: pointer;
171
- }
172
-
173
- .nav-template-head {
174
- display: flex;
175
- align-items: center;
176
- gap: 7px;
177
- padding: 7px 6px 4px 16px;
178
- color: var(--ink-3);
179
- font-size: 10px;
180
- font-weight: 700;
181
- letter-spacing: 0.08em;
182
- text-transform: uppercase;
183
- }
184
-
185
- .nav-subtype-head {
186
- display: flex;
187
- align-items: center;
188
- gap: 7px;
189
- padding: 5px 6px 2px 22px;
190
- color: var(--ink-3);
191
- font-size: 10px;
192
- font-weight: 600;
193
- letter-spacing: 0.06em;
194
- text-transform: uppercase;
195
- }
196
-
197
- .nav-node-item {
198
- margin: 1px 0;
199
- padding: 6px 8px 6px 30px;
200
- overflow: hidden;
201
- border-radius: 4px;
202
- color: var(--ink-2);
203
- cursor: pointer;
204
- font-size: 12px;
205
- text-overflow: ellipsis;
206
- white-space: nowrap;
207
- }
208
-
209
- .nav-node-item:hover {
210
- background: var(--paper-2);
211
- }
212
-
213
- .nav-node-item.active {
214
- background: var(--nav-node-active-bg, var(--ink));
215
- color: var(--paper);
216
- }
217
-
218
- .nav-child-group {
219
- margin: 1px 0 4px;
220
- }
221
-
222
- .nav-child-head {
223
- padding: 4px 8px 2px 42px;
224
- color: var(--ink-4);
225
- font-size: 10px;
226
- font-weight: 700;
227
- text-transform: uppercase;
228
- }
229
-
230
- .nav-node-child {
231
- padding-left: 50px;
232
- }
233
-
234
- .content {
235
- flex: 1;
236
- min-width: 0;
237
- overflow: auto;
238
- padding: 24px 30px 60px;
239
- }
240
-
241
- .content h1 {
242
- margin: 0 0 12px;
243
- font-size: 32px;
244
- line-height: 1.1;
245
- }
246
-
247
- .card {
248
- margin-bottom: 14px;
249
- overflow: hidden;
250
- border: 1px solid var(--rule-2);
251
- border-radius: 8px;
252
- background: var(--paper);
253
- }
254
-
255
- .card-head {
256
- padding: 10px 14px;
257
- background: var(--paper-2);
258
- border-bottom: 1px solid var(--rule);
259
- color: var(--ink-3);
260
- font-size: 11px;
261
- font-weight: 700;
262
- letter-spacing: 0.08em;
263
- text-transform: uppercase;
264
- }
265
-
266
- .card-body {
267
- background: var(--paper);
268
- }
269
-
270
- .tag {
271
- display: inline-block;
272
- padding: 1px 7px;
273
- border: 1px solid var(--rule-2);
274
- border-radius: 3px;
275
- background: var(--paper);
276
- color: var(--ink-2);
277
- font-size: 10px;
278
- font-weight: 600;
279
- letter-spacing: 0.04em;
280
- text-transform: uppercase;
281
- }
282
-
283
- .tag.state-draft { background: var(--paper-3); color: var(--ink-2); }
284
- .tag.state-proposed { background: var(--accent-2); border-color: var(--accent); color: var(--accent-ink); }
285
- .tag.state-agreed { background: color-mix(in oklch, var(--ok) 18%, var(--paper)); border-color: var(--ok); color: var(--ink); }
286
- .tag.state-implemented { background: var(--ink); border-color: var(--ink); color: var(--paper); }
287
- .tag.state-future { background: transparent; border-style: dashed; color: var(--ink-3); }
288
- .tag.state-removed { text-decoration: line-through; color: var(--ink-3); }
289
- .tag.stability-stable { background: transparent; }
290
- .tag.stability-unstable { border-style: dashed; color: var(--ink-3); }
291
- .tag.stability-deprecated { color: var(--ink-3); text-decoration: line-through; }
292
-
293
- .chip,
294
- .template-badge {
295
- display: inline-flex;
296
- align-items: center;
297
- gap: 6px;
298
- min-height: 20px;
299
- padding: 2px 8px;
300
- border: 1px solid var(--rule-2);
301
- border-radius: 999px;
302
- background: var(--paper);
303
- color: var(--ink-2);
304
- font-size: 11px;
305
- font-weight: 600;
306
- }
307
-
308
- .template-badge {
309
- border-color: transparent;
310
- color: #fff;
311
- }
312
-
313
- .prop-table {
314
- width: 100%;
315
- border-collapse: collapse;
316
- }
317
-
318
- .prop-table td {
319
- vertical-align: top;
320
- padding: 8px 14px;
321
- border-bottom: 1px dashed var(--rule);
322
- font-size: 12px;
323
- }
324
-
325
- .prop-table tr:last-child td {
326
- border-bottom: none;
327
- }
328
-
329
- .prop-table td:first-child {
330
- width: 220px;
331
- color: var(--ink-3);
332
- font-size: 11px;
333
- font-weight: 600;
334
- }
335
-
336
- .prop-table pre {
337
- margin: 0;
338
- white-space: pre-wrap;
339
- word-break: break-word;
340
- }
341
-
342
- .prop-row.nested {
343
- background: color-mix(in oklch, var(--accent) 2%, var(--paper));
344
- }
345
-
346
- .prop-key-cell {
347
- padding-left: 14px;
348
- }
349
-
350
- .prop-key-label {
351
- display: block;
352
- padding-left: calc(var(--prop-depth, 0) * 24px);
353
- }
354
-
355
- .node-ref-link {
356
- cursor: pointer;
357
- color: var(--accent);
358
- text-decoration: underline;
359
- font-size: inherit;
360
- }
361
-
362
- .prop-empty { color: var(--ink-4); }
363
-
364
- .schema-card .card-body {
365
- padding: 0;
366
- }
367
-
368
- .schema-section {
369
- border-bottom: 1px solid var(--rule-2);
370
- }
371
-
372
- .schema-section:last-child {
373
- border-bottom: none;
374
- }
375
-
376
- .enum-card .card-body {
377
- padding: 0;
378
- }
379
-
380
- .enum-section {
381
- border-bottom: 1px solid var(--rule-2);
382
- }
383
-
384
- .enum-section:last-child {
385
- border-bottom: none;
386
- }
387
-
388
- .enum-row {
389
- display: grid;
390
- grid-template-columns: minmax(160px, 0.8fr) minmax(220px, 1.6fr) 100px;
391
- gap: 12px;
392
- align-items: center;
393
- padding: 8px 14px;
394
- border-bottom: 1px dashed var(--rule);
395
- font-size: 12px;
396
- }
397
-
398
- .enum-row:last-child {
399
- border-bottom: none;
400
- }
401
-
402
- .enum-row-head {
403
- background: var(--paper-2);
404
- font-weight: 600;
405
- }
406
-
407
- .enum-row .name {
408
- color: var(--ink);
409
- font-family: "JetBrains Mono", ui-monospace, monospace;
410
- font-size: 11.5px;
411
- font-weight: 600;
412
- }
413
-
414
- .enum-row .description {
415
- min-width: 0;
416
- overflow-wrap: anywhere;
417
- color: var(--ink-2);
418
- }
419
-
420
- .schema-section-head {
421
- display: flex;
422
- align-items: flex-start;
423
- justify-content: space-between;
424
- gap: 16px;
425
- padding: 12px 14px;
426
- background: var(--paper);
427
- }
428
-
429
- .schema-title {
430
- margin-bottom: 2px;
431
- color: var(--ink);
432
- font-size: 18px;
433
- font-weight: 700;
434
- }
435
-
436
- .field-row {
437
- display: grid;
438
- grid-template-columns: 18px minmax(180px, 1.3fr) minmax(90px, 0.8fr) 96px 80px 100px minmax(160px, 1fr);
439
- gap: 10px;
440
- align-items: center;
441
- padding: 8px 14px;
442
- border-bottom: 1px dashed var(--rule);
443
- font-size: 12px;
444
- }
445
-
446
- .field-row:last-child {
447
- border-bottom: none;
448
- }
449
-
450
- .field-row-head {
451
- background: var(--paper-2);
452
- font-weight: 600;
453
- }
454
-
455
- .field-row.nested {
456
- background: color-mix(in oklch, var(--accent) 3%, var(--paper));
457
- }
458
-
459
- .field-row .gutter {
460
- display: flex;
461
- align-items: center;
462
- justify-content: center;
463
- color: var(--ink-4);
464
- }
465
-
466
- .field-row .name {
467
- min-width: 0;
468
- overflow-wrap: anywhere;
469
- color: var(--ink);
470
- font-weight: 600;
471
- }
472
-
473
- .field-row.nested .name {
474
- padding-left: calc(var(--field-depth, 1) * 24px);
475
- }
476
-
477
- .field-row .type {
478
- overflow-wrap: anywhere;
479
- color: var(--ink-3);
480
- font-family: "JetBrains Mono", ui-monospace, monospace;
481
- font-size: 11.5px;
482
- }
483
-
484
- .field-row .cardinality,
485
- .field-row .req {
486
- color: var(--ink-3);
487
- font-family: "JetBrains Mono", ui-monospace, monospace;
488
- font-size: 10.5px;
489
- }
490
-
491
- .field-row .state {
492
- min-width: 0;
493
- }
494
-
495
- .field-row .lineage {
496
- min-width: 0;
497
- overflow-wrap: anywhere;
498
- color: var(--ink-3);
499
- font-family: "JetBrains Mono", ui-monospace, monospace;
500
- font-size: 11px;
501
- }
502
-
503
- .meta-strip {
504
- display: grid;
505
- grid-template-columns: repeat(5, minmax(110px, 1fr));
506
- margin-bottom: 16px;
507
- border: 1px solid var(--rule-2);
508
- border-radius: 8px;
509
- overflow: hidden;
510
- }
511
-
512
- .meta-cell {
513
- min-width: 0;
514
- padding: 10px 12px;
515
- border-right: 1px solid var(--rule);
516
- background: var(--paper-2);
517
- }
518
-
519
- .meta-cell:last-child {
520
- border-right: none;
521
- }
522
-
523
- .empty-state {
524
- padding: 14px;
525
- border: 1px dashed var(--rule-2);
526
- border-radius: 8px;
527
- color: var(--ink-3);
528
- }
529
-
530
- @media (max-width: 780px) {
531
- .main {
532
- flex-direction: column;
533
- }
534
-
535
- .nav-rail {
536
- flex-direction: row;
537
- width: 100%;
538
- min-height: 64px;
539
- border-right: none;
540
- border-bottom: 1px solid var(--rule-2);
541
- }
542
-
543
- .nav-rail-item {
544
- flex: 1;
545
- }
546
-
547
- .nav-tree {
548
- width: 100%;
549
- max-height: 260px;
550
- border-right: none;
551
- border-bottom: 1px solid var(--rule);
552
- }
553
-
554
- .content {
555
- padding: 20px 16px 40px;
556
- }
557
-
558
- .meta-strip {
559
- grid-template-columns: 1fr;
560
- }
561
-
562
- .meta-cell {
563
- border-right: none;
564
- border-bottom: 1px solid var(--rule);
565
- }
566
-
567
- .meta-cell:last-child {
568
- border-bottom: none;
569
- }
570
- }
571
-
572
- .branch-bar {
573
- height: 38px;
574
- display: flex;
575
- align-items: center;
576
- gap: 8px;
577
- padding: 0 14px;
578
- background: var(--paper-2);
579
- border-bottom: 1px solid var(--rule);
580
- flex-shrink: 0;
581
- font-size: 11.5px;
582
- position: relative;
583
- overflow: visible;
584
- z-index: 20;
585
- }
586
-
587
- .branch-bar-spacer {
588
- flex: 1;
589
- }
590
-
591
- .branch-chip {
592
- display: inline-flex;
593
- align-items: center;
594
- gap: 4px;
595
- padding: 2px 8px;
596
- border-radius: 4px;
597
- font-size: 11px;
598
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
599
- cursor: pointer;
600
- user-select: none;
601
- white-space: nowrap;
602
- }
603
-
604
- .branch-chip.viewing {
605
- background: var(--ink);
606
- color: var(--paper);
607
- font-weight: 600;
608
- }
609
-
610
- .branch-failed-badge {
611
- display: inline-flex;
612
- align-items: center;
613
- padding: 2px 7px;
614
- border: 1px solid color-mix(in oklch, var(--accent) 35%, transparent);
615
- border-radius: 999px;
616
- background: color-mix(in oklch, var(--accent) 12%, var(--paper));
617
- color: var(--accent-ink);
618
- font-size: 10px;
619
- font-weight: 700;
620
- letter-spacing: 0.04em;
621
- text-transform: uppercase;
622
- }
623
-
624
- .branch-chip.overlay {
625
- background: color-mix(in oklch, var(--accent) 15%, var(--paper));
626
- color: var(--accent);
627
- border: 1px solid color-mix(in oklch, var(--accent) 40%, transparent);
628
- }
629
-
630
- .branch-chip-select {
631
- border: 1px dashed color-mix(in oklch, var(--accent) 45%, transparent);
632
- }
633
-
634
- .branch-chip.overlay:hover {
635
- background: color-mix(in oklch, var(--accent) 22%, var(--paper));
636
- }
637
-
638
- .branch-chip.reload {
639
- background: var(--paper);
640
- color: var(--ink-2);
641
- border: 1px solid color-mix(in oklch, var(--ink) 18%, transparent);
642
- cursor: pointer;
643
- }
644
-
645
- .branch-chip.reload:hover {
646
- background: color-mix(in oklch, var(--ink) 10%, var(--paper));
647
- }
648
-
649
- .branch-chip.more {
650
- background: var(--paper-3);
651
- color: var(--ink-3);
652
- border: 1px solid var(--rule);
653
- }
654
-
655
- .branch-chip-remove {
656
- opacity: 0.55;
657
- font-size: 10px;
658
- margin-left: 2px;
659
- line-height: 1;
660
- }
661
-
662
- .branch-chip-remove:hover {
663
- opacity: 1;
664
- }
665
-
666
- .branch-seg {
667
- display: flex;
668
- gap: 1px;
669
- background: var(--rule);
670
- border-radius: 5px;
671
- overflow: hidden;
672
- font-size: 10.5px;
673
- }
674
-
675
- .branch-seg-item {
676
- padding: 3px 9px;
677
- background: var(--paper);
678
- color: var(--ink-2);
679
- cursor: pointer;
680
- user-select: none;
681
- white-space: nowrap;
682
- }
683
-
684
- .branch-seg-item.active {
685
- background: var(--accent);
686
- color: #fff;
687
- font-weight: 600;
688
- }
689
-
690
- .branch-label {
691
- color: var(--ink-3);
692
- font-size: 10px;
693
- text-transform: uppercase;
694
- letter-spacing: 0.06em;
695
- white-space: nowrap;
696
- }
697
-
698
- .branch-picker {
699
- position: absolute;
700
- top: calc(100% + 4px);
701
- left: 0;
702
- z-index: 100;
703
- background: var(--paper);
704
- border: 1px solid var(--rule-2);
705
- border-radius: 6px;
706
- box-shadow: 0 4px 16px rgba(0,0,0,0.12);
707
- min-width: 320px;
708
- overflow: hidden;
709
- }
710
-
711
- .branch-picker-item {
712
- padding: 7px 12px;
713
- cursor: pointer;
714
- font-size: 11.5px;
715
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
716
- display: flex;
717
- align-items: center;
718
- gap: 8px;
719
- }
720
-
721
- .branch-picker-main {
722
- overflow-wrap: anywhere;
723
- }
724
-
725
- .branch-picker-item:hover {
726
- background: var(--paper-2);
727
- }
728
-
729
- .branch-picker-item.active {
730
- color: var(--accent);
731
- font-weight: 600;
732
- }
733
-
734
- .branch-picker-item-selectable {
735
- justify-content: space-between;
736
- }
737
-
738
- .branch-picker-check {
739
- flex-shrink: 0;
740
- accent-color: var(--accent);
741
- }
742
-
743
- .branch-picker-item-disabled {
744
- display: block;
745
- cursor: not-allowed;
746
- background: color-mix(in oklch, var(--accent) 5%, var(--paper));
747
- }
748
-
749
- .branch-picker-item-disabled:hover {
750
- background: color-mix(in oklch, var(--accent) 5%, var(--paper));
751
- }
752
-
753
- .branch-picker-error {
754
- margin-top: 2px;
755
- color: var(--ink-3);
756
- font-family: inherit;
757
- font-size: 10px;
758
- line-height: 1.35;
759
- white-space: normal;
760
- overflow-wrap: anywhere;
761
- }
762
-
763
- .signal-dots {
764
- display: inline-flex;
765
- align-items: center;
766
- gap: 2px;
767
- margin-left: 4px;
768
- }
769
-
770
- .signal-dot {
771
- width: 5px;
772
- height: 5px;
773
- border-radius: 50%;
774
- flex-shrink: 0;
775
- }
776
-
777
- .signal-dot-0 { background: var(--accent); }
778
- .signal-dot-1 { background: #5c7aa8; }
779
-
780
- .field-row.overlay-ghost {
781
- opacity: 0.7;
782
- background: color-mix(in oklch, var(--ink) 6%, var(--paper));
783
- }
784
-
785
- .field-row.overlay-ghost .name {
786
- font-style: italic;
787
- }
788
-
789
- .overlay-stripe-0 {
790
- border-left: 3px solid var(--accent);
791
- background: color-mix(in oklch, var(--ink) 8%, var(--paper));
792
- }
793
-
794
- .overlay-stripe-1 {
795
- border-left: 3px solid #5c7aa8;
796
- background: color-mix(in oklch, var(--ink) 8%, var(--paper));
797
- }
798
-
799
- .overlay-conflict {
800
- border-left: 3px solid #c44;
801
- background: color-mix(in oklch, #c44 5%, var(--paper));
802
- }
803
-
804
- .overlay-legend {
805
- display: flex;
806
- align-items: center;
807
- gap: 10px;
808
- padding: 6px 12px;
809
- background: var(--paper-2);
810
- border-bottom: 1px dashed var(--rule);
811
- flex-wrap: wrap;
812
- }
813
-
814
- .overlay-legend-item {
815
- display: inline-flex;
816
- align-items: center;
817
- gap: 5px;
818
- font-size: 10.5px;
819
- color: var(--ink-2);
820
- }
821
-
822
- .overlay-legend-swatch {
823
- width: 10px;
824
- height: 10px;
825
- border-radius: 2px;
826
- flex-shrink: 0;
827
- }
1
+ :root,
2
+ [data-theme="light"] {
3
+ --paper: #ffffff;
4
+ --paper-2: #f7f7f8;
5
+ --paper-3: #eeeef1;
6
+ --ink: #141519;
7
+ --ink-2: #3a3c43;
8
+ --ink-3: #6c6f78;
9
+ --ink-4: #a8acb5;
10
+ --rule: #e4e6ea;
11
+ --rule-2: #cdd0d6;
12
+ --accent: #e8614a;
13
+ --accent-2: #fde6e0;
14
+ --accent-ink: #b3422e;
15
+ --ok: #3b9a66;
16
+ --warn: var(--accent);
17
+ --radius: 6px;
18
+ color-scheme: light;
19
+ }
20
+
21
+ body[data-theme="dark"] {
22
+ --paper: #15171c;
23
+ --paper-2: #1c1f25;
24
+ --paper-3: #262a33;
25
+ --ink: #f2f3f5;
26
+ --ink-2: #d4d6dc;
27
+ --ink-3: #9498a2;
28
+ --ink-4: #5f636d;
29
+ --rule: #2c2f38;
30
+ --rule-2: #3d414c;
31
+ --accent: #f27561;
32
+ --accent-2: #3a221c;
33
+ --accent-ink: #ffa796;
34
+ --ok: #5bbd85;
35
+ --warn: var(--accent);
36
+ color-scheme: dark;
37
+ }
38
+
39
+ * { box-sizing: border-box; }
40
+ html,
41
+ body {
42
+ margin: 0;
43
+ padding: 0;
44
+ height: 100%;
45
+ background: var(--paper);
46
+ color: var(--ink);
47
+ }
48
+
49
+ body {
50
+ font-family: "Inter", system-ui, sans-serif;
51
+ font-size: 13px;
52
+ line-height: 1.45;
53
+ -webkit-font-smoothing: antialiased;
54
+ }
55
+
56
+ button {
57
+ font: inherit;
58
+ }
59
+
60
+ #root {
61
+ display: flex;
62
+ flex-direction: column;
63
+ height: 100vh;
64
+ }
65
+
66
+ .mono { font-family: "JetBrains Mono", ui-monospace, monospace; }
67
+ .label-xs {
68
+ color: var(--ink-3);
69
+ font-size: 10px;
70
+ font-weight: 600;
71
+ letter-spacing: 0.12em;
72
+ text-transform: uppercase;
73
+ }
74
+ .label-sm {
75
+ color: var(--ink-3);
76
+ font-size: 11px;
77
+ }
78
+
79
+ .topbar {
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 10px;
83
+ height: 48px;
84
+ padding: 10px 16px;
85
+ background: var(--accent);
86
+ color: var(--paper);
87
+ flex-shrink: 0;
88
+ }
89
+
90
+ .topbar .brand {
91
+ display: flex;
92
+ align-items: center;
93
+ gap: 8px;
94
+ color: #fff;
95
+ font-family: 'Space Grotesk', system-ui, sans-serif;
96
+ font-size: 18px;
97
+ font-weight: 600;
98
+ }
99
+
100
+ .main {
101
+ display: flex;
102
+ flex: 1;
103
+ min-height: 0;
104
+ }
105
+
106
+ .nav-rail {
107
+ display: flex;
108
+ flex-direction: column;
109
+ gap: 4px;
110
+ width: 72px;
111
+ padding: 10px 8px;
112
+ background: var(--paper-2);
113
+ border-right: 1px solid var(--rule-2);
114
+ flex-shrink: 0;
115
+ }
116
+
117
+ .nav-rail-item {
118
+ display: flex;
119
+ flex-direction: column;
120
+ align-items: center;
121
+ justify-content: center;
122
+ gap: 5px;
123
+ min-height: 54px;
124
+ padding: 6px 4px;
125
+ border: 1px solid transparent;
126
+ border-radius: var(--radius);
127
+ color: var(--ink-3);
128
+ cursor: pointer;
129
+ }
130
+
131
+ .nav-rail-item span {
132
+ max-width: 58px;
133
+ overflow: hidden;
134
+ font-size: 10px;
135
+ font-weight: 600;
136
+ text-overflow: ellipsis;
137
+ white-space: nowrap;
138
+ }
139
+
140
+ .nav-rail-item:hover {
141
+ background: var(--paper);
142
+ color: var(--ink);
143
+ }
144
+
145
+ .nav-rail-item.active {
146
+ background: var(--accent);
147
+ color: var(--paper);
148
+ }
149
+
150
+ .nav-tree {
151
+ width: 280px;
152
+ min-width: 280px;
153
+ padding: 12px 10px 24px;
154
+ overflow: auto;
155
+ background: var(--paper);
156
+ border-right: 1px solid var(--rule);
157
+ }
158
+
159
+ .nav-section-head {
160
+ display: flex;
161
+ align-items: center;
162
+ justify-content: space-between;
163
+ gap: 8px;
164
+ padding: 8px 6px;
165
+ color: var(--ink-4);
166
+ text-transform: uppercase;
167
+ letter-spacing: 0.08em;
168
+ font-size: 12px;
169
+ font-weight: 700;
170
+ cursor: pointer;
171
+ }
172
+
173
+ .nav-template-head {
174
+ display: flex;
175
+ align-items: center;
176
+ gap: 7px;
177
+ padding: 7px 6px 4px 16px;
178
+ color: var(--ink-3);
179
+ font-size: 10px;
180
+ font-weight: 700;
181
+ letter-spacing: 0.08em;
182
+ text-transform: uppercase;
183
+ }
184
+
185
+ .nav-subtype-head {
186
+ display: flex;
187
+ align-items: center;
188
+ gap: 7px;
189
+ padding: 5px 6px 2px 22px;
190
+ color: var(--ink-3);
191
+ font-size: 10px;
192
+ font-weight: 600;
193
+ letter-spacing: 0.06em;
194
+ text-transform: uppercase;
195
+ }
196
+
197
+ .nav-node-item {
198
+ margin: 1px 0;
199
+ padding: 6px 8px 6px 30px;
200
+ overflow: hidden;
201
+ border-radius: 4px;
202
+ color: var(--ink-2);
203
+ cursor: pointer;
204
+ font-size: 12px;
205
+ text-overflow: ellipsis;
206
+ white-space: nowrap;
207
+ }
208
+
209
+ .nav-node-item:hover {
210
+ background: var(--paper-2);
211
+ }
212
+
213
+ .nav-node-item.active {
214
+ background: var(--nav-node-active-bg, var(--ink));
215
+ color: var(--paper);
216
+ }
217
+
218
+ .nav-child-group {
219
+ margin: 1px 0 4px;
220
+ }
221
+
222
+ .nav-child-head {
223
+ padding: 4px 8px 2px 42px;
224
+ color: var(--ink-4);
225
+ font-size: 10px;
226
+ font-weight: 700;
227
+ text-transform: uppercase;
228
+ }
229
+
230
+ .nav-node-child {
231
+ padding-left: 50px;
232
+ }
233
+
234
+ .content {
235
+ flex: 1;
236
+ min-width: 0;
237
+ overflow: auto;
238
+ padding: 24px 30px 60px;
239
+ }
240
+
241
+ .content h1 {
242
+ margin: 0 0 12px;
243
+ font-size: 32px;
244
+ line-height: 1.1;
245
+ }
246
+
247
+ .card {
248
+ margin-bottom: 14px;
249
+ overflow: hidden;
250
+ border: 1px solid var(--rule-2);
251
+ border-radius: 8px;
252
+ background: var(--paper);
253
+ }
254
+
255
+ .card-head {
256
+ padding: 10px 14px;
257
+ background: var(--paper-2);
258
+ border-bottom: 1px solid var(--rule);
259
+ color: var(--ink-3);
260
+ font-size: 11px;
261
+ font-weight: 700;
262
+ letter-spacing: 0.08em;
263
+ text-transform: uppercase;
264
+ }
265
+
266
+ .card-body {
267
+ background: var(--paper);
268
+ }
269
+
270
+ .tag {
271
+ display: inline-block;
272
+ padding: 1px 7px;
273
+ border: 1px solid var(--rule-2);
274
+ border-radius: 3px;
275
+ background: var(--paper);
276
+ color: var(--ink-2);
277
+ font-size: 10px;
278
+ font-weight: 600;
279
+ letter-spacing: 0.04em;
280
+ text-transform: uppercase;
281
+ }
282
+
283
+ .tag.state-draft { background: var(--paper-3); color: var(--ink-2); }
284
+ .tag.state-proposed { background: var(--accent-2); border-color: var(--accent); color: var(--accent-ink); }
285
+ .tag.state-agreed { background: color-mix(in oklch, var(--ok) 18%, var(--paper)); border-color: var(--ok); color: var(--ink); }
286
+ .tag.state-implemented { background: var(--ink); border-color: var(--ink); color: var(--paper); }
287
+ .tag.state-future { background: transparent; border-style: dashed; color: var(--ink-3); }
288
+ .tag.state-removed { text-decoration: line-through; color: var(--ink-3); }
289
+ .tag.stability-stable { background: transparent; }
290
+ .tag.stability-unstable { border-style: dashed; color: var(--ink-3); }
291
+ .tag.stability-deprecated { color: var(--ink-3); text-decoration: line-through; }
292
+
293
+ .chip,
294
+ .template-badge {
295
+ display: inline-flex;
296
+ align-items: center;
297
+ gap: 6px;
298
+ min-height: 20px;
299
+ padding: 2px 8px;
300
+ border: 1px solid var(--rule-2);
301
+ border-radius: 999px;
302
+ background: var(--paper);
303
+ color: var(--ink-2);
304
+ font-size: 11px;
305
+ font-weight: 600;
306
+ }
307
+
308
+ .template-badge {
309
+ border-color: transparent;
310
+ color: #fff;
311
+ }
312
+
313
+ .prop-table {
314
+ width: 100%;
315
+ border-collapse: collapse;
316
+ }
317
+
318
+ .prop-table td {
319
+ vertical-align: top;
320
+ padding: 8px 14px;
321
+ border-bottom: 1px dashed var(--rule);
322
+ font-size: 12px;
323
+ }
324
+
325
+ .prop-table tr:last-child td {
326
+ border-bottom: none;
327
+ }
328
+
329
+ .prop-table td:first-child {
330
+ width: 220px;
331
+ color: var(--ink-3);
332
+ font-size: 11px;
333
+ font-weight: 600;
334
+ }
335
+
336
+ .prop-table pre {
337
+ margin: 0;
338
+ white-space: pre-wrap;
339
+ word-break: break-word;
340
+ }
341
+
342
+ .prop-row.nested {
343
+ background: color-mix(in oklch, var(--accent) 2%, var(--paper));
344
+ }
345
+
346
+ .prop-key-cell {
347
+ padding-left: 14px;
348
+ }
349
+
350
+ .prop-key-label {
351
+ display: block;
352
+ padding-left: calc(var(--prop-depth, 0) * 24px);
353
+ }
354
+
355
+ .node-ref-link {
356
+ cursor: pointer;
357
+ color: var(--accent);
358
+ text-decoration: underline;
359
+ font-size: inherit;
360
+ }
361
+
362
+ .prop-empty { color: var(--ink-4); }
363
+
364
+ .schema-card .card-body {
365
+ padding: 0;
366
+ }
367
+
368
+ .schema-section {
369
+ border-bottom: 1px solid var(--rule-2);
370
+ }
371
+
372
+ .schema-section:last-child {
373
+ border-bottom: none;
374
+ }
375
+
376
+ .enum-card .card-body {
377
+ padding: 0;
378
+ }
379
+
380
+ .enum-section {
381
+ border-bottom: 1px solid var(--rule-2);
382
+ }
383
+
384
+ .enum-section:last-child {
385
+ border-bottom: none;
386
+ }
387
+
388
+ .enum-row {
389
+ display: grid;
390
+ grid-template-columns: minmax(160px, 0.8fr) minmax(220px, 1.6fr) 100px;
391
+ gap: 12px;
392
+ align-items: center;
393
+ padding: 8px 14px;
394
+ border-bottom: 1px dashed var(--rule);
395
+ font-size: 12px;
396
+ }
397
+
398
+ .enum-row:last-child {
399
+ border-bottom: none;
400
+ }
401
+
402
+ .enum-row-head {
403
+ background: var(--paper-2);
404
+ font-weight: 600;
405
+ }
406
+
407
+ .enum-row .name {
408
+ color: var(--ink);
409
+ font-family: "JetBrains Mono", ui-monospace, monospace;
410
+ font-size: 11.5px;
411
+ font-weight: 600;
412
+ }
413
+
414
+ .enum-row .description {
415
+ min-width: 0;
416
+ overflow-wrap: anywhere;
417
+ color: var(--ink-2);
418
+ }
419
+
420
+ .schema-section-head {
421
+ display: flex;
422
+ align-items: flex-start;
423
+ justify-content: space-between;
424
+ gap: 16px;
425
+ padding: 12px 14px;
426
+ background: var(--paper);
427
+ }
428
+
429
+ .schema-title {
430
+ margin-bottom: 2px;
431
+ color: var(--ink);
432
+ font-size: 18px;
433
+ font-weight: 700;
434
+ }
435
+
436
+ .field-row {
437
+ display: grid;
438
+ grid-template-columns: 18px minmax(180px, 1.3fr) minmax(90px, 0.8fr) 96px 80px 100px minmax(160px, 1fr);
439
+ gap: 10px;
440
+ align-items: center;
441
+ padding: 8px 14px;
442
+ border-bottom: 1px dashed var(--rule);
443
+ font-size: 12px;
444
+ }
445
+
446
+ .field-row:last-child {
447
+ border-bottom: none;
448
+ }
449
+
450
+ .field-row-head {
451
+ background: var(--paper-2);
452
+ font-weight: 600;
453
+ }
454
+
455
+ .field-row.nested {
456
+ background: color-mix(in oklch, var(--accent) 3%, var(--paper));
457
+ }
458
+
459
+ .field-row .gutter {
460
+ display: flex;
461
+ align-items: center;
462
+ justify-content: center;
463
+ color: var(--ink-4);
464
+ }
465
+
466
+ .field-row .name {
467
+ min-width: 0;
468
+ overflow-wrap: anywhere;
469
+ color: var(--ink);
470
+ font-weight: 600;
471
+ }
472
+
473
+ .field-row.nested .name {
474
+ padding-left: calc(var(--field-depth, 1) * 24px);
475
+ }
476
+
477
+ .field-row .type {
478
+ overflow-wrap: anywhere;
479
+ color: var(--ink-3);
480
+ font-family: "JetBrains Mono", ui-monospace, monospace;
481
+ font-size: 11.5px;
482
+ }
483
+
484
+ .field-row .cardinality,
485
+ .field-row .req {
486
+ color: var(--ink-3);
487
+ font-family: "JetBrains Mono", ui-monospace, monospace;
488
+ font-size: 10.5px;
489
+ }
490
+
491
+ .field-row .state {
492
+ min-width: 0;
493
+ }
494
+
495
+ .field-row .lineage {
496
+ min-width: 0;
497
+ overflow-wrap: anywhere;
498
+ color: var(--ink-3);
499
+ font-family: "JetBrains Mono", ui-monospace, monospace;
500
+ font-size: 11px;
501
+ }
502
+
503
+ .meta-strip {
504
+ display: grid;
505
+ grid-template-columns: repeat(5, minmax(110px, 1fr));
506
+ margin-bottom: 16px;
507
+ border: 1px solid var(--rule-2);
508
+ border-radius: 8px;
509
+ overflow: hidden;
510
+ }
511
+
512
+ .meta-cell {
513
+ min-width: 0;
514
+ padding: 10px 12px;
515
+ border-right: 1px solid var(--rule);
516
+ background: var(--paper-2);
517
+ }
518
+
519
+ .meta-cell:last-child {
520
+ border-right: none;
521
+ }
522
+
523
+ .empty-state {
524
+ padding: 14px;
525
+ border: 1px dashed var(--rule-2);
526
+ border-radius: 8px;
527
+ color: var(--ink-3);
528
+ }
529
+
530
+ @media (max-width: 780px) {
531
+ .main {
532
+ flex-direction: column;
533
+ }
534
+
535
+ .nav-rail {
536
+ flex-direction: row;
537
+ width: 100%;
538
+ min-height: 64px;
539
+ border-right: none;
540
+ border-bottom: 1px solid var(--rule-2);
541
+ }
542
+
543
+ .nav-rail-item {
544
+ flex: 1;
545
+ }
546
+
547
+ .nav-tree {
548
+ width: 100%;
549
+ max-height: 260px;
550
+ border-right: none;
551
+ border-bottom: 1px solid var(--rule);
552
+ }
553
+
554
+ .content {
555
+ padding: 20px 16px 40px;
556
+ }
557
+
558
+ .meta-strip {
559
+ grid-template-columns: 1fr;
560
+ }
561
+
562
+ .meta-cell {
563
+ border-right: none;
564
+ border-bottom: 1px solid var(--rule);
565
+ }
566
+
567
+ .meta-cell:last-child {
568
+ border-bottom: none;
569
+ }
570
+ }
571
+
572
+ .branch-bar {
573
+ height: 38px;
574
+ display: flex;
575
+ align-items: center;
576
+ gap: 8px;
577
+ padding: 0 14px;
578
+ background: var(--paper-2);
579
+ border-bottom: 1px solid var(--rule);
580
+ flex-shrink: 0;
581
+ font-size: 11.5px;
582
+ position: relative;
583
+ overflow: visible;
584
+ z-index: 20;
585
+ }
586
+
587
+ .branch-bar-spacer {
588
+ flex: 1;
589
+ }
590
+
591
+ .branch-chip {
592
+ display: inline-flex;
593
+ align-items: center;
594
+ gap: 4px;
595
+ padding: 2px 8px;
596
+ border-radius: 4px;
597
+ font-size: 11px;
598
+ font-family: var(--font-mono, 'JetBrains Mono', monospace);
599
+ cursor: pointer;
600
+ user-select: none;
601
+ white-space: nowrap;
602
+ }
603
+
604
+ .branch-chip.viewing {
605
+ background: var(--ink);
606
+ color: var(--paper);
607
+ font-weight: 600;
608
+ }
609
+
610
+ .branch-failed-badge {
611
+ display: inline-flex;
612
+ align-items: center;
613
+ padding: 2px 7px;
614
+ border: 1px solid color-mix(in oklch, var(--accent) 35%, transparent);
615
+ border-radius: 999px;
616
+ background: color-mix(in oklch, var(--accent) 12%, var(--paper));
617
+ color: var(--accent-ink);
618
+ font-size: 10px;
619
+ font-weight: 700;
620
+ letter-spacing: 0.04em;
621
+ text-transform: uppercase;
622
+ }
623
+
624
+ .branch-chip.overlay {
625
+ background: color-mix(in oklch, var(--accent) 15%, var(--paper));
626
+ color: var(--accent);
627
+ border: 1px solid color-mix(in oklch, var(--accent) 40%, transparent);
628
+ }
629
+
630
+ .branch-chip-select {
631
+ border: 1px dashed color-mix(in oklch, var(--accent) 45%, transparent);
632
+ }
633
+
634
+ .branch-chip.overlay:hover {
635
+ background: color-mix(in oklch, var(--accent) 22%, var(--paper));
636
+ }
637
+
638
+ .branch-chip.reload {
639
+ background: var(--paper);
640
+ color: var(--ink-2);
641
+ border: 1px solid color-mix(in oklch, var(--ink) 18%, transparent);
642
+ cursor: pointer;
643
+ }
644
+
645
+ .branch-chip.reload:hover {
646
+ background: color-mix(in oklch, var(--ink) 10%, var(--paper));
647
+ }
648
+
649
+ .branch-chip.more {
650
+ background: var(--paper-3);
651
+ color: var(--ink-3);
652
+ border: 1px solid var(--rule);
653
+ }
654
+
655
+ .branch-chip-remove {
656
+ opacity: 0.55;
657
+ font-size: 10px;
658
+ margin-left: 2px;
659
+ line-height: 1;
660
+ }
661
+
662
+ .branch-chip-remove:hover {
663
+ opacity: 1;
664
+ }
665
+
666
+ .branch-seg {
667
+ display: flex;
668
+ gap: 1px;
669
+ background: var(--rule);
670
+ border-radius: 5px;
671
+ overflow: hidden;
672
+ font-size: 10.5px;
673
+ }
674
+
675
+ .branch-seg-item {
676
+ padding: 3px 9px;
677
+ background: var(--paper);
678
+ color: var(--ink-2);
679
+ cursor: pointer;
680
+ user-select: none;
681
+ white-space: nowrap;
682
+ }
683
+
684
+ .branch-seg-item.active {
685
+ background: var(--accent);
686
+ color: #fff;
687
+ font-weight: 600;
688
+ }
689
+
690
+ .branch-label {
691
+ color: var(--ink-3);
692
+ font-size: 10px;
693
+ text-transform: uppercase;
694
+ letter-spacing: 0.06em;
695
+ white-space: nowrap;
696
+ }
697
+
698
+ .branch-picker {
699
+ position: absolute;
700
+ top: calc(100% + 4px);
701
+ left: 0;
702
+ z-index: 100;
703
+ background: var(--paper);
704
+ border: 1px solid var(--rule-2);
705
+ border-radius: 6px;
706
+ box-shadow: 0 4px 16px rgba(0,0,0,0.12);
707
+ min-width: 320px;
708
+ overflow: hidden;
709
+ }
710
+
711
+ .branch-picker-item {
712
+ padding: 7px 12px;
713
+ cursor: pointer;
714
+ font-size: 11.5px;
715
+ font-family: var(--font-mono, 'JetBrains Mono', monospace);
716
+ display: flex;
717
+ align-items: center;
718
+ gap: 8px;
719
+ }
720
+
721
+ .branch-picker-main {
722
+ overflow-wrap: anywhere;
723
+ }
724
+
725
+ .branch-picker-item:hover {
726
+ background: var(--paper-2);
727
+ }
728
+
729
+ .branch-picker-item.active {
730
+ color: var(--accent);
731
+ font-weight: 600;
732
+ }
733
+
734
+ .branch-picker-item-selectable {
735
+ justify-content: space-between;
736
+ }
737
+
738
+ .branch-picker-check {
739
+ flex-shrink: 0;
740
+ accent-color: var(--accent);
741
+ }
742
+
743
+ .branch-picker-item-disabled {
744
+ display: block;
745
+ cursor: not-allowed;
746
+ background: color-mix(in oklch, var(--accent) 5%, var(--paper));
747
+ }
748
+
749
+ .branch-picker-item-disabled:hover {
750
+ background: color-mix(in oklch, var(--accent) 5%, var(--paper));
751
+ }
752
+
753
+ .branch-picker-error {
754
+ margin-top: 2px;
755
+ color: var(--ink-3);
756
+ font-family: inherit;
757
+ font-size: 10px;
758
+ line-height: 1.35;
759
+ white-space: normal;
760
+ overflow-wrap: anywhere;
761
+ }
762
+
763
+ .signal-dots {
764
+ display: inline-flex;
765
+ align-items: center;
766
+ gap: 2px;
767
+ margin-left: 4px;
768
+ }
769
+
770
+ .signal-dot {
771
+ width: 5px;
772
+ height: 5px;
773
+ border-radius: 50%;
774
+ flex-shrink: 0;
775
+ }
776
+
777
+ .signal-dot-0 { background: var(--accent); }
778
+ .signal-dot-1 { background: #5c7aa8; }
779
+
780
+ .field-row.overlay-ghost {
781
+ opacity: 0.7;
782
+ background: color-mix(in oklch, var(--ink) 6%, var(--paper));
783
+ }
784
+
785
+ .field-row.overlay-ghost .name {
786
+ font-style: italic;
787
+ }
788
+
789
+ .overlay-stripe-0 {
790
+ border-left: 3px solid var(--accent);
791
+ background: color-mix(in oklch, var(--ink) 8%, var(--paper));
792
+ }
793
+
794
+ .overlay-stripe-1 {
795
+ border-left: 3px solid #5c7aa8;
796
+ background: color-mix(in oklch, var(--ink) 8%, var(--paper));
797
+ }
798
+
799
+ .overlay-conflict {
800
+ border-left: 3px solid #c44;
801
+ background: color-mix(in oklch, #c44 5%, var(--paper));
802
+ }
803
+
804
+ .overlay-legend {
805
+ display: flex;
806
+ align-items: center;
807
+ gap: 10px;
808
+ padding: 6px 12px;
809
+ background: var(--paper-2);
810
+ border-bottom: 1px dashed var(--rule);
811
+ flex-wrap: wrap;
812
+ }
813
+
814
+ .overlay-legend-item {
815
+ display: inline-flex;
816
+ align-items: center;
817
+ gap: 5px;
818
+ font-size: 10.5px;
819
+ color: var(--ink-2);
820
+ }
821
+
822
+ .overlay-legend-swatch {
823
+ width: 10px;
824
+ height: 10px;
825
+ border-radius: 2px;
826
+ flex-shrink: 0;
827
+ }