// ───────────────────────────────────────────────────────────────────────────── // Component: Code // File: src/scss/components/_code.scss // // Variants: pre, code, pre code, .diff-track-*, .diff-sign-* // Tokens: --code-output-bg, --bg-overlay, --border-default, --font-mono // --color-success, --color-danger, --color-accent // Usage:
// // Notes: Syntax highlight colors (hljs) are intentionally hardcoded — // they are part of the One Dark theme, not the design system. // ───────────────────────────────────────────────────────────────────────────── pre { background: var(--code-output-bg); border: 1px solid var(--border-default); border-radius: var(--radius-base); padding: var(--space-3); font-size: 13px; font-family: var(--font-mono); overflow-x: auto; white-space: pre-wrap; word-break: break-word; color: var(--text-secondary); line-height: 1.65; } code { font-family: var(--font-mono); font-size: 0.88em; background: var(--bg-overlay); border: 1px solid var(--border-subtle); padding: 1px 6px; border-radius: 4px; } pre code { background: transparent; border: none; padding: 0; font-size: inherit; color: inherit; } // ── highlight.js token theme (global — used by blob, diff, symbol pages) ───── // Mapped to design-system tokens where possible; hardcoded for tokens that // need stable color regardless of theme (e.g. string green, keyword purple). .hljs { background: rgba(0,0,0,0); } .hljs-keyword, .hljs-selector-tag { color: var(--color-accent); font-weight: 500; } .hljs-built_in, .hljs-builtin-name { color: var(--color-warning); } .hljs-type, .hljs-class .hljs-title, .hljs-title.hljs-class { color: var(--color-orange); } .hljs-function .hljs-title, .hljs-title.hljs-function, .hljs-title { color: var(--color-accent-link); } .hljs-string, .hljs-doctag { color: var(--color-success); } .hljs-number, .hljs-literal { color: var(--color-orange); } .hljs-comment, .hljs-quote { color: var(--text-muted); font-style: italic; } .hljs-meta, .hljs-meta .hljs-keyword { color: var(--text-muted); } // HTML / XML / Jinja .hljs-tag { color: var(--text-secondary); } .hljs-name { color: var(--color-accent); } .hljs-attr { color: var(--color-accent-link); } .hljs-template-tag { color: var(--color-accent); font-weight: 500; } .hljs-template-variable { color: var(--color-success); } // CSS .hljs-selector-class, .hljs-selector-id { color: var(--color-accent-link); } .hljs-attribute { color: var(--color-accent); } // General .hljs-variable, .hljs-subst { color: var(--text-primary); } .hljs-property { color: var(--color-accent-link); } .hljs-operator, .hljs-punctuation { color: var(--text-muted); } .hljs-params { color: var(--text-secondary); } .hljs-symbol, .hljs-bullet { color: var(--color-orange); } .hljs-section, .hljs-addition { color: var(--color-success); } .hljs-deletion { color: var(--color-danger); } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: 700; } .hljs-link { text-decoration: underline; color: var(--color-accent-link); } // Diff track rows (musical / multi-domain diffs) .diff-track-row { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-2) var(--space-3); border-radius: var(--radius-sm); margin-bottom: var(--space-1); } .diff-track-added { background: color-mix(in srgb, var(--color-success) 10%, transparent); border-left: 3px solid var(--color-success); } .diff-track-removed { background: color-mix(in srgb, var(--color-danger) 10%, transparent); border-left: 3px solid var(--color-danger); } .diff-track-changed { background: color-mix(in srgb, var(--color-accent) 10%, transparent); border-left: 3px solid var(--color-accent); } .diff-sign { font-size: var(--text-lg); font-weight: var(--weight-bold); width: 20px; flex-shrink: 0; } .diff-sign-add, .diff-sign-add { color: var(--color-success); } .diff-sign-del, .diff-sign-remove { color: var(--color-danger); } .diff-sign-ctx, .diff-sign-change { color: var(--color-accent); }