/** * Modul: Settings Navigation * Zweck: Zweistufige Sidebar-Navigation für Settings * Abhängigkeiten: tokens.css, layout.css */ /* -------------------------------------------------------- Layout Grid -------------------------------------------------------- */ .settings-layout { display: grid; grid-template-columns: 240px 1fr; gap: 0; min-height: calc(100vh - var(--nav-bottom-height, 0px)); background: var(--color-bg); } @media (max-width: 768px) { .settings-layout { grid-template-columns: 1fr; } .settings-sidebar { display: none; } /* Mobile: Zeige horizontale Tabs statt Sidebar */ .settings-layout--mobile-tabs { display: block; } } /* -------------------------------------------------------- Sidebar -------------------------------------------------------- */ .settings-sidebar { position: sticky; top: 0; height: 100vh; overflow-y: auto; overflow-x: hidden; background: var(--color-surface); border-right: 1px solid var(--color-border); padding: var(--space-4) 0; scrollbar-width: thin; scrollbar-color: var(--color-border) transparent; } .settings-sidebar::-webkit-scrollbar { width: 6px; } .settings-sidebar::-webkit-scrollbar-track { background: transparent; } .settings-sidebar::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: var(--radius-full); } .settings-sidebar::-webkit-scrollbar-thumb:hover { background: var(--color-text-tertiary); } /* -------------------------------------------------------- Sidebar Section -------------------------------------------------------- */ .settings-sidebar-section { margin-bottom: var(--space-6); } .settings-sidebar-section:last-child { margin-bottom: 0; } .settings-sidebar-section__header { display: flex; align-items: center; gap: var(--space-2); padding: 0 var(--space-4); margin-bottom: var(--space-2); color: var(--color-text-tertiary); font-size: var(--text-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.05em; user-select: none; } .settings-sidebar-section__icon { width: 14px; height: 14px; flex-shrink: 0; opacity: 0.7; } .settings-sidebar-section__label { line-height: 1; } /* Active Section */ .settings-sidebar-section--active .settings-sidebar-section__header { color: var(--color-accent); } .settings-sidebar-section--active .settings-sidebar-section__icon { opacity: 1; } /* -------------------------------------------------------- Sidebar Pages -------------------------------------------------------- */ .settings-sidebar-pages { display: flex; flex-direction: column; gap: var(--space-1); } .settings-sidebar-page { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); margin: 0 var(--space-2); border: none; border-radius: var(--radius-md); background: transparent; color: var(--color-text-secondary); font-family: inherit; font-size: var(--text-sm); font-weight: var(--font-weight-medium); text-align: left; cursor: pointer; transition: background-color var(--transition-fast), color var(--transition-fast); -webkit-tap-highlight-color: transparent; min-height: var(--target-base); } .settings-sidebar-page:hover { background: var(--color-surface-2); color: var(--color-text-primary); } .settings-sidebar-page--active { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); font-weight: var(--font-weight-semibold); } .settings-sidebar-page--active:hover { background: color-mix(in srgb, var(--color-accent) 18%, transparent); } .settings-sidebar-page__icon { width: 16px; height: 16px; flex-shrink: 0; } .settings-sidebar-page__label { line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* -------------------------------------------------------- Content Area -------------------------------------------------------- */ .settings-content { padding: var(--space-6) var(--space-6) var(--space-8); max-width: 900px; min-width: 0; } @media (max-width: 768px) { .settings-content { padding: var(--space-4); } } /* -------------------------------------------------------- Breadcrumb -------------------------------------------------------- */ .settings-breadcrumb { margin-bottom: var(--space-6); padding-bottom: var(--space-4); border-bottom: 1px solid var(--color-border); } .settings-breadcrumb__list { display: flex; align-items: center; gap: var(--space-2); margin: 0; padding: 0; list-style: none; } .settings-breadcrumb__item { font-size: var(--text-sm); color: var(--color-text-secondary); line-height: 1; } .settings-breadcrumb__item--current { color: var(--color-text-primary); font-weight: var(--font-weight-semibold); } .settings-breadcrumb__separator { font-size: var(--text-sm); color: var(--color-text-tertiary); line-height: 1; user-select: none; } /* -------------------------------------------------------- Page Header (in Content Area) -------------------------------------------------------- */ .settings-page-header { margin-bottom: var(--space-6); } .settings-page-header__title { font-size: var(--text-2xl); font-weight: var(--font-weight-bold); color: var(--color-text-primary); margin: 0 0 var(--space-2); letter-spacing: -0.02em; } .settings-page-header__description { font-size: var(--text-base); color: var(--color-text-secondary); line-height: 1.6; margin: 0; } /* -------------------------------------------------------- Mobile Tabs (Fallback für kleine Screens) -------------------------------------------------------- */ @media (max-width: 768px) { .settings-mobile-tabs { display: flex; gap: var(--space-1); padding: var(--space-2) var(--space-4); overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; border-bottom: 1px solid var(--color-border); position: sticky; top: 0; z-index: var(--z-sticky); background: var(--color-bg); } .settings-mobile-tabs::-webkit-scrollbar { display: none; } .settings-mobile-tab { display: inline-flex; align-items: center; gap: var(--space-1); padding: 0 var(--space-3); height: var(--target-base); border-radius: var(--radius-full); border: none; background: transparent; color: var(--color-text-secondary); font-family: inherit; font-size: var(--text-sm); font-weight: var(--font-weight-medium); cursor: pointer; white-space: nowrap; flex-shrink: 0; transition: background-color var(--transition-fast), color var(--transition-fast); -webkit-tap-highlight-color: transparent; } .settings-mobile-tab--active { background-color: color-mix(in srgb, var(--color-accent) 14%, transparent); color: var(--color-accent); } .settings-mobile-tab__icon { width: 16px; height: 16px; flex-shrink: 0; } } /* -------------------------------------------------------- Help Tooltip -------------------------------------------------------- */ .settings-help-icon { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; margin-left: var(--space-1); color: var(--color-text-tertiary); cursor: help; position: relative; vertical-align: middle; } .settings-help-icon:hover { color: var(--color-accent); } .settings-help-icon svg, .settings-help-icon i { width: 14px; height: 14px; } /* Tooltip */ .settings-help-tooltip { position: absolute; bottom: calc(100% + var(--space-2)); left: 50%; transform: translateX(-50%); padding: var(--space-2) var(--space-3); max-width: 240px; background: var(--color-text-primary); color: var(--color-bg); font-size: var(--text-xs); line-height: 1.4; border-radius: var(--radius-sm); white-space: normal; pointer-events: none; opacity: 0; transition: opacity var(--transition-fast); z-index: var(--z-tooltip); box-shadow: var(--shadow-lg); } .settings-help-icon:hover .settings-help-tooltip { opacity: 1; } /* Tooltip Arrow */ .settings-help-tooltip::after { content: ''; position: absolute; top: 100%; left: 50%; transform: translateX(-50%); border: 4px solid transparent; border-top-color: var(--color-text-primary); } /* -------------------------------------------------------- Status Badge (für Sync-Status) -------------------------------------------------------- */ .settings-status-badge { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1) var(--space-2); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: var(--font-weight-medium); line-height: 1; } .settings-status-badge--success { background: var(--color-success-light); color: var(--color-success); } .settings-status-badge--error { background: var(--color-danger-light); color: var(--color-danger); } .settings-status-badge--syncing { background: var(--color-accent-light); color: var(--color-accent); } .settings-status-badge__icon { width: 12px; height: 12px; } /* Spinning animation für Sync-Icon */ .settings-status-badge--syncing .settings-status-badge__icon { animation: spin 1.5s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* -------------------------------------------------------- Empty State (für Onboarding) -------------------------------------------------------- */ .settings-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-8) var(--space-6); text-align: center; border-radius: var(--radius-lg); background: var(--color-surface-2); border: 2px dashed var(--color-border); } .settings-empty-state__icon { width: 48px; height: 48px; margin-bottom: var(--space-4); color: var(--color-text-tertiary); opacity: 0.5; } .settings-empty-state__title { font-size: var(--text-lg); font-weight: var(--font-weight-semibold); color: var(--color-text-primary); margin: 0 0 var(--space-2); } .settings-empty-state__description { font-size: var(--text-sm); color: var(--color-text-secondary); line-height: 1.5; margin: 0 0 var(--space-4); max-width: 400px; } .settings-empty-state__action { /* Button wird schon durch .btn gestyled */ }