:root {
  --primary: #00ffcc;
  --primary-deep: #11b89a;
  --accent: #7c5cff;
  --bg: #05080f;
  --card: rgba(255, 255, 255, .05);
  --card-solid: #0c1424;
  --ink: #eaf4ff;
  --muted: rgba(222, 238, 255, .62);
  --line: rgba(255, 255, 255, .10);
  --shadow: 0 18px 50px rgba(0, 0, 0, .45);
  --radius: 28px;
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif;
  color: var(--ink);
  background: var(--bg);
}
* { box-sizing: border-box; }
body { margin: 0; min-width: 320px; background: var(--bg); }
button, input, textarea { font: inherit; }
button { cursor: pointer; }
button:disabled { cursor: not-allowed; opacity: .55; }
.app-shell { min-height: 100vh; max-width: 1440px; margin: 0 auto; }
.topbar { position: sticky; top: 0; z-index: 10; display: flex; align-items: center; justify-content: space-between; height: auto; min-height: 64px; padding: 0 5vw; background: rgba(248,250,249,.95); backdrop-filter: blur(18px); border-bottom: 1px solid rgba(17,17,17,.06); }
.topbar-left { display:flex; align-items:center; gap: 6px; }
.top-nav { display:flex; align-items:center; gap: 2px; margin-left: 20px; }
.top-nav-item { position:relative; display:inline-flex; align-items:center; gap: 6px; padding: 8px 16px; border:0; border-radius: 999px; background: transparent; color: var(--muted); font-size: 14px; font-weight: 600; white-space:nowrap; transition: background .2s, color .2s; }
.top-nav-item:hover { background: rgba(0,180,140,.08); color: var(--primary-deep); }
.top-nav-item.active { background: linear-gradient(135deg, #e6fff7, #d4f9ef); color: #066; font-weight: 800; }
.top-nav-item .nav-badge { margin-left: 6px; }
.brand { display:flex; align-items:center; gap:12px; border:0; padding:0; background:transparent; color:inherit; font:inherit; font-weight:800; letter-spacing:-.04em; text-align:left; }
.brand:hover { color:var(--primary-deep); }
.brand:focus-visible { outline:3px solid rgba(0,175,137,.35); outline-offset:5px; border-radius:12px; }
.brand-mark { display:grid; place-items:center; width: 36px; height:36px; border-radius: 13px; background: var(--primary); color:#0d332c; }
.brand-logo { width: 36px; height: 36px; object-fit: cover; border-radius: 13px; background: #effffb; }
.brand small { display:block; margin-top: 1px; color: var(--muted); font-size: 11px; font-weight: 500; letter-spacing: .08em; }
.top-actions { display:flex; gap: 10px; align-items:center; }
.locale-switch { display:inline-flex; align-items:center; gap:5px; padding:0 4px; color:var(--muted); font-size:13px; white-space:nowrap; }
.locale-switch button { padding:5px 2px; border:0; background:transparent; color:inherit; font:inherit; cursor:pointer; }
.locale-switch button.active { color:var(--primary-deep); font-weight:800; }
.locale-switch button:hover, .locale-switch button:focus-visible { color:var(--primary-deep); outline:none; }
.btn { border: 0; border-radius: 999px; padding: 11px 18px; font-weight: 700; }
.btn-primary { background: var(--primary); color: #10372f; }
.btn-ghost { background: transparent; border: 1px solid var(--line); color: var(--muted); }
/* 布局：无侧边栏，内容直接撑满 */
.content { width: min(100%, 1080px); padding: clamp(24px, 4vw, 56px); margin: 0 auto; }
.site-footer { max-width:1440px; margin:0 auto; padding:20px 5vw 32px; color:var(--muted); font-size:12px; text-align:left; }
.site-footer a { color:inherit; text-decoration:none; }
.site-footer a:hover, .site-footer a:focus-visible { color:var(--primary-deep); text-decoration:underline; outline:none; }
.page-heading { display:flex; align-items:flex-end; justify-content:space-between; gap: 20px; margin-bottom: 24px; }
.feed-head { margin-bottom: 24px; }
.feed-head-text { max-width: 720px; }
.feed-title { margin: 0 0 8px; font-size: clamp(24px, 4vw, 34px); font-weight: 800; letter-spacing: -0.01em; line-height: 1.2; color: var(--ink); }
.feed-subtitle { margin: 0 0 18px; color: var(--muted); font-size: clamp(14px, 2vw, 16px); line-height: 1.6; }
.feed-cta-row { display: flex; flex-wrap: wrap; gap: 12px; }
.btn-outline { background: transparent; color: #0b5c4c; border: 1.5px solid var(--primary-deep, #0b7d6c); }
.btn-outline:hover { background: rgba(0,255,204,.10); }
.kicker { display:block; margin-bottom: 8px; color: var(--primary-deep); font-size: 11px; font-weight: 800; letter-spacing: .16em; }
h1, h2, h3, p { margin: 0; }
h1 { font-size: clamp(30px, 5vw, 48px); letter-spacing: -.06em; line-height: 1.03; }
.subtitle { margin-top: 10px; color: var(--muted); }
.hero { display:grid; grid-template-columns: 1fr auto; gap: 25px; min-height:342px; padding: clamp(24px, 4vw, 42px); margin-bottom: 22px; overflow:hidden; background: linear-gradient(130deg, #fff 0%, #effff9 100%); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); }
.hero h2 { max-width: 600px; font-size: clamp(26px, 4vw, 44px); line-height: 1.15; letter-spacing: -.06em; }
.hero-ai-input { display:flex; align-items:center; width:min(84%, 680px); margin-top:18px; padding:5px 6px 5px 17px; border:1px solid #ccefe5; border-radius:999px; background:rgba(255,255,255,.88); color:var(--muted); text-align:left; box-shadow:0 10px 22px rgba(20,50,45,.06); transition:border-color .2s, box-shadow .2s, transform .2s; }
.hero-ai-input:focus-within, .hero-ai-input:hover { border-color:var(--primary-deep); box-shadow:0 12px 26px rgba(0,136,102,.14); transform:translateY(-1px); }
.hero-ai-input input { min-width:0; flex:1; height:38px; border:0; outline:0; background:transparent; color:var(--ink); font:inherit; }
.hero-ai-input input::placeholder { color:var(--muted); opacity:1; }
.hero-ai-input button { display:grid; place-items:center; flex:0 0 36px; width:36px; height:36px; padding:0; border:0; border-radius:50%; background:var(--primary); color:#10372f; cursor:pointer; }
.hero-ai-input b { font-size:19px; line-height:1; }
.hero-orbit { display:grid; place-items:center; width: 140px; height:140px; border-radius: 50%; background: var(--primary); color:#0b3a30; font-size: 46px; transform: rotate(8deg); box-shadow: 18px 18px 0 #d9fff5; }
.avatar-stack { display:inline-flex; align-items:center; gap:0; margin-top:28px; }
.avatar-stack-img { width:40px; height:40px; border-radius:50%; object-fit:cover; border:2.5px solid #fff; flex-shrink:0; margin-left:-10px; box-shadow:0 1px 4px rgba(10,30,27,.12); transition:transform .2s, z-index .2s; }
.avatar-stack-img:first-child { margin-left:0; }
.avatar-stack-img:hover { transform:translateY(-3px) scale(1.08); z-index:10 !important; }
.avatar-stack-count { margin-left:14px; font-size:15px; font-weight:600; color:var(--ink); white-space:nowrap; letter-spacing:.01em; }

/* ===== Landing Page（全屏 AI 入口首屏）===== */
.landing-page { display:flex; flex-direction:column; align-items:center; justify-content:center; min-height:calc(100vh - 140px); padding: clamp(40px, 6vw, 80px) clamp(20px, 5vw, 60px); }
.landing-hero { position:relative; display:grid; grid-template-columns: 1fr auto; gap: clamp(24px, 4vw, 50px); align-items:center; width:100%; max-width: 1040px; min-height:340px; padding: 52px 44px; background: linear-gradient(130deg, #fff 0%, #effff9 100%); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); overflow:hidden; }
.landing-hero-inner { display:flex; flex-direction:column; justify-content:center; position:relative; z-index:2; }
.landing-hero h1 { max-width: 600px; font-size: clamp(28px, 4.5vw, 52px); line-height: 1.12; letter-spacing: -.05em; }
.landing-ai-form { width:min(88%, 720px); margin-top: 22px; position:relative; z-index:2; }
/* ── Landing 副标题 + About Us（品牌主色 #00FFCC）── */
.landing-subtitle { margin: clamp(26px, 4vw, 40px) 0 0; max-width: 780px; text-align: center; font-size: clamp(20px, 2.8vw, 32px); line-height: 1.35; letter-spacing: -.03em; color: var(--ink); }
.about-section { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: clamp(28px, 5vw, 64px); align-items: center; width: 100%; max-width: 1040px; margin-top: clamp(44px, 6vw, 72px); }
.about-kicker { display: inline-block; margin-bottom: 12px; padding: 5px 12px; border-radius: 999px; background: rgba(0,255,204,.16); color: #00795f; font-size: 11px; font-weight: 800; letter-spacing: .18em; }
/* About Us 主内容段：取消大标题后，描述文案直接作为引导段呈现 */
.about-lead { margin: 0 0 26px; max-width: 46ch; color: #14403a; font-size: clamp(16px, 1.5vw, 20px); font-weight: 500; line-height: 1.85; letter-spacing: -.01em; }
.about-features { list-style: none; margin: 0 0 24px; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 18px; }
.about-features li { display: flex; gap: 10px; align-items: flex-start; }
.about-icon { display: grid; place-items: center; flex-shrink: 0; width: 36px; height: 36px; border-radius: 11px; background: #00FFCC; box-shadow: 0 6px 14px rgba(0,255,204,.35); font-size: 16px; }
.about-features strong { display: block; font-size: 14px; line-height: 1.4; }
.about-features small { display: block; margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.65; }
.about-btn { padding: 13px 30px; border: 0; border-radius: 999px; background: #00FFCC; color: #05372b; font-weight: 800; letter-spacing: .02em; cursor: pointer; box-shadow: 0 14px 30px rgba(0,255,204,.38); transition: transform .2s, box-shadow .2s; }
.about-btn:hover { transform: translateY(-2px); box-shadow: 0 18px 36px rgba(0,255,204,.46); }
.about-visual { position: relative; min-height: 440px; }
.about-blob { position: absolute; inset: 6% 2% 0 6%; background: #00FFCC; opacity: .16; border-radius: 46% 54% 52% 48% / 48% 44% 56% 52%; }
.about-img { position: absolute; object-fit: cover; border-radius: 6px; box-shadow: 0 18px 40px rgba(15,38,34,.16); }
.about-img-a { width: 58%; height: 42%; left: 6%; top: 2%; }
.about-img-b { width: 36%; height: 30%; right: 0; top: 0; }
.about-img-c { width: 48%; height: 44%; left: 14%; bottom: 0; }

/* ── Why Tripfaraway：左图组 + 右内容（参考 FitLife 版式，品牌色 #00FFCC）── */
.why-section { display: grid; grid-template-columns: 1fr 1.05fr; gap: clamp(32px, 5vw, 72px); align-items: center; margin-top: clamp(56px, 8vw, 110px); }
.why-visual { display: flex; flex-direction: column; gap: 20px; }
.why-img { width: 80%; height: clamp(140px, 18vw, 200px); object-fit: cover; border-radius: 14px; box-shadow: 0 18px 40px rgba(15,38,34,.16); }
.why-img-1 { align-self: flex-start; }
.why-img-2 { align-self: flex-end; }
.why-img-3 { align-self: center; }
.why-kicker { display: inline-block; margin-bottom: 12px; padding: 5px 12px; border-radius: 999px; background: rgba(0,255,204,.16); color: #00795f; font-size: 11px; font-weight: 800; letter-spacing: .18em; }
.why-title { margin: 0 0 14px; font-size: clamp(26px, 3.4vw, 40px); line-height: 1.16; letter-spacing: -.03em; }
.why-desc { margin: 0 0 26px; color: var(--muted); font-size: 14px; line-height: 1.85; }
.why-list { list-style: none; margin: 0 0 30px; padding: 0; display: flex; flex-direction: column; gap: 20px; }
.why-list li { display: flex; gap: 12px; align-items: flex-start; }
.why-check { display: grid; place-items: center; flex-shrink: 0; width: 24px; height: 24px; margin-top: 1px; border-radius: 50%; background: #00FFCC; box-shadow: 0 5px 12px rgba(0,255,204,.35); color: #05372b; font-size: 12px; font-weight: 900; }
.why-list strong { display: block; font-size: 15px; line-height: 1.4; }
.why-list p { margin: 5px 0 0; color: var(--muted); font-size: 13px; line-height: 1.7; }
.why-btn { padding: 13px 30px; border: 0; border-radius: 12px; background: #00FFCC; color: #05372b; font-weight: 800; letter-spacing: .02em; cursor: pointer; box-shadow: 0 14px 30px rgba(0,255,204,.38); transition: transform .2s, box-shadow .2s; }
.why-btn:hover { transform: translateY(-2px); box-shadow: 0 18px 36px rgba(0,255,204,.46); }

/* ── Hero 沉浸式图片：左模糊 → 右清晰横向渐变 ── */
.hero-visual { position:absolute; right:0; top:0; bottom:0; width:55%; max-width:520px; pointer-events:none; z-index:1; }
.hero-visual img { position:absolute; inset:0; width:100%; height:100%; object-fit: cover; object-position: center 30%; }
.hero-visual-blur { filter: blur(22px) brightness(1.18) saturate(0.85); opacity:.58; }
.hero-visual-sharp { -webkit-mask-image: linear-gradient(90deg, transparent 0%, rgba(0,0,0,0) 25%, rgba(0,0,0,.45) 45%, rgba(0,0,0,.82) 65%, #000 100%); mask-image: linear-gradient(90deg, transparent 0%, rgba(0,0,0,0) 25%, rgba(0,0,0,.45) 45%, rgba(0,0,0,.82) 65%, #000 100%); animation: hero-reveal 2s cubic-bezier(.22,.61,.36,1) .3s forwards; opacity:0; }
@keyframes hero-reveal { from { opacity:0; } to { opacity:1; } }

/* ── Landing 气泡流（磨砂玻璃胶囊，卡片与导航之间）── */
.landing-bubble-stream { position:relative; min-height:64px; margin-top: clamp(28px, 4vw, 44px); display:flex; align-items:center; justify-content:center; overflow:hidden; }
.landing-bubble { position:absolute; left:50%; top:50%; display:inline-flex; align-items:center; gap:10px; padding:9px 18px 9px 12px; border-radius:999px; background:rgba(255,255,255,.55); backdrop-filter:blur(12px) saturate(1.4); -webkit-backdrop-filter:blur(12px) saturate(1.4); border:1px solid rgba(0,200,140,.22); box-shadow:0 0 18px rgba(0,220,160,.10), inset 0 0 12px rgba(255,255,255,.5); white-space:nowrap; opacity:0; transform:translate(-50%, calc(-50% + 16px)) scale(.96); transition:opacity .5s cubic-bezier(.22,.61,.36,1), transform .5s cubic-bezier(.22,.61,.36,1), filter .5s; will-change:transform, opacity; }
.landing-bubble.bubble-enter { opacity:1; transform:translate(-50%, -50%) scale(1); }
.landing-bubble.bubble-exit { opacity:0; transform:translate(-50%, calc(-50% + 10px)) scale(.92); filter:blur(1.5px); pointer-events:none; }
.landing-bubble-avatar { width:28px; height:28px; border-radius:50%; object-fit:cover; border:1.5px solid rgba(255,255,255,.7); flex-shrink:0; background:#e5faf4; }
.landing-bubble-text { font-size:13px; color:var(--ink); white-space:nowrap; letter-spacing:.01em; font-weight:500; }

.grid { display:grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 18px; }
.card { padding: 22px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); }
.card-head { display:flex; align-items:flex-start; justify-content:space-between; gap: 12px; }
.card h3 { font-size: 20px; letter-spacing: -.03em; }
.tag { display:inline-flex; padding: 6px 10px; border-radius: 999px; background:#f2f7f5; color:var(--muted); font-size: 12px; }
.author { display:flex; align-items:center; gap: 10px; margin-bottom: 18px; }
.avatar { display:grid; place-items:center; width:38px; height:38px; overflow:hidden; border-radius: 50%; background:#e5faf4; }
.avatar img { width:100%; height:100%; object-fit:cover; }
.author small { display:block; color: var(--muted); }
.gender-icon { font-weight: 700; }
.gender-female { color: #F777B5; }
.gender-male { color: #4a90e2; }
.gender-unknown { color: #94a3b8; }
.invite-declaration { margin: 16px 0; padding: 12px 14px; border-left: 3px solid var(--primary); background: #f7fffc; color: #42635b; font-size: 14px; }
.meta { display:flex; flex-wrap:wrap; gap: 8px 14px; color: var(--muted); font-size: 13px; }
.card-actions { display:flex; justify-content:flex-end; gap: 9px; margin-top: 20px; }
.empty { padding: 50px 20px; text-align:center; color:var(--muted); }
.empty strong { display:block; margin-bottom:8px; color:var(--ink); font-size:20px; }
/* 当 grid 里只有一个空状态卡片时，居中显示 */
.grid > .card:only-child { max-width: 520px; margin: 0 auto; }

/* ── FEED 出行邀约卡片：Progressive Blur 玻璃卡（适配现有网页主题）── */
.feed-card { position: relative; overflow: hidden; padding: 0; height: 520px; min-height: 520px; display: flex; flex-direction: column; border: 1px solid rgba(255,255,255,.55); border-radius: var(--radius); box-shadow: var(--shadow); background: linear-gradient(155deg, var(--c1, #2bd4c0), var(--c2, #0b7d6c)); transition: transform .25s cubic-bezier(.22,.61,.36,1), box-shadow .25s; }
.feed-card:hover { transform: translateY(-5px); box-shadow: 0 28px 64px rgba(15,38,34,.18); }
.feed-card-cover { position: absolute; inset: 0; background: url('/feed-cover.png') center / cover no-repeat, linear-gradient(155deg, var(--c1, #2bd4c0), var(--c2, #0b7d6c)); }
.feed-card-cover::after { content: ""; position: absolute; inset: 0; background: radial-gradient(130% 90% at 82% 8%, rgba(255,255,255,.28), transparent 48%), linear-gradient(180deg, rgba(0,0,0,0) 52%, rgba(0,0,0,.42) 100%); }
/* 收藏爱心：右上角；默认空心（白色描边），is-fav 时填充红色。inset 留出 14px，避免被卡片 28px 圆角裁切 */
.feed-fav { position: absolute; top: 14px; right: 14px; z-index: 3; box-sizing: border-box; display: grid; place-items: center; width: 36px; height: 36px; padding: 0; margin: 0; border: 0; border-radius: 50%; overflow: visible; line-height: 0; background: rgba(0,0,0,.18); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); cursor: pointer; transition: transform .18s cubic-bezier(.34,1.56,.64,1), background .2s; }
.feed-fav:hover { background: rgba(0,0,0,.28); }
.feed-fav:active { transform: scale(.86); }
.feed-fav svg { width: 19px; height: 19px; fill: none; stroke: #fff; stroke-width: 1.8; stroke-linejoin: round; transition: fill .2s, stroke .2s; }
.feed-fav.is-fav { background: rgba(230,82,82,.16); }
.feed-fav.is-fav svg { fill: #e65252; stroke: #e65252; }
/* 玻璃信息面板：底部黑色半透明渐变区，所有邀约信息+申请按钮都收纳在内，图片主体不被大面积遮挡 */
.feed-card-glass { position: relative; z-index: 2; margin-top: auto; padding: 38px 18px 18px; color: #fff; background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,.58) 26%, rgba(0,0,0,.86) 100%); display: flex; flex-direction: column; gap: 10px; }
/* 第一行：用户名 + 旅行类型 tag */
.feed-card-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.feed-card-author { display: flex; align-items: center; gap: 8px; min-width: 0; }
.feed-card-author strong { color: #FFFFFF; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.feed-card-author small { color: rgba(255,255,255,0.85); font-size: 12px; }
.feed-card .gender-icon.gender-male, .feed-card .gender-icon.gender-female, .feed-card .gender-icon.gender-unknown { color: rgba(255,255,255,0.85); }
.feed-card .tag { background: rgba(255,255,255,.22); color: #fff; -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.feed-card .avatar { width: 32px; height: 32px; border: 1.5px solid rgba(255,255,255,.85); box-shadow: 0 2px 8px rgba(0,0,0,.14); flex-shrink: 0; }
/* 第二行：meta 芯片（时间/天数/人数/性别/费用）*/
.feed-card-meta { display: flex; flex-wrap: wrap; gap: 6px 10px; color: rgba(255,255,255,0.85); font-size: 12px; line-height: 1.6; }
.feed-card-meta span { display: inline-flex; align-items: center; }
/* 第三行：远方宣言（主内容区）*/
.feed-card-decl { margin: 4px 0 0; padding: 0; color: rgba(255,255,255,0.88); font-size: 13px; line-height: 1.65; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
.feed-card .card-actions { margin-top: auto; }
/* 发布邀约表单：封面图片上传入口 */
.cover-upload { display: flex; flex-direction: column; gap: 10px; }
.cover-upload-btn { width: 100%; padding: 12px; border: 1.5px dashed var(--line); border-radius: 12px; background: #f7fbf9; color: var(--muted); font-size: 13px; transition: border-color .18s, color .18s, background .18s; }
.cover-upload-btn:hover { border-color: var(--primary-deep); color: var(--primary-deep); background: #eefaf5; }
.cover-upload-preview { width: 100%; max-height: 160px; object-fit: cover; border-radius: 12px; border: 1px solid var(--line); }
.feed-pager { display:flex; align-items:center; justify-content:center; flex-wrap:wrap; gap: 10px; margin-top: 28px; padding-top: 22px; border-top: 1px solid var(--line); }
.pager-btn { padding: 9px 18px; border:1px solid var(--line); border-radius: 999px; background:#fff; color:var(--primary-deep); font-weight:700; transition: border-color .18s, transform .1s, opacity .18s; }
.pager-btn:hover:not(:disabled) { border-color:var(--primary-deep); transform:translateY(-1px); }
.pager-btn:disabled { cursor:not-allowed; opacity:.45; }
.pager-pages { display:inline-flex; gap:6px; }
.pager-page { min-width:38px; height:38px; padding:0 8px; border:1px solid var(--line); border-radius:12px; background:#fff; color:var(--muted); font-weight:700; transition: border-color .18s, background .18s, color .18s; }
.pager-page:hover:not(:disabled) { border-color:var(--primary-deep); color:var(--primary-deep); }
.pager-page.active { background:var(--primary); border-color:var(--primary); color:#10372f; cursor:default; }
.pager-status { margin-left: 4px; color:var(--muted); font-size:13px; }
.plan-card { grid-column: span 2; }
.plan-overview { display:flex; align-items:center; justify-content:space-between; gap: 20px; padding: 20px; margin: 16px 0; background:#f4fffb; border-radius: 22px; }
.day-tabs { display:flex; gap: 8px; overflow:auto; margin: 18px 0; padding-bottom: 5px; }
.day-tab { flex: 0 0 auto; padding: 10px 14px; border: 1px solid var(--line); border-radius: 14px; background:white; color:var(--muted); }
.day-tab.active { border-color:var(--primary); background:var(--primary); color:#10372f; font-weight:700; }
.day-detail-header { display:flex; align-items:center; gap:10px; margin: 20px 0 10px; }
.day-detail-badge { display:inline-flex; align-items:center; padding:6px 11px; border-radius:10px; background: rgba(0, 255, 204, .16); color:#9dffe8; font-weight:800; }
.day-detail-title { font-size:18px; color:var(--ink); }
.timeline { display:grid; gap: 0; }
.timeline-item { display:grid; grid-template-columns: 58px 34px 1fr; gap: 10px; min-height: 86px; }
.timeline-left { padding-top: 17px; text-align:right; }
.timeline-time { color:var(--primary-deep); font-weight:700; font-size:14px; }
.timeline-center { position:relative; display:flex; justify-content:center; }
.timeline-dot { z-index:1; width:30px; height:30px; margin-top:12px; display:grid; place-items:center; border-radius:50%; background:#e7fff7; border:1px solid #a7efdd; font-size:16px; }
.timeline-line { position:absolute; top:42px; bottom:0; width:2px; background:#c9eee5; }
.timeline-right { padding: 8px 0 14px; }
.timeline-card { padding:15px 16px; border:1px solid var(--line); border-radius:16px; background:#fff; box-shadow:0 6px 18px rgba(20,50,45,.05); }
.timeline-card-row { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }
.timeline-name { margin:0 0 6px; font-size:16px; }
.timeline-desc { margin:0; color:var(--muted); font-size:14px; line-height:1.6; }
.timeline-edit-hint { display:grid; place-items:center; width:32px; height:32px; flex:0 0 32px; border:0; border-radius:10px; background:#f4fffb; color:var(--primary-deep); font-size:16px; transition:background .2s, transform .2s; }
.timeline-edit-hint:hover, .timeline-edit-hint:focus-visible { background:var(--primary); transform:translateY(-1px); outline:none; }
.timeline-item p { color:var(--muted); font-size:14px; }
@media (max-width: 640px) { .timeline-item { grid-template-columns: 50px 30px 1fr; gap: 7px; } .timeline-card { padding:13px; } }
.service-grid { display:grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-top: 16px; }
.service { padding: 16px 10px; border:0; border-radius: 18px; background:#f8faf9; text-align:left; }
.service b { display:block; margin-top: 7px; }
.service small { color:var(--muted); }
.history-card { margin-top:18px; }
.history-tip { margin:8px 0 12px; color:var(--muted); font-size:13px; }
.history-list { display:grid; gap:10px; }
.history-item { display:grid; grid-template-columns:1fr auto; gap:10px; align-items:center; width:100%; padding:10px; border:1px solid var(--line); border-radius:16px; background:#fff; text-align:left; }
.history-menu-wrap { position:relative; }
.history-menu-trigger { display:grid; place-items:center; width:34px; height:34px; border:0; border-radius:10px; background:#f5f8f7; color:#70817c; letter-spacing:2px; }
.history-menu-trigger:hover, .history-menu-trigger:focus-visible { background:#e8faf4; color:var(--primary-deep); outline:none; }
.history-menu { position:absolute; top:40px; right:0; z-index:3; min-width:110px; padding:5px; border:1px solid var(--line); border-radius:12px; background:#fff; box-shadow:0 12px 30px rgba(20,50,45,.14); }
.history-menu button { width:100%; padding:9px 10px; border:0; border-radius:8px; background:transparent; color:#dc2626; text-align:left; font-size:13px; }
.history-menu button:hover { background:#fff4f4; }
.action-sheet { display:grid; gap:8px; margin-top:18px; }
.action-sheet-item { display:flex; align-items:center; justify-content:space-between; width:100%; padding:15px 14px; border:1px solid var(--line); border-radius:14px; background:#fbfdfc; text-align:left; font-weight:700; }
.action-sheet-item:hover { border-color:var(--primary); background:#f4fffb; }
.action-sheet-danger { color:#dc2626; }
.history-summary { display:grid; grid-template-columns:1fr auto; gap:4px 12px; min-width:0; padding:4px 6px; border:0; background:transparent; text-align:left; cursor:pointer; }
.history-summary span, .history-summary small { color:var(--muted); }
.history-summary small { grid-column:1 / -1; font-size:12px; }
.history-item.active { border-color:var(--primary-deep); background:#f4fffb; }
.btn-danger { border:1px solid #fecaca; background:#fff7f7; color:#dc2626; }
.btn-danger:hover { background:#fee2e2; }
.chat-layout { display:grid; grid-template-columns: 1fr; min-height: 82vh; }
.chat-messages { display:flex; flex-direction:column; gap:12px; min-height: 68vh; max-height: 78vh; overflow:auto; padding: 10px 0 20px; }
.chat-message { max-width: min(760px, 92%); }
.chat-message.user { align-self:flex-end; }
.bubble { width:fit-content; max-width:100%; padding:15px 18px; border-radius:20px; background:#fff; border:1px solid var(--line); font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", Roboto, "Helvetica Neue", Arial, sans-serif; font-size:18px; line-height:1.8; white-space:normal; }
.ai-thinking { display:inline-flex; align-items:baseline; min-width:148px; color:var(--muted); }
.thinking-dots { display:inline-flex; align-items:center; gap:5px; margin-left:10px; vertical-align:middle; }
.thinking-dots b { display:block; width:7px; height:7px; border-radius:50%; background:#00FFCC; transform:scale(.62); opacity:.32; animation:thinking-dot-wave 1s ease-in-out infinite; }
.thinking-dots b:nth-child(2) { animation-delay:.16s; }
.thinking-dots b:nth-child(3) { animation-delay:.32s; }
@keyframes thinking-dot-wave { 0%, 100% { transform:scale(.62); opacity:.32; } 45% { transform:scale(1.22); opacity:1; } }
@media (prefers-reduced-motion: reduce) { .thinking-dots b { animation:none; transform:scale(1); opacity:1; } }
.message-bold { display:inline; margin:0; color:inherit; font:inherit; font-weight:700; }
.message-link { color:var(--primary-deep); font-weight:700; text-decoration:none; border-bottom:1px solid currentColor; word-break:break-all; }
.message-link:hover { color:var(--accent); border-color:var(--accent); }
.message-link:focus-visible { outline:2px solid var(--accent); outline-offset:2px; border-radius:2px; }
.message-image-wrap { display:block; margin:8px 0 0; }
.message-image { display:block; max-width:100%; max-height:240px; object-fit:cover; border-radius:12px; border:1px solid var(--line); background:#f5f7f6; }
/* ---- 酒店结构化卡片（rollinggo 实时数据，独立于 LLM markdown 渲染） ---- */
.ai-hotel-cards { display:block; margin:14px 0 0; padding:14px; border-radius:16px; background:#f7f9fa; border:1px solid var(--line); }
.ai-hotel-cards-head { display:flex; flex-direction:column; gap:4px; margin-bottom:12px; }
.ai-hotel-cards-head h3 { margin:0; font-size:15px; font-weight:800; color:var(--ink); letter-spacing:.2px; }
.ai-hotel-kicker { font-size:10px; font-weight:800; letter-spacing:1.5px; color:var(--primary-deep); text-transform:uppercase; }
.ai-hotel-truncated { margin:6px 0 0; font-size:12px; color:#a8622a; background:#fff5e8; border:1px solid #f5d6a8; border-radius:8px; padding:6px 10px; }
.ai-hotel-cards-grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:12px; }
.ai-hotel-card { display:flex; gap:10px; padding:10px; border-radius:12px; background:#fff; border:1px solid var(--line); box-shadow:0 1px 2px rgba(15,30,25,.04); transition:transform .25s ease, box-shadow .25s ease; }
.ai-hotel-card:hover { transform:translateY(-1px); box-shadow:0 6px 18px rgba(15,30,25,.08); }
.ai-hotel-image-wrap { flex:0 0 96px; width:96px; height:96px; border-radius:10px; overflow:hidden; background:#eef2f5; display:flex; align-items:center; justify-content:center; }
.ai-hotel-image { width:100%; height:100%; object-fit:cover; display:block; }
.ai-hotel-image-placeholder { font-size:32px; color:var(--muted); }
.ai-hotel-body { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:4px; }
.ai-hotel-head { display:flex; flex-wrap:wrap; align-items:center; gap:6px; }
.ai-hotel-name { margin:0; font-size:14px; font-weight:800; color:var(--ink); line-height:1.25; flex:1 1 auto; min-width:0; word-break:break-word; }
.ai-hotel-score { font-size:11px; font-weight:700; color:#a8622a; background:#fff5e8; border-radius:999px; padding:2px 8px; }
.ai-hotel-star { font-size:11px; font-weight:700; color:#075b4c; background:#e8fff7; border-radius:999px; padding:2px 8px; }
.ai-hotel-addr { margin:0; font-size:12px; color:var(--muted); line-height:1.4; overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.ai-hotel-tags { display:flex; flex-wrap:wrap; gap:4px; }
.ai-hotel-tags span { font-size:10px; font-weight:700; color:var(--muted); background:#f2f4f6; border-radius:6px; padding:2px 6px; }
.ai-hotel-foot { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:auto; padding-top:4px; }
.ai-hotel-price { font-size:14px; font-weight:800; color:var(--ink); }
.ai-hotel-price small { font-size:11px; font-weight:600; color:var(--muted); margin-left:2px; }
.ai-hotel-booking { display:inline-block; padding:6px 10px; border-radius:8px; background:var(--primary-deep); color:#fff; font-size:12px; font-weight:800; text-decoration:none; white-space:nowrap; transition:background .2s ease; }
.ai-hotel-booking:hover { background:var(--accent); }
.ai-hotel-booking-disabled { background:#dde2e6; color:#7a828a; cursor:not-allowed; }
@media (max-width:520px) { .ai-hotel-cards-grid { grid-template-columns:1fr; } .ai-hotel-image-wrap { flex-basis:80px; width:80px; height:80px; } }
.space-discussions .bubble .message-bold { display:inline; margin:0; font-size:inherit; line-height:inherit; }
.space-discussions .bubble { border-left:3px solid #d6e8e3; }
.space-discussions .bubble.own-message { margin-left:auto; background:#e8fff7; border-left-color:var(--primary-deep); }
.space-discussions .bubble.ai-message { border-color:#78d9be; border-left:3px solid #00b88e; background:#f0fff9; }
.space-discussions .bubble strong { display:block; margin-bottom:4px; color:var(--ink); font-size:13px; }
.system-member-tag { display:inline-block; margin-left:8px; padding:2px 6px; border-radius:999px; color:#075b4c; background:#bdf8e4; font-size:10px; font-weight:800; vertical-align:middle; }
.space-member-list { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:10px; }
.space-member { display:inline-flex; align-items:center; gap:5px; padding:7px 10px; border:1px solid var(--line); border-radius:999px; color:var(--muted); background:#fff; font-size:12px; font-weight:700; }
.space-member.ai-member { color:#075b4c; border-color:#63cfae; background:#e8fff7; }
.space-member small { padding:1px 5px; border-radius:999px; color:#075b4c; background:#bdf8e4; font-size:10px; }
.space-ai-hint { margin:0 0 16px; color:var(--muted); font-size:13px; line-height:1.65; }
.space-ai-hint strong { color:var(--primary-deep); }
.chat-identity { margin:8px 0 0; color:var(--muted); font-size:12px; }
.chat-message.user .bubble { margin-left:auto; background:var(--primary); color:#10372f; border-color:transparent; }
.weather-alert-chat { width:100%; max-width:760px; }
.weather-alert-message { display:flex; align-items:flex-start; gap:12px; width:100%; padding:14px 16px; border:1px solid #f7c45d; border-left:4px solid #e58b00; border-radius:16px; background:#fff8e7; color:#724500; font-size:15px; line-height:1.65; box-shadow:0 8px 20px rgba(178,105,0,.09); }
.weather-alert-icon { display:grid; flex:0 0 30px; place-items:center; width:30px; height:30px; border-radius:50%; background:#ffe1a1; font-size:17px; line-height:1; }
.weather-alert-body { min-width:0; overflow-wrap:anywhere; }
.weather-alert-body strong { display:block; margin-bottom:2px; color:#8a5000; font-size:15px; }
.space-discussions .weather-alert-message { margin:0; }
.ai-plan-card, .ai-services, .ai-bill-card { margin-top:12px; border:1px solid var(--line); border-radius:18px; background:#fff; overflow:hidden; box-shadow:0 8px 24px rgba(20,50,45,.06); }
.ai-plan-head, .ai-services-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; padding:18px; background:#f5fffb; }
.ai-plan-head h3 { margin:5px 0 2px; font-size:21px; }
.ai-plan-head p { margin:0; color:var(--muted); }
.ai-plan-meta { display:flex; flex-wrap:wrap; gap:8px; padding:12px 18px; border-bottom:1px solid var(--line); }
.ai-plan-meta span { padding:5px 9px; border-radius:999px; background:#effaf6; color:var(--primary-deep); font-size:12px; }
.ai-day { padding:14px 18px 4px; }
.ai-day-title { display:flex; gap:10px; align-items:center; margin-bottom:8px; color:var(--text); }
.ai-day-title b { color:var(--primary-deep); }
.ai-day-entry { display:grid; grid-template-columns:60px 1fr; gap:12px; padding:10px 0; border-top:1px solid #edf3f1; }
.ai-day-entry time { color:var(--primary-deep); font-weight:700; }
.ai-day-entry strong { display:block; margin-bottom:3px; }
.ai-day-entry p { margin:0; color:var(--muted); font-size:13px; line-height:1.55; }
.ai-copy-plan { margin:12px 18px 18px; }
.ai-bill-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; padding:18px; background:#f5fffb; }
.ai-bill-head h3 { margin:5px 0 0; font-size:21px; }
.ai-bill-metrics { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:8px; padding:14px 18px; }
.ai-bill-metrics div { display:grid; gap:4px; }
.ai-bill-metrics span, .ai-bill-category { color:var(--muted); font-size:12px; }
.ai-bill-metrics strong { color:#087f69; font-size:18px; }
.ai-bill-category { margin:0; padding:0 18px 14px; }
.ai-bill-settlements { display:grid; gap:8px; margin:0; padding:14px 18px 18px; border-top:1px solid var(--line); list-style:none; }
.ai-bill-settlements li { display:flex; justify-content:space-between; gap:12px; font-size:13px; }
.ai-bill-settlements .receive { color:#15803d; }.ai-bill-settlements .pay { color:#c2410c; }
.ai-services-head { padding:14px 18px; background:#fff; align-items:center; }
.ai-services-head span { color:var(--muted); font-size:12px; }
.ai-service-list { display:grid; grid-template-columns:repeat(2, 1fr); gap:8px; padding:12px; }
.ai-service { display:flex; align-items:center; gap:10px; padding:12px; border:1px solid var(--line); border-radius:14px; background:#fbfdfc; text-align:left; }
.ai-service-icon { font-size:22px; }
.ai-service b, .ai-service small { display:block; }
.ai-service small { margin-top:3px; color:var(--muted); font-size:11px; }
.ai-service em { margin-left:auto; font-style:normal; color:var(--muted); font-size:20px; }
.space-tools { display:flex; flex-wrap:wrap; gap:8px; padding-bottom:16px; border-bottom:1px solid var(--line); }
.rich-bubble { min-width:min(360px, 100%); }
.rich-label { display:block; margin-top:6px; color:var(--primary-deep); font-size:12px; font-weight:800; }
.rich-bubble p { margin:8px 0 0; color:var(--ink); }
.rich-bubble small { display:block; margin-top:8px; color:var(--muted); }
.expense-chat-card { display:grid; gap:6px; margin-top:10px; padding:14px; border:1px solid #b7f4e4; border-radius:16px; background:#f4fffb; }
.expense-chat-card h3, .expense-chat-card p { margin:0; }
.expense-chat-card > strong { font-size:26px; color:#087f69; }
.expense-chat-kicker { color:#087f69; font-size:12px; font-weight:800; }
.expense-detail-link { justify-self:start; border:0; padding:4px 0; background:transparent; color:#087f69; font-weight:800; }
.expense-member-checklist { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:8px; padding:12px; border:1px solid var(--line); border-radius:14px; }
.expense-member-option { display:flex; align-items:center; gap:7px; font-size:14px; }
.bill-overview { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:12px; margin-bottom:18px; }
.bill-overview article { display:grid; gap:8px; padding:18px; border:1px solid var(--line); border-radius:18px; background:#fff; }
.bill-overview span { color:var(--muted); font-size:13px; }.bill-overview strong { font-size:24px; color:#087f69; }
.bill-section { margin-top:18px; }.bill-settlement-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:10px; }
.bill-settlement { display:grid; gap:5px; padding:14px; border:1px solid var(--line); border-radius:15px; background:#fff; }.bill-settlement span { font-weight:800; }.bill-settlement small { color:var(--muted); font-size:12px; }
.bill-settlement.receive { border-color:#86efac; background:#f0fdf4; }.bill-settlement.receive span { color:#15803d; }.bill-settlement.pay { border-color:#fed7aa; background:#fff7ed; }.bill-settlement.pay span { color:#c2410c; }.bill-settlement.settled { background:#f8fafc; }.bill-settlement.settled span { color:#64748b; }
.bill-record-tip { margin:0 0 12px; color:var(--muted); font-size:13px; }.bill-record-list { display:grid; gap:10px; }.bill-record { display:flex; justify-content:space-between; gap:16px; padding:15px 0; border-bottom:1px solid var(--line); }.bill-record:last-child { border-bottom:0; }.bill-record h3, .bill-record p { margin:8px 0 0; }.bill-record p, .bill-record-amount small, .bill-record-time { color:var(--muted); font-size:13px; }.bill-record-note { color:var(--ink) !important; }.bill-record-time { display:block; margin-top:8px; }.bill-record-actions { display:flex; align-items:flex-start; gap:8px; flex:0 0 auto; }.bill-record-amount { display:grid; align-content:start; justify-items:end; gap:6px; padding-top:7px; white-space:nowrap; }.bill-record-menu { display:grid; place-items:center; width:34px; height:34px; flex:0 0 34px; padding:0 0 5px; border:1px solid var(--line); border-radius:10px; background:#f5f8f7; color:#70817c; font-size:17px; font-weight:800; letter-spacing:1px; line-height:1; transition:background .2s, border-color .2s, color .2s, transform .2s; }.bill-record-menu:hover, .bill-record-menu:focus-visible { border-color:#9ee7d4; background:#e8faf4; color:var(--primary-deep); outline:none; transform:translateY(-1px); }.bill-record-menu:active { transform:translateY(0); }
.web-poll-options { display:grid; gap:8px; margin-top:12px; }
.web-poll-options .btn { width:100%; text-align:left; }
.chat-compose { display:flex; gap: 10px; padding-top: 16px; border-top: 1px solid var(--line); }
.mention-compose { position:relative; flex:1; min-width:0; }
.chat-compose input { width:100%; min-width:0; padding: 14px 16px; border:1px solid var(--line); border-radius: 999px; outline:none; background: #fff; color: #0a1628; }
.chat-compose input:focus { border-color: var(--primary-deep); }
.chat-clear-row { display:flex; justify-content:center; padding-top: 10px; }
.chat-clear-row .btn-sm { font-size:13px; padding: 6px 14px; }

/* ── 聊天工作区：左侧对话历史 + 右侧铺满（桌面端 ChatGPT 式）── */
.chat-shell { display:flex; flex-direction:column; height:100dvh; min-height:100dvh; max-width:none; overflow:hidden; }
.chat-content { display:flex; flex:1; width:100%; max-width:none; min-height:0; padding:0; }
/* 聊天工作台内：隐藏全局页脚、强制铺满（覆盖移动端 .content padding 回退） */
.app-shell.chat-shell .site-footer { display:none; }
.app-shell.chat-shell .chat-content { padding:0; }
.chat-workspace { display:grid; grid-template-columns:272px minmax(0, 1fr); flex:1; width:100%; min-height:0; background:var(--bg); }
.chat-workspace.sidebar-collapsed { grid-template-columns:68px minmax(0, 1fr); }
.chat-scrim { display:none; }
/* 侧边栏 */
.chat-sidebar { display:flex; flex-direction:column; min-height:0; gap:10px; padding:14px 10px 10px; background:#f1faf6; border-right:1px solid rgba(4,64,52,.08); }
.chat-sidebar-head { display:flex; align-items:center; gap:8px; padding:0 2px 4px; }
.chat-new-btn { display:flex; align-items:center; gap:8px; flex:1; min-width:0; padding:10px 12px; border:1px solid rgba(4,64,52,.12); border-radius:12px; background:#fff; color:#0c4b3f; font-size:13px; font-weight:800; box-shadow:0 4px 12px rgba(15,38,34,.05); transition:background .18s, transform .18s; }
.chat-new-btn:hover { background:#eafff8; transform:translateY(-1px); }
.chat-new-btn > span:first-child { font-size:15px; line-height:1; }
.chat-new-label { overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.chat-sidebar-toggle { display:grid; place-items:center; flex:0 0 auto; width:32px; height:32px; border:1px solid rgba(4,64,52,.1); border-radius:10px; background:#fff; color:#0c4b3f; font-size:13px; }
.chat-sidebar-toggle:hover { border-color:var(--primary-deep); color:var(--primary-deep); }
.chat-session-list { flex:1; min-height:0; overflow-y:auto; margin:4px -4px 0; padding:0 4px; }
.chat-session-list ul { list-style:none; display:flex; flex-direction:column; gap:4px; margin:0; padding:0; }
.chat-session-row { position:relative; display:flex; align-items:center; }
.chat-session-item { display:flex; align-items:center; gap:9px; flex:1; min-width:0; width:100%; padding:9px 30px 9px 10px; border:0; border-radius:10px; background:transparent; color:#2c514a; font-size:13px; font-weight:600; text-align:left; transition:background .16s, color .16s; }
.chat-session-item:hover { background:rgba(0,255,204,.16); }
.chat-session-row.is-active .chat-session-item { background:rgba(0,255,204,.34); color:#064a3d; }
.chat-session-icon { flex:0 0 auto; color:var(--primary-deep); font-size:11px; }
.chat-session-title { flex:1; min-width:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.chat-session-del { position:absolute; right:6px; display:grid; place-items:center; width:22px; height:22px; border:0; border-radius:7px; background:transparent; color:#7c9691; font-size:11px; opacity:0; transition:opacity .16s, background .16s, color .16s; }
.chat-session-row:hover .chat-session-del, .chat-session-del:focus-visible { opacity:1; }
.chat-session-del:hover { background:rgba(220,38,38,.1); color:#dc2626; }
.chat-sidebar-foot { display:flex; flex-direction:column; gap:2px; padding:10px 10px 4px; border-top:1px solid rgba(4,64,52,.08); }
.chat-sidebar-brand { color:#0c4b3f; font-size:12px; font-weight:800; }
.chat-sidebar-foot small { color:#8aa39d; font-size:10px; line-height:1.5; }
.chat-sidebar.is-collapsed .chat-new-btn { justify-content:center; padding:10px 0; }
.chat-sidebar.is-collapsed .chat-session-item { justify-content:center; padding:9px 0; }
.chat-sidebar.is-collapsed .chat-new-label,
.chat-sidebar.is-collapsed .chat-session-title,
.chat-sidebar.is-collapsed .chat-session-del,
.chat-sidebar.is-collapsed .chat-sidebar-foot small { display:none; }
/* 主对话区 */
.chat-main { display:flex; flex-direction:column; min-width:0; min-height:0; }
.chat-main-head { display:flex; align-items:center; gap:12px; flex:0 0 auto; height:56px; padding:0 18px; border-bottom:1px solid rgba(17,17,17,.06); background:rgba(248,250,249,.9); backdrop-filter:blur(10px); }
.chat-icon-btn { display:grid; place-items:center; width:34px; height:34px; border:1px solid var(--line); border-radius:10px; background:#fff; color:#2c514a; font-size:15px; }
.chat-icon-btn:hover { border-color:var(--primary-deep); color:var(--primary-deep); }
.chat-main-title { display:flex; flex:1; flex-direction:column; min-width:0; }
.chat-main-title strong { font-size:14px; }
.chat-main-title small { color:var(--muted); font-size:11px; }
.chat-main-scroll { display:flex; flex:1; flex-direction:column; min-height:0; overflow-y:auto; padding:18px clamp(18px, 5vw, 80px) 18px; }
.chat-thread { display:flex; flex-direction:column; gap:16px; width:100%; max-width:840px; margin:0 auto; }
.chat-composer { flex:0 0 auto; padding:6px clamp(18px, 5vw, 80px) 20px; background:linear-gradient(180deg, rgba(248,250,249,0), rgba(248,250,249,.94) 38%); }
.chat-composer .chat-compose { max-width:840px; gap:8px; margin:0 auto; padding:7px 8px 7px 18px; border:1px solid var(--line); border-radius:26px; background:#fff; box-shadow:0 14px 34px rgba(15,38,34,.09); }
.chat-composer .chat-compose input { width:100%; min-width:0; padding:11px 6px; border:0; border-radius:0; background:transparent; font-size:15px; outline:none; }
.chat-send { flex:0 0 auto; width:42px; height:42px; padding:0; border-radius:50%; font-size:17px; }
.chat-composer-foot { display:flex; align-items:center; justify-content:space-between; gap:12px; max-width:840px; margin:8px auto 0; padding:0 8px; }
.chat-composer-foot small { color:#9bb0aa; font-size:11px; }
.chat-composer-foot .btn-sm { font-size:12px; padding:5px 12px; }
@media (max-width: 860px) {
  .chat-workspace, .chat-workspace.sidebar-collapsed { grid-template-columns:minmax(0, 1fr); }
  .chat-sidebar { position:fixed; z-index:60; top:0; bottom:0; left:0; width:272px; transition:transform .24s ease; box-shadow:0 20px 50px rgba(4,51,42,.2); }
  .chat-sidebar.is-collapsed { transform:translateX(-100%); }
  .chat-workspace:not(.sidebar-collapsed) .chat-scrim { position:fixed; z-index:50; inset:0; display:block; background:rgba(6,40,34,.32); }
  .chat-main-scroll { padding:22px 16px 14px; }
  .chat-composer { padding:6px 16px 16px; }
}
.mention-menu { position:absolute; z-index:20; left:0; right:0; bottom:calc(100% + 8px); max-height:220px; overflow:auto; padding:6px; border:1px solid var(--line); border-radius:14px; background:#fff; box-shadow:0 14px 32px rgba(18,48,42,.14); }
.mention-menu[hidden] { display:none; }
.mention-menu-item { display:flex; width:100%; align-items:center; justify-content:space-between; gap:12px; padding:10px 12px; border:0; border-radius:10px; color:var(--ink); background:transparent; text-align:left; cursor:pointer; }
.mention-menu-item:hover, .mention-menu-item:focus { background:#e8fff7; outline:none; }
.mention-menu-item strong { font-size:13px; }
.mention-menu-item small { color:var(--muted); font-size:11px; }
.mention-menu-item.ai-member strong { color:#075b4c; }
.profile-hero { display:flex; align-items:center; gap: 18px; padding: 24px; margin-bottom:18px; background: #111; color:white; border-radius: var(--radius); }
.profile-hero .avatar { width:74px; height:74px; font-size:30px; background:#d8fff4; }
.profile-hero small { display:block; color:#a9b5b2; }
.profile-account-id { margin-top:4px; font-size:11px; letter-spacing:.02em; opacity:.9; }
.menu-list { display:grid; gap: 10px; }
.menu-row { display:flex; align-items:center; gap:14px; padding: 17px; border:1px solid var(--line); border-radius: 18px; background:white; }
.menu-copy { flex:1; }
.menu-copy small { display:block; margin-top:3px; color:var(--muted); }
.menu-arrow { color:#a4afac; font-size:24px; }
.modal-backdrop { position:fixed; inset:0; z-index:20; display:grid; place-items:center; padding:20px; background:rgba(10,30,27,.35); backdrop-filter: blur(8px); }
.modal { width:min(560px, 100%); max-height:90vh; overflow:auto; padding:24px; background:white; border-radius:28px; box-shadow: 0 30px 100px rgba(0,0,0,.2); }
.hero-ai-backdrop { position:fixed; inset:0; z-index:40; display:flex; align-items:flex-end; background:rgba(10,30,27,.38); backdrop-filter:blur(8px); animation:hero-ai-fade .2s ease-out; }
.hero-ai-drawer { display:grid; grid-template-rows:auto minmax(0, 1fr) auto; width:100%; height:clamp(540px, 80vh, 920px); min-height:540px; padding:20px clamp(18px, 5vw, 72px) max(20px, env(safe-area-inset-bottom)); background:#fff; border-radius:30px 30px 0 0; box-shadow:0 -20px 80px rgba(0,0,0,.18); animation:hero-ai-rise .24s ease-out; }
.hero-ai-drawer-head { display:flex; align-items:flex-start; justify-content:space-between; gap:18px; padding:0 0 16px; border-bottom:1px solid var(--line); }
.hero-ai-drawer-head .kicker { margin-bottom:5px; }
.hero-ai-drawer-head h2 { font-size:24px; letter-spacing:-.04em; }
.hero-ai-drawer-head p { margin-top:5px; color:var(--muted); font-size:14px; }
.hero-ai-close { display:grid; place-items:center; width:40px; height:40px; flex:0 0 40px; border:1px solid var(--line); border-radius:50%; background:#fff; color:#465752; font-size:28px; line-height:1; transition:background .2s, border-color .2s; }
.hero-ai-close:hover, .hero-ai-close:focus-visible { border-color:var(--primary-deep); background:#effff9; outline:none; }
.hero-ai-drawer-body { display:flex; flex-direction:column; gap:12px; min-height:0; overflow-y:auto; overscroll-behavior:contain; padding:18px 4px; scrollbar-gutter:stable; }
.hero-ai-drawer-body::-webkit-scrollbar { width:8px; }
.hero-ai-drawer-body::-webkit-scrollbar-thumb { border:2px solid #fff; border-radius:999px; background:#c6d7d2; }
.hero-ai-empty { display:grid; align-content:center; justify-items:start; gap:7px; min-height:100%; color:var(--muted); }
.hero-ai-empty strong { color:var(--ink); font-size:20px; }
.hero-ai-empty span { max-width:500px; line-height:1.7; }
.hero-ai-compose { padding:16px 0 0; }
@keyframes hero-ai-fade { from { opacity:0; } to { opacity:1; } }
@keyframes hero-ai-rise { from { transform:translateY(24px); } to { transform:translateY(0); } }
.modal-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:18px; }
.modal-head h3 { font-size:24px; }
.close { border:0; background:transparent; font-size:26px; color:var(--muted); }
.form-grid { display:grid; gap:12px; }
.form-grid input, .form-grid textarea, .form-grid select { width:100%; padding:13px 14px; border:1px solid var(--line); border-radius:14px; outline:none; }
.phone-group { display:flex; gap:8px; }
.phone-group .country-select { width:auto; min-width:130px; flex-shrink:0; }
.phone-group input { flex:1; min-width:0; }
[data-auth-method].active { background:var(--accent); color:white; }
.auth-tabs { display:flex; gap:8px; margin-bottom:12px; }
.auth-tabs button { flex:1; padding:10px 8px; border:1px solid var(--line); border-radius:999px; background:#fff; color:var(--muted); font-size:14px; cursor:pointer; transition:.2s; }
.auth-tabs button.active { background:var(--accent); color:#fff; border-color:var(--accent); font-weight:600; }
.auth-method-toggle { display:flex; gap:8px; margin-bottom:12px; }
.auth-method-toggle button { flex:1; padding:8px; border:1px solid var(--line); border-radius:999px; background:#fff; color:var(--muted); font-size:13px; cursor:pointer; transition:.2s; }
.auth-method-toggle button.active { background:#e8fff8; color:var(--accent); border-color:var(--accent); font-weight:600; }
.form-grid textarea { min-height:100px; resize:vertical; }
.form-hint { margin: -2px 0 2px; color: var(--muted); font-size: 12px; line-height: 1.5; }
.form-actions { display:flex; justify-content:flex-end; gap:10px; margin-top:18px; }
.toast { position:fixed; left:50%; bottom:28px; z-index:30; transform:translateX(-50%); padding:12px 18px; border-radius:999px; background:#111; color:white; animation:toast-in .35s ease; }
.toast.update-toast { background:linear-gradient(135deg,#00c99f,#00b38a); color:#fff; font-weight:600; letter-spacing:.02em; box-shadow:0 6px 28px rgba(0,180,130,.35); }
.toast.fade-out { opacity:0; transition:opacity .35s ease; }
@keyframes toast-in { from { opacity:0; transform:translateX(-50%) translateY(12px); } to { opacity:1; transform:translateX(-50%) translateY(0); } }
.boot-screen { min-height:100vh; display:grid; place-items:center; padding:24px; background:linear-gradient(145deg,#f7fffc 0%,#fff 52%,#f2fffb 100%); color:var(--ink); }
.boot-card { width:min(320px,100%); display:flex; flex-direction:column; align-items:center; gap:10px; padding:34px 28px; border:1px solid rgba(0,255,204,.28); border-radius:24px; background:rgba(255,255,255,.92); box-shadow:0 18px 48px rgba(18,48,42,.10); text-align:center; }
.boot-logo { width:58px; height:58px; object-fit:contain; }
.boot-card strong { font-size:21px; letter-spacing:.04em; }
.boot-card span { color:var(--muted); font-size:14px; }
.boot-card small { color:#9aa0a6; font-size:12px; }
.boot-loader { width:26px; height:26px; border:3px solid #d9fff5; border-top-color:#00c99f; border-radius:50%; animation:boot-spin .8s linear infinite; }
@keyframes boot-spin { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .boot-loader { animation:none; border-top-color:#00c99f; } }
.travel-workspace-shell { background:linear-gradient(135deg, #f8faf9 0%, #f4fffb 56%, #f8faf9 100%); }
.layout.no-sidebar { display:block; max-width:none; }
.travel-workspace-content { width:100%; max-width:none; padding:0; }
.travel-workspace { display:grid; grid-template-columns:minmax(300px, 30%) minmax(0, 70%); height:calc(100dvh - 72px); min-height:0; overflow:hidden; }
.workspace-chat-pane { display:flex; flex-direction:column; min-width:0; min-height:0; padding:clamp(24px, 3vw, 42px); overflow:hidden; background:rgba(255,255,255,.82); border-right:1px solid #dceee8; }
.workspace-pane-label { color:var(--primary-deep); font-size:11px; font-weight:800; letter-spacing:.15em; }
.workspace-chat-title { display:flex; align-items:center; gap:10px; margin-top:8px; }
.workspace-chat-title h1 { font-size:clamp(28px, 3.4vw, 42px); }
.workspace-live-dot { display:inline-flex; align-items:center; gap:5px; padding:5px 9px; border-radius:999px; background:#e8fff7; color:#087f69; font-size:12px; font-weight:700; }
.workspace-live-dot::before { width:7px; height:7px; border-radius:50%; background:var(--primary-deep); content:""; }
.workspace-chat-subtitle { margin-top:10px; color:var(--muted); font-size:14px; line-height:1.65; }
.workspace-chat-messages { display:flex; flex:1; flex-direction:column; gap:12px; min-height:260px; max-height:none; overflow:auto; margin:20px -8px 0 0; padding:4px 12px 20px 0; scrollbar-color:#b8d6cd transparent; }
.workspace-chat-messages .chat-message { max-width:100%; }
.workspace-chat-messages .bubble { font-size:15px; line-height:1.65; }
.workspace-chat-messages .ai-services, .workspace-chat-messages .ai-bill-card { margin-top:10px; }
.workspace-chat-compose { position:sticky; bottom:0; margin-top:14px; padding-top:16px; background:linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,.98) 28%); }
.workspace-exit-row { display:flex; justify-content:center; padding-top: 8px; }
.workspace-exit-row .btn-sm { font-size:12px; padding:5px 14px; color:var(--muted); }
.workspace-plan-pane { min-width:0; min-height:0; padding:clamp(24px, 4vw, 62px); overflow:auto; overscroll-behavior:contain; scrollbar-color:#b8d6cd transparent; }
.workspace-plan-hero { position:relative; display:flex; align-items:flex-end; justify-content:space-between; min-height:210px; padding:clamp(24px, 4vw, 46px); overflow:hidden; border:1px solid rgba(0,136,102,.2); border-radius:32px; background:radial-gradient(circle at 82% 20%, rgba(0,255,204,.76), transparent 24%), linear-gradient(118deg, #063b32 0%, #087f69 58%, #00ad89 100%); color:#fff; box-shadow:0 22px 48px rgba(0,86,65,.17); }
.workspace-plan-hero::before, .workspace-plan-hero::after { position:absolute; border:1px solid rgba(255,255,255,.18); border-radius:50%; content:""; }
.workspace-plan-hero::before { right:-58px; bottom:-102px; width:260px; height:260px; }
.workspace-plan-hero::after { right:66px; top:-93px; width:180px; height:180px; }
.workspace-hero-copy, .workspace-hero-shape { position:relative; z-index:1; }
.workspace-plan-hero .kicker { color:#b9ffed; }
.workspace-plan-hero h2 { max-width:680px; font-size:clamp(38px, 5.4vw, 72px); line-height:.96; letter-spacing:-.07em; }
.workspace-plan-hero p { margin-top:14px; color:#dcfff7; font-size:17px; }
.workspace-hero-shape { display:grid; place-items:center; width:76px; height:76px; border:1px solid rgba(255,255,255,.38); border-radius:26px; background:rgba(255,255,255,.14); font-size:34px; backdrop-filter:blur(8px); transform:rotate(8deg); }
.workspace-plan-heading { display:flex; align-items:flex-end; justify-content:space-between; gap:20px; margin:34px 0 16px; }
.workspace-plan-heading h2 { font-size:clamp(25px, 3vw, 38px); letter-spacing:-.055em; }
.workspace-plan-heading .kicker { margin-bottom:6px; }
.workspace-meta { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:22px; }
.workspace-meta span { max-width:100%; padding:9px 12px; overflow:hidden; border:1px solid #d9eee8; border-radius:999px; background:#fff; color:#42635b; font-size:13px; white-space:nowrap; text-overflow:ellipsis; }
.workspace-map { position:relative; min-height:210px; margin-bottom:28px; overflow:hidden; border:1px solid #d8ece6; border-radius:26px; background:linear-gradient(135deg, #effcf7 0%, #fafdff 54%, #e8fff7 100%); }
.workspace-map-fallback { position:absolute; inset:0; width:100%; height:100%; }
.workspace-map-fallback { z-index:2; pointer-events:none; }
.workspace-map-popup { min-width:190px; max-width:260px; color:#1e293b; font-family:inherit; line-height:1.45; }
.workspace-map-popup strong { display:block; color:#b42318; font-size:14px; margin-bottom:2px; }
.popup-category { display:inline-block; margin-top:2px; color:#0891b2; font-size:11px; background:#ecfeff; padding:1px 6px; border-radius:4px; }
.popup-address { margin:5px 0 0; color:#475569; font-size:12px; word-break:break-all; }
.workspace-map-popup p { margin:6px 0 0; color:#334155; font-size:12px; }
.popup-map-link { display:inline-flex; align-items:center; margin-top:8px; padding:5px 10px; color:#fff; font-size:12px; font-weight:600; background:linear-gradient(135deg,#07c160,#06ae56); border-radius:6px; text-decoration:none; transition:opacity .18s, transform .1s; }
.popup-map-link:hover { opacity:.88; transform:translateY(-1px); }
.map-grid { position:absolute; inset:0; opacity:.58; background-image:linear-gradient(#cfe9df 1px, transparent 1px), linear-gradient(90deg, #cfe9df 1px, transparent 1px); background-size:28px 28px; mask-image:linear-gradient(to bottom, #000, transparent); }
.map-route { position:absolute; inset:0; }
.map-route::before { position:absolute; top:50%; right:16%; left:18%; height:3px; border-radius:99px; background:repeating-linear-gradient(90deg, var(--primary-deep) 0 12px, transparent 12px 20px); content:""; transform:rotate(-9deg); }
.map-route i { position:absolute; width:13px; height:13px; border:3px solid var(--primary-deep); border-radius:50%; background:#fff; box-shadow:0 0 0 5px rgba(0,255,204,.18); }
.map-route i:nth-child(1) { top:37%; left:20%; }.map-route i:nth-child(2) { top:53%; left:39%; }.map-route i:nth-child(3) { top:42%; left:61%; }.map-route i:nth-child(4) { top:59%; right:17%; }
.map-pin { position:absolute; display:grid; place-items:center; width:34px; height:34px; border-radius:14px 14px 14px 2px; background:var(--primary); color:#075b4c; font-size:20px; box-shadow:0 9px 18px rgba(0,136,102,.2); transform:rotate(-45deg); }.map-pin::first-letter { transform:rotate(45deg); }
.pin-a { top:29%; left:16%; }.pin-b { right:13%; bottom:21%; }
.map-label { position:absolute; top:16px; left:18px; color:#0c5d4d; font-size:16px; font-weight:800; }.workspace-map small { position:absolute; right:18px; bottom:15px; color:#64817a; font-size:11px; }
.workspace-days { display:grid; gap:18px; }
.workspace-day { display:grid; grid-template-columns:126px minmax(0, 1fr); gap:20px; }
.workspace-day-marker { display:flex; flex-direction:column; align-items:flex-start; gap:7px; padding-top:18px; }.workspace-day-marker span { padding:7px 10px; border-radius:10px; background:var(--ink); color:#fff; font-size:12px; font-weight:800; }.workspace-day-marker small { color:var(--muted); font-size:12px; line-height:1.5; }
.workspace-day-body { min-width:0; padding:22px; border:1px solid var(--line); border-radius:24px; background:#fff; box-shadow:0 10px 28px rgba(15,38,34,.05); }.workspace-day-body h3 { margin-bottom:16px; font-size:21px; letter-spacing:-.035em; }
.workspace-items { display:grid; gap:10px; }.workspace-item { display:grid; grid-template-columns:40px minmax(0, 1fr) 28px; gap:12px; align-items:start; padding:13px; border:1px solid #e6f0ed; border-radius:17px; background:#fbfefd; }.workspace-item-icon { display:grid; place-items:center; width:40px; height:40px; border-radius:14px; background:#e9fff7; font-size:19px; }.workspace-item-top { display:flex; flex-wrap:wrap; align-items:baseline; gap:7px 10px; }.workspace-time { color:var(--primary-deep); font-size:12px; font-weight:800; }.workspace-item p { margin-top:5px; color:var(--muted); font-size:13px; line-height:1.6; }.workspace-item-arrow { display:grid; place-items:center; width:28px; height:28px; border:0; border-radius:10px; background:#f1faf7; color:var(--primary-deep); font-size:21px; line-height:1; }.workspace-mobile-switcher { display:none; }
@media (max-width: 980px) { .travel-workspace { grid-template-columns:minmax(270px, 36%) minmax(0, 64%); }.workspace-chat-pane { padding:24px; }.workspace-plan-pane { padding:32px 24px; }.workspace-day { grid-template-columns:98px minmax(0, 1fr); } }
@media (max-width: 760px) { .travel-workspace { display:block; height:auto; min-height:0; overflow:visible; padding-bottom:92px; }.workspace-chat-pane { min-height:auto; padding:26px 16px; overflow:visible; border-right:0; border-bottom:1px solid #dceee8; }.workspace-chat-messages { flex:none; max-height:calc(100dvh - 255px); min-height:190px; }.workspace-plan-pane { padding:30px 16px 40px; overflow:visible; }.workspace-plan-hero { min-height:184px; border-radius:25px; }.workspace-plan-heading { align-items:flex-start; flex-direction:column; margin-top:26px; }.workspace-day { grid-template-columns:1fr; gap:8px; }.workspace-day-marker { flex-direction:row; align-items:center; padding:0 2px; }.workspace-day-marker small { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }.workspace-day-body { padding:17px; border-radius:20px; }.workspace-map { min-height:180px; }.workspace-map small { left:14px; right:14px; }.workspace-plan-heading .btn { width:100%; }.workspace-item { grid-template-columns:38px minmax(0, 1fr) 24px; padding:11px; }.workspace-mobile-plan .workspace-chat-pane, .workspace-mobile-chat .workspace-plan-pane { display:none; }.workspace-mobile-switcher { position:fixed; z-index:30; bottom:max(18px, calc(env(safe-area-inset-bottom) + 10px)); left:50%; display:flex; gap:4px; padding:6px; border:1px solid rgba(4,64,52,.12); border-radius:999px; background:rgba(255,255,255,.94); box-shadow:0 15px 36px rgba(4,51,42,.2); transform:translateX(-50%); backdrop-filter:blur(14px); }.workspace-mobile-switcher button { display:inline-flex; align-items:center; justify-content:center; gap:7px; min-width:102px; padding:11px 16px; border:0; border-radius:999px; background:transparent; color:#54736b; font:inherit; font-size:13px; font-weight:800; }.workspace-mobile-switcher button.active { background:linear-gradient(135deg, #b8ffe7, #89ecd0); color:#075b4c; box-shadow:0 4px 13px rgba(0,136,102,.2); }.workspace-mobile-switcher button span { font-size:17px; line-height:1; } }
@media (max-width: 420px) { .workspace-plan-hero h2 { font-size:37px; }.workspace-hero-shape { width:56px; height:56px; border-radius:20px; font-size:26px; }.workspace-meta span { max-width:100%; }.workspace-item-top { display:block; }.workspace-time { display:block; margin-bottom:4px; }.workspace-mobile-switcher button { min-width:92px; padding:10px 13px; } }

/* ── FEED 卡片轮播：3 张一组，左右滑动（参考鞋类卡片 carousel）── */
/* 两侧预留箭头停留区，箭头不压在卡片上 */
.feed-carousel-wrap { position: relative; padding: 0 58px; }
.feed-carousel { display: flex; gap: 18px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; padding: 4px 2px 10px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.feed-carousel::-webkit-scrollbar { display: none; }
.feed-carousel .feed-card { flex: 0 0 calc((100% - 36px) / 3); height: 520px; min-height: 520px; aspect-ratio: auto; scroll-snap-align: start; }
/* 左右圆形箭头：垂直居中，停在轨道两侧留白区 */
.feed-arrow { position: absolute; top: 50%; z-index: 4; transform: translateY(-50%); display: grid; place-items: center; width: 46px; height: 46px; padding: 0; border: 1px solid var(--line); border-radius: 50%; background: #fff; color: var(--ink); box-shadow: 0 8px 24px rgba(15,38,34,.16); cursor: pointer; transition: transform .15s, opacity .2s, box-shadow .2s; }
.feed-arrow svg { width: 20px; height: 20px; }
.feed-arrow:hover:not(:disabled) { transform: translateY(-50%) scale(1.07); box-shadow: 0 10px 28px rgba(15,38,34,.22); }
.feed-arrow:active:not(:disabled) { transform: translateY(-50%) scale(.95); }
.feed-arrow:disabled { opacity: .35; cursor: default; }
.feed-arrow-prev { left: 4px; }
.feed-arrow-next { right: 4px; }

/* 平板：FEED 3列 → 2列（轮播 2 张一组） */
@media (max-width: 860px) and (min-width: 601px) {
  .grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .feed-card { height: 520px; min-height: 520px; }
  .feed-card-glass { padding: 16px; gap: 9px; }
  .feed-carousel { gap: 14px; }
  .feed-carousel .feed-card { flex-basis: calc((100% - 14px) / 2); }
  .feed-carousel-wrap { padding: 0 50px; }
  .feed-arrow { width: 40px; height: 40px; }
  .feed-arrow-prev { left: 4px; }
  .feed-arrow-next { right: 4px; }
}
/* 手机：轮播 1 张一组，隐藏箭头（直接滑动），取消两侧留白 */
@media (max-width: 600px) {
  .feed-carousel { gap: 14px; scroll-snap-type: x mandatory; }
  .feed-carousel .feed-card { flex-basis: 100%; }
  .feed-carousel-wrap { padding: 0; }
  .feed-arrow { display: none; }
  .feed-card-glass { padding: 16px; gap: 8px; }
  .feed-card-header { flex-direction: column; align-items: flex-start; gap: 6px; }
  .feed-card-meta { font-size: 11px; gap: 5px 8px; }
  .feed-card-decl { -webkit-line-clamp: 2; font-size: 12px; }
}
@media (max-width: 800px) {
  .topbar { flex-wrap: wrap; height: auto; min-height: 52px; padding: 8px 12px 6px; gap: 6px; align-items: center; }
  .topbar-left { flex-wrap: nowrap; gap: 6px; }
  .brand { gap: 6px; }
  .brand span { display: none; }
  /* 导航项与操作项保持在同一行或自然换行，不强制独占整行 */
  .top-nav { display: flex; gap: 3px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding-bottom: 0; flex: 1 1 auto; min-width: 0; }
  .top-nav::-webkit-scrollbar { display:none; }
  .top-nav-item { padding: 6px 10px; font-size: 12px; border-radius: 999px; white-space: nowrap; }
  .top-actions { gap: 4px; flex-shrink: 0; }
  .top-actions .btn-ghost { display:none; }
  .top-actions .btn { padding: 6px 12px; font-size: 12px; }
  .content { padding:20px 14px 80px; }
  .site-footer { padding:16px 14px 24px; text-align:center; }
  .page-heading { align-items:flex-start; flex-direction:column; }
  .hero { grid-template-columns:1fr; min-height:342px; }
  .hero-orbit { width:86px; height:86px; font-size:28px; }
  .landing-hero { grid-template-columns:1fr; min-height:380px; padding: 32px 22px; text-align:center; }
  .landing-hero-inner { align-items:center; }
  .landing-hero h1 { max-width:100%; font-size: clamp(24px, 7vw, 36px); }
  .landing-ai-form { width:100%; margin-top: 18px; }
  /* Landing 副标题 + About Us：平板/手机单列堆叠 */
  .landing-subtitle { margin-top: 22px; padding: 0 4px; font-size: clamp(18px, 5.4vw, 24px); }
  .about-section { grid-template-columns: 1fr; gap: 28px; margin-top: 40px; }
  .about-visual { order: -1; min-height: 300px; }
  .about-lead { margin-bottom: 20px; max-width: none; font-size: 16px; line-height: 1.8; }
  .about-features { grid-template-columns: 1fr; gap: 12px; }
  .about-btn { width: 100%; padding: 13px 20px; }
  /* Why Tripfaraway：手机单列，图组在上 */
  .why-section { grid-template-columns: 1fr; gap: 30px; }
  .why-visual { order: -1; }
  .why-img { width: 88%; height: 150px; }
  .why-btn { width: 100%; padding: 13px 20px; }
  /* 移动端：hero-visual 恢复 absolute 全覆盖作为卡片背景（与桌面端一致），
     避免变成 relative 200px 小方块导致图片挤在右上角、下方空白 */
  .hero-visual { position:absolute; inset:0; width:100%; max-width:none; height:auto; margin:0; order:unset; }
  .hero-visual img { object-position: center 35%; }
  /* 竖屏遮罩：从上往下渐显（桌面端是横向左→右） */
  .hero-visual-sharp { -webkit-mask-image: linear-gradient(180deg, rgba(0,0,0,.12) 0%, rgba(0,0,0,.35) 40%, rgba(0,0,0,.70) 65%, #000 100%); mask-image: linear-gradient(180deg, rgba(0,0,0,.12) 0%, rgba(0,0,0,.35) 40%, rgba(0,0,0,.70) 65%, #000 100%); }
  .landing-bubble-stream { justify-content:center; margin-top: 24px; }
  .landing-bubble { padding:7px 14px 7px 10px; gap:8px; }
  .landing-bubble-avatar { width:24px; height:24px; }
  .landing-bubble-text { font-size:12px; }
  .hero-ai-drawer { height:78vh; min-height:420px; padding:18px 16px max(16px, env(safe-area-inset-bottom)); border-radius:24px 24px 0 0; }
  .hero-ai-drawer-head h2 { font-size:21px; }
  .grid { grid-template-columns:1fr; }
  .plan-card { grid-column:span 1; }
  .service-grid { grid-template-columns:repeat(2,1fr); }
  .bill-overview { grid-template-columns:1px; }
  .top-nav-item { padding: 6px 11px; font-size: 12px; }
  .topbar { padding: 8px 10px 6px; }
  .ai-bill-metrics { grid-template-columns:1fr; }
}
@media (max-width: 480px) {
  .expense-member-checklist { grid-template-columns:1fr; }
  .bill-record { align-items:flex-start; flex-direction:column; }
  .bill-record-actions { align-self:flex-end; margin-top:-8px; }
  .bill-record-amount { justify-items:end; }
}
@media (max-width: 480px) {
  .hero h2 { font-size:28px; }
  .avatar-stack-img { width:34px; height:34px; margin-left:-8px; border-width:2px; }
  .avatar-stack-count { font-size:13px; margin-left:10px; }
  .card { padding:18px; border-radius:22px; }
  .plan-overview { align-items:flex-start; flex-direction:column; }
}

/* AI 出行邀约匹配卡片 + 快捷选项 */
.match-cards { display:flex; flex-direction:column; gap:12px; margin-top:12px; max-width:100%; }
.match-cards .card { padding:18px 18px 16px; border-radius:20px; }
.match-cards .invite-declaration { margin:12px 0; }
.match-cards .card-actions { margin-top:4px; }
/* 抽屉内匹配卡片适配：缩小内边距、字号，确保在有限高度内不撑开 */
.hero-ai-drawer-body .match-cards { gap:10px; margin-top:10px; }
.hero-ai-drawer-body .match-cards .card { padding:14px 14px 12px; border-radius:16px; }
.hero-ai-drawer-body .match-cards .card h3 { font-size:16px; }
.hero-ai-drawer-body .match-cards .meta { font-size:12px; flex-wrap:wrap; gap:6px; }
.hero-ai-drawer-body .match-cards .author { gap:8px; }
.hero-ai-drawer-body .match-cards .author strong { font-size:14px; }
.hero-ai-drawer-body .match-cards .invite-declaration { font-size:13px; margin:8px 0; }
.chat-quick-replies { display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; }
.chat-quick-reply { padding:8px 14px; border:1px solid var(--primary-deep); background:#eafff8; color:var(--primary-deep); border-radius:999px; font-size:14px; line-height:1.2; transition:transform .12s ease, background .15s ease; }
.chat-quick-reply:hover { background:var(--primary); color:#10372f; transform:translateY(-1px); }
.chat-quick-reply:active { transform:translateY(0); }
.chat-suggestions { display:flex; flex-direction:column; gap:8px; margin-top:12px; max-width:520px; }
.chat-suggestion { text-align:left; padding:11px 15px; border:1px solid var(--line); background:#f6fbfa; color:var(--ink); border-radius:14px; font-size:15px; line-height:1.45; cursor:pointer; transition:transform .12s ease, background .15s ease, border-color .15s ease; }
.chat-suggestion:hover { background:#eafff8; border-color:var(--primary-deep); transform:translateY(-1px); }
.chat-suggestion:active { transform:translateY(0); }
.chat-quick-action { background:var(--primary); color:#10372f; border-color:transparent; font-weight:600; }
.chat-quick-action:hover { filter:brightness(1.05); background:var(--primary); color:#10372f; }


/* =========================================================
   全局暗色空间主题（与「远方广场」统一 UI 风格 / 色调）
   覆盖核心原语与主要组件；plaza-mode 仍由 plaza.css 接管
   ========================================================= */

/* 全局画布：深色空间渐变 */
body {
  color: var(--ink);
  background:
    radial-gradient(1200px 700px at 78% -8%, rgba(124, 92, 255, .14), transparent 60%),
    radial-gradient(1000px 620px at 12% 4%, rgba(0, 255, 204, .10), transparent 55%),
    linear-gradient(180deg, #05080f 0%, #060b16 45%, #04070d 100%);
  min-height: 100vh;
}
/* 非 plaza 页面：内容区文字/背景跟随暗色 */
.content { color: var(--ink); background: transparent; }

/* 顶栏 */
.topbar { background: rgba(8, 14, 24, .72); border-bottom: 1px solid rgba(255, 255, 255, .07); backdrop-filter: blur(18px); }
.topbar .brand span { color: #fff; }
.top-nav-item { color: rgba(231, 244, 255, .72); }
.top-nav-item:hover { background: rgba(0, 255, 204, .10); color: #fff; }
.top-nav-item.active { background: linear-gradient(135deg, rgba(0, 255, 204, .22), rgba(124, 92, 255, .18)); color: #00FFCC; font-weight: 800; }
.top-nav-item.active::after { background: #00FFCC; }
.locale-switch { color: rgba(231, 244, 255, .72); }
.locale-switch button.active { color: #00FFCC; }
.btn-ghost { color: #d7f7ef; border-color: rgba(0, 255, 204, .35); }
.btn-ghost:hover { background: rgba(0, 255, 204, .10); }
.btn-outline { color: #00FFCC; border: 1.5px solid rgba(0, 255, 204, .5); }
.btn-outline:hover { background: rgba(0, 255, 204, .12); }

/* 页脚 */
.site-footer { color: rgba(222, 238, 255, .4); border-top: 1px solid rgba(255, 255, 255, .06); }

/* 通用卡片 / 标签 */
.tag { background: rgba(255, 255, 255, .08); color: rgba(222, 238, 255, .72); }
.author small { color: var(--muted); }
.invite-declaration { background: rgba(0, 255, 204, .08); color: rgba(222, 238, 255, .8); border-left-color: var(--primary); }
.kicker { color: var(--primary-deep); }

/* 通用录入 / 弹窗 */
.form-grid input, .form-grid textarea, .form-grid select { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .14); color: #eaf4ff; }
.form-grid input::placeholder, .form-grid textarea::placeholder { color: rgba(222, 238, 255, .45); }
.form-hint { color: rgba(222, 238, 255, .5); }
.modal { background: #0c1424; border: 1px solid rgba(255, 255, 255, .10); box-shadow: 0 30px 100px rgba(0, 0, 0, .6); }
.modal-head h3 { color: #fff; }
.close { color: rgba(222, 238, 255, .6); }

/* AI 抽屉 */
.hero-ai-drawer { background: #0b1322; border: 1px solid rgba(255, 255, 255, .10); }
.hero-ai-drawer-head { border-bottom-color: rgba(255, 255, 255, .10); }
.hero-ai-drawer-head p { color: rgba(222, 238, 255, .6); }
.hero-ai-close { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .14); color: #cfe9ff; }
.hero-ai-close:hover { background: rgba(0, 255, 204, .12); border-color: #00FFCC; }
.hero-ai-empty strong { color: #fff; }
.hero-ai-empty span { color: rgba(222, 238, 255, .6); }
.hero-ai-drawer-body::-webkit-scrollbar-thumb { border: 2px solid #0b1322; background: #2a3a52; }

/* 登录 / 注册 tabs */
.auth-tabs button { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: rgba(222, 238, 255, .7); }
.auth-tabs button.active { background: var(--primary); color: #06241d; border-color: var(--primary); }
.auth-method-toggle button { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: rgba(222, 238, 255, .7); }
.auth-method-toggle button.active { background: rgba(0, 255, 204, .14); color: #00FFCC; border-color: #00FFCC; }
[data-auth-method].active { background: var(--accent); color: #fff; }

/* 落地页 Hero / About / Why */
.landing-hero { background: linear-gradient(130deg, rgba(255, 255, 255, .06), rgba(124, 92, 255, .06)); border: 1px solid rgba(255, 255, 255, .10); box-shadow: 0 30px 80px rgba(0, 0, 0, .45); }
.landing-hero h1 { color: #fff; }
.about-kicker { color: #00FFCC; }
.about-lead { color: rgba(222, 238, 255, .8); }
.why-kicker { color: #00FFCC; }
.hero { background: linear-gradient(130deg, rgba(255, 255, 255, .06), rgba(0, 255, 204, .05)); border: 1px solid rgba(255, 255, 255, .08); box-shadow: var(--shadow); }
.hero h2 { color: #fff; }
.hero-ai-input { background: rgba(8, 16, 28, .6); border-color: rgba(0, 255, 204, .35); color: rgba(222, 238, 255, .85); }
.hero-ai-input input { color: #eaf4ff; }
.hero-ai-input input::placeholder { color: rgba(222, 238, 255, .5); }
.hero-ai-input button { color: #06241d; }

.page-heading h1 { color: #fff; }
.card-head h3 { color: #eaf4ff; }
.card-head .subtitle { color: rgba(222, 238, 255, .6); }

/* 资料 / 菜单 */
.menu-row { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.menu-copy strong { color: #eaf4ff; }
.menu-copy small { color: rgba(222, 238, 255, .55); }
.menu-arrow { color: rgba(222, 238, 255, .4); }

/* 行程 / 时间线（plan 页） */
.plan-overview { background: rgba(0, 255, 204, .07); }
.day-tab { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: rgba(222, 238, 255, .7); }
.day-tab.active { background: var(--primary); color: #06241d; border-color: var(--primary); }
.timeline-card { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.timeline-name { color: #fff; }
.timeline-desc { color: rgba(222, 238, 255, .6); }
.timeline-dot { background: #0e2a25; border-color: #1f5e51; color: #00FFCC; }
.timeline-line { background: #1f5e51; }
.timeline-time { color: #00FFCC; }
.timeline-item p { color: rgba(222, 238, 255, .6); }
.service { background: rgba(255, 255, 255, .05); }
.service b { color: #eaf4ff; }
.service small { color: rgba(222, 238, 255, .55); }
.cover-upload-btn { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .14); color: rgba(222, 238, 255, .7); }
.cover-upload-btn:hover { border-color: #00FFCC; color: #00FFCC; background: rgba(0, 255, 204, .08); }
.cover-upload-preview { border-color: rgba(255, 255, 255, .14); }

/* 历史 / 行程卡 */
.history-item { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.history-item.active { border-color: #00FFCC; background: rgba(0, 255, 204, .08); }
.history-menu { background: #0c1424; border-color: rgba(255, 255, 255, .12); }
.history-menu-trigger { background: rgba(255, 255, 255, .05); color: rgba(222, 238, 255, .6); }
.history-menu-trigger:hover { background: rgba(0, 255, 204, .12); color: #00FFCC; }
.history-summary span, .history-summary small { color: rgba(222, 238, 255, .55); }
.action-sheet-item { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.action-sheet-item:hover { border-color: #00FFCC; background: rgba(0, 255, 204, .08); }
.btn-danger { background: rgba(220, 38, 38, .12); border-color: rgba(220, 38, 38, .4); color: #ff8585; }
.btn-danger:hover { background: rgba(220, 38, 38, .2); }
.history-menu button { color: #ff8585; }
.history-menu button:hover { background: rgba(220, 38, 38, .15); }

/* 记账 / 费用 */
.bill-overview article { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.bill-overview strong { color: #00FFCC; }
.bill-overview span { color: rgba(222, 238, 255, .6); }
.bill-settlement { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.bill-settlement span { color: #eaf4ff; }
.bill-settlement small { color: rgba(222, 238, 255, .6); }
.bill-record { border-bottom-color: rgba(255, 255, 255, .10); }
.bill-record-menu { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: rgba(222, 238, 255, .7); }
.bill-record-menu:hover { background: rgba(0, 255, 204, .12); color: #00FFCC; }

/* AI 回复卡片（聊天内） */
.ai-plan-card, .ai-services, .ai-bill-card { background: rgba(255, 255, 255, .05); border: 1px solid rgba(255, 255, 255, .10); box-shadow: none; }
.ai-plan-head, .ai-bill-head, .ai-services-head { background: rgba(0, 255, 204, .06); }
.ai-plan-head p, .ai-services-head span, .ai-bill-category, .ai-bill-metrics span { color: rgba(222, 238, 255, .7); }
.ai-bill-metrics strong { color: #00FFCC; }
.ai-plan-meta span { background: rgba(0, 255, 204, .12); color: #00FFCC; }
.ai-day-title { color: #eaf4ff; }
.ai-day-entry time { color: #00FFCC; }
.ai-day-entry p { color: rgba(222, 238, 255, .6); }
.expense-chat-card { background: rgba(0, 255, 204, .08); border-color: rgba(0, 255, 204, .3); }
.expense-chat-card h3, .expense-chat-card p { color: #eaf4ff; }
.expense-chat-card > strong { color: #00FFCC; }
.expense-chat-kicker { color: #00FFCC; }
.rich-bubble p { color: #eaf4ff; }

/* 聊天工作区 */
.chat-workspace { background: var(--bg); }
.chat-sidebar { background: rgba(10, 18, 30, .72); border-right: 1px solid rgba(255, 255, 255, .08); }
.chat-new-btn { background: rgba(255, 255, 255, .05); color: #eaf4ff; border-color: rgba(255, 255, 255, .12); }
.chat-new-btn:hover { background: rgba(0, 255, 204, .12); }
.chat-session-item { color: rgba(222, 238, 255, .75); }
.chat-session-item:hover { background: rgba(0, 255, 204, .14); }
.chat-session-row.is-active .chat-session-item { background: rgba(0, 255, 204, .26); color: #00FFCC; }
.chat-sidebar-foot small { color: rgba(222, 238, 255, .45); }
.chat-main-head { background: rgba(8, 14, 24, .72); border-bottom: 1px solid rgba(255, 255, 255, .08); }
.chat-icon-btn { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: #cfe9ff; }
.chat-icon-btn:hover { border-color: #00FFCC; color: #00FFCC; }
.chat-main-title small { color: rgba(222, 238, 255, .5); }
.chat-composer { background: linear-gradient(180deg, rgba(5, 8, 15, 0), rgba(5, 8, 15, .9) 38%); }
.chat-composer .chat-compose { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); box-shadow: 0 14px 34px rgba(0, 0, 0, .4); }
.chat-composer .chat-compose input { color: #eaf4ff; }
.chat-composer-foot small { color: rgba(222, 238, 255, .45); }
.chat-compose input { border-color: rgba(255, 255, 255, .12); color: #0a1628; background: #e8f0ec; }
.chat-compose input:focus { border-color: #00FFCC; }
.bubble { background: rgba(255, 255, 255, .06); border: 1px solid rgba(255, 255, 255, .10); color: #eaf4ff; }
.chat-message.user .bubble { background: var(--primary); color: #06241d; border-color: transparent; }
.space-discussions .bubble { border-left-color: rgba(0, 255, 204, .4); }
.space-discussions .bubble.own-message { background: rgba(0, 255, 204, .10); border-left-color: #00FFCC; }
.space-discussions .bubble.ai-message { background: rgba(0, 255, 204, .08); border-color: rgba(0, 255, 204, .4); }
.space-discussions .bubble strong { color: #eaf4ff; }
.space-member { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: rgba(222, 238, 255, .7); }
.space-member.ai-member { color: #00FFCC; border-color: rgba(0, 255, 204, .4); background: rgba(0, 255, 204, .08); }
.space-member small { color: #00FFCC; }
.space-ai-hint { color: rgba(222, 238, 255, .6); }
.space-ai-hint strong { color: #00FFCC; }
.chat-identity { color: rgba(222, 238, 255, .6); }
.mention-menu { background: rgba(12, 20, 34, .96); border-color: rgba(255, 255, 255, .12); box-shadow: 0 14px 32px rgba(0, 0, 0, .5); }
.mention-menu-item { color: #eaf4ff; }
.mention-menu-item:hover { background: rgba(0, 255, 204, .12); }

/* 旅行工作区 */
.travel-workspace-shell { background: var(--bg); }
.workspace-chat-pane { background: rgba(10, 18, 30, .6); border-right: 1px solid rgba(255, 255, 255, .08); }
.workspace-plan-pane { color: var(--ink); }
.workspace-pane-label { color: #00FFCC; }
.workspace-chat-subtitle { color: rgba(222, 238, 255, .6); }
.workspace-chat-title h1 { color: #fff; }
.workspace-live-dot { background: rgba(0, 255, 204, .14); color: #00FFCC; }
.workspace-live-dot::before { background: #00FFCC; }
.workspace-meta span { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: rgba(222, 238, 255, .75); }
.workspace-day-body { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.workspace-day-body h3 { color: #fff; }
.workspace-item { background: rgba(255, 255, 255, .04); border-color: rgba(255, 255, 255, .08); }
.workspace-item p { color: rgba(222, 238, 255, .6); }
.workspace-item-icon { background: rgba(0, 255, 204, .12); }
.workspace-time { color: #00FFCC; }
.workspace-map { background: linear-gradient(135deg, rgba(0, 255, 204, .06), rgba(124, 92, 255, .05)); border-color: rgba(255, 255, 255, .10); }
.workspace-map small { color: rgba(222, 238, 255, .5); }

/* 快捷回复 / AI 配图 */
.chat-quick-reply { background: rgba(0, 255, 204, .10); color: #00FFCC; border-color: rgba(0, 255, 204, .4); }
.chat-quick-reply:hover { background: var(--primary); color: #06241d; }
.chat-suggestions { max-width:560px; }
.chat-suggestion { background: rgba(255, 255, 255, .05); color: #eaf4ff; border-color: rgba(255, 255, 255, .12); }
.chat-suggestion:hover { background: rgba(0, 255, 204, .12); border-color: rgba(0, 255, 204, .4); transform:translateY(-1px); }
.chat-quick-action { background: var(--primary); color: #06241d; }
.ai-hotel-cards { background: rgba(255, 255, 255, .04); border-color: rgba(255, 255, 255, .10); }
.ai-hotel-cards-head h3 { color: #fff; }
.ai-hotel-card { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .10); }
.ai-hotel-name { color: #fff; }
.ai-hotel-image-wrap { background: rgba(255, 255, 255, .06); }
.ai-hotel-price { color: #fff; }
.ai-hotel-tags span { background: rgba(255, 255, 255, .08); color: rgba(234, 244, 255, .75); }
.ai-hotel-booking-disabled { background: rgba(255, 255, 255, .08); color: rgba(234, 244, 255, .45); }

/* 启动屏 */
.boot-screen { background: linear-gradient(145deg, #060b16 0%, #05080f 52%, #060b16 100%); color: var(--ink); }
.boot-card { background: rgba(255, 255, 255, .05); border-color: rgba(0, 255, 204, .28); box-shadow: 0 18px 48px rgba(0, 0, 0, .5); }
.boot-card strong { color: #fff; }
.boot-card span, .boot-card small { color: rgba(222, 238, 255, .6); }
.boot-loader { border-color: #1f3a34; border-top-color: #00c99f; }

/* ---------------- 细节补齐：分页 / 提示 / 预警 / 结算 / 地图 ---------------- */
.pager-btn { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: #00FFCC; }
.pager-page { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: var(--muted); }
.pager-page:hover { border-color: #00FFCC; color: #00FFCC; }
.pager-status { color: rgba(222, 238, 255, .55); }
.timeline-edit-hint { background: rgba(0, 255, 204, .10); color: #00FFCC; }

/* 天气预警：保留警示语义，改为琥珀色玻璃 */
.weather-alert-message { background: rgba(255, 180, 60, .10); border: 1px solid rgba(245, 158, 11, .4); border-left: 4px solid #e58b00; color: #ffd79a; box-shadow: 0 8px 20px rgba(0, 0, 0, .35); }
.weather-alert-icon { background: rgba(255, 193, 7, .18); }

/* AI 服务卡片 / 结算语义色玻璃化 */
.ai-service { background: rgba(255, 255, 255, .05); color: #eaf4ff; }
.ai-service em { color: #eaf4ff; }
.bill-settlement.receive { border-color: rgba(74, 222, 128, .35); background: rgba(74, 222, 128, .10); }
.bill-settlement.receive span { color: #86efac; }
.bill-settlement.pay { border-color: rgba(251, 146, 60, .35); background: rgba(251, 146, 60, .10); }
.bill-settlement.pay span { color: #fdba74; }
.bill-settlement.settled { background: rgba(255, 255, 255, .05); }
.bill-settlement.settled span { color: rgba(222, 238, 255, .7); }
.ai-bill-settlements .receive { color: #86efac; }
.ai-bill-settlements .pay { color: #fdba74; }

/* 侧栏切换 / 性别 / 链接 / AI 成员 */
.chat-sidebar-toggle { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .12); color: #cfe9ff; }
.chat-sidebar-brand { color: #00FFCC; }
.gender-male { color: #6cb6ff; }
.expense-detail-link { color: #00FFCC; }
.mention-menu-item.ai-member strong { color: #00FFCC; }

/* 地图（暗底覆盖层） */
.map-label { color: #00FFCC; }
.map-route i { background: var(--primary); }

/* 工作区箭头 / 移动端切换 */
.workspace-item-arrow { background: rgba(0, 255, 204, .10); color: #00FFCC; }
.workspace-mobile-switcher { background: rgba(10, 18, 30, .86); border-top: 1px solid rgba(255, 255, 255, .08); backdrop-filter: blur(10px); }
.workspace-mobile-switcher button { color: rgba(222, 238, 255, .7); }
.workspace-mobile-switcher button.active { background: rgba(0, 255, 204, .14); color: #00FFCC; }

/* FEED 轮播箭头：原为白底 + var(--ink) 图标，暗色下需改为玻璃底 + 浅色图标 */
.feed-arrow { background: rgba(255, 255, 255, .08); border: 1px solid rgba(255, 255, 255, .16); color: #eaf4ff; box-shadow: 0 8px 24px rgba(0, 0, 0, .35); }
.feed-arrow:hover { background: rgba(0, 255, 204, .18); border-color: rgba(0, 255, 204, .5); color: #00FFCC; }

/* ════════════════════════════════════════════════════════════
   AI 交互区改造 · 三栏骨架（设计来源 docs/MINDTRIP-UI-ANATOMY.md §5）
   左导航 / 中对话 / 右上下文面板。中栏说人话，右栏给证据。
   色调沿用当前暗色 + #00ffcc 主色。
   ════════════════════════════════════════════════════════════ */
/* 三栏比例 15 / 50 / 45：左导航轨 / 中对话列 / 右内容页（均为弹性比例，随屏宽同步缩放）。
   旧版中间固定窄列、右栏吃剩余空间，实测中列偏窄右栏过宽 —— 现按 15:50:45 分配。 */
.chat-workspace { grid-template-columns: minmax(0, 15fr) minmax(0, 50fr) minmax(0, 45fr); }
.chat-workspace.sidebar-collapsed { grid-template-columns: 68px minmax(0, 53fr) minmax(0, 45fr); }
.chat-workspace.context-collapsed { grid-template-columns: 272px minmax(0, 1fr) 0; }
.chat-workspace.sidebar-collapsed.context-collapsed { grid-template-columns: 68px minmax(0, 1fr) 0; }
.chat-workspace.context-collapsed .chat-context { display: none; }
/* 导航轨宿主页（旅程 / 探索 / 灵感 / 创作者中心）：只有「左轨 + 内容」两栏，没有右上下文面板 */
.chat-workspace.rail-only { grid-template-columns: 272px minmax(0, 1fr); }
.chat-workspace.rail-only.sidebar-collapsed { grid-template-columns: 68px minmax(0, 1fr); }
.rail-page .chat-main-scroll { padding: 30px clamp(20px, 4vw, 56px) 48px; }
.rail-page-body { width: 100%; max-width: 1160px; margin: 0 auto; }
/* 探索：出行 FEED 卡片栈（复用 plaza.css 的 .plaza-deck-*，这里只收紧轨内列间距） */
.rail-feed-board { margin-top: 22px; }
.rail-page .plaza-deck-grid { gap: 16px; }

.chat-context { display: flex; flex-direction: column; min-width: 0; min-height: 0; border-left: 1px solid rgba(255, 255, 255, .08); background: rgba(10, 18, 30, .72); }
.chat-context-scroll { display: flex; flex: 1; flex-direction: column; gap: 20px; min-height: 0; overflow-y: auto; padding: 16px 14px 24px; }
.chat-ctx-block-head h3 { margin: 0 0 10px; color: rgba(222, 238, 255, .5); font-size: 12px; font-weight: 700; letter-spacing: .06em; }
.chat-ctx-hint { margin: 0; color: rgba(222, 238, 255, .45); font-size: 12px; line-height: 1.6; }

.chat-ctx-cta { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; margin-bottom: 8px; padding: 12px 14px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 14px; background: rgba(255, 255, 255, .04); color: #eaf4ff; font-size: 13px; font-weight: 600; text-align: left; transition: background .16s, border-color .16s, transform .16s; }
.chat-ctx-cta:last-child { margin-bottom: 0; }
.chat-ctx-cta:hover { background: rgba(0, 255, 204, .10); border-color: rgba(0, 255, 204, .4); transform: translateY(-1px); }
.chat-ctx-cta i { color: #00FFCC; font-size: 16px; font-style: normal; }

.chat-ctx-cards { display: flex; flex-direction: column; gap: 8px; }
.chat-ctx-card { display: flex; align-items: center; border: 1px solid rgba(255, 255, 255, .10); border-radius: 14px; background: rgba(255, 255, 255, .04); overflow: hidden; transition: background .16s, border-color .16s; }
.chat-ctx-card:hover { background: rgba(0, 255, 204, .08); border-color: rgba(0, 255, 204, .34); }
.chat-ctx-card-main { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; padding: 8px; border: 0; background: transparent; color: inherit; text-align: left; }
.chat-ctx-card-cover { flex: 0 0 auto; width: 56px; height: 44px; border-radius: 10px; object-fit: cover; background: rgba(255, 255, 255, .06); }
.chat-ctx-card-cover-empty { display: block; background: linear-gradient(135deg, rgba(0, 255, 204, .18), rgba(124, 92, 255, .18)); }
.chat-ctx-card-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.chat-ctx-card-text b { overflow: hidden; color: #eaf4ff; font-size: 13px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.chat-ctx-card-text small { overflow: hidden; color: rgba(222, 238, 255, .5); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.chat-ctx-fav { display: grid; place-items: center; flex: 0 0 auto; width: 28px; height: 28px; margin-right: 10px; padding: 0; border: 1px solid rgba(255, 255, 255, .14); border-radius: 50%; background: transparent; color: rgba(222, 238, 255, .6); transition: color .16s, border-color .16s, background .16s; }
.chat-ctx-fav svg { width: 13px; height: 13px; fill: currentColor; }
.chat-ctx-fav:hover { color: #00FFCC; border-color: rgba(0, 255, 204, .5); }
.chat-ctx-fav.is-fav { background: rgba(0, 255, 204, .16); border-color: rgba(0, 255, 204, .6); color: #00FFCC; }
.chat-ctx-hotel-link { flex: 0 0 auto; margin-right: 10px; color: #00FFCC; font-size: 12px; font-weight: 600; text-decoration: none; white-space: nowrap; }
.chat-ctx-plan { display: flex; align-items: center; gap: 10px; width: 100%; padding: 12px 14px; border: 1px solid rgba(0, 255, 204, .34); border-radius: 14px; background: rgba(0, 255, 204, .10); color: #eaf4ff; text-align: left; }
.chat-ctx-plan-icon { font-size: 18px; }

/* ── 右栏行程目的地地图（MindTrip 式整栏 · 高德 JS API 深色底图）── */
.chat-context-map-full { display: flex; flex-direction: column; min-width: 0; min-height: 0; background: #080f18; }
.chat-ctx-map-top { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; padding: 12px 14px; border-bottom: 1px solid rgba(255, 255, 255, .08); background: rgba(10, 18, 30, .86); }
.chat-ctx-map-back { display: grid; place-items: center; flex: 0 0 auto; width: 30px; height: 30px; padding: 0 0 2px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 50%; background: rgba(255, 255, 255, .05); color: #cfe9ff; font-size: 16px; line-height: 1; transition: border-color .16s, color .16s; }
.chat-ctx-map-back:hover { border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-ctx-map-title { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }
.chat-ctx-map-title .kicker { margin: 0; }
.chat-ctx-map-title h3 { overflow: hidden; margin: 0; color: #eaf4ff; font-size: 14px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.chat-ctx-map-save { flex: 0 0 auto; padding: 7px 12px; border: 1px solid rgba(0, 255, 204, .4); border-radius: 999px; background: rgba(0, 255, 204, .12); color: #00FFCC; font-size: 12px; font-weight: 700; transition: background .16s; }
.chat-ctx-map-save:hover { background: rgba(0, 255, 204, .26); }
/* stage 撑满右栏剩余高度：行程工作台 #tms-root 自身绝对定位铺满（高德要求显式高度） */
.chat-ctx-map-stage { position: relative; flex: 1; min-height: 0; }
.chat-ctx-map-stage .tms-side::-webkit-scrollbar, .chat-ctx-map-stage .tms-rail::-webkit-scrollbar { height: 6px; width: 6px; }
/* 行程点位 pin：青色光点，与 #00FFCC 主色一致 */
.chat-amap-pin { display: block; width: 14px; height: 14px; border: 2px solid rgba(255, 255, 255, .92); border-radius: 50%; background: #00FFCC; box-shadow: 0 0 0 5px rgba(0, 255, 204, .22), 0 4px 12px rgba(0, 0, 0, .5); cursor: pointer; }

/* ── 旅行槽位条：把结构化收集从 prompt 内部搬到界面上 ── */
.chat-slotbar { flex: 0 0 auto; padding: 9px clamp(18px, 5vw, 80px) 0; }
.chat-slotbar-row { display: flex; flex-wrap: wrap; gap: 7px; max-width: 840px; margin: 0 auto; }
.chat-slot { display: inline-flex; align-items: center; gap: 5px; padding: 6px 12px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 999px; background: rgba(255, 255, 255, .03); color: rgba(222, 238, 255, .7); font-size: 12px; font-weight: 600; transition: background .16s, border-color .16s, color .16s; }
.chat-slot:hover { border-color: rgba(0, 255, 204, .4); color: #00FFCC; }
.chat-slot.is-open { border-color: #00FFCC; color: #00FFCC; }
.chat-slot.is-set { background: rgba(0, 255, 204, .16); border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-slot-caret { width: 9px; height: 6px; opacity: .7; }
.chat-slot-menu { display: flex; flex-wrap: wrap; gap: 6px; max-width: 840px; margin: 8px auto 0; padding: 8px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 14px; background: linear-gradient(180deg, #0c1622, #080f18); box-shadow: 0 20px 50px rgba(0, 0, 0, .55); }
.chat-slot-opt { padding: 7px 12px; border: 1px solid transparent; border-radius: 999px; background: rgba(255, 255, 255, .05); color: rgba(234, 244, 255, .85); font-size: 12px; }
.chat-slot-opt:hover { background: rgba(0, 255, 204, .14); color: #00FFCC; }
.chat-slot-opt.is-on { background: rgba(0, 255, 204, .22); border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-slot-opt-clear { color: rgba(222, 238, 255, .5); }
.chat-slot-tip { margin: 0; color: rgba(222, 238, 255, .6); font-size: 12px; }

/* ── Composer（＋「任意开始」菜单已下线，仅保留输入 / 语音 / 发送）── */
.chat-composer .chat-compose { align-items: center; padding: 7px 8px; }

/* ── 移动端 / 窄屏降级：右栏折叠为右侧浮层 ── */
.chat-context-head { display: none; }
@media (max-width: 1180px) and (min-width: 861px) {
  .chat-workspace { grid-template-columns: 272px minmax(0, 1fr); }
  .chat-workspace.sidebar-collapsed { grid-template-columns: 68px minmax(0, 1fr); }
}
@media (max-width: 1180px) {
  .chat-workspace .chat-context { position: fixed; z-index: 60; top: 0; right: 0; bottom: 0; display: flex; width: min(360px, 90vw); border-left: 1px solid rgba(255, 255, 255, .12); background: #0a1220; box-shadow: -20px 0 60px rgba(0, 0, 0, .5); transition: transform .22s ease; }
  .chat-workspace.context-collapsed .chat-context { display: flex; pointer-events: none; transform: translateX(101%); }
  .chat-context-head { display: flex; align-items: center; justify-content: space-between; flex: 0 0 auto; padding: 14px 14px 12px; border-bottom: 1px solid rgba(255, 255, 255, .08); }
  .chat-context-head span { color: rgba(222, 238, 255, .6); font-size: 12px; font-weight: 700; letter-spacing: .06em; }
  .chat-context-close { display: grid; place-items: center; width: 28px; height: 28px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 50%; background: transparent; color: #cfe9ff; font-size: 12px; }
  .chat-context-close:hover { border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
}

/* ════════════════════════════════════════════════════════════
   AI 交互区 · MindTrip 式完全复刻
   左导航轨（品牌/六项导航/新建对话/会话列表/身份卡）
   中对话（Hero 空态 + 槽位内联 + 胶囊 Composer）
   右内容推介区（本轮结果 / 为你推荐 / 精选灵感 / 同行邀约）
   色调沿用暗色 + #00ffcc，不引入新色板。
   ════════════════════════════════════════════════════════════ */

/* ── 无顶栏骨架：聊天页的导航 / 账号 / 语言全部内聚到左导航轨 ── */
.app-shell.bare-shell { max-width: none; }

/* ── 左导航轨 ── */
.chat-sidebar { gap: 6px; padding: 12px 10px 10px; }
.chat-rail-head { display: flex; align-items: center; gap: 8px; padding: 2px 2px 8px; }
.chat-rail-brand { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; padding: 0; border: 0; background: transparent; color: #eaf4ff; text-align: left; }
.chat-rail-logo { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 10px; object-fit: cover; background: rgba(0, 255, 204, .12); }
.chat-rail-wordmark { display: flex; flex-direction: column; min-width: 0; overflow: hidden; font-size: 14px; font-weight: 800; letter-spacing: -.02em; white-space: nowrap; }
.chat-rail-wordmark small { margin-top: 1px; color: rgba(222, 238, 255, .42); font-size: 9px; font-weight: 500; letter-spacing: .12em; }
.chat-rail-brand:hover .chat-rail-wordmark { color: #00FFCC; }

.chat-rail-nav { display: flex; flex-direction: column; gap: 2px; flex: 0 0 auto; }
/* 基础样式里 .chat-new-btn 是 flex:1（旧侧栏里它要占满宽度），在导航轨里必须收回，
   否则它会和 .chat-rail-sessions 一起被拉高成一个大方块。 */
.chat-sidebar .chat-new-btn { flex: 0 0 auto; margin: 8px 0 2px; }
.chat-rail-item { position: relative; display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 10px; border: 0; border-radius: 11px; background: transparent; color: rgba(222, 238, 255, .72); font: inherit; font-size: 13px; font-weight: 600; text-align: left; transition: background .16s, color .16s; }
.chat-rail-item:hover { background: rgba(0, 255, 204, .10); color: #eaf4ff; }
.chat-rail-item.is-active { background: rgba(0, 255, 204, .14); color: #00FFCC; }
.chat-rail-svg { flex: 0 0 auto; width: 17px; height: 17px; opacity: .85; }
.chat-rail-item.is-active .chat-rail-svg { opacity: 1; }
.chat-rail-label { flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.chat-rail-badge { flex: 0 0 auto; min-width: 18px; padding: 1px 5px; border-radius: 999px; background: rgba(0, 255, 204, .18); color: #00FFCC; font-size: 10px; font-weight: 800; text-align: center; }
.chat-rail-caret { flex: 0 0 auto; width: 9px; height: 6px; opacity: .6; transition: transform .18s; }
.chat-rail-item[aria-expanded="false"] .chat-rail-caret { transform: rotate(-90deg); }
/* 进行中旅程的脉冲圆点（左栏「旅程」入口）。绝对定位在图标右上角，
   因此收起态（只留图标）依然可见 —— 那正是这个指示最该起作用的时候。 */
.chat-rail-dot { position: absolute; top: 7px; left: 22px; width: 8px; height: 8px; border-radius: 50%; background: #00FFCC; box-shadow: 0 0 0 2px rgba(8, 14, 20, .92), 0 0 7px rgba(0, 255, 204, .8); z-index: 1; }
.chat-rail-dot::after { content: ''; position: absolute; inset: -3px; border-radius: 50%; border: 1.5px solid rgba(0, 255, 204, .85); animation: rail-dot-pulse 1.9s ease-out infinite; }
@keyframes rail-dot-pulse { 0% { transform: scale(.55); opacity: .9; } 70% { transform: scale(1.55); opacity: 0; } 100% { transform: scale(1.55); opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .chat-rail-dot::after, .m-chat-tab-dot::after { animation: none; opacity: 0; } }

.chat-rail-sessions { flex: 1 1 auto; min-height: 48px; overflow-y: auto; margin: 4px -4px 0; padding: 6px 4px 0; border-top: 1px solid rgba(255, 255, 255, .07); }
.chat-rail-sessions.is-hidden { display: none; }
.chat-rail-sessions ul { list-style: none; display: flex; flex-direction: column; gap: 3px; margin: 0; padding: 0; }
.chat-rail-sessions .chat-session-item { padding: 8px 28px 8px 9px; font-size: 12.5px; }

.chat-rail-foot { display: flex; flex-direction: column; gap: 6px; margin-top: auto; padding-top: 10px; border-top: 1px solid rgba(255, 255, 255, .08); }
.chat-rail-item-foot { padding: 8px 10px; font-size: 12.5px; }
.chat-rail-user { display: flex; align-items: center; gap: 8px; padding: 4px 2px 0; }
.chat-rail-user-main { display: flex; align-items: center; gap: 9px; flex: 1; min-width: 0; padding: 4px; border: 0; border-radius: 12px; background: transparent; color: inherit; text-align: left; transition: background .16s; }
.chat-rail-user-main:hover { background: rgba(0, 255, 204, .10); }
.chat-rail-avatar { display: grid; place-items: center; flex: 0 0 auto; width: 30px; height: 30px; border-radius: 50%; background: linear-gradient(135deg, rgba(0, 255, 204, .34), rgba(124, 92, 255, .34)); color: #eaf4ff; font-size: 12px; font-weight: 800; }
.chat-rail-user-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.chat-rail-user-text b { overflow: hidden; color: #eaf4ff; font-size: 12.5px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.chat-rail-user-text small { overflow: hidden; color: rgba(222, 238, 255, .45); font-size: 10.5px; text-overflow: ellipsis; white-space: nowrap; }
.chat-rail-account { flex: 0 0 auto; padding: 5px 10px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 999px; background: transparent; color: rgba(222, 238, 255, .7); font: inherit; font-size: 11px; font-weight: 700; cursor: pointer; }
.chat-rail-account.is-primary { border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-rail-account:hover { border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-rail-legal { display: flex; align-items: center; gap: 6px; padding: 0 4px; color: rgba(222, 238, 255, .4); font-size: 10.5px; }
.chat-rail-legal button { padding: 0; border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; }
.chat-rail-legal button:hover { color: #00FFCC; }
.chat-rail-locale { display: inline-flex; align-items: center; gap: 4px; margin-right: 4px; }
.chat-rail-locale button { color: rgba(222, 238, 255, .45); }
.chat-rail-locale button.active { color: #00FFCC; font-weight: 800; }
.chat-rail-copy { margin: 0; padding: 0 4px 2px; color: rgba(222, 238, 255, .3); font-size: 10px; }
.chat-rail-copy a { color: inherit; text-decoration: none; }
.chat-rail-copy a:hover { color: rgba(0, 255, 204, .8); }

/* 收起态：只留图标 */
.chat-sidebar.is-collapsed .chat-rail-head { flex-direction: column; gap: 10px; padding: 2px 0 8px; }
.chat-sidebar.is-collapsed .chat-rail-brand { justify-content: center; }
.chat-sidebar.is-collapsed .chat-rail-wordmark,
.chat-sidebar.is-collapsed .chat-rail-label,
.chat-sidebar.is-collapsed .chat-rail-badge,
.chat-sidebar.is-collapsed .chat-rail-caret,
.chat-sidebar.is-collapsed .chat-rail-sessions,
.chat-sidebar.is-collapsed .chat-rail-user-text,
.chat-sidebar.is-collapsed .chat-rail-legal,
.chat-sidebar.is-collapsed .chat-rail-copy,
.chat-sidebar.is-collapsed .chat-rail-account { display: none; }
.chat-sidebar.is-collapsed .chat-rail-item { justify-content: center; gap: 0; padding: 10px 0; }
/* 收起态：图标 19px 居中，圆点改挂到图标右上角（用百分比定位，不依赖侧栏具体宽度） */
.chat-sidebar.is-collapsed .chat-rail-dot { left: 50%; margin-left: 7px; top: 5px; }
.chat-sidebar.is-collapsed .chat-rail-svg { width: 19px; height: 19px; }
.chat-sidebar.is-collapsed .chat-rail-user { justify-content: center; padding: 4px 0 0; }
.chat-sidebar.is-collapsed .chat-rail-user-main { flex: 0 0 auto; }

/* ── 中栏头部：槽位条内联（对齐 MindTrip Where/When/Who/Budget）── */
.chat-menu-btn { display: none; }
/* 头部要有自己的层叠上下文：槽位下拉是绝对定位，必须盖住下方消息滚动区 */
.chat-main-head { position: relative; z-index: 20; gap: 10px; }
.chat-main-head .chat-main-title { flex: 0 1 auto; }
.chat-main-head .chat-slotbar { position: relative; flex: 0 1 auto; min-width: 0; margin-left: auto; padding: 0; }
.chat-main-head .chat-slotbar-row { flex-wrap: nowrap; max-width: none; margin: 0; }
.chat-main-head .chat-slot { padding: 6px 11px; font-size: 12px; }
.chat-main-head .chat-slot-menu { position: absolute; z-index: 30; top: calc(100% + 10px); right: 0; margin: 0; min-width: 210px; box-shadow: 0 18px 40px rgba(0, 0, 0, .5); }

/* ── 中栏空态 Hero ── */
.chat-main-scroll.is-empty { justify-content: center; }
.chat-hero { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 24px 12px 40px; text-align: center; }
/* 品牌 Slogan：位于 LOGO 上方，与首页视觉层级区分开（弱于标题、强于正文灰） */
.chat-hero-slogan { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.chat-hero-slogan-en { color: rgba(0, 255, 204, .62); font-size: 10px; font-weight: 700; letter-spacing: .3em; text-transform: uppercase; }
.chat-hero-slogan-zh { color: rgba(234, 244, 255, .72); font-size: 13px; font-weight: 500; letter-spacing: .28em; text-indent: .28em; }
.chat-hero-art { position: relative; display: grid; place-items: center; width: 148px; height: 148px; margin-top: 10px; }
.chat-hero-glow { position: absolute; inset: 4%; border-radius: 50%; background: radial-gradient(circle at 34% 28%, rgba(0, 255, 204, .44), rgba(124, 92, 255, .22) 58%, rgba(0, 255, 204, 0) 78%); filter: blur(14px); }
.chat-hero-art img { position: relative; width: 92px; height: 92px; border-radius: 30px; object-fit: cover; box-shadow: 0 18px 44px rgba(0, 0, 0, .45); }
/* 问候语区 3D 地球：与 LOGO 同一个网格格位叠放（球体直径 92px ≈ 原 LOGO 尺寸）。
   LOGO 不是被删除而是被替换 —— 无 WebGL / THREE 未就绪时 has-earth 不加，自动回落显示 LOGO。 */
.chat-hero-art > .chat-hero-logo, .chat-hero-art > .chat-hero-earth { grid-area: 1 / 1; }
/* 注意：这里必须用 visibility 而不是 display:none —— display:none 的元素 clientWidth 恒为 0，
   挂载前量不到尺寸，地球模块会一直等不到可测量尺寸而永远不启动（CSS/JS 死锁）。 */
.chat-hero-earth { visibility: hidden; position: relative; width: 108px; height: 108px; }
.chat-hero-art.has-earth .chat-hero-earth { visibility: visible; }
/* 地球自带 Three.js 大气光晕，CSS 这层径向光收一半就够，全量会叠成双重光晕 */
.chat-hero-art.has-earth .chat-hero-glow { opacity: .5; }
.chat-hero-art.has-earth .chat-hero-logo { visibility: hidden; }
.chat-hero-title { margin: 0; color: #fff; font-size: clamp(23px, 2.5vw, 33px); font-weight: 800; letter-spacing: -.02em; }
.chat-hero-sub { max-width: 520px; margin: 0; color: rgba(222, 238, 255, .6); font-size: 14px; line-height: 1.75; }

/* ── Composer 语音输入 ── */
.chat-mic { display: grid; place-items: center; flex: 0 0 auto; width: 38px; height: 38px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 50%; background: rgba(255, 255, 255, .05); color: #cfe9ff; cursor: pointer; transition: background .16s, border-color .16s, color .16s; }
.chat-mic svg { width: 17px; height: 17px; }
.chat-mic:hover { background: rgba(0, 255, 204, .14); border-color: rgba(0, 255, 204, .5); color: #00FFCC; }

/* ── Composer 导入行程文档（📎）── */
.chat-attach { display: grid; place-items: center; flex: 0 0 auto; width: 38px; height: 38px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 50%; background: rgba(255, 255, 255, .05); color: #cfe9ff; cursor: pointer; transition: background .16s, border-color .16s, color .16s; }
.chat-attach svg { width: 17px; height: 17px; }
.chat-attach:hover { background: rgba(0, 255, 204, .14); border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-attach:disabled { opacity: .45; cursor: not-allowed; }
.import-doc-actions { display: flex; flex-direction: column; gap: 10px; margin: 6px 0 10px; }
.import-doc-divider { text-align: center; color: rgba(222, 238, 255, .45); font-size: 12px; }
.import-doc-actions textarea { width: 100%; padding: 11px 13px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 12px; background: rgba(255, 255, 255, .05); color: #eaf4ff; font: inherit; font-size: 14px; resize: vertical; outline: none; }
.import-doc-actions textarea:focus { border-color: #00FFCC; }
.chat-doc-attach { display: flex; align-items: flex-start; gap: 10px; width: min(340px, 100%); margin: 2px 0 0; padding: 10px 12px; border: 1px solid rgba(0, 255, 204, .28); border-radius: 14px; background: rgba(0, 255, 204, .07); }
.chat-doc-attach-icon { flex: 0 0 auto; font-size: 18px; }
.chat-doc-attach-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.chat-doc-attach-body small { color: rgba(0, 255, 204, .85); font-size: 11px; font-weight: 700; letter-spacing: .4px; }
.chat-doc-attach-body strong { overflow: hidden; color: #eaf4ff; font-size: 13px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.chat-doc-attach-body p { margin: 2px 0 0; color: rgba(222, 238, 255, .55); font-size: 11px; }

/* ── 右栏：区块标题动作 + 大图 CTA + 图文卡 ── */
.chat-ctx-block-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
.chat-ctx-block-head h3 { margin: 0; }
.chat-ctx-more { padding: 0; border: 0; background: transparent; color: rgba(222, 238, 255, .55); font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; }
.chat-ctx-more:hover { color: #00FFCC; }

.chat-ctx-media-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 8px; }
.chat-ctx-media { position: relative; display: flex; flex-direction: column; gap: 7px; padding: 0; border: 0; background: transparent; color: inherit; text-align: left; cursor: pointer; }
.chat-ctx-media-cover { position: relative; flex: 0 0 auto; width: 100%; height: 78px; border-radius: 13px; }
.chat-ctx-media-badge { position: absolute; z-index: 2; top: 7px; left: 7px; padding: 2px 7px; border-radius: 999px; background: rgba(5, 8, 15, .72); color: #00FFCC; font-size: 10px; font-weight: 800; backdrop-filter: blur(6px); }
.chat-ctx-media-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.chat-ctx-media-text b { overflow: hidden; color: #eaf4ff; font-size: 12px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.chat-ctx-media-text small { overflow: hidden; color: rgba(222, 238, 255, .5); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.chat-ctx-media:hover .chat-ctx-media-cover { outline: 1px solid rgba(0, 255, 204, .5); outline-offset: 1px; }
/* 右栏「精选灵感」：与灵感页同源的攻略卡（紧凑方形版 —— 单卡 ≈270×220，2 列） */
.chat-ctx-guide-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 9px; }
.chat-ctx-guide { position: relative; display: block; width: 100%; max-width: 270px; aspect-ratio: 270 / 220; padding: 0; border: 0; border-radius: 16px; overflow: hidden; background: rgba(255, 255, 255, .05); color: inherit; text-align: left; cursor: pointer; }
.chat-ctx-guide::after { content: ''; position: absolute; z-index: 1; inset: auto 0 0 0; height: 68%; background: linear-gradient(180deg, rgba(5, 8, 15, 0) 0%, rgba(5, 8, 15, .66) 58%, rgba(5, 8, 15, .92) 100%); pointer-events: none; }
.chat-ctx-guide:hover { outline: 1px solid rgba(0, 255, 204, .5); outline-offset: 1px; }
.chat-ctx-guide-media { position: absolute; inset: 0; display: block; width: 100%; height: 100%; }
.chat-ctx-guide-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .25s; }
.chat-ctx-guide:hover .chat-ctx-guide-media img { transform: scale(1.05); }
.chat-ctx-guide-badge { position: absolute; z-index: 2; top: 8px; left: 8px; padding: 3px 7px; border-radius: 999px; background: rgba(5, 8, 15, .72); color: #00FFCC; font-size: 10px; font-weight: 800; backdrop-filter: blur(6px); }
.chat-ctx-guide-body { position: absolute; z-index: 2; left: 10px; right: 10px; bottom: 9px; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.chat-ctx-guide-body b { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; color: #eaf4ff; font-size: 12px; font-weight: 700; line-height: 1.3; text-shadow: 0 1px 6px rgba(0, 0, 0, .5); }
.chat-ctx-guide-loc { overflow: hidden; color: rgba(226, 240, 255, .78); font-size: 10px; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; text-shadow: 0 1px 6px rgba(0, 0, 0, .5); }
.chat-ctx-guide-author { display: flex; align-items: center; gap: 5px; overflow: hidden; color: rgba(226, 240, 255, .82); font-size: 10px; font-weight: 600; white-space: nowrap; text-shadow: 0 1px 6px rgba(0, 0, 0, .5); }
.chat-ctx-guide-author .guide-avatar { width: 15px; height: 15px; font-size: 9px; }

/* ── 「为你推荐」城市切换：标题右侧一个原生下拉 ── */
.chat-ctx-block-tools { display: flex; align-items: center; gap: 6px; min-width: 0; }
/* 原生 <select> 用 appearance:none 抹掉系统箭头，再自己插一个小三角 + 定位针。
   ⚠️ 不要改成自绘浮层：右栏滚动容器 overflow-y:auto 会把绝对定位的菜单裁掉。
   ⚠️ 宽度由标签文字决定，不能让 <select> 参与排版 —— 它默认按最长选项撑宽，
      选「成都」时箭头会飘在离文字很远的地方。所以让 select 透明铺满整个胶囊，
      可见文字用独立 span 渲染。 */
.chat-poi-city-picker { position: relative; display: inline-flex; align-items: center; gap: 4px; max-width: 168px; padding: 3px 7px 3px 6px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 999px; background: rgba(255, 255, 255, .04); color: rgba(234, 244, 255, .88); transition: border-color .16s, background .16s, color .16s; }
.chat-poi-city-picker:hover, .chat-poi-city-picker:focus-within { border-color: rgba(0, 255, 204, .5); background: rgba(0, 255, 204, .1); color: #00FFCC; }
.chat-poi-city-label { overflow: hidden; min-width: 0; font-size: 11px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.chat-poi-city-select { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; padding: 0; border: 0; background: transparent; opacity: 0; cursor: pointer; appearance: none; -webkit-appearance: none; }
.chat-poi-city-select option { background: #0d1626; color: #eaf4ff; }
.chat-poi-city-pin { flex: 0 0 auto; width: 11px; height: 11px; fill: currentColor; opacity: .85; }
.chat-poi-city-caret { flex: 0 0 auto; width: 12px; height: 12px; fill: currentColor; opacity: .7; pointer-events: none; }

/* ── 「为你推荐」定位化 POI：分类 Tab + 地点卡 + 详情 ── */
.chat-poi-tabs { display: flex; gap: 6px; margin-bottom: 10px; }
.chat-poi-tab { flex: 1 1 0; padding: 6px 4px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 999px; background: rgba(255, 255, 255, .03); color: rgba(222, 238, 255, .68); font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; transition: background .16s, border-color .16s, color .16s; }
.chat-poi-tab:hover { border-color: rgba(0, 255, 204, .4); color: #00FFCC; }
.chat-poi-tab.is-on { border-color: rgba(0, 255, 204, .55); background: rgba(0, 255, 204, .16); color: #00FFCC; }
/* 卡片横滑轨道：一次一张卡（88% 宽），scroll-snap 吸附，配合左右箭头 */
.chat-poi-strip-wrap { position: relative; }
.chat-poi-track { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding: 2px; margin: 0 -2px; }
.chat-poi-track::-webkit-scrollbar { display: none; }
.chat-poi-card { position: relative; flex: 0 0 min(88%, 340px); width: min(88%, 340px); scroll-snap-align: start; display: flex; flex-direction: column; gap: 7px; padding: 0; border: 0; background: transparent; color: inherit; text-align: left; cursor: pointer; }
/* 箭头叠在封面图两侧（封面 16:9，88% 宽 ≈ 268px → 高约 150px，中心约 77px），触屏也可直接横滑 */
.chat-poi-arrow { position: absolute; z-index: 3; top: 95px; transform: translateY(-50%); display: grid; place-items: center; width: 26px; height: 26px; padding: 0 0 2px; border: 1px solid rgba(255, 255, 255, .16); border-radius: 50%; background: rgba(5, 8, 15, .78); color: rgba(234, 244, 255, .9); font-size: 16px; line-height: 1; cursor: pointer; backdrop-filter: blur(4px); transition: border-color .16s, color .16s, background .16s; }
.chat-poi-arrow:hover { border-color: rgba(0, 255, 204, .55); background: rgba(5, 8, 15, .92); color: #00FFCC; }
.chat-poi-arrow-prev { left: 7px; }
.chat-poi-arrow-next { right: 7px; }
.chat-poi-cover { display: block; width: 100%; aspect-ratio: 16 / 9; border-radius: 13px; object-fit: cover; background: rgba(255, 255, 255, .06); }
.chat-poi-cover-empty { background: linear-gradient(135deg, rgba(0, 255, 204, .18), rgba(124, 92, 255, .18)); }
.chat-poi-card:hover .chat-poi-cover { outline: 1px solid rgba(0, 255, 204, .5); outline-offset: 1px; }
/* 评分角标：只要 POI 带评分就显示（含无图卡片）；腾讯源没有评分字段，自然不渲染 */
.chat-poi-rating { position: absolute; top: 7px; right: 7px; padding: 2px 7px; border-radius: 999px; background: rgba(5, 8, 15, .72); color: #ffd166; font-size: 10px; font-weight: 700; letter-spacing: .02em; backdrop-filter: blur(4px); }
.chat-poi-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.chat-poi-text b { overflow: hidden; color: #eaf4ff; font-size: 12px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.chat-poi-text small { overflow: hidden; color: rgba(222, 238, 255, .5); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.chat-poi-hint { margin: 0; color: rgba(222, 238, 255, .45); font-size: 12px; line-height: 1.65; }
.chat-poi-hint-action { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.chat-poi-hint-action p { margin: 0; }
.chat-poi-cta { display: inline-flex; align-items: center; justify-content: center; padding: 9px 14px; border: 1px solid rgba(0, 255, 204, .5); border-radius: 999px; background: rgba(0, 255, 204, .16); color: #00FFCC; font: inherit; font-size: 12px; font-weight: 700; text-decoration: none; cursor: pointer; transition: background .16s, border-color .16s; }
.chat-poi-cta:hover { background: rgba(0, 255, 204, .26); }
.chat-poi-cta-ghost { border-color: rgba(255, 255, 255, .16); background: transparent; color: rgba(234, 244, 255, .85); }
.chat-poi-cta-ghost:hover { border-color: rgba(0, 255, 204, .5); background: rgba(0, 255, 204, .1); color: #00FFCC; }
.chat-poi-src { margin: 10px 0 0; color: rgba(222, 238, 255, .32); font-size: 10px; line-height: 1.5; }
.chat-poi-detail { display: flex; flex-direction: column; }
.chat-poi-detail-head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.chat-poi-back { display: grid; place-items: center; width: 28px; height: 28px; padding: 0 0 2px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 50%; background: transparent; color: rgba(234, 244, 255, .85); font-size: 17px; line-height: 1; cursor: pointer; transition: border-color .16s, color .16s; }
.chat-poi-back:hover { border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-poi-kind { padding: 3px 9px; border-radius: 999px; background: rgba(0, 255, 204, .14); color: #00FFCC; font-size: 10px; font-weight: 800; letter-spacing: .04em; }
.chat-poi-detail-map { display: block; margin-bottom: 12px; border-radius: 16px; overflow: hidden; }
.chat-poi-detail-map img { display: block; width: 100%; aspect-ratio: 640 / 300; object-fit: cover; background: rgba(255, 255, 255, .06); }
.chat-poi-detail-map:hover img { outline: 1px solid rgba(0, 255, 204, .5); outline-offset: -1px; }
/* 详情页实拍图集：横滑浏览（触屏滑动 / 桌面点左右箭头翻张），最后一张是静态地图位置兜底 */
.chat-poi-gallery-wrap { position: relative; margin-bottom: 12px; }
.chat-poi-gallery { display: flex; gap: 8px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; }
.chat-poi-gallery::-webkit-scrollbar { display: none; }
/* 复用列表卡片的圆形箭头，但垂直位置以图集为准（列表卡片的 top:95px 不适用） */
.chat-poi-shot-arrow { top: 50%; z-index: 3; }
.chat-poi-shot { flex: 0 0 88%; width: 88%; aspect-ratio: 4 / 3; border-radius: 14px; object-fit: cover; background: rgba(255, 255, 255, .06); scroll-snap-align: start; }
.chat-poi-shot-map { flex: 0 0 70%; width: 70%; opacity: .88; }
.chat-poi-title { margin: 0 0 4px; color: #eaf4ff; font-size: 16px; font-weight: 700; line-height: 1.35; }
.chat-poi-dist { margin: 0 0 12px; color: #00FFCC; font-size: 12px; font-weight: 600; }
.chat-poi-rows { display: flex; flex-direction: column; gap: 9px; margin: 0 0 14px; }
.chat-poi-rows div { display: flex; gap: 10px; align-items: baseline; }
.chat-poi-rows dt { flex: 0 0 40px; color: rgba(222, 238, 255, .42); font-size: 11px; }
.chat-poi-rows dd { flex: 1 1 auto; margin: 0; color: rgba(234, 244, 255, .9); font-size: 12px; line-height: 1.55; word-break: break-word; }
.chat-poi-actions { display: flex; flex-direction: column; gap: 8px; }
/* 「问问小远」：对当前推荐地点直接提问的输入框（MindTrip 式 Ask 栏） */
.chat-poi-ask { display: flex; align-items: center; gap: 8px; }
.chat-poi-ask input { flex: 1 1 auto; min-width: 0; height: 46px; padding: 0 18px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 999px; background: rgba(255, 255, 255, .06); color: #eaf4ff; font: inherit; font-size: 13px; outline: none; transition: border-color .16s, background .16s; }
.chat-poi-ask input::placeholder { color: rgba(222, 238, 255, .45); }
.chat-poi-ask input:focus { border-color: rgba(0, 255, 204, .55); background: rgba(0, 255, 204, .06); }
.chat-poi-ask button { display: grid; place-items: center; width: 46px; height: 46px; flex: 0 0 46px; padding: 0 0 2px; border: none; border-radius: 50%; background: #00FFCC; color: #05080f; font: inherit; font-size: 19px; font-weight: 700; line-height: 1; cursor: pointer; transition: filter .16s, transform .16s; }
.chat-poi-ask button:hover { filter: brightness(1.08); }
.chat-poi-ask button:active { transform: scale(.94); }

/* ── 右栏「AI契合旅伴精选」浏览态 ──
   点开卡片后右栏整体切换，在当前单页内翻看；不依赖 plaza.css（对话页不加载它）。 */
.chat-ctx-invite-view { display: flex; flex-direction: column; }
.chat-ctx-invite-head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.chat-ctx-invite-kind { flex: 1 1 auto; color: rgba(234, 244, 255, .78); font-size: 12px; font-weight: 700; letter-spacing: .04em; }
.chat-ctx-invite-count { flex: 0 0 auto; color: rgba(222, 238, 255, .45); font-size: 11px; font-variant-numeric: tabular-nums; }
.chat-ctx-invite-cover { margin-bottom: 12px; border-radius: 16px; aspect-ratio: 16 / 10; background-color: rgba(255, 255, 255, .06); background-image: linear-gradient(135deg, rgba(0, 255, 204, .22), rgba(124, 92, 255, .22)); background-size: cover; background-position: center; }
.chat-ctx-invite-title { margin: 0 0 6px; color: #eaf4ff; font-size: 16px; font-weight: 700; line-height: 1.35; }
.chat-ctx-invite-match { display: flex; align-items: center; gap: 6px; margin-bottom: 12px; color: #00FFCC; font-size: 12px; font-weight: 700; }
.chat-ctx-invite-dot { width: 6px; height: 6px; border-radius: 50%; background: #00FFCC; box-shadow: 0 0 8px rgba(0, 255, 204, .8); }
.chat-ctx-invite-decl { margin: 0 0 12px; padding: 10px 12px; border-radius: 14px; background: rgba(255, 255, 255, .04); color: rgba(234, 244, 255, .82); font-size: 12px; line-height: 1.7; }
.chat-ctx-invite-author { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.chat-ctx-invite-avatar { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; overflow: hidden; background: rgba(255, 255, 255, .08); font-size: 15px; }
.chat-ctx-invite-avatar img { width: 100%; height: 100%; object-fit: cover; }
.chat-ctx-invite-author strong { color: rgba(234, 244, 255, .9); font-size: 12px; font-weight: 600; }
.chat-ctx-invite-author small { color: rgba(222, 238, 255, .5); font-size: 11px; }
.chat-ctx-invite-actions { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.chat-ctx-invite-actions .btn { flex: 1 1 auto; }
.chat-ctx-fav-lg { flex: 0 0 auto; width: 42px; height: 42px; margin-right: 0; }
.chat-ctx-fav-lg svg { width: 17px; height: 17px; }
.chat-ctx-invite-nav { display: flex; gap: 8px; }
.chat-ctx-invite-step { flex: 1 1 0; padding: 9px 0; border: 1px solid rgba(255, 255, 255, .12); border-radius: 12px; background: rgba(255, 255, 255, .04); color: rgba(234, 244, 255, .82); font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; transition: border-color .16s, color .16s; }
.chat-ctx-invite-step:hover:not(:disabled) { border-color: rgba(0, 255, 204, .5); color: #00FFCC; }
.chat-ctx-invite-step:disabled { opacity: .4; cursor: not-allowed; }


/* ── 灵感页 ── */
.inspire-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(196px, 1fr)); gap: 14px; }
.inspire-grid .chat-ctx-media { padding: 8px 8px 12px; border: 1px solid rgba(255, 255, 255, .10); border-radius: 20px; background: rgba(255, 255, 255, .04); transition: border-color .16s, transform .16s; }
.inspire-grid .chat-ctx-media:hover { border-color: rgba(0, 255, 204, .45); transform: translateY(-2px); }
.inspire-grid .chat-ctx-media-cover { height: 138px; border-radius: 15px; }
.inspire-grid .chat-ctx-media-cover-empty { background: linear-gradient(135deg, rgba(0, 255, 204, .22), rgba(124, 92, 255, .22)); }
.inspire-grid .chat-ctx-media-text b { font-size: 14px; }
.inspire-second { margin-top: 34px; }

/* ── 创作者中心 ── */
.creator-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(158px, 1fr)); gap: 12px; }
.creator-stats article { display: flex; flex-direction: column; gap: 4px; padding: 18px; border: 1px solid rgba(255, 255, 255, .10); border-radius: 18px; background: rgba(255, 255, 255, .04); }
.creator-stats span { color: rgba(222, 238, 255, .55); font-size: 12px; }
.creator-stats strong { color: #00FFCC; font-size: 26px; font-weight: 800; }
.creator-section { margin-top: 18px; }

/* ── 创作者中心 Hub（创作 · 分享 · 收益，参考 MindTrip Creator Hub）── */
.creator-hub-hero { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 14px; margin: 18px 0; }
@media (max-width: 860px) { .creator-hub-hero { grid-template-columns: 1fr; } }
.creator-hub-identity { display: flex; align-items: center; gap: 14px; padding: 22px 24px; border: 1px solid rgba(255, 255, 255, .08); border-radius: 18px; background: rgba(255, 255, 255, .03); }
.creator-hub-avatar { display: grid; place-items: center; flex: 0 0 auto; width: 56px; height: 56px; border-radius: 50%; border: 1px solid rgba(0, 255, 204, .3); background: linear-gradient(135deg, rgba(0, 255, 204, .18), rgba(124, 92, 255, .18)); font-size: 24px; overflow: hidden; }
.creator-hub-avatar img { width: 100%; height: 100%; object-fit: cover; }
.creator-hub-id-copy { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.creator-hub-id-copy h2 { margin: 0; color: #eaf4ff; font-size: 20px; font-weight: 800; }
.creator-hub-id-copy small { color: rgba(222, 238, 255, .5); font-size: 12px; }
.creator-hub-pitch { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; padding: 20px 22px; border: 1px solid rgba(0, 255, 204, .22); border-radius: 18px; background: linear-gradient(160deg, rgba(0, 255, 204, .10), rgba(124, 92, 255, .08)); }
.creator-hub-pitch h3 { margin: 0; color: #eaf4ff; font-size: 16px; font-weight: 800; }
.creator-hub-pitch p { margin: 0; color: rgba(222, 238, 255, .66); font-size: 12px; line-height: 1.6; }
.creator-hub-tag { border: 1px solid rgba(0, 255, 204, .4); background: rgba(0, 255, 204, .1); color: #00FFCC; }
.creator-hub-tabs { display: inline-flex; gap: 4px; margin-bottom: 16px; padding: 4px; border: 1px solid rgba(255, 255, 255, .1); border-radius: 12px; background: rgba(255, 255, 255, .03); }
.creator-hub-tabs button { padding: 7px 22px; border: 0; border-radius: 9px; background: transparent; color: rgba(222, 238, 255, .6); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; transition: background .16s, color .16s; }
.creator-hub-tabs button:hover { color: #eaf4ff; }
.creator-hub-tabs button.is-on { background: rgba(0, 255, 204, .14); color: #00FFCC; }
.creator-hub-empty { display: flex; flex-direction: column; align-items: center; gap: 8px; margin-top: 22px; padding: 46px 20px 42px; border: 1px dashed rgba(255, 255, 255, .14); border-radius: 20px; background: rgba(255, 255, 255, .02); text-align: center; }
.creator-hub-empty-icon { display: grid; place-items: center; width: 52px; height: 52px; margin-bottom: 4px; border-radius: 50%; background: linear-gradient(135deg, rgba(0, 255, 204, .3), rgba(124, 92, 255, .3)); color: #eaf4ff; font-size: 22px; }
.creator-hub-empty h3 { margin: 0; color: #eaf4ff; font-size: 17px; font-weight: 800; }
.creator-hub-empty p { margin: 0; color: rgba(222, 238, 255, .55); font-size: 13px; }
.creator-hub-empty .btn { margin-top: 8px; }
.creator-hub-empty .creator-hub-tag { margin-top: 4px; }
.creator-hub-earn { margin-top: 22px; text-align: center; }
/* 底部风景滚动带：双份内容 translateX(-50%) 无缝 marquee，hover 暂停 */
.creator-scenery { overflow: hidden; margin-top: 26px; -webkit-mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent); mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent); }
.creator-scenery-track { display: flex; gap: 10px; width: max-content; animation: creator-marquee 70s linear infinite; }
.creator-scenery-track:hover { animation-play-state: paused; }
@keyframes creator-marquee { to { transform: translateX(calc(-50% - 5px)); } }
.creator-scenery-item { position: relative; flex: 0 0 auto; width: 224px; height: 132px; margin: 0; border-radius: 14px; overflow: hidden; background: rgba(255, 255, 255, .05); }
.creator-scenery-item img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .3s ease; }
.creator-scenery-item:hover img { transform: scale(1.04); }
.creator-scenery-item figcaption { position: absolute; left: 0; right: 0; bottom: 0; padding: 18px 10px 7px; background: linear-gradient(transparent, rgba(5, 8, 15, .78)); color: rgba(234, 244, 255, .82); font-size: 10px; opacity: 0; transition: opacity .2s; }
.creator-scenery-item:hover figcaption { opacity: 1; }
.creator-scenery-item.is-skeleton { background: linear-gradient(110deg, rgba(255, 255, 255, .04) 30%, rgba(255, 255, 255, .08) 50%, rgba(255, 255, 255, .04) 70%); background-size: 200% 100%; animation: creator-skeleton 1.8s linear infinite; }
@keyframes creator-skeleton { to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .creator-scenery-track { animation: none; } }
.creator-list { display: flex; flex-direction: column; gap: 10px; }
.creator-row { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 14px; border: 1px solid rgba(255, 255, 255, .10); border-radius: 16px; background: rgba(255, 255, 255, .04); }
.creator-row-main { flex: 1 1 240px; min-width: 0; }
.creator-row-tags { display: flex; gap: 6px; margin-bottom: 6px; }
.creator-row-main h3 { margin: 0 0 4px; color: #fff; font-size: 15px; }
.creator-row-meta { margin: 0; color: rgba(222, 238, 255, .55); font-size: 12px; }
.creator-row-stats { display: flex; gap: 20px; }
.creator-row-stats span { display: flex; flex-direction: column; gap: 2px; color: rgba(222, 238, 255, .55); font-size: 11px; }
.creator-row-stats b { color: #eaf4ff; font-size: 18px; font-weight: 800; }
.creator-row-actions { flex: 0 0 auto; }
.tag.is-alert { border-color: rgba(0, 255, 204, .4); background: rgba(0, 255, 204, .16); color: #00FFCC; }

/* ── 窄屏降级 ── */
@media (max-width: 1180px) {
  .chat-main-head .chat-slot { padding: 5px 9px; font-size: 11px; }
}
/* ════════════════════════════════════════════════════════════
   灵感页：攻略卡片网格 + 攻略详情（参考 MindTrip Guides）
   ════════════════════════════════════════════════════════════ */
.guide-search { position: relative; display: flex; align-items: center; gap: 10px; margin: 6px 0 22px; padding: 10px 14px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 999px; background: rgba(255, 255, 255, .04); }
.guide-search svg { flex: 0 0 auto; width: 18px; height: 18px; color: rgba(222, 238, 255, .5); }
.guide-search input { flex: 1; min-width: 0; border: 0; background: transparent; color: #eaf4ff; font: inherit; font-size: 14px; outline: none; }
.guide-search input::placeholder { color: rgba(222, 238, 255, .42); }
.guide-search .btn-icon { flex: 0 0 auto; width: 32px; height: 32px; padding: 0; border: 0; border-radius: 50%; background: rgba(0, 255, 204, .12); color: #00FFCC; font-size: 16px; line-height: 1; cursor: pointer; }
.guide-section { margin-top: 8px; }
.guide-section-title { margin: 0 0 16px; color: #eaf4ff; font-size: 17px; font-weight: 700; letter-spacing: .2px; }
.guide-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 18px; }
.guide-card { position: relative; display: flex; flex-direction: column; border-radius: 20px; background: rgba(255, 255, 255, .04); overflow: hidden; cursor: pointer; transition: transform .18s, box-shadow .18s, background .18s; }
.guide-card:hover { transform: translateY(-3px); background: rgba(255, 255, 255, .07); box-shadow: 0 16px 40px rgba(0, 0, 0, .28); }
.guide-card-media { position: relative; aspect-ratio: 4 / 5; overflow: hidden; }
.guide-card-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .25s; }
.guide-card:hover .guide-card-media img { transform: scale(1.04); }
.guide-card-badge { position: absolute; top: 10px; left: 10px; padding: 4px 8px; border-radius: 999px; background: rgba(0, 0, 0, .55); color: #fff; font-size: 11px; font-weight: 700; backdrop-filter: blur(6px); }
.guide-card-actions { position: absolute; top: 10px; right: 10px; display: flex; gap: 7px; }
.guide-card-btn { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 50%; background: rgba(0, 0, 0, .45); color: #fff; backdrop-filter: blur(6px); cursor: pointer; transition: background .16s, color .16s, transform .16s; }
.guide-card-btn:hover { background: rgba(0, 255, 204, .18); color: #00FFCC; transform: scale(1.08); }
.guide-card-btn svg { width: 15px; height: 15px; }
.guide-save.is-fav { background: rgba(0, 255, 204, .9); color: #05080f; }
.guide-save.is-fav svg { fill: #05080f; stroke: #05080f; }
.guide-card-plan { margin-top: 8px; padding: 8px 12px; border: 1px solid rgba(0, 255, 204, .32); border-radius: 11px; background: rgba(0, 255, 204, .1); color: #00FFCC; font: inherit; font-size: 12.5px; font-weight: 700; text-align: center; cursor: pointer; transition: background .16s, border-color .16s, transform .16s; }
.guide-card-plan:hover { background: rgba(0, 255, 204, .2); border-color: rgba(0, 255, 204, .55); transform: translateY(-1px); }
.guide-detail-actions .btn-ghost.is-fav { border-color: rgba(0, 255, 204, .45); background: rgba(0, 255, 204, .12); color: #00FFCC; }
.guide-detail-actions .btn-ghost.is-fav svg { fill: #00FFCC; }
.fav-tabs { margin-bottom: 18px; }
.fav-tabs button { display: inline-flex; align-items: center; gap: 6px; }
.fav-tab-count { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: rgba(255, 255, 255, .1); font-size: 11px; font-weight: 700; }
.fav-tabs button.is-on .fav-tab-count { background: rgba(0, 255, 204, .22); color: #00FFCC; }
/* 「规划这段旅程」消息里的攻略附件卡（短消息 + 集合卡片，仿 Mindtrip 引用卡） */
.chat-guide-attach { display: flex; align-items: stretch; gap: 11px; width: min(340px, 100%); margin: 2px 0 0; padding: 10px; border: 1px solid rgba(0, 255, 204, .28); border-radius: 16px; background: rgba(0, 255, 204, .07); text-align: left; cursor: pointer; transition: background .16s, border-color .16s; }
.chat-guide-attach:hover { background: rgba(0, 255, 204, .13); border-color: rgba(0, 255, 204, .5); }
.chat-guide-attach-media { flex: 0 0 64px; width: 64px; min-height: 64px; border-radius: 11px; overflow: hidden; }
.chat-guide-attach-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.chat-guide-attach-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.chat-guide-attach-body small { color: rgba(0, 255, 204, .85); font-size: 11px; font-weight: 700; letter-spacing: .4px; }
.chat-guide-attach-body strong { color: #eaf4ff; font-size: 13.5px; font-weight: 700; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.chat-guide-attach-body p { margin: 0; color: rgba(222, 238, 255, .6); font-size: 12px; line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.guide-card-body { display: flex; flex-direction: column; gap: 7px; padding: 12px 13px 14px; }
.guide-card-title { margin: 0; color: #eaf4ff; font-size: 14px; font-weight: 700; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.guide-card-location { margin: 0; color: rgba(222, 238, 255, .55); font-size: 12px; line-height: 1.4; }
.guide-card-author { display: flex; align-items: center; gap: 8px; margin-top: 2px; color: rgba(222, 238, 255, .65); font-size: 12px; font-weight: 600; }
.guide-avatar { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: rgba(0, 255, 204, .15); color: #00FFCC; font-size: 11px; font-weight: 700; overflow: hidden; }
.guide-avatar img { width: 100%; height: 100%; object-fit: cover; }

/* 攻略详情页：左侧内容 + 右侧地图 */
.guide-detail { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(340px, 480px); gap: 20px; height: calc(100% - 8px); min-height: 0; }
.guide-detail-main { display: flex; flex-direction: column; min-height: 0; overflow-y: auto; padding-right: 6px; }
.guide-back { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 16px; padding: 0; border: 0; background: transparent; color: rgba(222, 238, 255, .6); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; transition: color .16s; }
.guide-back:hover { color: #00FFCC; }
.guide-back svg { width: 16px; height: 16px; }
.guide-detail-hero { position: relative; border-radius: 24px; overflow: hidden; aspect-ratio: 16 / 9; min-height: 220px; }
.guide-detail-hero img { width: 100%; height: 100%; object-fit: cover; }
.guide-detail-hero-overlay { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; padding: 22px 24px; background: linear-gradient(180deg, rgba(0,0,0,0) 20%, rgba(0,0,0,.72) 100%); }
.guide-detail-hero-overlay h1 { margin: 0 0 10px; color: #fff; font-size: 32px; font-weight: 800; line-height: 1.15; text-shadow: 0 2px 16px rgba(0,0,0,.4); }
.guide-detail-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 0; color: rgba(255,255,255,.9); font-size: 13px; font-weight: 600; }
.guide-detail-meta .guide-avatar { background: rgba(255,255,255,.2); color: #fff; }
.guide-dot { color: rgba(255,255,255,.5); }
.guide-detail-actions { display: flex; align-items: center; gap: 12px; margin: 18px 0 22px; }
.guide-detail-actions .btn { display: inline-flex; align-items: center; gap: 7px; }
.guide-detail-actions .btn svg { width: 16px; height: 16px; }
.guide-detail-content { color: rgba(234, 244, 255, .85); font-size: 14px; line-height: 1.75; }
.guide-detail-content h2 { margin: 26px 0 12px; color: #eaf4ff; font-size: 18px; font-weight: 700; }
.guide-detail-content h3 { margin: 22px 0 10px; color: #eaf4ff; font-size: 15px; font-weight: 700; }
.guide-detail-content p { margin: 0 0 14px; }
.guide-highlights { padding: 12px 16px; border-radius: 14px; background: rgba(0, 255, 204, .08); color: rgba(234, 244, 255, .9); font-size: 13px; line-height: 1.6; }
.guide-places { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 10px; margin: 0; padding: 0; list-style: none; }
.guide-places li { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 12px; background: rgba(255, 255, 255, .05); color: rgba(234, 244, 255, .88); font-size: 13px; font-weight: 600; }
.guide-place-num { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: rgba(0, 255, 204, .15); color: #00FFCC; font-size: 11px; font-weight: 800; }
/* 逐日行程规划（详细攻略版） */
.guide-itinerary { display: flex; flex-direction: column; gap: 14px; margin: 0 0 20px; }
.guide-day { padding: 16px 18px; border-radius: 18px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(0, 255, 204, .12); }
.guide-day-head { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px; }
.guide-day-badge { flex: none; padding: 4px 10px; border-radius: 999px; background: rgba(0, 255, 204, .15); color: #00FFCC; font-size: 11px; font-weight: 800; letter-spacing: .04em; }
.guide-day-head-copy h3 { margin: 0 0 2px; font-size: 14px; font-weight: 700; color: #eaf4ff; }
.guide-day-head-copy p { margin: 0; font-size: 12px; color: rgba(234, 244, 255, .6); line-height: 1.6; }
.guide-day-stops { display: flex; flex-direction: column; gap: 0; margin: 0; padding: 0; list-style: none; }
.guide-day-stops li { position: relative; display: flex; align-items: flex-start; gap: 12px; padding: 10px 0 10px 18px; border-top: 1px dashed rgba(255, 255, 255, .08); }
.guide-day-stops li:first-child { border-top: 0; }
.guide-day-stops li::before { content: ''; position: absolute; left: 2px; top: 18px; width: 8px; height: 8px; border-radius: 50%; background: #00FFCC; box-shadow: 0 0 0 3px rgba(0, 255, 204, .15); }
.guide-stop-time { flex: none; min-width: 44px; padding-top: 2px; color: #00FFCC; font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; }
.guide-stop-body strong { display: block; color: rgba(234, 244, 255, .92); font-size: 13px; font-weight: 700; }
.guide-stop-body p { margin: 2px 0 0; font-size: 12px; line-height: 1.65; color: rgba(234, 244, 255, .62); }
.guide-day-tips { margin: 10px 0 0; padding: 10px 12px; border-radius: 12px; background: rgba(0, 255, 204, .07); color: rgba(234, 244, 255, .75); font-size: 12px; line-height: 1.6; }
.guide-day-tips::before { content: '💡 '; }
.guide-detail-map { position: relative; min-height: 0; border-radius: 24px; overflow: hidden; background: rgba(0, 0, 0, .25); }
.guide-amap-map { width: 100%; height: 100%; min-height: 360px; }
.guide-amap-map.is-live { background: transparent; }
.guide-map-fallback { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 24px; background: rgba(7, 11, 18, .85); color: rgba(222, 238, 255, .65); font-size: 13px; text-align: center; }
.guide-pin { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: #00FFCC; color: #05080f; font-size: 12px; font-weight: 800; box-shadow: 0 2px 8px rgba(0,0,0,.4); }
/* 攻略地图 marker 弹窗详情（高德 InfoWindow 默认白底，配深色文字） */
.guide-map-popup { min-width: 180px; max-width: 260px; }
.guide-map-popup-img { display: block; width: 100%; height: 100px; margin: 0 0 8px; border-radius: 10px; object-fit: cover; background: rgba(16, 21, 31, .08); }
.guide-map-popup-ph { display: block; width: 100%; height: 100px; margin: 0 0 8px; border-radius: 10px; background: linear-gradient(120deg, rgba(16, 21, 31, .08), rgba(16, 21, 31, .16)); }
.guide-map-popup-ph.is-loading { background: linear-gradient(120deg, rgba(16, 21, 31, .08) 25%, rgba(16, 21, 31, .16) 50%, rgba(16, 21, 31, .08) 75%); background-size: 240% 100%; animation: guide-popup-shimmer 1.4s linear infinite; }
@keyframes guide-popup-shimmer { from { background-position: 120% 0; } to { background-position: -120% 0; } }
.guide-map-popup strong { display: block; margin: 0 0 2px; color: #10151f; font-size: 13px; font-weight: 700; line-height: 1.4; }
.guide-map-popup-meta { display: block; margin: 0 0 4px; color: #0a8f75; font-size: 11px; font-weight: 700; letter-spacing: .02em; }
.guide-map-popup p { margin: 0; color: rgba(16, 21, 31, .78); font-size: 12px; line-height: 1.6; }

@media (max-width: 860px) {
  /* 导航轨宿主页在窄屏同样退化为「单栏 + 抽屉」，覆盖前面的 rail-only 两栏规则 */
  .chat-workspace.rail-only, .chat-workspace.rail-only.sidebar-collapsed { grid-template-columns: minmax(0, 1fr); }
  .rail-page .chat-main-scroll { padding: 20px 16px 36px; }
  .chat-menu-btn { display: grid; }
  .chat-main-head .chat-main-title { display: none; }
  .chat-main-head .chat-slotbar { flex: 1 1 auto; overflow-x: auto; scrollbar-width: none; }
  .chat-main-head .chat-slotbar::-webkit-scrollbar { display: none; }
  .chat-main-head .chat-slotbar-row { flex-wrap: nowrap; }
  .chat-main-head .chat-slot-menu { right: auto; left: 0; }
  .chat-hero-art { width: 118px; height: 118px; }
  .chat-hero-art img { width: 74px; height: 74px; border-radius: 24px; }
  .chat-hero-earth { width: 87px; height: 87px; }
  .inspire-grid { grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 11px; }
  .inspire-grid .chat-ctx-media-cover { height: 112px; }
  /* plaza.css 在 ≤900px 把卡片栈压到 460px，会裁掉卡片底部的「加入旅程」按钮，
     轨内 FEED 以浏览邀约为主，这里保持 500px 让操作按钮完整可见 */
  .rail-page .plaza-deck-viewport { height: 500px; min-height: 500px; }
  .creator-row-stats { gap: 14px; }
  .creator-row-actions { flex: 1 1 100%; }
  .creator-row-actions .btn { width: 100%; }
}

/* ════════════════════════════════════════════════════════════
   移动端（≤860px）· 对齐 MindTrip：底部 Tab 栏 + 内容为主体 + 对话态切对话框
   桌面端完全不参与（.m-chat-tabs / .m-chat-dock 默认 display:none）。
   注意：本段必须留在文件末尾 —— 前面的三栏规则是后写的，会覆盖 line 426 的旧单列规则。
   ════════════════════════════════════════════════════════════ */
.m-chat-tabs, .m-chat-dock { display: none; }
@media (max-width: 860px) {
  /* ① 单列：把被末尾三栏规则覆盖掉的移动端布局重新声明回来
     （必须列全组合态 —— .sidebar-collapsed.context-collapsed 有三个类名，特异性比两类的规则高） */
  .chat-workspace,
  .chat-workspace.sidebar-collapsed,
  .chat-workspace.context-collapsed,
  .chat-workspace.sidebar-collapsed.context-collapsed,
  .chat-workspace.rail-only,
  .chat-workspace.rail-only.sidebar-collapsed,
  .chat-workspace.rail-only.context-collapsed,
  .chat-workspace.rail-only.sidebar-collapsed.context-collapsed { grid-template-columns: minmax(0, 1fr); }

  /* ② 底部 Tab 栏占位（避免内容被固定栏遮住） */
  .chat-workspace { padding-bottom: calc(60px + env(safe-area-inset-bottom)); }

  /* ③ 底部 Tab 栏（六项，对齐 MindTrip 底部导航） */
  .m-chat-tabs { position: fixed; z-index: 70; left: 0; right: 0; bottom: 0; display: flex; justify-content: space-around; padding: 6px 2px max(6px, env(safe-area-inset-bottom)); border-top: 1px solid rgba(255, 255, 255, .08); background: rgba(7, 11, 18, .96); backdrop-filter: blur(18px); }
  .m-chat-tab { position: relative; display: flex; flex-direction: column; align-items: center; flex: 1 1 0; gap: 3px; min-width: 0; padding: 3px 0 2px; border: 0; background: transparent; color: rgba(222, 238, 255, .5); font: inherit; font-size: 10px; font-weight: 600; line-height: 1.2; cursor: pointer; }
  .m-chat-tab svg { width: 21px; height: 21px; flex: 0 0 auto; }
  .m-chat-tab span { display: block; min-width: 0; max-width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
  .m-chat-tab.is-on { color: #00FFCC; }
  .m-chat-tab.is-on span { font-weight: 800; }
  /* 进行中旅程的脉冲圆点（底部 Tab 的「旅程」）。旅中是移动场景，这一格才是主入口。 */
  .m-chat-tab-dot { position: absolute; top: 1px; left: 50%; margin-left: 4px; width: 7px; height: 7px; border-radius: 50%; background: #00FFCC; box-shadow: 0 0 0 2px rgba(7, 11, 18, .96), 0 0 7px rgba(0, 255, 204, .8); z-index: 1; }
  .m-chat-tab-dot::after { content: ''; position: absolute; inset: -3px; border-radius: 50%; border: 1.5px solid rgba(0, 255, 204, .85); animation: rail-dot-pulse 1.9s ease-out infinite; }

  /* ④ 双面板：home = 内容页为主视觉；chat = 对话面板 */
  .chat-workspace.m-home .chat-main { display: none; }
  .chat-workspace.m-home .chat-context { position: static; display: flex; width: auto; border-left: 0; background: transparent; box-shadow: none; transform: none; }
  .chat-workspace.m-chat .chat-context { display: none !important; }
  /* 移动端内容页不需要「发现 / 关闭」头，Tab 栏就是它的导航 */
  .chat-workspace.m-home .chat-context-head { display: none; }
  .chat-workspace.m-home .chat-context-scroll { padding: 16px 16px calc(84px + env(safe-area-inset-bottom)); }
  /* 内容页在移动端是主视觉：卡片栅格放宽到两列 */
  .chat-ctx-media-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .chat-poi-card { flex: 0 0 min(72%, 250px); width: min(72%, 250px); }
  .chat-poi-arrow { top: 74px; }

  /* ⑤ 首页态常驻提问条（MindTrip 的 Ask anything 条） */
  .m-chat-dock { position: fixed; z-index: 69; left: 14px; right: 14px; bottom: calc(68px + env(safe-area-inset-bottom)); display: flex; align-items: center; gap: 10px; padding: 11px 14px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 999px; background: rgba(12, 20, 32, .95); box-shadow: 0 14px 34px rgba(0, 0, 0, .5); backdrop-filter: blur(16px); color: rgba(222, 238, 255, .55); font: inherit; font-size: 14px; text-align: left; cursor: pointer; }
  .m-chat-dock i { display: grid; place-items: center; flex: 0 0 auto; width: 24px; height: 24px; border-radius: 50%; background: rgba(255, 255, 255, .06); color: #cfe9ff; font-size: 15px; font-style: normal; line-height: 1; }
  .m-chat-dock span { flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
  .chat-workspace.m-chat .m-chat-dock { display: none; }

  /* ⑥ 对话面板：头部保留标题（窄屏原规则把它藏了），去掉多余的右栏开关 */
  .chat-workspace.m-chat .chat-main-head .chat-main-title { display: flex; }
  .chat-workspace.m-chat .chat-main-head .chat-context-toggle { display: none; }
  .chat-main-head { padding: 0 12px; }
  .chat-hero-sub { font-size: 13px; }

  /* ⑦ 轨内页（旅程 / 探索 / 灵感 / 创作者中心）：内容区避开底部 Tab 栏 */
  .rail-page .chat-main-scroll { padding: 18px 16px calc(30px + env(safe-area-inset-bottom)); }
  /* 轨内页在移动端保留页面标题（窄屏原规则统一隐藏了标题） */
  .chat-workspace.rail-only .chat-main-head .chat-main-title { display: flex; }
  .creator-scenery { margin-bottom: 4px; }

  /* ⑧ 顶栏页（广场 / 同行空间 / 我的 等）：导航移到下方 —— 顶栏只留品牌与账号，底部出 Tab 栏 */
  .app-shell:not(.bare-shell) { padding-bottom: calc(60px + env(safe-area-inset-bottom)); }
  .topbar { min-height: 52px; padding: 0 14px; }
  .topbar .top-nav { display: none; }
  .topbar .brand small { display: none; }
  .topbar .top-actions { gap: 6px; }
  .topbar .top-actions .btn-ghost { display: none; }
  .site-footer { padding: 18px 16px calc(20px + env(safe-area-inset-bottom)); }

  /* ⑨ 灵感页攻略在移动端单列堆叠 */
  .guide-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .guide-card-media { aspect-ratio: 3 / 4; }
  .guide-detail { grid-template-columns: minmax(0, 1fr); height: auto; }
  .guide-detail-main { overflow: visible; }
  .guide-detail-hero-overlay h1 { font-size: 24px; }
  .guide-detail-map { height: 320px; min-height: 320px; margin-top: 8px; }
  .guide-places { grid-template-columns: 1fr; }
}

/* 登录弹窗必须盖住导航轨 / 底部 Tab 栏（原 z-index:20 低于抽屉的 60，移动端会被压住） */
.modal-backdrop { z-index: 200; }
@media (max-width: 860px) {
  .modal-backdrop { padding: 14px; align-items: end; }
  .modal { width: 100%; max-height: 92dvh; padding: 20px; border-radius: 26px 26px 20px 20px; }
  .modal-head h3 { font-size: 20px; }
  .phone-group { flex-wrap: wrap; }
  .phone-group .country-select { flex: 1 1 100%; min-width: 0; }
  .phone-group input { flex: 1 1 auto; min-width: 0; }
  .phone-group button { flex: 0 0 auto; white-space: nowrap; }
}

/* ══════════════════════════════════════════════════════════════════════
   行程地图工作台 · Trip Map Studio（web/trip-map-studio.js）
   暗色底 + --primary #00ffcc / --accent #7c5cff 双色强调；地图用 amap://styles/dark，面板必须同为深色底。
   ══════════════════════════════════════════════════════════════════════ */
.tms { position: absolute; inset: 0; display: flex; flex-direction: column; overflow: hidden; background: #05080f; color: #eaf4ff; font-size: 13px; }
.tms *, .tms-overlay * { box-sizing: border-box; }
.tms-head { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; padding: 10px 12px; border-bottom: 1px solid rgba(255, 255, 255, .08); background: rgba(10, 18, 30, .86); }
.tms-daychips { display: flex; gap: 6px; flex: 1 1 auto; min-width: 0; overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; padding: 2px; scroll-behavior: smooth; }
.tms-daychips::-webkit-scrollbar { display: none; }
.tms-chip { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; padding: 6px 11px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 999px; background: rgba(255, 255, 255, .04); color: rgba(234, 244, 255, .78); font: inherit; font-size: 12px; line-height: 1.2; cursor: pointer; transition: border-color .18s ease, background .18s ease, color .18s ease, transform .18s ease; }
.tms-chip b { font-weight: 800; color: inherit; }
.tms-chip small, .tms-chip em { color: rgba(234, 244, 255, .45); font-size: 11px; font-style: normal; }
.tms-chip small { max-width: 96px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tms-chip:hover { transform: translateY(-1px); border-color: rgba(0, 255, 204, .45); }
.tms-chip.is-active { background: rgba(0, 255, 204, .14); border-color: rgba(0, 255, 204, .6); color: #eafffb; }
.tms-chip.is-active small, .tms-chip.is-active em { color: rgba(234, 255, 251, .7); }
.tms-chip.is-drop-target { background: rgba(124, 92, 255, .2); border-color: #7c5cff; color: #f2ecff; box-shadow: 0 0 0 3px rgba(124, 92, 255, .18); }
.tms-tools { display: flex; gap: 6px; flex: 0 0 auto; }
.tms-tool { padding: 6px 10px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 10px; background: rgba(255, 255, 255, .04); color: rgba(234, 244, 255, .75); font: inherit; font-size: 12px; cursor: pointer; transition: all .16s ease; white-space: nowrap; }
.tms-tool:hover { border-color: rgba(0, 255, 204, .5); color: #00ffcc; }
.tms-tool.is-on { background: rgba(0, 255, 204, .14); border-color: rgba(0, 255, 204, .55); color: #eafffb; }
.tms-tool-primary { border-color: rgba(124, 92, 255, .5); color: #cfc4ff; }
.tms-tool-primary:hover { border-color: #7c5cff; color: #e6dcff; background: rgba(124, 92, 255, .16); }
.tms-body { position: relative; display: flex; flex: 1 1 auto; min-height: 0; flex-direction: column; }
.tms-map { flex: 1 1 auto; min-height: 210px; background: #05080f; }
.tms-status { position: absolute; left: 12px; right: 12px; bottom: 12px; z-index: 6; display: flex; align-items: center; gap: 8px; padding: 9px 12px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 12px; background: rgba(8, 14, 24, .9); backdrop-filter: blur(8px); font-size: 12px; color: rgba(234, 244, 255, .8); }
.tms-status p { margin: 0; }
.tms-status-dot { width: 7px; height: 7px; flex: 0 0 7px; border-radius: 50%; background: #00ffcc; box-shadow: 0 0 0 4px rgba(0, 255, 204, .18); animation: tms-blink 1.6s ease-in-out infinite; }
@keyframes tms-blink { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.tms-side { display: flex; flex: 0 0 auto; flex-direction: column; min-height: 0; max-height: 52%; border-top: 1px solid rgba(255, 255, 255, .08); background: rgba(8, 14, 24, .96); }
.tms-rail-wrap { flex: 0 0 auto; padding: 10px 12px 6px; border-bottom: 1px solid rgba(255, 255, 255, .07); }
.tms-rail-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.tms-rail-head b { font-size: 13px; color: #eaf4ff; }
.tms-rail-head small { color: rgba(234, 244, 255, .45); font-size: 11px; }
.tms-rail { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 4px; scrollbar-width: thin; }
.tms-rec { display: flex; flex: 0 0 138px; flex-direction: column; gap: 5px; padding: 8px; border: 1px solid rgba(255, 255, 255, .1); border-radius: 14px; background: rgba(255, 255, 255, .04); cursor: grab; transition: transform .16s ease, border-color .16s ease, box-shadow .16s ease; }
.tms-rec:hover { transform: translateY(-2px); border-color: rgba(0, 255, 204, .5); box-shadow: 0 12px 26px rgba(0, 0, 0, .45); }
.tms-rec.is-dragging { opacity: .5; cursor: grabbing; }
.tms-rec-cover { position: relative; height: 66px; border-radius: 10px; overflow: hidden; background: linear-gradient(135deg, rgba(0, 255, 204, .18), rgba(124, 92, 255, .22)); }
.tms-rec-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tms-rec-cover span { position: absolute; inset: 0; display: grid; place-items: center; font-size: 20px; }
.tms-rec b { font-size: 12px; line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.tms-rec small { color: rgba(234, 244, 255, .5); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tms-rec-add { margin-top: auto; padding: 5px 8px; border: 1px solid rgba(0, 255, 204, .4); border-radius: 9px; background: rgba(0, 255, 204, .1); color: #00ffcc; font: inherit; font-size: 11px; cursor: pointer; transition: background .16s ease; }
.tms-rec-add:hover { background: rgba(0, 255, 204, .22); }
.tms-sheet { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 10px 12px 14px; scrollbar-width: thin; }
.tms-sheet.is-drop-target { background: rgba(124, 92, 255, .09); }
.tms-sheet-head { display: grid; gap: 3px; margin-bottom: 8px; }
.tms-sheet-head .kicker { color: #00ffcc; font-size: 10px; letter-spacing: .14em; font-weight: 800; }
.tms-sheet-head b { font-size: 14px; }
.tms-sheet-head small { color: rgba(234, 244, 255, .45); font-size: 11px; line-height: 1.5; }
.tms-stops { display: grid; gap: 7px; margin: 0; padding: 0; list-style: none; }
.tms-stop { display: grid; grid-template-columns: 12px 22px 52px minmax(0, 1fr); gap: 8px; align-items: start; padding: 9px; border: 1px solid rgba(255, 255, 255, .08); border-radius: 14px; background: rgba(255, 255, 255, .035); cursor: grab; transition: border-color .16s ease, background .16s ease; }
.tms-stop:hover { border-color: rgba(0, 255, 204, .35); background: rgba(0, 255, 204, .05); }
.tms-stop.is-dragging { opacity: .45; cursor: grabbing; }
.tms-stop.is-drop-target.is-drop-above { box-shadow: inset 0 3px 0 0 #7c5cff; }
.tms-stop.is-drop-target.is-drop-below { box-shadow: inset 0 -3px 0 0 #7c5cff; }
.tms-stop.is-unverified { border-style: dashed; border-color: rgba(255, 255, 255, .18); }
.tms-stop-grip { color: rgba(234, 244, 255, .3); font-size: 13px; line-height: 1.4; letter-spacing: -2px; }
.tms-stop-index { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 8px; background: color-mix(in srgb, var(--tms-color, #00ffcc) 22%, transparent); color: var(--tms-color, #00ffcc); font-size: 11px; font-weight: 800; border: 1px solid color-mix(in srgb, var(--tms-color, #00ffcc) 45%, transparent); }
.tms-stop-thumb { width: 52px; height: 52px; border-radius: 11px; overflow: hidden; background: linear-gradient(135deg, rgba(0, 255, 204, .14), rgba(124, 92, 255, .2)); }
.tms-stop-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tms-stop-thumb span { display: grid; place-items: center; width: 100%; height: 100%; color: var(--tms-color, #00ffcc); font-size: 16px; font-weight: 800; }
.tms-stop-main { min-width: 0; display: grid; gap: 5px; }
.tms-stop-top { display: flex; align-items: center; gap: 8px; }
.tms-time { width: 54px; flex: 0 0 54px; padding: 3px 6px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 8px; background: rgba(5, 8, 15, .7); color: #00ffcc; font: inherit; font-size: 12px; font-weight: 700; }
.tms-time:focus { outline: none; border-color: rgba(0, 255, 204, .6); }
.tms-stop-name { flex: 1 1 auto; min-width: 0; font-size: 13px; line-height: 1.35; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tms-stop-x { flex: 0 0 auto; width: 22px; height: 22px; border: 1px solid transparent; border-radius: 7px; background: transparent; color: rgba(234, 244, 255, .4); font: inherit; font-size: 12px; cursor: pointer; transition: all .16s ease; }
.tms-stop-x:hover { background: rgba(220, 38, 38, .16); border-color: rgba(220, 38, 38, .4); color: #ff8585; }
.tms-stop-chips, .tms-pop-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.tms-tag { display: inline-flex; align-items: center; gap: 3px; padding: 3px 7px; border: 1px solid rgba(255, 255, 255, .12); border-radius: 999px; background: rgba(255, 255, 255, .05); color: rgba(234, 244, 255, .72); font-size: 11px; line-height: 1.3; }
.tms-tag.is-strong { border-color: rgba(0, 255, 204, .45); background: rgba(0, 255, 204, .12); color: #9dffe8; }
.tms-stop-why { margin: 0; color: rgba(234, 244, 255, .58); font-size: 11.5px; line-height: 1.6; }
.tms-stop-note { margin: 0; padding-left: 8px; border-left: 2px solid rgba(0, 255, 204, .4); color: rgba(234, 244, 255, .5); font-size: 11.5px; line-height: 1.6; }
.tms-hint { margin: 0; padding: 10px 2px; color: rgba(234, 244, 255, .45); font-size: 12px; }
/* 地图标记 */
.tms-pin { display: grid; place-items: center; width: 26px; height: 26px; border: 2px solid rgba(255, 255, 255, .92); border-radius: 50% 50% 50% 6px; background: var(--tms-color, #00ffcc); color: #04201b; font-size: 12px; font-weight: 800; transform: rotate(-45deg); box-shadow: 0 0 0 5px color-mix(in srgb, var(--tms-color, #00ffcc) 24%, transparent), 0 6px 16px rgba(0, 0, 0, .5); cursor: grab; transition: transform .16s ease, box-shadow .16s ease; }
.tms-pin > * { transform: rotate(45deg); }
.tms-pin:hover { transform: rotate(-45deg) scale(1.12); }
.tms-pin.is-dim { opacity: .45; filter: saturate(.5); }
.tms-pin.is-rec { border-radius: 50%; background: #7c5cff; color: #fff; box-shadow: 0 0 0 5px rgba(124, 92, 255, .22), 0 6px 16px rgba(0, 0, 0, .5); }
.tms-pulse { display: block; width: 12px; height: 12px; border-radius: 50%; background: var(--tms-color, #00ffcc); box-shadow: 0 0 0 4px color-mix(in srgb, var(--tms-color, #00ffcc) 28%, transparent), 0 0 18px color-mix(in srgb, var(--tms-color, #00ffcc) 70%, transparent); animation: tms-ping 1.4s ease-out infinite; }
@keyframes tms-ping { 0% { transform: scale(.7); opacity: .9; } 70% { transform: scale(1.5); opacity: .15; } 100% { transform: scale(1.5); opacity: 0; } }
/* 地图弹窗 */
/* InfoWindow isCustom 容器：深色底与工作台主题一致（高德默认白底会让浅色文字消失） */
.tms-pop-wrap { background: rgba(9, 14, 26, .97); border: 1px solid rgba(255, 255, 255, .16); border-radius: 16px; padding: 12px; box-shadow: 0 18px 48px rgba(0, 0, 0, .55); color: #eaf4ff; }
.tms-pop-wrap .tms-pop-body strong { color: #eaf4ff; }
.tms-pop-wrap .tms-pop-reason { color: rgba(234, 244, 255, .78); }
.tms-pop { display: grid; grid-template-columns: 92px minmax(0, 1fr); gap: 10px; width: 268px; }
.tms-pop.is-rec { border-left: 3px solid #7c5cff; }
.tms-pop-cover { width: 92px; height: 92px; border-radius: 12px; object-fit: cover; }
.tms-pop-body { min-width: 0; display: grid; gap: 5px; align-content: start; }
.tms-pop-body strong { display: block; font-size: 14px; line-height: 1.35; }
.tms-pop-line { color: rgba(255, 255, 255, .55); font-size: 11.5px; }
.tms-pop-why { margin: 0; color: rgba(255, 255, 255, .6); font-size: 11.5px; line-height: 1.6; }
.tms-pop-actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 2px; }
.tms-pop-actions a, .tms-pop-actions button { padding: 4px 9px; border: 1px solid rgba(255, 255, 255, .18); border-radius: 8px; background: rgba(255, 255, 255, .06); color: #fff; font: inherit; font-size: 11.5px; text-decoration: none; cursor: pointer; }
.tms-pop-actions a:hover, .tms-pop-actions button:hover { border-color: #00ffcc; color: #00ffcc; }
/* 大图编排 */
.tms-overlay { position: fixed; inset: 0; z-index: 1200; display: flex; align-items: center; justify-content: center; padding: 22px; background: rgba(3, 6, 12, .82); backdrop-filter: blur(10px); animation: tms-fade .22s ease; }
@keyframes tms-fade { from { opacity: 0; } to { opacity: 1; } }
.tms-overlay-panel { position: relative; width: min(1440px, 96vw); height: min(920px, 94vh); border: 1px solid rgba(255, 255, 255, .12); border-radius: 26px; overflow: hidden; box-shadow: 0 40px 120px rgba(0, 0, 0, .65); }
.tms-overlay-close { position: absolute; top: 14px; right: 16px; z-index: 9; width: 32px; height: 32px; border: 1px solid rgba(255, 255, 255, .18); border-radius: 10px; background: rgba(10, 16, 28, .8); color: #eaf4ff; font-size: 15px; cursor: pointer; }
.tms-overlay-close:hover { border-color: #00ffcc; color: #00ffcc; }
.tms.is-fullscreen .tms-body { flex-direction: row; }
.tms.is-fullscreen .tms-map { flex: 1 1 60%; min-height: 0; }
.tms.is-fullscreen .tms-side { flex: 0 0 40%; max-height: none; border-top: 0; border-left: 1px solid rgba(255, 255, 255, .08); }
.tms.is-fullscreen .tms-rail { flex-wrap: nowrap; }
.tms.is-fullscreen .tms-rec { flex-basis: 150px; }
body.tms-dragging { cursor: grabbing; user-select: none; }
body.tms-dragging .tms-map { cursor: grabbing; }
@media (max-width: 1180px) {
  .tms.is-fullscreen .tms-body { flex-direction: column; }
  .tms.is-fullscreen .tms-side { flex: 1 1 auto; border-left: 0; border-top: 1px solid rgba(255, 255, 255, .08); }
}
@media (max-width: 860px) {
  .tms-map { min-height: 190px; }
  .tms-side { max-height: 58%; }
  .tms-stop { grid-template-columns: 10px 22px 44px minmax(0, 1fr); gap: 7px; }
  .tms-stop-thumb { width: 44px; height: 44px; }
  .tms-overlay { padding: 0; }
  .tms-overlay-panel { width: 100vw; height: 100vh; border-radius: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .tms-pulse, .tms-status-dot { animation: none; }
  .tms-overlay { animation: none; }
}

/* AI 行程卡富化（聊天消息流里的 .ai-plan-card） */
.ai-plan-card .ai-plan-head { flex-wrap: wrap; gap: 10px; }
.ai-plan-head-actions { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.ai-plan-map-btn { padding: 8px 12px; border: 1px solid rgba(0, 255, 204, .45); border-radius: 999px; background: rgba(0, 255, 204, .1); color: #00ffcc; font: inherit; font-size: 12px; font-weight: 700; cursor: pointer; transition: background .16s ease, transform .16s ease; }
.ai-plan-map-btn:hover { background: rgba(0, 255, 204, .2); transform: translateY(-1px); }
.ai-day-entry { gap: 10px; }
.ai-day-entry.is-unverified .ai-entry-name { border-bottom: 1px dashed rgba(234, 244, 255, .3); }
.ai-entry-body { min-width: 0; display: grid; gap: 5px; }
.ai-entry-top { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.ai-entry-top .ai-entry-name { flex: 1 1 auto; min-width: 120px; font-size: 15px; line-height: 1.4; }
.ai-entry-thumb { flex: 0 0 54px; width: 54px; height: 54px; border-radius: 10px; object-fit: cover; display: block; background: linear-gradient(135deg, rgba(0, 255, 204, .16), rgba(124, 92, 255, .22)); }
.ai-entry-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.ai-entry-chip { padding: 3px 7px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 999px; background: rgba(255, 255, 255, .05); color: rgba(222, 238, 255, .72); font-size: 11px; }
.ai-entry-chip.is-strong { border-color: rgba(0, 255, 204, .45); background: rgba(0, 255, 204, .12); color: #9dffe8; }
.ai-entry-intro { margin: 0; color: rgba(222, 238, 255, .6); font-size: 12px; line-height: 1.6; }
/* AI 编排叙事：单段、无小标题，用左侧强调线表达「这是 AI 为什么不这么排/这么排」。
   ⚠️ 必须写成 `.ai-day-entry .ai-entry-note`：文件上方有 `.ai-day-entry p { color: … }`（0,1,1），
   只写类名（0,1,0）会被它压掉，颜色与行高都不生效。 */
.ai-day-entry .ai-entry-note { margin: 2px 0 0; padding-left: 10px; border-left: 2px solid rgba(0, 255, 204, .3); color: rgba(222, 238, 255, .8); font-size: 12.5px; line-height: 1.7; }
.ai-day-entry .ai-entry-what { color: #eaf4ff; }
/* 天级「编排思路」：贴在 Day 标题正下方，比条目文案轻一档，不抢"是什么"的信息位。 */
.ai-day-note { margin: -2px 0 6px; color: rgba(222, 238, 255, .66); font-size: 12px; line-height: 1.65; }
.ai-day-note-label { color: rgba(0, 255, 204, .85); }
.ai-plan-actions { margin-top: 12px; padding-top: 10px; border-top: 1px solid rgba(255, 255, 255, .08); display: flex; justify-content: flex-end; }
.ai-plan-guide { padding: 7px 14px; border-radius: 999px; border: 1px solid rgba(0, 255, 204, .35); background: rgba(0, 255, 204, .08); color: rgba(0, 255, 204, .95); font-size: 12.5px; cursor: pointer; transition: background .2s, border-color .2s; }
.ai-plan-guide:hover { background: rgba(0, 255, 204, .16); border-color: rgba(0, 255, 204, .6); }
.guide-wizard-summarizing { margin: 0 0 12px; padding: 8px 12px; border-radius: 10px; background: rgba(0, 255, 204, .08); color: rgba(0, 255, 204, .9); font-size: 12.5px; }
.ai-entry-loading { margin: 0; color: rgba(222, 238, 255, .45); font-size: 12px; }



/* ══════════════════════════════════════════════════════════════════
   用户自建攻略 · 创作向导 + 我的创作（2026-09-29）
   ══════════════════════════════════════════════════════════════════ */
.guide-wizard-backdrop .modal { width: min(780px, 100%); }
.guide-wizard-steps { display: flex; gap: 8px; margin: 0 0 18px; }
.guide-wizard-step { display: inline-flex; align-items: center; gap: 7px; padding: 7px 14px 7px 8px; border: 1px solid rgba(255, 255, 255, .10); border-radius: 999px; color: rgba(222, 238, 255, .55); font-size: 12.5px; font-weight: 700; }
.guide-wizard-step b { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: rgba(255, 255, 255, .08); color: rgba(222, 238, 255, .7); font-size: 12px; }
.guide-wizard-step.is-on { border-color: rgba(0, 255, 204, .5); background: rgba(0, 255, 204, .10); color: #9dffe8; }
.guide-wizard-step.is-on b { background: linear-gradient(135deg, #00ffcc, #7c5cff); color: #06231d; }
.guide-wizard-body { display: grid; gap: 16px; }

/* 步骤一：封面 + 基础信息 */
.guide-wizard-cover { display: flex; gap: 16px; align-items: center; }
.guide-wizard-cover-box { flex: 0 0 220px; display: grid; place-items: center; height: 132px; overflow: hidden; border: 1px dashed rgba(255, 255, 255, .16); border-radius: 18px; background: linear-gradient(135deg, rgba(0, 255, 204, .08), rgba(124, 92, 255, .12)); color: rgba(222, 238, 255, .45); font-size: 13px; }
.guide-wizard-cover-box img { width: 100%; height: 100%; object-fit: cover; }
.guide-wizard-cover-copy { display: grid; gap: 8px; }
.guide-wizard-cover-copy b { color: #eaf4ff; font-size: 15px; }
.guide-wizard-cover-copy small { color: rgba(222, 238, 255, .5); font-size: 12px; line-height: 1.6; }
.guide-wizard-cover-copy .btn { justify-self: start; }

/* 步骤二：逐日行程 */
.guide-wizard-days { display: grid; gap: 14px; }
.guide-wizard-days-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.guide-wizard-days-head b { color: #eaf4ff; font-size: 15px; }
.guide-wizard-days-actions { display: flex; gap: 8px; }
.guide-wizard-day { display: grid; gap: 8px; padding: 14px; border: 1px solid rgba(255, 255, 255, .10); border-radius: 18px; background: rgba(255, 255, 255, .03); }
.guide-wizard-day-head { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 8px; align-items: center; }
.guide-wizard-day-badge { padding: 5px 11px; border-radius: 999px; background: rgba(0, 255, 204, .14); color: #9dffe8; font-size: 12px; font-weight: 800; white-space: nowrap; }
.guide-wizard-day > input, .guide-wizard-day-head input, .guide-wizard-stop input { width: 100%; padding: 10px 12px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 12px; background: rgba(255, 255, 255, .05); color: #eaf4ff; outline: none; }
.guide-wizard-day input::placeholder, .guide-wizard-stop input::placeholder { color: rgba(222, 238, 255, .4); }
.guide-wizard-stop { display: grid; gap: 6px; padding: 10px; border-radius: 14px; background: rgba(255, 255, 255, .03); }
.guide-wizard-stop-row { display: grid; grid-template-columns: 74px minmax(0, 1fr) auto auto; gap: 7px; align-items: center; }
.guide-wizard-stop-row .gw-time { text-align: center; }
.guide-wizard-day .btn-ghost, .guide-wizard-days .btn-ghost { padding: 8px 12px; font-size: 12px; }
.guide-wizard-day > .btn-ghost { justify-self: start; }
.guide-wizard-day-remove { color: rgba(255, 160, 160, .85); border-color: rgba(255, 120, 120, .3); }

/* 步骤三：预览 */
.guide-wizard-preview { display: grid; gap: 14px; }
.guide-wizard-preview-head { display: flex; gap: 14px; align-items: center; padding: 14px; border: 1px solid rgba(255, 255, 255, .10); border-radius: 18px; background: rgba(255, 255, 255, .03); }
.guide-wizard-preview-head img { flex: 0 0 120px; width: 120px; height: 84px; border-radius: 12px; object-fit: cover; }
.guide-wizard-preview-head b { color: #fff; font-size: 17px; }
.guide-wizard-preview-head small { display: block; margin-top: 3px; color: rgba(222, 238, 255, .55); font-size: 12.5px; }
.guide-wizard-preview-head p { margin: 6px 0 0; color: rgba(222, 238, 255, .75); font-size: 13px; line-height: 1.6; }
.guide-wizard-preview-highlights { color: #9dffe8 !important; font-size: 12px !important; }
.guide-wizard-preview-day { display: grid; gap: 4px; padding: 12px 14px; border-left: 3px solid rgba(0, 255, 204, .4); border-radius: 10px; background: rgba(255, 255, 255, .03); }
.guide-wizard-preview-day b { color: #eaf4ff; font-size: 14px; }
.guide-wizard-preview-day span { color: rgba(222, 238, 255, .7); font-size: 12.5px; line-height: 1.6; }

/* 我的创作 */
.creator-mine { margin-top: 26px; }
.creator-mine-list { display: grid; gap: 10px; margin-top: 12px; }
.creator-mine-row { display: grid; grid-template-columns: 66px minmax(0, 1fr) auto auto; gap: 12px; align-items: center; padding: 10px 12px; border: 1px solid rgba(255, 255, 255, .10); border-radius: 16px; background: rgba(255, 255, 255, .03); }
.creator-mine-media { width: 66px; height: 48px; overflow: hidden; border-radius: 10px; background: linear-gradient(135deg, rgba(0, 255, 204, .16), rgba(124, 92, 255, .22)); }
.creator-mine-media img { width: 100%; height: 100%; object-fit: cover; }
.creator-mine-copy { display: grid; gap: 2px; min-width: 0; }
.creator-mine-copy b { color: #eaf4ff; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.creator-mine-copy small { color: rgba(222, 238, 255, .5); font-size: 12px; }
.creator-mine-badge { padding: 4px 10px; border-radius: 999px; font-size: 11.5px; font-weight: 700; white-space: nowrap; }
.creator-mine-badge.is-live { background: rgba(0, 255, 204, .14); color: #9dffe8; }
.creator-mine-badge.is-draft { background: rgba(124, 92, 255, .18); color: #cfc2ff; }
.creator-mine-badge.is-off { background: rgba(255, 255, 255, .08); color: rgba(222, 238, 255, .6); }
.creator-mine-actions { display: flex; gap: 6px; }
.creator-mine-actions .btn-ghost { padding: 7px 12px; font-size: 12px; }
.btn.danger, .creator-mine-actions .danger { color: rgba(255, 150, 150, .9); border-color: rgba(255, 120, 120, .32); }
.btn.danger:hover, .creator-mine-actions .danger:hover { background: rgba(255, 90, 90, .12); }

@media (max-width: 620px) {
  .guide-wizard-cover { flex-direction: column; align-items: stretch; }
  .guide-wizard-cover-box { flex: 0 0 auto; height: 168px; }
  .guide-wizard-step { padding: 6px 10px 6px 6px; font-size: 11.5px; }
  .creator-mine-row { grid-template-columns: 54px minmax(0, 1fr) auto; }
  .creator-mine-actions { grid-column: 1 / -1; justify-content: flex-end; }
}

/* ── Journey OS（W1）：/journey 页的托管状态带 ─────────────────────────
   刻意复用 .plan-overview 的玻璃拟态语言，不引入新视觉体系。 */
.journey-band { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; padding: 16px 20px; margin: 16px 0 0; border-radius: 22px; background: rgba(0, 255, 204, .07); border: 1px solid rgba(0, 255, 204, .22); }
.journey-band-main { display: grid; gap: 3px; min-width: 0; }
.journey-band-main .kicker { color: rgba(0, 255, 204, .78); font-size: 11px; font-weight: 700; letter-spacing: .16em; }
.journey-band-main strong { color: #eaf4ff; font-size: 17px; font-weight: 800; letter-spacing: -.01em; }
.journey-band-main small { color: rgba(222, 238, 255, .58); font-size: 12.5px; }
.journey-band-side { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

@media (max-width: 620px) {
  .journey-band { padding: 14px 16px; border-radius: 18px; }
  .journey-band-side { width: 100%; justify-content: flex-start; }
}

/* ── 未登录也能浏览 /journey（2026-10-02）──────────────────────────────
   右栏不再是空白框，而是一张「登录后可用」的引导卡：
   给一个能点但答不了问题的输入框＝骗人（用户会以为功能坏了）。 */
.journey-chat-guest { display: grid; grid-template-rows: auto 1fr; min-height: 320px; }
.journey-chat-guest-body { display: grid; align-content: center; justify-items: start; gap: 12px; padding: 8px 4px 4px; }
.journey-chat-guest-body .kicker { color: rgba(0, 255, 204, .78); font-size: 11px; font-weight: 700; letter-spacing: .16em; }
.journey-chat-guest-body p { margin: 0; color: rgba(222, 238, 255, .72); font-size: 13.5px; line-height: 1.7; }

/* B2 · 托管中的旅程（切换栏）─────────────────────────────────────────
   与下方「历史行程」刻意长得不一样：那边列所有方案，这边只列真正在托管的那几趟，
   左边框= 托管中 / 灰= 已结束 / 无边框 = 未开始。 */
/* ⭐ Journey OS 首屏（2026-10-02）：三条出发路径并列，不再把「导入/托管」埋在第二层 */
.journey-onboard { margin-top: 18px; padding: 22px; }
.journey-onboard-head h2 { margin: 8px 0 0; font-size: clamp(19px, 2.4vw, 25px); line-height: 1.35; }
.journey-onboard-lead { margin: 10px 0 0; max-width: 64ch; color: var(--muted); font-size: 14px; line-height: 1.75; }
.journey-onboard-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 18px; }
.journey-onboard-card { display: grid; gap: 6px; padding: 16px; border: 1px solid var(--line); border-radius: 20px; background: transparent; color: inherit; text-align: left; cursor: pointer; transition: border-color .2s, background .2s, transform .2s; }
.journey-onboard-card:hover { border-color: var(--primary); background: var(--card); transform: translateY(-2px); }
.journey-onboard-card.is-primary { border-color: rgba(0, 255, 204, .32); background: rgba(0, 255, 204, .05); }
.journey-onboard-step { color: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; }
.journey-onboard-icon { font-size: 22px; line-height: 1; }
.journey-onboard-card strong { font-size: 15.5px; font-weight: 700; }
.journey-onboard-card small { color: var(--muted); font-size: 12.5px; line-height: 1.65; }
.journey-onboard-go { margin-top: 2px; color: var(--primary); font-size: 12.5px; font-weight: 700; }
.journey-onboard-note { margin: 14px 0 0; color: var(--muted); font-size: 12.5px; line-height: 1.65; }
@media (max-width: 720px) { .journey-onboard-grid { grid-template-columns: 1fr; } }
/* 有行程但还没托管：把「开始托管」从 plan-overview 的角落抬到行程卡上方 */
.journey-idle-banner { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-top: 18px; padding: 18px 20px; border-left: 3px solid var(--primary); }
.journey-idle-main { min-width: 0; }
.journey-idle-main strong { display: block; margin-top: 6px; font-size: 16px; }
.journey-idle-main p { margin: 6px 0 0; max-width: 72ch; color: var(--muted); font-size: 13px; line-height: 1.7; }
@media (max-width: 720px) { .journey-idle-banner { flex-direction: column; align-items: flex-start; } .journey-idle-banner .btn { width: 100%; } }
.journey-switcher { margin-top: 18px; }
.journey-switcher-note { margin: 0; color: var(--muted); font-size: 13px; line-height: 1.6; }
.journey-switch-list { display: grid; gap: 10px; margin-top: 14px; }
.journey-switch { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; padding: 13px 15px; border: 1px solid var(--line); border-left: 3px solid var(--line); border-radius: 16px; background: transparent; text-align: left; transition: border-color .2s, background .2s; }
.journey-switch:hover { border-color: var(--primary); }
.journey-switch.is-current { border-left-color: var(--primary); box-shadow: inset 0 0 0 1px var(--primary); }
.journey-switch-main { display: grid; gap: 3px; min-width: 0; }
.journey-switch-main strong { font-size: 14.5px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.journey-switch-main small { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.journey-switch-side { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.journey-switch-id { color: var(--muted); font-size: 11.5px; letter-spacing: .06em; }
.journey-tag-active { border-color: var(--primary); color: var(--primary-deep); }

@media (max-width: 620px) {
  .journey-switch { flex-direction: column; align-items: flex-start; gap: 9px; }
  .journey-switch-side { width: 100%; justify-content: space-between; }
}
   /* ── C1 · 结束态复盘卡（只在 ended 时出现）─────────────────────────────
   刻意比 Pulse Band 更「静」：旅程已经结束，这张卡是给人回看的，
   不该再有品牌青的抢注意力 —— 用中性描边+ 数字说话。 */
.journey-recap { margin: 16px 0 0; padding: 18px 20px; border: 1px solid rgba(222, 238, 255, .14); border-radius: 20px; background: rgba(255, 255, 255, .04); }
.recap-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.recap-head .kicker { color: rgba(222, 238, 255, .55); font-size: 11px; font-weight: 700; letter-spacing: .16em; }
.recap-head h3 { margin: 4px 0 0; font-size: 17px; font-weight: 800; letter-spacing: -.01em; }
.recap-note { margin: 0; max-width: 46ch; color: rgba(222, 238, 255, .62); font-size: 12.5px; line-height: 1.6; }
.recap-stats { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; margin: 16px 0 0; }
.recap-stat { display: grid; gap: 2px; padding: 12px 14px; border-radius: 14px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(222, 238, 255, .10); min-width: 0; }
.recap-stat b { font-size: 20px; font-weight: 800; letter-spacing: -.02em; }
.recap-stat span { color: rgba(222, 238, 255, .60); font-size: 11.5px; }
.recap-list { display: grid; gap: 10px; margin: 16px 0 0; padding: 0; list-style: none; }
.recap-row { padding: 12px 14px; border-radius: 14px; background: rgba(255, 255, 255, .035); border: 1px solid rgba(222, 238, 255, .09); }
.recap-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.recap-row-head strong { font-size: 14px; font-weight: 700; min-width: 0; }
.recap-row-head span { color: rgba(222, 238, 255, .55); font-size: 12px; white-space: nowrap; }
.recap-row .receipt-diff { margin: 8px 0 0; }
.recap-reason { margin: 8px 0 0; color: rgba(222, 238, 255, .78); font-size: 13px; line-height: 1.65; }
.recap-revert { margin: 12px 0 0; color: rgba(222, 238, 255, .55); font-size: 12.5px; }
.journey-recap > .recap-note { margin-top: 14px; display: block; }

@media (max-width: 860px) {
  .recap-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 430px) {
  .journey-recap { padding: 15px 16px; border-radius: 18px; }
  .recap-stat b { font-size: 18px; }
}

/* ── Journey OS（W2）：Pulse Band —— NOW / NEXT / WATCH ─────────────────
   三卡是这一页的主视觉：NOW 说此刻在哪，NEXT 说下一步，WATCH 说该留意什么。
   配色只做「分层」不做「装饰」：NOW 用品牌青（正在发生），NEXT 保持中性（还没到），
   WATCH 平时安静、真有风险才转琥珀 —— 只有真的有事时它才抢注意力。 */
.journey-pulse { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin: 14px 0 0; }
.journey-pulse.is-idle { grid-template-columns: minmax(0, 1fr); }
.pulse-card { display: flex; flex-direction: column; gap: 8px; min-width: 0; padding: 16px 18px; border-radius: 20px; background: rgba(255, 255, 255, .035); border: 1px solid rgba(160, 190, 220, .16); }
.pulse-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; min-width: 0; }
.pulse-label { font-size: 11px; font-weight: 800; letter-spacing: .18em; color: rgba(222, 238, 255, .5); }
.pulse-head-hint { font-size: 11.5px; color: rgba(222, 238, 255, .38); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pulse-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.pulse-name { font-size: 16.5px; font-weight: 800; color: #eaf4ff; letter-spacing: -.01em; line-height: 1.3; word-break: break-word; }
.pulse-name.pulse-muted { font-size: 14.5px; font-weight: 600; color: rgba(222, 238, 255, .42); }
.pulse-time { font-size: 12.5px; color: rgba(222, 238, 255, .55); }
.pulse-desc { margin: 0; font-size: 13px; line-height: 1.55; color: rgba(222, 238, 255, .62); word-break: break-word; }

/* ⭐ 焦点色（2026-10-04）：品牌绿 = 「你正在看这一张」，**由点击决定**，不再固定绑在 NOW 上。
   原来 .pulse-now 恒亮绿：NOW 空着时它最抢眼，而真正有内容的 NEXT 是灰的 —— 视觉权重和
   内容权重正好反了。现在绿跟着焦点走（默认焦点是 NOW，所以首屏观感不变）。
   ⚠️⚠️ 焦点色的**实际声明写在下面 .pulse-watch-badge 之后**，不能放这里：
   同特异性（.pulse-card.is-focus vs .pulse-watch.is-alert）下后写者胜，
   放这里会被琥珀规则盖掉 ⇒ 有风险的 WATCH 被点中时不变绿（踩过）。 */
.pulse-card[data-focusable="1"] { cursor: pointer; }
/* 心跳行：把「我查过什么、什么时候查的」写在卡底 —— 静态画面也能看出这套系统在干活 */
.pulse-evidence { margin: auto 0 0; padding-top: 7px; border-top: 1px solid rgba(160, 190, 220, .13); font-size: 11px; line-height: 1.5; color: rgba(222, 238, 255, .34); word-break: break-word; }

/* WATCH：平时安静，is-alert 才转琥珀 */
.pulse-watch.is-alert { background: rgba(224, 183, 58, .1); border-color: rgba(224, 183, 58, .34); }
.pulse-watch.is-alert .pulse-label, .pulse-watch.is-alert .pulse-head-hint { color: rgba(224, 183, 58, .9); }
.pulse-watch-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }
.pulse-watch-list li { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.pulse-watch-date { flex: none; font-variant-numeric: tabular-nums; color: rgba(224, 183, 58, .92); font-weight: 700; font-size: 12px; }
.pulse-watch-text { flex: 1; min-width: 0; font-size: 13px; line-height: 1.5; color: rgba(232, 240, 250, .82); word-break: break-word; }
.pulse-watch-badge { flex: none; padding: 1px 7px; border-radius: 999px; background: rgba(224, 183, 58, .18); color: #f0d07a; font-size: 11px; font-weight: 700; }

/* ⭐ 焦点色（声明位置必须在这里：同特异性下后写者胜，写在 .is-alert 之前会被琥珀盖掉）。
   点哪张哪张变绿 —— 有风险的 WATCH 被点中也一样变绿，
   风险不靠整卡底色承载，改由「左侧琥珀竖条 + 徽标 + 日期」承载，聚焦也不会丢。 */
.pulse-card.is-focus { background: rgba(0, 255, 204, .09); border-color: rgba(0, 255, 204, .3); }
.pulse-card.is-focus .pulse-label { color: rgba(0, 255, 204, .8); }
.pulse-card.is-focus .pulse-name { color: #d8fff7; }
.pulse-card.is-focus:focus-visible { outline: 2px solid rgba(0, 255, 204, .45); outline-offset: 2px; }
/* ⚠️ 必须排在 is-focus 之后：is-focus 的 border-color 会把四条边一起刷成青绿，
   这里再把左边单独压回琥珀，风险竖条才不会被吃掉。 */
.pulse-watch.is-alert { border-left: 3px solid rgba(224, 183, 58, .8); }

.pulse-idle { display: grid; gap: 6px; padding: 18px 20px; border-radius: 20px; background: rgba(255, 255, 255, .03); border: 1px dashed rgba(160, 190, 220, .2); }
.pulse-idle .kicker { font-size: 11px; font-weight: 700; letter-spacing: .16em; color: rgba(222, 238, 255, .4); }
.pulse-idle p { margin: 0; font-size: 13.5px; line-height: 1.6; color: rgba(222, 238, 255, .55); }

/* 乐观锁冲突条：并发写被服务端挡下时，让用户看见差异 */
.journey-conflict { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin: 14px 0 0; padding: 14px 18px; border-radius: 18px; background: rgba(224, 183, 58, .12); border: 1px solid rgba(224, 183, 58, .38); }
.journey-conflict-text { display: grid; gap: 3px; min-width: 0; }
.journey-conflict-text .kicker { font-size: 11px; font-weight: 700; letter-spacing: .16em; color: rgba(224, 183, 58, .9); }
.journey-conflict-text p { margin: 0; font-size: 13.5px; line-height: 1.55; color: rgba(240, 228, 200, .9); }
.btn-compact { padding: 8px 14px; font-size: 13px; }

/* 断点：≤1279 两列（WATCH 独占一行），≤767 单列，≤430 收紧留白 */
@media (max-width: 1279px) {
  .journey-pulse { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pulse-watch { grid-column: 1 / -1; }
}
@media (max-width: 767px) {
  .journey-pulse { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .pulse-watch { grid-column: auto; }
  .pulse-card { padding: 14px 16px; border-radius: 18px; }
  .pulse-name { font-size: 15.5px; }
}
@media (max-width: 430px) {
  .journey-pulse { gap: 10px; }
  .pulse-card { padding: 13px 14px; }
  .pulse-time { font-size: 12px; }
  .journey-conflict { padding: 12px 14px; border-radius: 16px; }
}

/* ── W3 决策小票：时间轴上每一处改动都能问「凭什么」 ────────────────── */
.timeline-empty { margin: 0; padding: 18px 20px; border-radius: 18px; background: rgba(255, 255, 255, .03); border: 1px dashed rgba(160, 190, 220, .2); font-size: 13.5px; line-height: 1.6; color: rgba(222, 238, 255, .55); }

/* 角标永远指向一张小票：没有理由的改动进不了事件流，所以有角标就一定有凭据 */
.timeline-mark { flex: none; align-self: flex-start; padding: 4px 10px; border-radius: 999px; background: rgba(0, 255, 204, .12); border: 1px solid rgba(0, 255, 204, .32); color: #7ff0dd; font-size: 11.5px; font-weight: 700; white-space: nowrap; cursor: pointer; transition: background .18s, transform .18s; }
.timeline-mark:hover, .timeline-mark:focus-visible { background: rgba(0, 255, 204, .22); transform: translateY(-1px); outline: none; }
.timeline-mark.is-reverted { background: rgba(160, 190, 220, .1); border-color: rgba(160, 190, 220, .22); color: rgba(222, 238, 255, .45); text-decoration: line-through; }

.plan-receipt { display: grid; gap: 10px; margin-top: 12px; padding: 14px 16px; border-radius: 18px; background: rgba(0, 255, 204, .05); border: 1px solid rgba(0, 255, 204, .2); }
.plan-receipt.is-reverted { background: rgba(160, 190, 220, .04); border-color: rgba(160, 190, 220, .16); }
.receipt-head { display: flex; align-items: center; gap: 10px; }
.receipt-head .kicker { font-size: 10.5px; font-weight: 700; letter-spacing: .16em; color: rgba(0, 255, 204, .75); }
.plan-receipt.is-reverted .receipt-head .kicker { color: rgba(222, 238, 255, .4); }
.receipt-who { margin-left: auto; font-size: 12px; color: rgba(222, 238, 255, .5); }
.receipt-close { flex: none; display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; border: 1px solid rgba(160, 190, 220, .2); background: transparent; color: rgba(222, 238, 255, .6); font-size: 15px; line-height: 1; cursor: pointer; }
.receipt-close:hover { border-color: rgba(160, 190, 220, .4); color: #eaf4ff; }
.receipt-banner { padding: 8px 12px; border-radius: 12px; background: rgba(224, 183, 58, .12); border: 1px solid rgba(224, 183, 58, .28); font-size: 12.5px; line-height: 1.5; color: rgba(240, 228, 200, .9); }
.receipt-target { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.receipt-target-label { font-size: 12px; font-weight: 700; letter-spacing: .03em; color: rgba(222, 238, 255, .72); }
.receipt-drift { padding: 2px 8px; border-radius: 999px; background: rgba(224, 183, 58, .14); border: 1px solid rgba(224, 183, 58, .28); font-size: 11px; color: #f0d07a; }
.receipt-diff { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; }
.receipt-diff-label { font-size: 12px; color: rgba(222, 238, 255, .45); }
.receipt-diff-old { color: rgba(222, 238, 255, .45); text-decoration: line-through; }
.receipt-diff-arrow { color: rgba(222, 238, 255, .4); }
.receipt-diff-new { color: #7ff0dd; font-weight: 700; }
.receipt-diff-same { color: rgba(222, 238, 255, .7); }
.receipt-reason { margin: 0; font-size: 13.5px; line-height: 1.65; color: rgba(234, 244, 255, .92); }
.receipt-evidence { list-style: none; display: grid; gap: 8px; margin: 0; padding: 0; }
.receipt-evidence-item { display: grid; grid-template-columns: auto auto minmax(0, 1fr); gap: 8px; align-items: start; padding: 9px 11px; border-radius: 13px; background: rgba(255, 255, 255, .035); border: 1px solid rgba(160, 190, 220, .14); }
.receipt-evidence-item.is-hard { background: rgba(0, 255, 204, .05); border-color: rgba(0, 255, 204, .24); }
.receipt-chip { flex: none; padding: 2px 8px; border-radius: 999px; background: rgba(160, 190, 220, .14); font-size: 11px; color: rgba(222, 238, 255, .8); white-space: nowrap; }
.receipt-strength { flex: none; padding: 2px 7px; border-radius: 999px; background: rgba(160, 190, 220, .12); color: rgba(222, 238, 255, .55); font-size: 10.5px; font-weight: 700; white-space: nowrap; }
.receipt-evidence-item.is-hard .receipt-strength { background: rgba(0, 255, 204, .16); color: #7ff0dd; }
.receipt-evidence-body { min-width: 0; display: grid; gap: 2px; }
.receipt-evidence-body strong { font-size: 12.5px; font-weight: 700; color: rgba(234, 244, 255, .9); }
.receipt-evidence-body p { margin: 0; font-size: 12.5px; line-height: 1.6; color: rgba(222, 238, 255, .66); }
.receipt-evidence-body small { font-size: 11px; color: rgba(222, 238, 255, .4); }
.receipt-impact { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.receipt-impact-title { font-size: 11px; font-weight: 700; letter-spacing: .1em; color: rgba(222, 238, 255, .42); }
.receipt-impact-cell { display: inline-flex; align-items: baseline; gap: 5px; padding: 3px 9px; border-radius: 999px; background: rgba(224, 183, 58, .1); border: 1px solid rgba(224, 183, 58, .22); font-size: 12px; }
.receipt-impact-cell em { font-style: normal; font-size: 11.5px; color: rgba(240, 228, 200, .66); }
.receipt-impact-cell b { color: #f0d07a; font-weight: 700; }
.receipt-impact-cell small { font-size: 11px; color: rgba(240, 228, 200, .5); }
.receipt-impact-note { font-size: 12px; color: rgba(222, 238, 255, .55); }
.receipt-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; padding-top: 6px; border-top: 1px solid rgba(160, 190, 220, .12); }
.receipt-verify { padding: 3px 9px; border-radius: 999px; font-size: 11.5px; }
.receipt-verify.is-ok { background: rgba(0, 255, 204, .12); border: 1px solid rgba(0, 255, 204, .24); color: #7ff0dd; }
.receipt-verify.is-warn { background: rgba(224, 183, 58, .14); border: 1px solid rgba(224, 183, 58, .28); color: #f0d07a; }
.receipt-verify.is-unknown { background: rgba(160, 190, 220, .12); border: 1px solid rgba(160, 190, 220, .2); color: rgba(222, 238, 255, .55); }

/* ── Journey Chat（界面壳，真数据 W6 接）────────────────────────────── */
/* ── NOW / NEXT / WATCH：从上到下三行（2026-10-02 融合版）────────────
   之前是三张**并排卡片**且屈居第二层；现在同一条竖直流里一次看完，
   左 4px 强调线做层级，不用三张卡片割裂视觉。 */
.journey-pulse { display: block; margin: 16px 0 0; }
.pulse-lead { margin: 0 0 10px; color: var(--muted); font-size: 13px; line-height: 1.65; }
.pulse-row { display: grid; grid-template-columns: 118px minmax(0, 1fr); gap: 14px; align-items: start; padding: 14px 0 14px 14px; border-left: 4px solid var(--line); border-bottom: 1px solid var(--line); }
.pulse-row:last-child { border-bottom: 0; }
.pulse-row-label { display: grid; gap: 2px; padding-top: 2px; }
.pulse-row-hint { color: rgba(222, 238, 255, .42); font-size: 11.5px; }
.pulse-row-body { display: grid; gap: 4px; min-width: 0; }
.pulse-row-title { font-size: 16px; font-weight: 800; color: #eaf4ff; line-height: 1.35; word-break: break-word; }
.pulse-row-note { margin: 0; color: rgba(222, 238, 255, .6); font-size: 13px; line-height: 1.6; word-break: break-word; }
.pulse-row-todo { color: rgba(222, 238, 255, .38); font-size: 12px; }
.pulse-row-now { border-left-color: var(--primary); }
.pulse-row-now .pulse-label { color: rgba(0, 255, 204, .82); }
.pulse-row-watch.is-alert { border-left-color: rgba(224, 183, 58, .8); }
.pulse-row-body .btn-compact { justify-self: start; margin-top: 4px; }
@media (max-width: 560px) { .pulse-row { grid-template-columns: minmax(0, 1fr); gap: 6px; } }
/* AI 应变对话框：直接铺在页面第一层（原右栏已并入这条竖直流） */
.journey-ai-line { margin-top: 16px; }
.journey-ai-line .journey-chat { max-height: 460px; min-height: 0; }
.journey-ai-line .journey-chat-guest { min-height: 0; }
.journey-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px; align-items: start; }
.journey-main { min-width: 0; }
.journey-aside { min-width: 0; position: sticky; top: 18px; }
.journey-chat { display: flex; flex-direction: column; min-height: 420px; max-height: calc(100vh - 160px); overflow: hidden; border-radius: 22px; background: rgba(255, 255, 255, .035); border: 1px solid rgba(160, 190, 220, .16); }
.journey-chat-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; border-bottom: 1px solid rgba(160, 190, 220, .12); }
.journey-chat-who { display: flex; align-items: center; gap: 10px; min-width: 0; }
.journey-chat-avatar { display: grid; place-items: center; flex: none; width: 34px; height: 34px; border-radius: 50%; background: rgba(0, 255, 204, .14); border: 1px solid rgba(0, 255, 204, .3); color: #7ff0dd; font-size: 15px; }
.journey-chat-who strong { display: block; font-size: 14px; color: #eaf4ff; }
.journey-chat-who small { display: block; font-size: 11.5px; color: rgba(222, 238, 255, .5); }
.tag.is-preview { border-color: rgba(224, 183, 58, .38); color: #f0d07a; background: rgba(224, 183, 58, .1); }
.journey-chat-list { display: grid; gap: 12px; flex: 1; min-height: 0; padding: 16px; overflow-y: auto; }
.journey-chat-msg { display: grid; gap: 5px; max-width: 92%; }
.journey-chat-msg.is-mine { justify-self: end; justify-items: end; }
.journey-chat-bubble { padding: 11px 13px; border-radius: 16px; background: rgba(255, 255, 255, .05); border: 1px solid rgba(160, 190, 220, .14); font-size: 13.5px; line-height: 1.65; color: rgba(234, 244, 255, .9); }
.journey-chat-msg.is-mine .journey-chat-bubble { background: rgba(0, 255, 204, .1); border-color: rgba(0, 255, 204, .26); }
.journey-chat-hint { display: block; margin-top: 8px; padding: 5px 10px; border-radius: 999px; background: rgba(0, 255, 204, .12); border: 1px solid rgba(0, 255, 204, .3); color: #7ff0dd; font-size: 11.5px; font-weight: 700; cursor: pointer; }
.journey-chat-hint:hover { background: rgba(0, 255, 204, .22); }
.journey-chat-time { font-size: 11px; color: rgba(222, 238, 255, .38); }
.journey-chat-empty { display: grid; gap: 6px; flex: 1; align-content: center; padding: 22px 18px; }
.journey-chat-empty .kicker { font-size: 11px; font-weight: 700; letter-spacing: .16em; color: rgba(222, 238, 255, .4); }
.journey-chat-empty p { margin: 0; font-size: 13px; line-height: 1.65; color: rgba(222, 238, 255, .55); }
/* 应变示例：点一下填进输入框（不自动发送）—— 让「这条路能解决什么」一眼看得见 */
.journey-chat-suggest { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; padding: 0; }
.journey-chat-suggest-item { padding: 7px 12px; border-radius: 999px; border: 1px solid rgba(160, 190, 220, .22); background: rgba(255, 255, 255, .04); color: rgba(234, 244, 255, .8); font-size: 12.5px; line-height: 1; cursor: pointer; transition: border-color .18s ease, background .18s ease, color .18s ease; }
.journey-chat-suggest-item:hover { border-color: rgba(0, 255, 204, .4); background: rgba(0, 255, 204, .1); color: #7ff0dd; }
.contract-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.contract-chip { padding: 4px 10px; border-radius: 999px; border: 1px solid rgba(160, 190, 220, .22); background: rgba(255, 255, 255, .04); color: rgba(234, 244, 255, .72); font-size: 12px; line-height: 1.4; cursor: pointer; transition: border-color .18s ease, background .18s ease, color .18s ease; }
.contract-chip:hover { border-color: rgba(0, 255, 204, .4); background: rgba(0, 255, 204, .1); color: #7ff0dd; }
.journey-chat-composer { display: flex; gap: 8px; padding: 12px 14px; border-top: 1px solid rgba(160, 190, 220, .12); }
.journey-chat-composer input { flex: 1; min-width: 0; padding: 10px 13px; border-radius: 14px; border: 1px solid rgba(160, 190, 220, .18); background: rgba(255, 255, 255, .04); color: #eaf4ff; font-size: 13px; outline: none; }
.journey-chat-composer input:disabled { cursor: not-allowed; opacity: .6; }
.journey-chat-composer input::placeholder { color: rgba(222, 238, 255, .4); }

/* 断点：右栏已并入竖直流，这里只需守窄屏的聊天区高度 */
@media (max-width: 1023px) {
  .journey-layout { grid-template-columns: minmax(0, 1fr); }
  .journey-chat { max-height: 520px; }
}
@media (max-width: 767px) {
  .receipt-evidence-item { grid-template-columns: auto minmax(0, 1fr); }
  .receipt-evidence-body { grid-column: 1 / -1; }
}
@media (max-width: 430px) {
  .plan-receipt { padding: 12px 13px; border-radius: 16px; }
  .receipt-foot { flex-direction: column; align-items: stretch; gap: 8px; }
  .receipt-foot .btn-compact { width: 100%; }
  .journey-chat { min-height: 360px; }
  .timeline-mark { padding: 3px 8px; font-size: 11px; }
}

/* ── W6 天气影响 / Disruption 卡（渲染在 Journey Chat 气泡里）─────────────
   ⭐ 有卡片时气泡让位：富卡片自己就是容器，塞进 92% 宽的气泡里会被压成一条。
   窄栏里两条方案【上下排】而不是并排 —— 340px 的右栏并排后每栏只剩 150px，读不了。 */
.journey-chat-msg.is-card { max-width: 100%; }
.journey-chat-msg.is-card .journey-chat-bubble { padding: 0; background: transparent; border: 0; }

.disruption-card { display: grid; gap: 12px; padding: 15px 16px; border-radius: 18px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(160, 190, 220, .18); }
.disruption-card.is-error { background: rgba(224, 104, 104, .08); border-color: rgba(224, 104, 104, .4); }
.disruption-head { display: grid; gap: 5px; min-width: 0; }
.disruption-head .kicker { font-size: 11px; font-weight: 700; letter-spacing: .16em; color: rgba(0, 255, 204, .72); }
.disruption-summary { font-size: 14px; font-weight: 700; line-height: 1.5; color: #eaf4ff; word-break: break-word; }
.disruption-source { font-size: 11px; color: rgba(222, 238, 255, .4); }
.disruption-note, .disruption-message, .disruption-more, .disruption-unknown, .disruption-dropped, .disruption-move-none { margin: 0; font-size: 12.5px; line-height: 1.6; color: rgba(222, 238, 255, .6); }
.disruption-message { color: rgba(234, 244, 255, .82); }
.disruption-unknown { color: rgba(224, 183, 58, .82); }
.disruption-dropped { font-size: 11.5px; color: rgba(224, 183, 58, .72); }

.disruption-hits { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.disruption-hit { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 3px 8px; padding: 8px 10px; border-radius: 12px; background: rgba(255, 255, 255, .03); border: 1px solid rgba(160, 190, 220, .12); }
.disruption-hit.is-hard { background: rgba(224, 104, 104, .1); border-color: rgba(224, 104, 104, .32); }
.disruption-hit.is-soft { background: rgba(224, 183, 58, .09); border-color: rgba(224, 183, 58, .3); }
.disruption-hit-sev { grid-column: 1; align-self: start; font-size: 11px; font-weight: 800; color: rgba(222, 238, 255, .6); }
.disruption-hit.is-hard .disruption-hit-sev { color: #f0a3a3; }
.disruption-hit.is-soft .disruption-hit-sev { color: #f0d07a; }
.disruption-hit-name { grid-column: 2; font-size: 13px; font-weight: 700; color: #eaf4ff; word-break: break-word; }
.disruption-hit-when { grid-column: 2; font-size: 11.5px; color: rgba(222, 238, 255, .52); }
.disruption-hit-reading { grid-column: 2; font-size: 11.5px; color: rgba(222, 238, 255, .68); }

.disruption-options { display: grid; gap: 10px; }
.disruption-option { display: grid; gap: 8px; align-content: start; padding: 12px; border-radius: 15px; background: rgba(255, 255, 255, .035); border: 1px solid rgba(160, 190, 220, .16); }
.disruption-option.is-taken { background: rgba(0, 255, 204, .08); border-color: rgba(0, 255, 204, .34); }
.disruption-option-head { display: flex; align-items: baseline; gap: 7px; min-width: 0; }
.disruption-option-label { flex: none; display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: rgba(0, 255, 204, .14); border: 1px solid rgba(0, 255, 204, .3); color: #7ff0dd; font-size: 11px; font-weight: 800; }
.disruption-option-head strong { font-size: 13.5px; line-height: 1.4; color: #eaf4ff; word-break: break-word; }
.disruption-option-narrative { margin: 0; font-size: 12.5px; line-height: 1.6; color: rgba(234, 244, 255, .8); }
.disruption-option-giveup { margin: 0; font-size: 12px; line-height: 1.55; color: rgba(224, 183, 58, .85); }
.disruption-option-giveup em { margin-right: 4px; font-style: normal; font-weight: 700; }
.disruption-option .btn { justify-self: start; }

.disruption-moves { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.disruption-move { display: grid; gap: 2px; padding: 7px 9px; border-radius: 11px; background: rgba(255, 255, 255, .03); border: 1px solid rgba(160, 190, 220, .1); }
.disruption-move-name { font-size: 12.5px; font-weight: 700; color: #eaf4ff; word-break: break-word; }
.disruption-move-diff { font-size: 11.5px; color: rgba(222, 238, 255, .62); font-variant-numeric: tabular-nums; }
.disruption-move-diff i { margin: 0 2px; font-style: normal; color: rgba(0, 255, 204, .7); }
.disruption-move-why { margin: 2px 0 0; font-size: 11.5px; line-height: 1.5; color: rgba(222, 238, 255, .55); }

@media (max-width: 430px) {
  .disruption-card { padding: 12px; border-radius: 15px; }
  .disruption-option .btn { justify-self: stretch; width: 100%; }
}

/* ── W4 三骨架：地方不变，只是换种排法 ─────────────────────────────── */
.bones-band { display: grid; gap: 14px; margin-bottom: 18px; padding: 16px 18px; border-radius: 22px; background: rgba(255, 255, 255, .035); border: 1px solid rgba(160, 190, 220, .16); }
.bones-bar { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.bones-bar-head { min-width: 0; }
.bones-bar-head .kicker { font-size: 11px; font-weight: 700; letter-spacing: .16em; color: rgba(0, 255, 204, .72); }
.bones-bar-head .subtitle { margin: 4px 0 0; font-size: 13px; line-height: 1.55; color: rgba(222, 238, 255, .58); }
.bones-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.bones-chip { display: grid; gap: 2px; padding: 8px 14px; border-radius: 14px; border: 1px solid rgba(160, 190, 220, .2); background: rgba(255, 255, 255, .04); color: #eaf4ff; text-align: left; cursor: pointer; transition: background .18s, border-color .18s, transform .18s; }
.bones-chip strong { font-size: 13.5px; font-weight: 700; }
.bones-chip small { font-size: 11px; color: rgba(222, 238, 255, .5); }
.bones-chip:hover:not(:disabled), .bones-chip:focus-visible:not(:disabled) { background: rgba(0, 255, 204, .1); border-color: rgba(0, 255, 204, .3); transform: translateY(-1px); outline: none; }
.bones-chip.is-active { background: rgba(0, 255, 204, .12); border-color: rgba(0, 255, 204, .34); }
.bones-chip.is-active small { color: rgba(127, 240, 221, .8); }
.bones-chip:disabled { opacity: .55; cursor: progress; }

.bones-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(288px, 1fr)); gap: 12px; }
.bones-card { display: flex; flex-direction: column; gap: 10px; padding: 14px 15px; border-radius: 18px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(160, 190, 220, .16); }
.bones-card.is-loading { opacity: .8; }
.bones-card.is-error { border-color: rgba(230, 130, 130, .34); background: rgba(230, 130, 130, .06); }
/* 重试按钮：错误态唯一的出路。不能只给一句「失败」就把用户堵死。 */
.bones-card.is-error .bones-retry { margin-top: 10px; }
.bones-card.is-blocked { border-color: rgba(230, 130, 130, .3); }
.bones-card-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.bones-card-label { font-size: 14.5px; font-weight: 700; color: #eaf4ff; }
.bones-count { font-size: 11.5px; padding: 3px 9px; border-radius: 999px; background: rgba(0, 255, 204, .12); border: 1px solid rgba(0, 255, 204, .26); color: #7ff0dd; white-space: nowrap; }
.bones-spinner { width: 14px; height: 14px; border-radius: 50%; border: 2px solid rgba(0, 255, 204, .28); border-top-color: #7ff0dd; animation: bones-spin .8s linear infinite; }
@keyframes bones-spin { to { transform: rotate(360deg); } }
.bones-card-summary { margin: 0; font-size: 13px; line-height: 1.65; color: rgba(222, 238, 255, .74); }
.bones-card-summary.is-empty { color: rgba(222, 238, 255, .45); }
.bones-move-list { list-style: none; display: grid; gap: 8px; margin: 0; padding: 0; }
.bones-move { display: grid; gap: 3px; padding: 8px 10px; border-radius: 12px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(160, 190, 220, .12); }
.bones-move-name { font-size: 12.5px; font-weight: 700; color: #eaf4ff; }
.bones-move-diff { font-size: 11.5px; color: rgba(222, 238, 255, .55); }
.bones-move-diff i { font-style: normal; color: rgba(0, 255, 204, .7); padding: 0 3px; }
.bones-move-why { margin: 2px 0 0; font-size: 12px; line-height: 1.6; color: rgba(222, 238, 255, .62); }
.bones-move-why.is-flagged { color: #f2a3a3; }
.bones-more { margin: 0; font-size: 11.5px; color: rgba(222, 238, 255, .45); }
.bones-violation-list { list-style: none; display: grid; gap: 6px; margin: 0; padding: 0; }
.bones-violation { display: flex; align-items: baseline; gap: 8px; padding: 7px 10px; border-radius: 11px; font-size: 12px; line-height: 1.5; }
.bones-violation.is-hard { background: rgba(230, 130, 130, .1); border: 1px solid rgba(230, 130, 130, .3); color: #f2b4b4; }
.bones-violation.is-soft { background: rgba(224, 183, 58, .1); border: 1px solid rgba(224, 183, 58, .26); color: rgba(240, 222, 176, .92); }
.bones-violation-tag { flex: none; font-size: 10.5px; font-weight: 700; letter-spacing: .08em; }
.bones-violation-text { min-width: 0; }
.bones-unverifiable, .bones-missing { margin: 0; font-size: 11.5px; line-height: 1.55; color: rgba(222, 238, 255, .45); }
.bones-card-foot { display: flex; justify-content: flex-end; padding-top: 2px; }
.bones-band-note { margin: 0; font-size: 12px; color: rgba(222, 238, 255, .5); }

@media (max-width: 1023px) {
  .bones-cards { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
}
@media (max-width: 767px) {
  .bones-bar { flex-direction: column; align-items: stretch; gap: 10px; }
  .bones-chips { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .bones-chip { padding: 9px 10px; }
}
@media (max-width: 430px) {
  .bones-band { padding: 13px 14px; border-radius: 18px; }
  .bones-cards { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .bones-card { padding: 12px 13px; border-radius: 16px; }
  .bones-chips { grid-template-columns: minmax(0, 1fr); }
  .bones-chip { display: flex; align-items: baseline; gap: 8px; }
}

/* ══ W5 · 影响链 + 同行建议 ═══════════════════════════════════════════
   配色沿用现有刻度：品牌青 = 可判定，琥珀 = 判不出来，红 = 顶到禁词。
   ⚠️ 「判不出来」绝不能显示成「没影响」—— 所以它用的是琥珀警示色，不是灰色。 */
.timeline-impact-hint { flex: none; font-size: 11px; font-weight: 600; padding: 4px 8px; border-radius: 999px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(160, 190, 220, .16); color: rgba(222, 238, 255, .62); cursor: pointer; white-space: nowrap; transition: background .18s ease, color .18s ease; }
.timeline-impact-hint:hover { background: rgba(0, 255, 204, .1); border-color: rgba(0, 255, 204, .28); color: #7ff0dd; }

.impact-form { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 10px; padding: 11px 12px; border-radius: 14px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(160, 190, 220, .14); }
.impact-form-label { display: flex; align-items: center; gap: 8px; font-size: 12px; color: rgba(222, 238, 255, .62); }
.impact-form-label input { width: 84px; padding: 7px 10px; border-radius: 10px; background: rgba(255, 255, 255, .05); border: 1px solid rgba(160, 190, 220, .2); color: #eaf4ff; font-size: 13px; font-weight: 700; letter-spacing: .04em; }
.impact-form-label input:focus { outline: none; border-color: rgba(0, 255, 204, .42); }
.impact-form-actions { display: flex; gap: 8px; margin-left: auto; }

.impact-card { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; padding: 13px 14px; border-radius: 16px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(160, 190, 220, .16); }
.impact-card.is-error { border-color: rgba(230, 130, 130, .32); background: rgba(230, 130, 130, .06); }
.impact-card-head { display: flex; flex-direction: column; gap: 5px; }
.impact-card-summary { font-size: 13px; font-weight: 700; color: #eaf4ff; line-height: 1.6; }
.impact-costs { display: flex; flex-wrap: wrap; gap: 6px; }
.impact-chip { font-size: 11.5px; font-weight: 700; padding: 3px 9px; border-radius: 999px; border: 1px solid; white-space: nowrap; }
.impact-chip.is-minutes { background: rgba(0, 255, 204, .1); border-color: rgba(0, 255, 204, .26); color: #7ff0dd; }
.impact-chip.is-money { background: rgba(120, 170, 255, .1); border-color: rgba(120, 170, 255, .26); color: #b9d3ff; }
.impact-chip.is-party { background: rgba(255, 255, 255, .06); border-color: rgba(160, 190, 220, .22); color: rgba(222, 238, 255, .8); }
.impact-chip.is-effort { background: rgba(224, 183, 58, .1); border-color: rgba(224, 183, 58, .26); color: rgba(240, 222, 176, .92); }

.impact-chain { list-style: none; display: grid; gap: 6px; margin: 0; padding: 0; }
.impact-node { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 7px 10px; border-radius: 11px; background: rgba(255, 255, 255, .04); border: 1px solid rgba(160, 190, 220, .12); font-size: 12px; }
.impact-node.is-origin { border-color: rgba(0, 255, 204, .26); background: rgba(0, 255, 204, .06); }
.impact-node.is-unknown { border-color: rgba(224, 183, 58, .28); background: rgba(224, 183, 58, .07); }
.impact-node.is-blocking { border-color: rgba(230, 130, 130, .3); background: rgba(230, 130, 130, .07); }
.impact-node-hop { flex: none; min-width: 34px; font-size: 10.5px; font-weight: 700; letter-spacing: .06em; color: rgba(0, 255, 204, .72); text-align: center; }
.impact-node.is-origin .impact-node-hop { color: #7ff0dd; }
.impact-node-name { font-weight: 700; color: #eaf4ff; }
.impact-node-when { font-size: 11.5px; color: rgba(222, 238, 255, .58); }
.impact-node-delta { font-size: 11.5px; font-weight: 700; color: #7ff0dd; }
.impact-node-flag { margin-left: auto; font-size: 10.5px; font-weight: 700; padding: 2px 7px; border-radius: 999px; background: rgba(224, 183, 58, .12); border: 1px solid rgba(224, 183, 58, .28); color: rgba(240, 222, 176, .92); }
.impact-node-flag.is-block { background: rgba(230, 130, 130, .12); border-color: rgba(230, 130, 130, .3); color: #f2b4b4; }
.impact-node-reason { flex-basis: 100%; font-size: 11px; line-height: 1.55; color: rgba(222, 238, 255, .5); }

.impact-card-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; padding-top: 2px; }
.impact-confidence { font-size: 11px; color: rgba(222, 238, 255, .48); }
.impact-foot-actions { display: flex; gap: 8px; margin-left: auto; }
.impact-truncated, .impact-message, .impact-note { margin: 0; font-size: 11.5px; line-height: 1.55; color: rgba(222, 238, 255, .5); }
.impact-message { color: #f2b4b4; }

@media (max-width: 430px) {
  .impact-card { padding: 11px 12px; border-radius: 14px; }
  .impact-node { padding: 6px 8px; font-size: 11.5px; }
  .impact-foot-actions { width: 100%; }
  .impact-foot-actions .btn { flex: 1; }
}

/* 旅程托管登录闸门：给未登录的一段解释，而不是一块空墙 */
.journey-gate { padding: 34px 26px; text-align: center; }
.journey-gate-mark { display: block; font-size: 34px; line-height: 1; margin-bottom: 14px; }
.journey-gate h1 { margin: 0 0 10px; font-size: 21px; font-weight: 700; color: #eaf4ff; }
.journey-gate .subtitle { max-width: 460px; margin: 0 auto 20px; font-size: 13px; line-height: 1.75; color: rgba(222, 238, 255, .62); }
@media (max-width: 430px) {
  .journey-gate { padding: 26px 18px; }
  .journey-gate h1 { font-size: 18px; }
}

/* ══ Journey OS 顶带（2026-10-03）════════════════════════════════════════
   把 Pulse 三卡与应变动话合成**一条带**，插在页头与行程本体之间：托管在第一层，
   行程本体仍在首屏。三卡形态回到初版（.pulse-now / .pulse-watch 等初版样式原样复用），
   变的只是「位置」和「AI 从整宽一行收进右格」——不再新造一套卡片语言。

   高度：176px 恒定。AI 侧消息区内部滚动 ⇒ 灌多少条消息都不撑高这条带。
   ⚠️ .journey-pulse 在本文件上方被「三行版」定义成 display:block（2040 行附近），
      这里是**更强的选择器覆盖回去**（.journey-topband .journey-pulse），
      顺序与优先级都不能动，否则三卡会竖着堆成 400px 高把带撑爆。 */
/* ⚠️⚠️ grid-template-rows 必须是 minmax(0, 176px)：只写 height:176px 时**隐式行仍是 auto**，
       AI 面板灌 20 条消息会把行撑到 1382px（item 跟着变高、溢出顶带盖住行程卡），
       而容器本身仍是 176px —— 从容器上完全看不出问题，只有消息区 scrollHeight==clientHeight
       这一个信号暴露它。行高锁死后列表才回到 flex:1 + 内部滚动。 */
/* ⭐ 2026-10-03 第3 批：顶带只留「状态行 + 三卡」，AI 对话框搬去工作区。
   340px 右格 + 176px 死高把对话可视压到 88px（灌2 条就出滚动条）——
   对话框需要的不是一个「不被顶下去」的位置，而是一个真正能读的高度。 */
.journey-topband { display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 350px); gap: 14px; align-items: stretch; height: 350px; margin: 16px 0 0; }
.journey-topband-main { display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 7px; min-width: 0; }

/* kicker 行：状态带（标题 / 日期 / 目的地 / 状态 tag / 规矩 / 旅程号）压成一行 */
.topband-kicker { display: flex; align-items: center; gap: 10px; min-width: 0; }
.topband-kicker .kicker { margin: 0; flex: none; }
.topband-kicker strong { flex: none; color: #eaf4ff; font-size: 14px; font-weight: 800; letter-spacing: -.01em; }
.topband-kicker-meta { flex: 1; min-width: 0; color: rgba(222, 238, 255, .55); font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.topband-kicker .tag { flex: none; }
/* ⚠️ .topband-kicker-id 已于 2026-10-04 随顶带编号一起移除（前端无入口消费该编号）。
   切换栏的 .journey-switch-id 保留，样式在下方 journey-switch 段。 */
.topband-kicker .btn { flex: none; padding: 2px 10px; font-size: 12px; border-radius: 999px; }
/* ⚠️ 「行程未排期」= 托管在跑但算不出此刻。琥珀色（不是 is-alert 的青色）：
   它不是风险警报，而是「少一个必填信息」的提示，用琥珀色才不会和 WATCH 混淆。 */
.tag.tag-warn { border-color: rgba(240, 176, 62, .42); background: rgba(240, 176, 62, .12); color: #f0b03e; }

/* ── W7 · 未读提醒条（2026-10-03 第 4 批）────────────────────────────
   位置：顶带**之上**。它回答「外面变了什么」，比「现在该去哪」更紧急。
   ⚠️ 高度不锁死：条数随真实天气变化（0~3 条常见），
   写死高度就会重演顶带 176px 那个「灌内容就撑破隐式行」的坑。 */
.journey-alerts {
  margin: 14px 0 0;
  padding: 14px 18px 6px;
  border: 1px solid rgba(96, 165, 250, .32);
  border-radius: 16px;
  background: linear-gradient(180deg, rgba(56, 118, 208, .16), rgba(56, 118, 208, .05));
}
.journey-alerts.is-offline { border-color: rgba(154, 170, 190, .28); background: rgba(120, 140, 165, .08); }
.journey-alerts.is-loading { border-color: rgba(154, 170, 190, .22); background: rgba(120, 140, 165, .05); }
.journey-alerts-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.journey-alerts-head .kicker { margin: 0; flex: none; }
.journey-alerts-head strong { color: #eaf4ff; font-size: 14px; font-weight: 800; }
/* 离线 / 读取中：一行灰字 + 一个呼吸点，不抢视觉 */
.journey-alerts > p { margin: 0 0 10px; color: rgba(222, 238, 255, .6); font-size: 13px; line-height: 1.6; }
.journey-alerts-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: rgba(222, 238, 255, .35); vertical-align: middle; margin-right: 8px; }
.journey-alerts.is-loading .journey-alerts-dot { animation: journey-alerts-pulse 1.4s ease-in-out infinite; }
@keyframes journey-alerts-pulse { 0%, 100% { opacity: .3; } 50% { opacity: 1; } }

.journey-alert-list { list-style: none; margin: 0; padding: 0; }
.journey-alert {
  display: grid;
  grid-template-columns: auto auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px;
  padding: 9px 0;
  border-top: 1px solid rgba(255, 255, 255, .07);
}
.journey-alert:first-child { border-top: none; }
.journey-alert-kind {
  flex: none;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  background: rgba(240, 176, 62, .14);
  border: 1px solid rgba(240, 176, 62, .34);
  color: #f0b03e;
}
/* level 3 = hard（够报警）：用红调，与「难受到」的琥珀色拉开一档 */
.journey-alert.is-hard .journey-alert-kind { background: rgba(248, 113, 113, .16); border-color: rgba(248, 113, 113, .38); color: #f87171; }
.journey-alert-when { flex: none; color: rgba(222, 238, 255, .72); font-size: 12.5px; font-variant-numeric: tabular-nums; }
.journey-alert-what { min-width: 0; color: rgba(222, 238, 255, .78); font-size: 13px; line-height: 1.5; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.journey-alert-acts { flex: none; display: flex; gap: 8px; }
.journey-alert-acts .btn { padding: 5px 12px; font-size: 12px; border-radius: 999px; white-space: nowrap; }

/* 应变工作区（2026-10-03 第3 批）：对话拿大头，节奏收进右栏。
   ⚠️ 关键差异：工作区**不锁高度**（顶带才需要 176px 死高）——
   对话要能自然长高，短对话时也不必留一大片空白。 */
.journey-workbench { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 14px; align-items: start; margin: 14px 0 0; }
.journey-workbench-main { min-width: 0; }
.journey-workbench-side { min-width: 0; }
.journey-workbench .journey-ai-line { margin: 0; }
/* 对话可视高度从 88px 提到 260px：能读完整一轮往返，不必每条都拖滚动条。 */
.journey-workbench .journey-chat { min-height: 260px; }
.journey-workbench .journey-chat-list { min-height: 168px; }
.journey-workbench .bones-band { margin: 0; padding: 14px 15px; }
.journey-workbench .bones-cards { grid-template-columns: minmax(0, 1fr); }
/* 单卡模式下一张卡填满右栏，采纳按钮才有落点 */
.journey-workbench .bones-card { padding: 12px 13px; }
.bones-chip-done { margin-left: 4px; color: #00CCCC; font-size: 11px; font-style: normal; }

.journey-topband .journey-pulse { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 0; min-height: 0; }
.journey-topband .pulse-card { padding: 13px 16px; gap: 6px; border-radius: 18px; overflow: hidden; }
/* ⚠️ 必须 flex:1：否则 .pulse-main 只有内容高，心跳行的 margin-top:auto 只能在**内容底部**
   生效，三张卡的心跳行会停在三个不同高度上（看着像没对齐的残缺块）。
   撑满后 margin-top:auto 才能把它钉到卡底，三卡对齐成一条「脚注线」。 */
.journey-topband .pulse-main { flex: 1 1 auto; min-height: 0; }
.journey-topband .pulse-name { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: 15px; line-height: 1.35; }
.journey-topband .pulse-time { font-size: 12px; }
/* ⚠️ 350px 后放开截断：用户 10-03 截图里 NEXT 的标题/正文被切掉一半。
   原来 `line-clamp:3` + 卡片 `overflow:hidden` 是**双重裁切**——无论内容多少都只给 3 行，
   且看起来像「本来就这么短」，用户分辨不出是被裁了。8 行足够容纳一站的完整描述。 */
.journey-topband .pulse-desc { display: -webkit-box; -webkit-line-clamp: 8; -webkit-box-orient: vertical; overflow: hidden; font-size: 12.5px; line-height: 1.5; }
.journey-topband .pulse-desc-empty { color: rgba(222, 238, 255, .45); }
.journey-topband .pulse-todo { color: rgba(222, 238, 255, .38); font-size: 12px; }
.journey-topband .pulse-more { font-size: 11.5px; color: rgba(222, 238, 255, .45); }
.journey-topband .pulse-watch-list { gap: 7px; }
.journey-topband .pulse-watch-text { font-size: 12.5px; line-height: 1.5; }
/* 行前提醒（未出发时 NOW 卡的内容）：条目式，需要更松的行距 */
.journey-topband .pulse-pretitle { font-size: 15px; line-height: 1.35; }
.journey-topband .pulse-prelist { gap: 8px; margin: 0; }
.journey-topband .pulse-prelist li { font-size: 12.5px; line-height: 1.5; }
.journey-topband .pulse-card .btn-compact { align-self: flex-start; margin-top: auto; padding: 6px 12px; font-size: 12px; }

/* AI 右格：高度锁死 = 带高；消息区内部滚动，页面高度不随消息数变 */
.journey-topband .journey-ai-line { margin: 0; min-width: 0; min-height: 0; height: 100%; }
.journey-topband .journey-ai-line .journey-chat { height: 100%; min-height: 0; max-height: none; border-radius: 18px; }
.journey-topband .journey-ai-line .journey-chat-guest { height: 100%; min-height: 0; }
.journey-topband .journey-chat-head { padding: 6px 12px; }
.journey-topband .journey-chat-avatar { width: 24px; height: 24px; font-size: 12px; }
.journey-topband .journey-chat-who strong { font-size: 13px; }
/* ⭐ 2026-10-03 第3 批：对话已搬出顶带 ⇒ 下面这组 `.journey-topband .journey-chat-*`
   全部失效（对话不再是顶带的子节点），前缀改为 .journey-workbench。
   保留压缩尺寸是因为工作区右栏/窄屏下对话仍需要密一点的气泡。 */
.journey-workbench .journey-chat-head { padding: 9px 12px; }
.journey-workbench .journey-chat-who small { font-size: 11px; }
.journey-workbench .journey-chat-list { padding: 10px 12px; gap: 8px; }
.journey-workbench .journey-chat-bubble { padding: 8px 11px; font-size: 12.5px; line-height: 1.5; }
.journey-workbench .journey-chat-empty { padding: 8px 12px; gap: 4px; align-content: start; }
.journey-workbench .journey-chat-empty .kicker { font-size: 10.5px; }
.journey-workbench .journey-chat-empty p { font-size: 12px; line-height: 1.5; }
.journey-workbench .journey-chat-suggest { margin-top: 6px; gap: 6px; }
.journey-topband .journey-chat-suggest-item { padding: 4px 9px; font-size: 11.5px; }
.journey-topband .journey-chat-composer { padding: 8px 10px; gap: 6px; }
.journey-topband .journey-chat-composer input { padding: 7px 11px; font-size: 12.5px; border-radius: 12px; }
.journey-topband .journey-chat-composer .btn-compact { padding: 7px 11px; font-size: 12.5px; }
.journey-topband .journey-chat-guest-body { padding: 4px 2px; gap: 8px; }
.journey-topband .journey-chat-guest-body p { font-size: 12.5px; line-height: 1.55; }
.journey-topband .journey-chat-guest-body .btn-compact { padding: 7px 13px; font-size: 12.5px; }

/* 1023 以下：三卡横向 snap 横滑，AI 落到下方 —— 不再挤压三卡宽度 */
@media (max-width: 1023px) {
  .journey-topband { grid-template-columns: minmax(0, 1fr); height: auto; }
  /* 提醒条降成单列：四列并排会把文字压成省略号，而这条信息恰恰是必须读完的 */
  .journey-alert { grid-template-columns: auto auto; row-gap: 8px; }
  .journey-alert-what { grid-column: 1 / -1; white-space: normal; }
  .journey-alert-acts { grid-column: 1 / -1; }
  .journey-topband .journey-pulse { grid-auto-flow: column; grid-auto-columns: 240px; grid-template-columns: none; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 4px; }
  /* 横滑时每张卡是独立一屏宽，写死高度才不会因内容多少忽高忽低 */
  .journey-topband .pulse-card { height: 300px; scroll-snap-align: start; }
  /* 窄屏工作区单列：对话在上、节奏在下（对话是主入口，不能被压到折叠线以下） */
  .journey-workbench { grid-template-columns: minmax(0, 1fr); }
  .journey-workbench .journey-chat { min-height: 220px; }
  .journey-topband .journey-ai-line { height: 240px; }
}
@media (max-width: 767px) {
  .journey-topband .journey-pulse { grid-auto-columns: 78%; }
  .journey-topband .topband-kicker { flex-wrap: wrap; gap: 6px 8px; }
  .journey-topband .topband-kicker-meta { flex-basis: 100%; }
}
