From e2ffd43b298873f2288867d4cd05273e6a1ec6d4 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 15 Sep 2026 08:38:30 +0800 Subject: [PATCH] feat(points): update apps/web/src/pages/subscription/Plans.css --- apps/web/src/pages/subscription/Plans.css | 401 ++++++++++++---------- 1 file changed, 227 insertions(+), 174 deletions(-) diff --git a/apps/web/src/pages/subscription/Plans.css b/apps/web/src/pages/subscription/Plans.css index a1ebdfeb9..fdcf43633 100644 --- a/apps/web/src/pages/subscription/Plans.css +++ b/apps/web/src/pages/subscription/Plans.css @@ -1,233 +1,286 @@ -/* V21 定价页面 - CSS变量体系 */ -@import "../../styles/global.css"; - +/* 会员订阅 & 积分充值页样式 v2 */ .xx-plans-page { - max-width: 1200px; + max-width: 1100px; margin: 0 auto; - padding: var(--space-3xl) var(--space-lg); + padding: 24px 0; } -/* 页面头部 */ -.xx-page-head { - text-align: center; - margin-bottom: var(--space-3xl); +/* 当前状态卡片 */ +.xx-current-status { + background: linear-gradient(135deg, #ede9fe 0%, #fce7f3 100%); + border-radius: 14px; + margin-bottom: 16px; } -.xx-page-head h2 { - font-size: var(--font-size-5xl); - font-weight: var(--font-weight-extrabold); - color: var(--text-primary); - margin: 0 0 var(--space-md); - letter-spacing: var(--letter-spacing-tight); +.xx-current-status .ant-card-body { + padding: 20px 24px; } -.xx-page-head p { - font-size: var(--font-size-lg); - color: var(--text-secondary); - margin: 0; - max-width: 560px; - margin-left: auto; - margin-right: auto; -} - -/* 定价卡片网格 - 4列 */ -.xx-plans-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: var(--space-lg); - margin-top: var(--space-xl); -} - -@media (max-width: 1200px) { - .xx-plans-grid { - grid-template-columns: repeat(2, 1fr); - } -} - -@media (max-width: 768px) { - .xx-plans-grid { - grid-template-columns: 1fr; - max-width: 400px; - margin-left: auto; - margin-right: auto; - } -} - -/* V21 定价卡片 */ -.xx-plan-card { - background: var(--bg-elevated); - border: 1px solid var(--border-color); - border-radius: var(--radius-xl); - box-shadow: var(--shadow-card); - padding: var(--space-xl) var(--space-lg); - position: relative; - transition: var(--transition-base); +.xx-current-balance { display: flex; - flex-direction: column; + align-items: center; + gap: 6px; + font-size: 20px; + font-weight: 800; + color: var(--text-primary, #111827); } -.xx-plan-card:hover { - border-color: var(--primary-color); - box-shadow: 0 32px 90px color-mix(in srgb, var(--primary-color) 15%, transparent); - transform: translateY(-4px); +.xx-current-balance-val { + font-variant-numeric: tabular-nums; +} + +/* 计费周期切换 */ +.xx-billing-switch { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 12px; + margin-top: 12px; + position: relative; +} + +.xx-billing-btn { + position: relative; + border: 2px solid var(--border-color, #e5e7eb); + background: var(--bg-primary, #fff); + border-radius: 12px; + padding: 16px 12px; + cursor: pointer; + transition: all 0.15s; + text-align: center; +} + +.xx-billing-btn:hover { + border-color: var(--primary-soft, #c4b5fd); +} + +.xx-billing-btn.active { + border-color: #7c3aed; + background: #f5f3ff; + box-shadow: 0 4px 12px rgba(124, 58, 237, 0.15); +} + +.xx-billing-name { + font-weight: 700; + font-size: 15px; + color: var(--text-primary, #111827); +} + +.xx-billing-price { + margin: 6px 0; +} + +.xx-billing-yuan { + font-size: 14px; + color: var(--text-secondary, #6b7280); +} + +.xx-billing-amount { + font-size: 28px; + font-weight: 800; + color: var(--text-primary, #111827); + margin: 0 2px; +} + +.xx-billing-sub { + font-size: 12px; + color: var(--text-tertiary, #9ca3af); +} + +.xx-billing-save { + display: inline-block; + margin-left: 6px; + background: #fef3c7; + color: #d97706; + padding: 1px 6px; + border-radius: 4px; + font-size: 11px; + font-weight: 600; +} + +/* 方案卡片 */ +.xx-plan-card { + border-radius: 14px; + position: relative; + height: 100%; } .xx-plan-card.featured { - border: 2px solid var(--primary-color); - box-shadow: - 0 0 0 4px color-mix(in srgb, var(--primary-color) 10%, transparent), - 0 32px 90px color-mix(in srgb, var(--primary-color) 15%, transparent); - transform: scale(1.02); + border: 2px solid #7c3aed; + box-shadow: 0 8px 24px rgba(124, 58, 237, 0.12); } -.xx-plan-card.featured:hover { - transform: scale(1.02) translateY(-4px); -} - -/* 推荐标签 */ -.xx-badge { +.xx-plan-recommend-badge { position: absolute; top: -12px; - left: 50%; - transform: translateX(-50%); - background: var(--gradient-primary); - color: var(--text-inverse); - padding: 6px 16px; - border-radius: var(--radius-full); - font-size: var(--font-size-sm); - font-weight: var(--font-weight-extrabold); - white-space: nowrap; + right: 20px; + background: linear-gradient(135deg, #f59e0b, #ef4444); + color: #fff; + padding: 4px 12px; + border-radius: 999px; + font-size: 12px; + font-weight: 700; + box-shadow: 0 2px 8px rgba(239, 68, 68, 0.3); } -/* 企业版定制标签 */ -.xx-badge.enterprise { - background: linear-gradient(135deg, var(--accent-color), var(--accent-dark)); -} - -/* 套餐名称 */ -.xx-plan-card h3 { - font-size: var(--font-size-2xl); - font-weight: var(--font-weight-extrabold); - color: var(--text-primary); - margin: 0 0 var(--space-lg); +.xx-plan-head { text-align: center; } -/* 价格 */ .xx-plan-price { - text-align: center; - margin-bottom: 12px; + margin: 12px 0 6px; + display: flex; + align-items: baseline; + justify-content: center; } .xx-plan-price .currency { - font-size: var(--font-size-lg); - font-weight: var(--font-weight-bold); - color: var(--text-secondary); - vertical-align: top; + font-size: 18px; + color: var(--text-secondary, #6b7280); } .xx-plan-price .amount { - font-size: var(--font-size-5xl); - font-weight: var(--font-weight-extrabold); - color: var(--primary-color); + font-size: 44px; + font-weight: 800; + color: var(--text-primary, #111827); line-height: 1; + margin: 0 4px; +} + +.xx-plan-card.featured .xx-plan-price .amount { + color: #7c3aed; } .xx-plan-price .period { - font-size: var(--font-size-md); - color: var(--text-secondary); - font-weight: var(--font-weight-medium); + color: var(--text-secondary, #6b7280); + font-size: 14px; } -/* 企业版价格 */ -.xx-plan-price.custom .amount { - font-size: var(--font-size-3xl); +.xx-feature-list { + list-style: none; + padding: 0; + margin: 0 0 20px 0; } -/* 描述 */ -.xx-plan-description { - color: var(--text-secondary); - font-size: var(--font-size-base); - text-align: center; - margin-bottom: var(--space-lg); - padding-bottom: var(--space-lg); - border-bottom: 1px solid var(--border-color); -} - -/* 功能列表 */ -.xx-features { - margin-top: var(--space-sm); - padding-top: var(--space-lg); - flex: 1; -} - -.xx-feature { +.xx-feature-list li { display: flex; - gap: 12px; - align-items: flex-start; - color: var(--text-secondary); - font-size: var(--font-size-base); - margin-bottom: var(--space-md); - line-height: var(--line-height-base); + align-items: center; + gap: 10px; + padding: 7px 0; + font-size: 14px; + color: var(--text-primary, #111827); } -.xx-feature span:first-child { - color: var(--secondary-color); - font-weight: var(--font-weight-extrabold); - flex-shrink: 0; +.xx-feature-list li.disabled { + color: var(--text-tertiary, #9ca3af); + text-decoration: line-through; } -/* 订阅按钮 */ -.xx-subscribe-btn { - width: 100%; - margin-top: var(--space-lg); - padding: var(--space-md) var(--space-lg) !important; - font-size: var(--font-size-base) !important; - font-weight: var(--font-weight-extrabold) !important; - border-radius: var(--radius-md) !important; - transition: var(--transition-fast) !important; - cursor: pointer; - border: none; +.xx-feature-no { + width: 16px; + display: inline-flex; + justify-content: center; + color: var(--text-tertiary, #d1d5db); } -.xx-subscribe-btn.primary { - background: var(--gradient-primary) !important; - color: var(--text-inverse) !important; - border: none !important; - box-shadow: var(--shadow-primary) !important; +.xx-plan-tip { + text-align: center; + font-size: 12px; + color: var(--text-tertiary, #9ca3af); + margin-top: 10px; } -.xx-subscribe-btn.primary:hover { - box-shadow: var(--shadow-hover) !important; - transform: translateY(-1px); +/* 积分包卡片 */ +.xx-pkg-card { + position: relative; + border-radius: 14px; + text-align: center; + transition: all 0.2s; + overflow: hidden; } -.xx-subscribe-btn.ghost { - background: var(--bg-primary) !important; - border: 1px solid var(--border-color) !important; - color: var(--text-primary) !important; +.xx-pkg-card:hover { + transform: translateY(-4px); + box-shadow: 0 12px 28px rgba(139, 92, 246, 0.18); } -.xx-subscribe-btn.ghost:hover { - border-color: var(--primary-color) !important; - color: var(--primary-color) !important; +.xx-pkg-card.recommended { + border: 2px solid #8b5cf6; } -/* 企业版按钮 */ -.xx-subscribe-btn.enterprise { - background: linear-gradient(135deg, var(--accent-color), var(--accent-dark)) !important; - color: var(--text-inverse) !important; - border: none !important; - box-shadow: 0 14px 26px color-mix(in srgb, var(--accent-color) 22%, transparent) !important; +.xx-pkg-badge { + position: absolute; + top: 12px; + left: 12px; + background: linear-gradient(135deg, #8b5cf6, #ec4899); + color: #fff; + padding: 2px 10px; + border-radius: 999px; + font-size: 11px; + font-weight: 700; } -@media (max-width: 480px) { - .xx-plans-grid { +.xx-pkg-discount { + position: absolute; + top: 12px; + right: 12px; + margin: 0; +} + +.xx-pkg-name { + font-size: 18px; + font-weight: 700; + color: var(--text-primary, #111827); + margin-top: 8px; +} + +.xx-pkg-points { + font-size: 16px; + color: #8b5cf6; + font-weight: 600; + margin: 8px 0; +} + +.xx-pkg-price { + display: flex; + align-items: baseline; + justify-content: center; + gap: 6px; + margin-top: 12px; +} + +.xx-pkg-price .currency { + font-size: 16px; + color: var(--text-secondary, #6b7280); +} + +.xx-pkg-price .amount { + font-size: 32px; + font-weight: 800; + color: var(--text-primary, #111827); + line-height: 1; +} + +.xx-pkg-card.recommended .xx-pkg-price .amount { + color: #8b5cf6; +} + +.xx-pkg-origin { + color: var(--text-tertiary, #9ca3af); + text-decoration: line-through; + font-size: 13px; +} + +.xx-pkg-unit { + font-size: 12px; + color: var(--text-tertiary, #9ca3af); + margin-top: 4px; +} + +@media (max-width: 640px) { + .xx-billing-switch { grid-template-columns: 1fr; - gap: var(--space-md); } - - .xx-plan-card { - padding: var(--space-lg); + .xx-plan-price .amount { + font-size: 36px; } }