Add a family of five self-contained demo pages under demo/, each presenting 83 components in a distinct design language with one shared canonical order, unified names and CSS-counter numbering. Live behaviour reuses the real slaed.js + tablesort (tabs, sort, float dropdowns/tooltips, accordion and collapse), re-dressed per theme.
Core changes:
- UI kits (demo/ui-*-lab.html):
- ui-neutral-lab: flat production look on theme.css tokens
- ui-tactile-lab: convex/concave soft skeuomorphism, 4 corner-forms
- ui-float-lab: soft grey controls energizing to brand-blue
- ui-midnight-lab: dark neon glassmorphism
- ui-clay-lab: playful claymorphism with springy interactions
- Naming (demo/buttons-lab.html -> demo/ui-buttons-lab.html):
- fold the original button sandbox into the ui-*-lab family
Benefits:
- Shared component order and names make the five themes directly comparable
- Pure HTML/CSS plus the real slaed.js mechanics, no new dependencies
- Demo-scoped classes only; production base.css/theme.css untouched
Technical notes:
- Each page is standalone; charts are inline SVG / CSS conic-gradients
- Section numbering via CSS counters; interactives wired with vanilla JS
- Backward compatible: nothing outside demo/ is modified
Patch the vendored bootstrap-icons @font-face (lite and admin) to drop the FOIT: font-display block delays icon paint until the font loads, which Lighthouse flags (~60ms FCP). swap paints immediately and swaps in the glyphs once ready.
Core changes:
- Icon font face (templates/{lite,admin}/assets/vendor/bootstrap/css/bootstrap-icons.min.css):
- font-display: block -> swap
- drop the dead .woff src (no .woff file is shipped; only woff2 exists)
Technical notes:
- Vendor file edit; re-apply on a bootstrap-icons upgrade
Review sandbox for button styles, on lite design tokens, isolated under slb- (does not touch production sl-but-). Stays within the lite theme's clean, light look.
Core changes:
- Demo (demo/buttons-lab.html):
- flat families: solid / soft / outline / ghost / gradient / elevated
- frame shapes, sizes, icons, states (loading/disabled), groups, split, FAB
- clip-path/mask/skew shapes (chamfer, arrows, tag, hex, ticket, parallelogram)
- faithful repros: pillow (old frontend pill) and admin (admin-panel recipe)
- proposed theme families: rect / pill / elevated / elevated-shadow
Technical notes:
token-driven channels (--c / --cd / --ct, --slb-h/px/r) for combinable color x style x shape x size without CSS duplication
- :focus-visible rings, prefers-reduced-motion, color-mix edge derivation
Align theme CSS with the unified tab markup and the new admin field-value atom.
Core changes:
- lite theme.css:
restyle tabs for the class-based markup (sl-tabs-nav, sl-tabs-item, sl-tabs-link, sl-is-active, sl-tabs-content, sl-tab-panel)
- drop the legacy anchor-based tab selectors
- admin theme.css:
- add sl-form-row / sl-form-label / sl-form-value for field-value
Benefits:
- Consistent tab styling on the shared markup in both themes
Move the tab engine and flash-alert auto-hide into the global system plugin (loaded in both themes via script_f), replacing the per-theme copies. One source of truth, one htmx re-init path.
Core changes:
- System plugin (plugins/system/slaed.js):
add setTabs/initTabGroup (data-sl-tabs-init contract, keyboard nav, session restore, admin sync/tab-show/info-link, nav wheel-scroll)
- add setAlerts (data-sl-autohide flash dismissal)
- register both in setSlaedUi() and the htmx:afterSwap hook
- Removed per-theme scripts:
- templates/admin/assets/js/tabs.js
- templates/lite/assets/js/tabs.js
- templates/admin/assets/js/alerts.js
Benefits:
- No tabs.js duplication; ~228 fewer duplicated lines
- Frontend gains flash auto-hide for free once it emits data-sl-autohide
- Single htmx lifecycle hook for all UI widgets
Technical notes:
- editor-robots.js stays admin-only (CodeMirror CM6 config editor)
Mirror the admin tab templates into the lite theme so the shared tab contract resolves in both themes, and give the admin theme the field-value atom it was missing. Removes the obsolete lite navi-tabs-wrap.
Core changes:
- Tab templates:
- tabs-link.html (admin): optional raw label_html for HTML tab titles
lite: add partials/tabs.html, fragments/tabs-link.html, tabs-panel.html matching the admin data-attr contract
- remove lite fragments/navi-tabs-wrap.html (no longer referenced)
- field-value atom:
- add admin fragments/field-value.html
align lite field-value to the same inline label markup (byte-identical across themes), dropping the divergent label.html include
Benefits:
- Content tabs and extra-field rows render in both themes
- field-value identical across themes; one less cross-theme divergence
Technical notes:
- No caller passes label_html to field-value; inline label is safe
Content [tabs][tab] blocks and account tabs now emit the same data-attr tab contract as admin modules (data-sl-tabs-init / data-sl-tab-target / data-sl-tab-panel) instead of the legacy navi-tabs-wrap + anchor markup. This makes content tabs render and switch correctly under any theme, including the admin content preview that previously logged missing templates.
Core changes:
- Tab builder (core/system.php):
getNaviTabs() builds links via tabs-link and panels via tabs-panel, wrapped by the shared tabs partial with is_runtime
- Stable unique group id via a static counter, sanitized prefix/id
Plain titles escaped, HTML titles passed as raw label_html (behavior preserved from the old anchor builder)
Benefits:
- One tab contract across themes; admin preview no longer errors
- Robust against duplicate/empty ids
Update config and admins help to match the removed global admin-editor setting: the admin content editor is configured per-admin, not in the main config.
Core changes:
- Config help (admin/info/config/ru.md):
- Editors section: main config holds only the user editor; admin editor is per-admin
- Drop references to the removed global admin-editor field
- Admins help (admin/info/admins/ru.md):
- Expand the editor field description (only place to choose the admin editor; auto-default)
- Add a detailed "Редактор содержимого: какой выбрать" subsection: editor table, processing model, [usehtml], auto-default and on-the-fly switch
Technical notes:
- Only opening/standalone BB tokens are shown; the parser would consume complete BB pairs
Remove the duplicate global "editor.admin" setting. The admin content editor is chosen per-admin (Administrators module); the main config keeps only the user editor. New or unset admins fall back to plain.
Core changes:
- Config form (admin/modules/config.php):
- Remove the admin content-editor select and its save handling
- Saved editor config now holds only user + code
- Default config (config/global.php):
- Remove editor.admin (readers fall back to 'plain' via ?? 'plain')
- Constants (admin/lang/*.php):
- Remove the now-unused _EDITORADMIN constant across all six locales (keep _EDITORUSER)
Benefits:
- No duplicated admin-editor setting; single source is the per-admin profile
- Cleaner config surface
Technical notes:
- editor.admin readers keep the
?? 'plain'fallback; no behavior change beyond default = plain - Generated config/local.php cache regenerates from global.php on next request
Increase the responsive .sl-gallery grid minimum column width from 180px to 250px for larger content download thumbnails.
Core changes:
- Theme (templates/lite/assets/css/theme.css):
- .sl-gallery grid-template-columns minmax 180px -> 250px