/* ============================================================ FateForge v2 — 墨韵主题 (宋·极简 · 调试用白底) ============================================================ */ * { -webkit-tap-highlight-color: transparent; } html, body { margin: 0; padding: 0; } body { font-family: 'Noto Serif SC', serif; /* 调试模式: 宣纸白 */ background: #fafaf5; color: #1a1612; min-height: 100vh; } body.lang-en { font-family: 'Noto Serif', 'Noto Serif SC', serif; } /* ---------- 卷轴/场景容器 ---------- */ .scene { position: relative; z-index: 10; width: 100%; height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 1.5rem; } /* ---------- 烟雾层 (淡墨) ---------- */ .mist-layer { position: fixed; inset: 0; pointer-events: none; overflow: hidden; z-index: 1; } .mist-blob { position: absolute; border-radius: 50%; background: radial-gradient(circle, rgba(60, 50, 40, 0.06) 0%, rgba(60, 50, 40, 0) 70%); filter: blur(20px); animation: drift 28s ease-in-out infinite alternate; will-change: transform, opacity; } .mist-blob:nth-child(1) { width: 380px; height: 380px; top: 5%; left: -10%; animation-duration: 32s; } .mist-blob:nth-child(2) { width: 500px; height: 500px; top: 30%; left: 50%; animation-duration: 38s; } .mist-blob:nth-child(3) { width: 300px; height: 300px; top: 60%; left: 5%; animation-duration: 26s; } .mist-blob:nth-child(4) { width: 420px; height: 420px; top: 70%; left: 60%; animation-duration: 40s; } .mist-blob:nth-child(5) { width: 260px; height: 260px; top: 10%; left: 70%; animation-duration: 30s; } .mist-blob:nth-child(6) { width: 350px; height: 350px; top: 40%; left: 30%; animation-duration: 34s; } .mist-blob:nth-child(7) { width: 240px; height: 240px; top: 80%; left: 80%; animation-duration: 28s; } .mist-blob:nth-child(8) { width: 320px; height: 320px; top: 20%; left: 20%; animation-duration: 36s; } @keyframes drift { 0% { transform: translate(0, 0) scale(1); opacity: 0.55; } 50% { transform: translate(60px, -40px) scale(1.15); opacity: 0.85; } 100% { transform: translate(-50px, 30px) scale(0.95); opacity: 0.6; } } /* ---------- 宣纸 (白底调试版) ---------- */ .ink-paper { background: radial-gradient(ellipse at 30% 20%, rgba(180, 150, 110, 0.05) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(120, 100, 80, 0.06) 0%, transparent 50%), linear-gradient(180deg, rgba(255, 253, 248, 0.96) 0%, rgba(248, 244, 235, 0.96) 100%); border: 1px solid rgba(120, 100, 80, 0.30); box-shadow: inset 0 0 20px rgba(120, 100, 80, 0.06), 0 2px 12px rgba(80, 60, 40, 0.08); position: relative; color: #1a1612; } .ink-paper::before { content: ''; position: absolute; inset: 0; background-image: url("data:image/svg+xml;utf8,"); opacity: 0.5; pointer-events: none; border-radius: inherit; mix-blend-mode: multiply; } /* ---------- 宣纸 · 圆角软化 (文人书信感) ---------- */ .ink-paper-rounded { border-radius: 6px; box-shadow: inset 0 0 20px rgba(120, 100, 80, 0.06), 0 2px 12px rgba(80, 60, 40, 0.08); } /* ---------- 滚动卡片 (卦象详解): 高度固定, 内容超出可滚, 不显示滚动条 ---------- */ .ink-paper-scrollable { max-height: calc(100vh - 4rem); overflow-y: auto; overflow-x: hidden; scrollbar-width: none; /* Firefox */ -ms-overflow-style: none; /* IE/old Edge */ scroll-behavior: smooth; position: relative; } .ink-paper-scrollable::-webkit-scrollbar { display: none; /* Chrome/Safari */ width: 0; height: 0; } /* ---------- 乾坤志条目: hover 时青色边框 + 向外逐层晕染变浅 ---------- */ .book-entry { border: 1px solid rgba(120, 100, 80, 0.30); box-shadow: inset 0 0 20px rgba(120, 100, 80, 0.06), 0 2px 12px rgba(80, 60, 40, 0.08); transition: border-color 0.5s ease, box-shadow 0.6s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); } .book-entry:hover { border-color: rgba(123, 168, 138, 0.85); /* 青 (玉) 色边框 */ /* 由内向外 4 层光晕, 半径逐渐扩大, 强度逐渐变浅 */ box-shadow: inset 0 0 16px rgba(120, 100, 80, 0.05), 0 0 0 1px rgba(123, 168, 138, 0.30), 0 0 14px 0 rgba(123, 168, 138, 0.22), 0 0 36px 6px rgba(123, 168, 138, 0.14), 0 0 72px 18px rgba(123, 168, 138, 0.07); transform: translateY(-1px); } /* ---------- 宣纸 · 浮于纸面 (广域极淡投影, 颜色跟背景走) ---------- */ .ink-paper-floating { box-shadow: 0 0 0 1px rgba(120, 100, 80, 0.18), 0 2px 4px rgba(80, 60, 40, 0.05), /* 广域极淡的扩散阴影 —— 颜色随五行背景 */ 0 8px 24px -8px rgba(80, 60, 40, 0.18), 0 24px 60px -20px rgba(80, 60, 40, 0.16), 0 48px 120px -40px rgba(80, 60, 40, 0.14); } /* 凶页(火): 微微带焦红 */ .scene.bg-element-fire .ink-paper-floating { box-shadow: 0 0 0 1px rgba(120, 100, 80, 0.18), 0 2px 4px rgba(80, 60, 40, 0.05), 0 8px 24px -8px rgba(140, 70, 50, 0.20), 0 24px 60px -20px rgba(140, 70, 50, 0.16), 0 48px 120px -40px rgba(140, 70, 50, 0.14); } /* 金页: 微微带金 */ .scene.bg-element-metal .ink-paper-floating { box-shadow: 0 0 0 1px rgba(120, 100, 80, 0.18), 0 2px 4px rgba(80, 60, 40, 0.05), 0 8px 24px -8px rgba(160, 130, 50, 0.18), 0 24px 60px -20px rgba(160, 130, 50, 0.14), 0 48px 120px -40px rgba(160, 130, 50, 0.12); } /* 木页: 微微带青绿 */ .scene.bg-element-wood .ink-paper-floating { box-shadow: 0 0 0 1px rgba(120, 100, 80, 0.18), 0 2px 4px rgba(80, 60, 40, 0.05), 0 8px 24px -8px rgba(70, 120, 100, 0.20), 0 24px 60px -20px rgba(70, 120, 100, 0.16), 0 48px 120px -40px rgba(70, 120, 100, 0.14); } /* 土页: 微微带焦土黄 */ .scene.bg-element-earth .ink-paper-floating { box-shadow: 0 0 0 1px rgba(120, 100, 80, 0.18), 0 2px 4px rgba(80, 60, 40, 0.05), 0 8px 24px -8px rgba(150, 110, 60, 0.22), 0 24px 60px -20px rgba(150, 110, 60, 0.18), 0 48px 120px -40px rgba(150, 110, 60, 0.14); } /* 水页: 微微带蓝 */ .scene.bg-element-water .ink-paper-floating { box-shadow: 0 0 0 1px rgba(120, 100, 80, 0.18), 0 2px 4px rgba(80, 60, 40, 0.05), 0 8px 24px -8px rgba(60, 110, 130, 0.20), 0 24px 60px -20px rgba(60, 110, 130, 0.16), 0 48px 120px -40px rgba(60, 110, 130, 0.14); } /* ---------- 水墨渗字 ---------- */ .ink-seep { animation: seep 3.5s ease-out both; } .ink-seep-loop { animation: seepLoop 2.5s ease-in-out infinite; } @keyframes seep { 0% { opacity: 0; filter: blur(8px); transform: translateY(8px); } 40% { opacity: 0.4; filter: blur(4px); } 100% { opacity: 0.95; filter: blur(0); transform: translateY(0); } } @keyframes seepLoop { 0%, 100% { opacity: 0.4; filter: blur(2px); } 50% { opacity: 0.95; filter: blur(0); } } .reading-text { font-family: 'KaiTi', 'STKaiti', serif; color: #1a1612; text-shadow: 0 0 1px rgba(0, 0, 0, 0.05); animation: readingFade 0.6s ease-out both; } body.lang-en .reading-text { font-family: 'Noto Serif', serif; } @keyframes readingFade { 0% { opacity: 0; filter: blur(3px); } 100% { opacity: 1; filter: blur(0); } } /* 文字"打字机"式逐字显示 —— CSS 剪裁实现 (无需 JS) */ .typing-text { display: block; white-space: pre-wrap; position: relative; animation: typingReveal 1.6s steps(28, end) 0.1s both; } @keyframes typingReveal { 0% { clip-path: inset(0 100% 0 0); } 100% { clip-path: inset(0 0 0 0); } } /* 模糊的解卦正文 */ .reading-text-blurred { filter: blur(5px); opacity: 0.55; user-select: none; } /* ---------- 龟壳 ---------- */ .turtle-wrap { position: relative; width: 320px; height: 320px; display: flex; align-items: center; justify-content: center; cursor: pointer; user-select: none; transition: transform 0.15s, filter 0.3s ease; /* 光从左上方照下, 阴影投在右下方 —— 用 drop-shadow 偏移到右下, 并略加横向模糊 */ filter: drop-shadow(6px 10px 8px rgba(80, 60, 40, 0.28)) drop-shadow(2px 4px 3px rgba(80, 60, 40, 0.18)); } .turtle-wrap:hover { transform: scale(1.04); } .turtle-wrap:active { transform: scale(0.96); } .turtle-img { width: 100%; height: 100%; pointer-events: none; } .turtle-wrap.shake { animation: shake 0.6s ease-in-out; } @keyframes shake { 0%, 100% { transform: rotate(0); } 20% { transform: rotate(-12deg) translateY(-4px); } 40% { transform: rotate(10deg) translateY(2px); } 60% { transform: rotate(-8deg) translateY(-2px); } 80% { transform: rotate(6deg) translateY(1px); } } .click-hint { position: absolute; bottom: -36px; left: 50%; transform: translateX(-50%); font-family: 'KaiTi', serif; color: rgba(40, 30, 22, 0.5); font-size: 1rem; letter-spacing: 0.3em; animation: hintPulse 2.5s ease-in-out infinite; } @keyframes hintPulse { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.85; } } /* ---------- 铜钱 (白底调试版 · 单面) ---------- */ .coin { width: 130px; height: 130px; position: relative; perspective: 800px; /* 光从左上方照下, 阴影投在右下方 —— 刚落地时短暂, 用 keyframe 配合 .flipped 入场 */ filter: drop-shadow(4px 7px 5px rgba(80, 60, 40, 0.22)) drop-shadow(1px 3px 2px rgba(80, 60, 40, 0.15)); transition: filter 0.4s ease; } .coin-inner { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; /* 关键: 入场即缩放一次, 避免 transform 与 .flipped 的 keyframes 冲突 */ animation: coinEnter 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) both; } .coin.flipped .coin-inner { /* 注意: 不用 transform, 用 animation 的 from→to 自带 scale, 避免叠加抖动 */ animation: coinFlip 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } @keyframes coinEnter { 0% { transform: scale(0.5) rotateY(0deg); opacity: 0; } 100% { transform: scale(1) rotateY(0deg); opacity: 1; } } @keyframes coinFlip { 0% { transform: scale(0.6) rotateY(0deg); } 60% { transform: scale(1.15) rotateY(360deg); } 100% { transform: scale(1) rotateY(720deg); } } .coin-face { position: absolute; inset: 0; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: 'Ma Shan Zheng', serif; font-size: 1.5rem; overflow: hidden; background: transparent; backface-visibility: visible; transform: translateZ(0); will-change: transform; } .coin-face img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; mix-blend-mode: multiply; } /* ---------- 六爻卦画 (阴爻间隙无阴影 · 卦画加宽 · ×○ 改纯黑) ---------- */ .hex-lines { display: flex; flex-direction: column-reverse; gap: 18px; margin: 1.5rem 0; } .hex-line { position: relative; width: 280px; height: 16px; background: linear-gradient(90deg, transparent 0%, #0a0805 12%, #0a0805 88%, transparent 100%); border-radius: 1px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12); animation: lineSeep 1.4s ease-out both; } .hex-line.yin { /* 中间留白: 不带阴影, 跟卡片背景融合 */ background: linear-gradient(90deg, transparent 0%, #0a0805 10%, #0a0805 42%, transparent 42%, transparent 58%, #0a0805 58%, #0a0805 90%, transparent 100%); /* 阴爻中间留白不需要 box-shadow, 用 filter: drop-shadow 替代, 阴影只跟不透明部分走 */ box-shadow: none; filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.10)); } .hex-line.moving { background: linear-gradient(90deg, transparent 0%, #0a0805 10%, #0a0805 42%, transparent 42%, transparent 58%, #0a0805 58%, #0a0805 90%, transparent 100%); box-shadow: none; filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.10)) drop-shadow(0 0 10px rgba(220, 185, 90, 0.45)); animation: lineSeep 1.4s ease-out both, pulseMoving 2.2s ease-in-out infinite; } .hex-line.moving.yang { background: linear-gradient(90deg, transparent 0%, #0a0805 12%, #0a0805 88%, transparent 100%); } .line-mark { position: absolute; left: 100%; margin-left: 16px; top: 50%; transform: translateY(-50%); font-family: 'KaiTi', serif; font-size: 1.6rem; color: #0a0805; font-weight: 600; } @keyframes lineSeep { 0% { opacity: 0; transform: scaleX(0.3); filter: blur(6px); } 60% { opacity: 0.6; transform: scaleX(0.85); filter: blur(2px); } 100% { opacity: 1; transform: scaleX(1); filter: blur(0); } } @keyframes pulseMoving { 0%, 100% { filter: drop-shadow(0 1px 2px rgba(0,0,0,0.10)) drop-shadow(0 0 8px rgba(220, 185, 90, 0.40)); } 50% { filter: drop-shadow(0 1px 2px rgba(0,0,0,0.10)) drop-shadow(0 0 18px rgba(220, 185, 90, 0.75)); } } /* ---------- 画面三 氛围色 (凶时微调) ---------- */ .scene.ominous-bad { background: radial-gradient(ellipse at center, rgba(160, 60, 40, 0.08) 0%, transparent 70%); animation: ominousPulse 6s ease-in-out infinite; } .scene.ominous-ice { background: radial-gradient(ellipse at center, rgba(60, 110, 130, 0.10) 0%, transparent 70%); animation: ominousPulse 6s ease-in-out infinite; } @keyframes ominousPulse { 0%, 100% { background-size: 100% 100%; } 50% { background-size: 110% 110%; } } .scene.ominous-bad .mist-blob, .scene.ominous-ice .mist-blob { animation-duration: 12s !important; } /* ---------- 七档吉凶 → 场景色调 ---------- */ .scene.tone-jade { background: radial-gradient(ellipse at center, rgba(100, 160, 130, 0.10) 0%, transparent 70%); transition: background 1.5s ease; } .scene.tone-jade .mist-blob { background: radial-gradient(circle, rgba(80, 150, 120, 0.08) 0%, rgba(80, 150, 120, 0) 70%); animation-duration: 40s !important; } .scene.tone-blood { background: radial-gradient(ellipse at center, rgba(140, 50, 30, 0.10) 0%, transparent 70%); transition: background 1.5s ease; } .scene.tone-blood .mist-blob { background: radial-gradient(circle, rgba(120, 40, 20, 0.08) 0%, rgba(120, 40, 20, 0) 70%); animation-duration: 14s !important; } .scene.tone-paper { /* 保持宣纸默认背景 */ } /* ---------- 五行水墨晕染背景 (从中心向外渐变淡) ---------- 放在 .scene.tone-* 之后, 用 .scene.bg-element-* 提高优先级 */ .scene.bg-element-wood { background: radial-gradient(ellipse at center, rgba(180, 210, 200, 0.55) 0%, rgba(180, 210, 200, 0.30) 18%, rgba(180, 210, 200, 0.12) 40%, rgba(180, 210, 200, 0) 70%), linear-gradient(180deg, rgba(255, 253, 248, 0.96) 0%, rgba(248, 244, 235, 0.96) 100%); transition: background 1.8s ease; } .scene.bg-element-earth { background: radial-gradient(ellipse at center, rgba(225, 200, 140, 0.50) 0%, rgba(225, 200, 140, 0.28) 18%, rgba(225, 200, 140, 0.10) 40%, rgba(225, 200, 140, 0) 70%), linear-gradient(180deg, rgba(255, 253, 248, 0.96) 0%, rgba(248, 244, 235, 0.96) 100%); transition: background 1.8s ease; } .scene.bg-element-fire { background: radial-gradient(ellipse at center, rgba(220, 150, 130, 0.45) 0%, rgba(220, 150, 130, 0.25) 18%, rgba(220, 150, 130, 0.10) 40%, rgba(220, 150, 150, 0) 70%), linear-gradient(180deg, rgba(255, 253, 248, 0.96) 0%, rgba(248, 244, 235, 0.96) 100%); transition: background 1.8s ease; } .scene.bg-element-metal { background: radial-gradient(ellipse at center, rgba(230, 205, 130, 0.45) 0%, rgba(230, 205, 130, 0.25) 18%, rgba(230, 205, 130, 0.10) 40%, rgba(230, 205, 130, 0) 70%), linear-gradient(180deg, rgba(255, 253, 248, 0.96) 0%, rgba(248, 244, 235, 0.96) 100%); transition: background 1.8s ease; } .scene.bg-element-water { background: radial-gradient(ellipse at center, rgba(160, 200, 215, 0.50) 0%, rgba(160, 200, 215, 0.28) 18%, rgba(160, 200, 215, 0.10) 40%, rgba(160, 200, 215, 0) 70%), linear-gradient(180deg, rgba(255, 253, 248, 0.96) 0%, rgba(248, 244, 235, 0.96) 100%); transition: background 1.8s ease; } /* ---------- 画面四 玉石光 (白底: 深绿色文字) ---------- */ .jade-glow { text-shadow: 0 0 8px rgba(120, 170, 130, 0.5), 0 0 24px rgba(80, 130, 100, 0.35); color: #3a6850; } /* ---------- 拂袖交互 (长滑轨 · 水墨晕染) ---------- */ .swipe-zone { position: relative; width: 100%; height: 48px; overflow: visible; background: transparent; cursor: ew-resize; user-select: none; touch-action: none; } .swipe-track { position: absolute; top: 50%; left: 0; right: 0; height: 6px; transform: translateY(-50%); pointer-events: none; background: linear-gradient(180deg, rgba(140, 180, 200, 0) 0%, rgba(140, 180, 200, 0.55) 35%, rgba(140, 180, 200, 0.85) 50%, rgba(140, 180, 200, 0.30) 70%, rgba(140, 180, 200, 0) 100%); -webkit-mask-image: linear-gradient(90deg, transparent 0%, transparent var(--swipe-pct, 0%), rgba(0,0,0,0.5) calc(var(--swipe-pct, 0%) + 1%), black calc(var(--swipe-pct, 0%) + 2%), black 100%); mask-image: linear-gradient(90deg, transparent 0%, transparent var(--swipe-pct, 0%), rgba(0,0,0,0.5) calc(var(--swipe-pct, 0%) + 1%), black calc(var(--swipe-pct, 0%) + 2%), black 100%); transition: -webkit-mask-image 0.08s linear; transition: mask-image 0.08s linear; } .swipe-handle { position: absolute; top: 50%; left: 0; width: 48px; height: 48px; border-radius: 50%; transform: translate(-50%, -50%); display: flex; align-items: center; justify-content: center; background: radial-gradient(circle at 50% 50%, rgba(170, 210, 170, 0.65) 0%, rgba(170, 210, 170, 0.45) 35%, rgba(170, 210, 170, 0.15) 65%, rgba(170, 210, 170, 0) 100%); box-shadow: inset 0 0 12px rgba(140, 200, 150, 0.25), 0 0 18px rgba(140, 200, 150, 0.18); transition: background 0.5s ease, box-shadow 0.5s ease, left 0s; will-change: left; --handle-hue: 0; } .swipe-handle-glyph { font-family: 'Ma Shan Zheng', serif; font-size: 0.85rem; color: rgba(60, 100, 70, 0.78); letter-spacing: 0.1em; text-shadow: 0 0 4px rgba(255, 255, 255, 0.6); pointer-events: none; } /* ---------- 自定义水墨确认弹窗 ---------- */ .ink-modal-mask { background: rgba(40, 30, 22, 0.32); backdrop-filter: blur(3px); } .ink-modal { width: 100%; max-width: 420px; padding: 2rem 2.2rem 1.6rem; background: radial-gradient(ellipse at 30% 20%, rgba(180, 150, 110, 0.05) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(120, 100, 80, 0.06) 0%, transparent 50%), linear-gradient(180deg, rgba(255, 253, 248, 0.98) 0%, rgba(248, 244, 235, 0.98) 100%); border: 1px solid rgba(120, 100, 80, 0.30); border-radius: 6px; box-shadow: 0 0 0 1px rgba(120, 100, 80, 0.10), 0 8px 24px -8px rgba(80, 60, 40, 0.18), 0 24px 60px -20px rgba(80, 60, 40, 0.16); font-family: 'KaiTi', 'STKaiti', serif; color: #2a241c; position: relative; animation: inkModalIn 0.35s cubic-bezier(0.4, 0, 0.2, 1) both; } .ink-modal::before { content: ''; position: absolute; inset: 0; background-image: url("data:image/svg+xml;utf8,"); opacity: 0.4; pointer-events: none; border-radius: inherit; mix-blend-mode: multiply; } .ink-modal-text { position: relative; font-size: 1.05rem; line-height: 1.7; text-align: center; color: #3a2e22; letter-spacing: 0.05em; margin-bottom: 1.6rem; } .ink-modal-actions { position: relative; display: flex; justify-content: center; gap: 1.2rem; } .ink-modal-btn { font-family: 'Ma Shan Zheng', 'STKaiti', serif; font-size: 1.05rem; letter-spacing: 0.25em; padding: 0.55rem 1.6rem; background: transparent; border-radius: 4px; cursor: pointer; transition: all 0.3s ease; } .ink-modal-btn-cancel { border: 1px solid rgba(120, 100, 80, 0.35); color: #5a4a36; } .ink-modal-btn-cancel:hover { border-color: rgba(80, 60, 40, 0.55); color: #1a1612; background: rgba(120, 90, 60, 0.04); } .ink-modal-btn-confirm { border: 1px solid rgba(122, 42, 26, 0.55); color: #7a2a1a; } .ink-modal-btn-confirm:hover { border-color: rgba(122, 42, 26, 0.85); color: #5a1810; background: rgba(122, 42, 26, 0.06); } @keyframes inkModalIn { 0% { opacity: 0; transform: scale(0.94) translateY(8px); filter: blur(4px); } 100% { opacity: 1; transform: scale(1) translateY(0); filter: blur(0); } } /* ---------- 启程回归遮罩 (吉局 → 模糊覆盖 → 返回首页) ---------- */ .depart-overlay { position: fixed; inset: 0; z-index: 90; pointer-events: none; /* 从左下角向外扩张: 用 clip-path polygon 实现 */ background: rgba(250, 250, 245, 0.92); backdrop-filter: blur(8px); animation: departSweep 1.6s cubic-bezier(0.4, 0, 0.6, 1) forwards; } @keyframes departSweep { 0% { clip-path: polygon(0 100%, 0 100%, 0 100%); opacity: 0.85; } 60% { clip-path: polygon(0 100%, 100% 100%, 0 100%); opacity: 1; } 100% { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); opacity: 1; } } /* ---------- 终场雾散 (白底调试: 淡米色 + 墨字) ---------- */ .finale-overlay { position: fixed; inset: 0; z-index: 60; background: radial-gradient(ellipse at center, rgba(250, 250, 245, 0.97) 0%, rgba(245, 240, 230, 0.97) 100%); backdrop-filter: blur(2px); display: flex; align-items: center; justify-content: center; pointer-events: auto; animation: fadeIn 2.5s ease-out; } .finale-quote { text-align: center; max-width: 600px; padding: 0 2rem; } .finale-line { font-family: 'Ma Shan Zheng', serif; color: #1a1612; font-size: 1.8rem; line-height: 2.4; letter-spacing: 0.3em; text-shadow: 0 0 8px rgba(60, 130, 90, 0.25); opacity: 0; animation: finaleLine 2s ease-out forwards; margin: 0.5rem 0; } .finale-line:nth-child(1) { animation-delay: 0.5s; } .finale-line:nth-child(2) { animation-delay: 1.5s; } .finale-line:nth-child(3) { animation-delay: 2.5s; } .finale-line:nth-child(4) { animation-delay: 3.5s; } .finale-line:nth-child(5) { animation-delay: 4.5s; } @keyframes finaleLine { 0% { opacity: 0; filter: blur(8px); transform: translateY(20px); } 100% { opacity: 1; filter: blur(0); transform: translateY(0); } } /* ---------- 转场 ---------- */ .fade-slow-enter-active, .fade-slow-leave-active { transition: opacity 1.4s ease, transform 1.4s ease; } .fade-slow-enter-from, .fade-slow-leave-to { opacity: 0; transform: translateY(8px); } .fade-enter-active, .fade-leave-active { transition: opacity 0.5s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } .fadeIn { animation: fadeIn 1s ease-out both; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /* ---------- 滚动条隐藏 ---------- */ .scene.overflow-y-auto::-webkit-scrollbar { width: 0; } /* ---------- Hex Seal (画面三的卦名) ---------- */ .hex-seal { text-align: center; padding: 1.5rem 2rem; border-top: 1px solid rgba(80, 60, 40, 0.35); border-bottom: 1px solid rgba(80, 60, 40, 0.35); } /* ---------- 输入框 placeholder 颜色 (焦茶) ---------- */ textarea::placeholder { color: rgba(90, 74, 54, 0.55) !important; /* 焦茶色, 微微带点墨 */ font-style: normal; font-weight: 400; } /* ---------- 首页 · textarea 样式 (去掉 Tailwind 的硬 utility) ---------- */ .yuanqi-textarea { width: 100%; max-width: 36rem; /* 跟 max-w-2xl 对齐, 但更宽一些 */ background: transparent; border: none; border-bottom: 1px solid rgba(120, 100, 80, 0.40); color: #1a1612; text-align: center; font-family: 'KaiTi', 'STKaiti', serif; font-size: 1.25rem; /* 20px, 跟 placeholder 同步 */ line-height: 1.6; outline: none; resize: none; padding: 0.75rem 0; transition: border-color 0.4s ease; } .yuanqi-textarea:focus { border-bottom-color: rgba(160, 200, 175, 0.85); /* 浅绿下划线, 柔和不刺眼 */ box-shadow: 0 1px 0 0 rgba(160, 200, 175, 0.35); /* 微微外晕染, 让下划线有"光"感 */ } body.lang-en .yuanqi-textarea { font-family: 'Noto Serif', serif; } /* ---------- 窥机页文字统一放大 ---------- */ .kuiji-text { font-size: 1.25rem; /* 20px (相比旧 text-base 16px) */ line-height: 1.6; } .kuiji-subtext { font-size: 1.0625rem; /* 17px (相比旧 text-sm 14px) */ line-height: 1.5; } .kuiji-number { font-size: 1.6rem; /* 数字 0~6 醒目 */ font-weight: 500; } .kuiji-section-title { font-size: 1.4rem; /* "六爻已定 卦象初成" 等 */ line-height: 1.6; } .hex-judgment-text { font-size: 1.2rem; /* 卦辞稍大, 配行书 */ line-height: 1.8; color: #3a2e22; /* 焦茶色, 略浅于纯黑 */ } .hex-card-text { font-size: 1.125rem; /* 18px, 比旧 text-base 16px 略大 */ line-height: 1.8; /* 1.8 文人书信感 */ color: #2a241c; /* 焦墨色, 比纯黑淡一点 */ overflow-wrap: break-word; /* 英文长单词也能换行, 防止溢出 */ word-break: normal; } body.lang-en .hex-card-text, body.lang-en .hex-judgment-text { font-family: 'Noto Serif', serif; } body.lang-en .hex-card-text { font-size: 1.0625rem; line-height: 1.7; } /* ---------- 首页 · 推演按钮 (边框与背景同色, 字色同 placeholder) ---------- */ .cast-btn { position: relative; display: inline-block; background: transparent; border: 1px solid rgba(180, 210, 200, 0.70); /* 边框: 跟 bg-element-wood 接近的淡青/淡绿 */ border-radius: 4px; color: rgba(90, 74, 54, 0.85); /* 默认: 跟 placeholder 同样深的焦茶色字 */ cursor: pointer; overflow: visible; transition: color 0.5s ease, border-color 0.5s ease, box-shadow 0.6s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s ease; /* 与背景同色的浅晕染, 由内向外逐层变浅 */ box-shadow: 0 0 12px 0 rgba(180, 210, 200, 0.28), 0 0 32px 6px rgba(180, 210, 200, 0.18), 0 0 64px 18px rgba(180, 210, 200, 0.08); } .cast-btn.is-active { color: #3a2e22; /* 有输入时: 焦茶深色 */ border-color: rgba(170, 215, 175, 0.95); box-shadow: 0 0 14px 0 rgba(180, 210, 200, 0.42), 0 0 36px 8px rgba(180, 210, 200, 0.24), 0 0 72px 22px rgba(180, 210, 200, 0.12); } .cast-btn.is-disabled { color: rgba(90, 74, 54, 0.40); border-color: rgba(180, 210, 200, 0.45); cursor: not-allowed; box-shadow: none; } /* 悬浮/点击 (仅在 is-active 时): 晕染变明显, 颜色柔和, 不刺眼 */ .cast-btn.is-active:hover, .cast-btn.is-active:active { color: #1a1612; border-color: rgba(170, 210, 180, 1); box-shadow: 0 0 0 1px rgba(170, 210, 180, 0.45), 0 0 20px 3px rgba(170, 210, 180, 0.38), 0 0 52px 14px rgba(170, 210, 180, 0.20), 0 0 104px 36px rgba(170, 210, 180, 0.08); transform: translateY(-1px); } .cast-btn.is-active:active { transform: translateY(0) scale(0.98); } .cast-btn-text { position: relative; z-index: 1; } /* ---------- "窥天机" 按钮 (浅黄边框 + 外晕染) ---------- */ .reveal-btn { position: relative; display: inline-block; background: transparent; border: 1px solid rgb(239, 230, 208); /* 浅黄边框 */ border-radius: 4px; color: #3a2e22; cursor: pointer; overflow: visible; transition: color 0.5s ease, border-color 0.5s ease, box-shadow 0.6s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s ease; box-shadow: 0 0 12px 0 rgba(230, 210, 150, 0.16), 0 0 32px 6px rgba(230, 210, 150, 0.08), 0 0 64px 18px rgba(230, 210, 150, 0.04); } .reveal-btn:hover, .reveal-btn:active { color: #1a1612; border-color: rgba(200, 175, 90, 1); box-shadow: 0 0 0 1px rgba(200, 175, 90, 0.45), 0 0 18px 2px rgba(220, 190, 110, 0.42), 0 0 48px 12px rgba(220, 190, 110, 0.22), 0 0 96px 32px rgba(220, 190, 110, 0.08); transform: translateY(-1px); } .reveal-btn:active { transform: translateY(0) scale(0.98); } /* ---------- "乾坤已定且乘势启程" 按钮 (浅金色边框 + 浅金外晕染, 跟 bg-element-metal 协调) ---------- */ .depart-btn { position: relative; display: inline-block; background: transparent; border: 1px solid rgba(220, 190, 130, 0.85); /* 浅金边框 */ border-radius: 4px; color: #3a2e22; cursor: pointer; overflow: visible; transition: color 0.5s ease, border-color 0.5s ease, box-shadow 0.6s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s ease; /* 浅金色外晕染 */ box-shadow: 0 0 12px 0 rgba(220, 190, 130, 0.22), 0 0 32px 6px rgba(220, 190, 130, 0.12), 0 0 64px 18px rgba(220, 190, 130, 0.06); } .depart-btn:hover, .depart-btn:active { color: #1a1612; border-color: rgba(180, 140, 60, 1); box-shadow: 0 0 0 1px rgba(180, 140, 60, 0.50), 0 0 18px 2px rgba(200, 160, 80, 0.48), 0 0 48px 12px rgba(200, 160, 80, 0.28), 0 0 96px 32px rgba(200, 160, 80, 0.10); transform: translateY(-1px); } .depart-btn:active { transform: translateY(0) scale(0.98); } /* ---------- 水墨晕染按钮 (ink-wash-btn) ---------- 按钮本身无边框, 下方垫一层焦茶/金 圆形/椭圆 水墨晕染. 按下/悬停时, 晕染瞬间向外扩散、文字淡隐. */ .ink-wash-btn { position: relative; background: transparent; border: none; color: #1a1612; cursor: pointer; overflow: visible; transition: color 0.5s ease; } .ink-wash-btn.is-disabled { color: rgba(40, 30, 22, 0.30); cursor: not-allowed; } .ink-wash-btn .ink-wash-blot { position: absolute; top: 50%; left: 50%; width: 60%; height: 180%; transform: translate(-50%, -50%) scale(0.6); border-radius: 50%; background: radial-gradient(ellipse at center, rgba(120, 90, 60, 0.40) 0%, rgba(120, 90, 60, 0.22) 30%, rgba(120, 90, 60, 0.08) 60%, rgba(120, 90, 60, 0) 100%); pointer-events: none; transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.6s ease, background 0.6s ease; opacity: 0.6; z-index: 0; } .ink-wash-btn:not(.is-disabled):hover .ink-wash-blot, .ink-wash-btn:not(.is-disabled):active .ink-wash-blot { transform: translate(-50%, -50%) scale(1.6); opacity: 1; background: radial-gradient(ellipse at center, rgba(120, 90, 60, 0.65) 0%, rgba(120, 90, 60, 0.35) 25%, rgba(120, 90, 60, 0.12) 55%, rgba(120, 90, 60, 0) 100%); } .ink-wash-btn:not(.is-disabled):active .ink-wash-blot { transform: translate(-50%, -50%) scale(2.4); opacity: 0.95; } .ink-wash-btn:not(.is-disabled):active .ink-wash-text { opacity: 0.15; filter: blur(2px); } .ink-wash-btn .ink-wash-text { position: relative; z-index: 1; transition: opacity 0.5s ease, filter 0.5s ease; } /* "乾坤已定 且拂袖登程" 按钮: 用金色晕染 */ .ink-wash-btn-gold .ink-wash-blot { background: radial-gradient(ellipse at center, rgba(184, 146, 60, 0.35) 0%, rgba(184, 146, 60, 0.20) 30%, rgba(184, 146, 60, 0.08) 60%, rgba(184, 146, 60, 0) 100%); opacity: 0.55; } .ink-wash-btn-gold:not(.is-disabled):hover .ink-wash-blot, .ink-wash-btn-gold:not(.is-disabled):active .ink-wash-blot { background: radial-gradient(ellipse at center, rgba(184, 146, 60, 0.65) 0%, rgba(184, 146, 60, 0.35) 25%, rgba(184, 146, 60, 0.12) 55%, rgba(184, 146, 60, 0) 100%); } /* ---------- "遁其一" 按钮 (浅黄底 + 浅黄边 + 浅金呼吸灯, 像迷雾中的明灯) ---------- */ .reveal-one-wrap { position: relative; display: inline-block; padding: 0; } /* 按钮居中容器: 占满父容器, 居中显示按钮 */ .reveal-one-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 5; pointer-events: none; /* 让 pointer 事件传到内部按钮 */ } .reveal-one-center > * { pointer-events: auto; } /* 蒙版: 盖住整个父容器(卡片), 默认重模糊+红晕, 让下方的心法只能"隐约看到字形" */ .reveal-veil { position: absolute; inset: 0; z-index: 4; pointer-events: none; background: rgba(80, 30, 25, 0.10); backdrop-filter: blur(22px) saturate(120%); -webkit-backdrop-filter: blur(22px) saturate(120%); /* 红色晕染: 中心深, 边缘淡 */ box-shadow: inset 0 0 120px rgba(120, 30, 25, 0.15); opacity: 1; transition: opacity 1.0s ease, backdrop-filter 1.0s ease, -webkit-backdrop-filter 1.0s ease, background 1.0s ease; } .reveal-veil.is-lifted { opacity: 0; backdrop-filter: blur(0) saturate(100%); -webkit-backdrop-filter: blur(0) saturate(100%); background: rgba(80, 30, 25, 0); box-shadow: inset 0 0 0 rgba(120, 30, 25, 0); } .reveal-one-btn { position: relative; display: inline-block; padding: 14px 40px; font-family: 'KaiTi', 'STKaiti', serif; font-size: 1.3rem; letter-spacing: 0.4em; color: #3a2e22; /* 焦茶墨色 */ background: rgba(248, 235, 195, 0.60); /* 浅黄半透明底 */ border: 1px solid rgba(225, 200, 130, 0.85); /* 浅黄边框 */ border-radius: 4px; cursor: pointer; overflow: visible; transition: opacity 1.2s ease, filter 1.2s ease, transform 1.2s ease, box-shadow 0.5s ease, color 0.3s ease, background 0.3s ease, border-color 0.3s ease; text-shadow: 0 0 4px rgba(255, 255, 255, 0.6); /* 外圈浅金光晕 + 呼吸灯 (浅黄, 跟"循其一"按钮同步) */ box-shadow: 0 0 0 1px rgba(212, 175, 80, 0.28), 0 0 16px 0 rgba(220, 185, 90, 0.38), 0 0 36px 6px rgba(220, 185, 90, 0.24), 0 0 72px 18px rgba(220, 185, 90, 0.12); animation: revealBreath 3.2s ease-in-out infinite; } .reveal-one-btn:hover, .reveal-one-btn:focus { outline: none; color: #1a1612; background: rgba(248, 235, 195, 0.78); border-color: rgba(212, 175, 80, 1); animation: revealBreathFast 1.8s ease-in-out infinite; } .reveal-one-btn:active { transform: translateY(0px) scale(0.98); } .reveal-one-btn.is-fading-out { opacity: 0; filter: blur(8px); transform: scale(1.15); pointer-events: none; animation: none; } @keyframes revealBreath { 0%, 100% { box-shadow: 0 0 0 1px rgba(212, 175, 80, 0.22), 0 0 14px 0 rgba(220, 185, 90, 0.30), 0 0 32px 4px rgba(220, 185, 90, 0.18), 0 0 64px 14px rgba(220, 185, 90, 0.10); } 50% { box-shadow: 0 0 0 1px rgba(212, 175, 80, 0.34), 0 0 18px 1px rgba(220, 185, 90, 0.45), 0 0 42px 8px rgba(220, 185, 90, 0.28), 0 0 84px 22px rgba(220, 185, 90, 0.14); } } @keyframes revealBreathFast { 0%, 100% { box-shadow: 0 0 0 1px rgba(212, 175, 80, 0.45), 0 0 20px 2px rgba(220, 185, 90, 0.58), 0 0 48px 10px rgba(220, 185, 90, 0.35), 0 0 96px 24px rgba(220, 185, 90, 0.18); } 50% { box-shadow: 0 0 0 1px rgba(212, 175, 80, 0.60), 0 0 24px 4px rgba(220, 185, 90, 0.75), 0 0 60px 14px rgba(220, 185, 90, 0.45), 0 0 120px 32px rgba(220, 185, 90, 0.22); } } body.lang-en .reveal-one-btn { font-family: 'Noto Serif', serif; letter-spacing: 0.2em; font-size: 1.1rem; } /* ---------- "遁其一" 按钮下方的朦胧心法 (位置与按钮消失后的心法位置一致) ---------- */ .reveal-stage-wrap { position: relative; max-width: 32rem; padding: 1.5rem 0.5rem; background: radial-gradient(ellipse at center, rgba(180, 60, 50, 0.18) 0%, rgba(180, 60, 50, 0.10) 50%, rgba(180, 60, 50, 0) 100%); border-radius: 4px; } .reveal-stage-text { font-family: 'KaiTi', 'STKaiti', serif; white-space: pre-wrap; line-height: 1.8; font-size: 1.125rem; transition: filter 1.0s ease, opacity 1.0s ease, color 1.0s ease, font-style 1.0s ease; } /* 默认: 朦胧 — 模糊 + 焦红色 + 斜体 (看不清字) */ .reveal-stage-text.is-blurred { filter: blur(14px); opacity: 0.40; color: #4a2010; font-style: italic; user-select: none; pointer-events: none; } /* 按钮消失后: 清晰 — 模糊消失 + 深墨色 + 正体 */ .reveal-stage-text.is-cleared { filter: blur(0); opacity: 1; color: #2a241c; font-style: normal; } body.lang-en .reveal-stage-text { font-family: 'Noto Serif', serif; } /* 旧版保留兼容 (防御性) */ .reveal-preview { max-width: 30rem; position: relative; padding: 1rem 0.5rem; background: radial-gradient(ellipse at center, rgba(180, 60, 50, 0.18) 0%, rgba(180, 60, 50, 0.10) 50%, rgba(180, 60, 50, 0) 100%); } .reveal-preview-text { filter: blur(14px); opacity: 0.40; user-select: none; pointer-events: none; color: #4a2010 !important; /* 焦红色字, 透过 blur 看起来像一团红晕 */ font-style: italic; line-height: 1.8 !important; font-size: 1.125rem !important; } /* ---------- "乾坤未定,且循其一" 退出按钮 (浅黄底 + 浅黄边 + 呼吸灯) ---------- */ .breakfree-btn { position: relative; display: inline-block; padding: 12px 32px; font-family: 'KaiTi', 'STKaiti', serif; font-size: 1.15rem; letter-spacing: 0.35em; color: #3a2e22; background: rgba(248, 235, 195, 0.60); /* 浅黄底 (跟遁其一一致) */ border: 1px solid rgba(225, 200, 130, 0.85); /* 浅黄边 */ border-radius: 4px; cursor: pointer; overflow: visible; transition: all 0.5s ease; text-shadow: 0 0 4px rgba(255, 255, 255, 0.55); box-shadow: 0 0 0 1px rgba(212, 175, 80, 0.22), 0 0 12px 0 rgba(220, 185, 90, 0.30); animation: revealBreath 3.6s ease-in-out infinite; } .breakfree-btn:hover, .breakfree-btn:focus { outline: none; color: #1a1612; background: rgba(248, 235, 195, 0.78); border-color: rgba(212, 175, 80, 1); box-shadow: 0 0 0 1px rgba(212, 175, 80, 0.40), 0 0 16px 1px rgba(220, 185, 90, 0.50), 0 0 36px 6px rgba(220, 185, 90, 0.28), 0 0 72px 18px rgba(220, 185, 90, 0.14); animation: revealBreathFast 1.8s ease-in-out infinite; } .breakfree-btn:active { transform: scale(0.98); } body.lang-en .breakfree-btn { font-family: 'Noto Serif', serif; letter-spacing: 0.18em; font-size: 1rem; } /* ---------- 锦囊阶段卡片被风吹散 (filter: blur + opacity 0) ---------- */ .is-dispersing { animation: disperseAway 1.6s cubic-bezier(0.4, 0, 0.6, 1) forwards; } @keyframes disperseAway { 0% { filter: blur(0); opacity: 1; transform: translateY(0) scale(1); } 40% { filter: blur(4px); opacity: 0.85; transform: translateY(-6px) scale(0.98); } 100% { filter: blur(20px); opacity: 0; transform: translateY(-30px) scale(1.05); } } /* ---------- 燃烧 + 雾散 (凶局破局) ---------- */ .burn-flash { position: fixed; inset: 0; pointer-events: none; z-index: 80; background: radial-gradient(circle at center, rgba(255, 220, 150, 0.0) 0%, rgba(255, 200, 120, 0.0) 50%, rgba(255, 180, 100, 0.0) 100%); transition: background 0.4s ease; } .burn-flash.is-burning { animation: burnFlash 2.4s ease-out forwards; } @keyframes burnFlash { 0% { background: radial-gradient(circle at center, rgba(255, 220, 150, 0.0) 0%, rgba(255, 200, 120, 0.0) 50%, rgba(255, 180, 100, 0.0) 100%); } 30% { background: radial-gradient(circle at center, rgba(255, 240, 200, 0.95) 0%, rgba(255, 220, 150, 0.65) 40%, rgba(255, 200, 120, 0.30) 80%, rgba(255, 180, 100, 0.0) 100%); } 100% { background: radial-gradient(circle at center, rgba(255, 250, 240, 0.0) 0%, rgba(255, 230, 200, 0.0) 50%, rgba(255, 200, 150, 0.0) 100%); } } .burn-mist { position: fixed; inset: 0; pointer-events: none; z-index: 70; background: radial-gradient(circle at center, rgba(255, 255, 255, 0.0) 0%, rgba(255, 250, 240, 0.0) 60%, rgba(255, 245, 230, 0.0) 100%); transition: background 1.5s ease; mix-blend-mode: screen; } .burn-mist.is-burning { animation: burnMist 2.4s ease-out forwards; } @keyframes burnMist { 0% { background: radial-gradient(circle at center, rgba(120, 30, 20, 0.85) 0%, rgba(80, 25, 20, 0.6) 50%, rgba(50, 18, 15, 0.0) 100%); } 100% { background: radial-gradient(circle at center, rgba(255, 255, 255, 0.0) 0%, rgba(255, 250, 240, 0.0) 60%, rgba(255, 245, 230, 0.0) 100%); } } /* ---------- 右上角 · 极简竹节式菜单 (宋代云纹括号 · 行书) ---------- */ .top-menu { position: fixed; top: 14px; right: 16px; z-index: 40; display: inline-flex; align-items: center; gap: 10px; padding: 4px 14px; background: transparent; border: none; font-family: 'Ma Shan Zheng', 'STKaiti', serif; /* 行书 */ color: #5a4a36; letter-spacing: 0.18em; /* 让整组菜单作为一个"段落"出现, 不抢首页焦点的戏 */ opacity: 0.92; transition: opacity 0.4s ease; } .top-menu:hover { opacity: 1; } /* 〔 〕 云纹括号 —— 极细笔画, 微微比正文小一号 */ .top-menu-bracket { font-family: 'Ma Shan Zheng', 'STKaiti', serif; font-size: 22px; line-height: 1; color: rgba(120, 100, 80, 0.55); letter-spacing: 0; user-select: none; } .top-menu-btn { display: inline-flex; align-items: center; gap: 4px; background: transparent; border: none; font-family: inherit; font-size: 16px; color: #5a4a36; /* 焦茶墨色 */ letter-spacing: 0.18em; padding: 2px 4px; cursor: pointer; transition: color 0.4s ease, text-shadow 0.4s ease; text-shadow: 0 0 0 transparent; } .top-menu-btn:hover { color: #1a1612; text-shadow: 0 0 8px rgba(120, 90, 60, 0.25); } .top-menu-glyph { font-size: 16px; opacity: 0.85; } .top-menu-lang { font-size: 15px; letter-spacing: 0.12em; } /* 竹节分割线 (细线 + 上下淡出, 模拟竹节的细长阴影) */ .top-menu-divider { display: inline-block; width: 1px; height: 16px; background: linear-gradient(180deg, rgba(120, 100, 80, 0) 0%, rgba(120, 100, 80, 0.40) 25%, rgba(120, 100, 80, 0.55) 50%, rgba(120, 100, 80, 0.40) 75%, rgba(120, 100, 80, 0) 100%); } body.lang-en .top-menu-btn { font-size: 14px; letter-spacing: 0.10em; } /* ---------- 关于卡片 ---------- */ .about-card { max-height: 80vh; overflow-y: auto; background: radial-gradient(ellipse at 30% 20%, rgba(180, 150, 110, 0.05) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(120, 100, 80, 0.06) 0%, transparent 50%), linear-gradient(180deg, rgba(255, 253, 248, 0.98) 0%, rgba(248, 244, 235, 0.98) 100%); } .about-card::before { content: ''; position: absolute; inset: 0; background-image: url("data:image/svg+xml;utf8,"); opacity: 0.5; pointer-events: none; border-radius: inherit; mix-blend-mode: multiply; } .about-card::-webkit-scrollbar { width: 0; } .about-card h3 { position: relative; } /* ============================================================ 白底调试模式: 用 !important 覆盖 Tailwind 的深色 utility 类 ============================================================ */ /* 文字色 (深底 → 浅底) */ .text-ink-100, .text-ink-50 { color: #1a1612 !important; } .text-ink-200 { color: #2a241c !important; } .text-ink-300 { color: #4a4032 !important; } .text-ink-400 { color: #5a4f3d !important; } .text-ink-50\/60, .text-ink-100\/60, .text-ink-100\/80, .text-ink-100\/90, .text-ink-200\/60, .text-ink-200\/70, .text-ink-200\/80, .text-ink-300\/60, .text-ink-300\/40, .text-ink-300\/50 { color: rgba(40, 30, 22, 0.7) !important; } .text-ink-300\/60 { color: rgba(40, 30, 22, 0.5) !important; } /* 按钮 (白底文字) */ button[class*="text-ink"] { color: #1a1612 !important; } button[class*="hover:text-ink-50"]:hover, button[class*="hover:text-ink-100"]:hover { color: #3a6850 !important; } /* 边框 (Tailwind /opacity 写法) */ .border-ink-200\/40, .border-ink-200\/30, .border-ink-300\/30, .border-ink-300\/40 { border-color: rgba(80, 60, 40, 0.35) !important; } .hover\:border-ink-50\/80:hover { border-color: rgba(60, 130, 90, 0.6) !important; } .hover\:border-ink-50:hover { border-color: rgba(60, 130, 90, 0.6) !important; } .hover\:border-ink-200\/30:hover{ border-color: rgba(80, 60, 40, 0.5) !important; } .hover\:border-ink-50\/40:hover { border-color: rgba(60, 130, 90, 0.5) !important; } /* hover 背景 */ .hover\:bg-ink-50\/5:hover { background: rgba(60, 130, 90, 0.06) !important; } .hover\:bg-jade-500\/10:hover { background: rgba(60, 130, 90, 0.10) !important; } /* input 下划线 focus */ .focus\:border-ink-50\/80:focus { border-color: rgba(60, 130, 90, 0.7) !important; } /* 玉石之光的拂袖点击色 */ div.swipe-zone { border-color: transparent; }