diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/13e4881d89c84f948592364753559f8b.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/13e4881d89c84f948592364753559f8b.webp
new file mode 100644
index 00000000..3c01a9ed
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/13e4881d89c84f948592364753559f8b.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/1e673b259a444d07b10897a652119911.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/1e673b259a444d07b10897a652119911.webp
new file mode 100644
index 00000000..cac718fc
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/1e673b259a444d07b10897a652119911.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/39189a7a8b1f4647b18dd0ff14d278e6.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/39189a7a8b1f4647b18dd0ff14d278e6.webp
new file mode 100644
index 00000000..03bce5bf
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/39189a7a8b1f4647b18dd0ff14d278e6.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/39999cd25b3d45958ef4f5461781c23f.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/39999cd25b3d45958ef4f5461781c23f.webp
new file mode 100644
index 00000000..8e3c3498
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/39999cd25b3d45958ef4f5461781c23f.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/49df5fa2d26446fea3a4ecb74da92b6c.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/49df5fa2d26446fea3a4ecb74da92b6c.webp
new file mode 100644
index 00000000..3c01a9ed
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/49df5fa2d26446fea3a4ecb74da92b6c.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/66f22d79a8f1407ab4e6828e2765107e.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/66f22d79a8f1407ab4e6828e2765107e.webp
new file mode 100644
index 00000000..69e7029a
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/66f22d79a8f1407ab4e6828e2765107e.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/8db4beb8fdd648e4a15f4465eed2907f.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/8db4beb8fdd648e4a15f4465eed2907f.webp
new file mode 100644
index 00000000..ffcef308
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/8db4beb8fdd648e4a15f4465eed2907f.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/c874ff71ba6c4bc697350e79fab2c596.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/c874ff71ba6c4bc697350e79fab2c596.webp
new file mode 100644
index 00000000..1cb0453e
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/c874ff71ba6c4bc697350e79fab2c596.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/eb421f94c1744372855fa09d7d344f09.webp b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/eb421f94c1744372855fa09d7d344f09.webp
new file mode 100644
index 00000000..5eaeb56d
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/eb421f94c1744372855fa09d7d344f09.webp differ
diff --git a/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/f5632583104f4e638845cb46020771ee.jpg b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/f5632583104f4e638845cb46020771ee.jpg
new file mode 100644
index 00000000..f7a5b186
Binary files /dev/null and b/backend/src/VendingMachine.Api/wwwroot/uploads/2026/04/f5632583104f4e638845cb46020771ee.jpg differ
diff --git a/mobile/components/CouponGuidePopup.vue b/mobile/components/CouponGuidePopup.vue
index 7ce93376..78a7db10 100644
--- a/mobile/components/CouponGuidePopup.vue
+++ b/mobile/components/CouponGuidePopup.vue
@@ -1,13 +1,17 @@
@@ -42,7 +46,7 @@ function handleClose() {
left: 0;
right: 0;
bottom: 0;
- background-color: rgba(0, 0, 0, 0.5);
+ background-color: rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
@@ -59,32 +63,38 @@ function handleClose() {
flex-direction: column;
}
+.popup-header {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ margin-bottom: 36rpx;
+}
+
.popup-title {
font-size: 34rpx;
font-weight: 600;
color: #333;
- text-align: center;
- display: block;
- margin-bottom: 30rpx;
+}
+
+.close-btn {
+ width: 48rpx;
+ height: 48rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: absolute;
+ right: 0;
+}
+
+.close-icon {
+ width: 36rpx;
+ height: 36rpx;
}
.popup-body {
flex: 1;
- max-height: 50vh;
- margin-bottom: 30rpx;
-}
-
-.close-btn {
- height: 80rpx;
- background-color: #007aff;
- border-radius: 40rpx;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.close-btn-text {
- font-size: 28rpx;
- color: #ffffff;
+ max-height: 55vh;
+ padding-bottom: 40rpx;
}
diff --git a/mobile/components/RedeemPopup.vue b/mobile/components/RedeemPopup.vue
index e71736ab..4acef498 100644
--- a/mobile/components/RedeemPopup.vue
+++ b/mobile/components/RedeemPopup.vue
@@ -4,7 +4,7 @@
{{ coupon.name }}
- {{ t('redeem.pointsNeeded', { points: coupon.requiredPoints }) }}
+ {{ t('redeem.pointsLabel') }}{{ coupon.pointsCost ?? coupon.requiredPoints ?? 0 }}