/* ===== EventFlow — 视觉精修 & 动态模块样式 ===== */

/* ---------- 滚动入场 reveal ---------- */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}
.reveal.in-view{opacity:1;transform:translateY(0)}

/* ---------- 主题切换按钮 ---------- */
.theme-toggle{position:fixed;bottom:22px;right:22px;z-index:200;width:46px;height:46px;border-radius:50%;
  background:var(--glass-strong);border:1px solid var(--line2);color:var(--text);font-size:20px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;backdrop-filter:blur(8px);box-shadow:var(--shadow);transition:.25s}
.theme-toggle:hover{transform:scale(1.08);border-color:var(--brand)}
.theme-toggle .tt-icon{line-height:1}

/* 浅色主题变量覆盖：玻璃面板/输入底/媒体渐变/地图滤镜等令牌全部换浅色版（令牌定义见 reset.css :root） */
:root[data-theme="light"]{--bg:#f6f6fa;--bg2:#ececf3;--card:#ffffff;--card2:#f2f2f7;
  --line:rgba(0,0,0,.08);--line2:rgba(0,0,0,.14);--text:#1a1a22;--muted:#5a5a66;
  --shadow:0 10px 40px rgba(60,40,120,.14);
  --glass-panel:rgba(255,255,255,.78);--glass-strong:rgba(255,255,255,.9);--glass-menu:rgba(255,255,255,.97);
  --field:rgba(0,0,0,.045);--field-hover:rgba(0,0,0,.08);--input-bar:rgba(0,0,0,.05);
  --alt-bg:rgba(0,0,0,.025);
  --media-bg:linear-gradient(160deg,#eef0f7,#e2e6f0);
  --overlay-grad:linear-gradient(135deg,#dcd6f8 0%,#d6e4f4 55%,#d2ecec 100%);
  --vignette:rgba(40,40,80,.12);
  --map-fallback:radial-gradient(circle at 30% 30%,rgba(124,92,255,.07),transparent 55%),radial-gradient(circle at 70% 60%,rgba(56,189,248,.06),transparent 52%),linear-gradient(135deg,#e8ecf4,#dde5ef);
  --grid-line:rgba(0,0,0,.06);
  --map-filter:none;
  --slide-c1:#cfd8f8;--slide-c2:#cdeeee;
  --footer-bg:#ececf3;
  --scroll-thumb:#c9c9d4;
  --chip-bg:rgba(124,92,255,.92);--chip-fg:#fff;
  --thumb-shade:linear-gradient(180deg,transparent 55%,rgba(124,92,255,.22));
  --code-green:#1a7f57}
:root[data-theme="light"] body{background:var(--bg);color:var(--text)}
:root[data-theme="light"] .navbar{background:rgba(246,246,250,.55)}
:root[data-theme="light"] .navbar.scrolled{background:rgba(246,246,250,.92);border-bottom-color:var(--line)}
:root[data-theme="light"] .hero-media-overlay{opacity:.5}
:root[data-theme="light"] .auth-msg.is-error{color:#dc2626}
:root[data-theme="light"] .auth-msg.is-ok{color:#16a34a}

/* ---------- 供应商工具栏 + 分页器 ---------- */
.vendor-toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:18px 0 8px;background:var(--glass-panel);
  border:1px solid var(--line);border-radius:14px;padding:14px 16px;backdrop-filter:blur(6px)}
.vendor-toolbar label{font-size:13px;color:var(--muted);font-weight:600;letter-spacing:.04em;text-transform:uppercase}
.vt-filter{background:var(--field);border:1px solid var(--line);border-radius:10px;padding:9px 12px;font-size:14px;color:var(--text);outline:none}
.vt-filter:focus{border-color:var(--brand)}
.vt-search{flex:1;min-width:220px;background:var(--field);border:1px solid var(--line);border-radius:10px;padding:9px 14px;font-size:14.5px;color:var(--text);outline:none}
.vt-search:focus{border-color:var(--brand)}
.vendor-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin:22px 0 8px;font-size:14px;color:var(--muted)}
.vendor-pager button{background:rgba(124,92,255,.14);border:1px solid rgba(124,92,255,.35);color:var(--brand2);border-radius:9px;padding:8px 16px;font-size:13.5px;cursor:pointer;transition:.2s;font-weight:600}
.vendor-pager button:hover:not(:disabled){background:rgba(124,92,255,.28)}
.vendor-pager button:disabled{opacity:.4;cursor:not-allowed}
.vendor-pager b{color:var(--text)}

/* ---------- AI 对话消息优化（首页 + 流式） ---------- */
.ai-card{background:var(--glass-panel);border:1px solid var(--line2);border-radius:18px;padding:0;backdrop-filter:blur(10px);overflow:hidden;box-shadow:var(--shadow)}
.ai-card-head{display:flex;align-items:center;gap:7px;padding:12px 16px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.02)}
.ai-dot{width:9px;height:9px;border-radius:50%;background:#ff5f56}.ai-dot:nth-child(2){background:#ffbd2e}.ai-dot:nth-child(3){background:#27c93f}
.ai-card-title{margin-left:auto;font-size:12.5px;color:var(--muted);font-weight:600;letter-spacing:.04em}
.ai-chat{max-height:260px;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px}
.ai-msg{font-size:14px;line-height:1.55;padding:10px 14px;border-radius:12px;max-width:88%;white-space:pre-wrap;word-break:break-word}
.ai-msg--user{background:var(--grad);color:#fff;align-self:flex-end;border-bottom-right-radius:4px}
.ai-msg--bot{background:var(--field);color:var(--text);align-self:flex-start;border:1px solid var(--line);border-bottom-left-radius:4px}
.ai-input{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--line);background:var(--input-bar)}
.ai-input input{flex:1;background:var(--field);border:1px solid var(--line);border-radius:10px;padding:11px 14px;font-size:14.5px;outline:none;color:var(--text)}
.ai-input input:focus{border-color:var(--brand)}
.ai-send{background:var(--grad);color:#fff;border-radius:10px;width:44px;font-size:16px;display:flex;align-items:center;justify-content:center;transition:.2s}
.ai-send:hover{transform:scale(1.06)}
.ai-mic{width:44px;height:42px;border-radius:10px;border:1px solid var(--line);background:var(--field);color:var(--muted);font-size:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:.2s;flex:0 0 auto}
.ai-mic:hover{border-color:var(--brand);color:var(--text)}
.ai-mic.is-recording{background:#ef4444;border-color:#ef4444;color:#fff;animation:micPulse 1.4s ease-in-out infinite}
@keyframes micPulse{0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,.5)}50%{box-shadow:0 0 0 8px rgba(239,68,68,0)}}
@media (prefers-reduced-motion: reduce){.ai-mic.is-recording{animation:none}}

/* ---------- 卡片 3D tilt 基础（JS 注入 transform，此处仅保证过渡） ---------- */
.feature-card,.vendor-card,.info-card,.plan-card,.value-card,.resource-card{will-change:transform}

/* ---------- 导航 AI Planner 高亮 ---------- */
.nav-link[href="ai-planner.html"]{color:var(--brand2)}

/* ---------- 供应商地图：标记 + 信息窗 + 卡片联动 ---------- */
.map-mock{position:relative;min-height:360px;background:var(--map-fallback);border-radius:22px;border:1px solid var(--line2);overflow:hidden}
.map-mock.is-real{background:#e8eaed} /* 真实地图覆盖后底色 */
.map-pin{position:absolute;width:20px;height:20px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 4px rgba(124,92,255,.25),0 0 14px rgba(124,92,255,.7);cursor:pointer;transform:translate(-50%,-50%);transition:transform .2s,box-shadow .2s}
.map-pin::after{content:'';position:absolute;left:50%;top:100%;transform:translateX(-50%);width:2px;height:8px;background:rgba(124,92,255,.6)}
.map-pin:hover,.map-pin.is-active{transform:translate(-50%,-50%) scale(1.35);box-shadow:0 0 0 6px rgba(124,92,255,.35),0 0 22px var(--brand2)}
.map-info{position:absolute;z-index:5;width:250px;background:var(--glass-strong);border:1px solid var(--line2);border-radius:14px;padding:13px 14px 12px;color:var(--text);box-shadow:var(--shadow);backdrop-filter:blur(8px);animation:mapInfoIn .2s ease}
@keyframes mapInfoIn{from{opacity:0;transform:translate(-50%,-92%) scale(.95)}to{opacity:1;transform:translate(-50%,-100%) scale(1)}}
.map-info-close{position:absolute;top:6px;right:8px;width:22px;height:22px;border:none;background:transparent;color:var(--muted);font-size:18px;cursor:pointer;line-height:1}
.map-info-close:hover{color:var(--text)}
.map-info-title{font-weight:700;font-size:14.5px;margin-bottom:3px}
.map-info-loc{font-size:12px;color:var(--muted);margin-bottom:7px}
.map-info-meta{display:flex;gap:10px;font-size:12px;color:var(--muted);margin-bottom:7px}
.map-info-meta span{background:var(--field);padding:2px 7px;border-radius:20px}
.map-info-blurb{font-size:12.5px;line-height:1.5;color:var(--text);opacity:.85;margin:0 0 8px}
.map-info-link{font-size:12.5px;color:var(--brand2);text-decoration:none;font-weight:600}
.map-info-link:hover{text-decoration:underline}
.map-nokey{position:absolute;left:12px;bottom:12px;font-size:11.5px;color:var(--muted);background:rgba(0,0,0,.35);padding:5px 9px;border-radius:20px;border:1px solid var(--line)}
/* 供应商卡片联动高亮 */
.vendor-card.is-active{box-shadow:0 0 0 2px var(--brand),var(--shadow);transform:translateY(-4px)}

/* ===== EventFlow：hero 方案轮播 动效 ===== */
.hero-slide.is-active{animation:heroSlideIn .7s ease}
@keyframes heroSlideIn{from{opacity:0;transform:scale(1.04)}to{opacity:1;transform:scale(1)}}
.hero-media.slides-on .hero-bubble{transition:.4s}
.hero-slide-dot{transition:background .2s,transform .2s}
/* EventFlow：我的位置脉冲 + 卡片详情展开 */
@keyframes mePulse{0%,100%{box-shadow:0 0 0 4px rgba(34,211,238,.3),0 0 16px rgba(34,211,238,.8)}50%{box-shadow:0 0 0 12px rgba(34,211,238,.12),0 0 24px rgba(34,211,238,.5)}}
@keyframes spotDetailIn{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
@keyframes spotFloat{0%,100%{transform:translate(-50%,-50%) translateY(0)}50%{transform:translate(-50%,-50%) translateY(-8px)}}
@media (prefers-reduced-motion:reduce){.hero-slide{transition:none}.hero-slide.is-active{animation:none}.hero-drag,.hero-spot{transition:none}.hero-float-card{transition:none}.hero-me-dot,.hero-spot,.hero-spot-detail,.hero-spot-mask{animation:none}}
.vendor-toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin:18px 0 4px}
.vendor-toolbar label{font-size:13px;color:var(--muted);font-weight:600}
.vendor-toolbar select,.vendor-toolbar input{flex:1;min-width:160px;background:var(--field);border:1px solid var(--line2);border-radius:10px;padding:9px 12px;font-size:14px;color:var(--text);outline:none}
.vendor-toolbar select:focus,.vendor-toolbar input:focus{border-color:var(--brand)}
.vendor-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin:20px 0 6px;font-size:13.5px;color:var(--muted)}
.vendor-pager button{background:var(--field);border:1px solid var(--line2);color:var(--text);padding:7px 16px;border-radius:9px;cursor:pointer;transition:.2s}
.vendor-pager button:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.vendor-pager button:disabled{opacity:.4;cursor:not-allowed}

/* AI 思考中提示脉动（配 .ai-think-head.is-thinking） */
.ai-think-head.is-thinking .ai-think-title{animation:thinkPulse 1.2s ease-in-out infinite}
@keyframes thinkPulse{0%,100%{opacity:.5}50%{opacity:1}}
@keyframes planSlide{0%{left:-40%}100%{left:100%}}
@keyframes planFloatIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* 历史对话/我的方案 浮层框入场（配 components.css .ef-modal-card） */
@keyframes efModalIn{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}

/* 三档方案生成按钮解锁引导脉动（配 #planGenBtn.is-ready） */
@keyframes planReadyPulse{0%,100%{box-shadow:0 0 0 0 rgba(124,92,255,.5)}50%{box-shadow:0 0 0 9px rgba(124,92,255,0)}}
#planGenBtn.is-ready{animation:planReadyPulse 1.6s ease-in-out infinite}
@media (prefers-reduced-motion: reduce){#planGenBtn.is-ready{animation:none}}

/* 嘉宾管理模块：轻量 toast 提示 */
.ef-toast{position:fixed;left:50%;bottom:40px;transform:translateX(-50%) translateY(20px);background:var(--glass-strong);color:var(--text);padding:12px 22px;border-radius:12px;font-size:14px;font-weight:600;z-index:1300;opacity:0;pointer-events:none;border:1px solid var(--line2);box-shadow:var(--shadow);transition:.3s;backdrop-filter:blur(8px)}
.ef-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
