// ───────────────────────────────────────────────────────────────────────────── // Component: Reference pages — Vision, CRDT Primitives, Security // File: src/scss/components/_refpages.scss // // Three rich reference pages that consolidate muse/docs/ content into the // official developer docs at /muse/vision, /muse/crdt, /muse/security. // Zero inline styles — all visual rules live here. // // Tokens: --color-accent, --color-purple, --color-success, --color-danger // --color-warning, --color-teal, --text-primary/secondary/muted // --bg-base/surface/elevated/overlay, --border-default/subtle // --font-mono // ───────────────────────────────────────────────────────────────────────────── // ── Vision — Pull quote ─────────────────────────────────────────────────────── .vision-pull { margin: var(--space-8) 0; padding: var(--space-6) var(--space-8); border-left: 3px solid var(--color-accent); background: color-mix(in srgb, var(--color-accent) 5%, var(--bg-surface)); border-radius: 0 10px 10px 0; } .vision-pull-quote { font-size: clamp(18px, 3vw, 26px); font-weight: 700; color: var(--text-primary); letter-spacing: -0.02em; line-height: 1.3; margin: 0 0 var(--space-2); em { font-style: normal; color: var(--color-accent); } } .vision-pull-sub { font-size: 14px; color: var(--text-muted); margin: 0; } // ── Vision — Git vs Muse diff comparison ───────────────────────────────────── .vision-compare { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); margin: var(--space-6) 0; @media (max-width: 600px) { grid-template-columns: 1fr; } } .vision-compare-pane { border-radius: 10px; border: 1px solid var(--border-default); overflow: hidden; background: var(--bg-base); &--muse { border-color: color-mix(in srgb, var(--color-accent) 30%, var(--border-default)); } } .vision-compare-header { display: flex; align-items: center; gap: var(--space-2); padding: 8px 14px; background: var(--bg-overlay); border-bottom: 1px solid var(--border-default); .vision-compare-pane--muse & { background: color-mix(in srgb, var(--color-accent) 8%, var(--bg-overlay)); border-bottom-color: color-mix(in srgb, var(--color-accent) 20%, var(--border-default)); } } .vision-compare-label { font-size: 11px; font-weight: 700; font-family: var(--font-mono); letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-muted); .vision-compare-pane--muse & { color: var(--color-accent); } } .vision-compare-badge { font-size: 10px; font-weight: 700; font-family: var(--font-mono); padding: 1px 6px; border-radius: 4px; letter-spacing: 0.04em; &--bad { background: color-mix(in srgb, var(--color-danger) 15%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); } &--good { background: color-mix(in srgb, var(--color-success) 15%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); } } .vision-compare-body { padding: var(--space-4) var(--space-5); font-family: var(--font-mono); font-size: 12px; line-height: 1.7; color: #abb2bf; min-height: 120px; .tok-del { color: var(--color-danger); } .tok-add { color: var(--color-success); } .tok-dim { color: var(--text-muted); } .tok-key { color: #e06c75; } .tok-val { color: #98c379; } .tok-num { color: #d19a66; } .tok-sym { color: #61afef; } .tok-at { color: #56b6c2; } } // ── Vision — Alice + Bob merge scenario ────────────────────────────────────── .vision-merge { margin: var(--space-6) 0; border: 1px solid var(--border-default); border-radius: 12px; overflow: hidden; background: var(--bg-surface); } .vision-merge-header { padding: var(--space-4) var(--space-5); background: var(--bg-overlay); border-bottom: 1px solid var(--border-default); font-size: 12px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; } .vision-merge-agents { display: grid; grid-template-columns: 1fr 1fr; gap: 0; } .vision-merge-agent { padding: var(--space-5); border-right: 1px solid var(--border-subtle); &:last-child { border-right: none; } } .vision-merge-agent-name { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: var(--space-2); &--alice { color: var(--color-purple); } &--bob { color: var(--color-teal); } } .vision-merge-agent-change { font-family: var(--font-mono); font-size: 12px; color: var(--text-secondary); line-height: 1.6; .tok-dim { color: var(--text-muted); } .tok-field { color: #e06c75; } .tok-val { color: #98c379; } .tok-arrow { color: var(--text-muted); } } .vision-merge-agent-label { font-size: 11px; color: var(--text-muted); margin-top: var(--space-2); font-style: italic; } .vision-merge-result { border-top: 1px solid var(--border-default); padding: var(--space-4) var(--space-5); background: color-mix(in srgb, var(--color-success) 5%, var(--bg-base)); display: flex; align-items: center; gap: var(--space-3); } .vision-merge-result-icon { width: 20px; height: 20px; border-radius: 50%; background: color-mix(in srgb, var(--color-success) 15%, transparent); border: 1px solid color-mix(in srgb, var(--color-success) 30%, transparent); display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--color-success); font-size: 11px; font-weight: 900; } .vision-merge-result-text { font-family: var(--font-mono); font-size: 12px; color: var(--color-success); font-weight: 600; } .vision-merge-result-sub { font-size: 11px; color: var(--text-muted); margin-left: auto; font-style: italic; } // ── Vision — Dimension stats ────────────────────────────────────────────────── .vision-dims { display: flex; gap: var(--space-5); align-items: center; margin: var(--space-6) 0; padding: var(--space-5); border: 1px solid var(--border-default); border-radius: 10px; background: var(--bg-surface); @media (max-width: 600px) { flex-direction: column; align-items: stretch; } } .vision-dims-stat { text-align: center; flex-shrink: 0; } .vision-dims-num { display: block; font-size: 36px; font-weight: 900; font-family: var(--font-mono); line-height: 1; color: var(--color-accent); } .vision-dims-label { font-size: 11px; color: var(--text-muted); letter-spacing: 0.04em; display: block; margin-top: 4px; } .vision-dims-divider { width: 1px; align-self: stretch; background: var(--border-subtle); flex-shrink: 0; @media (max-width: 600px) { width: auto; height: 1px; } } .vision-dims-grid { display: flex; flex-wrap: wrap; gap: 6px; flex: 1; } .vision-dim-tag { font-size: 11px; font-family: var(--font-mono); padding: 3px 8px; border-radius: 5px; border: 1px solid var(--border-subtle); background: var(--bg-overlay); color: var(--text-muted); white-space: nowrap; &--independent { background: color-mix(in srgb, var(--color-accent) 10%, var(--bg-overlay)); border-color: color-mix(in srgb, var(--color-accent) 25%, var(--border-subtle)); color: var(--color-accent); } } // ── Vision — Domain showcase ────────────────────────────────────────────────── .vision-domain-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--space-3); margin: var(--space-5) 0; } .vision-domain-card { padding: var(--space-4) var(--space-5); border-radius: 10px; border: 1px solid var(--border-default); background: var(--bg-surface); &--live { border-color: color-mix(in srgb, var(--color-success) 25%, var(--border-default)); background: color-mix(in srgb, var(--color-success) 4%, var(--bg-surface)); } &--soon { border-style: dashed; opacity: 0.7; } } .vision-domain-card-status { font-size: 10px; font-weight: 700; font-family: var(--font-mono); letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: var(--space-2); .vision-domain-card--live & { color: var(--color-success); } .vision-domain-card--soon & { color: var(--text-muted); } } .vision-domain-card-name { font-size: 15px; font-weight: 700; color: var(--text-primary); margin-bottom: 4px; } .vision-domain-card-desc { font-size: 12px; color: var(--text-muted); line-height: 1.5; } // ── CRDT — Lattice laws ─────────────────────────────────────────────────────── .crdt-laws { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-4); margin: var(--space-6) 0; @media (max-width: 600px) { grid-template-columns: 1fr; } } .crdt-law { padding: var(--space-5); border-radius: 10px; border: 1px solid var(--border-default); background: var(--bg-surface); text-align: center; } .crdt-law-symbol { font-size: 28px; font-weight: 900; font-family: var(--font-mono); color: var(--color-accent); line-height: 1; margin-bottom: var(--space-2); } .crdt-law-name { font-size: 13px; font-weight: 700; color: var(--text-primary); margin-bottom: var(--space-2); } .crdt-law-formula { font-family: var(--font-mono); font-size: 11px; color: var(--text-muted); background: var(--bg-overlay); border: 1px solid var(--border-subtle); border-radius: 5px; padding: 4px 8px; margin-bottom: var(--space-2); display: inline-block; } .crdt-law-desc { font-size: 12px; color: var(--text-secondary); line-height: 1.5; } // ── CRDT — Primitives grid ──────────────────────────────────────────────────── .crdt-primitives { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--space-4); margin: var(--space-5) 0; } .crdt-primitive { border: 1px solid var(--border-default); border-radius: 10px; overflow: hidden; background: var(--bg-surface); } .crdt-primitive-header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-3) var(--space-4); background: var(--bg-overlay); border-bottom: 1px solid var(--border-default); } .crdt-primitive-name { font-size: 13px; font-weight: 700; font-family: var(--font-mono); color: var(--text-primary); } .crdt-primitive-badge { font-size: 10px; font-weight: 700; font-family: var(--font-mono); padding: 2px 7px; border-radius: 4px; letter-spacing: 0.04em; &--grow { background: color-mix(in srgb, var(--color-success) 12%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); } &--register { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent); } &--set { background: color-mix(in srgb, var(--color-purple) 12%, transparent); color: var(--color-purple); border: 1px solid color-mix(in srgb, var(--color-purple) 25%, transparent); } &--seq { background: color-mix(in srgb, var(--color-teal) 12%, transparent); color: var(--color-teal); border: 1px solid color-mix(in srgb, var(--color-teal) 25%, transparent); } &--map { background: color-mix(in srgb, var(--color-warning) 12%, transparent); color: var(--color-warning); border: 1px solid color-mix(in srgb, var(--color-warning) 25%, transparent); } } .crdt-primitive-body { padding: var(--space-4); } .crdt-primitive-tagline { font-size: 12px; color: var(--text-muted); margin: 0 0 var(--space-3); line-height: 1.5; } .crdt-primitive-api { font-family: var(--font-mono); font-size: 11px; color: #abb2bf; background: var(--bg-base); border: 1px solid var(--border-subtle); border-radius: 6px; padding: var(--space-3) var(--space-4); line-height: 1.7; overflow-x: auto; .tok-kw { color: #c678dd; } .tok-fn { color: #61afef; } .tok-type { color: #e5c07b; } .tok-str { color: #98c379; } .tok-cmt { color: #5c6370; font-style: italic; } .tok-ret { color: #56b6c2; } } .crdt-primitive-use { font-size: 12px; color: var(--text-muted); margin: var(--space-3) 0 0; padding-top: var(--space-3); border-top: 1px solid var(--border-subtle); line-height: 1.5; strong { color: var(--text-secondary); } } // ── Security — Guard grid ───────────────────────────────────────────────────── .sec-guards { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--space-4); margin: var(--space-5) 0; } .sec-guard { border: 1px solid var(--border-default); border-radius: 10px; overflow: hidden; background: var(--bg-surface); } .sec-guard-header { padding: var(--space-3) var(--space-4); background: var(--bg-overlay); border-bottom: 1px solid var(--border-default); display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); } .sec-guard-name { font-size: 13px; font-weight: 700; color: var(--text-primary); } .sec-guard-layer { font-size: 10px; font-weight: 700; font-family: var(--font-mono); padding: 2px 7px; border-radius: 4px; background: color-mix(in srgb, var(--color-danger) 10%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); white-space: nowrap; flex-shrink: 0; } .sec-guard-body { padding: var(--space-4); } .sec-guard-fn { font-family: var(--font-mono); font-size: 11px; color: var(--color-purple); background: var(--bg-overlay); border: 1px solid var(--border-subtle); border-radius: 5px; padding: 2px 8px; margin-bottom: var(--space-3); display: inline-block; } .sec-guard-attack { font-size: 12px; color: var(--text-secondary); line-height: 1.55; margin: 0 0 var(--space-3); } .sec-guard-sites { font-size: 11px; color: var(--text-muted); border-top: 1px solid var(--border-subtle); padding-top: var(--space-3); line-height: 1.6; code { font-family: var(--font-mono); font-size: 10px; background: var(--bg-overlay); border: 1px solid var(--border-subtle); border-radius: 3px; padding: 0 4px; color: var(--text-secondary); } } // ── Security — Threat table (extends devdocs-table) ─────────────────────────── .sec-threat-table { width: 100%; font-size: 13px; border-collapse: collapse; margin: var(--space-4) 0; display: block; overflow-x: auto; th { text-align: left; font-size: 11px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-muted); padding: 6px 10px; border-bottom: 1px solid var(--border-default); } td { padding: 7px 10px; border-bottom: 1px solid var(--border-subtle); color: var(--text-secondary); vertical-align: top; line-height: 1.5; font-size: 13px; } tr:last-child td { border-bottom: none; } td:first-child { font-family: var(--font-mono); font-size: 12px; color: var(--color-purple); white-space: nowrap; } .sec-threat-sev { font-size: 10px; font-weight: 700; font-family: var(--font-mono); padding: 2px 7px; border-radius: 4px; letter-spacing: 0.04em; &--critical { background: color-mix(in srgb, var(--color-danger) 15%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); } &--high { background: color-mix(in srgb, var(--color-warning) 15%, transparent); color: var(--color-warning); border: 1px solid color-mix(in srgb, var(--color-warning) 25%, transparent); } &--medium { background: color-mix(in srgb, var(--color-teal) 15%, transparent); color: var(--color-teal); border: 1px solid color-mix(in srgb, var(--color-teal) 25%, transparent); } } } // ── Security — Trust boundary diagram ──────────────────────────────────────── .sec-boundary { margin: var(--space-6) 0; border: 1px solid var(--border-default); border-radius: 12px; overflow: hidden; background: var(--bg-surface); } .sec-boundary-header { padding: var(--space-3) var(--space-5); background: var(--bg-overlay); border-bottom: 1px solid var(--border-default); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); } .sec-boundary-zones { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 0; } .sec-boundary-zone { padding: var(--space-5); border-right: 1px solid var(--border-subtle); &:last-child { border-right: none; } } .sec-boundary-zone-label { font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; margin-bottom: var(--space-3); &--untrusted { color: var(--color-danger); } &--boundary { color: var(--color-warning); } &--trusted { color: var(--color-success); } } .sec-boundary-items { display: flex; flex-direction: column; gap: var(--space-2); } .sec-boundary-item { font-size: 12px; font-family: var(--font-mono); padding: 3px 8px; border-radius: 5px; border: 1px solid var(--border-subtle); color: var(--text-secondary); background: var(--bg-overlay); .sec-boundary-zone--untrusted & { border-color: color-mix(in srgb, var(--color-danger) 20%, var(--border-subtle)); color: color-mix(in srgb, var(--color-danger) 70%, var(--text-secondary)); } .sec-boundary-zone--boundary & { border-color: color-mix(in srgb, var(--color-warning) 20%, var(--border-subtle)); color: color-mix(in srgb, var(--color-warning) 70%, var(--text-secondary)); } .sec-boundary-zone--trusted & { border-color: color-mix(in srgb, var(--color-success) 20%, var(--border-subtle)); color: color-mix(in srgb, var(--color-success) 70%, var(--text-secondary)); } }