frontend_nyla/src/components/Navigation/MandateNavigation.module.css
2026-03-28 16:58:55 +01:00

393 lines
7.6 KiB
CSS

/**
* MandateNavigation Styles
*
* Hierarchische Navigation:
* System → Mandant → Feature → Instanz → Views
*/
.navigation {
display: flex;
flex-direction: column;
gap: 0.25rem;
padding: 0 0.5rem;
}
/* Separator */
.separator {
height: 1px;
background: var(--border-color, #e0e0e0);
margin: 0.75rem 0.5rem;
}
/* Section (System, Admin) */
.section {
margin-bottom: 0.5rem;
}
.sectionHeader {
padding: 0.5rem 0.75rem;
}
.sectionTitle {
font-size: 0.65rem;
font-weight: 600;
letter-spacing: 0.1em;
color: var(--text-tertiary, #888);
text-transform: uppercase;
}
.sectionContent {
display: flex;
flex-direction: column;
gap: 2px;
}
/* Nav Item (Links) */
.navItem {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.625rem 0.75rem;
border-radius: 6px;
color: var(--text-secondary, #666);
text-decoration: none;
font-size: 0.875rem;
transition: all 0.15s ease;
}
.navItem:hover {
background: var(--hover-bg, rgba(0, 0, 0, 0.04));
color: var(--text-primary, #1a1a1a);
}
.navItem.active {
background: var(--primary-light, #e0e7ff);
color: var(--primary-color, #2563eb);
font-weight: 500;
}
.navIcon {
font-size: 1rem;
flex-shrink: 0;
}
/* Mandate Group */
.mandateGroup {
margin-bottom: 0.25rem;
}
.mandateHeader {
display: flex;
align-items: center;
gap: 0.5rem;
width: 100%;
padding: 0.625rem 0.75rem;
border: none;
border-radius: 6px;
background: transparent;
cursor: pointer;
font-size: 0.875rem;
font-weight: 600;
color: var(--text-primary, #1a1a1a);
transition: background 0.15s ease;
}
.mandateHeader:hover {
background: var(--hover-bg, rgba(0, 0, 0, 0.04));
}
.mandateLabel {
flex: 1;
text-align: left;
}
.mandateContent {
margin-left: 0.25rem;
padding-left: 0.75rem;
border-left: 2px solid var(--border-color, #e0e0e0);
}
.activeMandate > .mandateContent {
border-left-color: var(--primary-color, #2563eb);
}
/* Feature Group */
.featureGroup {
margin-bottom: 0.25rem;
}
.featureHeader {
display: flex;
align-items: center;
gap: 0.5rem;
width: 100%;
padding: 0.5rem 0.75rem;
border: none;
border-radius: 6px;
background: transparent;
cursor: pointer;
font-size: 0.8125rem;
color: var(--text-secondary, #666);
transition: background 0.15s ease;
}
.featureHeader:hover {
background: var(--hover-bg, rgba(0, 0, 0, 0.04));
}
.featureIcon {
display: flex;
align-items: center;
font-size: 0.875rem;
}
.featureLabel {
flex: 1;
text-align: left;
font-weight: 500;
}
.instanceCount {
font-size: 0.6875rem;
padding: 0.125rem 0.375rem;
background: var(--surface-color, #f0f0f0);
border-radius: 9999px;
color: var(--text-tertiary, #888);
}
.featureContent {
margin-left: 0.25rem;
padding-left: 0.75rem;
}
.activeFeature > .featureHeader {
color: var(--primary-color, #2563eb);
}
/* Instance Group */
.instanceGroup {
margin-bottom: 0.125rem;
}
.instanceHeader {
display: flex;
align-items: center;
gap: 0.375rem;
width: 100%;
padding: 0.375rem 0.5rem;
border: none;
border-radius: 6px;
background: transparent;
cursor: pointer;
font-size: 0.75rem;
color: var(--text-secondary, #666);
transition: background 0.15s ease;
}
.instanceHeader:hover {
background: var(--hover-bg, rgba(0, 0, 0, 0.04));
}
.instanceLabel {
flex: 1;
text-align: left;
font-weight: 500;
}
.roleBadge {
font-size: 0.625rem;
padding: 0.0625rem 0.375rem;
background: var(--surface-color, #f0f0f0);
border-radius: 9999px;
color: var(--text-tertiary, #888);
text-transform: uppercase;
letter-spacing: 0.025em;
}
.instanceViews {
margin-left: 0.25rem;
padding-left: 1rem;
}
.activeInstance > .instanceHeader {
color: var(--primary-color, #2563eb);
background: var(--primary-light, #e0e7ff);
}
.activeInstance .roleBadge {
background: var(--primary-color, #2563eb);
color: white;
}
/* View Item */
.viewItem {
display: block;
padding: 0.375rem 0.5rem;
border-radius: 4px;
color: var(--text-secondary, #666);
text-decoration: none;
font-size: 0.75rem;
transition: all 0.15s ease;
}
.viewItem:hover {
background: var(--hover-bg, rgba(0, 0, 0, 0.04));
color: var(--text-primary, #1a1a1a);
}
.viewItem.active {
background: var(--primary-light, #e0e7ff);
color: var(--primary-color, #2563eb);
font-weight: 500;
}
/* Chevron */
.chevron {
font-size: 0.625rem;
color: var(--text-tertiary, #888);
flex-shrink: 0;
}
/* Loading State */
.loadingState {
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 2rem 1rem;
color: var(--text-tertiary, #888);
font-size: 0.8125rem;
}
.spinner {
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* Empty State */
.emptyState {
padding: 1.5rem 1rem;
text-align: center;
color: var(--text-secondary, #666);
font-size: 0.875rem;
}
.emptyHint {
font-size: 0.75rem;
color: var(--text-tertiary, #888);
margin-top: 0.5rem;
}
/* Rename button (inline, hover-visible via TreeNavigation nodeActions) */
.renameButton {
display: flex;
align-items: center;
justify-content: center;
width: 1.25rem;
height: 1.25rem;
padding: 0;
border: none;
border-radius: 3px;
background: transparent;
color: var(--text-tertiary, #888);
cursor: pointer;
transition: color 0.15s ease, background 0.15s ease;
}
.renameButton:hover {
color: var(--primary-color, #2563eb);
background: var(--hover-bg, rgba(0, 0, 0, 0.06));
}
/* Dark Theme */
:global(.dark-theme) .separator {
background: var(--border-dark, #333);
}
:global(.dark-theme) .sectionTitle {
color: var(--text-tertiary-dark, #666);
}
:global(.dark-theme) .navItem {
color: var(--text-secondary-dark, #aaa);
}
:global(.dark-theme) .navItem:hover {
background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06));
color: var(--text-primary-dark, #fff);
}
:global(.dark-theme) .navItem.active {
background: var(--primary-dark-bg, #1e3a5f);
color: var(--primary-light, #93c5fd);
}
:global(.dark-theme) .mandateHeader {
color: var(--text-primary-dark, #fff);
}
:global(.dark-theme) .mandateHeader:hover {
background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06));
}
:global(.dark-theme) .mandateContent {
border-left-color: var(--border-dark, #444);
}
:global(.dark-theme) .activeMandate > .mandateContent {
border-left-color: var(--primary-light, #93c5fd);
}
:global(.dark-theme) .featureHeader {
color: var(--text-secondary-dark, #aaa);
}
:global(.dark-theme) .featureHeader:hover {
background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06));
}
:global(.dark-theme) .activeFeature > .featureHeader {
color: var(--primary-light, #93c5fd);
}
:global(.dark-theme) .instanceCount,
:global(.dark-theme) .roleBadge {
background: var(--surface-dark, #2a2a2a);
color: var(--text-tertiary-dark, #888);
}
:global(.dark-theme) .instanceHeader {
color: var(--text-secondary-dark, #aaa);
}
:global(.dark-theme) .instanceHeader:hover {
background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06));
}
:global(.dark-theme) .activeInstance > .instanceHeader {
color: var(--primary-light, #93c5fd);
background: var(--primary-dark-bg, #1e3a5f);
}
:global(.dark-theme) .activeInstance .roleBadge {
background: var(--primary-color, #2563eb);
color: white;
}
:global(.dark-theme) .viewItem {
color: var(--text-secondary-dark, #aaa);
}
:global(.dark-theme) .viewItem:hover {
background: var(--hover-bg-dark, rgba(255, 255, 255, 0.06));
color: var(--text-primary-dark, #fff);
}
:global(.dark-theme) .viewItem.active {
background: var(--primary-dark-bg, #1e3a5f);
color: var(--primary-light, #93c5fd);
}