// ───────────────────────────────────────────────────────────────────────────── // Component: Code Map Intel (.cm-* visual) // File: src/scss/components/_codemap.scss // // VISUAL RULES ONLY — no layout, no dimensions here. // Layout lives in pages/_codemap.scss. // ───────────────────────────────────────────────────────────────────────────── // ── Stat chips ──────────────────────────────────────────────────────────────── .cm-stat-card { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: 8px; &--edges { border-color: color-mix(in srgb, var(--color-teal) 30%, transparent); } &--cycles { border-color: color-mix(in srgb, var(--color-purple) 30%, transparent); } &--warn { border-color: color-mix(in srgb, var(--color-danger) 45%, transparent); } } .cm-stat-val { font-size: 1.35rem; font-weight: 700; font-family: var(--font-mono); background: var(--gradient-spectral); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .cm-stat-lbl { font-size: 0.65rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); } // ── List header ─────────────────────────────────────────────────────────────── .cm-hd-file, .cm-hd-sym, .cm-hd-fanin, .cm-hd-fanout, .cm-hd-lang { font-size: 0.65rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; color: var(--text-muted); } // ── Module rows ─────────────────────────────────────────────────────────────── .cm-row { background: var(--bg-page); border-left: 1px solid var(--border-default); border-right: 1px solid var(--border-default); border-bottom: 1px solid var(--border-default); transition: background 0.12s ease; &:first-of-type { border-top: 1px solid var(--border-default); border-radius: 6px 6px 0 0; } &:last-child { border-radius: 0 0 6px 6px; } &:only-child { border-radius: 6px; border-top: 1px solid var(--border-default); } &:hover { background: var(--bg-surface); } } // ── File path ───────────────────────────────────────────────────────────────── .cm-file-path { font-size: 0.75rem; font-family: var(--font-mono); color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } // ── Symbol count ────────────────────────────────────────────────────────────── .cm-sym-count { font-size: 0.72rem; font-family: var(--font-mono); color: var(--text-secondary); white-space: nowrap; } // ── Fan-in bar ──────────────────────────────────────────────────────────────── .cm-bar-wrap { height: 6px; background: var(--border-default); border-radius: 3px; overflow: hidden; flex: 1; } .cm-fan-bar { height: 100%; background: var(--gradient-spectral); border-radius: 3px; min-width: 2px; transition: width 0.3s ease; } .cm-fan-n { font-size: 0.65rem; font-family: var(--font-mono); font-weight: 600; color: var(--text-primary); white-space: nowrap; min-width: 2rem; text-align: right; } // ── Fan-out count ───────────────────────────────────────────────────────────── .cm-fanout-count { font-size: 0.72rem; font-family: var(--font-mono); color: var(--text-secondary); white-space: nowrap; } // ── Language badge ──────────────────────────────────────────────────────────── .cm-lang-badge { display: inline-flex; align-items: center; font-size: 0.6rem; font-weight: 700; letter-spacing: 0.04em; padding: 2px 6px; border-radius: 4px; text-transform: lowercase; background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 30%, transparent); &--python { background: color-mix(in srgb, var(--color-teal) 12%, transparent); color: var(--color-teal); border-color: color-mix(in srgb, var(--color-teal) 30%, transparent); } &--typescript { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); border-color: color-mix(in srgb, var(--color-accent) 30%, transparent); } &--javascript { background: color-mix(in srgb, var(--color-orange) 12%, transparent); color: var(--color-orange); border-color: color-mix(in srgb, var(--color-orange) 30%, transparent); } &--html { background: color-mix(in srgb, var(--color-rose) 12%, transparent); color: var(--color-rose); border-color: color-mix(in srgb, var(--color-rose) 30%, transparent); } &--css { background: color-mix(in srgb, var(--color-purple) 12%, transparent); color: var(--color-purple); border-color: color-mix(in srgb, var(--color-purple) 30%, transparent); } } // ── Cycle panel ─────────────────────────────────────────────────────────────── .cm-cycle-panel { display: flex; align-items: flex-start; gap: 0.5rem; font-size: 0.78rem; padding: 0.6rem 0.9rem; border-radius: 6px; border: 1px solid; } .cm-cycle-ok { color: var(--color-success, #4ade80); border-color: color-mix(in srgb, var(--color-success, #4ade80) 30%, transparent); background: color-mix(in srgb, var(--color-success, #4ade80) 8%, transparent); } .cm-cycle-warn { flex-direction: column; color: var(--color-danger, #f87171); border-color: color-mix(in srgb, var(--color-danger, #f87171) 30%, transparent); background: color-mix(in srgb, var(--color-danger, #f87171) 8%, transparent); } .cm-cycle-list { list-style: none; padding: 0; margin: 0.35rem 0 0; display: flex; flex-direction: column; gap: 0.2rem; } .cm-cycle-path { font-size: 0.68rem; font-family: var(--font-mono); color: var(--text-secondary); }