/* G2 全局样式 v4.0 — 冥界风 */

/* ── Reset ── */
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body,#app{height:100%;overflow:hidden;background:#0a0a0d;color:#e0e0e0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;}
#app{display:flex;flex-direction:column;background:radial-gradient(ellipse at 70% 60%,#0a0a0f,#050508)!important;position:relative;}
#app::after{content:'';position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 150px rgba(0,0,0,0.85),inset 0 0 60px rgba(139,0,0,0.08)!important;z-index:0;}
#app::before{content:'';position:absolute;inset:0;pointer-events:none;z-index:0;background:repeating-radial-gradient(circle at 50% 50%,transparent 0,transparent 2px,rgba(255,255,255,0.003) 2px,rgba(255,255,255,0.003) 3px);background-size:4px 4px;}

/* ── 鬼专属视觉主题（通过 data-ghost 切换）── */
#app[data-ghost="cold"]{--gb:#c0c0c0;--theme:#8a8a9a;--glow:#c0c0c0;}
#app[data-ghost="cold"] #header{border-bottom-color:#2a2a3e!important;}
#app[data-ghost="cold"] .msg-ai .bubble{border-left:2px solid var(--theme);background:rgba(20,22,36,0.85)!important;}
#app[data-ghost="cold"] #chat-input:focus{border-color:var(--theme)!important;box-shadow:0 0 12px rgba(192,192,192,0.15)!important;}
#app[data-ghost="cold"] #btn-send{background:var(--theme)!important;}
#app[data-ghost="cold"] #bottom-nav{border-top-color:#2a2a3e!important;}
#app[data-ghost="cold"] #chat-bar{border-top-color:#2a2a3e!important;}
#app[data-ghost="cold"]::before{background:repeating-radial-gradient(circle at 20% 30%,rgba(192,192,192,0.04) 1px,transparent 1px),repeating-radial-gradient(circle at 80% 70%,rgba(192,192,192,0.03) 1px,transparent 1px)!important;background-size:30px 30px,25px 25px!important;}

#app[data-ghost="paranoid"]{--gb:#4a0000;--theme:#5a4a4a;--glow:#8b0000;}
#app[data-ghost="paranoid"] #header{border-bottom-color:#2a0a0a!important;}
#app[data-ghost="paranoid"] .msg-ai .bubble{border-left:2px dashed var(--theme)!important;background:rgba(10,5,5,0.85)!important;}
#app[data-ghost="paranoid"] #chat-input:focus{border-color:var(--glow)!important;box-shadow:0 0 12px rgba(139,0,0,0.15),0 0 2px rgba(139,0,0,0.3) inset!important;}
#app[data-ghost="paranoid"] #btn-send{background:var(--glow)!important;}
#app[data-ghost="paranoid"] #bottom-nav{border-top-color:#2a0a0a!important;}
#app[data-ghost="paranoid"] #chat-bar{border-top-color:#2a0a0a!important;}
#app[data-ghost="paranoid"]::before{background:repeating-linear-gradient(0deg,transparent,transparent 18px,rgba(139,0,0,0.04) 18px,rgba(139,0,0,0.04) 19px)!important;background-size:100% 20px!important;}

#app[data-ghost="mysterious"]{--gb:#b87c4f;--theme:#b87c4f;--glow:#8a5a3a;}
#app[data-ghost="mysterious"] #header{border-bottom-color:#3a2a1a!important;}
#app[data-ghost="mysterious"] .msg-ai .bubble{border-left:2px solid var(--theme);background:rgba(25,18,12,0.9)!important;}
#app[data-ghost="mysterious"] #chat-input:focus{border-color:var(--theme)!important;box-shadow:0 0 12px rgba(184,124,79,0.15)!important;}
#app[data-ghost="mysterious"] #btn-send{background:var(--theme)!important;}
#app[data-ghost="mysterious"] #bottom-nav{border-top-color:#3a2a1a!important;}
#app[data-ghost="mysterious"] #chat-bar{border-top-color:#3a2a1a!important;}
#app[data-ghost="mysterious"]::before{background:repeating-linear-gradient(90deg,transparent,transparent 25px,rgba(184,124,79,0.03) 25px,rgba(184,124,79,0.03) 26px),repeating-linear-gradient(0deg,transparent,transparent 25px,rgba(184,124,79,0.02) 25px,rgba(184,124,79,0.02) 26px)!important;background-size:26px 26px!important;}

