Журнал изменений
Formatting-only pass over the four theme stylesheets: one property per line, uniform 2-space indentation, one blank line above each comment and none below, single-line English section comments in the "Name: scope" format.
Core changes:
- Formatting (admin and lite base.css, theme.css):
48 compact one-line rules expanded (alert tone remaps, keyframe frames)
One blank line between blocks at every nesting level, no doubles, no blanks inside declaration blocks
Over-long values wrapped at list commas; quoted data URIs stay atomic
- Comments:
- 13 multi-line comment paragraphs condensed to single lines
Around 45 bare section names received scope descriptions (Header, Footer, Buttons, Layout, ...)
Stray comments hoisted out of foreign blocks: / Buttons / sat inside a media query, a leftover label inside @keyframes dropped
- Remaining Russian words in comments translated
Technical notes:
Zero behavior change proven per file: the normalized token stream (comments stripped, whitespace collapsed) is byte-identical before and after the pass
Two data-URI lines in the admin theme stay over 180 chars; the quoted string cannot wrap without changing the value
One UI stream across the lite theme: chips become the single meta component with a tone vocabulary, floats get a touch-safe open/close model, voting and login reuse system components, and 2026 phone viewports get layout and input fixes.
Core changes:
- Chips (theme.css, link.html, core/system.php):
Explicit sl-chip-* tone wins on links too; each tone rule pairs its resting tint with --sl-chip-hover-bg, consumed by one nested &:hover on clickable chips
- favourite toggles and author wrapper chips (:has(> a)) deepen the
same way; transition lives on the base chip rule
New link.html params: chip_tone renders any link as a toned chip, icon_name reused for the chip glyph (space instead of inside flex chips)
Voting widget: comments chip is info blue and links to the real #comm anchor; "other polls" becomes an accent chip in the votes row
Login dropdown: standard sl-but submit, danger/success chips for lost password and registration; dead sl-login-submit rules and tokens removed
- Floats (plugins/system/slaed.js, theme.css):
mouseleave closes over a 300ms grace timer: a panel fading display to none is not hit-testable, so it must stay fully open while the cursor crosses the gap into it
placeFloat parks off-screen only before the first measure and cancels a pending close; re-placing never yanks the panel from under the cursor
- pointerdown outside closes hover floats (touch has no mouseleave)
Tip panels force text-align left inside centered hosts (forum name plate); in-body comments condensed to single lines above functions
- Editor autofocus (plugins/editors/toastui/driver.php):
Toast UI constructor now receives autofocus from the driver flag; pages with a comment editor no longer auto-scroll to it on load
- Profile header (account-profile.html, theme.css):
User "..." menu before the admin gear, right-aligned like comments; .sl-com-edit pins to the third grid column
- Mobile 2026 (theme.css):
Grid row-gap in percent never joins the auto height calc, so stacked footer rows overflowed under the bottom menu by the summed gaps; fixed token row-gap and block footer columns fix the overlap
- 15px body text and 16px fields under 768px (stops iOS focus zoom)
40px coarse-pointer hit zones on compact controls via ::after overlay, visual size unchanged
Profile info table stacks label/value cells; footer menu matches the 8px page gutter with compact dividers
Benefits:
- One chip vocabulary instead of per-case styling
- Touch users can open, reach and dismiss popovers reliably
- Poll pages open at the top; phone footer renders without overlap
Technical notes:
Verified via Playwright against live pages at 390/430px mobile and 1400px desktop; token contracts unchanged, no console errors
Theme updates backing the unified float/tip/list work in both themes.
Core changes:
- Float panels (lite + admin theme.css):
Closed panels use display none with an allow-discrete transition so hidden menus stop inflating scrollWidth (phantom scrollbar under every moderator list table); @starting-style keeps the fade-in
One generic open rule (.sl-float:hover / :focus-within) replaces the menu- and tip-scoped variants; dead .sl-dropdown* blocks removed
- List tables (lite):
td.sl-cell-ellipsis becomes the flexible truncating column (width 100% + max-width 0) instead of a fixed 450px link cap
- sl-table-col-num keeps the gear+number pair on one line
- Tip + name pairs are flex rows: exact 6px gap, centred icon
- Page layout (lite):
40px side gutters between 769-1400px keep the fixed idea/feedback tabs off the content column
Login toggle styled as a span trigger; the dropdown arrow reuses the shared .sl-float-panel::after geometry instead of a custom pair
- Debug (lite + admin):
min-inline-size 0 on .sl-debug-section stops unbreakable tokens from stretching the page on mobile
Benefits:
- No horizontal scrollbars from invisible panels or wide titles
- Consistent popover arrows and hover behaviour everywhere
The legacy click dropdown on user names is gone. Everywhere the "i" tip shows profile facts on hover and a click on the name navigates to the profile; hover previews, click navigates.
Core changes:
- Shared helpers (core/helpers.php, core/system.php):
getUserTip() builds the hover tip (group, points, regdate, gender, origin, warnings) once for comments, forum posts and PM; guests get "Status: Guest", orphaned uids without a name "Status: User deleted"
user_info() takes an icon flag; name links next to the tip render without the person icon
- New _USERDEL constant in all six languages
- Call sites (setComShow, forum, PM in core/user.php):
report + username_html replace the per-site dropdown data keys; guest names show as entered, empty ones fall back to _ANONYM
- Favorites list cells reordered to match its header
- Templates (comment, forum-post, account-profile, login-nav):
- Click dropdown markup removed; tip + bold name pair instead
Profile: name is plain text (final point), Message/Back moved into the "..." user menu next to the admin actions menu
- Login is a hover/focus trigger; no toggle-control navigation stub
- Float behaviour (slaed.js):
mouseleave keeps a panel open while focus is inside (login form), focusout ignores focus moves between inner fields
Benefits:
- One mechanism instead of four ad-hoc dropdown variants
- Login form no longer closes mid-typing
Every frontend list now renders the moderator gear menu before the number anchor in one cell and moves the date column into the info tip before the title, freeing ~120px for titles.
Core changes:
- Generic list row (table-row.html, table.html):
Moderator popover merged into the sl-table-col-num cell, the separate "Functions" column and its col_func header removed
Date cell replaced by a report tip before the title link; data-sort keeps tablesort clean; col_date header removed
- List modules (files, pages, news, links, media, faq, help, shop):
- time_text/time_iso/time_label replaced by one getTplTitleTip call
- col_func / col_date dropped from table_open
- Voting and content:
- voting-home.html: gear menu ordered before the number anchor
content: cells reordered to match the header (title, number) fixing the header/body column misalignment
Benefits:
- Identical gear+number pattern across all modules
- Header and body columns always match for guests and moderators
The toolbar classifier measured a mid-parse column width and never re-ran, so icons spilled over the sidebar; the editor mount div also shrink-wrapped to the toolbar instead of matching the other fields.
Core changes:
- Toolbar refit (slaed-tags.js):
Pin the toolbar to the real remaining row width (minus md tabs) so the native ResizeObserver reclassifies against honest numbers
- Re-run on window load, window resize and editor changeMode
- Editor sizing and reflash (slaed-icons.css):
Mount div gets flex basis / width 100% like every .sl-field input, in both markdown and wysiwyg modes
overflow-x clip on the toolbar row keeps the brief all-icons re-render inside the frame; dropdown and popups stay visible
Benefits:
- Icons never paint over the sidebar at any viewport width
- Surplus icons land in the native "..." dropdown as designed
The voting button relied on HTMX implicitly including the enclosing form's token; make it explicit like the other form-based ajax actions (addComment, addPrivateMessage).
Core changes:
- Voting widget (core/system.php):
- Pass hx_include => '#form'.$votid to the vote action so the form (token + answers) is included
- Action fragment (templates/{lite,admin}/fragments/comment-action-ajax.html):
- Render an optional hx-include attribute when provided (no-op for other callers)
A stale or missing CSRF token on a go=1/2/5 request died with a raw "Illegal file access". Return the localized alert instead, and make the token constant available on the front end where the gate runs.
Core changes:
- Ajax gate (index.php):
- On token mismatch return the _TOKENMISS alert fragment instead of a bare die()
- Language constants:
- Add _TOKENMISS to all front-end lang files (loaded first at bootstrap, before the gate)
- Remove the now-duplicate _TOKENMISS from admin lang files
Callouts nested inside list items were emitted as raw "> [!...]" text instead of rendering as alert blocks.
Core changes:
- auto_links / changelog admin help (modules/*/admin/info/ru.md):
- Move the [!TIP]/[!IMPORTANT] callouts to top level so they render as .sl-alert