gabriel / musehub public
_refpages.scss
745 lines 18.9 KB
Raw
sha256:3ff9c9863a9891bdcde71b4a43228f66d0493e38b7cc1d09fe9eb7de774046b2 feat: add repair-commit wire endpoint (API parity with repa… Opus 4.8 minor ⚠ breaking 1 day ago
1 // ─────────────────────────────────────────────────────────────────────────────
2 // Component: Reference pages — Vision, CRDT Primitives, Security
3 // File: src/scss/components/_refpages.scss
4 //
5 // Three rich reference pages that consolidate muse/docs/ content into the
6 // official developer docs at /muse/vision, /muse/crdt, /muse/security.
7 // Zero inline styles — all visual rules live here.
8 //
9 // Tokens: --color-accent, --color-purple, --color-success, --color-danger
10 // --color-warning, --color-teal, --text-primary/secondary/muted
11 // --bg-base/surface/elevated/overlay, --border-default/subtle
12 // --font-mono
13 // ─────────────────────────────────────────────────────────────────────────────
14
15 // ── Vision — Pull quote ───────────────────────────────────────────────────────
16
17 .vision-pull {
18 margin: var(--space-8) 0;
19 padding: var(--space-6) var(--space-8);
20 border-left: 3px solid var(--color-accent);
21 background: color-mix(in srgb, var(--color-accent) 5%, var(--bg-surface));
22 border-radius: 0 10px 10px 0;
23 }
24
25 .vision-pull-quote {
26 font-size: clamp(18px, 3vw, 26px);
27 font-weight: 700;
28 color: var(--text-primary);
29 letter-spacing: -0.02em;
30 line-height: 1.3;
31 margin: 0 0 var(--space-2);
32
33 em {
34 font-style: normal;
35 color: var(--color-accent);
36 }
37 }
38
39 .vision-pull-sub {
40 font-size: 14px;
41 color: var(--text-muted);
42 margin: 0;
43 }
44
45 // ── Vision — Git vs Muse diff comparison ─────────────────────────────────────
46
47 .vision-compare {
48 display: grid;
49 grid-template-columns: 1fr 1fr;
50 gap: var(--space-4);
51 margin: var(--space-6) 0;
52
53 @media (max-width: 600px) { grid-template-columns: 1fr; }
54 }
55
56 .vision-compare-pane {
57 border-radius: 10px;
58 border: 1px solid var(--border-default);
59 overflow: hidden;
60 background: var(--bg-base);
61
62 &--muse {
63 border-color: color-mix(in srgb, var(--color-accent) 30%, var(--border-default));
64 }
65 }
66
67 .vision-compare-header {
68 display: flex;
69 align-items: center;
70 gap: var(--space-2);
71 padding: 8px 14px;
72 background: var(--bg-overlay);
73 border-bottom: 1px solid var(--border-default);
74
75 .vision-compare-pane--muse & {
76 background: color-mix(in srgb, var(--color-accent) 8%, var(--bg-overlay));
77 border-bottom-color: color-mix(in srgb, var(--color-accent) 20%, var(--border-default));
78 }
79 }
80
81 .vision-compare-label {
82 font-size: 11px;
83 font-weight: 700;
84 font-family: var(--font-mono);
85 letter-spacing: 0.06em;
86 text-transform: uppercase;
87 color: var(--text-muted);
88
89 .vision-compare-pane--muse & { color: var(--color-accent); }
90 }
91
92 .vision-compare-badge {
93 font-size: 10px;
94 font-weight: 700;
95 font-family: var(--font-mono);
96 padding: 1px 6px;
97 border-radius: 4px;
98 letter-spacing: 0.04em;
99
100 &--bad {
101 background: color-mix(in srgb, var(--color-danger) 15%, transparent);
102 color: var(--color-danger);
103 border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent);
104 }
105
106 &--good {
107 background: color-mix(in srgb, var(--color-success) 15%, transparent);
108 color: var(--color-success);
109 border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent);
110 }
111 }
112
113 .vision-compare-body {
114 padding: var(--space-4) var(--space-5);
115 font-family: var(--font-mono);
116 font-size: 12px;
117 line-height: 1.7;
118 color: #abb2bf;
119 min-height: 120px;
120
121 .tok-del { color: var(--color-danger); }
122 .tok-add { color: var(--color-success); }
123 .tok-dim { color: var(--text-muted); }
124 .tok-key { color: #e06c75; }
125 .tok-val { color: #98c379; }
126 .tok-num { color: #d19a66; }
127 .tok-sym { color: #61afef; }
128 .tok-at { color: #56b6c2; }
129 }
130
131 // ── Vision — Alice + Bob merge scenario ──────────────────────────────────────
132
133 .vision-merge {
134 margin: var(--space-6) 0;
135 border: 1px solid var(--border-default);
136 border-radius: 12px;
137 overflow: hidden;
138 background: var(--bg-surface);
139 }
140
141 .vision-merge-header {
142 padding: var(--space-4) var(--space-5);
143 background: var(--bg-overlay);
144 border-bottom: 1px solid var(--border-default);
145 font-size: 12px;
146 font-weight: 600;
147 color: var(--text-muted);
148 text-transform: uppercase;
149 letter-spacing: 0.06em;
150 }
151
152 .vision-merge-agents {
153 display: grid;
154 grid-template-columns: 1fr 1fr;
155 gap: 0;
156 }
157
158 .vision-merge-agent {
159 padding: var(--space-5);
160 border-right: 1px solid var(--border-subtle);
161
162 &:last-child { border-right: none; }
163 }
164
165 .vision-merge-agent-name {
166 font-size: 11px;
167 font-weight: 700;
168 text-transform: uppercase;
169 letter-spacing: 0.08em;
170 margin-bottom: var(--space-2);
171
172 &--alice { color: var(--color-purple); }
173 &--bob { color: var(--color-teal); }
174 }
175
176 .vision-merge-agent-change {
177 font-family: var(--font-mono);
178 font-size: 12px;
179 color: var(--text-secondary);
180 line-height: 1.6;
181
182 .tok-dim { color: var(--text-muted); }
183 .tok-field { color: #e06c75; }
184 .tok-val { color: #98c379; }
185 .tok-arrow { color: var(--text-muted); }
186 }
187
188 .vision-merge-agent-label {
189 font-size: 11px;
190 color: var(--text-muted);
191 margin-top: var(--space-2);
192 font-style: italic;
193 }
194
195 .vision-merge-result {
196 border-top: 1px solid var(--border-default);
197 padding: var(--space-4) var(--space-5);
198 background: color-mix(in srgb, var(--color-success) 5%, var(--bg-base));
199 display: flex;
200 align-items: center;
201 gap: var(--space-3);
202 }
203
204 .vision-merge-result-icon {
205 width: 20px;
206 height: 20px;
207 border-radius: 50%;
208 background: color-mix(in srgb, var(--color-success) 15%, transparent);
209 border: 1px solid color-mix(in srgb, var(--color-success) 30%, transparent);
210 display: flex;
211 align-items: center;
212 justify-content: center;
213 flex-shrink: 0;
214 color: var(--color-success);
215 font-size: 11px;
216 font-weight: 900;
217 }
218
219 .vision-merge-result-text {
220 font-family: var(--font-mono);
221 font-size: 12px;
222 color: var(--color-success);
223 font-weight: 600;
224 }
225
226 .vision-merge-result-sub {
227 font-size: 11px;
228 color: var(--text-muted);
229 margin-left: auto;
230 font-style: italic;
231 }
232
233 // ── Vision — Dimension stats ──────────────────────────────────────────────────
234
235 .vision-dims {
236 display: flex;
237 gap: var(--space-5);
238 align-items: center;
239 margin: var(--space-6) 0;
240 padding: var(--space-5);
241 border: 1px solid var(--border-default);
242 border-radius: 10px;
243 background: var(--bg-surface);
244
245 @media (max-width: 600px) { flex-direction: column; align-items: stretch; }
246 }
247
248 .vision-dims-stat {
249 text-align: center;
250 flex-shrink: 0;
251 }
252
253 .vision-dims-num {
254 display: block;
255 font-size: 36px;
256 font-weight: 900;
257 font-family: var(--font-mono);
258 line-height: 1;
259 color: var(--color-accent);
260 }
261
262 .vision-dims-label {
263 font-size: 11px;
264 color: var(--text-muted);
265 letter-spacing: 0.04em;
266 display: block;
267 margin-top: 4px;
268 }
269
270 .vision-dims-divider {
271 width: 1px;
272 align-self: stretch;
273 background: var(--border-subtle);
274 flex-shrink: 0;
275
276 @media (max-width: 600px) { width: auto; height: 1px; }
277 }
278
279 .vision-dims-grid {
280 display: flex;
281 flex-wrap: wrap;
282 gap: 6px;
283 flex: 1;
284 }
285
286 .vision-dim-tag {
287 font-size: 11px;
288 font-family: var(--font-mono);
289 padding: 3px 8px;
290 border-radius: 5px;
291 border: 1px solid var(--border-subtle);
292 background: var(--bg-overlay);
293 color: var(--text-muted);
294 white-space: nowrap;
295
296 &--independent {
297 background: color-mix(in srgb, var(--color-accent) 10%, var(--bg-overlay));
298 border-color: color-mix(in srgb, var(--color-accent) 25%, var(--border-subtle));
299 color: var(--color-accent);
300 }
301 }
302
303 // ── Vision — Domain showcase ──────────────────────────────────────────────────
304
305 .vision-domain-grid {
306 display: grid;
307 grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
308 gap: var(--space-3);
309 margin: var(--space-5) 0;
310 }
311
312 .vision-domain-card {
313 padding: var(--space-4) var(--space-5);
314 border-radius: 10px;
315 border: 1px solid var(--border-default);
316 background: var(--bg-surface);
317
318 &--live {
319 border-color: color-mix(in srgb, var(--color-success) 25%, var(--border-default));
320 background: color-mix(in srgb, var(--color-success) 4%, var(--bg-surface));
321 }
322
323 &--soon {
324 border-style: dashed;
325 opacity: 0.7;
326 }
327 }
328
329 .vision-domain-card-status {
330 font-size: 10px;
331 font-weight: 700;
332 font-family: var(--font-mono);
333 letter-spacing: 0.08em;
334 text-transform: uppercase;
335 margin-bottom: var(--space-2);
336
337 .vision-domain-card--live & { color: var(--color-success); }
338 .vision-domain-card--soon & { color: var(--text-muted); }
339 }
340
341 .vision-domain-card-name {
342 font-size: 15px;
343 font-weight: 700;
344 color: var(--text-primary);
345 margin-bottom: 4px;
346 }
347
348 .vision-domain-card-desc {
349 font-size: 12px;
350 color: var(--text-muted);
351 line-height: 1.5;
352 }
353
354 // ── CRDT — Lattice laws ───────────────────────────────────────────────────────
355
356 .crdt-laws {
357 display: grid;
358 grid-template-columns: repeat(3, 1fr);
359 gap: var(--space-4);
360 margin: var(--space-6) 0;
361
362 @media (max-width: 600px) { grid-template-columns: 1fr; }
363 }
364
365 .crdt-law {
366 padding: var(--space-5);
367 border-radius: 10px;
368 border: 1px solid var(--border-default);
369 background: var(--bg-surface);
370 text-align: center;
371 }
372
373 .crdt-law-symbol {
374 font-size: 28px;
375 font-weight: 900;
376 font-family: var(--font-mono);
377 color: var(--color-accent);
378 line-height: 1;
379 margin-bottom: var(--space-2);
380 }
381
382 .crdt-law-name {
383 font-size: 13px;
384 font-weight: 700;
385 color: var(--text-primary);
386 margin-bottom: var(--space-2);
387 }
388
389 .crdt-law-formula {
390 font-family: var(--font-mono);
391 font-size: 11px;
392 color: var(--text-muted);
393 background: var(--bg-overlay);
394 border: 1px solid var(--border-subtle);
395 border-radius: 5px;
396 padding: 4px 8px;
397 margin-bottom: var(--space-2);
398 display: inline-block;
399 }
400
401 .crdt-law-desc {
402 font-size: 12px;
403 color: var(--text-secondary);
404 line-height: 1.5;
405 }
406
407 // ── CRDT — Primitives grid ────────────────────────────────────────────────────
408
409 .crdt-primitives {
410 display: grid;
411 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
412 gap: var(--space-4);
413 margin: var(--space-5) 0;
414 }
415
416 .crdt-primitive {
417 border: 1px solid var(--border-default);
418 border-radius: 10px;
419 overflow: hidden;
420 background: var(--bg-surface);
421 }
422
423 .crdt-primitive-header {
424 display: flex;
425 align-items: center;
426 justify-content: space-between;
427 padding: var(--space-3) var(--space-4);
428 background: var(--bg-overlay);
429 border-bottom: 1px solid var(--border-default);
430 }
431
432 .crdt-primitive-name {
433 font-size: 13px;
434 font-weight: 700;
435 font-family: var(--font-mono);
436 color: var(--text-primary);
437 }
438
439 .crdt-primitive-badge {
440 font-size: 10px;
441 font-weight: 700;
442 font-family: var(--font-mono);
443 padding: 2px 7px;
444 border-radius: 4px;
445 letter-spacing: 0.04em;
446
447 &--grow {
448 background: color-mix(in srgb, var(--color-success) 12%, transparent);
449 color: var(--color-success);
450 border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent);
451 }
452
453 &--register {
454 background: color-mix(in srgb, var(--color-accent) 12%, transparent);
455 color: var(--color-accent);
456 border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent);
457 }
458
459 &--set {
460 background: color-mix(in srgb, var(--color-purple) 12%, transparent);
461 color: var(--color-purple);
462 border: 1px solid color-mix(in srgb, var(--color-purple) 25%, transparent);
463 }
464
465 &--seq {
466 background: color-mix(in srgb, var(--color-teal) 12%, transparent);
467 color: var(--color-teal);
468 border: 1px solid color-mix(in srgb, var(--color-teal) 25%, transparent);
469 }
470
471 &--map {
472 background: color-mix(in srgb, var(--color-warning) 12%, transparent);
473 color: var(--color-warning);
474 border: 1px solid color-mix(in srgb, var(--color-warning) 25%, transparent);
475 }
476 }
477
478 .crdt-primitive-body {
479 padding: var(--space-4);
480 }
481
482 .crdt-primitive-tagline {
483 font-size: 12px;
484 color: var(--text-muted);
485 margin: 0 0 var(--space-3);
486 line-height: 1.5;
487 }
488
489 .crdt-primitive-api {
490 font-family: var(--font-mono);
491 font-size: 11px;
492 color: #abb2bf;
493 background: var(--bg-base);
494 border: 1px solid var(--border-subtle);
495 border-radius: 6px;
496 padding: var(--space-3) var(--space-4);
497 line-height: 1.7;
498 overflow-x: auto;
499
500 .tok-kw { color: #c678dd; }
501 .tok-fn { color: #61afef; }
502 .tok-type { color: #e5c07b; }
503 .tok-str { color: #98c379; }
504 .tok-cmt { color: #5c6370; font-style: italic; }
505 .tok-ret { color: #56b6c2; }
506 }
507
508 .crdt-primitive-use {
509 font-size: 12px;
510 color: var(--text-muted);
511 margin: var(--space-3) 0 0;
512 padding-top: var(--space-3);
513 border-top: 1px solid var(--border-subtle);
514 line-height: 1.5;
515
516 strong { color: var(--text-secondary); }
517 }
518
519 // ── Security — Guard grid ─────────────────────────────────────────────────────
520
521 .sec-guards {
522 display: grid;
523 grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
524 gap: var(--space-4);
525 margin: var(--space-5) 0;
526 }
527
528 .sec-guard {
529 border: 1px solid var(--border-default);
530 border-radius: 10px;
531 overflow: hidden;
532 background: var(--bg-surface);
533 }
534
535 .sec-guard-header {
536 padding: var(--space-3) var(--space-4);
537 background: var(--bg-overlay);
538 border-bottom: 1px solid var(--border-default);
539 display: flex;
540 align-items: center;
541 justify-content: space-between;
542 gap: var(--space-2);
543 }
544
545 .sec-guard-name {
546 font-size: 13px;
547 font-weight: 700;
548 color: var(--text-primary);
549 }
550
551 .sec-guard-layer {
552 font-size: 10px;
553 font-weight: 700;
554 font-family: var(--font-mono);
555 padding: 2px 7px;
556 border-radius: 4px;
557 background: color-mix(in srgb, var(--color-danger) 10%, transparent);
558 color: var(--color-danger);
559 border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent);
560 white-space: nowrap;
561 flex-shrink: 0;
562 }
563
564 .sec-guard-body { padding: var(--space-4); }
565
566 .sec-guard-fn {
567 font-family: var(--font-mono);
568 font-size: 11px;
569 color: var(--color-purple);
570 background: var(--bg-overlay);
571 border: 1px solid var(--border-subtle);
572 border-radius: 5px;
573 padding: 2px 8px;
574 margin-bottom: var(--space-3);
575 display: inline-block;
576 }
577
578 .sec-guard-attack {
579 font-size: 12px;
580 color: var(--text-secondary);
581 line-height: 1.55;
582 margin: 0 0 var(--space-3);
583 }
584
585 .sec-guard-sites {
586 font-size: 11px;
587 color: var(--text-muted);
588 border-top: 1px solid var(--border-subtle);
589 padding-top: var(--space-3);
590 line-height: 1.6;
591
592 code {
593 font-family: var(--font-mono);
594 font-size: 10px;
595 background: var(--bg-overlay);
596 border: 1px solid var(--border-subtle);
597 border-radius: 3px;
598 padding: 0 4px;
599 color: var(--text-secondary);
600 }
601 }
602
603 // ── Security — Threat table (extends devdocs-table) ───────────────────────────
604
605 .sec-threat-table {
606 width: 100%;
607 font-size: 13px;
608 border-collapse: collapse;
609 margin: var(--space-4) 0;
610 display: block;
611 overflow-x: auto;
612
613 th {
614 text-align: left;
615 font-size: 11px;
616 font-weight: 700;
617 letter-spacing: 0.06em;
618 text-transform: uppercase;
619 color: var(--text-muted);
620 padding: 6px 10px;
621 border-bottom: 1px solid var(--border-default);
622 }
623
624 td {
625 padding: 7px 10px;
626 border-bottom: 1px solid var(--border-subtle);
627 color: var(--text-secondary);
628 vertical-align: top;
629 line-height: 1.5;
630 font-size: 13px;
631 }
632
633 tr:last-child td { border-bottom: none; }
634
635 td:first-child {
636 font-family: var(--font-mono);
637 font-size: 12px;
638 color: var(--color-purple);
639 white-space: nowrap;
640 }
641
642 .sec-threat-sev {
643 font-size: 10px;
644 font-weight: 700;
645 font-family: var(--font-mono);
646 padding: 2px 7px;
647 border-radius: 4px;
648 letter-spacing: 0.04em;
649
650 &--critical {
651 background: color-mix(in srgb, var(--color-danger) 15%, transparent);
652 color: var(--color-danger);
653 border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent);
654 }
655
656 &--high {
657 background: color-mix(in srgb, var(--color-warning) 15%, transparent);
658 color: var(--color-warning);
659 border: 1px solid color-mix(in srgb, var(--color-warning) 25%, transparent);
660 }
661
662 &--medium {
663 background: color-mix(in srgb, var(--color-teal) 15%, transparent);
664 color: var(--color-teal);
665 border: 1px solid color-mix(in srgb, var(--color-teal) 25%, transparent);
666 }
667 }
668 }
669
670 // ── Security — Trust boundary diagram ────────────────────────────────────────
671
672 .sec-boundary {
673 margin: var(--space-6) 0;
674 border: 1px solid var(--border-default);
675 border-radius: 12px;
676 overflow: hidden;
677 background: var(--bg-surface);
678 }
679
680 .sec-boundary-header {
681 padding: var(--space-3) var(--space-5);
682 background: var(--bg-overlay);
683 border-bottom: 1px solid var(--border-default);
684 font-size: 11px;
685 font-weight: 700;
686 text-transform: uppercase;
687 letter-spacing: 0.08em;
688 color: var(--text-muted);
689 }
690
691 .sec-boundary-zones {
692 display: grid;
693 grid-template-columns: 1fr 1fr 1fr;
694 gap: 0;
695 }
696
697 .sec-boundary-zone {
698 padding: var(--space-5);
699 border-right: 1px solid var(--border-subtle);
700
701 &:last-child { border-right: none; }
702 }
703
704 .sec-boundary-zone-label {
705 font-size: 10px;
706 font-weight: 700;
707 letter-spacing: 0.1em;
708 text-transform: uppercase;
709 margin-bottom: var(--space-3);
710
711 &--untrusted { color: var(--color-danger); }
712 &--boundary { color: var(--color-warning); }
713 &--trusted { color: var(--color-success); }
714 }
715
716 .sec-boundary-items {
717 display: flex;
718 flex-direction: column;
719 gap: var(--space-2);
720 }
721
722 .sec-boundary-item {
723 font-size: 12px;
724 font-family: var(--font-mono);
725 padding: 3px 8px;
726 border-radius: 5px;
727 border: 1px solid var(--border-subtle);
728 color: var(--text-secondary);
729 background: var(--bg-overlay);
730
731 .sec-boundary-zone--untrusted & {
732 border-color: color-mix(in srgb, var(--color-danger) 20%, var(--border-subtle));
733 color: color-mix(in srgb, var(--color-danger) 70%, var(--text-secondary));
734 }
735
736 .sec-boundary-zone--boundary & {
737 border-color: color-mix(in srgb, var(--color-warning) 20%, var(--border-subtle));
738 color: color-mix(in srgb, var(--color-warning) 70%, var(--text-secondary));
739 }
740
741 .sec-boundary-zone--trusted & {
742 border-color: color-mix(in srgb, var(--color-success) 20%, var(--border-subtle));
743 color: color-mix(in srgb, var(--color-success) 70%, var(--text-secondary));
744 }
745 }
File History 1 commit
sha256:3ff9c9863a9891bdcde71b4a43228f66d0493e38b7cc1d09fe9eb7de774046b2 feat: add repair-commit wire endpoint (API parity with repa… Opus 4.8 minor 1 day ago