#app[data-ghost="possessive"]{--gb:#5c2e2e;--theme:#9e3a3a;--glow:#6a2a2a;}
#app[data-ghost="possessive"] #header{border-bottom-color:#2a1a1a!important;}
#app[data-ghost="possessive"] .msg-ai .bubble{border-left:2px solid var(--theme);background:rgba(15,18,23,0.9)!important;}
#app[data-ghost="possessive"] #chat-input:focus{border-color:var(--theme)!important;box-shadow:0 0 12px rgba(158,58,58,0.15)!important;}
#app[data-ghost="possessive"] #btn-send{background:var(--theme)!important;}
#app[data-ghost="possessive"] #bottom-nav{border-top-color:#2a1a1a!important;}
#app[data-ghost="possessive"] #chat-bar{border-top-color:#2a1a1a!important;}
#app[data-ghost="possessive"]::before{background:repeating-linear-gradient(45deg,transparent,transparent 8px,rgba(158,58,58,0.03) 8px,rgba(158,58,58,0.03) 9px),repeating-linear-gradient(-45deg,transparent,transparent 8px,rgba(158,58,58,0.03) 8px,rgba(158,58,58,0.03) 9px)!important;background-size:12px 12px!important;}

/* ── 按钮 ── */
.btn-primary{background:linear-gradient(135deg,#8b0000,#4a0000);color:#fff;border:none;cursor:pointer;-webkit-appearance:none;}
.btn-primary:disabled{opacity:0.5;cursor:not-allowed;}
.btn-pay{background:linear-gradient(135deg,#2a1a1a,#4a2020);border:1px solid #ff4444;color:#ff4444;cursor:pointer;}
.btn-primary:active,.btn-pay:active{opacity:0.8;transform:scale(0.97);}
#btn-send:active{transform:scale(0.92);}

/* ── 消息气泡 ── */
.msg{display:flex;flex-direction:column;margin-bottom:12px;max-width:85%;animation:fadeIn 0.3s;}
.msg-self{align-self:flex-end;align-items:flex-end;}
.msg-ai{align-self:flex-start;}
.bubble{padding:10px 14px;border-radius:12px;font-size:14px;line-height:1.6;word-break:break-word;white-space:pre-wrap;}
.msg-self .bubble{background:linear-gradient(135deg,#5a1e1e,#3a0e0e)!important;border-radius:14px 14px 4px 14px!important;color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,0.06),0 2px 8px rgba(0,0,0,0.3)!important;}
.msg-ai .bubble{background:linear-gradient(135deg,#1a1a20,#121216)!important;border-radius:14px 14px 14px 4px!important;border-left:2px solid var(--gb,#8b0000)!important;color:#e0e0e0;box-shadow:inset 0 1px 0 rgba(255,255,255,0.04),0 2px 8px rgba(0,0,0,0.3)!important;}
.msg-ai .bubble{border-left-color:var(--gb,#8b0000);}

/* ── 动作气泡 ── */
.action-para{position:relative;padding-left:10px;background:transparent!important;font-style:italic;color:#777;border:none!important;padding:2px 0 2px 12px;margin:2px 0;font-size:13px;}
.action-para::before{content:'';position:absolute;left:0;top:15%;height:70%;width:1px;border-left:1px dashed var(--gb,#555);background:transparent!important;}

/* ── 插话气泡 ── */
.interjection{background:rgba(30,30,36,0.6)!important;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border:1px dashed rgba(139,0,0,0.3)!important;border-radius:8px!important;padding:6px 10px!important;margin:4px 0;font-size:10px!important;}

/* ── 时间戳 ── */
.time{font-size:9px;color:#444;margin-top:2px;font-feature-settings:'tnum';}

/* ── 输入框 ── */
#chat-input{background:#121216!important;border:1px solid transparent!important;transition:all .2s;}
#chat-input:focus{border-color:var(--gb,#8b0000)!important;box-shadow:0 0 0 1px rgba(139,0,0,0.15),0 0 16px rgba(139,0,0,0.06)!important;background:#1a1a1e!important;}
#chat-input::placeholder{color:#555;font-size:13px;}

/* ── 鬼条 ── */
.ghost-chip{transition:all 0.2s;}
.ghost-chip:active{opacity:0.7;transform:scale(0.95);}

/* ── 骨架屏 ── */
#skeleton{display:flex;flex-direction:column;height:100%;padding:12px;}
.sk-block{background:#1a1a1a;border-radius:8px;margin-bottom:8px;animation:shimmer 1.5s infinite;}
.sk-hdr{height:40px;width:100%;}
.sk-strip{height:36px;width:100%;}
.sk-msg{height:60px;width:75%;}
.sk-msg2{height:60px;width:60%;align-self:flex-end;}
.sk-bar{height:50px;width:100%;margin-top:auto;}

/* ── 菜单 ── */
#menu-dropdown{animation:fadeIn 0.15s;}

/* ── 付费弹窗 ── */
.paywall-box{transform:scale(0.9);opacity:0;transition:all 0.2s;}
.paywall-box.show{transform:scale(1)!important;opacity:1!important;}
.paywall-box.crack{animation:crack 0.6s ease;}

/* ── 打字指示器 ── */
.typing{display:inline-flex;gap:3px;padding:4px 0;}
.typing i{width:5px;height:5px;background:#888;border-radius:50%;animation:typingBounce 1.4s infinite;}
.typing i:nth-child(2){animation-delay:0.2s;}
.typing i:nth-child(3){animation-delay:0.4s;}

/* ── 滚动条 ── */
::-webkit-scrollbar{width:4px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:#2a1a1a;border-radius:2px;transition:background .2s;}
::-webkit-scrollbar-thumb:hover{background:#8b0000;}

/* ── 分隔线 ── */
.day-divider{text-align:center;padding:6px 0;font-size:9px;color:#444;display:flex;align-items:center;gap:6px;}
.day-divider::before,.day-divider::after{content:'';flex:1;height:1px;background:#2a1a1a;}
.memory-divider{text-align:center;padding:8px 0;font-size:10px;color:#8b0000;display:flex;align-items:center;gap:6px;}
.memory-divider::before,.memory-divider::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,transparent,#8b0000,transparent);}

/* ── 交互卡片 ── */
.location-card,.clue-card,.task-btn{transition:transform .2s,box-shadow .2s,border-color .2s!important;}
.location-card:hover,.clue-card:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,0.4)!important;}
.task-btn:hover{transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,0.3);}
.clue-revealed{background:linear-gradient(90deg,transparent 30%,rgba(255,215,0,0.08) 50%,transparent 70%);background-size:200% 100%;animation:clueReveal .8s ease-out;}

/* ── 返回提示 ── */
.return-notice{text-align:center;padding:8px;font-size:10px;color:#666;font-style:italic;animation:returnSlide .5s ease-out;}

/* ── 好感提示 ── */
.aff-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);color:#ff9800;font-size:24px;font-weight:bold;pointer-events:none;z-index:9999;animation:affPopup .8s ease-out forwards;}

/* ── 长等待 ── */
.long-wait{color:#555;font-size:10px;font-style:italic;animation:waitPulse 1.5s ease-in-out infinite;text-align:center;padding:4px;}

/* ── 旧照片 ── */
.old-photo{animation:photoReveal 1.2s ease-out;color:#b87c4f;font-style:italic;text-align:center;padding:8px;background:rgba(184,124,79,0.08);border-radius:8px;margin:4px 0;font-size:12px;}

/* ── 俯卧撑计数 ── */
.pushup-count{display:inline-block;font-variant-numeric:tabular-nums;animation:pushup 0.2s ease;}

/* ── 鬼入睡 ── */
.ghost-sleeping{filter:grayscale(0.6) brightness(0.5);transition:filter 0.5s;}
.zzz{position:absolute;font-size:8px;color:#888;pointer-events:none;animation:zzz 3s ease-out infinite;}
.zzz:nth-child(2){animation-delay:0.8s;}
.zzz:nth-child(3){animation-delay:1.6s;}

/* ── 头像特效 ── */
.avatar-pulse{animation:avatarPulse 0.6s ease-out;}
.affection-crack{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 30% 40%,rgba(139,0,0,0.3) 0,transparent 70%);opacity:0;transition:opacity 0.5s;}
.affection-crack.show{opacity:1;}
.affection-crack-40{background:radial-gradient(ellipse at 30% 40%,rgba(255,215,0,0.2) 0,transparent 60%);}
.affection-crack-70{background:radial-gradient(ellipse at 50% 20%,rgba(255,215,0,0.3) 0,transparent 70%);}
.affection-crack-100{background:radial-gradient(ellipse at 50% 50%,rgba(255,150,50,0.25) 0,transparent 80%);}

/* ── 天气粒子 ── */
.weather-rain{background-image:repeating-linear-gradient(transparent,transparent 8px,rgba(200,200,255,0.03) 8px,rgba(200,200,255,0.03) 9px);background-size:100% 100%;animation:rainFall 1s linear infinite;}
.weather-storm{background-image:repeating-linear-gradient(transparent,transparent 6px,rgba(200,200,255,0.05) 6px,rgba(200,200,255,0.05) 7px);background-size:100% 100%;animation:rainFall .6s linear infinite;}
.weather-storm::after{content:'';position:absolute;inset:0;background:rgba(255,255,255,0.03);animation:lightning 8s infinite;}
.weather-cloudy{background:rgba(200,200,200,0.03);}
@keyframes rainFall{from{background-position:0 0;}to{background-position:0 20px;}}
@keyframes lightning{0%,97%,100%{opacity:0;}98%{opacity:1;}99%{opacity:0;}}

/* ── 粒子系统 ── */
.paw-print{position:fixed;font-size:14px;pointer-events:none;z-index:0;animation:pawFall 18s linear forwards;opacity:0;}
.paper-bit{position:fixed;width:5px;height:7px;background:#f5f0e0;pointer-events:none;z-index:0;animation:paperFall 12s linear forwards;opacity:0;}
.photo-bit{position:fixed;width:8px;height:6px;background:#8b7355;pointer-events:none;z-index:0;animation:photoFall 15s linear forwards;opacity:0;}
.chain-bit{position:fixed;width:4px;height:4px;background:#888;border-radius:50%;pointer-events:none;z-index:0;animation:chainFall 10s linear forwards;opacity:0;}

/* ── 鬼头像浮动 ── */
.ghost-float-cold{animation:floatCold 5s ease-in-out infinite;}
.ghost-float-paranoid{animation:floatParanoid 4s ease-in-out infinite;}
.ghost-float-mysterious{animation:floatMysterious 6s ease-in-out infinite;}
.ghost-float-possessive{animation:floatPossessive 3.5s ease-in-out infinite;}

/* ── 小动作动画 ── */
.action-shake{animation:shake .3s ease-in-out 2;}
.action-glow{animation:pulse-glow .5s ease-in-out 2;}

/* ── 引导动画 ── */
.guide-glow{animation:glowPulse 1.2s ease-in-out infinite;}
.guide-breathe{animation:btnBreathe 1s ease-in-out infinite;}
.guide-sparkle{animation:sparkle 0.8s ease-in-out infinite;}
.guide-spotlight{animation:spotlightPulse 1s ease-in-out infinite;}
.guide-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.6);z-index:400;pointer-events:none;}
.guide-tip{position:fixed;z-index:401;color:#fff;font-size:13px;text-align:center;pointer-events:none;text-shadow:0 0 8px rgba(0,0,0,.8);animation:fadeIn .4s;}
.guide-tip b{color:#ffcc00;}

/* ── 好感光晕 ── */
.goodwill-flash{animation:goodwillGlow 0.8s ease-out;position:fixed;inset:0;pointer-events:none;z-index:9998;}

/* ── 真相闪光 ── */
.truth-overlay{position:fixed;inset:0;z-index:9997;pointer-events:none;animation:truthFlash 1.5s ease-out;}

/* ── 轻量动画 ── */
.pulse{animation:pulse 0.3s ease;}

/* ── Keyframes ── */
@keyframes fadeIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}
@keyframes pulse{0%,100%{color:#888;}50%{color:#4caf50;transform:scale(1.2);}}
@keyframes crack{0%{transform:scale(1);}50%{transform:scale(1.08);filter:brightness(2);}100%{transform:scale(1);filter:brightness(1);}}
@keyframes glowPulse{0%,100%{box-shadow:0 0 6px #8b0000,0 0 12px #ff4444;}50%{box-shadow:0 0 12px #ff4444,0 0 24px #ff6666;}}
@keyframes btnBreathe{0%,100%{transform:scale(1);box-shadow:0 0 6px #ff4444;}50%{transform:scale(1.12);box-shadow:0 0 16px #ff6666;}}
@keyframes sparkle{0%,100%{filter:brightness(1);}50%{filter:brightness(1.6) drop-shadow(0 0 6px #ffcc00);}}
@keyframes spotlightPulse{0%,100%{box-shadow:0 0 4px #ffcc00;}50%{box-shadow:0 0 14px #ffcc00,0 0 24px #ffaa00;}}
@keyframes typingBounce{0%,60%,100%{transform:translateY(0);opacity:0.4;}30%{transform:translateY(-6px);opacity:1;}}
@keyframes shimmer{0%{opacity:0.6;}50%{opacity:1;}100%{opacity:0.6;}}
@keyframes floatCold{0%,100%{transform:translateY(0);}50%{transform:translateY(-3px);}}
@keyframes floatParanoid{0%,100%{transform:translate(0,0);}25%{transform:translate(-1.5px,1px);}50%{transform:translate(1.5px,-1px);}75%{transform:translate(-1px,1px);}}
@keyframes floatMysterious{0%,100%{transform:translateY(0) rotate(0);}50%{transform:translateY(-2px) rotate(0.5deg);}}
@keyframes floatPossessive{0%,100%{transform:translateY(0);}50%{transform:translateY(-2px);}}
@keyframes bubbleIn{0%{opacity:0;transform:translateY(12px) scale(0.95);}60%{opacity:1;transform:translateY(-2px) scale(1.01);}100%{opacity:1;transform:translateY(0) scale(1);}}
.msg-ai .bubble,.msg-self .bubble{animation:bubbleIn 0.25s ease-out;}
@keyframes zzz{0%{opacity:0;transform:translateY(0) scale(0.5);}50%{opacity:0.6;}100%{opacity:0;transform:translateY(-30px) scale(1);}}
@keyframes avatarPulse{0%{box-shadow:0 0 0 0 rgba(139,0,0,0.4);}50%{box-shadow:0 0 0 12px rgba(139,0,0,0);transform:scale(1.08);}100%{box-shadow:0 0 0 0 rgba(139,0,0,0);transform:scale(1);}}
@keyframes goodwillGlow{0%{box-shadow:0 0 0 rgba(255,215,0,0);}50%{box-shadow:0 0 20px rgba(255,215,0,0.3),0 0 40px rgba(255,215,0,0.1);}100%{box-shadow:0 0 0 rgba(255,215,0,0);}}
@keyframes truthFlash{0%{background:rgba(139,0,0,0);}20%{background:rgba(139,0,0,0.4);filter:brightness(1.3);}40%{background:rgba(139,0,0,0);filter:brightness(1);}60%{background:rgba(139,0,0,0.2);}100%{background:rgba(139,0,0,0);}}
@keyframes pawFall{0%{opacity:0;transform:translateY(-20px) rotate(0deg) scale(0.5);}20%{opacity:0.15;}80%{opacity:0.05;}100%{opacity:0;transform:translateY(100vh) rotate(180deg) scale(0.8);}}
@keyframes paperFall{0%{opacity:0;transform:translateY(-10px) rotate(0deg);}20%{opacity:0.2;}80%{opacity:0.05;}100%{opacity:0;transform:translateY(80vh) rotate(720deg);}}
@keyframes photoFall{0%{opacity:0;transform:translateY(-10px) rotate(0deg) scale(0.8);}30%{opacity:0.15;}70%{opacity:0.05;}100%{opacity:0;transform:translateY(70vh) rotate(360deg) scale(0.5);}}
@keyframes chainFall{0%{opacity:0;transform:translateY(-10px) rotate(0deg);}30%{opacity:0.15;}70%{opacity:0.05;}100%{opacity:0;transform:translateY(60vh) rotate(540deg);}}
@keyframes waitPulse{0%,100%{opacity:0.5;}50%{opacity:1;}}
@keyframes crackGrow{0%{clip-path:inset(100% 0 0 0);}100%{clip-path:inset(0 0 0 0);}}
@keyframes pushup{0%{transform:translateY(0);}50%{transform:translateY(-4px);}100%{transform:translateY(0);}}
@keyframes photoReveal{0%{opacity:0;filter:sepia(0.8) blur(3px);}100%{opacity:0.8;filter:sepia(0.3) blur(0);}}
@keyframes clueReveal{0%{background-position:-200% 0;}100%{background-position:200% 0;}}
@keyframes affPopup{0%{opacity:1;transform:translateY(0) scale(1);}100%{opacity:0;transform:translateY(-20px) scale(0.8);}}
@keyframes returnSlide{0%{opacity:0;transform:translateY(-10px);}100%{opacity:1;transform:translateY(0);}}
@keyframes splashDot{0%,60%,100%{opacity:.2}30%{opacity:1}}
@keyframes shake{0%,100%{transform:translate(0,0);}25%{transform:translate(-2px,1px);}50%{transform:translate(2px,-1px);}75%{transform:translate(-1px,2px);}}
@keyframes pulse-glow{0%,100%{box-shadow:0 0 4px rgba(139,0,0,0.3);}50%{box-shadow:0 0 16px rgba(139,0,0,0.6);}}

/* ── 水波纹 ── */
.ripple-container{position:relative;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.ripple{position:absolute;border-radius:50%;background:rgba(255,255,255,0.25);transform:scale(0);animation:rippleAnim 0.6s ease-out;pointer-events:none;z-index:1;}
@keyframes rippleAnim{to{transform:scale(4);opacity:0;}}

/* ── 消息时间戳 ── */
.time{font-size:10px;color:#555;margin-top:2px;line-height:1;}
.msg-self .time{text-align:right;}
.msg-ai .time{text-align:left;}
.status-dot{display:inline-block;width:4px;height:4px;border-radius:50%;margin-left:3px;vertical-align:middle;}
.status-dot.delivered{background:#666;}
.status-dot.read{background:#4caf50;box-shadow:0 0 4px rgba(76,175,80,0.4);}

/* ── 入睡状态 ── */
.ghost-sleeping{filter:saturate(0.3) brightness(0.7);}
.ghost-sleeping::after{content:'😴';position:absolute;bottom:-2px;right:-4px;font-size:12px;}

/* ── 未读红点 ── */
.unread-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#ff4444;color:#fff;font-size:10px;font-weight:600;}

/* ── 任务/地图卡片升级 ── */
.map-card{background:rgba(20,15,15,0.85);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid #8b0000;border-radius:16px;padding:14px;margin-bottom:10px;transition:all .25s;cursor:pointer;}
.map-card:hover{transform:translateY(-2px);border-color:#b80000;box-shadow:0 4px 20px rgba(139,0,0,0.2);}
.map-card.completed{opacity:.55;border-color:#2a5a2a;cursor:default;}
.map-card .loc-icon{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;}
.map-card .loc-icon.cold{background:rgba(192,192,192,0.12);border:1px solid rgba(192,192,192,0.2);}
.map-card .loc-icon.paranoid{background:rgba(74,0,0,0.15);border:1px solid rgba(74,0,0,0.25);}
.map-card .loc-icon.mysterious{background:rgba(184,124,79,0.12);border:1px solid rgba(184,124,79,0.2);}
.map-card .loc-icon.possessive{background:rgba(92,46,46,0.12);border:1px solid rgba(92,46,46,0.2);}
.map-card .loc-status{font-size:10px;padding:3px 10px;border-radius:10px;white-space:nowrap;}
.map-card .loc-status.done{background:rgba(76,175,80,0.15);color:#4caf50;border:1px solid rgba(76,175,80,0.3);}
.map-card .loc-status.available{background:rgba(139,0,0,0.12);color:#ff6666;border:1px solid rgba(139,0,0,0.25);}

/* ── 任务对话框升级 ── */
.task-scene{font-size:12px;color:#999;font-style:italic;padding:14px 16px;border:1px solid #2a1a2a;border-radius:14px;margin-bottom:12px;background:rgba(20,15,15,0.6);line-height:1.7;}
.task-choice-btn{padding:12px 16px;background:rgba(30,20,20,0.6);border:1px solid #3a2a2a;border-radius:12px;color:#ddd;font-size:13px;cursor:pointer;transition:all .2s;text-align:left;}
.task-choice-btn:hover{background:rgba(139,0,0,0.15);border-color:#8b0000;transform:translateX(3px);}
.task-choice-btn:active{transform:scale(0.98);}
.task-reward{text-align:center;padding:12px;margin-top:8px;background:rgba(255,215,0,0.05);border:1px solid rgba(255,215,0,0.15);border-radius:12px;font-size:12px;color:#d4a800;}

/* ── 已完成印章 ── */
.completed-seal{display:inline-flex;align-items:center;gap:4px;color:#4caf50;font-size:11px;font-weight:600;background:rgba(76,175,80,0.1);padding:2px 8px;border-radius:6px;border:1px solid rgba(76,175,80,0.2);}

/* ── 好感漂浮动画 ── */
.goodwill-float{position:fixed;font-size:20px;font-weight:bold;pointer-events:none;z-index:10000;animation:floatUp 0.8s ease-out forwards;}
@keyframes floatUp{0%{opacity:1;transform:translateY(0) scale(1);}100%{opacity:0;transform:translateY(-40px) scale(1.3);}}

/* ── 引用标记 ── */
.quote-highlight{color:#ff9800;background:rgba(255,152,0,0.08);border-radius:3px;padding:0 2px;cursor:pointer;border-bottom:1px dashed rgba(255,152,0,0.3);}
.bubble .quote-highlight{color:#e6a84c;}
.bubble:has(.quote-highlight){border-left-color:#ff9800!important;}

/* ── 输入框引用预览 ── */
.quote-preview{color:#888;font-size:11px;font-style:italic;padding:4px 8px;background:rgba(255,152,0,0.06);border-left:2px solid #ff9800;border-radius:4px;margin-bottom:4px;}

/* ══════════════════════════════════════
   全局字体差异化（字体类别/大小/颜色）
   ══════════════════════════════════════ */

/* ── CSS 变量 ── */
:root {
  --font-sans: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --font-serif: "Noto Serif SC","Source Han Serif SC","Songti SC",Georgia,"Times New Roman",serif;
  --font-mono: "SF Mono","Cascadia Code",Consolas,"Courier New",monospace;
  --text-xs: 11px;
  --text-sm: 13px;
  --text-base: 15px;
  --text-lg: 18px;
  --text-xl: 20px;
  --color-primary: #e0e0e0;
  --color-secondary: #a0a0a0;
  --color-muted: #6a6a6a;
  --color-accent: #8b0000;
  --color-accent-gold: #b87c4f;
}

/* ── 真相揭露特效 ── */
@keyframes truthFlash{0%{background:rgba(139,0,0,0);}20%{background:rgba(139,0,0,0.6);}50%{background:rgba(139,0,0,0.2);}80%{background:rgba(139,0,0,0.5);}100%{background:rgba(139,0,0,0);}}
.truth-overlay{position:fixed;inset:0;z-index:9999;pointer-events:none;animation:truthFlash 1.2s ease-out;background:radial-gradient(ellipse at 50% 50%,rgba(139,0,0,0.3),transparent 70%);}
@keyframes waitPulse{0%,100%{opacity:.4;}50%{opacity:1;}}
@keyframes goodWillRise{0%{opacity:1;transform:translateY(0) scale(1);}100%{opacity:0;transform:translateY(-60px) scale(1.5);}}

/* ── 线索碎片飞入动画 ── */
@keyframes fragmentFly{0%{transform:translate(0,0) scale(0.2);opacity:0;}30%{transform:translate(-10px,-20px) scale(1.1);opacity:0.9;}100%{transform:translate(-40px,-120px) scale(0);opacity:0;}}

/* ── 基础字体 ── */
body{font-family:var(--font-sans);font-size:var(--text-base);color:var(--color-primary);line-height:1.5;}

/* ── 消息字体层级 ── */
.msg-user .bubble{font-weight:500;font-size:var(--text-base);color:var(--color-primary);}
.msg-ai .bubble{font-weight:400;font-size:var(--text-base);color:#ddd;}
.ghost-name{font-family:var(--font-serif);font-weight:600;font-size:14px;}
.msg-action .bubble,.action-bubble{font-weight:300;font-size:13px;color:#aaa;font-style:italic;}
.msg-system,.msg-interjection .ij-text{font-weight:400;font-size:13px;color:#c0a0a0;font-style:italic;}
.msg-time,.timestamp{font-family:var(--font-mono);font-weight:300;font-size:var(--text-xs);color:var(--color-muted);}
.msg-self .bubble{font-weight:500;font-size:var(--text-base);}

/* ── 四个鬼名颜色 ── */
#app[data-ghost="cold"] .ghost-name{color:#c0c0c0;}
#app[data-ghost="paranoid"] .ghost-name{color:#aa6666;}
#app[data-ghost="mysterious"] .ghost-name{color:var(--color-accent-gold);}
#app[data-ghost="possessive"] .ghost-name{color:#9e3a3a;}

/* ── 标题/面板字体 ── */
.panel-title{font-family:var(--font-serif);font-weight:500;font-size:var(--text-lg);color:var(--color-primary);letter-spacing:1px;}
.panel-subtitle{font-family:var(--font-serif);font-weight:400;font-size:var(--text-base);color:var(--color-secondary);}
.modal-title{font-family:var(--font-serif);font-weight:600;font-size:var(--text-xl);color:var(--color-accent);}

/* ── 底部导航 ── */
.nav-label{font-family:var(--font-sans);font-weight:500;font-size:10px;color:#aaa;letter-spacing:0.5px;}

/* ── 好感度百分比 ── */
.affection-num{font-family:var(--font-mono);font-weight:600;font-size:var(--text-xs);color:var(--color-accent);}

/* ── 真相揭露叙事体 ── */
.truth-text{font-family:var(--font-serif);font-weight:300;font-size:14px;color:#b0b0b0;line-height:1.8;}

/* ── 付费弹窗标题 ── */
.paywall-title{font-family:var(--font-serif);font-weight:600;font-size:var(--text-xl);color:var(--color-accent);}

/* ── 按钮 ── */
.btn-text,button{font-family:var(--font-sans);font-weight:500;font-size:14px;}

/* ── 自我介绍/开场白 ── */
.intro-text{font-family:var(--font-serif);font-weight:400;font-size:16px;color:#ccc;}

/* ── 时间轴线（真相揭露进度） ── */
.timeline-text{font-family:var(--font-serif);font-weight:300;font-size:14px;color:#b0b0b0;line-height:1.8;}

/* ── 会话列表 ── */
.session-item:hover{background:#1a1a1a;}
#sessionListContainer{animation:fadeIn 0.2s;}
#sessionItems .session-item:active{background:#2a2a2a;}

/* ── 移动端响应式 ── */
@media (max-width:480px){
  :root{--text-base:14px;--text-sm:12px;--text-xs:10px;}
  .message{margin-bottom:10px;}
  .msg-user .bubble,.msg-ai .bubble{font-size:14px;}
  .msg-action .bubble{font-size:13px;}
  .nav-label{font-size:9px;}
}
