Zibll reserves +50px only for covers whose title overlays them
(image/slide via .single-cover/.single-cover-slide); the video cover
keeps its title in the footer below and uses the bare scale height
(.dplayer-scale-height). Drop the +50px from the video box, pin the
reference height matrix in the contract test, and refresh the stale
slide-action assertion in the toast contract.
Slide-mode images rendered at intrinsic ratio, top-aligned inside the
swiper chain (--pc-height:auto left .swiper-wrapper content-sized), so
the taller box showed a gap at the bottom and never center-cropped like
the image cover. The video cover had the same problem through
video-player.js (height:auto, capped at 70vh).
- aksrt_render_slider scale mode emits --pc-height/--m-height 100% so
the wrapper/slide/img chain fills the ratio box and object-fit: cover
center-crops inside it (same pattern as the .scale-height widgets)
- video-player.js renders the video at height:100% + object-fit:cover;
with an undimensioned container height:100% degrades to auto,
matching the previous behavior
- drop the dead .single-cover padding-bottom rules (every producer owns
its height inline, and the rule squeezed the absolutely positioned
slide inner) and the orphaned --single-cover-scale var in
tokens.css/compat-vars.css/main.css/InlineStyleBuilder
- rebuild public bundles; extend the single-cover-height contract
The image-mode cover reserves +50px for the title/breadcrumb overlay
(calc(scale% + 50px)), but the slide cover wrapper was given a bare
inline padding-bottom by aksrt_render_slider, permanently defeating the
.cover-slide rule, and the video cover used a bare video_scale%.
- aksrt_render_slider: add scale_extra so scale mode emits
calc(ratio% + extra); the single cover passes 50px so all three
modes share one height formula
- drop the unreachable static slide fallback and function_exists guard
(the helper is unconditionally loaded by inc/bootstrap.php), the
always-true cover_url/ep_count conditions, and the dead --scale-ratio
and inner swiper padding emitted in scale mode
- remove the dead cover CSS cluster with no producer: .single-cover-slide
(main.css/main.min.css/cover.css), .single-cover-slider family
(components/base.css), .single-cover-slide-wrap and .single-cover__*
helpers (cover.css), and initSlideCovers in misc.js
- rebuild public bundles via tools/build-public-assets.mjs
- add single-cover-height-contract test covering the shared formula
and the dead-code removals
Sidebar visibility had two disconnected decisions: the body site-layout-*
class (via aksrt_is_show_sidebar_filter) only checked widget activity for
singles, while the homepage aside renderer skipped the column and
sidebar.php rendered an empty one. With the toggle on and no widgets, the
homepage kept a reserved gutter and squeezed the main content aside.
- collapse every scene to no-sidebar when the sidebar widget stack is empty
- resolve home_sidebar before the page branch so a static front page is
checked against the zones the homepage renders
- guard the homepage aside with aksrt_is_show_sidebar() alone and drop the
duplicate aksrt_homepage_has_sidebar gate
- early-return sidebar.php instead of rendering an empty column
- drop dead code: archive helper $preferred param, wp_is_mobile fallback,
container--no-sidebar class, unreachable front-page fallback
- update post-visual-contract to pin the single visibility decision
Verification: php -l on all changed files; node --test
tests/widget-system/*.test.cjs 242/243 (the toast-contract failure is
pre-existing and unrelated).
The aggregation card's N篇文章 meta reads found_posts, but paginate ''
disables SQL_CALC_FOUND_ROWS and found_posts comes back 0 on current
WordPress. The reference shows the term's total post count, so keep
found rows enabled for this internal query.
The shared term cover helper read aksrt_cover_url/cover_url term meta,
keys this theme never writes, so 分类图文卡片 dropped every card and
分类聚合卡片 always rendered an empty cover box. Resolve covers the way
the rest of the theme does (aksrt_category_cover_id → latest thumbnailed
post in the term), and let the aggregation card fall back to the theme
placeholder while term cards stay hidden without a real cover.
- rewrite schemas for posts, tab_posts, oneline_posts, hot_posts,
term_cards, term_aggregation, media_cards, combo_info, partners,
recent_comments, posts_toc and slider_media_combo to mirror the
modern reference modules field by field (options, defaults,
dependencies, min/max/step, subheadings)
- port reference renderers: hot ranking with TOP badges, category
aggregation card, graphic cover cards, partners CSS marquee,
combo info cards with auto band palette, recent comment list
- rename 分类与标签聚合卡片 to 分类聚合卡片 and restrict it to
categories (no tags/topics branch in this project)
- drop topics filter fields and the topics query branch; align
orderby value domain with supported post meta
- add searchable sortable terms admin field type and spinner unit
suffix rendering
- unify widget pagination and lazy loading on the REST client with
the runtime-owned ias reveal trigger; remove the legacy
post_ajax_trigger dual path
- align section-navs TOC with the reference contract (wznav ids,
3-heading minimum, zib-widget box)