/* ======================================== 传承基因测试 - 样式表 V2 设计方向:深邃、精致、有仪式感 ======================================== */ /* ---------- CSS 变量 ---------- */ :root { --bg-deep: #0f0a1e; --bg-mid: #1a1232; --purple-1: #7c5cbf; --purple-2: #a78bda; --purple-3: #c4b5fd; --gold: #f0c27a; --gold-light: #fceabb; --white: #ffffff; --white-80: rgba(255,255,255,0.8); --white-60: rgba(255,255,255,0.6); --white-40: rgba(255,255,255,0.4); --white-20: rgba(255,255,255,0.2); --white-10: rgba(255,255,255,0.1); --white-06: rgba(255,255,255,0.06); --glass: rgba(255,255,255,0.07); --glass-border: rgba(255,255,255,0.12); --serif: 'Noto Serif SC', 'Songti SC', 'SimSun', serif; --sans: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif; --radius-sm: 10px; --radius-md: 16px; --radius-lg: 24px; --radius-xl: 32px; } /* ---------- 基础重置 ---------- */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { font-size: 16px; -webkit-text-size-adjust: 100%; } body { font-family: var(--sans); color: var(--white); min-height: 100vh; min-height: 100dvh; overflow-x: hidden; background: var(--bg-deep); } /* ---------- 噪点纹理叠加 ---------- */ .bg-noise { position: fixed; inset: 0; pointer-events: none; z-index: 0; opacity: 0.03; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E"); background-size: 256px 256px; } /* ---------- 页面切换 ---------- */ .page { display: none; min-height: 100vh; min-height: 100dvh; position: relative; z-index: 1; } .page.active { display: flex; flex-direction: column; animation: pageIn 0.5s cubic-bezier(0.22, 1, 0.36, 1); } @keyframes pageIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* ---------- 按钮通用 ---------- */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 14px 32px; border: none; border-radius: var(--radius-lg); font-family: var(--sans); font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.3s cubic-bezier(0.22, 1, 0.36, 1); text-decoration: none; text-align: center; -webkit-tap-highlight-color: transparent; position: relative; overflow: hidden; } .btn:active { transform: scale(0.97); } /* ======================================== 首页 ======================================== */ #home { justify-content: center; align-items: center; text-align: center; padding: 24px; overflow: hidden; background: radial-gradient(ellipse at 50% 30%, rgba(124,92,191,0.25) 0%, transparent 60%), radial-gradient(ellipse at 80% 80%, rgba(167,139,218,0.1) 0%, transparent 50%), var(--bg-deep); } /* 装饰 */ .deco-circle { position: absolute; border-radius: 50%; pointer-events: none; } .deco-1 { width: 400px; height: 400px; top: -150px; right: -100px; background: radial-gradient(circle, rgba(124,92,191,0.15) 0%, transparent 70%); } .deco-2 { width: 300px; height: 300px; bottom: -50px; left: -100px; background: radial-gradient(circle, rgba(240,194,122,0.08) 0%, transparent 70%); } .deco-3 { width: 200px; height: 200px; top: 50%; left: 60%; background: radial-gradient(circle, rgba(167,139,218,0.1) 0%, transparent 70%); } .deco-glow { position: absolute; width: 500px; height: 500px; top: 50%; left: 50%; transform: translate(-50%, -60%); background: radial-gradient(circle, rgba(124,92,191,0.12) 0%, transparent 60%); pointer-events: none; animation: glowPulse 6s ease-in-out infinite; } @keyframes glowPulse { 0%, 100% { opacity: 0.6; transform: translate(-50%, -60%) scale(1); } 50% { opacity: 1; transform: translate(-50%, -60%) scale(1.1); } } .home-content { position: relative; z-index: 1; } .home-badge { font-family: var(--sans); font-size: 0.7rem; font-weight: 600; letter-spacing: 4px; color: var(--gold); opacity: 0.7; margin-bottom: 24px; text-transform: uppercase; } .home-title { font-family: var(--serif); font-size: 2.4rem; font-weight: 900; line-height: 1.35; margin-bottom: 16px; letter-spacing: 2px; background: linear-gradient(135deg, var(--white) 0%, var(--purple-3) 50%, var(--gold-light) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .home-subtitle { font-size: 1rem; color: var(--white-60); margin-bottom: 48px; line-height: 1.6; font-weight: 300; } .btn-start { background: linear-gradient(135deg, var(--purple-1) 0%, #9b6dd7 100%); color: var(--white); padding: 18px 48px; font-size: 1.1rem; border-radius: 60px; box-shadow: 0 8px 32px rgba(124,92,191,0.4), 0 0 0 1px rgba(255,255,255,0.1) inset; letter-spacing: 1px; } .btn-start:hover { box-shadow: 0 12px 40px rgba(124,92,191,0.5), 0 0 0 1px rgba(255,255,255,0.15) inset; transform: translateY(-2px); } .home-footer { position: absolute; bottom: 24px; left: 0; right: 0; text-align: center; z-index: 1; } .privacy-link { color: var(--white-40); text-decoration: none; font-size: 0.8rem; cursor: pointer; transition: color 0.2s; border-bottom: 1px solid transparent; } .privacy-link:hover { color: var(--white-60); border-bottom-color: var(--white-40); } .disclaimer { font-size: 0.7rem; color: var(--white-20); margin-top: 8px; line-height: 1.6; padding: 0 20px; } /* ======================================== 答题页 ======================================== */ #quiz { padding: 0; background: radial-gradient(ellipse at 50% 0%, rgba(124,92,191,0.15) 0%, transparent 50%), var(--bg-deep); } /* 顶部栏 */ .quiz-topbar { display: flex; align-items: center; gap: 12px; padding: 16px 20px; position: sticky; top: 0; z-index: 10; background: rgba(15,10,30,0.8); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--glass-border); } .btn-back { width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--glass-border); background: var(--glass); color: var(--white-80); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.2s; flex-shrink: 0; padding: 0; font-size: 0; } .btn-back:hover { background: var(--white-10); border-color: var(--white-20); } .btn-back:active { transform: scale(0.92); } /* 进度条 - 高对比度设计 */ .progress-area { flex: 1; display: flex; align-items: center; gap: 12px; } .progress-track { flex: 1; height: 6px; background: rgba(255,255,255,0.12); border-radius: 3px; overflow: hidden; position: relative; } .progress-fill { height: 100%; width: 0%; border-radius: 3px; background: linear-gradient(90deg, var(--purple-1), var(--gold)); transition: width 0.5s cubic-bezier(0.22, 1, 0.36, 1); position: relative; box-shadow: 0 0 12px rgba(240,194,122,0.4); } .progress-fill::after { content: ''; position: absolute; right: 0; top: 50%; transform: translateY(-50%); width: 12px; height: 12px; border-radius: 50%; background: var(--gold); box-shadow: 0 0 8px rgba(240,194,122,0.6), 0 0 20px rgba(240,194,122,0.3); opacity: 0; transition: opacity 0.3s; } .progress-fill[style*="width: 0"]::after { opacity: 0; } .progress-fill:not([style*="width: 0"])::after { opacity: 1; } .progress-label { font-size: 0.8rem; font-weight: 600; color: var(--white-60); min-width: 42px; text-align: right; font-variant-numeric: tabular-nums; } /* 题目区域 */ .quiz-body { flex: 1; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 32px 24px 40px; overflow: hidden; } /* 题目切换动画容器 */ .question-wrapper { width: 100%; max-width: 560px; overflow: hidden; margin-bottom: 40px; } .question-inner { transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.4s cubic-bezier(0.22, 1, 0.36, 1); } .question-inner.slide-out-left { transform: translateX(-60px); opacity: 0; } .question-inner.slide-in-right { transform: translateX(60px); opacity: 0; } .question-inner.slide-out-right { transform: translateX(60px); opacity: 0; } .question-inner.slide-in-left { transform: translateX(-60px); opacity: 0; } .question-number { display: inline-block; font-family: var(--sans); font-size: 0.75rem; font-weight: 700; letter-spacing: 2px; color: var(--gold); background: rgba(240,194,122,0.1); border: 1px solid rgba(240,194,122,0.2); padding: 4px 14px; border-radius: 20px; margin-bottom: 20px; } .quiz-question { font-family: var(--serif); font-size: 1.25rem; line-height: 1.8; text-align: center; color: var(--white); font-weight: 600; min-height: 60px; display: flex; align-items: center; justify-content: center; } /* 量表按钮 - 全新设计 */ .scale-buttons { display: flex; flex-direction: column; gap: 10px; width: 100%; max-width: 400px; } .btn-scale { display: flex; align-items: center; gap: 14px; width: 100%; padding: 16px 20px; border: 1.5px solid var(--glass-border); border-radius: var(--radius-md); background: var(--glass); color: var(--white-80); font-family: var(--sans); font-size: 0.95rem; font-weight: 500; cursor: pointer; transition: all 0.25s cubic-bezier(0.22, 1, 0.36, 1); text-align: left; -webkit-tap-highlight-color: transparent; min-height: 56px; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); /* 选项弹入动画 */ opacity: 0; transform: translateY(16px); animation: scaleIn 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards; } .btn-scale:nth-child(1) { animation-delay: 0.05s; } .btn-scale:nth-child(2) { animation-delay: 0.1s; } .btn-scale:nth-child(3) { animation-delay: 0.15s; } .btn-scale:nth-child(4) { animation-delay: 0.2s; } .btn-scale:nth-child(5) { animation-delay: 0.25s; } @keyframes scaleIn { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } .btn-scale:hover { background: rgba(255,255,255,0.12); border-color: var(--white-20); transform: translateY(-1px); } .btn-scale:active { transform: scale(0.98); } .btn-scale.selected { background: linear-gradient(135deg, rgba(124,92,191,0.4) 0%, rgba(167,139,218,0.3) 100%); border-color: var(--purple-2); box-shadow: 0 4px 20px rgba(124,92,191,0.3), inset 0 0 0 1px rgba(255,255,255,0.1); color: var(--white); font-weight: 600; } .scale-emoji { font-size: 1.3rem; flex-shrink: 0; width: 28px; text-align: center; } .scale-text { flex: 1; } .quiz-disclaimer { font-size: 0.7rem; color: var(--white-20); margin-top: 32px; text-align: center; line-height: 1.5; padding: 0 20px; } /* ======================================== 计算页 ======================================== */ #loading { justify-content: center; align-items: center; background: var(--bg-deep); } .loading-content { display: flex; flex-direction: column; align-items: center; gap: 40px; } /* DNA 动画 */ .loading-dna { position: relative; width: 60px; height: 120px; } .dna-strand { position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: space-around; align-items: center; animation: dnaRotate 3s ease-in-out infinite; } .dna-strand span { width: 10px; height: 10px; border-radius: 50%; background: var(--purple-2); box-shadow: 0 0 12px rgba(167,139,218,0.6); } .dna-strand-2 { animation-delay: -1.5s; } .dna-strand-2 span { background: var(--gold); box-shadow: 0 0 12px rgba(240,194,122,0.6); } @keyframes dnaRotate { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(20px); } 75% { transform: translateX(-20px); } } .loading-text { font-family: var(--serif); font-size: 1.1rem; color: var(--white-60); font-weight: 400; } .loading-dots::after { content: ''; animation: dots 1.5s steps(4, end) infinite; } @keyframes dots { 0% { content: ''; } 25% { content: '.'; } 50% { content: '..'; } 75% { content: '...'; } } /* ======================================== 结果页 ======================================== */ #result { padding: 0; background: radial-gradient(ellipse at 50% 0%, rgba(124,92,191,0.2) 0%, transparent 50%), radial-gradient(ellipse at 50% 100%, rgba(240,194,122,0.08) 0%, transparent 40%), var(--bg-deep); } .result-scroll { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 0 20px 60px; max-width: 560px; margin: 0 auto; width: 100%; } .result-scroll::-webkit-scrollbar { display: none; } .result-scroll { -ms-overflow-style: none; scrollbar-width: none; } /* 类型展示区 - Hero设计 */ .result-hero { text-align: center; padding: 48px 0 32px; position: relative; } .result-icon-ring { width: 140px; height: 140px; margin: 0 auto 24px; border-radius: 50%; background: linear-gradient(135deg, rgba(124,92,191,0.3) 0%, rgba(240,194,122,0.2) 100%); border: 2px solid var(--glass-border); display: flex; align-items: center; justify-content: center; position: relative; overflow: hidden; animation: iconFloat 4s ease-in-out infinite; box-shadow: 0 0 40px rgba(124,92,191,0.2), 0 0 80px rgba(124,92,191,0.1); } .result-icon-ring::before { content: ''; position: absolute; inset: -6px; border-radius: 50%; border: 1px solid rgba(240,194,122,0.2); animation: ringPulse 3s ease-in-out infinite; } @keyframes iconFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } } @keyframes ringPulse { 0%, 100% { opacity: 0.3; transform: scale(1); } 50% { opacity: 0.8; transform: scale(1.05); } } .result-icon { width: 210px; height: 210px; filter: drop-shadow(0 2px 8px rgba(0,0,0,0.3)); } .result-label { font-size: 0.8rem; color: var(--white-40); letter-spacing: 3px; text-transform: uppercase; margin-bottom: 8px; font-weight: 500; } .result-name { font-family: var(--serif); font-size: 2.6rem; font-weight: 900; margin-bottom: 12px; background: linear-gradient(135deg, var(--white) 20%, var(--gold-light) 80%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; letter-spacing: 4px; } .result-desc { font-size: 0.95rem; color: var(--white-60); line-height: 1.6; font-weight: 300; } /* 结果卡片 */ .result-card { background: var(--glass); border: 1px solid var(--glass-border); border-radius: var(--radius-lg); padding: 24px 20px; margin-bottom: 16px; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); } .card-title { font-size: 0.9rem; font-weight: 600; color: var(--white-80); margin-bottom: 20px; display: flex; align-items: center; gap: 8px; letter-spacing: 1px; } .card-title svg { color: var(--gold); flex-shrink: 0; } /* 雷达图 */ #radar-canvas { display: block; margin: 0 auto; max-width: 100%; } /* 分析文字 */ .result-analysis { font-size: 0.92rem; line-height: 2; color: var(--white-80); text-align: justify; } /* 课程推荐 */ .recommend-card { text-align: center; border-color: rgba(240,194,122,0.15); background: linear-gradient(135deg, rgba(240,194,122,0.05) 0%, var(--glass) 100%); } .result-recommend { font-size: 0.92rem; line-height: 1.8; color: var(--white-80); margin-bottom: 24px; } .course-card-wrapper { display: flex; flex-direction: column; align-items: center; } .course-card-img { width: 100%; max-width: 320px; height: auto; display: block; border-radius: var(--radius-md); box-shadow: 0 8px 32px rgba(0,0,0,0.3), 0 0 0 1px rgba(255,255,255,0.08); cursor: pointer; transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.3s ease; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; } .course-card-img:active { transform: scale(0.98); } .course-card-hint { font-size: 0.8rem; color: var(--white-40); margin-top: 16px; letter-spacing: 1px; } /* 课程大图弹窗 */ .course-modal-img { max-width: 92vw; max-height: 85vh; object-fit: contain; border-radius: var(--radius-md); box-shadow: 0 16px 64px rgba(0,0,0,0.6); -webkit-user-select: none; user-select: none; -webkit-touch-callout: default; } /* 操作按钮 */ .result-actions { display: flex; flex-direction: column; gap: 12px; margin: 32px 0 20px; } .btn-share { background: linear-gradient(135deg, var(--purple-1) 0%, #9b6dd7 100%); color: var(--white); padding: 16px 32px; font-size: 1rem; border-radius: 60px; box-shadow: 0 8px 24px rgba(124,92,191,0.3); } .btn-share:hover { box-shadow: 0 12px 32px rgba(124,92,191,0.4); transform: translateY(-2px); } .btn-retry { background: transparent; color: var(--white-40); border: 1.5px solid var(--glass-border); padding: 14px 32px; font-size: 0.9rem; border-radius: 60px; } .btn-retry:hover { color: var(--white-60); border-color: var(--white-20); background: var(--glass); } .result-disclaimer { text-align: center; } /* ======================================== 海报 ======================================== */ .poster-container { display: none; position: fixed; inset: 0; z-index: 1000; background: rgba(0,0,0,0.92); overflow: hidden; } .poster-container.active { display: flex; flex-direction: column; align-items: center; justify-content: center; } .poster-content { width: 750px; height: 1334px; background: linear-gradient(160deg, #1a1232 0%, #0f0a1e 40%, #1a1232 100%); position: fixed; left: -9999px; top: 0; overflow: hidden; border-radius: var(--radius-md); } .poster-header { text-align: center; padding: 60px 40px 30px; } .poster-brand { font-family: var(--sans); font-size: 16px; font-weight: 600; letter-spacing: 6px; color: var(--gold); opacity: 0.6; margin-bottom: 30px; text-transform: uppercase; } .poster-icon { width: 180px; height: 180px; margin-bottom: 24px; } .poster-name { font-family: var(--serif); font-size: 52px; font-weight: 900; margin-bottom: 16px; color: var(--white); letter-spacing: 6px; } .poster-desc { font-size: 24px; color: var(--white-60); line-height: 1.6; margin-bottom: 24px; } .poster-quote { font-family: var(--serif); font-size: 22px; color: var(--gold); line-height: 1.6; letter-spacing: 2px; opacity: 0.8; } .poster-radar-wrap { display: flex; justify-content: center; padding: 20px 0; } #poster-radar-canvas { display: block; } .poster-footer { position: absolute; bottom: 0; left: 0; right: 0; text-align: center; padding: 40px 40px 80px; background: linear-gradient(to top, rgba(15,10,30,0.95), transparent); } .poster-slogan { font-family: var(--serif); font-size: 28px; color: var(--white-80); margin-bottom: 8px; font-weight: 600; letter-spacing: 2px; } .poster-cta { font-family: var(--serif); font-size: 32px; color: var(--white); font-weight: 700; letter-spacing: 3px; margin-bottom: 24px; } .poster-qrcode { width: 160px; height: 160px; background: var(--white); border-radius: var(--radius-sm); padding: 10px; margin: 0 auto; } .poster-preview { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 90%; max-width: 400px; } .poster-preview-title { color: var(--white-80); font-size: 1rem; margin-bottom: 16px; font-weight: 500; } .poster-image { max-width: 100%; max-height: 70vh; border-radius: var(--radius-md); box-shadow: 0 12px 40px rgba(0,0,0,0.5); object-fit: contain; } .poster-preview .btn { margin-top: 24px; margin-bottom: max(20px, env(safe-area-inset-bottom)); } /* ======================================== 隐私弹窗 ======================================== */ .modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.7); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); z-index: 2000; display: flex; justify-content: center; align-items: center; padding: 24px; animation: modalIn 0.3s cubic-bezier(0.22, 1, 0.36, 1); } @keyframes modalIn { from { opacity: 0; } to { opacity: 1; } } .modal-card { background: linear-gradient(135deg, #1e1638 0%, #15102a 100%); color: var(--white); border: 1px solid var(--glass-border); border-radius: var(--radius-xl); padding: 36px 28px; max-width: 420px; width: 100%; max-height: 80vh; overflow-y: auto; animation: cardSlideUp 0.4s cubic-bezier(0.22, 1, 0.36, 1); } @keyframes cardSlideUp { from { transform: translateY(30px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } .modal-title { font-family: var(--serif); font-size: 1.3rem; font-weight: 700; color: var(--gold); margin-bottom: 24px; text-align: center; letter-spacing: 2px; } .modal-body p { font-size: 0.88rem; line-height: 1.8; margin-bottom: 14px; color: var(--white-60); } .modal-body strong { color: var(--purple-2); } .btn-modal-confirm { margin-top: 24px; background: linear-gradient(135deg, var(--purple-1), #9b6dd7); color: var(--white); width: 100%; padding: 14px; border-radius: 60px; box-shadow: 0 4px 16px rgba(124,92,191,0.3); } /* ======================================== 响应式 ======================================== */ @media (min-width: 360px) { .home-title { font-size: 2.6rem; } .quiz-question { font-size: 1.3rem; } } @media (min-width: 480px) { .home-title { font-size: 3rem; } .home-subtitle { font-size: 1.1rem; } .quiz-question { font-size: 1.4rem; } .result-name { font-size: 3rem; } .result-icon-ring { width: 160px; height: 160px; } .result-icon { width: 240px; height: 240px; } } @media (min-width: 768px) { .home-title { font-size: 3.6rem; } .scale-buttons { flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 10px; } .btn-scale { width: auto; min-width: 160px; flex-direction: column; align-items: center; gap: 6px; padding: 14px 18px; } .scale-emoji { font-size: 1.5rem; } .result-scroll { padding: 0 40px 80px; } .result-card { padding: 28px 28px; } .result-actions { flex-direction: row; justify-content: center; max-width: 400px; margin: 32px auto 20px; } .result-actions .btn { margin: 0; } } @media (min-width: 1024px) { .home-title { font-size: 4rem; } .quiz-question { font-size: 1.5rem; } .result-name { font-size: 3.4rem; } .result-icon-ring { width: 180px; height: 180px; } .result-icon { width: 270px; height: 270px; } .result-scroll { padding: 0 60px 100px; } }