Журнал изменений
Four selectors opened two separate blocks each with complementary declarations, hiding half of a component's styling from the reader: the header login dropdown form (base block + arrow variable) and three mobile rules split across the max-width 900px section.
Core changes:
- Login dropdown (templates/lite/assets/css/theme.css):
- Arrow colour variable folded into the main dropdown-form block
- Mobile section (templates/lite/assets/css/theme.css):
- #hmenu overflow and padding blocks merged
- .sl-top-right flex and margin blocks merged
- #demo-line .sl-d-pane layout and margin blocks merged
Benefits:
- One block per selector; all declarations visible in one place
Technical notes:
Declaration relocation only, nothing dropped; verified by rendering the affected components under the pre-merge and merged CSS at 1280px and 800px viewports - computed styles identical
Two mega-sections carried misleading headers: "Chips" (~970 lines) held the speed dial, icon picker, monitor cards and more, while "Tabs" (~760 lines) started with the module frame and hid the changelog cards, sessions and form rows. Components are now grouped under headers that match their content, moving only the genuinely misplaced blocks.
Core changes:
- Relocations (templates/admin/assets/css/theme.css):
Rich-editor integration rules (Toast UI, CKEditor, CodeMirror inside .sl-div-form) moved from the tabs region into the forms section
.sl-chip block extracted from the middle of the sidebar-block family and placed ahead of it as its own section
- Section headers (comments only, no rule changes):
Sidebar blocks, list footer, admin home menu grid/cards, speed dial, icon picker, panel toggles, language editor rows, form actions
Module frame, tabs (now above the actual tab strip), classic form rows, search admin filter widths, sidebar links block, sessions, changelog
Benefits:
- Sections describe what they contain; new rules have an obvious home
Technical notes:
Verified stepwise with computed-style probes after each relocation and after the header pass (55 components, all identical) plus live monitor and category-form screenshots
Two pre-existing over-length editor selectors moved as-is (unsplittable single selectors)
The plus toggle and list meta glyphs (post, date, category, views) were defined in three passes spread over 3100 lines: font boilerplate in the status-icons area, the plus content next to the debug styles, and the sizing plus icon codes inside the tabs section.
Core changes:
- Meta glyphs (templates/admin/assets/css/theme.css):
One grouped definition right after the shared ::before font boilerplate: sizing/colour block, plus toggle content with its sl-is-open state, and the four meta icon codes
- Duplicate vertical-align declaration collapsed into the boilerplate
Contextual .sl-toggle-form-block-toggle.sl-plus::before override kept untouched in the forms section (higher specificity, order-independent)
Benefits:
- The glyph vocabulary reads as one component instead of three fragments
Technical notes:
Pure relocation; computed-style probes (55 components incl. ::before content, colour, sizing and both plus states) are identical
The admin span and link fragments carried branch lists copied from the lite theme. Per-flag tracing across the whole PHP tree showed most of them are never invoked while the admin theme is active, and their classes have no rules in the admin CSS.
Core changes:
- Span emitter (templates/admin/fragments/span.html):
Remove dead branches: shop price, card reads/post/admin, private message folders, favourite toggles, votes and cart total; outer condition pruned
Kept alive branches verified by tracing: back button, highlight, geo flag, alphabet letter (admin newsletter via letter()), text tones, hidden, bold
- Link emitter (templates/admin/fragments/link.html):
Remove dead branches: category, module, comment, read, card image, shop and cart checkout, last; outer condition pruned
- is_votes / is_comments stay: getVotingView() renders voting previews
inside news, shop and voting admin pages (hook classes by design)
- is_category stays available via inline-badge.html (help admin list)
- Bold utility fix (templates/admin/assets/css/theme.css):
Add .sl-text-bold { font-weight: bold; } to the text helpers
- database.php and statistic.php emit is_bold for count values which
silently rendered normal-weight; verified live (font-weight 700)
Benefits:
- Admin emitters describe only what admin pages can actually produce
- One real rendering bug fixed along the way
Technical notes:
Verified: 55 computed-style probes identical; full-page pixel diffs on monitor, category form, comments and changelog confined to dynamic debug-panel/clock zones (matched against a same-state double capture)
The admin alert component defines title, text, close and actions parts that no admin source ever emits: the admin alert fragment renders only the body/lines/flash structure, and the parser callouts use body-only markup. The rules were vocabulary parity with the lite theme without consumers.
Core changes:
- Alerts (templates/admin/assets/css/theme.css):
Remove .sl-alert-title, .sl-alert-text, .sl-alert-close (+ hover) and .sl-alert-actions
- Buttons (templates/admin/assets/css/theme.css):
Mark .sl-but-red as a reserved danger-action variant so future audits do not flag it as dead again; it gets wired to destructive actions in a follow-up change
Benefits:
- Admin CSS describes only what admin markup can actually produce
Technical notes:
Verified with computed-style probes over 55 admin components: the only diff is the probe element that carried the removed classes
Tone variants (sl-alert-info/success/warn/error/accent) and the flash bar are dynamic via the type flag and stay untouched
Three demo pages that link the production lite theme.css still emitted pre-consolidation alias-only chips, which render unstyled since the alias selectors left the theme.
Core changes:
- components-terra.html (demo/):
- Chip examples migrated to sl-chip [sl-chip-<tone>] plus semantic hooks
Rate-sites example drops the hook: it carries site-card positioning (position: absolute + opacity) that breaks the demo row
- modul-search.html (demo/):
JS result renderer emits canonical chip classes for date, category, comments, reads and author meta
- voting-block.html (demo/):
- Five vote-count links gain the canonical sl-chip class
Benefits:
- Demo pages render chips exactly like production templates
Technical notes:
Verified by rendering all theme-linked demo pages over HTTP: zero alias elements without sl-chip, clean consoles
A full browser audit of demo/ found 24 legacy admin concept pages that reference asset families removed from the admin theme during the Bootstrap Icons migration (b735d5a4): the templates/admin/images/icons/ directory (Noto emoji SVGs and old PNG icons) and the retired PNG logos.
Core changes:
- Removed pre-bootstrap concept mockups (demo/):
18 emoji-icon concepts (admin-*-2026, icon panels, command center); admin-pulse-2026 additionally hung the page load
- Legacy layout demos (admin-layout-demo, -2, admin-left-blocks-demo)
- icon-hover-gradient-demo and both statistic-monitor-etalon pages
Benefits:
- demo/ keeps only pages that render without broken assets
- The favoured bi-alive direction demos are untouched and clean
Technical notes:
- All files remain recoverable from git history
Verified with a Playwright pass over all demo pages (console, network, rendered DOM)
Add the live component catalog (demo/components-fable.html) that renders every lite-theme control with the production CSS, and align it with the consolidated vocabulary.
Core changes:
- Catalog page (demo/components-fable.html):
Buttons, chips, tips/popovers, alerts, forms, navigation, rating/voting, status glyphs, tone palette and a component-to-emitter summary table
Chip section documents the post-consolidation contract: canonical sl-chip + tone classes with semantic names kept as JS/htmx hooks only
Forum meta, tabs state and visibility utility notes match the current CSS (no .selected, no .sl-thide, geo-ip meta chip via getIpHtml)
Benefits:
- One reviewable page showing the real rendering of every control
- Documents which fragment emits each component and who consumes it
Technical notes:
Static page linking the production base.css/theme.css; page scaffolding is namespaced cf- and does not touch the sl- vocabulary
Geoip::getIpHtml() feeds 20+ call sites: comment/forum/pm meta rows where the IP renders as a green pill, and plain admin/frontend lists. The pill look lived in scoped context CSS; the renderer now signals the meta context explicitly and the last scoped chip rules leave the lite theme.
Core changes:
- Renderer (core/classes/geoip.php):
getIpHtml(string $ip, bool $meta = false) passes an is_geo_meta flag to the span fragment; default keeps every existing call site unchanged
- Meta call sites (core/system.php, core/user.php, modules/forum/index.php):
- Comments, private message view and forum posts pass meta = true
- Fragment (templates/lite/fragments/span.html):
- is_geo_meta adds sl-chip sl-chip-success ahead of the sl-geo-ip hook
- CSS (templates/lite/assets/css/theme.css):
- Drop the scoped .sl-cargs / .sl-fp-meta geo-ip pill rules
Add .sl-chip.sl-geo-ip a { color: inherit } so the inner IP link keeps the chip tone (replaces the two scoped link rules)
Benefits:
- The last context re-implementation of the chip recipe is gone
- Display context is an explicit contract instead of CSS scoping
Technical notes:
Same accepted chip-metric shift as the date/edit chips: padding 8 -> 11px, gap 4 -> 6px; verified via computed-style probes (only those two diffs)
Chip path verified live as moderator on a commented page; plain path is parameter-default identical, admin theme fragment ignores the new flag
- php -l clean on all touched PHP files
The changelog module carried a private button system (sl-changelog-button primary/secondary) that duplicated the role of the theme-wide .sl-but pill. The filter and reset buttons now fall through to the default button class.
Core changes:
- Module (modules/changelog/index.php):
Drop the is_changelog_primary / is_changelog_secondary flags from the filter and reset button fragments
- Emitter (templates/lite/fragments/button.html):
- Remove both changelog branches; the buttons take the sl-but default
- CSS (templates/lite/assets/css/theme.css):
- Delete the .sl-changelog-button* blocks
Rescope the mobile flex rule to .sl-changelog-filter-actions .sl-but so the buttons keep their full-width wrap layout on narrow screens
Benefits:
- One button component across the theme; changelog stops shipping its own
- Filter card visuals now follow the theme automatically
Technical notes:
Intended visual change confined to the changelog filter card: flat blue buttons become the standard theme pills
- Verified with desktop and 480px screenshots (layout intact) and php -l
- Card/commit styling and --sl-changelog-* tokens untouched