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
Add a dedicated "Редакторы содержимого" section to the config admin help describing the separate user/admin editor configs and how each editor stores and renders content.
Core changes:
- Config help (admin/info/config/ru.md):
- Explain separate editor.user / editor.admin configs and the per-admin override
- Table of content editors (plain, toastui, tinymce, ckeditor) with roles and storage format
- Describe processing model (escaping + parser vs trusted HTML) and [usehtml]/[usephp]
- Note that TOAST UI has Markdown and HTML WYSIWYG modes, both saving Markdown
- Clarify the code editor (CodeMirror) is separate, used for admin code/markup fields
- Align label references with the new "Редактор пользователя" / "Редактор администратора"
Technical notes:
- Only opening/standalone BB tokens are shown; the parser would consume complete BB pairs