/* ========================================================================== PoE Manager — Design System ========================================================================== */ :root { --bg: #0e1015; --bg-elevated: #14171e; --bg-card: #1a1e27; --bg-card-hover: #20242f; --bg-input: #12151b; --border: #2a2f3b; --border-soft: #21252f; --text: #eef0f4; --text-dim: #9aa2b4; --text-faint: #656d80; /* #ff7100 = exakte Farbe aus dem WiS-Logo (static/images/logo.png, per Pixel-Sampling ermittelt) — Buttons/Akzente sollen genau dieses Orange treffen statt einer nur ähnlichen, frei gewählten Nuance. */ --accent: #ff7100; --accent-strong: #ff8d33; --accent-dim: rgba(255, 113, 0, 0.14); --accent-ring: rgba(255, 113, 0, 0.35); --success: #2fd07a; --success-dim: rgba(47, 208, 122, 0.14); --danger: #f0475c; --danger-dim: rgba(240, 71, 92, 0.14); --warning: #f5a623; --warning-dim: rgba(245, 166, 35, 0.14); --muted: #6b7280; --muted-dim: rgba(107, 114, 128, 0.16); --radius-sm: 8px; --radius: 14px; --radius-lg: 20px; --shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.55); --shadow-sm: 0 4px 14px -6px rgba(0, 0, 0, 0.4); --sidebar-w: 244px; --topbar-h: 64px; --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, "Helvetica Neue", Arial, sans-serif; --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; color-scheme: dark; } [data-theme="light"] { --bg: #f3f4f7; --bg-elevated: #ffffff; --bg-card: #ffffff; --bg-card-hover: #f8f8fb; --bg-input: #ffffff; --border: #e3e5ec; --border-soft: #ebedf2; --text: #1a1d24; --text-dim: #565d6d; --text-faint: #8a90a0; --accent-dim: rgba(255, 113, 0, 0.1); --muted-dim: rgba(107, 114, 128, 0.12); --shadow: 0 10px 30px -14px rgba(20, 20, 30, 0.18); --shadow-sm: 0 4px 14px -8px rgba(20, 20, 30, 0.14); color-scheme: light; } * { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--font); font-size: 14.5px; line-height: 1.5; -webkit-font-smoothing: antialiased; } a { color: inherit; text-decoration: none; } h1, h2, h3, h4 { margin: 0; font-weight: 650; letter-spacing: -0.01em; } p { margin: 0; } button { font-family: inherit; } ::selection { background: var(--accent-dim); } /* Scrollbars */ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 8px; border: 2px solid transparent; background-clip: content-box; } ::-webkit-scrollbar-thumb:hover { background: var(--text-faint); background-clip: content-box; } /* ========================================================================== App shell ========================================================================== */ .app-shell { display: flex; min-height: 100vh; } /* ---- Sidebar ---- */ .sidebar { width: var(--sidebar-w); flex-shrink: 0; background: var(--bg-elevated); border-right: 1px solid var(--border-soft); display: flex; flex-direction: column; position: fixed; top: 0; bottom: 0; left: 0; z-index: 40; transition: transform 0.25s ease; } .sidebar-brand { display: flex; align-items: center; gap: 10px; padding: 22px 20px 16px; } .sidebar-brand .brand-name { font-weight: 700; font-size: 15px; color: var(--text); letter-spacing: -0.01em; } .sidebar-brand .brand-sub { display: block; font-size: 11px; color: var(--text-faint); font-weight: 500; } .sidebar-nav { flex: 1; padding: 8px 12px; display: flex; flex-direction: column; gap: 2px; overflow-y: auto; } .nav-item { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: var(--radius-sm); color: var(--text-dim); font-weight: 550; font-size: 13.5px; transition: background 0.15s ease, color 0.15s ease; } .nav-item svg { width: 18px; height: 18px; flex-shrink: 0; opacity: 0.85; } .nav-item:hover { background: var(--bg-card-hover); color: var(--text); } .nav-item.active { background: var(--accent-dim); color: var(--accent-strong); } .nav-item.active svg { opacity: 1; } /* Nav-Gruppe mit Untermenü (z.B. "Logs" -> Live-Log / Änderungslog) */ .nav-group-toggle { display: flex; align-items: center; gap: 12px; width: 100%; padding: 10px 12px; border: none; background: none; color: var(--text-dim); font-weight: 550; font-size: 13.5px; font-family: inherit; border-radius: var(--radius-sm); cursor: pointer; transition: background 0.15s ease, color 0.15s ease; } .nav-group-toggle svg { width: 18px; height: 18px; flex-shrink: 0; opacity: 0.85; } .nav-group-toggle:hover { background: var(--bg-card-hover); color: var(--text); } .nav-group-toggle .nav-chevron { margin-left: auto; width: 14px; height: 14px; transition: transform 0.15s ease; opacity: 0.6; } .nav-group.expanded .nav-group-toggle .nav-chevron { transform: rotate(90deg); } .nav-group.active-group .nav-group-toggle { color: var(--accent-strong); } .nav-group-children { display: none; flex-direction: column; gap: 2px; padding-left: 30px; margin-top: 2px; } .nav-group.expanded .nav-group-children { display: flex; } .nav-group-children .nav-item { font-size: 13px; padding: 8px 12px; } /* Kacheln nebeneinander (z.B. Im-/Export, Konto-Seite). minmax(min(..., 100%), 1fr) statt eines nackten Pixelwerts -- eine Spalten-Mindestbreite von z.B. 340px würde auf einem 375px-iPhone (abzüglich .content-Padding) sonst waagerechten Overflow der ganzen Seite erzwingen, weil "auto-fit" erst ab einer Breite größer als der Mindestwert umbricht. */ .settings-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr)); gap: 24px; align-items: start; } /* Modifier für Seiten, die etwas breitere Karten brauchen (z.B. NGINX, LDAP) -- ersetzt frühere inline style="grid-template-columns:..." Overrides, die denselben 100%-Fallback nicht hatten. */ .settings-grid--wide { grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr)); } /* Navbar-Reihenfolge (Settings) */ .nav-order-list { list-style: none; display: flex; flex-direction: column; gap: 6px; margin-bottom: 16px; } .nav-order-list li { padding: 8px 12px; background: var(--bg-card); border: 1px solid var(--border-soft); border-radius: var(--radius-sm); font-size: 13.5px; font-weight: 550; } .nav-order-row { display: flex; align-items: center; justify-content: space-between; } .nav-order-list .nav-order-actions { display: flex; gap: 4px; } .nav-order-list .icon-btn { width: 28px; height: 28px; } /* Unterpunkte je Gruppe — eingerückt, innerhalb ihrer Gruppe umsortierbar (moveNavItem() bewegt nur innerhalb der jeweiligen