// ───────────────────────────────────────────────────────────────────────────── // Component: Nav // File: src/scss/components/_nav.scss // // Variants: .tabs .tab-list .tab .tab-panel .tab-btn .tab-btn.tab-active // .sort-btn .sort-btn.sort-active .sidebar-section // Tokens: --border-default, --color-accent, --text-primary, --text-muted // Usage: // // Notes: Topbar / navbar CSS lives in _layout.scss (structural). // Tab underline uses --color-accent — consistent with active states. // ───────────────────────────────────────────────────────────────────────────── // Site nav — top navigation bar .site-nav { display: flex; align-items: center; gap: var(--space-4); padding: 0 var(--space-6); height: var(--header-height, 52px); background: var(--bg-base); border-bottom: 1px solid var(--border-subtle); position: sticky; top: 0; z-index: var(--z-sticky); } .site-nav__logo { display: flex; align-items: center; gap: var(--space-2); text-decoration: none; color: var(--text-primary); font-weight: var(--weight-semibold); flex-shrink: 0; } .site-nav__links { display: flex; align-items: center; gap: var(--space-1); flex: 1; a { font-size: var(--text-sm); color: var(--text-muted); text-decoration: none; padding: 4px var(--space-2); border-radius: var(--radius-sm); transition: color var(--transition-fast), background var(--transition-fast); &:hover { color: var(--text-primary); background: var(--bg-overlay); } &.active { color: var(--text-primary); } } } .site-nav__actions { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; flex-shrink: 0; } // Breadcrumb .breadcrumb { display: flex; align-items: center; gap: var(--space-1); flex-wrap: wrap; font-size: var(--text-sm); } .breadcrumb__item { color: var(--text-muted); text-decoration: none; &:hover { color: var(--text-primary); } &:last-child { color: var(--text-primary); } } .breadcrumb__sep { color: var(--border-default); user-select: none; } // Sidebar nav .sidebar-nav { display: flex; flex-direction: column; gap: 2px; } .sidebar-nav__item { display: flex; align-items: center; gap: var(--space-2); padding: 6px var(--space-3); border-radius: var(--radius-sm); font-size: var(--text-sm); color: var(--text-muted); text-decoration: none; transition: color var(--transition-fast), background var(--transition-fast); &:hover { color: var(--text-primary); background: var(--bg-overlay); } &--active { color: var(--text-primary); background: var(--bg-overlay); font-weight: var(--weight-medium); } } .tabs { margin-bottom: var(--space-4); } .tab-list { display: flex; border-bottom: 1px solid var(--border-default); list-style: none; } .tab { padding: var(--space-2) var(--space-4); font-size: var(--text-base); font-weight: var(--weight-medium); color: var(--text-muted); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; transition: color var(--transition-base), border-color var(--transition-base); white-space: nowrap; &:hover { color: var(--text-primary); } &.is-active, &.tab--active { color: var(--text-primary); border-bottom-color: var(--color-accent); } } .tab-panel { display: none; padding-top: var(--space-4); } .tab-panel.is-active { display: block; } // Open/Closed tab buttons (issue list, proposal list) .tab-btn { background: none; border: none; border-bottom: 2px solid transparent; padding: var(--space-2) var(--space-4); font-size: var(--text-sm); color: var(--text-muted); cursor: pointer; transition: color var(--transition-base), border-color var(--transition-base); &:hover { color: var(--text-primary); } &.tab-active { color: var(--text-primary); border-bottom-color: var(--color-accent); font-weight: var(--weight-semibold); } } .tab-count { display: inline-block; background: var(--bg-hover); border-radius: var(--radius-full); font-size: var(--text-xs); padding: 0 6px; margin-left: 4px; color: var(--text-muted); } // Sort buttons .sort-btn { padding: 4px 10px; border-radius: var(--radius-md); border: 1px solid var(--border-default); background: var(--bg-overlay); color: var(--text-secondary); font-size: 12px; cursor: pointer; &:hover { border-color: var(--color-accent); color: var(--color-accent); } &.sort-active { background: var(--color-accent); color: #fff; border-color: var(--color-accent); } } .sort-controls .sort-active, .filter-bar .sort-active { background: var(--color-accent); color: #fff; border-color: var(--color-accent); } // Sidebar section .sidebar-section { margin-bottom: var(--space-3); padding-bottom: var(--space-3); border-bottom: 1px solid var(--border-default); &:last-child { border-bottom: none; } } .sidebar-count { font-size: 10px; background: var(--bg-hover); color: var(--text-muted); border-radius: 8px; padding: 0 5px; } .sidebar-section-title { font-family: var(--font-mono); font-size: 10px; font-weight: var(--weight-bold); color: var(--color-accent); text-transform: uppercase; letter-spacing: 1.5px; margin: 0 0 var(--space-2) 0; }