/* 核销 / 核销码 / 成功 / 权益明细 */ .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; line-height: 52px; color: var(--color-heritage-red); text-align: center; box-sizing: border-box; } .redeem-input-placeholder { color: var(--color-subtle-gray); text-align: center; } /* 小程序原生 input:text-align 需落到组件自身与内部节点 */ .redeem-input, .redeem-input input, .redeem-input .taro-input, .redeem-input .weui-input { width: 100% !important; height: 52px !important; min-height: 0 !important; padding: 0 !important; margin: 0 !important; border: none !important; background: transparent !important; box-sizing: border-box !important; font-size: 24px !important; font-weight: 700 !important; line-height: 52px !important; color: var(--color-heritage-red); text-align: center !important; } .redeem-tips { display: block; box-sizing: border-box; margin: 8px var(--space-page) 0; padding: 12px 16px; border-radius: var(--radius-md); background: rgba(0, 0, 0, 0.03); } .redeem-tips-text { display: block; font-size: 12px; color: var(--color-subtle-gray); line-height: 1.7; word-break: break-word; } .redeem-amount-hint { font-size: 12px; color: var(--color-subtle-gray); line-height: 1.4; } .redeem-amount-foot { display: flex; align-items: center; justify-content: space-between; margin: 0 var(--space-page) 12px; } .redeem-fill-max { font-size: 13px; color: var(--color-heritage-red); font-weight: 600; } .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-submit--disabled { opacity: 0.5; } .redeem-cancel-btn { margin: 0 var(--space-page) 24px; height: 48px; border-radius: var(--radius-md); background: transparent; color: var(--color-heritage-red); border: 1px solid var(--color-heritage-red); display: flex; align-items: center; justify-content: center; font-size: 15px; font-weight: 600; box-sizing: border-box; } .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-head { display: block; font-size: 14px; color: var(--color-subtle-gray); margin-bottom: 20px; } .redeem-qr-wrap { padding: 12px; border: 4px solid rgba(166, 29, 36, 0.1); border-radius: var(--radius-lg); margin: 0 auto 20px; width: 240px; max-width: calc(100% - 40px); box-sizing: border-box; } .redeem-qr-box { position: relative; width: 100%; height: 0; padding-bottom: 100%; background: #fff; overflow: hidden; } .redeem-qr-canvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; display: block; } .redeem-qr-img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; display: block; background-size: 100% 100%; background-repeat: no-repeat; background-position: center; } .redeem-qr-placeholder { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 0; background: var(--color-surface-container); } .redeem-qr-scanline { position: absolute; top: 0; left: 0; right: 0; z-index: 3; height: 3px; background: linear-gradient( 180deg, rgba(166, 29, 36, 0) 0%, rgba(166, 29, 36, 0.85) 50%, rgba(166, 29, 36, 0) 100% ); box-shadow: 0 0 12px rgba(166, 29, 36, 0.55); pointer-events: none; animation: redeem-scan 3s ease-in-out infinite; } @keyframes redeem-scan { 0%, 100% { top: 0; opacity: 0.1; } 50% { top: 95%; opacity: 0.8; } } .redeem-timer { display: flex; flex-direction: column; align-items: center; margin-bottom: 16px; border-radius: var(--radius-md); } .redeem-timer--active { animation: redeem-pulse 2s infinite; } @keyframes redeem-pulse { 0% { box-shadow: 0 0 0 0 rgba(166, 29, 36, 0.2); } 70% { box-shadow: 0 0 0 10px rgba(166, 29, 36, 0); } 100% { box-shadow: 0 0 0 0 rgba(166, 29, 36, 0); } } .redeem-timer-value { font-family: var(--font-headline); font-size: 24px; font-weight: 700; color: var(--color-ink-black); } .redeem-timer-label { font-size: 10px; letter-spacing: 0.12em; color: var(--color-subtle-gray); margin-top: 4px; } .redeem-code-amount { display: block; font-family: var(--font-headline); font-size: 28px; font-weight: 700; color: var(--color-heritage-red); margin: 8px 0 16px; } .redeem-code-token-wrap { margin-top: 8px; padding-top: 16px; border-top: 1px solid var(--color-surface-container); } .redeem-code-token-label { display: block; font-size: 12px; color: var(--color-subtle-gray); margin-bottom: 4px; } .redeem-code-token { display: block; font-family: ui-monospace, monospace; font-size: 11px; color: var(--color-on-surface); line-height: 1.5; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .redeem-code-token-hint { display: block; margin-top: 4px; font-size: 11px; 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: 24px; } .redeem-success-amount { display: block; text-align: center; font-family: var(--font-headline); font-size: 28px; font-weight: 700; color: var(--color-heritage-red); margin-bottom: 8px; } .redeem-success-details { margin: 0 var(--space-page) 24px; padding: 16px; background: var(--color-card); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); } .redeem-success-detail-row { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; padding: 10px 0; font-size: 13px; border-bottom: 1px solid var(--color-surface-container); } .redeem-success-detail-row:last-child { border-bottom: none; } .redeem-success-mono { font-family: ui-monospace, monospace; font-size: 12px; text-align: right; word-break: break-all; } .redeem-success-rating { margin: 16px var(--space-page) 0; padding: 16px; background: var(--color-card); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); } .redeem-success-rating-title { display: block; font-size: 15px; font-weight: 700; color: var(--color-on-surface); margin-bottom: 12px; } .redeem-rating-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; } .redeem-rating-label { font-size: 14px; color: var(--color-on-surface); } .redeem-star-row { display: flex; gap: 6px; } .redeem-star-btn { font-size: 22px; color: #d0d0d0; line-height: 1; } .redeem-star-btn--active { color: #f5a623; } .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); } .cs-body { display: flex; flex-direction: column; align-items: center; padding-top: 48px; text-align: center; } .cs-brand { display: block; font-family: var(--font-headline); font-size: 22px; font-weight: 700; color: var(--color-on-surface); margin-bottom: 10px; } .cs-title { font-size: 14px; color: var(--color-subtle-gray); margin-bottom: 12px; } .cs-phone, .cs-phone-display { display: block; font-family: var(--font-headline); font-size: 28px; font-weight: 700; color: var(--color-heritage-red); margin-top: 20px; letter-spacing: 1px; } .cs-hint { display: block; font-size: 14px; color: var(--color-subtle-gray); line-height: 1.5; margin-bottom: 8px; max-width: 280px; } .cs-hours { display: block; font-size: 12px; color: var(--color-subtle-gray); margin-bottom: 32px; } .cs-online-btn { display: flex; align-items: center; justify-content: center; width: 100%; max-width: 280px; padding: 14px 24px; margin: 0; border: none; border-radius: 999px; background: var(--color-heritage-red); color: #fff; font-size: 15px; font-weight: 600; line-height: 1.4; box-sizing: border-box; } .cs-online-btn::after { border: none; } .cs-call-btn { padding: 12px 32px; border-radius: 999px; background: var(--color-heritage-red); color: #fff; font-size: 15px; font-weight: 600; } .cs-phone-link { margin-top: 20px; padding: 8px 12px; font-size: 13px; color: var(--color-subtle-gray); text-decoration: underline; text-underline-offset: 3px; }