/* ============================================================ Layout — App Shell ============================================================ */ .app-shell { display: flex; width: 100%; height: 100vh; overflow: hidden; } /* ---------- Sidebar ---------- */ .sidebar { width: var(--sidebar-width); min-width: var(--sidebar-width); height: 100vh; background: var(--surface); border-right: 1px solid var(--border); display: flex; flex-direction: column; overflow: hidden; transition: width var(--transition-base), min-width var(--transition-base); z-index: 10; } .sidebar.collapsed { width: var(--sidebar-collapsed); min-width: var(--sidebar-collapsed); } .sidebar-header { padding: var(--sp-4) var(--sp-5); border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: var(--sp-3); min-height: var(--topbar-height); } .sidebar.collapsed .sidebar-header { padding: var(--sp-4); justify-content: center; } .sidebar-logo { font-family: var(--font-mono); font-size: 0.8rem; font-weight: 700; color: var(--accent); letter-spacing: 0.05em; text-transform: uppercase; white-space: nowrap; overflow: hidden; } .sidebar.collapsed .sidebar-logo { font-size: 0; } .sidebar-logo .logo-dot { color: var(--cyan); } .sidebar-nav { flex: 1; overflow-y: auto; padding: var(--sp-3) var(--sp-3); } .sidebar.collapsed .sidebar-nav { padding: var(--sp-2) var(--sp-2); } .nav-section-title { font-family: var(--font-mono); font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--muted); padding: var(--sp-4) var(--sp-3) var(--sp-2); white-space: nowrap; overflow: hidden; } .sidebar.collapsed .nav-section-title { font-size: 0; padding: var(--sp-2); height: 8px; } .nav-item { display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-md); color: var(--fg-dim); font-size: 0.85rem; cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; overflow: hidden; user-select: none; margin-bottom: 2px; text-decoration: none; } .nav-item:hover { background: var(--surface-raised); color: var(--fg-bright); } .nav-item.active { background: var(--accent-bg); color: var(--accent); border: 1px solid var(--accent-border); } .nav-item .nav-icon { font-size: 1rem; min-width: 20px; text-align: center; } .sidebar.collapsed .nav-item { padding: var(--sp-3); justify-content: center; } .sidebar.collapsed .nav-item .nav-label { display: none; } .nav-badge { font-family: var(--font-mono); font-size: 0.65rem; background: var(--accent-bg); color: var(--accent); padding: 1px 6px; border-radius: var(--radius-pill); margin-left: auto; } .sidebar.collapsed .nav-badge { display: none; } /* ---------- Main Area ---------- */ .main-area { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-width: 0; } /* ---------- Top Bar ---------- */ .topbar { height: var(--topbar-height); min-height: var(--topbar-height); background: var(--surface); border-bottom: 1px solid var(--border); display: flex; align-items: center; padding: 0 var(--sp-5); gap: var(--sp-4); font-size: 0.8rem; } .topbar-toggle { background: none; border: 1px solid var(--border); border-radius: var(--radius-sm); color: var(--muted); cursor: pointer; padding: var(--sp-1) var(--sp-2); font-size: 1rem; transition: all var(--transition-fast); display: flex; align-items: center; } .topbar-toggle:hover { color: var(--fg); border-color: var(--border-light); } .topbar-breadcrumb { font-family: var(--font-mono); color: var(--muted); font-size: 0.75rem; display: flex; align-items: center; gap: var(--sp-2); } .topbar-breadcrumb .bc-sep { color: var(--border-light); } .topbar-breadcrumb .bc-current { color: var(--fg-bright); } .topbar-status { margin-left: auto; display: flex; align-items: center; gap: var(--sp-4); font-family: var(--font-mono); font-size: 0.7rem; color: var(--muted); } .status-dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; margin-right: var(--sp-1); } .status-dot.online { background: var(--green); box-shadow: 0 0 6px var(--green); } .status-dot.offline { background: var(--red); } /* ---------- Content ---------- */ .content { flex: 1; overflow-y: auto; min-height: 0; /* allow flex child to shrink and scroll */ padding: var(--sp-8) var(--sp-10); background: var(--bg); overscroll-behavior: contain; } .content-inner { max-width: var(--content-max-width); margin: 0 auto; } /* ---------- Fullscreen Demo ---------- */ .app-shell.fullscreen-demo { background: #000; } .app-shell.fullscreen-demo .main-area { flex: 1; overflow: hidden; /* main-area contains the scroll child */ } .app-shell.fullscreen-demo .content--flush { padding: 0; overflow-y: auto; flex: 1; min-height: 0; /* allow flex child to shrink and scroll */ overscroll-behavior: contain; } /* ---------- Responsive ---------- */ @media (max-width: 768px) { .sidebar { position: fixed; left: 0; top: 0; transform: translateX(-100%); z-index: 100; } .sidebar.open { transform: translateX(0); } .content { padding: var(--sp-4) var(--sp-5); } }