feat: add visual admin panel with page builder and settings editor
- Add /admin route with password-protected visual page builder
- Page Builder: manage hero images, standalone albums, subpages, and sections
- Album Picker: browse all shared Immich albums with search and filtering
- Settings Editor: theme, grid, footer, legal, SEO configuration
- YAML service with atomic writes and automatic backups (content/.backups/)
- HMAC-signed admin sessions (24h expiry, HttpOnly cookies)
- API endpoints: /api/admin/{auth,gallery,settings,albums,reload}
- Enable with ADMIN_PASSWORD env var; disabled by default
- invalidateConfigCache() export for hot-reload after saves
2026-05-29 17:04:37 +02:00
|
|
|
/* ── Admin Panel Styles ─────────────────────────────────────── */
|
|
|
|
|
/* Self-contained — does not affect the public-facing gallery. */
|
2026-05-29 17:20:56 +02:00
|
|
|
/* Supports light/dark mode via data-theme attribute on <html>. */
|
|
|
|
|
|
2026-08-30 15:11:25 +02:00
|
|
|
/* The sheet was 4,855 lines; #533 split it along the component boundaries the
|
|
|
|
|
field layer established. This file is now only the load order, and that
|
|
|
|
|
order is load-bearing: several later sections deliberately override earlier
|
|
|
|
|
ones (the global button system, the drawer redesign, the responsive rules),
|
|
|
|
|
so these imports must not be sorted or regrouped.
|
|
|
|
|
|
|
|
|
|
Both admin/AdminShell.tsx and install/InstallWizard.tsx import this file, so
|
|
|
|
|
neither had to change. */
|
|
|
|
|
|
|
|
|
|
@import './styles/tokens.css';
|
|
|
|
|
@import './styles/base.css';
|
|
|
|
|
@import './styles/buttons.css';
|
|
|
|
|
@import './styles/shell.css';
|
|
|
|
|
@import './styles/page-builder.css';
|
|
|
|
|
@import './styles/album-picker.css';
|
|
|
|
|
@import './styles/settings-editor.css';
|
|
|
|
|
@import './styles/help.css';
|
|
|
|
|
@import './styles/asset-picker.css';
|
|
|
|
|
@import './styles/utilities.css';
|
|
|
|
|
@import './styles/drawers.css';
|
|
|
|
|
@import './styles/theme-cards.css';
|
|
|
|
|
@import './styles/seo-preview.css';
|
|
|
|
|
@import './styles/subpage-sheet.css';
|
|
|
|
|
@import './styles/save-bar-floating.css';
|
|
|
|
|
@import './styles/analytics.css';
|
|
|
|
|
@import './styles/drawer-live-preview.css';
|
|
|
|
|
@import './styles/essay-builder.css';
|
|
|
|
|
@import './styles/asset-order.css';
|
|
|
|
|
@import './styles/favicon.css';
|