feat: build mini app frontend pages

This commit is contained in:
zhouzhibo committed 2026-10-13 22:50:37 +08:00
1 parent ca36409e41
commit 869376979c
84 files changed
+16922 -86

No files matched your search

+602
View File
@@ -0,0 +1,602 @@
.home-page {
min-height: 100vh;
padding: calc(216px + env(safe-area-inset-top)) 30px calc(178px + env(safe-area-inset-bottom));
box-sizing: border-box;
color: #29243a;
background:
linear-gradient(180deg, rgba(154, 124, 255, 0.92) 0%, rgba(220, 201, 255, 0.76) 27%, rgba(253, 241, 255, 0.9) 52%, #eef6ff 100%);
overflow-x: hidden;
}
.day-switch {
display: flex;
align-items: center;
gap: 52px;
}
.avatar-orb {
width: 132px;
height: 132px;
flex: none;
border-radius: 70px;
background: #fffef0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 12px 26px rgba(119, 102, 154, 0.12);
}
.water-face {
width: 82px;
height: 96px;
border-radius: 50% 50% 52% 52%;
background: linear-gradient(180deg, #9ff5ff 0%, #39c6ea 100%);
color: #3274c8;
font-size: 42px;
line-height: 78px;
text-align: center;
}
.day-tabs {
flex: 1;
display: grid;
grid-template-columns: repeat(3, 1fr);
align-items: center;
}
.day-tab {
min-width: 0;
text-align: center;
color: rgba(42, 34, 62, 0.58);
position: relative;
}
.day-tab + .day-tab::before {
content: '';
position: absolute;
left: -2px;
top: 20px;
width: 2px;
height: 12px;
background: rgba(42, 34, 62, 0.4);
}
.day-label,
.day-status {
display: block;
}
.day-label {
font-size: 36px;
line-height: 1.2;
}
.day-status {
width: 112px;
height: 48px;
margin: 12px auto 0;
border-radius: 26px;
font-size: 28px;
line-height: 48px;
}
.day-tab.active {
color: #29243a;
font-weight: 900;
}
.day-tab.active .day-label {
font-size: 46px;
}
.day-tab.active .day-status {
background: #7956f4;
color: #fff;
box-shadow: 0 8px 18px rgba(105, 71, 220, 0.26);
}
.date-row {
margin-top: 52px;
color: #4f485f;
font-size: 28px;
display: flex;
align-items: center;
justify-content: space-between;
}
.month-day {
font-size: 34px;
font-weight: 900;
}
.summary-card {
min-height: 202px;
margin-top: 38px;
border-radius: 18px;
background: linear-gradient(105deg, #7139f3 0%, #8344ff 54%, #d35af3 100%);
color: #fff;
padding: 42px 34px;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
overflow: hidden;
position: relative;
}
.summary-card::after {
content: '';
position: absolute;
right: -22px;
top: -36px;
width: 236px;
height: 236px;
border-radius: 50%;
background: radial-gradient(circle, rgba(131, 226, 255, 0.95) 0%, rgba(61, 121, 250, 0.72) 50%, rgba(255, 255, 255, 0) 70%);
filter: blur(1px);
}
.summary-copy {
width: 420px;
font-size: 34px;
line-height: 1.75;
font-weight: 800;
position: relative;
z-index: 1;
}
.index-orb {
width: 178px;
height: 178px;
border-radius: 96px;
background: radial-gradient(circle at 45% 36%, #e8ffff 0%, #86dfff 42%, #5a71ff 100%);
color: #fff;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
box-shadow: 0 0 0 12px rgba(255, 255, 255, 0.22);
position: relative;
z-index: 1;
}
.index-number {
font-size: 72px;
line-height: 0.95;
font-weight: 900;
}
.index-orb text:last-child {
margin-top: 10px;
font-size: 24px;
}
.lucky-grid-home {
margin-top: 24px;
display: grid;
grid-template-columns: 1.35fr 0.75fr;
gap: 22px;
}
.lucky-box {
min-height: 90px;
border-radius: 18px;
padding: 0 28px;
background: rgba(255, 255, 255, 0.52);
display: flex;
align-items: center;
box-sizing: border-box;
gap: 18px;
}
.colors-box {
background: rgba(246, 233, 255, 0.72);
}
.number-box {
background: rgba(234, 225, 255, 0.72);
}
.direction-box {
background: rgba(255, 241, 198, 0.82);
}
.hour-box {
background: rgba(196, 235, 255, 0.82);
}
.lucky-label {
flex: none;
color: #29243a;
font-size: 30px;
font-weight: 900;
}
.color-chip,
.hour-chip {
display: flex;
align-items: center;
gap: 10px;
color: #423a52;
font-size: 28px;
white-space: nowrap;
}
.swatch {
width: 48px;
height: 48px;
border-radius: 12px;
}
.number-slots {
display: flex;
gap: 12px;
}
.number-slots text {
width: 48px;
height: 58px;
border-radius: 10px;
background: linear-gradient(180deg, #8f75ff, #7454ef);
color: #fff;
font-size: 48px;
line-height: 58px;
text-align: center;
font-weight: 900;
box-shadow: inset 0 -12px 0 rgba(255, 255, 255, 0.18);
}
.compass-icon {
width: 42px;
height: 42px;
border-radius: 50%;
background: #fff;
color: #ff9f27;
font-size: 30px;
line-height: 42px;
text-align: center;
}
.hour-chip text:first-child {
width: 42px;
height: 42px;
border-radius: 22px;
background: #5bb8df;
color: #fff;
text-align: center;
line-height: 42px;
font-weight: 900;
}
.dimension-head {
margin-top: 46px;
display: flex;
align-items: center;
justify-content: space-between;
}
.dimension-head > text {
color: #29243a;
font-size: 42px;
font-weight: 900;
}
.dimension-head button {
color: #6d6578;
font-size: 28px;
}
.dimension-list {
margin-top: 28px;
display: flex;
flex-direction: column;
gap: 22px;
}
.dimension-card {
min-height: 204px;
border-radius: 18px;
background: rgba(255, 255, 255, 0.84);
padding: 26px 60px 28px 34px;
box-sizing: border-box;
display: flex;
align-items: flex-start;
position: relative;
box-shadow: 0 8px 22px rgba(90, 79, 116, 0.06);
}
.dimension-card.suitable {
background: rgba(255, 255, 255, 0.86);
}
.dimension-card.avoid {
background: linear-gradient(180deg, rgba(255, 249, 236, 0.9) 0%, rgba(255, 255, 255, 0.86) 48%);
}
.dimension-icon {
width: 62px;
height: 62px;
flex: none;
margin-right: 20px;
border-radius: 18px;
position: relative;
}
.icon-heart {
background: radial-gradient(circle at 32% 32%, #ffd2df, #ff79a3 68%, #fff 70%);
transform: rotate(-10deg);
}
.icon-gourd {
background: radial-gradient(circle at 50% 28%, #ffc65c 0 28%, transparent 29%), radial-gradient(circle at 50% 65%, #f0a222 0 48%, transparent 49%);
}
.icon-vase {
background: radial-gradient(circle at 50% 18%, #d5fff0 0 24%, transparent 25%), linear-gradient(180deg, #7df0c9, #2ccda0);
border-radius: 30px 30px 16px 16px;
}
.icon-coin {
border-radius: 50%;
background: radial-gradient(circle, #fff8bb 0 33%, #f1b82d 34% 100%);
}
.icon-fan {
border-radius: 50% 50% 12px 12px;
background: conic-gradient(from 235deg, #c29cff, #fff, #8e63ef, #c29cff);
}
.icon-scroll {
border-radius: 12px;
background: repeating-linear-gradient(90deg, #ffe8aa 0 10px, #f5c868 11px 16px);
}
.icon-bamboo {
background: linear-gradient(135deg, transparent 20%, #30d3b9 21% 38%, transparent 39% 50%, #25bfa8 51% 68%, transparent 69%);
}
.icon-horse {
border-radius: 50% 28px 50% 30px;
background: linear-gradient(135deg, #dbe9ff, #6b94f8);
}
.dimension-copy {
flex: 1;
min-width: 0;
}
.dimension-title-row {
display: flex;
align-items: center;
gap: 20px;
}
.dimension-title {
color: #29243a;
font-size: 34px;
font-weight: 900;
white-space: nowrap;
}
.dimension-headline {
min-width: 0;
color: #5d5667;
font-size: 28px;
line-height: 1.3;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.dimension-detail {
display: block;
margin-top: 30px;
color: #666071;
font-size: 28px;
line-height: 1.7;
}
.dimension-tag {
position: absolute;
right: 34px;
top: 30px;
width: 48px;
height: 48px;
border-radius: 50%;
color: #fff;
font-size: 28px;
line-height: 48px;
text-align: center;
font-weight: 900;
}
.dimension-tag.suitable {
background: #4bc660;
}
.dimension-tag.avoid {
background: #f45b72;
}
.dimension-arrow {
position: absolute;
right: 34px;
bottom: 30px;
color: #3f394a;
font-size: 52px;
line-height: 1;
}
.home-tabbar {
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 12;
height: calc(158px + env(safe-area-inset-bottom));
padding-bottom: env(safe-area-inset-bottom);
border-radius: 26px 26px 0 0;
background: rgba(255, 255, 255, 0.96);
box-shadow: 0 -10px 32px rgba(85, 79, 110, 0.1);
display: flex;
align-items: center;
justify-content: space-around;
box-sizing: border-box;
}
.home-tabbar-item,
.home-realm-tab {
width: 150px;
height: 132px;
color: #29243a;
font-size: 28px;
font-weight: 900;
line-height: 1.1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
}
.home-tabbar-item.active {
color: #ff9b2a;
}
.home-tab-icon {
width: 42px;
height: 36px;
border-radius: 0 0 18px 18px;
background: currentColor;
position: relative;
}
.home-tab-icon::before {
content: '';
position: absolute;
left: 5px;
top: -22px;
width: 32px;
height: 32px;
border-radius: 18px 18px 10px 10px;
background: currentColor;
}
.home-mine-icon {
width: 48px;
height: 32px;
border-radius: 24px 24px 14px 14px;
background: currentColor;
position: relative;
}
.home-mine-icon::before {
content: '';
position: absolute;
left: 13px;
top: -26px;
width: 22px;
height: 22px;
border-radius: 50%;
background: currentColor;
}
.home-realm-tab {
margin-top: -78px;
}
.home-realm-avatar {
width: 112px;
height: 112px;
border-radius: 60px;
border: 12px solid #f0f7ff;
box-shadow: 0 10px 24px rgba(121, 129, 164, 0.16);
}
.sort-page {
padding-top: calc(188px + env(safe-area-inset-top));
}
.sort-back {
position: fixed;
left: 30px;
top: calc(48px + env(safe-area-inset-top));
z-index: 3;
width: 58px;
height: 58px;
color: #2d2549;
font-size: 72px;
line-height: 44px;
}
.sort-title {
position: fixed;
left: 0;
right: 0;
top: calc(116px + env(safe-area-inset-top));
z-index: 2;
color: #29243a;
font-size: 42px;
line-height: 1;
font-weight: 900;
text-align: center;
}
.sort-hint-row {
display: flex;
align-items: center;
color: #6e6678;
font-size: 28px;
}
.sort-handle-symbol {
margin: 0 16px;
color: #6e6678;
font-size: 42px;
}
.sort-done {
margin-left: auto;
color: #29243a;
font-size: 30px;
font-weight: 900;
}
.sort-list {
margin-top: 62px;
display: flex;
flex-direction: column;
gap: 12px;
}
.sort-item {
height: 112px;
border-radius: 18px;
background: rgba(255, 255, 255, 0.7);
padding: 0 34px 0 38px;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
color: #29243a;
font-size: 32px;
font-weight: 800;
}
.sort-controls {
display: flex;
align-items: center;
gap: 14px;
color: #77717f;
font-size: 38px;
}
.sort-controls button {
width: 44px;
height: 44px;
border-radius: 22px;
background: rgba(121, 86, 244, 0.1);
color: #6d57da;
font-size: 28px;
line-height: 44px;
}