// ─────────────────────────────────────────────────────────────────────────────
// 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;
}