feat(ui): collapsible sidebar + rail, off-canvas mobile drawers, responsive layout

- Left sidebar collapses (topbar menu button); rail collapses (topbar button + strip).
- <=860px / portrait: sidebar + rail become off-canvas drawers over main with a
  scrim, closed by default; main goes full-width single-column.
- Smooth transitions; crossing the breakpoint resets to a sane default.
- New components/chrome.js owns toggle + drawer state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-02 23:57:45 +10:00
parent c325e53de4
commit 0026d2bc6e
4 changed files with 143 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ import { renderRightrail } from './components/rightrail.js';
import { emit, state } from './state.js';
import { el, mount } from './dom.js';
import { attachDropzone } from './components/dropzone.js';
import { initChrome } from './components/chrome.js';
const VIEWS = {
home: () => import('./views/home.js'),
@@ -72,6 +73,7 @@ async function init() {
renderTopbar(document.getElementById('topbar'));
renderSidebar(document.getElementById('sidebar'));
renderRightrail(document.getElementById('rightrail'));
initChrome();
attachDropzone(document.getElementById('main'));
route(renderView);
pollPending();