登录页面

This commit is contained in:
2026-07-12 15:17:54 +08:00
parent becf91da52
commit bfac6c6663
63 changed files with 4662 additions and 431 deletions
+107
View File
@@ -0,0 +1,107 @@
/* 地址管理 */
.address-page {
background: var(--color-background);
min-height: 100vh;
}
.address-item {
background: var(--color-card);
border-radius: var(--radius-lg);
margin: 12px var(--space-page);
padding: 16px;
box-shadow: var(--shadow-card);
}
.address-item-head {
display: flex;
align-items: center;
margin-bottom: 8px;
}
.address-item-name {
font-size: 15px;
font-weight: 700;
margin-right: 10px;
}
.address-item-phone {
font-size: 14px;
color: var(--color-on-surface-variant);
}
.address-default-tag {
margin-left: auto;
padding: 2px 8px;
border-radius: 999px;
background: rgba(166, 29, 36, 0.08);
color: var(--color-heritage-red);
font-size: 11px;
}
.address-item-detail {
display: block;
font-size: 13px;
color: var(--color-on-surface-variant);
line-height: 1.5;
margin-bottom: 12px;
}
.address-item-actions {
display: flex;
justify-content: flex-end;
}
.address-action {
font-size: 13px;
color: var(--color-heritage-red);
margin-left: 16px;
}
.address-fab {
position: fixed;
left: 16px;
right: 16px;
bottom: calc(16px + env(safe-area-inset-bottom, 0px));
height: 48px;
border-radius: 999px;
background: var(--color-heritage-red);
color: #fff;
font-size: 16px;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
.address-form-field {
margin: 0 var(--space-page) 12px;
}
.address-form-label {
display: block;
font-size: 13px;
color: var(--color-on-surface-variant);
margin-bottom: 6px;
}
.address-form-input {
width: 100%;
height: 48px;
padding: 0 14px;
border-radius: var(--radius-md);
background: var(--color-card);
box-shadow: var(--shadow-card);
font-size: 15px;
box-sizing: border-box;
}
.address-form-textarea {
width: 100%;
min-height: 88px;
padding: 12px 14px;
border-radius: var(--radius-md);
background: var(--color-card);
box-shadow: var(--shadow-card);
font-size: 15px;
box-sizing: border-box;
}
+97
View File
@@ -0,0 +1,97 @@
/* 全局基础类(对齐 shared-ui / h5-user,适配 Taro */
.app-page-title {
margin: 0;
font-family: var(--font-headline);
font-size: 18px;
font-weight: 700;
line-height: 26px;
color: var(--color-heritage-red);
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.full-bleed {
width: 100%;
margin-left: 0;
margin-right: 0;
}
.inset-page {
padding-left: var(--space-page);
padding-right: var(--space-page);
box-sizing: border-box;
}
.u-card {
background: var(--color-card);
border-radius: var(--radius-lg);
margin: 12px var(--space-page);
padding: 16px;
box-shadow: var(--shadow-card);
box-sizing: border-box;
}
.u-muted {
color: var(--color-subtle-gray);
font-size: 13px;
}
.u-title {
font-family: var(--font-headline);
font-size: 18px;
font-weight: 600;
margin: 0 0 8px;
color: var(--color-on-surface);
}
.u-btn {
display: flex;
align-items: center;
justify-content: center;
border: none;
border-radius: var(--radius-md);
padding: 12px 18px;
font-size: 15px;
font-weight: 600;
line-height: 1.2;
background: var(--color-heritage-red);
color: #fff;
}
.u-btn--block {
width: 100%;
}
.u-btn--ghost {
background: transparent;
color: var(--color-heritage-red);
border: 1px solid var(--color-heritage-red);
}
.u-btn:active {
opacity: 0.85;
}
.u-empty {
text-align: center;
padding: 48px 24px;
color: var(--color-subtle-gray);
font-size: 14px;
}
.u-safe-top {
padding-top: env(safe-area-inset-top, 0px);
}
.text-primary {
color: var(--color-heritage-red);
}
.amount-lg {
font-family: var(--font-headline);
font-size: 24px;
font-weight: 700;
color: var(--color-heritage-red);
}
+255
View File
@@ -0,0 +1,255 @@
/* 好客权益 */
.benefit-page {
background: var(--color-background);
}
.benefit-header {
position: sticky;
top: 0;
z-index: 50;
padding-left: var(--space-page);
background: var(--color-background);
box-sizing: border-box;
}
.benefit-header__content {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.benefit-header-city {
display: flex;
align-items: center;
color: var(--color-heritage-red);
font-size: 12px;
font-weight: 500;
max-width: 30vw;
}
.benefit-header-city-pin {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--color-heritage-red);
margin-right: 4px;
flex-shrink: 0;
}
.benefit-header-title {
font-family: var(--font-headline);
font-size: 18px;
font-weight: 700;
color: var(--color-heritage-red);
}
.benefit-header-btn {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
color: var(--color-on-surface-variant);
font-size: 18px;
}
.benefit-main {
padding: 16px var(--space-page) 24px;
}
.benefit-hero {
position: relative;
overflow: hidden;
padding: 16px;
border-radius: var(--radius-lg);
background: var(--color-card);
border: 1px solid rgba(226, 190, 188, 0.2);
box-shadow: 0 4px 20px rgba(166, 29, 36, 0.05);
margin-bottom: 16px;
}
.benefit-hero-top {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 16px;
}
.benefit-hero-label {
display: block;
font-size: 12px;
color: var(--color-on-surface-variant);
margin-bottom: 4px;
}
.benefit-hero-amount {
display: flex;
align-items: baseline;
color: var(--color-heritage-red);
}
.benefit-hero-symbol {
font-family: var(--font-headline);
font-size: 28px;
font-weight: 700;
}
.benefit-hero-value {
font-family: var(--font-headline);
font-size: 40px;
font-weight: 700;
line-height: 1;
}
.benefit-hero-logo {
width: 48px;
height: 48px;
border-radius: 12px;
background: rgba(166, 29, 36, 0.08);
display: flex;
align-items: center;
justify-content: center;
color: var(--color-heritage-red);
font-weight: 700;
font-size: 18px;
}
.benefit-hero-actions {
display: flex;
margin-top: 8px;
}
.benefit-hero-link {
font-size: 13px;
color: var(--color-heritage-red);
margin-right: 16px;
}
.benefit-hero-cta {
flex: 1;
height: 44px;
border-radius: var(--radius-full);
background: var(--color-heritage-red);
color: #fff;
font-size: 15px;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
.benefit-tabs {
display: flex;
margin-bottom: 12px;
border-bottom: 1px solid var(--color-surface-container);
}
.benefit-tab {
margin-right: 24px;
padding: 10px 0;
font-size: 14px;
font-weight: 600;
color: var(--color-subtle-gray);
border-bottom: 2px solid transparent;
}
.benefit-tab--active {
color: var(--color-heritage-red);
border-bottom-color: var(--color-heritage-red);
}
.benefit-coupon {
position: relative;
background: var(--color-card);
border-radius: var(--radius-lg);
padding: 16px;
margin-bottom: 12px;
box-shadow: var(--shadow-card);
overflow: hidden;
}
.benefit-coupon-notch {
position: absolute;
left: -8px;
top: 50%;
width: 16px;
height: 16px;
margin-top: -8px;
border-radius: 50%;
background: var(--color-background);
}
.benefit-coupon-notch--right {
left: auto;
right: -8px;
}
.benefit-coupon-head {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 8px;
}
.benefit-coupon-name {
font-family: var(--font-headline);
font-size: 15px;
font-weight: 700;
color: var(--color-on-surface);
flex: 1;
margin-right: 8px;
}
.benefit-coupon-balance {
font-family: var(--font-headline);
font-size: 20px;
font-weight: 700;
color: var(--color-heritage-red);
}
.benefit-coupon-no {
display: block;
font-size: 11px;
color: var(--color-subtle-gray);
margin-bottom: 10px;
}
.benefit-progress {
height: 6px;
border-radius: 999px;
background: var(--color-surface-container);
overflow: hidden;
margin-bottom: 12px;
}
.benefit-progress-bar {
height: 100%;
background: var(--color-heritage-red);
border-radius: 999px;
}
.benefit-coupon-footer {
display: flex;
justify-content: space-between;
align-items: center;
}
.benefit-coupon-meta {
font-size: 12px;
color: var(--color-subtle-gray);
}
.benefit-coupon-btn {
padding: 6px 14px;
border-radius: var(--radius-full);
background: var(--color-heritage-red);
color: #fff;
font-size: 12px;
font-weight: 600;
}
.benefit-login-gate {
padding: 48px 24px;
text-align: center;
}
+41 -45
View File
@@ -1,42 +1,4 @@
/* Tab 主页面顶栏 + 首页(对齐 h5-user */
.tab-main-header {
position: sticky;
top: 0;
z-index: 50;
display: flex;
align-items: center;
justify-content: center;
height: 56px;
padding: env(safe-area-inset-top, 0px) var(--space-page) 0;
padding-top: calc(env(safe-area-inset-top, 0px));
min-height: calc(56px + env(safe-area-inset-top, 0px));
background: var(--color-background);
box-shadow: var(--shadow-card);
box-sizing: border-box;
}
.tab-main-header__title {
font-family: var(--font-headline);
font-size: 18px;
font-weight: 700;
color: var(--color-heritage-red);
line-height: 56px;
}
.tab-main-header__extra {
position: absolute;
right: var(--space-page);
top: calc(env(safe-area-inset-top, 0px) + 28px);
transform: translateY(-50%);
display: flex;
align-items: center;
gap: 4px;
color: var(--color-heritage-red);
font-size: 12px;
font-weight: 500;
max-width: 46vw;
}
/* 首页(Tab 顶栏样式见 styles/nav-bar.css */
.tab-main-city-pin {
width: 14px;
height: 14px;
@@ -78,7 +40,7 @@
background: rgba(250, 249, 247, 0.95);
border-bottom: 1px solid var(--color-surface-container);
position: sticky;
top: calc(56px + env(safe-area-inset-top, 0px));
top: var(--nav-bar-height, 56px);
z-index: 40;
}
@@ -118,18 +80,52 @@
box-shadow: var(--shadow-card);
}
.home-product-cover {
.home-carousel-wrap {
position: relative;
width: 100%;
height: 200px;
aspect-ratio: 1;
background: var(--color-surface-container);
display: block;
overflow: hidden;
}
.home-product-cover--empty {
height: 200px;
.home-carousel {
width: 100%;
height: 100%;
}
.home-carousel-item,
.home-carousel-image,
.home-carousel-placeholder {
width: 100%;
height: 100%;
}
.home-carousel-placeholder {
background: var(--color-surface-container);
}
.home-carousel-dots {
position: absolute;
bottom: 12px;
left: 0;
right: 0;
display: flex;
justify-content: center;
}
.home-carousel-dot {
height: 4px;
width: 6px;
margin: 0 3px;
border-radius: 999px;
background: rgba(153, 153, 153, 0.35);
}
.home-carousel-dot--active {
width: 20px;
background: var(--color-heritage-red);
}
.home-product-body {
padding: var(--space-gutter);
display: flex;
+283
View File
@@ -0,0 +1,283 @@
/* 登录页(对齐 h5-user login-page */
.login-page {
min-height: 100vh;
display: flex;
flex-direction: column;
background: var(--color-background);
color: var(--color-on-surface);
box-sizing: border-box;
padding-top: var(--nav-status-bar-height, 20px);
}
.login-header {
padding: 48px var(--space-page) 32px;
display: flex;
flex-direction: column;
align-items: center;
}
.login-logo-wrap {
position: relative;
width: 120px;
height: 120px;
margin-bottom: 28px;
}
.login-logo {
width: 100%;
height: 100%;
border-radius: var(--radius-lg);
background: var(--color-card);
box-shadow: var(--shadow-card);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-headline);
font-size: 48px;
font-weight: 700;
color: var(--color-heritage-red);
}
.login-logo-badge {
position: absolute;
bottom: -8px;
right: -8px;
background: var(--color-heritage-red);
color: #fff;
font-size: 10px;
font-weight: 700;
padding: 2px 8px;
border-radius: 999px;
line-height: 1.4;
}
.login-welcome {
text-align: center;
}
.login-welcome-title {
display: block;
font-family: var(--font-headline);
font-size: 20px;
font-weight: 600;
line-height: 28px;
color: var(--color-ink-black, #1a1a1a);
letter-spacing: -0.01em;
}
.login-welcome-sub {
display: block;
margin-top: 8px;
font-size: 16px;
line-height: 24px;
color: var(--color-on-surface-variant);
opacity: 0.8;
}
.login-main {
flex: 1;
padding: 0 var(--space-page) 32px;
width: 100%;
box-sizing: border-box;
}
.login-card {
background: var(--color-card);
border-radius: var(--radius-xl);
padding: 24px;
box-shadow: var(--shadow-card);
}
.login-card-title {
display: block;
font-family: var(--font-headline);
font-size: 18px;
font-weight: 600;
line-height: 26px;
margin-bottom: 16px;
color: var(--color-on-surface);
}
.login-field {
display: flex;
align-items: center;
border-bottom: 1px solid var(--color-surface-variant, #e8e4de);
padding-bottom: 8px;
margin-bottom: 16px;
}
.login-field-prefix {
font-size: 16px;
font-weight: 500;
color: var(--color-on-surface);
margin-right: 12px;
flex-shrink: 0;
}
.login-field-input {
flex: 1;
border: none;
background: transparent;
padding: 0;
height: 32px;
font-size: 16px;
line-height: 24px;
color: var(--color-on-surface);
min-width: 0;
}
.login-get-code {
flex-shrink: 0;
border: none;
background: transparent;
padding: 0;
margin: 0;
font-size: 14px;
font-weight: 500;
color: var(--color-heritage-red);
line-height: 1.4;
}
.login-get-code--disabled {
color: var(--color-subtle-gray);
}
.login-msg {
display: block;
font-size: 13px;
color: var(--color-heritage-red);
margin-bottom: 12px;
}
.login-msg--hint {
color: var(--color-success, #2d6a4f);
}
.login-sms-btn {
width: 100%;
height: 48px;
margin-top: 8px;
border: 1px solid rgba(166, 29, 36, 0.2);
border-radius: var(--radius-lg);
background: transparent;
color: var(--color-heritage-red);
font-family: var(--font-headline);
font-size: 18px;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;
line-height: 1;
padding: 0;
}
.login-sms-btn::after {
border: none;
}
.login-sms-btn[disabled] {
opacity: 0.6;
}
.login-divider {
display: flex;
align-items: center;
gap: 16px;
margin: 32px 0;
}
.login-divider-line {
flex: 1;
height: 1px;
background: linear-gradient(
90deg,
transparent 0%,
var(--color-surface-variant, #e8e4de) 50%,
transparent 100%
);
}
.login-divider-text {
font-size: 12px;
font-weight: 500;
letter-spacing: 0.05em;
color: var(--color-subtle-gray);
flex-shrink: 0;
}
.login-wechat-btn {
width: 100%;
height: 56px;
border: none;
border-radius: var(--radius-lg);
background: var(--color-heritage-red);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
font-family: var(--font-headline);
font-size: 18px;
font-weight: 600;
line-height: 1;
padding: 0;
box-shadow: 0 8px 24px rgba(166, 29, 36, 0.1);
}
.login-wechat-btn::after {
border: none;
}
.login-wechat-btn[disabled] {
opacity: 0.7;
}
.login-wechat-icon {
font-size: 22px;
line-height: 1;
}
.login-footer {
padding: 0 var(--space-page) calc(env(safe-area-inset-bottom, 0px) + 32px);
width: 100%;
box-sizing: border-box;
}
.login-agreement {
display: flex;
align-items: flex-start;
gap: 8px;
}
.login-agreement-check {
width: 16px;
height: 16px;
margin-top: 2px;
border-radius: 4px;
border: 1px solid var(--color-outline, #c8c4be);
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
color: #fff;
box-sizing: border-box;
}
.login-agreement-check--on {
background: var(--color-heritage-red);
border-color: var(--color-heritage-red);
}
.login-agreement-text {
flex: 1;
font-size: 12px;
font-weight: 500;
line-height: 16px;
letter-spacing: 0.05em;
color: var(--color-on-surface-variant);
}
.login-agreement-link {
color: var(--color-heritage-red);
}
+257
View File
@@ -0,0 +1,257 @@
/* 我的 */
.mine-page {
background: var(--color-background);
}
.mine-header {
position: relative;
padding: 24px var(--space-page) 80px;
background: linear-gradient(135deg, #820012 0%, var(--color-heritage-red) 40%, #d4a373 100%);
overflow: hidden;
}
.mine-header-texture {
position: absolute;
inset: 0;
opacity: 0.08;
background: repeating-linear-gradient(
45deg,
transparent,
transparent 8px,
rgba(255, 255, 255, 0.04) 8px,
rgba(255, 255, 255, 0.04) 16px
);
pointer-events: none;
}
.mine-profile {
position: relative;
display: flex;
align-items: center;
z-index: 1;
}
.mine-avatar {
width: 72px;
height: 72px;
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.35);
background: #fff;
overflow: hidden;
flex-shrink: 0;
margin-right: 14px;
display: flex;
align-items: center;
justify-content: center;
color: var(--color-heritage-red);
font-size: 28px;
font-weight: 700;
}
.mine-avatar-img {
width: 100%;
height: 100%;
}
.mine-profile-name {
display: block;
font-family: var(--font-headline);
font-size: 20px;
font-weight: 600;
color: #fff;
margin-bottom: 4px;
}
.mine-member-tag {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.15);
font-size: 10px;
color: rgba(255, 255, 255, 0.9);
}
.mine-main {
margin-top: -48px;
position: relative;
z-index: 2;
padding: 0 var(--space-page) 24px;
}
.mine-card {
background: var(--color-card);
border-radius: var(--radius-lg);
padding: 16px;
box-shadow: var(--shadow-card);
margin-bottom: 12px;
}
.mine-card-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 14px;
}
.mine-card-title {
font-family: var(--font-headline);
font-size: 16px;
font-weight: 700;
color: var(--color-on-surface);
}
.mine-card-link {
font-size: 12px;
color: var(--color-subtle-gray);
}
.mine-asset-panel {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px;
border-radius: var(--radius-md);
background: linear-gradient(135deg, #fff9e6 0%, #fff0c2 100%);
}
.mine-asset-label {
display: block;
font-size: 12px;
color: rgba(87, 69, 0, 0.8);
margin-bottom: 4px;
}
.mine-asset-amount {
display: flex;
align-items: baseline;
color: var(--color-heritage-red);
}
.mine-asset-currency {
font-size: 16px;
font-weight: 700;
margin-right: 2px;
}
.mine-asset-value {
font-family: var(--font-headline);
font-size: 28px;
font-weight: 700;
}
.mine-asset-cta {
padding: 8px 16px;
border-radius: 999px;
background: var(--color-heritage-red);
color: #fff;
font-size: 13px;
font-weight: 600;
}
.mine-order-grid {
display: flex;
justify-content: space-around;
}
.mine-order-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 8px;
position: relative;
width: 33%;
}
.mine-order-icon {
width: 40px;
height: 40px;
border-radius: 12px;
background: rgba(166, 29, 36, 0.08);
display: flex;
align-items: center;
justify-content: center;
color: var(--color-heritage-red);
font-size: 18px;
margin-bottom: 6px;
}
.mine-order-badge {
position: absolute;
top: 2px;
right: 18%;
min-width: 16px;
height: 16px;
padding: 0 4px;
border-radius: 999px;
background: var(--color-heritage-red);
color: #fff;
font-size: 10px;
line-height: 16px;
text-align: center;
}
.mine-order-label {
font-size: 12px;
color: var(--color-on-surface);
}
.mine-service-grid {
display: flex;
flex-wrap: wrap;
}
.mine-service-item {
width: 25%;
display: flex;
flex-direction: column;
align-items: center;
padding: 12px 4px;
box-sizing: border-box;
}
.mine-service-icon {
width: 36px;
height: 36px;
border-radius: 10px;
background: var(--color-surface-container-low);
display: flex;
align-items: center;
justify-content: center;
color: var(--color-heritage-red);
font-size: 16px;
margin-bottom: 6px;
}
.mine-service-label {
font-size: 11px;
color: var(--color-on-surface);
text-align: center;
}
.mine-footer {
text-align: center;
padding: 16px 0 8px;
}
.mine-version {
display: block;
font-size: 12px;
color: var(--color-subtle-gray);
margin-bottom: 12px;
}
.mine-logout {
display: inline-flex;
padding: 10px 32px;
border-radius: var(--radius-full);
border: 1px solid rgba(166, 29, 36, 0.3);
color: var(--color-heritage-red);
font-size: 14px;
font-weight: 600;
}
.mine-login-gate {
margin-top: -32px;
position: relative;
z-index: 2;
}
+215
View File
@@ -0,0 +1,215 @@
/* 页面壳 + 三种顶栏(刘海屏 / 胶囊适配) */
.page-shell {
min-height: 100vh;
background: var(--color-background);
box-sizing: border-box;
}
.page-shell--tab {
padding-bottom: calc(88px + env(safe-area-inset-bottom, 0px));
}
.page-shell--scroll,
.page-shell--sub,
.page-shell--plain {
padding-bottom: calc(24px + env(safe-area-inset-bottom, 0px));
}
.page-shell--fixed-footer {
padding-bottom: calc(88px + env(safe-area-inset-bottom, 0px));
}
/* ── Tab 主页面顶栏(实底 sticky) ── */
.tab-main-header {
position: sticky;
top: 0;
z-index: 50;
padding-left: var(--space-page);
background: var(--color-background);
box-shadow: var(--shadow-card);
box-sizing: border-box;
}
.tab-main-header__content {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
}
.tab-main-header__title {
font-family: var(--font-headline);
font-size: 18px;
font-weight: 700;
color: var(--color-heritage-red);
line-height: 1.2;
max-width: 52vw;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.tab-main-header__extra {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
max-width: 40vw;
}
.tab-main-header__extra-inner {
display: flex;
align-items: center;
color: var(--color-heritage-red);
font-size: 12px;
font-weight: 500;
}
.tab-main-header__extra-inner .tab-main-city-label {
margin-left: 4px;
}
/* ── 滚动透明顶栏(商品/门店详情) ── */
.page-nav-bar {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 50;
padding-left: var(--space-page);
background: transparent;
box-sizing: border-box;
transition: background 0.3s, box-shadow 0.3s;
}
.page-nav-bar--solid {
background: rgba(255, 255, 255, 0.95);
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05);
}
.page-nav-bar__content {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.page-nav-bar__btn {
width: 40px;
height: 40px;
border-radius: 999px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.8);
flex-shrink: 0;
}
.page-nav-bar--solid .page-nav-bar__btn {
background: transparent;
}
.page-nav-bar__btn--placeholder {
background: transparent;
pointer-events: none;
}
.page-nav-bar__icon {
font-size: 28px;
line-height: 1;
color: var(--color-ink-black);
font-weight: 300;
}
.page-nav-bar__icon--share {
font-size: 18px;
font-weight: 600;
}
.page-nav-bar__title {
flex: 1;
opacity: 0;
padding: 0 8px;
font-family: var(--font-headline);
font-size: 16px;
font-weight: 600;
color: var(--color-ink-black);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: center;
transition: opacity 0.3s;
}
.page-nav-bar__title--visible {
opacity: 1;
}
.page-with-nav-bar {
padding-top: var(--nav-bar-height, 56px);
box-sizing: border-box;
}
/* ── 子页面固定实底顶栏 ── */
.sub-page-header {
position: sticky;
top: 0;
z-index: 50;
padding-left: var(--space-page);
background: var(--color-background);
box-shadow: var(--shadow-card);
box-sizing: border-box;
}
.sub-page-header__content {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
}
.sub-page-header__back {
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 40px;
height: 40px;
margin-left: -8px;
display: flex;
align-items: center;
justify-content: center;
}
.sub-page-header__back-icon {
font-size: 28px;
line-height: 1;
color: var(--color-heritage-red);
font-weight: 300;
}
.sub-page-header__title {
font-family: var(--font-headline);
font-size: 18px;
font-weight: 700;
color: var(--color-heritage-red);
max-width: 60vw;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.sub-page-header__right {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
.sub-page-body {
padding-top: 12px;
box-sizing: border-box;
}
+280
View File
@@ -0,0 +1,280 @@
/* 订单确认 / 支付 / 订单列表 / 订单详情 */
.order-confirm-page,
.pay-page,
.orders-page,
.order-detail-page {
background: var(--color-background);
min-height: 100vh;
}
.order-card {
background: var(--color-card);
border-radius: var(--radius-lg);
margin: 0 var(--space-page) 12px;
padding: 16px;
box-shadow: var(--shadow-card);
}
.order-card-title {
display: block;
font-family: var(--font-headline);
font-size: 15px;
font-weight: 700;
margin-bottom: 12px;
color: var(--color-on-surface);
}
.order-product-row {
display: flex;
align-items: center;
}
.order-product-thumb {
width: 72px;
height: 72px;
border-radius: 12px;
background: var(--color-surface-container);
margin-right: 12px;
flex-shrink: 0;
overflow: hidden;
}
.order-product-thumb-img {
width: 100%;
height: 100%;
}
.order-product-name {
display: block;
font-size: 15px;
font-weight: 600;
margin-bottom: 4px;
}
.order-product-price {
display: block;
color: var(--color-heritage-red);
font-weight: 700;
font-size: 16px;
}
.order-qty-row {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid var(--color-surface-container);
}
.order-qty-controls {
display: flex;
align-items: center;
}
.order-qty-btn {
width: 32px;
height: 32px;
border-radius: 8px;
background: var(--color-surface-container-low);
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
color: var(--color-on-surface);
}
.order-qty-value {
margin: 0 14px;
font-size: 16px;
font-weight: 600;
min-width: 24px;
text-align: center;
}
.order-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 0;
font-size: 14px;
}
.order-row-label {
color: var(--color-on-surface-variant);
}
.order-row-value {
color: var(--color-on-surface);
font-weight: 500;
}
.order-row-value--price {
color: var(--color-heritage-red);
font-weight: 700;
}
.order-confirm-bar,
.pay-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 50;
padding: 12px 16px calc(env(safe-area-inset-bottom, 0px) + 12px);
display: flex;
align-items: center;
background: rgba(255, 255, 255, 0.95);
border-top: 1px solid rgba(226, 190, 188, 0.1);
box-sizing: border-box;
}
.order-confirm-total {
flex: 1;
}
.order-confirm-total-label {
display: block;
font-size: 12px;
color: var(--color-subtle-gray);
}
.order-confirm-total-value {
font-family: var(--font-headline);
font-size: 22px;
font-weight: 700;
color: var(--color-heritage-red);
}
.order-confirm-submit {
height: 48px;
padding: 0 28px;
border-radius: 999px;
background: var(--color-heritage-red);
color: #fff;
font-size: 16px;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
.order-tabs {
display: flex;
padding: 0 var(--space-page);
border-bottom: 1px solid var(--color-surface-container);
background: var(--color-background);
position: sticky;
top: var(--nav-bar-height, 56px);
z-index: 40;
}
.order-tab {
flex: 1;
text-align: center;
padding: 12px 0;
font-size: 14px;
font-weight: 600;
color: var(--color-subtle-gray);
border-bottom: 2px solid transparent;
}
.order-tab--active {
color: var(--color-heritage-red);
border-bottom-color: var(--color-heritage-red);
}
.order-list-item {
background: var(--color-card);
border-radius: var(--radius-lg);
margin: 12px var(--space-page);
padding: 16px;
box-shadow: var(--shadow-card);
}
.order-list-head {
display: flex;
justify-content: space-between;
margin-bottom: 12px;
}
.order-list-no {
font-size: 12px;
color: var(--color-subtle-gray);
}
.order-list-status {
font-size: 13px;
font-weight: 600;
color: var(--color-heritage-red);
}
.order-list-body {
display: flex;
align-items: center;
}
.order-list-thumb {
width: 64px;
height: 64px;
border-radius: 10px;
background: var(--color-surface-container);
margin-right: 12px;
flex-shrink: 0;
}
.order-list-name {
display: block;
font-size: 14px;
font-weight: 600;
margin-bottom: 4px;
}
.order-list-meta {
display: block;
font-size: 12px;
color: var(--color-subtle-gray);
}
.order-list-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid var(--color-surface-container);
}
.pay-status {
text-align: center;
padding: 48px 24px;
}
.pay-status-icon {
width: 72px;
height: 72px;
border-radius: 50%;
background: rgba(166, 29, 36, 0.08);
color: var(--color-heritage-red);
font-size: 36px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 16px;
}
.pay-status-title {
display: block;
font-family: var(--font-headline);
font-size: 20px;
font-weight: 700;
margin-bottom: 8px;
}
.pay-status-amount {
display: block;
font-size: 28px;
font-weight: 700;
color: var(--color-heritage-red);
margin-bottom: 24px;
}
@@ -0,0 +1,320 @@
/* 商品详情页 — 对齐 h5-user ProductDetailPage */
.product-detail-page {
background: var(--color-background);
}
.product-detail-main {
padding-bottom: 24px;
}
.product-detail-hero {
background: var(--color-card);
}
.detail-carousel-wrap {
position: relative;
width: 100%;
aspect-ratio: 1;
overflow: hidden;
}
.detail-carousel {
width: 100%;
height: 100%;
}
.detail-carousel-item,
.detail-carousel-image,
.detail-carousel-placeholder {
width: 100%;
height: 100%;
}
.detail-carousel-placeholder {
background: var(--color-surface-container);
}
.detail-carousel-dots {
position: absolute;
bottom: 16px;
left: 0;
right: 0;
display: flex;
justify-content: center;
gap: 6px;
pointer-events: none;
}
.detail-carousel-dot {
height: 4px;
width: 6px;
border-radius: 999px;
background: rgba(153, 153, 153, 0.3);
}
.detail-carousel-dot--active {
width: 24px;
background: var(--color-heritage-red);
}
.product-detail-info {
padding: var(--space-md) var(--space-page) var(--space-lg);
}
.product-detail-price {
display: flex;
align-items: baseline;
gap: 2px;
margin-bottom: 8px;
}
.product-detail-price-symbol {
font-family: var(--font-headline);
font-size: 16px;
font-weight: 600;
color: var(--color-heritage-red);
}
.product-detail-price-value {
font-family: var(--font-headline);
font-size: 32px;
font-weight: 700;
line-height: 40px;
color: var(--color-heritage-red);
}
.product-detail-name {
display: block;
font-family: var(--font-headline);
font-size: 20px;
font-weight: 700;
line-height: 28px;
color: var(--color-ink-black);
margin-bottom: 4px;
}
.product-detail-subtitle {
display: block;
font-size: 14px;
line-height: 20px;
color: var(--color-on-surface-variant);
margin-bottom: 24px;
}
.product-detail-promo {
position: relative;
padding: 16px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, #fff9e6 0%, #fff0c2 100%);
border: 1px solid rgba(255, 191, 0, 0.1);
overflow: hidden;
}
.product-detail-promo-glow {
position: absolute;
top: -16px;
right: -16px;
width: 80px;
height: 80px;
border-radius: 50%;
background: rgba(166, 29, 36, 0.05);
}
.product-detail-promo-head {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 8px;
position: relative;
z-index: 1;
}
.product-detail-promo-icon {
width: 40px;
height: 40px;
border-radius: 50%;
background: var(--color-heritage-red);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.product-detail-promo-icon-text {
color: #fff;
font-size: 16px;
font-weight: 700;
}
.product-detail-promo-title {
flex: 1;
font-family: var(--font-headline);
font-size: 16px;
font-weight: 700;
line-height: 22px;
color: var(--color-on-secondary-container);
}
.product-detail-promo-amount {
color: var(--color-heritage-red);
}
.product-detail-promo-desc {
display: block;
font-size: 14px;
line-height: 22px;
color: rgba(87, 69, 0, 0.8);
padding-left: 52px;
position: relative;
z-index: 1;
}
.product-detail-content {
background: var(--color-card);
border-radius: 24px 24px 0 0;
padding-top: var(--space-lg);
padding-bottom: 24px;
}
.product-detail-section-head {
display: flex;
align-items: center;
gap: 8px;
padding: 0 var(--space-page);
margin-bottom: var(--space-md);
}
.product-detail-section-bar {
width: 4px;
height: 20px;
border-radius: 999px;
background: var(--color-heritage-red);
}
.product-detail-section-title {
font-family: var(--font-headline);
font-size: 18px;
font-weight: 600;
color: var(--color-ink-black);
}
.product-detail-banner {
width: 100%;
display: block;
}
.product-detail-copy {
padding: var(--space-lg) var(--space-page);
}
.product-detail-story {
text-align: center;
margin-bottom: 24px;
}
.product-detail-story-title {
display: block;
font-family: var(--font-headline);
font-size: 18px;
font-weight: 700;
color: var(--color-heritage-red);
margin-bottom: 8px;
}
.product-detail-story-text {
display: block;
font-size: 14px;
line-height: 22px;
color: var(--color-on-surface-variant);
}
.product-detail-features {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.product-detail-feature {
width: calc(50% - 8px);
background: var(--color-surface-container-low);
border: 1px solid rgba(226, 190, 188, 0.3);
border-radius: var(--radius-lg);
padding: 16px;
text-align: center;
box-sizing: border-box;
}
.product-detail-feature-icon {
display: block;
font-size: 20px;
color: var(--color-heritage-red);
}
.product-detail-feature-title {
display: block;
font-family: var(--font-headline);
font-size: 14px;
font-weight: 600;
color: var(--color-ink-black);
margin-top: 8px;
}
.product-detail-feature-desc {
display: block;
font-size: 12px;
color: var(--color-subtle-gray);
margin-top: 4px;
}
.product-detail-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 50;
padding: 12px 16px calc(env(safe-area-inset-bottom, 0px) + 12px);
display: flex;
align-items: center;
gap: 16px;
background: rgba(255, 255, 255, 0.95);
border-top: 1px solid rgba(226, 190, 188, 0.1);
box-sizing: border-box;
}
.product-detail-bar-home {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 4px;
padding: 0 8px;
}
.product-detail-bar-home-icon {
width: 24px;
height: 24px;
}
.product-detail-bar-home-label {
font-size: 10px;
font-weight: 500;
color: var(--color-on-surface-variant);
}
.product-detail-buy-btn {
flex: 1;
height: 48px;
border-radius: 999px;
background: var(--color-heritage-red);
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 8px 24px rgba(166, 29, 36, 0.2);
}
.product-detail-buy-btn-text {
color: #fff;
font-family: var(--font-headline);
font-size: 16px;
font-weight: 700;
}
+252
View File
@@ -0,0 +1,252 @@
/* 核销 / 核销码 / 成功 / 权益明细 */
.redeem-page,
.redeem-code-page,
.redeem-success-page,
.benefit-detail-page,
.cs-page {
background: var(--color-background);
min-height: 100vh;
}
.redeem-hero {
margin: 16px var(--space-page);
padding: 24px 20px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, #fff9e6 0%, #fff0c2 100%);
text-align: center;
}
.redeem-hero-label {
display: block;
font-size: 13px;
color: rgba(87, 69, 0, 0.8);
margin-bottom: 8px;
}
.redeem-hero-amount {
font-family: var(--font-headline);
font-size: 36px;
font-weight: 700;
color: var(--color-heritage-red);
}
.redeem-input-wrap {
margin: 0 var(--space-page) 16px;
background: var(--color-card);
border-radius: var(--radius-lg);
padding: 16px;
box-shadow: var(--shadow-card);
}
.redeem-input {
width: 100%;
height: 52px;
font-size: 24px;
font-weight: 700;
color: var(--color-heritage-red);
text-align: center;
}
.redeem-tips {
margin: 0 var(--space-page);
font-size: 12px;
color: var(--color-subtle-gray);
line-height: 1.6;
}
.redeem-submit {
margin: 24px var(--space-page);
height: 48px;
border-radius: 999px;
background: var(--color-heritage-red);
color: #fff;
font-size: 16px;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
.redeem-code-panel {
margin: 32px var(--space-page);
padding: 32px 20px;
background: var(--color-card);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-card);
text-align: center;
}
.redeem-code-value {
display: block;
font-family: var(--font-headline);
font-size: 36px;
font-weight: 700;
letter-spacing: 0.12em;
color: var(--color-heritage-red);
margin: 16px 0;
}
.redeem-code-timer {
display: block;
font-size: 13px;
color: var(--color-subtle-gray);
}
.redeem-success-icon {
width: 80px;
height: 80px;
border-radius: 50%;
background: rgba(45, 106, 79, 0.12);
color: var(--color-success-green);
font-size: 40px;
display: flex;
align-items: center;
justify-content: center;
margin: 48px auto 16px;
}
.redeem-success-title {
display: block;
text-align: center;
font-family: var(--font-headline);
font-size: 22px;
font-weight: 700;
margin-bottom: 8px;
}
.redeem-success-desc {
display: block;
text-align: center;
font-size: 14px;
color: var(--color-subtle-gray);
margin-bottom: 32px;
}
.ledger-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 14px 0;
border-bottom: 1px solid var(--color-surface-container);
}
.ledger-item:last-child {
border-bottom: none;
}
.ledger-title {
display: block;
font-size: 14px;
font-weight: 600;
margin-bottom: 4px;
}
.ledger-time {
display: block;
font-size: 12px;
color: var(--color-subtle-gray);
}
.ledger-amount {
font-size: 16px;
font-weight: 700;
}
.ledger-amount--in {
color: var(--color-success-green);
}
.ledger-amount--out {
color: var(--color-heritage-red);
}
.region-picker-mask {
position: fixed;
inset: 0;
z-index: 100;
background: rgba(0, 0, 0, 0.45);
display: flex;
align-items: flex-end;
}
.region-picker-sheet {
width: 100%;
background: var(--color-card);
border-radius: 20px 20px 0 0;
padding-bottom: calc(16px + env(safe-area-inset-bottom, 0px));
}
.region-picker-head {
display: flex;
align-items: center;
justify-content: space-between;
padding: 14px 16px;
border-bottom: 1px solid var(--color-surface-container);
}
.region-picker-title {
font-size: 16px;
font-weight: 700;
}
.region-picker-cancel,
.region-picker-ok {
font-size: 14px;
color: var(--color-heritage-red);
padding: 4px 8px;
}
.region-picker-body {
padding: 24px 16px;
}
.region-picker-item {
display: block;
text-align: center;
padding: 12px;
font-size: 16px;
color: var(--color-on-surface);
}
.region-picker-item--active {
color: var(--color-heritage-red);
font-weight: 700;
}
.cs-bubble {
max-width: 78%;
padding: 12px 14px;
border-radius: 16px;
margin-bottom: 12px;
font-size: 14px;
line-height: 1.5;
}
.cs-bubble--bot {
background: var(--color-card);
box-shadow: var(--shadow-card);
margin-right: auto;
}
.cs-bubble--user {
background: var(--color-heritage-red);
color: #fff;
margin-left: auto;
}
.cs-quick {
display: flex;
flex-wrap: wrap;
margin: 16px var(--space-page);
}
.cs-quick-item {
padding: 8px 12px;
margin-right: 8px;
margin-bottom: 8px;
border-radius: 999px;
background: var(--color-card);
box-shadow: var(--shadow-card);
font-size: 12px;
color: var(--color-on-surface);
}
+148
View File
@@ -0,0 +1,148 @@
/* 门店详情 */
.store-detail-page {
background: var(--color-background);
}
.store-detail-hero {
background: var(--color-card);
}
.store-detail-carousel-wrap {
position: relative;
width: 100%;
height: 280px;
overflow: hidden;
}
.store-detail-carousel {
width: 100%;
height: 100%;
}
.store-detail-carousel-item,
.store-detail-carousel-image,
.store-detail-carousel-placeholder {
width: 100%;
height: 100%;
}
.store-detail-carousel-placeholder {
background: var(--color-surface-container);
}
.store-detail-carousel-dots {
position: absolute;
bottom: 16px;
left: 0;
right: 0;
display: flex;
justify-content: center;
}
.store-detail-carousel-dot {
height: 4px;
width: 6px;
margin: 0 3px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.45);
}
.store-detail-carousel-dot--active {
width: 20px;
background: #fff;
}
.store-detail-info-card {
margin: -40px var(--space-page) 16px;
position: relative;
z-index: 2;
background: var(--color-card);
border-radius: var(--radius-lg);
padding: 20px 16px;
box-shadow: var(--shadow-card);
}
.store-detail-name {
display: block;
font-family: var(--font-headline);
font-size: 20px;
font-weight: 700;
color: var(--color-ink-black);
margin-bottom: 8px;
}
.store-detail-meta {
display: block;
font-size: 13px;
color: var(--color-on-surface-variant);
margin-bottom: 6px;
line-height: 1.5;
}
.store-detail-tags {
display: flex;
flex-wrap: wrap;
margin-top: 12px;
}
.store-detail-tag {
padding: 4px 10px;
margin-right: 8px;
margin-bottom: 8px;
border-radius: 999px;
background: rgba(166, 29, 36, 0.08);
color: var(--color-heritage-red);
font-size: 11px;
}
.store-detail-section {
background: var(--color-card);
margin: 0 var(--space-page) 16px;
border-radius: var(--radius-lg);
padding: 16px;
box-shadow: var(--shadow-card);
}
.store-detail-section-title {
display: block;
font-family: var(--font-headline);
font-size: 16px;
font-weight: 700;
margin-bottom: 10px;
color: var(--color-on-surface);
}
.store-detail-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 50;
padding: 12px 16px calc(env(safe-area-inset-bottom, 0px) + 12px);
display: flex;
background: rgba(255, 255, 255, 0.95);
border-top: 1px solid rgba(226, 190, 188, 0.1);
box-sizing: border-box;
}
.store-detail-bar-btn {
flex: 1;
height: 48px;
border-radius: 999px;
display: flex;
align-items: center;
justify-content: center;
font-size: 15px;
font-weight: 700;
}
.store-detail-bar-btn--ghost {
background: rgba(166, 29, 36, 0.08);
color: var(--color-heritage-red);
margin-right: 12px;
}
.store-detail-bar-btn--primary {
background: var(--color-heritage-red);
color: #fff;
}
+125
View File
@@ -0,0 +1,125 @@
/* 门店列表 */
.store-page {
background: var(--color-background);
}
.store-toolbar {
padding: 0 var(--space-page) 12px;
}
.store-location {
display: flex;
align-items: center;
margin-bottom: 10px;
color: var(--color-on-surface-variant);
font-size: 12px;
font-weight: 500;
}
.store-location-pin {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--color-heritage-red);
margin-right: 6px;
}
.store-search {
height: 44px;
padding: 0 16px 0 40px;
border-radius: var(--radius-md);
background: var(--color-surface-container-low);
font-size: 14px;
color: var(--color-on-surface);
box-sizing: border-box;
width: 100%;
}
.store-category-tabs {
display: flex;
padding: 12px var(--space-page);
overflow-x: auto;
white-space: nowrap;
border-bottom: 1px solid rgba(226, 190, 188, 0.1);
}
.store-category-tab {
flex-shrink: 0;
margin-right: 24px;
font-size: 12px;
font-weight: 500;
color: var(--color-on-surface-variant);
padding-bottom: 6px;
border-bottom: 2px solid transparent;
}
.store-category-tab--active {
color: var(--color-heritage-red);
border-bottom-color: var(--color-heritage-red);
font-weight: 700;
}
.store-list {
padding: 16px var(--space-page);
}
.store-card {
background: var(--color-card);
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow-card);
margin-bottom: 16px;
}
.store-card-cover {
width: 100%;
height: 160px;
background: var(--color-surface-container);
display: block;
}
.store-card-cover--empty {
height: 160px;
background: var(--color-surface-container);
}
.store-card-body {
padding: 14px 16px 16px;
}
.store-card-name {
display: block;
font-family: var(--font-headline);
font-size: 16px;
font-weight: 700;
color: var(--color-on-surface);
margin-bottom: 6px;
}
.store-card-meta {
display: block;
font-size: 12px;
color: var(--color-subtle-gray);
margin-bottom: 4px;
}
.store-card-footer {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 12px;
}
.store-card-distance {
font-size: 12px;
color: var(--color-on-surface-variant);
}
.store-card-cta {
padding: 6px 14px;
border-radius: var(--radius-full);
background: rgba(166, 29, 36, 0.08);
color: var(--color-heritage-red);
font-size: 12px;
font-weight: 600;
}