diff --git a/frontend/profile.html b/frontend/profile.html
index 91bad24..ee49621 100644
--- a/frontend/profile.html
+++ b/frontend/profile.html
@@ -516,7 +516,14 @@
box-shadow: 0 2px 12px rgba(15,23,42,0.05);
}
.shop-item:hover { box-shadow: 0 4px 20px rgba(15,23,42,0.08); transform: translateY(-2px); }
- .shop-item.owned { border-color: rgba(34,197,94,0.4); background: rgba(34,197,94,0.03); }
+ /* Owned + active states keep an opaque card so animated backgrounds
+ don't bleed through the content. Color cue lives in the border
+ plus a tiny inner-shadow halo. */
+ .shop-item.owned {
+ border-color: rgba(34,197,94,0.5);
+ background: #fff;
+ box-shadow: 0 2px 12px rgba(15,23,42,0.05), inset 0 0 0 1px rgba(34,197,94,0.08);
+ }
.shop-item.disabled:not(.owned) { opacity: 0.5; }
.shop-item-icon { color: var(--violet); margin-bottom: 4px; }
.shop-frame-preview {
@@ -588,7 +595,11 @@
animation: ls-dot-pulse 1.5s infinite;
}
@keyframes ls-dot-pulse { 0%,100%{opacity:1} 50%{opacity:0.3} }
- .shop-item.active { border-color: rgba(6,214,224,0.4); background: rgba(6,214,224,0.04); }
+ .shop-item.active {
+ border-color: rgba(6,214,224,0.55);
+ background: #fff;
+ box-shadow: 0 4px 18px rgba(6,214,224,0.18), inset 0 0 0 1px rgba(6,214,224,0.10);
+ }
.shop-empty {
grid-column: 1 / -1; text-align: center; padding: 40px 20px;
font-size: 0.88rem; color: var(--text-3); font-weight: 600;