From 21e35107c79cd699bc43a8ef46478c1d9619671c Mon Sep 17 00:00:00 2001 From: arussac Date: Sun, 31 May 2026 15:15:48 +0200 Subject: [PATCH] feat: update styles and enhance pet purchase flow in marketplace components --- backend/src/lib/catalog.ts | 2 - frontend/src/components/AdBand.vue | 10 ++-- frontend/src/components/ChatHeader.vue | 25 ++++----- frontend/src/components/InlineCasinoAd.vue | 14 ++--- frontend/src/components/StatsTicker.vue | 28 ++++------ frontend/src/components/shop/ProductCard.vue | 39 +++++++------ frontend/src/composables/ipColor.ts | 7 +-- frontend/src/composables/useMessages.ts | 58 +++++++++++--------- frontend/src/composables/useShop.ts | 5 +- frontend/src/views/HomePage.vue | 2 +- frontend/src/views/ShopPage.vue | 8 +-- 11 files changed, 99 insertions(+), 99 deletions(-) diff --git a/backend/src/lib/catalog.ts b/backend/src/lib/catalog.ts index 4ff25f5..92e5d10 100644 --- a/backend/src/lib/catalog.ts +++ b/backend/src/lib/catalog.ts @@ -132,8 +132,6 @@ export async function purchase( break; } case "pet": { - if ((await countActiveEntitlements(ip, "pet")) >= 3) - throw new PurchaseError("Maximum 3 pets actifs", 409); const char = options.petChar ?? "♥"; grants.push({ kind: "pet", diff --git a/frontend/src/components/AdBand.vue b/frontend/src/components/AdBand.vue index 7e9b812..3c73836 100644 --- a/frontend/src/components/AdBand.vue +++ b/frontend/src/components/AdBand.vue @@ -115,11 +115,11 @@ onMounted(fetchAds); font-weight: bold; margin: 0; } -.ad-brand--blue { color: #5555cc; text-shadow: 0 0 8px #4444aa; } -.ad-brand--green { color: #33aa55; text-shadow: 0 0 8px #225533; } -.ad-brand--purple { color: #9944dd; text-shadow: 0 0 8px #6622aa; } -.ad-brand--user { color: #ffcc44; text-shadow: 0 0 8px #aa8822; } -.ad-brand--casino { color: #ff5533; text-shadow: 0 0 8px #aa2200; } +.ad-brand--blue { color: #4455aa; } +.ad-brand--green { color: #336644; } +.ad-brand--purple { color: #6633aa; } +.ad-brand--user { color: #998833; } +.ad-brand--casino { color: #884433; } .ad-sub { font-family: Arial, sans-serif; diff --git a/frontend/src/components/ChatHeader.vue b/frontend/src/components/ChatHeader.vue index fcab204..99f2fa1 100644 --- a/frontend/src/components/ChatHeader.vue +++ b/frontend/src/components/ChatHeader.vue @@ -57,8 +57,7 @@ const { ip, freeMode, displayBalance } = useWallet(); font-family: Arial, sans-serif; font-size: 18px; font-weight: bold; - color: #00eeff; - text-shadow: 0 0 10px #00ccff99; + color: #7ab8cc; } .chat-label { @@ -72,14 +71,13 @@ const { ip, freeMode, displayBalance } = useWallet(); width: 8px; height: 8px; border-radius: 50%; - background: #00ff88; - box-shadow: 0 0 6px #00ff44; + background: #44aa66; } .online-count { font-family: Arial, sans-serif; font-size: 11px; - color: #33ff66; + color: #557766; } .me-ip { @@ -98,26 +96,25 @@ const { ip, freeMode, displayBalance } = useWallet(); padding: 3px 10px; font-family: 'Courier New', monospace; } -.balance-coin { color: #ffcc44; font-size: 11px; } -.balance-val { color: #ffdd66; font-size: 13px; font-weight: bold; text-shadow: 0 0 8px #ffaa0055; } +.balance-coin { color: #aa8833; font-size: 11px; } +.balance-val { color: #ccaa44; font-size: 13px; font-weight: bold; } .balance-unit { color: #886633; font-size: 9px; } -.balance--free .balance-val { color: #33ff99; text-shadow: 0 0 8px #00ff6655; } -.balance--free .balance-coin { color: #33ff99; } +.balance--free .balance-val { color: #44aa77; } +.balance--free .balance-coin { color: #44aa77; } .shop-link { font-family: Arial, sans-serif; font-size: 12px; font-weight: bold; - color: #00eeff; + color: #6699aa; text-decoration: none; - border: 1px solid #00eeff55; + border: 1px solid #33445566; border-radius: 12px; padding: 4px 12px; - transition: background 0.15s, box-shadow 0.15s; + transition: background 0.15s; } .shop-link:hover { - background: #00eeff14; - box-shadow: 0 0 10px #00ccff44; + background: #1a2530; } .channel-badge { diff --git a/frontend/src/components/InlineCasinoAd.vue b/frontend/src/components/InlineCasinoAd.vue index 30819bb..af5db4b 100644 --- a/frontend/src/components/InlineCasinoAd.vue +++ b/frontend/src/components/InlineCasinoAd.vue @@ -47,7 +47,7 @@ onMounted(fetchAds); background: #100400; border: 2px solid #ff2200; border-radius: 6px; - box-shadow: 0 0 18px #ff220055; + box-shadow: none; } /* ── En-tête rouge ── */ @@ -64,7 +64,7 @@ onMounted(fetchAds); font-size: 15px; font-weight: bold; color: #ff5533; - text-shadow: 0 0 8px #ff2200; + margin: 0; } @@ -87,7 +87,7 @@ onMounted(fetchAds); font-size: 32px; font-weight: bold; color: #ffdd00; - text-shadow: 0 0 14px #99660099; + margin: 0; } @@ -117,7 +117,7 @@ onMounted(fetchAds); font-size: 30px; font-weight: bold; color: #ffffff; - text-shadow: 0 0 10px #ffdd00; + } /* ── CTA ── */ @@ -136,13 +136,11 @@ onMounted(fetchAds); cursor: pointer; text-align: center; text-decoration: none; - text-shadow: 0 0 6px #ff2200; - box-shadow: 0 0 8px #ff220044; - transition: box-shadow 0.15s; + transition: background 0.15s; } .casino-cta:hover { - box-shadow: 0 0 16px #ff220088; + } .disclaimer { diff --git a/frontend/src/components/StatsTicker.vue b/frontend/src/components/StatsTicker.vue index ba3d632..dc84bfa 100644 --- a/frontend/src/components/StatsTicker.vue +++ b/frontend/src/components/StatsTicker.vue @@ -95,8 +95,8 @@ const items = computed(() => { display: flex; align-items: stretch; background: #0a0a12; - border-bottom: 1px solid #00eeff33; - box-shadow: inset 0 -1px 0 #00eeff14, 0 2px 14px #00000066; + border-bottom: 1px solid #1a1a2a; + box-shadow: 0 2px 8px #00000066; overflow: hidden; } @@ -110,15 +110,14 @@ const items = computed(() => { gap: 7px; padding: 0 14px; background: #0e0e18; - border-right: 1px solid #00eeff33; - box-shadow: 6px 0 12px #0a0a12; + border-right: 1px solid #1a1a2a; + box-shadow: 4px 0 8px #0a0a12; } .ticker-dot { width: 8px; height: 8px; border-radius: 50%; - background: #00ff88; - box-shadow: 0 0 8px #00ff66; + background: #44996655; animation: blink 1.5s ease-in-out infinite; } .ticker-badge-txt { @@ -126,17 +125,14 @@ const items = computed(() => { font-size: 11px; font-weight: bold; letter-spacing: 2px; - color: #00ff88; - text-shadow: 0 0 8px #00ff4466; + color: #448866; } .ticker.is-off .ticker-dot { - background: #ff3344; - box-shadow: 0 0 8px #ff2233; + background: #884444; animation: none; } .ticker.is-off .ticker-badge-txt { - color: #ff5566; - text-shadow: none; + color: #885555; } @keyframes blink { 0%, 100% { opacity: 1; } @@ -206,10 +202,10 @@ const items = computed(() => { color: #50506e; } -.chip--cyan .chip-val { color: #00eeff; text-shadow: 0 0 9px #00ccff55; } -.chip--green .chip-val { color: #33ff77; text-shadow: 0 0 9px #00ff4455; } -.chip--magenta .chip-val { color: #ff44cc; text-shadow: 0 0 9px #ff22aa55; } -.chip--orange .chip-val { color: #ffaa44; text-shadow: 0 0 9px #ff880055; } +.chip--cyan .chip-val { color: #5599aa; } +.chip--green .chip-val { color: #447755; } +.chip--magenta .chip-val { color: #885588; } +.chip--orange .chip-val { color: #997744; } /* Accessibilité : pas de défilement si l'utilisateur le refuse */ @media (prefers-reduced-motion: reduce) { diff --git a/frontend/src/components/shop/ProductCard.vue b/frontend/src/components/shop/ProductCard.vue index 654d207..ff404f8 100644 --- a/frontend/src/components/shop/ProductCard.vue +++ b/frontend/src/components/shop/ProductCard.vue @@ -81,13 +81,20 @@ {{ fmt(effectivePrice) }} cr - - + +