feat(profile): add full-box card background tab and rendering

Adds a "Cards" tab to the Profile Background picker (BackgroundsView)
that selects a pattern applied to the entire user info card and the
extended profile container, in addition to the existing avatar-pad
background/stand/overlay layers.

- AvatarInfoUser/Utilities: propagate cardBackgroundId from RoomUserData.
- InfoStandWidgetUserView: stateful cardBackgroundId, applied as
  .profile-card-background.card-background-{id} on the outer Column
  with bg-color suppressed when active.
- UserContainerView: same class on the wrapper of the extended profile.
- BackgroundsView: 4th tab "cards" backed by cards.data config
  (falls back to backgrounds.data); sends 4-id message via the
  extended sendBackgroundMessage signature.
- ui-config.example: cards.data dataset (15 entries).
- BackgroundsView.css: 188 .card-background-{N} rules cloned from
  background-{N} (repeat-tiled) plus 15 CSS-pattern overrides for the
  provisional dataset (gradients, stripes, dots, grid, checker).
This commit is contained in:
simoleo89
2026-05-03 22:00:33 +02:00
parent 92e9bb19cd
commit 72bc4da3c0
7 changed files with 697 additions and 12 deletions
+17
View File
@@ -1346,6 +1346,23 @@
"isAmbassadorOnly": false
}
],
"cards.data": [
{ "backgroundId": 1, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 2, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 3, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 4, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 5, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 6, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 7, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 8, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 9, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 10, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 11, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 12, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 13, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 14, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false },
{ "backgroundId": 15, "minRank": 0, "isHcOnly": false, "isAmbassadorOnly": false }
],
"stands.data": [
{
"standId": 0,