// ───────────────────────────────────────────────────────────────────────────── // Component: Branches (.br-* prefix) // File: src/scss/components/_branches.scss // // Visual rules for the branches page. // Structural layout lives in pages/_branches.scss. // ───────────────────────────────────────────────────────────────────────────── // ── Stat strip ──────────────────────────────────────────────────────────────── .br-stat-strip { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-md); } .br-stat-divider { background: var(--border-default); } .br-stat-num { font-size: 22px; font-weight: var(--weight-bold); font-family: var(--font-mono); color: var(--text-primary); line-height: 1; &--active { color: var(--color-success); } &--ahead { color: var(--color-accent); } &--authors { color: var(--color-orange); } } .br-stat-lbl { font-size: 11px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; font-weight: var(--weight-medium); } // ── Default branch hero ─────────────────────────────────────────────────────── .br-default { background: var(--bg-surface); border: 1px solid var(--border-default); border-left: 3px solid var(--color-accent); border-radius: var(--radius-md); } .br-default-eyebrow { font-size: 10px; font-weight: var(--weight-bold); text-transform: uppercase; letter-spacing: 0.08em; color: var(--color-accent); } .br-default-name { font-size: 18px; font-weight: var(--weight-bold); color: var(--text-primary); font-family: var(--font-mono); } .br-default-commit { font-size: 12px; color: var(--text-muted); } // ── Main card ───────────────────────────────────────────────────────────────── .br-card { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-md); overflow: hidden; } // ── Toolbar ─────────────────────────────────────────────────────────────────── .br-toolbar { border-bottom: 1px solid var(--border-subtle); } .br-tab { display: inline-flex; align-items: center; gap: 6px; padding: 14px 12px; font-size: 13px; color: var(--text-muted); text-decoration: none; border-bottom: 2px solid transparent; white-space: nowrap; transition: color var(--transition-fast), border-color var(--transition-fast); cursor: pointer; background: none; border-left: none; border-right: none; border-top: none; &:hover { color: var(--text-secondary); text-decoration: none; } &.br-tab--active { color: var(--text-primary); border-bottom-color: var(--color-accent); font-weight: var(--weight-semibold); } } .br-tab-ct { background: var(--bg-overlay); border: 1px solid var(--border-subtle); border-radius: var(--radius-full); font-size: 10px; font-weight: var(--weight-semibold); padding: 1px 6px; font-family: var(--font-mono); min-width: 18px; text-align: center; color: var(--text-muted); } .br-search { display: flex; align-items: center; gap: 7px; background: var(--bg-overlay); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: 5px 10px; transition: border-color var(--transition-fast); flex-shrink: 0; &:focus-within { border-color: var(--color-accent); } svg { color: var(--text-muted); flex-shrink: 0; } input { background: none; border: none; outline: none; font-size: 12px; color: var(--text-primary); width: 160px; &::placeholder { color: var(--text-muted); } } } // ── Branch rows ─────────────────────────────────────────────────────────────── .br-row { border-bottom: 1px solid var(--border-subtle); transition: background var(--transition-fast); &:last-child { border-bottom: none; } &:hover { background: var(--bg-overlay); } } .br-row-icon { border-radius: var(--radius-sm); svg { width: 14px; height: 14px; display: block; } } .br-icon--feature { background: color-mix(in srgb, var(--color-success) 12%, transparent); color: var(--color-success); } .br-icon--experiment { background: color-mix(in srgb, var(--color-purple) 12%, transparent); color: var(--color-purple); } .br-icon--fix { background: color-mix(in srgb, var(--color-danger) 12%, transparent); color: var(--color-danger); } .br-icon--structure { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); } .br-icon--collab { background: color-mix(in srgb, var(--color-orange) 12%, transparent); color: var(--color-orange); } .br-icon--source { background: color-mix(in srgb, var(--color-teal) 12%, transparent); color: var(--color-teal); } .br-icon--version { background: color-mix(in srgb, var(--color-warning) 12%, transparent); color: var(--color-warning); } .br-icon--default { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); } .br-name { font-size: 14px; font-weight: var(--weight-semibold); color: var(--text-primary); font-family: var(--font-mono); } .br-type-badge { display: inline-block; padding: 1px 7px; border-radius: var(--radius-sm); font-size: 10px; font-weight: var(--weight-bold); font-family: var(--font-mono); text-transform: uppercase; letter-spacing: 0.04em; } .br-badge--feature { 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); } .br-badge--experiment { 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); } .br-badge--fix { background: color-mix(in srgb, var(--color-danger) 12%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); } .br-badge--structure { 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); } .br-badge--collab { background: color-mix(in srgb, var(--color-orange) 12%, transparent); color: var(--color-orange); border: 1px solid color-mix(in srgb, var(--color-orange) 25%, transparent); } .br-badge--source { 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); } .br-badge--version { 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); } .br-commit-line { font-size: 12px; color: var(--text-muted); } .br-sha { font-family: var(--font-mono); font-size: 11px; color: var(--color-accent-link); text-decoration: none; flex-shrink: 0; &:hover { text-decoration: underline; } } .br-commit-msg { color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .br-meta-line { font-size: 11px; color: var(--text-muted); } .br-author { color: var(--text-secondary); } .br-avatar { width: 14px; height: 14px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 7px; font-weight: var(--weight-bold); color: #fff; flex-shrink: 0; } .br-meta-dot { color: var(--border-default); } // ── Divergence ──────────────────────────────────────────────────────────────── .br-div-line { font-size: 11px; } .br-behind { color: var(--color-danger); font-family: var(--font-mono); } .br-ahead { color: var(--color-success); font-family: var(--font-mono); } .br-uptodate { color: var(--color-success); } .br-div-track { background: var(--bg-overlay); border-radius: var(--radius-full); } .br-div-behind { background: var(--color-danger); height: 100%; } .br-div-ahead { background: var(--color-success); height: 100%; } // ── Domain dimension scores ─────────────────────────────────────────────────── .br-dim { font-size: 10px; color: var(--text-muted); } .br-dim-label { font-family: var(--font-mono); text-transform: uppercase; letter-spacing: 0.03em; flex-shrink: 0; min-width: 28px; } .br-dim-track { background: var(--bg-overlay); border-radius: var(--radius-full); } .br-dim-fill { height: 100%; background: var(--color-accent); border-radius: var(--radius-full); } // ── Empty state ─────────────────────────────────────────────────────────────── .br-empty { color: var(--text-muted); } .br-empty-icon { opacity: 0.3; margin-bottom: var(--space-1); } .br-empty-title { font-size: 18px; font-weight: var(--weight-semibold); color: var(--text-secondary); } .br-empty-desc { font-size: 14px; max-width: 380px; line-height: 1.6; }