/* 像素字体(web 端 BubbledotICG-FinePos 同款,CC BY 4.0)——资源内联为 base64 */ @font-face { font-family: 'BubbledotICG'; src: url('./assets/fonts/BubbledotICG-FinePos.ttf') format('truetype'); font-display: swap; } /* page 是最顶层根节点,所有页面共用 —— 未来感背景直接铺这里, 不依赖任何 App 层 DOM(Taro 下 App.render 不会渲染成包裹页面的容器)。 */ /* page = 微信真正的根节点,背景直接铺这里(Taro 下 App.render 不渲染成包裹容器的 DOM)。 星点:平铺小格(各自尺寸 + repeat);光晕与底:满屏(100%);逐层 background-size/repeat 匹配。 */ /* Soft UI 浅色柔彩底色(无动画、无 canvas,真机流畅不遮挡) */ page { background: #f4f6ff; color: #3a4672; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", sans-serif; background-image: radial-gradient(64% 42% at 12% 2%, rgba(229, 167, 224, 0.26), transparent 60%), radial-gradient(56% 40% at 94% 4%, rgba(158, 225, 236, 0.30), transparent 60%), radial-gradient(50% 42% at 84% 100%, rgba(151, 225, 212, 0.22), transparent 60%), linear-gradient(165deg, #edf2ff 0%, #f6eefc 40%, #ecf7f6 72%, #eaf4ff 100%); background-attachment: fixed; } /* 隐藏滚动条:所有页面内容可滚动,但不显示滚动条(含内部横向滚动容器) */ page::-webkit-scrollbar, ::-webkit-scrollbar { display: none; width: 0; height: 0; -webkit-appearance: none; } page { -ms-overflow-style: none; scrollbar-width: none; } .ev-tabs, .phase-filters, .quiz-body, .sv-opts, .ot-opts { scrollbar-width: none; } /* 页面切换淡入:挂到各页面根容器,切换时淡入,缓解硬切/一瞬空白 */ .page-in { animation: pageIn 0.22s ease both; } @keyframes pageIn { from { opacity: 0; } to { opacity: 1; } } /* 内容层:底部留白避开固定 tabBar(含首页上凸按钮)。 用 @supports 把「基础值」与「安全区增强」分成两条独立规则: 压缩器无法合并去重,即使 env() 在个别基础库不可用,180rpx 基础值仍生效,内容绝不被遮蔽 */ .app { position: relative; z-index: 1; min-height: 100vh; padding-bottom: 180rpx; } /* 测评/政策/流程等:标题/进度头部保持在顶部,仅题目/表单卡片垂直居中。整页不滚动 */ .quiz-center { position: relative; z-index: 2; box-sizing: border-box; display: flex; flex-direction: column; height: 100vh; overflow: hidden; /* 内容超出即裁剪,杜绝页面滚动 */ } .quiz-body { flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0; } @supports (padding-bottom: env(safe-area-inset-bottom)) { .app { padding-bottom: calc(180rpx + env(safe-area-inset-bottom)); } } /* 通用卡片(Soft UI:柔白面 + 软阴影 + 大圆角) */ .card { background: rgba(255,255,255,0.55); backdrop-filter: blur(20px) saturate(160%); -webkit-backdrop-filter: blur(20px) saturate(160%); border: 1px solid rgba(99, 132, 255, 0.12); border-radius: 20px; padding: 24px; margin-bottom: 16px; box-shadow: 0 10rpx 28rpx rgba(59, 79, 125, 0.09); backdrop-filter: blur(8px); } .card-title { font-size: 30px; font-weight: 700; color: #23315c; } .card-desc { font-size: 26px; color: #6a76a8; line-height: 1.6; margin-top: 8px; } .btn-main { background: linear-gradient(135deg, #6b8bff, #8f7bff); color: #ffffff; border-radius: 999px; font-weight: 600; font-size: 28px; padding: 0 40px; line-height: 2.6; box-shadow: 0 8rpx 24rpx rgba(98, 132, 255, 0.28); } .btn-main::after { border: none; } .btn-ghost { background: rgba(255, 255, 255, 0.55); backdrop-filter: blur(20px) saturate(160%); -webkit-backdrop-filter: blur(20px) saturate(160%); color: #5a6aa3; border: 1px solid rgba(99, 132, 255, 0.22); border-radius: 999px; font-weight: 600; font-size: 28px; padding: 0 40px; line-height: 2.6; } .btn-ghost::after { border: none; } /* 禁用态:微信原生 button[disabled] 浅底浅字会盖掉单类样式(特异度更高),这里显式压回可读配色 */ .btn-main[disabled], .btn-main.button-disabled, .btn-ghost[disabled], .btn-ghost.button-disabled { background: rgba(120, 140, 220, 0.14); color: #8b97c4; border: 1px solid rgba(99, 132, 255, 0.12); box-shadow: none; } .section-head { font-size: 32px; font-weight: 700; color: #23315c; margin: 32px 0 16px; } .muted { color: #9aa4c6; font-size: 24px; } /* ============================================================ 单题一屏 · 共享答题组件(OPC 测评 / 政策测评共用) ============================================================ */ .ot-quiz-head { padding-top: 8px; } .ot-quiz-top { display: flex; align-items: baseline; justify-content: space-between; } .ot-quiz-left { display: flex; align-items: center; gap: 10px; min-width: 0; } .ot-back { flex-shrink: 0; display: inline-flex; align-items: center; font-size: 22px; color: #6284ff; background: rgba(99, 132, 255, 0.10); border: 1px solid rgba(99, 132, 255, 0.24); border-radius: 999px; padding: 4px 14px; } .ot-quiz-title { font-size: 30px; font-weight: 700; color: #23315c; } .ot-quiz-tag { margin-left: 14px; font-size: 20px; font-weight: 600; color: #fff; background: linear-gradient(135deg, #6b8bff, #8f7bff); border-radius: 999px; padding: 4px 16px; vertical-align: middle; } .ot-progress-text { font-size: 24px; color: #9aa4c6; } .ot-progress { height: 10px; border-radius: 999px; background: rgba(99, 132, 255, 0.14); margin: 20px 0; overflow: hidden; } .ot-progress-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, #6b8bff, #8f7bff); transition: width 0.3s ease; } .ot-part { display: block; font-size: 24px; color: #6284ff; margin-bottom: 8px; } /* 单题卡片下方的操作提示 */ .ot-hint { display: block; margin-top: 16px; font-size: 22px; color: #9aa4c6; text-align: center; } .ot-qcard { background: rgba(255,255,255,0.55); backdrop-filter: blur(20px) saturate(160%); -webkit-backdrop-filter: blur(20px) saturate(160%); border: 1px solid rgba(99, 132, 255, 0.12); border-radius: 16px; padding: 28px 30px; margin-bottom: 20px; box-shadow: 0 8rpx 24rpx rgba(59, 79, 125, 0.08); } .ot-qcard.answered { border-color: rgba(98, 132, 255, 0.5); } /* 一题一屏:不再包大卡片,题目直接融入页面背景(选项保留玻璃药丸),题目/选项更大 */ .ot-qcard.one { background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; border: none; box-shadow: none; border-radius: 0; margin-top: 0; padding: 12px 8px 0; } .ot-qcard.one .ot-qtext { font-size: 36px; line-height: 1.5; margin-bottom: 36px; } .ot-qcard.one .ot-opt { padding: 26px 26px; } .ot-qnum { display: flex; justify-content: space-between; align-items: center; font-size: 22px; color: #a3abc9; margin-bottom: 12px; } .ot-check { color: #6284ff; font-size: 26px; } .ot-qtext { display: block; font-size: 30px; font-weight: 600; color: #23315c; line-height: 1.5; margin-bottom: 20px; } .ot-opts { display: flex; flex-direction: column; gap: 12px; } .ot-opt { display: flex; align-items: flex-start; gap: 12px; background: #f6f8ff; border: 1px solid rgba(99, 132, 255, 0.14); border-radius: 14px; padding: 20px 22px; } /* 选中态全站统一:蓝紫渐变 + 白字 */ .ot-opt.sel { border-color: transparent; background: linear-gradient(135deg, #6b8bff, #8f7bff); box-shadow: 0 8rpx 24rpx rgba(98, 132, 255, 0.28); } .ot-opt.sel .opt-text { color: #ffffff; } .opt-key { font-family: 'BubbledotICG', monospace; color: #8a94c0; font-size: 26px; flex-shrink: 0; } .ot-opt.sel .opt-key { color: #ffffff; } .opt-text { font-size: 27px; color: #4a5580; line-height: 1.55; flex: 1; } /* 底部导航(上一题 / 进度计数) */ .ot-nav-one { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin: 28px 0 8px; } .ot-nav-btn { flex-shrink: 0; line-height: 2.4; padding: 0 28px; } .ot-nav-info { font-family: 'BubbledotICG', monospace; font-size: 26px; color: #8e8e8e; letter-spacing: 2px; } /* 单选无右侧按钮时,占位保持计数居中 */ .ot-nav-empty { width: 110px; flex-shrink: 0; } .ot-loading { display: block; text-align: center; font-size: 26px; color: #ffd28a; margin-top: 24px; } /* 通用线性图标(CSS mask SVG,仿 lucide;禁用 emoji 图标) */ .ic { display: inline-block; width: 36rpx; height: 36rpx; background-color: currentColor; -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; -webkit-mask-size: contain; mask-repeat: no-repeat; mask-position: center; mask-size: contain; } .ic-play { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M5 3l14 9-14 9V3z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M5 3l14 9-14 9V3z'/%3E%3C/svg%3E"); } .ic-heart { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.6l-1-1a5.5 5.5 0 0 0-7.8 7.8l1 1L12 21l7.8-7.6 1-1a5.5 5.5 0 0 0 0-7.8z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.6l-1-1a5.5 5.5 0 0 0-7.8 7.8l1 1L12 21l7.8-7.6 1-1a5.5 5.5 0 0 0 0-7.8z'/%3E%3C/svg%3E"); } .ic-check { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E"); } .ic-lock { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Crect x='4' y='11' width='16' height='9' rx='2'/%3E%3Cpath d='M8 11V8a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Crect x='4' y='11' width='16' height='9' rx='2'/%3E%3Cpath d='M8 11V8a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E"); } .ic-arrow-left { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M15 18l-6-6 6-6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M15 18l-6-6 6-6'/%3E%3C/svg%3E"); } .ic-thumb { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M7 10v12M15 5.9s0-1-.5-2a1.5 1.5 0 0 0-2.8 1C12.4 6.6 11 10 11 10h6a2 2 0 0 1 2 2.5l-1.4 5.6a2 2 0 0 1-2 1.5H7M15 6l2-1.5a1.5 1.5 0 0 1 2.7 1.3L18 13M7 22H4a2 2 0 0 1-2-2V12a2 2 0 0 1 2-2h3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M7 10v12M15 5.9s0-1-.5-2a1.5 1.5 0 0 0-2.8 1C12.4 6.6 11 10 11 10h6a2 2 0 0 1 2 2.5l-1.4 5.6a2 2 0 0 1-2 1.5H7M15 6l2-1.5a1.5 1.5 0 0 1 2.7 1.3L18 13M7 22H4a2 2 0 0 1-2-2V12a2 2 0 0 1 2-2h3'/%3E%3C/svg%3E"); } .ic-share { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7M16 6l-4-4-4 4M12 2v13'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M4 12v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7M16 6l-4-4-4 4M12 2v13'/%3E%3C/svg%3E"); } .ic-cmt { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'/%3E%3C/svg%3E"); } /* ============================================================ Soft UI 全局降级:表单控件/选项统一柔白面 + 深蓝灰文本(覆盖各页暗色控件) ============================================================ */ .input, .picker, .ot-opt, .sv-opt, .sv-textarea, .sv-lk, .ed-form, .ca-textarea, .ca-code .input, .pt-picker, .pt-textarea, .pa-textarea, .pa-picker, .step, .summary, .cell { background: rgba(255, 255, 255, 0.55) !important; backdrop-filter: blur(20px) saturate(160%); -webkit-backdrop-filter: blur(20px) saturate(160%); border-color: rgba(99, 132, 255, 0.16) !important; color: #3a4672 !important; } /* 发布者徽章图标(官方/园区/OPC) */ .ic-shield { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M12 3l8 3v5c0 5-3.5 8-8 10-4.5-2-8-5-8-10V6z'/%3E%3Cpath d='M9 12l2 2 4-4'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M12 3l8 3v5c0 5-3.5 8-8 10-4.5-2-8-5-8-10V6z'/%3E%3Cpath d='M9 12l2 2 4-4'/%3E%3C/svg%3E"); } .ic-landmark { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M3 10l9-6 9 6'/%3E%3Cpath d='M5 10v9M9.5 10v9M14.5 10v9M19 10v9M3 20h18'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Cpath d='M3 10l9-6 9 6'/%3E%3Cpath d='M5 10v9M9.5 10v9M14.5 10v9M19 10v9M3 20h18'/%3E%3C/svg%3E"); } .ic-users { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Ccircle cx='9' cy='8' r='3.5'/%3E%3Cpath d='M2.5 20a6.5 6.5 0 0 1 13 0'/%3E%3Cpath d='M15.5 5a3.5 3.5 0 0 1 0 6.6'/%3E%3Cpath d='M17.5 14.4a6.5 6.5 0 0 1 4 5.6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.5'%3E%3Ccircle cx='9' cy='8' r='3.5'/%3E%3Cpath d='M2.5 20a6.5 6.5 0 0 1 13 0'/%3E%3Cpath d='M15.5 5a3.5 3.5 0 0 1 0 6.6'/%3E%3Cpath d='M17.5 14.4a6.5 6.5 0 0 1 4 5.6'/%3E%3C/svg%3E"); } /* ============ 统一固定标题区(像素字 kicker + 彩虹渐变标题 + 像素字注脚) ============ */ .page-navbar { position: fixed; top: 0; left: 0; right: 0; z-index: 100; padding: 0 28rpx; /* 标题区上下零冗余:高度 = 安全区 + 三行文字,占位实测自然贴合 */ background: rgba(247, 249, 255, 0.88); backdrop-filter: blur(20px) saturate(160%); -webkit-backdrop-filter: blur(20px) saturate(160%); } .page-navbar-col { display: flex; flex-direction: column; } .page-navbar-no { font-family: 'BubbledotICG', monospace; color: #a3abc9; font-size: 26rpx; letter-spacing: 2rpx; line-height: 1.15; } /* 类别标签行:返回按钮在类别标签左侧,与标签文字同大小同颜色(沉浸式导航下唯一返回入口) */ .page-navbar-norow { display: flex; align-items: center; gap: 10rpx; line-height: 1.15; } .page-navbar-back-hit { display: flex; align-items: center; padding: 8rpx; margin: -8rpx 0 -8rpx -8rpx; } /* 扩大点击热区,视觉不变 */ .page-navbar-back-ic { width: 26rpx; height: 26rpx; background: #a3abc9; } .page-navbar-back-hit.pressed { opacity: 0.65; } .page-navbar-titlerow { display: flex; flex-direction: column; align-items: flex-start; gap: 6rpx; line-height: 1.15; margin-top: 4rpx; } .page-navbar-title { font-size: 40rpx; font-weight: 800; letter-spacing: -0.5rpx; line-height: 1.15; background: linear-gradient(120deg, #8fc3ff 0%, #a8a0ff 45%, #e0a0ff 80%, #7fe0ff 100%); -webkit-background-clip: text; background-clip: text; color: transparent; } .page-navbar-sub { font-size: 24rpx; color: #5a6aa3; line-height: 1.3; } .page-navbar-en { font-family: 'BubbledotICG', monospace; color: #5b5b5b; font-size: 24rpx; letter-spacing: 2rpx; line-height: 1.15; padding-bottom: 12rpx; }