// ───────────────────────────────────────────────────────────────────────────── // Component: Commits list page (.cl-* prefix) // File: src/scss/components/_commits.scss // // Visual rules only — colors, typography, backgrounds, borders, animations. // Structural layout lives in pages/_commits.scss. // ───────────────────────────────────────────────────────────────────────────── // ── Page header ─────────────────────────────────────────────────────────────── .commits-header { margin-bottom: var(--space-3); h1 { font-size: 20px; font-weight: var(--weight-semibold); color: var(--text-primary); margin: 0; } } .filter-active-badge { font-size: 10px; font-weight: 600; padding: 2px 7px; border-radius: 999px; background: color-mix(in srgb, var(--color-accent) 15%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 30%, transparent); } // ── Filter bar ──────────────────────────────────────────────────────────────── .filter-bar { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--space-3); padding: var(--space-3) var(--space-4); background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-md); margin-bottom: var(--space-3); } .filter-group { display: flex; flex-direction: column; gap: 4px; min-width: 120px; label { font-size: 11px; font-weight: var(--weight-semibold); color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; } select, input[type="search"], input[type="date"] { font-size: 12px; font-family: inherit; color: var(--text-primary); background: var(--bg-base); border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: 5px 8px; outline: none; transition: border-color 0.15s; &:focus { border-color: var(--color-accent); } &::placeholder { color: var(--text-muted); } } select { cursor: pointer; } } .filter-bar-actions { display: flex; align-items: flex-end; gap: var(--space-2); padding-bottom: 1px; margin-left: auto; } // ── Toolbar ─────────────────────────────────────────────────────────────────── .commits-toolbar { display: flex; align-items: center; gap: var(--space-2); margin-bottom: var(--space-3); flex-wrap: wrap; } .branch-select-form { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-muted); select { font-size: 12px; font-family: inherit; color: var(--text-primary); background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: 4px 8px; outline: none; cursor: pointer; transition: border-color 0.15s; &:focus { border-color: var(--color-accent); } } } // ── Compare strip ───────────────────────────────────────────────────────────── .compare-strip { display: none; align-items: center; gap: var(--space-3); padding: var(--space-2) var(--space-4); background: color-mix(in srgb, var(--color-accent) 8%, transparent); border: 1px solid color-mix(in srgb, var(--color-accent) 30%, transparent); border-radius: var(--radius-md); margin-bottom: var(--space-3); font-size: 13px; color: var(--text-secondary); &.is-active { display: flex; } } // ── Commit list ─────────────────────────────────────────────────────────────── .commit-list-table { display: flex; flex-direction: column; } .commit-list-row { display: grid; grid-template-columns: 24px 28px 1fr; align-items: stretch; min-height: 60px; border-bottom: 1px solid var(--border-subtle); transition: background 0.1s; &:last-child { border-bottom: none; } &:hover { background: var(--bg-hover); } &.is-selected { background: color-mix(in srgb, var(--color-accent) 6%, transparent); } } // ── DAG lane ───────────────────────────────────────────────────────────────── .dag-col { display: flex; flex-direction: column; align-items: center; padding: 0 4px; } .dag-line { width: 2px; flex: 1; background: var(--border-subtle); &.dag-line-top { min-height: 10px; } &.dag-line-bottom { min-height: 10px; } } .dag-node { width: 10px; height: 10px; border-radius: 50%; background: var(--color-accent); border: 2px solid var(--bg-base); flex-shrink: 0; z-index: 1; &.dag-node-merge { background: var(--color-purple); border-radius: 2px; transform: rotate(45deg); } &.dag-node-root { background: var(--color-success); } } .dag-merge-arm { position: absolute; left: -8px; top: 50%; transform: translateY(-50%); width: 8px; height: 2px; background: var(--border-default); } // ── Compare checkbox ────────────────────────────────────────────────────────── .compare-col { display: flex; align-items: center; justify-content: center; padding: 0 2px; } .compare-check { display: none; accent-color: var(--color-accent); cursor: pointer; width: 13px; height: 13px; .compare-mode & { display: block; } } // ── Commit cell ─────────────────────────────────────────────────────────────── .commit-cell { padding: var(--space-2) var(--space-4) var(--space-2) var(--space-2); display: flex; flex-direction: column; justify-content: center; gap: 4px; min-width: 0; } .commit-cell-top { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; min-width: 0; } .commit-cell-bottom { display: flex; align-items: center; gap: var(--space-3); flex-wrap: wrap; } .commit-subject-link { font-size: 13px; font-weight: var(--weight-semibold); color: var(--text-primary); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1; &:hover { color: var(--color-accent-link); } } .merge-indicator { font-size: 10px; padding: 1px 5px; border-radius: 3px; background: color-mix(in srgb, var(--color-purple) 15%, transparent); color: var(--color-purple); font-weight: 600; white-space: nowrap; flex-shrink: 0; } .meta-badges { display: inline-flex; align-items: center; gap: 4px; flex-wrap: wrap; } .commit-sha-link { font-family: var(--font-mono); font-size: 11px; color: var(--text-muted); text-decoration: none; padding: 1px 5px; border-radius: 3px; background: var(--bg-overlay); border: 1px solid var(--border-subtle); transition: color 0.1s, border-color 0.1s; flex-shrink: 0; &:hover { color: var(--color-accent-link); border-color: var(--color-accent); } } .commit-meta-item { display: inline-flex; align-items: center; gap: 3px; font-size: 11px; color: var(--text-muted); text-decoration: none; white-space: nowrap; svg { flex-shrink: 0; } } // ── Pagination ──────────────────────────────────────────────────────────────── .pagination-bar { display: flex; align-items: center; justify-content: space-between; border-top: 1px solid var(--border-subtle); } .pagination-info { font-size: 12px; color: var(--text-muted); } .pagination-nav { display: flex; gap: var(--space-2); } // ── Empty state ─────────────────────────────────────────────────────────────── .commits-empty { padding: var(--space-6) var(--space-4); text-align: center; .empty-icon { font-size: 32px; margin-bottom: var(--space-3); opacity: 0.5; } .empty-title { font-size: 15px; font-weight: var(--weight-semibold); color: var(--text-primary); margin: 0 0 var(--space-2); } .empty-desc { font-size: 13px; color: var(--text-muted); margin: 0; a { color: var(--color-accent-link); } code { font-family: var(--font-mono); font-size: 12px; } } }