/* Unified Apps Layout Styles. Extracted from apps-unified-layout.html so all CSS lives under css/ — themes drive colors via the variables defined in themes//theme.css. */ /* Sidebar + main fit the viewport exactly (minus the 60px topbar) and scroll independently — same pattern Tasks uses, so the sidebar background paints the full column even when the main content is shorter than the viewport. */ .apps-layout { display: flex; width: 100%; height: calc(100vh - 60px); } .sidebar-container { flex-shrink: 0; width: 220px; height: 100%; background: var(--sidebar-bg); border-right: 1px solid var(--border-color); overflow-y: auto; transition: transform 0.3s ease; } .main-content { flex: 1; height: 100%; display: flex; flex-direction: column; overflow: hidden; } .content-view { flex: 1; overflow-y: auto; } #app-detail-view { display: none; padding: 22px; } .content-view.active { display: block; } #apps-view.active { display: block; } /* Mobile responsiveness */ @media (max-width: 768px) { .apps-layout { flex-direction: column; } .sidebar-container { width: 100%; position: fixed; top: 60px; left: 0; right: 0; bottom: 0; z-index: 1000; transform: translateX(-100%); background: var(--sidebar-bg); } .sidebar-container.mobile-open { transform: translateX(0); } .main-content { width: 100%; } } /* Ensure sidebar stays visible during transitions. Scoped to the apps layout — on the config page the sidebar is a direct flex child of .container with its own 220px width from sidebar.css, and the unscoped width: 100% here was flex-basing the sidebar to 100% of the container, breaking the config layout. */ .apps-layout .sidebar { width: 100%; height: 100%; overflow-y: auto; } @media (max-width: 768px) { #app-detail-view { padding: 10px; } }