feat(subscription): load vip and credit plans from api

This commit is contained in:
2026-06-26 15:09:27 +08:00
parent abf6d5ae88
commit 49b67064f7
15 changed files with 748 additions and 50 deletions
@@ -0,0 +1,139 @@
.section {
margin: 18px -30px 0;
}
.summary {
position: relative;
padding: 10px 10px 16px;
background: #d9d9d9;
}
.title {
display: flex;
align-items: baseline;
gap: 10px;
margin: 0;
line-height: 1.25;
}
.titleText {
color: #111111;
font-size: 20px;
font-weight: 800;
}
.renewText {
color: #7d7d7d;
font-size: 14px;
font-weight: 700;
}
.subtitle {
margin: 8px 0 0;
color: #666666;
font-size: 15px;
font-weight: 700;
line-height: 1.3;
}
.notch {
position: absolute;
left: 50%;
bottom: -12px;
width: 24px;
height: 24px;
background: #d9d9d9;
transform: translateX(-50%) rotate(45deg);
}
.planGrid {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
padding: 14px 10px 0;
}
.planCard {
display: flex;
min-width: 0;
min-height: 116px;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 12px 6px 10px;
border: 0;
border-radius: 14px;
background: #f4f4f4;
color: #111111;
cursor: pointer;
font: inherit;
text-align: center;
transition: background-color 0.15s ease, transform 0.05s ease;
}
.planCard:focus-visible {
outline: 2px solid #f657a0;
outline-offset: 2px;
}
.planCard:active {
transform: scale(0.98);
}
.selected {
background: #d9d9d9;
}
.planTitle {
font-size: 19px;
font-weight: 800;
line-height: 1.15;
white-space: nowrap;
}
.priceLine {
display: inline-flex;
align-items: flex-end;
justify-content: center;
margin-top: 4px;
line-height: 1;
}
.price {
font-size: 30px;
font-weight: 500;
letter-spacing: -0.8px;
}
.currency {
margin-bottom: 3px;
color: #777777;
font-size: 12px;
font-weight: 700;
text-transform: lowercase;
}
.originalPrice {
margin-top: 10px;
color: #7c7c7c;
font-size: 14px;
font-weight: 800;
line-height: 1;
text-decoration: line-through;
}
@media (max-width: 360px) {
.planGrid {
gap: 8px;
}
.planTitle {
font-size: 17px;
}
.price {
font-size: 27px;
}
}