Align the 20 marketing/decoration widgets with Zibll field defs in
widget-produck.php / widget-more.php, focusing on the field-level
drift surfaced by the 1:1 audit:
- TagCloudWidget (widget_ui_tag_cloud): orderby → name/count/term_id
(was count default), add order ASC/DESC, expand color palette to
all 13 Zibll c-* keys (rand/c-hui/c-blue/-2/cyan/yellow/-2/green/
-2/purple/-2/red/-2), number cap 100, default 20.
- WidgetBookmarkLinks (widget_ui_links_lists_2): add alignment
(''/center/right) to form+update+render wrapper.
- FriendLinksWidget: expose orderby/order selects in form (already
whitelisted) for bookmarks mode.
- ButtonsWidget (zib_widget_ui_buttons): whitelist pc_padding/
m_padding/pc_width/m_width (were render-only), widen pc_gap/
m_gap cap to 60 to match Zibll.
- RecentCommentsWidget (widget_ui_new_comment): count cap 50
(was 20), whitelist outer_keywords.
- WidgetVideoPlayer (zib_widget_ui_dplayer): scale_height cap 200
(was 100), whitelist muted + aspect_ratio.
Remaining 14 widgets (PricingPlans/Reviews/Faq/Stats/Highlights/
FeatureIntro/TiltCases/IconCards/IconCoverCards/CoverCards/
ComboInfo/PartnersScroll/TextTitle/Iframe) already match Zibll
field semantics (JSON/native group + obs_animation/palette/
pc_row·m_row/go_link); no drift to fix.
Acceptance: php -l clean on all changed files; audit exit 0;
all 21 widget files <=360 lines. Phase 5 done-when marked.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Align the 5 user/author/slider widgets with Zibll CSF widget
definitions in widget-user.php / widget-slider.php and
options-module.php (add_slider / slide / zib_palette):
- WidgetUserCard (widget_ui_user): add Zibll button palettes
(button_1_class/button_2_class via new palette_opts()/
sanitize_palette() replicating CFS_Module::zib_palette c/b/jb)
and button_2 type (home/center) → profile/center URL.
- WidgetAuthorCard (widget_ui_avatar): add show_button +
button_1/button_2 (class/text/type) rendered only when the
logged-in viewer is the author (zibll parity); expand orderby
to modified/like/favorite.
- WidgetUserRanking (zib_widget_ui_user_ranking): rename field
to Zibll `orderby` (default checkin_all_day) with the exact
4 dims (checkin_all_day/checkin_continuous_day/points→credits
/followed-user-count→followers) + `number` (was count); keep
rank_by/count aliases for legacy instances; reword desc
options to match Zibll labels.
- WidgetSlider (zib_widget_ui_slider): add direction/speed/
spacebetween/scale_height+scale/autoplay to form+update+render,
pass through to aksrt_render_slider (effect/loop/button/
pagination/pc·m_height/interval already present); widen
interval min to 0, height default to 400 (zibll pc_height).
- aksrt_user_card_query_posts: support like/favorite orderby
(meta _aksrt_like_count / _aksrt_favorite_count) so the
author/user-card more-posts strip honors the expanded orderby.
Acceptance: php -l clean on all changed files; audit exit 0;
all widget files <=383 lines. Phase 4 done-when marked.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
6-phase vertical-slice plan for full 1:1 replication of the Zibll
widget system into AKSRT. Covers pagination fatal fix, card-stacking
CSS fix, unified renderer, shared common-form layer adoption, and
per-category widget alignment (posts/users/slider/marketing/forum/shop)
plus resource migration and registration/block-editor parity.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The level (等级) badge was wrapping to its own line below the username and
rendering at the intrinsic PNG size in most surfaces. Centralize the badge
sizing after zibll's `.img-icon` (height: 1.1em, inline-block) in base.css so
every route gets the same compact inline badge, and keep the name row from
flex-wrapping.
- Add shared `.aksrt-user-level-icon / .aksrt-identity-medal` rule + nowrap name
rows in base.css (loaded on all routes).
- Header dropdown: append the level icon next to the display name (was a
separate badges row); constrain the name to ellipsis so the badge never wraps.
- User center profile header & author hero: render the level icon inside the
<h1> name row; drop the duplicate level chip from the signals row.
- Single article author bar / after-box author card: nowrap the name row and
size the level icon to 1.2em (was unstyled → intrinsic PNG size).
- Comments: inner <name> nowrap with a name clamp; medal sized to 1em.
- Consolidate the per-route `.aksrt-user-level-icon` duplicates in
user-center/level.css and profile/layout.css onto the shared rule.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fix modal scroll ownership and certification modal styling, store evidence as Media Library attachments, reconcile missed provider callbacks, validate currencies, and complete digital fulfillment only after durable entitlement delivery.
Capture real client IPs behind CDN, improve provider fallbacks and
negative cache, fix admin credential dependsOn for polling mode, and
map country labels to ISO codes for moderation GeoIP blocks.
Order progress was stuck on "订单创建" because timeline only read sparse
timestamp columns and status transitions didn't always stamp them.
Drive timeline from current status + related records, backfill lifecycle
timestamps on update_status, and replace window.confirm cancel with a
关闭订单 → 确认取消 button step in the detail modal.