// ───────────────────────────────────────────────────────────────────────────── // Component: Search // File: src/scss/components/_search.scss // // Parts: .search-box .search-field .search-input .search-icon // .search-clear .search-spinner // .search-type-bar .search-type-label .search-type-pill // .search-results .search-results__* .search-commit-* // Tokens: --bg-overlay, --border-default, --border-glow, --color-accent // ───────────────────────────────────────────────────────────────────────────── // ── Search box container ────────────────────────────────────────────────────── .search-box { width: 100%; display: flex; flex-direction: column; gap: var(--space-3); } // ── Search field — wraps icon + input + clear + spinner ─────────────────────── .search-field { display: flex; align-items: center; gap: 8px; background: transparent; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 6px; padding: 0 14px; height: 40px; transition: border-color var(--transition-fast); &:focus-within, &--active { border-color: var(--border-glow); } } .search-icon { color: var(--text-muted); flex-shrink: 0; width: 15px; height: 15px; } .search-input { flex: 1; background: transparent; border: none; outline: none; box-shadow: none; padding: 0; width: auto; font-size: var(--text-base); color: var(--text-primary); min-width: 0; &::placeholder { color: var(--text-muted); } } .search-clear { display: flex; align-items: center; justify-content: center; background: none; border: none; cursor: pointer; color: var(--text-muted); padding: var(--space-1); border-radius: var(--radius-sm); transition: color var(--transition-fast), background var(--transition-fast); flex-shrink: 0; &:hover { color: var(--text-primary); background: var(--bg-overlay); } } .search-spinner { display: flex; align-items: center; flex-shrink: 0; margin-left: var(--space-2); color: var(--color-accent); .spin-icon { animation: spin 0.8s linear infinite; } } // ── Search type bar ─────────────────────────────────────────────────────────── .search-type-bar { display: flex; align-items: center; gap: var(--space-2); justify-content: center; } .search-type-label { font-size: var(--text-xs); color: var(--text-muted); } .search-type-pill { display: inline-flex; align-items: center; gap: 5px; padding: 4px 14px; border-radius: var(--radius-full); border: 1px solid var(--border-default); font-size: 12px; font-weight: var(--weight-medium); color: var(--text-muted); cursor: pointer; background: transparent; transition: all var(--transition-fast); &:hover { border-color: var(--color-accent); color: var(--color-accent); } &--active { background: var(--color-accent); border-color: var(--color-accent); color: var(--bg-base); font-weight: var(--weight-bold); } } // ── Search results container ────────────────────────────────────────────────── .search-results { margin-bottom: var(--space-8); padding: 0 var(--space-4); max-width: 1240px; margin-left: auto; margin-right: auto; } .search-results__header { display: flex; align-items: center; gap: var(--space-3); flex-wrap: wrap; margin-bottom: var(--space-4); padding-bottom: var(--space-3); border-bottom: 1px solid var(--border-subtle); } .search-results__count { font-size: var(--text-sm); color: var(--text-secondary); font-weight: var(--weight-medium); } .search-results__query { font-size: var(--text-sm); color: var(--text-muted); font-style: italic; margin-left: auto; } .search-results__method { display: inline-flex; align-items: center; gap: 4px; padding: 2px 10px; border-radius: var(--radius-full); font-size: var(--text-xs); font-family: var(--font-mono); font-weight: var(--weight-semibold); &--semantic { 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); } &--text { 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); } } // ── Empty search state ──────────────────────────────────────────────────────── .search-results__empty { padding: var(--space-12) var(--space-6); text-align: center; } .search-results__empty-icon { font-size: 2.5rem; color: var(--text-muted); margin-bottom: var(--space-4); } .search-results__empty-title { font-size: var(--text-base); font-weight: var(--weight-semibold); color: var(--text-primary); margin-bottom: var(--space-2); em { font-style: italic; } } .search-results__empty-sub { font-size: var(--text-sm); color: var(--text-muted); a { color: var(--color-accent); } } // ── Commit search results ───────────────────────────────────────────────────── .search-commit-list { display: flex; flex-direction: column; gap: var(--space-3); } .search-commit-group { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-md); overflow: hidden; } .search-commit-group__repo { display: block; padding: var(--space-2) var(--space-4); font-family: var(--font-mono); font-size: var(--text-sm); font-weight: var(--weight-semibold); color: var(--color-accent); text-decoration: none; border-bottom: 1px solid var(--border-subtle); background: var(--bg-overlay); &:hover { text-decoration: underline; } } .search-commit-group__rows { padding: var(--space-2) 0; } .search-commit-row { display: grid; grid-template-columns: 84px 1fr auto; align-items: center; gap: var(--space-3); padding: var(--space-2) var(--space-4); text-decoration: none; &:hover { background: var(--bg-overlay); } } .search-commit-sha { font-family: var(--font-mono); font-size: 12px; color: var(--color-accent-link); } .search-commit-msg { font-size: var(--text-sm); color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .search-commit-author { font-size: var(--text-xs); color: var(--text-muted); white-space: nowrap; }