From 20c46e54690f7c7befb7059960447935231d86be Mon Sep 17 00:00:00 2001 From: "Alex Pooley (@zuedev)" Date: Sat, 25 Jul 2026 17:45:15 +0100 Subject: 2-col layout --- 174bg/manager/src/theme.css | 194 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 186 insertions(+), 8 deletions(-) (limited to '174bg/manager/src/theme.css') diff --git a/174bg/manager/src/theme.css b/174bg/manager/src/theme.css index 907a77e..7694f0d 100644 --- a/174bg/manager/src/theme.css +++ b/174bg/manager/src/theme.css @@ -28,7 +28,6 @@ html { body { margin: 0; min-height: 100vh; - padding: 2.5rem 1.25rem 4rem; color: var(--text); background-color: var(--bg); background-image: @@ -44,11 +43,23 @@ body { 44px 44px, 44px 44px; background-attachment: fixed; +} + +/* Centered layout for the logged-out login screen ------------------- */ +.center-view { + width: 100%; + min-height: 100vh; + padding: 2.5rem 1.25rem; display: flex; flex-direction: column; align-items: center; } +.center-view > * { + width: 100%; + max-width: 760px; +} + h1 { font-family: "Orbitron", sans-serif; font-weight: 900; @@ -83,12 +94,169 @@ a:hover { border-bottom-color: var(--accent-2); } -body > h1, -#anonymous, -#oauth-status, -#authed { +/* App shell / sidebar navigation ------------------------------------ */ +.app-shell { width: 100%; - max-width: 760px; + min-height: 100vh; + display: grid; + grid-template-columns: 220px 1fr; +} + +.sidebar { + position: sticky; + top: 0; + align-self: start; + height: 100vh; + display: flex; + flex-direction: column; + gap: 1rem; + background: var(--panel); + border-right: 1px solid var(--panel-border); + padding: 1.25rem 1rem; + overflow-y: auto; +} + +.sidebar-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.5rem; +} + +.sidebar-title { + font-family: "Orbitron", sans-serif; + font-size: 0.95rem; + letter-spacing: 0.04em; + color: var(--accent); +} + +.sidebar-close { + display: none; + width: auto; + padding: 0.3rem 0.55rem; +} + +.sidebar-user { + margin: 0; + font-size: 0.85rem; + color: var(--text-dim); +} + +.sidebar-nav { + display: flex; + flex-direction: column; + gap: 0.35rem; +} + +.sidebar-link { + display: block; + padding: 0.55rem 0.7rem; + border-radius: 8px; + color: var(--text); + font-weight: 600; + letter-spacing: 0.01em; + border-bottom: none; +} + +.sidebar-link:hover { + border-bottom: none; + background: rgba(56, 189, 248, 0.1); +} + +.sidebar-link-active, +.sidebar-link-active:hover { + background: linear-gradient(120deg, var(--accent), var(--accent-2)); + color: #04121f; +} + +.sidebar-logout { + margin-top: auto; +} + +.sidebar-backdrop { + display: none; +} + +.app-content { + min-width: 0; + padding: 1.5rem 1.75rem 2.5rem; + display: flex; + flex-direction: column; + gap: 1.25rem; +} + +.topbar { + display: none; + align-items: center; + gap: 0.75rem; + padding: 1rem 1.25rem 0; +} + +.nav-toggle { + width: auto; + padding: 0.5rem 0.75rem; +} + +.topbar-title { + font-family: "Orbitron", sans-serif; + font-size: 1rem; + letter-spacing: 0.03em; + color: var(--accent); +} + +.page, +.page-stack { + display: flex; + flex-direction: column; + gap: 1.25rem; + width: 100%; + max-width: 1000px; +} + +@media (max-width: 900px) { + .app-shell { + display: block; + min-height: 0; + } + + .topbar { + display: flex; + } + + .app-content { + padding: 1rem 1rem 2rem; + } + + .sidebar { + position: fixed; + top: 0; + left: 0; + bottom: 0; + height: auto; + width: 78vw; + max-width: 300px; + border-right: 1px solid var(--panel-border); + box-shadow: 18px 0 48px rgba(0, 0, 0, 0.45); + transform: translateX(-100%); + transition: transform 0.25s ease; + z-index: 40; + } + + .sidebar-open { + transform: translateX(0); + } + + .sidebar-close { + display: inline-flex; + } + + .sidebar-backdrop { + display: block; + position: fixed; + inset: 0; + background: rgba(2, 6, 16, 0.6); + z-index: 30; + } } /* Panels ----------------------------------------------------------- */ @@ -101,7 +269,7 @@ body > h1, background: var(--panel); border: 1px solid var(--panel-border); border-radius: 14px; - padding: 1.25rem 1.4rem; + padding: 1rem 1.15rem; backdrop-filter: blur(10px); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), @@ -308,10 +476,15 @@ input[type="checkbox"] { /* Responsive — tablet */ /* ================================================================= */ @media (max-width: 640px) { - body { + .center-view { padding: 1.5rem 0.85rem 3rem; } + .app-content { + padding: 0.85rem 0.85rem 2rem; + gap: 1rem; + } + #anonymous, #required-info, #preferences, @@ -346,6 +519,11 @@ input[type="checkbox"] { width: 100%; } + .nav-toggle, + .sidebar-close { + width: auto; + } + #preferences thead th:first-child, #preferences tbody td:first-child { white-space: normal; -- cgit v1.2.3