Restore the existing membership purchase cards and keep the UX refresh limited to the top membership summary.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Remove the shared dashboard card around the VIP panel and render membership details as title, level, intro, and expiry rows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Remove profile identity chrome from the VIP header, keep the crown watermark, and flatten the summary into one thin card while preserving membership purchase cards.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
profile-header.php was rendering two badge buttons ("我的徽章"
opening the local modal and "徽章弹层" opening a remote modal).
Drop the remote one and gate the local one behind the new
aksrt_user_has_visible_badges() helper, which only returns true
when the user actually has at least one badge entry that exists
in the active catalog dictionary — preventing a useless empty
modal when nothing can be shown.
Close the full circuit break in the badge/medal system and replace
empty default icons with preset SVG assets so badges render out of
the box:
- Add aksrt_get_worn_medal_icon() helper that renders the worn medal
image inline (with settings fallback when the Badges class is
unavailable).
- Profile header (UC) now shows the worn medal icon beside the name,
matching zibll's name row order (display_name → VIP → Medal → Level → Verify).
- Add .medal-icon / .aksrt-identity-medal vertical-align rules in UC shell.css.
- Extract SchemaUsers::default_medal_args() and preset 6 badges (rookie,
checkin-30, writer, popular, annual-star, vip-member) with real icon
URLs from assets/img/medal/ (medal-1/2/5/9/12/15.svg).
- Vue badge.js: add MEDAL_BASE helper + preset icons matching PHP defaults.
Order items without a product thumbnail render the title and price into the
3-column grid with the image slot missing, so the title gets crushed into the
64px image column and the price floats far right. Tag such items with a
--no-image modifier that drops the image column (desktop: title fills the row
with price right-aligned; mobile: title full-width, price wraps below).
Per feedback the 待支付/售后 shortcut row is not wanted. Remove the nested
quick grid, delete the now-orphaned sidebar-orders renderer, and strip its
uc-order-grid CSS. 我的订单 remains a single tile in the 我的服务 grid.
The standalone order card is folded into the 我的服务 (My Services) sidebar
section: 我的订单 becomes a service-grid tile (all orders), with the
待支付/售后 quick shortcuts rendered beneath it as a compact row. Gated on
the orders dashboard tab being registered so no dead tile appears when the
payment stack is absent.
Phase 2 of the shop removal (1d250535) deleted inc/helpers/aksrt-commerce.php
but left the require_once in bootstrap.php, fatally breaking every page load.
The only surviving caller (page-revenue.php) already falls back gracefully.
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>
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.