diff --git a/docker/frontend/src/Library.tsx b/docker/frontend/src/Library.tsx index 42cded5..acccee5 100644 --- a/docker/frontend/src/Library.tsx +++ b/docker/frontend/src/Library.tsx @@ -217,7 +217,7 @@ export function Library() { ); return ( -
+
diff --git a/docker/frontend/src/styles/app.css b/docker/frontend/src/styles/app.css index 0011692..6471ed1 100644 --- a/docker/frontend/src/styles/app.css +++ b/docker/frontend/src/styles/app.css @@ -994,6 +994,33 @@ input[type="range"] { width: 100%; accent-color: var(--accent); } .adm-danger { color: var(--danger); border-color: var(--border); } .adm-danger:hover:not(:disabled) { border-color: var(--danger); } +/* The catalogue is one screen and never grows: the frame on the stage, the tree + beside it, and the strip pinned to the bottom edge. Whatever overflows scrolls + inside its own panel, so the page itself has no scrollbar to hide the strip + below the fold. Scoped to `.lib-root` — /admin shares the .adm-* blocks and + still scrolls as a page. */ +.lib-root { display: flex; flex-direction: column; height: 100%; overflow: hidden; padding-bottom: 12px; } +.lib-root .adm-frame { flex: 1 1 auto; min-height: 0; } +.lib-root .adm-pane { display: flex; flex-direction: column; min-height: 0; overflow: hidden; } +.lib-root .adm-note { flex: 0 0 auto; } +/* The column: title and the folder's own chips stay put, the split takes what + is left, the strip keeps its natural height on the bottom. */ +.lib-root .adm-col { flex: 1 1 auto; min-height: 0; } +.lib-root .adm-col > .adm-split { flex: 1 1 auto; min-height: 0; align-items: stretch; } +.lib-root .adm-col > .adm-filmstrip { flex: 0 0 auto; } +.lib-root .adm-album-list { max-height: none; flex: 1 1 auto; min-height: 0; } +.lib-root .adm-stage { min-height: 0; overflow: hidden; } +/* The frame fills the stage and the stage fits the window: `object-fit` letterboxes + it inside that box, so a 3:2 or a 4:3 frame stays whole and never pushes the + strip off screen. */ +.lib-root .adm-stage-img { flex: 1 1 auto; min-height: 0; width: 100%; aspect-ratio: auto; object-fit: contain; } +.lib-root .adm-stage > .lib-noimg { flex: 1 1 auto; min-height: 0; aspect-ratio: auto; } +.lib-root .adm-stage > .adm-meta, +.lib-root .adm-stage > .chip-row { flex: 0 0 auto; } +/* All thumbs: the wall scrolls down inside the stage, and its own scrollbar on + the right edge is what reaches the frames below. */ +.lib-root .adm-grid { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding-right: 6px; } + /* Settings drawer: the tabs that organise the page, plus the three panels. */ /* The management frame: a bordered box whose left column is the menu and whose right side is the pane for the chosen section. */