/* === H5 报价网页 v3 — LOGO配色 + 开源字体 === */

/* ── Noto Sans SC 自托管（2026-08-14，SIL OFL 开源字体；替代 Google Fonts @import，国内直连稳定）── */
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('fonts/noto-sans-sc-latin-400-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('fonts/noto-sans-sc-chinese-simplified-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('fonts/noto-sans-sc-chinese-simplified-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('fonts/noto-sans-sc-latin-700-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('fonts/noto-sans-sc-chinese-simplified-700-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Noto Sans SC';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('fonts/noto-sans-sc-chinese-simplified-700-normal.woff2') format('woff2');
}

:root {
  /* ★2026-09-18 Howard 定案：首页头部高度变量化（原 112px）。
     这三处原本各自硬编码：.app-header{height:112} / .tab-bar{top:112} /
     .card-list{margin-top:152}—— 改头部必漏另两处，故统一由变量推导。 */
  --header-h: 88px;
  --tabbar-h: 40px;
  /* LOGO 主色 */
  --red: #DA3A2C;
  --red-dark: #B82E1F;
  --red-light: #FEF0EF;
  --gold: #F9BE00;
  --gold-light: #FFF8E6;
  --purple: #491B87;
  --cyan: #28B7BD;
  --blue: #0C6FA8;
  --blue-dark: #004286;
  --green: #389C39;
  --lime: #9DCA3B;

  /* 语义色 */
  --bg: #F0F2F5;
  --card-bg: #FFFFFF;
  --text: #1A1A1A;
  --text-secondary: #666666;
  --text-light: #999999;
  --border: #E8E8EC;
  --tag-bg: #F1F2F4;
  --hover-bg: #E8E9ED;
  --multi-bg: #E4F5E6;
  --shadow: rgba(0, 0, 0, 0.06);
}

/* ── 深色模式 ── */
.dark {
  --bg: #1a1a2e;
  --card-bg: #16213e;
  --text: #e8e8f0;
  --text-secondary: #a0a0b8;
  --text-light: #7a7a90;
  --border: #2a2a4a;
  --tag-bg: #1e2a4a;
  --hover-bg: #2a3550;
  --multi-bg: #1e3a2a;
  --shadow: rgba(0, 0, 0, 0.3);
  --red: #ff4757;
  --red-dark: #e83344;
  --red-light: #2a1a1e;
  --gold: #ffc048;
  --gold-light: #2a2815;
}

* { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; }
html, body { height: 100%; }

body {
  font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", "Microsoft YaHei", sans-serif;
  background: var(--bg);
  color: var(--text);
  display: flex;
  flex-direction: column;
  -webkit-font-smoothing: antialiased;
  font-weight: 400;
  /* ★高度用【动态视口】100dvh（2026-09-18）：
     dvh 的定义就是「排除浏览器 UI 后的可视高度」—— iOS Safari / 微信 的底部工具栏出现时
     它自动收缩，底部坞（流内 flex item）随之上抬，不再被工具栏盖住。
     先写 `height:100%` 作回退：旧浏览器不认 dvh 时行为等同改前，不会更差。 */
  height: 100%;
  height: 100dvh;
}

/* ── 固定顶部（LOGO红渐变）── */
.app-header {
  position: fixed; top: 0; left: 0; right: 0;
  height: var(--header-h); z-index: 100;
  /* ★2026-09-18：固定头部的标准做法 —— 裁掉装饰层的溢出。
     · .header-bg::after（金色光晕 right:-30/top:-20）本就该被裁；
     · ✈ 装饰虽在头部内（实测 bottom 76 < 88），但它 64px 字体带 72px 行盒，
       会把 .header-content 的 scrollHeight 撑到 90（计算噪声，非视觉溢出）；
     加上本行后任何溢出都不可能露到头部之外。 */
  overflow: hidden;
}
.header-bg {
  position: absolute; inset: 0;
  background: linear-gradient(135deg, var(--red) 0%, var(--red-dark) 50%, #5C1A10 100%);
  overflow: hidden;
}
.header-bg::after {
  content: ''; position: absolute;
  right: -30px; top: -20px;
  width: 140px; height: 140px;
  background: radial-gradient(circle, rgba(249,190,0,0.12) 0%, transparent 70%);
  border-radius: 50%;
}
.header-content {
  position: relative; z-index: 1;
  /* ★2026-09-18：12/14 → 8/4（配合头部 112→88 压缩）。
     底部取 4 而非 8：实测内容总高 90px 会溢出 88px 的头部 2px；
     减的是【底部】不留白——它下面紧贴 Tab 栏，视觉上无关紧要，
     而【顶部】8px 是 logo 与屏幕上沿的呼吸位，必须保留。 */
  padding: 8px 16px 4px;
  color: #fff;
  display: flex; flex-direction: column;
  height: 100%;
}
.brand { display: flex; align-items: center; }
.header-theme{font-size:14px;cursor:pointer;margin-left:auto;padding:2px 4px;line-height:1;user-select:none;opacity:.7;align-self:flex-start;margin-top:4px}
.logo {
  width: 34px; height: 34px; margin-right: 9px;
  border-radius: 50%;
  background: #fff; padding: 2px;
  box-shadow: 0 2px 8px rgba(218,58,44,0.3);
}
.brand-text { flex: 1; }
.brand-title {
  font-size: 20px; font-weight: 800;
  letter-spacing: 1px;
  text-shadow: 0 1px 4px rgba(0,0,0,0.15);
}
.brand-sub { font-size: 11px; opacity: 0.85; margin-top: 1px; display: none; }
.header-stats {
  font-size: 10px; opacity: 0.7; margin-top: 1px;
  letter-spacing: 0.3px;
}
.header-stats span { font-weight: 700; color: var(--gold); }
.header-promo {
  font-size: 12px; font-weight: 700;
  margin-top: 1px; align-self: flex-end;
  color: var(--gold);
  text-shadow: 0 1px 3px rgba(0,0,0,0.2);
  animation: pulse 2s infinite;
}
.header-plane{position:absolute;right:12px;top:8px;font-size:64px;opacity:0.15;color:#fff;transform:rotate(-8deg);pointer-events:none;line-height:1}
/* 滑动区固定顶栏 */
/* 滑动区固定顶栏（2026-08-13: 加 -webkit-sticky 兼容 iOS Safari） */
.sticky-bar{position:-webkit-sticky;position:sticky;top:0;z-index:10;background:var(--bg);display:flex;align-items:center;justify-content:space-between;padding:8px 4px 6px;border-bottom:1px solid var(--border);min-height:38px}.sticky-label{font-size:14px;font-weight:700;color:var(--text)}.sticky-filter{font-size:11px;font-weight:600;color:var(--red);cursor:pointer;padding:3px 8px;border-radius:10px;background:var(--red-light);line-height:1.4}
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:0.7} }

/* ── Tab栏 ── */
.tab-bar {
  position: fixed; top: var(--header-h); left: 0; right: 0;
  height: var(--tabbar-h); z-index: 99;
  background: var(--card-bg);
  display: flex;
  border-bottom: 1px solid var(--border);
}
.tab-scroll {
  display: flex; flex: 1;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.tab-scroll::-webkit-scrollbar { display: none; }
.tab {
  flex: 0 0 auto; padding: 0 18px;
  font-size: 14px; color: var(--text-secondary);
  background: transparent; border: none;
  border-bottom: 2px solid transparent;
  font-weight: 500; cursor: pointer; white-space: nowrap;
}
.tab.active {
  color: var(--red);
  border-bottom-color: var(--red);
  font-weight: 700;
}

/* ── 卡片区 ── */
.card-list {
  flex: 1; min-height: 0;
  margin-top: calc(var(--header-h) + var(--tabbar-h)); margin-bottom: 0;   /* ★2026-09-18：原为固定底栏 96px 留白；
                                            底栏改为流内坞（70px）后由 flex:1 自动适配，无需留白 */
  overflow-y: auto; padding: 0 12px 10px;
}
.loading { text-align: center; color: var(--text-light); padding: 60px 0; font-size: 14px; }

/* 卡片分级标签 */
.card-level {
  position: absolute; top: 0; left: 14px;
  padding: 4px 10px; font-size: 11px; font-weight: 700;
  color: #fff; border-radius: 0 0 6px 6px; z-index: 2;
}
.card-level.hot { background: linear-gradient(135deg, var(--red), var(--red-dark)); box-shadow: 0 2px 8px rgba(218,58,44,0.3); }
.card-level.featured { background: linear-gradient(135deg, var(--gold), #D49A00); }
.card-level.special { background: linear-gradient(135deg, var(--cyan), #1E9196); }

/* ── 报价卡片（cardHTML / 筛选结果）── */
.card {
  position: relative;
  background: var(--card-bg);
  border-radius: 16px;
  margin-bottom: 12px;
  padding: 16px 14px 14px;
  box-shadow: 0 2px 12px rgba(0,0,0,0.05), 0 0 0 1px rgba(0,0,0,0.03);
  transition: all .15s;
  cursor: pointer;
  overflow: hidden;
}
.card::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0;
  width: 4px; border-radius: 4px 0 0 4px;
  background: var(--card-stripe, #DA3A2C);
}
.card::after {
  content: ''; position: absolute; top: -20px; right: -20px;
  width: 100px; height: 100px;
  background: radial-gradient(circle at top right, rgba(0,0,0,0.02) 0%, transparent 70%);
  border-radius: 50%; pointer-events: none;
}
.card:active { transform: scale(0.98); box-shadow: 0 1px 4px rgba(0,0,0,0.05); }
.card-level { position: absolute; top: 12px; right: 12px; left: auto; }
.card-level + .card-body { margin-top: 0; }

/* 卡片内容容器 */
.card-body { position: relative; z-index: 1; }

/* 顶部：航线 + 日期 + 时长 */
.card-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.card-route-line { display: flex; align-items: center; gap: 6px; }
.card-city-dep, .card-city-arr { font-size: 17px; font-weight: 700; color: var(--text); }
.card-route-arrow { color: var(--text-light); font-size: 13px; margin: 0 2px; }
.card-airport-sm { font-size: 10px; color: var(--text-light); }
.card-badge-group { display: flex; align-items: center; gap: 6px; }
.card-nights-badge {
  display: inline-flex; align-items: center;
  background: linear-gradient(135deg, var(--gold-light), #FFFDF5);
  color: #B8860B; padding: 4px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 600;
}
.card-date-badge {
  display: inline-flex; align-items: center;
  background: var(--tag-bg); color: var(--text-secondary);
  padding: 4px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 500;
}

/* 中部：航班信息行 */
.card-mid { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.card-airline-tag {
  display: inline-flex; align-items: center;
  background: linear-gradient(135deg, var(--tag-bg), var(--hover-bg));
  color: var(--text-secondary); padding: 3px 8px; border-radius: 6px;
  font-size: 11px; font-weight: 600;
}
.card-flight-num {
  font-family: "SF Mono","Consolas","Menlo",monospace;
  font-size: 12px; font-weight: 500; color: var(--text);
  letter-spacing: 0.2px;
}
.card-type-tag {
  display: inline-flex; align-items: center; padding: 2px 7px;
  border-radius: 4px; font-size: 10px; font-weight: 600;
}
.card-type-tag.group { background: var(--red-light); color: var(--red); }
.card-type-tag.flex { background: #E8F5E9; color: #2E7D32; }

/* 底部：价格 + 余位 + 按钮 */
.card-footer-v2 {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 10px; padding-top: 10px;
  border-top: 1px dashed rgba(0,0,0,0.06);
}
.card-price-main { display: flex; align-items: baseline; gap: 2px; }
.card-price-num {
  font-size: 26px; font-weight: 800; color: var(--red);
  letter-spacing: -0.5px; line-height: 1;
}
.card-price-unit { font-size: 12px; color: var(--text-light); font-weight: 400; }
.card-meta { display: flex; align-items: center; gap: 8px; }
.card-btn-v2 {
  background: linear-gradient(135deg, #FF6B35, var(--red));
  color: #fff; border: none;
  padding: 7px 16px; border-radius: 20px;
  font-size: 12px; font-weight: 700;
  box-shadow: 0 2px 8px rgba(218,58,44,0.25);
  cursor: pointer; letter-spacing: 0.3px;
}
.card-btn-v2:active { opacity: 0.85; transform: scale(0.96); }
/* 单程机票需搭配标签 */
.cf-oneway-tag{font-size:10px;color:#FF7D00;background:rgba(255,125,0,0.1);padding:1px 6px;border-radius:4px;margin-left:4px;font-weight:500;white-space:nowrap}
/* 简化版卡片（首页尾单） */
.cfs-card{padding:10px 12px;margin-bottom:6px;border-radius:10px;background:var(--card-bg);border:1px solid var(--border);cursor:pointer;font-size:12px;line-height:1.6;box-shadow:0 1px 5px var(--card-glow, transparent)}.cfs-card:active{opacity:.8}
.cfs-top{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-bottom:2px;font-weight:500;color:var(--text-primary)}
.cfs-route{font-weight:700;font-size:13px;color:var(--text)}
.cfs-price{font-weight:800;color:var(--red);font-size:14px}
.cfs-airline{font-size:11px;color:var(--text-secondary);margin-left:auto}
.cfs-row{font-size:12px;color:var(--text-secondary);padding:1px 0;display:flex;align-items:flex-start;gap:4px}
.cfs-body{display:flex;align-items:center;gap:6px}.cfs-flights{flex:1;min-width:0}
.cfs-consult{font-size:11px;font-weight:600;color:var(--red);cursor:pointer;white-space:nowrap;padding:4px 8px;border-radius:6px;background:var(--red-light);flex-shrink:0;align-self:stretch;display:flex;align-items:center}
.cfs-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;background:var(--blue);color:#fff;font-size:9px;font-weight:700;flex-shrink:0;margin-top:2px}.cfs-icon-ret{background:var(--green)}

/* 兼容旧样式 */
.card-route { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.route-end { display: flex; align-items: center; flex: 1; }
.route-end .city { font-size: 18px; font-weight: 700; }
.route-end .airport { font-size: 11px; color: var(--text-light); margin-top: 2px; }
.card-time {
  display: flex; align-items: baseline;
  background: var(--gold-light); color: #D49A00;
  padding: 4px 10px; border-radius: 6px; font-size: 12px;
}
.card-time .duration { font-weight: 700; margin-left: 4px; }
.card-row { display: flex; justify-content: space-between; align-items: center; padding: 4px 0; font-size: 13px; color: var(--text-secondary); }
.card-flight { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text); }
.card-flight .airline-tag { background: var(--tag-bg); color: var(--text-secondary); padding: 2px 6px; border-radius: 4px; font-size: 10px; }
.card-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); }
.card-price-wrap { display: flex; align-items: baseline; }
.card-price { font-size: 24px; font-weight: 800; color: var(--red); }
.card-price-suffix { font-size: 12px; color: var(--text-light); margin-left: 4px; }
.card-seats { color: var(--green); font-size: 11px; margin-left: 6px; }
.card-seats-empty { color: var(--text-light); font-size: 11px; }
.card-btn {
  background: linear-gradient(135deg, #FF6B35, var(--red));
  color: #fff; border: none;
  padding: 8px 18px; border-radius: 20px;
  font-size: 13px; font-weight: 700;
  box-shadow: 0 2px 6px rgba(218,58,44,0.3);
  cursor: pointer;
}
.card-btn:active { opacity: 0.9; }

/* ── 底部条 ── */
/* ★2026-09-18 压缩：96 → 70px（-27%）。
   内部同步收紧：二维码 56→44px、文字 11→10px、内边距 8→4px。
   目的：动作条更轻，且为「上滑升起的备案行」留出视觉焦点。
   ★高度改动后须确认三处仍正常：#toast 用 --dock-h（脚本动态写入）、
     .card-list 由 flex:1 自动吃掉剩余高度、iOS 安全区 padding 不变。 */
.app-footer {
  position: fixed; bottom: 0; left: 0; right: 0;
  height: 70px;
  background: var(--card-bg);
  border-top: 1px solid var(--border);
  display: flex; z-index: 100; padding: 4px 16px;
}
.qr-item {
  flex: 1; display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  cursor: pointer;
}
.qr-img {
  width: 44px; height: 44px;
  background: var(--tag-bg);
  border: 1px solid var(--border);
  border-radius: 4px;
  display: flex; align-items: center; justify-content: center;
}
.qr-img img { width: 100%; height: 100%; border-radius: 4px; }
.qr-img canvas { width: 100%; height: 100%; border-radius: 4px; display: block; }
.qr-share-icon { font-size: 24px; background: var(--tag-bg) !important; }
.qr-item p { font-size: 10px; color: var(--text-secondary); margin-top: 2px; }

/* ── 排序按钮 ── */
.sticky-sort{font-size:11px;padding:4px 9px;border-radius:12px;border:0.5px solid var(--border);cursor:pointer;color:var(--text-secondary);white-space:nowrap}.sticky-sort:hover{background:var(--tag-bg)}.sort-opt:hover{background:var(--hover-bg)!important}.sort-opt-group:hover{background:var(--hover-bg)}

/* ── 详情弹层（2026-08-13 加宽：modal padding 20→10，内容宽度 +20px，缓解回程框左右滑动）── */
.modal { position: fixed; inset: 0; background: rgba(0,0,0,0.5); z-index: 300; display: none; align-items: center; justify-content: center; padding: 10px; }
.modal.active { display: flex; }
/* ★2026-09-18 Howard 定案：筛选弹层顶部让出首页头部 ——
   遮罩 .modal 仍是 fixed inset:0 全屏（rgba(0,0,0,.5)），
   所以让出的那一段露出的是【被遮罩压暗的首页头部】= 「隐约可见头部」。
   弹层高度因此从「屏高 - 20」降为「屏高 - 96 - 10」。
   ★只动 #filterModal：详情/客服/分享弹层保持全屏（需求只提搜索框，避免连带风险）。 */
#filterModal { padding-top: calc(var(--header-h) + 8px); }
.modal-content { background: var(--card-bg); border-radius: 14px; max-width: 420px; width: 100%;
  /* ★2026-09-18：原 max-height:85vh —— 移动端 vh 是【大视口】高（工具栏收起时），
     比实际可视区大 ⇒ 弹层会超出屏幕被切。改百分比跟随 .modal（fixed inset:0 = 可视区）。 */
  max-height: 85%; overflow-y: auto; padding: 0; }
.modal-qr { max-width: 320px; text-align: center; padding: 20px; }

.detail-header { background: linear-gradient(135deg, var(--red) 0%, var(--red-dark) 100%); color: #fff; padding: 8px 14px 10px; position: sticky; top: 0; z-index: 20; }
/* 2026-08-13 方案A：头部组合行程块白字适配（详情页深色渐变底内） */
.detail-header #comboHeaderBar { font-size: 11px; color: #fff; }
.detail-header #comboHeaderBar span { color: inherit; }
.detail-close { font-size: 13px; cursor: pointer; color: rgba(255,255,255,0.85); }
.detail-x { font-size: 16px; cursor: pointer; color: rgba(255,255,255,0.7); }
.dh-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; }
.dh-route { font-size: 13px; font-weight: 600; margin-bottom: 3px; }
.dh-flight { font-size: 11px; opacity: 0.9; }
.dh-flight .dh-time { font-weight: 600; }
.dh-flight .dh-dur { opacity: 0.7; margin: 0 4px; }
.dh-flight .dh-code { font-size: 10px; opacity: 0.6; margin: 0 1px; }
.dh-dates { font-size: 11px; opacity: 0.8; margin-top: 2px; }
.detail-route { display: flex; align-items: center; justify-content: space-between; }
.detail-route .city { font-size: 20px; font-weight: 800; }
.detail-route .airport { font-size: 11px; opacity: 0.85; margin-top: 2px; }
.detail-time { font-size: 12px; margin-top: 6px; opacity: 0.9; }
.detail-body { padding: 12px; }
.detail-section { margin-bottom: 16px; }
.detail-section h4 { font-size: 12px; color: var(--text-light); margin-bottom: 8px; font-weight: 500; letter-spacing: 0.5px; }
.detail-row { display: flex; justify-content: space-between; padding: 7px 0; font-size: 13px; border-bottom: 1px solid #F0F1F5; }
.detail-row .label { color: var(--text-light); }
.detail-row .value { color: var(--text); font-weight: 500; }
.detail-price { text-align: center; background: linear-gradient(135deg, var(--red-light), #FFF5F5); padding: 16px; border-radius: 10px; margin: 12px 0; }
.detail-price-num { font-size: 34px; font-weight: 800; color: var(--red); }
.detail-price-tip { font-size: 11px; color: var(--text-light); margin-top: 4px; }
/* 紧凑价格行 */
.dp-row{display:flex;align-items:center;padding:10px 14px;background:linear-gradient(135deg,var(--red-light),#FFF5F5);border-bottom:1px solid var(--border);gap:6px}.dp-price{font-size:22px;font-weight:800;color:var(--red)}.dp-tax{font-size:12px;color:var(--text-light)}.dp-seat{margin-left:auto;font-size:13px}
/* 其他日期折叠切换 */
.dd-toggle{font-size:13px;font-weight:600;color:var(--red);padding:10px 14px;cursor:pointer;border-top:1px solid var(--border)}.dd-toggle:active{opacity:.7}
/* 航站楼标签（2026-08-05 用户：改用正常字体显示，原 9px 小字浅灰看不清） */
.t-term{font-size:inherit;color:var(--text);margin-left:2px;font-weight:500}.detail-row .t-term{color:var(--text)}
/* 2026-08-13 修复：详情页头部(深色渐变底+白字)里的航站楼跟随头部白色文字，不跟随全局 --text */
.detail-header .t-term{color:#fff}

.detail-actions { display: flex; gap: 8px; padding: 0 16px 16px; }
.detail-actions button { flex: 1; padding: 12px; border: none; border-radius: 10px; font-size: 14px; font-weight: 700; cursor: pointer; }
.detail-share { background: linear-gradient(135deg, var(--blue), var(--blue-dark)); color: #fff; }
.detail-share:active { opacity: 0.9; }
.detail-consult { background: linear-gradient(135deg, #FF6B35, var(--red)); color: #fff; }
.detail-consult:active { opacity: 0.9; }

/* 可选日期列表（2026-08-13 加宽：压缩 gap/padding/列宽，避免左右滑动） */
.odate { display: flex; align-items: center; gap: 4px; padding: 7px 6px; margin-bottom: 4px; border-radius: 8px; cursor: pointer; font-size: 12px; background: var(--tag-bg); }
.odate:hover { background: var(--hover-bg); }
/* 2026-08-13 勾选行标记（客服多选，与红点红色高亮区分） */
.odate.multi-checked { background: var(--multi-bg); }
.rodate.multi-checked { background: var(--multi-bg); }
/* 2026-08-13 勾选热区：label 包裹扩大点击范围，独立于整行点击（防误触红点/详情切换） */
.ro-multi-wrap, .odate-multi-wrap { display: flex; align-items: center; padding: 6px 3px; margin: -6px 0; cursor: pointer; flex: none; }
.ro-multi-wrap input, .odate-multi-wrap input { accent-color: var(--red); width: 16px; height: 16px; margin: 0; pointer-events: none; }
.odate-price { font-weight: 700; color: var(--red); margin-left: auto; white-space: nowrap; }
.odate-seats { color: var(--green); font-size: 11px; min-width: 24px; white-space: nowrap; }
.odate-time { color: var(--text-light); font-size: 11px; white-space: nowrap; }

/* Toast */
/* 坞高由页尾脚本写入 --dock-h；原写死 120px 是按坞高 96px 定的，坞变高后会被遮。 */
#toast { position: fixed; bottom: calc(var(--dock-h, 152px) + 12px); left: 50%; transform: translateX(-50%); background: rgba(0,0,0,0.8); color: #fff; padding: 10px 20px; border-radius: 8px; font-size: 13px; z-index: 500; transition: opacity .3s; white-space: nowrap; pointer-events: none; }
.share-copy:active,.share-wx:active{opacity:0.9}
.ticket-badge{font-size:10px;padding:1px 5px;border-radius:3px;margin-left:4px;white-space:nowrap}.ticket-badge.group{background:var(--red-light);color:var(--red)}.ticket-badge.flex{background:#E8F5E9;color:var(--green)}
.rodate{display:flex;align-items:center;gap:4px;padding:7px 6px;margin-bottom:4px;border-radius:6px;cursor:pointer;font-size:12px;background:var(--tag-bg);transition:background .1s}.rodate:hover{background:var(--hover-bg)}.ro-check{font-size:10px;width:12px;color:var(--text-light);flex:none}.ro-flight{font-weight:500;min-width:52px;white-space:nowrap}.ro-date{color:var(--text-secondary);min-width:78px;white-space:nowrap}.ro-time{color:var(--text-light);font-size:11px;min-width:42px;white-space:nowrap}.ro-price{font-weight:700;color:var(--red);margin-left:auto;min-width:44px;white-space:nowrap}.ro-seats{color:var(--green);font-size:11px;min-width:24px;white-space:nowrap;flex:none}
.sup-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px;vertical-align:middle}
.tab[data-tab="home"]{font-weight:600;padding:0 12px}
.tab-filter-btn{flex:0 0 auto;padding:0 10px;font-size:13px;color:var(--red);background:transparent;border:none;border-left:1px solid var(--border);font-weight:600;cursor:pointer;white-space:nowrap;display:flex;align-items:center}.tab-filter-btn:active{opacity:0.7}
.qr-filter-icon{font-size:22px;background:var(--tag-bg)!important;border:1px solid var(--border)!important;color:var(--brand)}
.fit-route{display:flex;align-items:center;padding:10px 12px;margin-bottom:6px;border-radius:8px;cursor:pointer;font-size:13px;background:var(--tag-bg);transition:all .1s}.fit-route:hover{background:var(--hover-bg)}.fit-cities{font-weight:500;flex:1}.fit-count{font-size:11px;color:var(--text-light);margin-right:10px}.fit-price{font-weight:700;color:var(--red)}
.qr-item-link .qr-img{width:48px!important;height:48px!important}.qr-item-link p{font-size:10px}
.hm-section{margin-bottom:4px}.hm-section-title{font-size:13px;font-weight:700;padding:10px 0 6px;color:var(--text);position:-webkit-sticky;position:sticky;top:0;background:var(--bg);z-index:2}.hm-group{border-radius:8px;margin-bottom:6px;overflow:hidden;background:var(--card-bg);box-shadow:0 1px 3px var(--shadow)}.hm-group-hd{display:flex;align-items:center;padding:10px 12px;cursor:pointer;gap:6px;font-size:13px}.hm-group-hd:active{background:var(--tag-bg)}.hm-route{font-weight:600;flex:1}.hm-nights{font-weight:700;color:var(--red);font-size:12px}.hm-count{color:var(--text-light);font-size:11px;min-width:30px}.hm-minprice{font-weight:700;color:var(--red);min-width:50px;text-align:right}.hm-arrow{color:var(--text-light);font-size:12px;transition:transform.2s}.hm-vis{font-size:11px;padding:1px 8px;border-radius:9px;font-weight:600;white-space:nowrap;border:1px solid transparent}.hm-vis.pub{background:rgba(34,160,90,.12);color:#1a8a4a;border-color:rgba(34,160,90,.3)}.hm-vis.int{background:var(--tag-bg);color:var(--text-light);border-color:var(--border)}.hm-group-bd{padding:0 12px 8px}.hm-card{padding:10px;margin-bottom:6px;border-radius:6px;background:var(--tag-bg);cursor:pointer;transition:background.1s}.hm-card:active{background:var(--hover-bg)}.hm-row{display:flex;align-items:center;justify-content:space-between;font-size:12px;padding:2px 0}.hm-date{font-weight:600;color:var(--text)}.hm-flight{color:var(--text-secondary)}.hm-route-sm{color:var(--text-light);font-size:11px}.hm-time{color:var(--text-secondary)}.hm-row-last{margin-top:4px}.hm-price{font-size:16px;font-weight:800;color:var(--red)}.hm-seats{color:var(--green);font-size:11px;margin-left:auto}.hm-ret{color:var(--cyan);font-size:11px;margin-left:8px}
.seat-soldout{color:var(--text-light);font-size:11px}.seat-full{color:var(--green);font-size:11px}.seat-unknown{color:var(--text-light);font-size:11px}.seat-low{color:#FF7D00;font-size:11px;font-weight:600}.seat-ok{color:var(--green);font-size:11px}
/* ── hmCard（列表卡片）── */
.hmcard{padding:14px!important;margin-bottom:8px!important;border-radius:12px!important;box-shadow:0 1px 4px rgba(0,0,0,0.04)!important;border-left:4px solid #DA3A2C!important;transition:all .15s;position:relative;overflow:hidden}
.hmcard::after{content:'';position:absolute;top:0;right:0;width:80px;height:80px;background:radial-gradient(circle at top right, rgba(0,0,0,0.02) 0%, transparent 70%);border-radius:0 0 0 80px;pointer-events:none}
.hmcard:active{transform:scale(0.985);box-shadow:0 1px 2px rgba(0,0,0,0.04)!important}
.hmcard-row{display:flex;align-items:center;gap:8px;font-size:12px;flex-wrap:wrap}
.hmcard-date{font-weight:700;color:var(--text);min-width:82px;font-size:13px;letter-spacing:-0.2px}
.hmcard-flight{color:var(--text-secondary);font-weight:500;font-family:"SF Mono","Consolas","Menlo",monospace;letter-spacing:0.3px}
.hmcard-row2{margin-top:6px;display:flex;align-items:center;gap:8px}
.hmcard-route{font-size:12px;color:var(--text);font-weight:500}
.hmcard-time{font-size:11px;color:var(--text-light);margin-left:auto}
.hmcard-ret{font-size:11px;color:var(--cyan);font-weight:500;background:rgba(40,183,189,0.08);padding:2px 6px;border-radius:4px}
/* hmCard footer */
.hmcard-footer{display:flex;align-items:center;justify-content:space-between;margin-top:8px;padding-top:8px;border-top:1px dashed rgba(0,0,0,0.06)}
.hmcard-price{font-size:22px;font-weight:800;color:var(--red);letter-spacing:-0.5px}
.hmcard-price-suffix{font-size:11px;color:var(--text-light);margin-left:3px;font-weight:400}
.hmcard-seats-wrap{display:flex;align-items:center;gap:6px}
/* 筛选搜索框 */
.fit-search{border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:13px;width:100%;box-sizing:border-box;outline:none;transition:border .2s;background:var(--card-bg);color:var(--text)}.fit-search:focus{border-color:var(--red)}
/* 搜索结果项 */
.fit-sr{padding:8px 10px;margin-bottom:4px;border-radius:6px;cursor:pointer;background:var(--tag-bg);font-size:12px;line-height:1.6}.fit-sr:active{opacity:.7}
/* 日历单元格 */
.cal-cell{min-height:44px;padding:3px;background:var(--tag-bg);border-radius:6px;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center}.cal-cell:active{opacity:.7}
/* 筛选底部按钮 */
.fit-footer{display:flex;gap:8px;padding-top:12px;border-top:1px solid var(--border);margin-top:10px}.fit-reset{flex:1;padding:10px;border:1px solid var(--border);border-radius:8px;background:var(--card-bg);color:var(--text-secondary);font-size:13px;font-weight:500;cursor:pointer}.fit-apply{flex:2;padding:10px;border:none;border-radius:8px;background:var(--brand,var(--red));color:#fff;font-size:13px;font-weight:700;cursor:pointer}.fit-apply:active,.fit-reset:active{opacity:.8}
/* 余位徽章 */
.seat-badge{display:inline-flex;align-items:center;padding:3px 8px;border-radius:10px;font-size:11px;font-weight:600;line-height:1.3}
.seat-badge.low{background:#FFF3E0;color:#E65100}
.seat-badge.ok{background:#E8F5E9;color:#2E7D32}
.seat-badge.soldout{background:#F5F5F5;color:#999}
.seat-badge.full{background:#E3F2FD;color:#1565C0}
.seat-badge.unknown{background:#F5F5F5;color:#999}
.seat-badge.info{background:#ECEFF1;color:#607D8B}
/* 供应商色条 */
.hmcard-sup-bar{position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:4px 0 0 4px}

/* ── cf-card 新格式报价卡片 ── */
.cf-card{padding:14px!important;border-radius:14px!important;box-shadow:0 1px 8px var(--card-glow, rgba(0,0,0,0.05))!important;cursor:pointer;transition:all .15s;position:relative;overflow:hidden}
.cf-card:active{transform:scale(0.985)}
.cf-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:4px 0 0 4px;background:var(--card-stripe,#DA3A2C)}
/* 头行：航线 / 反向航线 + 天数晚数 + 航司 */
.cf-header{display:flex;align-items:center;gap:6px;margin-bottom:8px;font-size:12px;flex-wrap:wrap}
.cf-route{font-weight:700;color:var(--text);font-size:14px}
.cf-duration-badge{display:inline-flex;align-items:center;padding:2px 7px;border-radius:10px;font-size:11px;font-weight:600;background:var(--gold-light);color:#B8860B}
.cf-airline-tag{display:inline-flex;align-items:center;padding:2px 7px;border-radius:6px;font-size:11px;font-weight:600;background:var(--tag-bg);color:var(--text-secondary);margin-left:auto}
/* 航班信息行 */
.cf-row{display:flex;align-items:center;gap:2px;font-size:12px;color:var(--text);padding:4px 0;flex-wrap:wrap;line-height:1.6}
.cf-label{display:inline-flex;align-items:center;justify-content:center;width:32px;height:20px;font-size:10px;font-weight:700;color:var(--red);background:var(--red-light);border-radius:4px;flex-shrink:0}
.cf-date{font-weight:600;color:var(--text);min-width:52px;font-size:11px}
.cf-flight{font-family:"SF Mono","Consolas","Menlo",monospace;font-weight:600;color:var(--text);font-size:12px;letter-spacing:0.3px}
.cf-airport{color:var(--text-secondary);font-size:11px}
.cf-city{color:var(--text);font-size:11px;font-weight:600}
.cf-time{color:var(--text);font-weight:500;font-size:11px;white-space:nowrap}
.cf-duration{color:var(--text-light);font-size:10px;background:var(--tag-bg);padding:0 4px;border-radius:3px}
/* 文本流航班信息（v4新格式） */
.cf-info-text{flex:1;min-width:0;font-size:12px;color:var(--text);line-height:1.7;white-space:pre-wrap;word-break:keep-all}
/* 新版报价卡片：cf-leg 区块排版（2026-08-12 由测试版紫色测试沙箱推送，对齐新版卡片） */
.cf-leg{display:grid;grid-template-columns:auto 1fr;margin:0;overflow:hidden;align-items:start}
.cf-leg + .cf-leg{border-top:1px dashed rgba(0,0,0,0.09)}
.cf-leg-cell{display:flex;flex-direction:row;align-items:center;gap:6px;padding:6px 10px;background:transparent;border-right:1px solid var(--card-bg);flex-shrink:0;white-space:nowrap}
.cf-leg-tag{font-size:11px;font-weight:600;color:var(--red);background:#FEF0EF;border-radius:4px;padding:1px 6px}
.cf-leg-dateflight{font-size:11px;font-weight:600;color:var(--text);white-space:nowrap}
.cf-leg-detail{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:3px;padding:6px 10px;min-width:0;text-align:left}
.cf-routepair{font-size:11px;font-weight:600;color:var(--text-secondary);white-space:nowrap;word-break:keep-all}
.cf-times{font-size:11px;font-weight:600;color:var(--text);white-space:nowrap}
/* 自由组合-回程缺省标记 */
.cf-retflex{font-size:10px;color:var(--cyan);font-weight:600;padding:2px 6px;border-radius:4px;background:rgba(40,183,189,0.08)}
/* 底栏：价格 + 余位 + 按钮 */
.cf-footer{display:flex;align-items:center;justify-content:space-between;margin-top:6px;padding-top:8px;border-top:1px dashed rgba(0,0,0,0.06)}
.cf-price{font-size:22px;font-weight:800;color:var(--red);letter-spacing:-0.5px;line-height:1}
.cf-price-tax{font-size:11px;color:var(--text-light);font-weight:400}
.cf-seats{display:inline-flex;align-items:center}
.cf-btn{background:var(--brand-grad, linear-gradient(135deg,#FF6B35,var(--red)));color:#fff;border:none;padding:6px 14px;border-radius:16px;font-size:11px;font-weight:700;box-shadow:0 2px 6px rgba(218,58,44,0.25);cursor:pointer;white-space:nowrap;letter-spacing:0.3px}
.cf-btn:active{opacity:0.85;transform:scale(0.96)}

/* 供应商标签（2026-08-12：排版对齐客服版 cf-sup-tag/cfs-sup-tag/dh-sup-tag；内容=供应商代码） */
.cf-sup-tag,.cfs-sup-tag,.dh-sup-tag{
  display:inline-block;font-size:10px;font-weight:700;line-height:1;
  padding:2px 6px;border-radius:4px;border:1px solid;margin-left:4px;
  vertical-align:middle;flex-shrink:0;
}
.dh-sup-tag{font-size:12px;padding:3px 8px;border-radius:6px;vertical-align:2px;}
/* ===== 自由行模块样式（移植自客服版 a52b 的 jj/jjd/seat-badge 规则，2026-08-26 修正：正式版自由行卡片格式与客服版一致；通用 .detail-* 弹窗样式由 sandbox 既有样式兜底，避免污染机票详情弹窗）===== */

.modal-content.jjd-lock { display: flex; flex-direction: column; overflow: hidden; }
.modal-content.jjd-lock .detail-header { flex-shrink: 0; position: relative; }
.modal-content.jjd-lock .detail-body { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.modal-content.jjd-lock .jjd-footer { margin: 0 -12px -12px; border-radius: 0 0 14px 14px; }
/* 余位徽章 */
.seat-badge{display:inline-flex;align-items:center;padding:3px 8px;border-radius:10px;font-size:11px;font-weight:600;line-height:1.3}
.seat-badge.low{background:#FFF3E0;color:#E65100}
.seat-badge.ok{background:#E8F5E9;color:#2E7D32}
.seat-badge.soldout{background:#F5F5F5;color:#999}
.seat-badge.full{background:#E3F2FD;color:#1565C0}
.seat-badge.unknown{background:#F5F5F5;color:#999}
.seat-badge.info{background:#ECEFF1;color:#607D8B}

/* ══ 自由行套餐（机+酒）卡片 ══ */
/* ── 自由行套餐（机+酒）卡片 ── */
.jj-cat { padding:14px 4px 6px; font-size:14px; font-weight:700; color:var(--text); display:flex; align-items:center; gap:8px; }
.jj-cat-tag { background:var(--brand); color:#fff; font-size:11px; padding:2px 10px; border-radius:10px; font-weight:600; }  /* 2026-08-07: 跟随主题色 */
.jj-cat-tag-sup { background:#e8833a; }  /* 2026-08-26：供应商自由行标签（橙，区别于自营蓝） */
.jj-nights { font-weight:700; color:var(--red); font-size:12px; }  /* 自由行分组头几天几晚，对齐原往返 hm-nights */
.jj-group { margin-bottom:8px; }
.jj-group-hd { display:flex; align-items:center; padding:8px 4px 6px; gap:6px; font-size:13px; font-weight:700; color:var(--text); }
.jj-count { font-size:11px; color:var(--text-3); font-weight:400; }
.jj-card { background:var(--card-bg); border:1px solid var(--border); border-radius:12px; padding:12px 14px; margin-bottom:8px; box-shadow:0 1px 3px var(--shadow); }
.jj-head { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.jj-route { font-size:15px; font-weight:700; color:var(--text); }
.jj-days { font-size:11px; color:var(--text-2); background:var(--tag-bg); padding:2px 8px; border-radius:8px; font-weight:600; }
.jj-price { margin-left:auto; font-size:19px; font-weight:800; color:var(--red); letter-spacing:-.5px; }
.jj-price-suffix { font-size:11px; color:var(--text-3); font-weight:400; }
.jj-price-tag { font-size:9.5px; font-weight:700; color:var(--brand); background:var(--brand-light); padding:1px 6px; border-radius:7px; margin-left:5px; vertical-align:2px; }
.jj-price-suffix { font-size:11px; color:var(--text-3); font-weight:400; }
.jjd-price-tag { font-size:11px; font-weight:700; color:var(--brand); background:#FFF0EE; border:1px solid var(--brand-2); padding:2px 8px; border-radius:8px; margin-left:8px; vertical-align:5px; }
.jj-dates { margin:8px 0 6px; display:flex; gap:6px; flex-wrap:wrap; }
.jj-date { font-size:11px; font-weight:600; padding:2px 8px; border-radius:10px; background:#FFF0EE; color:var(--red); border:1px solid #F5D5D0; }
.jj-date-empty { font-size:11px; color:var(--text-3); }
.jj-line { font-size:12px; color:var(--text); line-height:1.7; display:flex; gap:6px; }
.jj-k { flex-shrink:0; font-size:10.5px; font-weight:700; color:var(--text-3); padding-top:1px; }
.jj-v { color:var(--text); }
.jj-hls { margin-top:6px; display:flex; gap:6px; flex-wrap:wrap; }
.jj-hl { font-size:10.5px; color:var(--text-2); background:var(--tag-bg); padding:2px 7px; border-radius:8px; }
.jj-foot { margin-top:8px; padding-top:6px; border-top:1px dashed var(--border); display:flex; align-items:center; gap:8px; }
.jj-sup { font-size:11px; font-weight:700; color:var(--green); }
.jj-sub { font-size:11px; color:var(--text-3); }
.jj-ptype { font-size:10px; font-weight:600; color:var(--green); background:#E8F5E9; padding:1px 6px; border-radius:6px; margin-left:6px; vertical-align:2px; }
.jj-date-big { font-size:16px; font-weight:800; color:var(--red); margin-bottom:6px; padding-bottom:6px; border-bottom:1px dashed var(--border); }
.jj-date-big .jj-date-wk { font-size:12px; color:var(--text-2); font-weight:500; }

/* ── 自由行套餐详情页 ── */
.jjd-title { font-size:18px; font-weight:800; color:#fff; margin-top:2px; }
.jjd-sub { font-size:12px; color:rgba(255,255,255,.85); margin-top:3px; }
.jjd-price-card { background:var(--brand-light); border:1px solid var(--brand-2); border-radius:12px; padding:14px 16px; margin-bottom:14px; }
.jjd-price { font-size:30px; font-weight:800; color:var(--brand); letter-spacing:-1px; }
.jjd-price-suffix { font-size:13px; color:var(--text-2); font-weight:400; }
.jjd-ptype { font-size:11px; font-weight:700; color:var(--green); background:#E8F5E9; padding:2px 8px; border-radius:8px; margin-left:8px; vertical-align:4px; }
.jjd-price-note { font-size:11.5px; color:var(--text-2); margin-top:4px; }
.jjd-sec { margin-bottom:14px; }
.jjd-sec-t { font-size:12px; font-weight:700; color:var(--text-2); margin-bottom:6px; letter-spacing:1px; }
.jjd-flight { font-size:13px; color:var(--text); background:var(--tag-bg); border-radius:10px; padding:10px 12px; line-height:1.7; font-family:"SF Mono","Consolas",Menlo,monospace; }
.jjd-hotel { font-size:14px; font-weight:600; color:var(--text); background:var(--tag-bg); border-radius:10px; padding:10px 12px; }
.jjd-hotel-sub { font-size:11.5px; color:var(--text-2); font-weight:400; margin-top:3px; }
.jjd-chips { display:flex; gap:8px; flex-wrap:wrap; }
.jjd-chip { font-size:12.5px; font-weight:600; padding:6px 14px; border-radius:16px; background:var(--card-bg); border:1px solid var(--border); color:var(--text-2); cursor:pointer; }
.jjd-chip.active { background:var(--brand); border-color:var(--brand); color:#fff; }
.jjd-bag { font-size:13px; color:var(--text); background:var(--tag-bg); border-radius:10px; padding:10px 12px; }
.jjd-hls { display:flex; flex-direction:column; gap:6px; }
.jjd-hl { font-size:12.5px; color:var(--text); background:var(--tag-bg); border-radius:8px; padding:7px 10px; }
.jjd-hl span { margin-right:6px; }
.jjd-src { font-size:11px; color:var(--text-2); text-align:center; margin-top:8px; }
/* 2026-08-07: 按钮不悬浮——作为详情内容流的一部分固定在末尾（滚动到底可见） */
.jjd-footer { background:var(--card-bg); padding:12px 16px 16px; border-top:1px solid var(--border); }

/* ── 自由行详情页按钮组（2026-08-19 对齐往返机票 detail-actions 排版：复制左 + 咨询右，等宽并排）── */
.jjd-btn-group { display:flex; gap:8px; }
.jjd-copy { flex:1; padding:13px; border:none; border-radius:10px; background:var(--brand); color:#fff; font-size:14px; font-weight:700; cursor:pointer; }
.jjd-copy:active { opacity:.85; }
.jjd-copy.copied { background:var(--green); }
.jjd-consult { flex:1; padding:13px; border:none; border-radius:10px; background:linear-gradient(135deg, #FF6B35, var(--red)); color:#fff; font-size:14px; font-weight:700; cursor:pointer; }
.jjd-consult:active { opacity:.85; }

/* ── 自由行广告化卡片 ── */
.jj-card { background:var(--card-bg); border:1px solid var(--border); border-radius:14px; overflow:hidden; margin-bottom:10px; box-shadow:0 2px 8px var(--shadow); cursor:pointer; }
.jj-banner { position:relative; padding:14px 16px 12px; background:var(--brand-grad); color:#fff; }
.jj-banner-t1 { font-size:17px; font-weight:800; letter-spacing:.5px; }
.jj-banner-t2 { font-size:11.5px; color:rgba(255,255,255,.9); margin-top:4px; }
.jj-direct { position:absolute; top:10px; right:12px; font-size:10px; font-weight:700; background:rgba(255,255,255,.25); padding:2px 8px; border-radius:8px; }
.jj-flights { padding:8px 14px 4px; }
.jj-f-row { display:flex; align-items:center; gap:6px; font-size:11.5px; padding:3px 0; color:var(--text); }
.jj-f-seat { flex:0 0 auto; margin-left:4px; }
.jj-keymiss { margin:0 12px 8px; padding:6px 10px; font-size:12px; font-weight:600; color:#B26A00; background:#FFF8E1; border:1px solid #FFE0A3; border-radius:8px; }
.jj-f-tag { flex:0 0 auto; font-size:10px; font-weight:700; color:var(--text-2); background:var(--tag-bg); padding:1px 6px; border-radius:6px; }
.jj-f-tag-ret { color:#1B8A5A; background:#E8F5E9; }
.jj-f-flt { flex:0 0 auto; font-weight:800; color:var(--text); font-family:"SF Mono","Consolas",monospace; white-space:nowrap; }
.jj-f-city { flex:0 0 auto; color:var(--text); font-weight:600; white-space:nowrap; }
.jj-f-time { color:var(--text-2); font-size:11px; white-space:nowrap; margin-left:auto; }
.jj-f-desc { font-size:11.5px; color:var(--text-2); font-family:"SF Mono","Consolas",monospace; padding:4px 0; }
.jj-hotel { padding:8px 14px 4px; }
.jj-hotel-hd { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.jj-hotel-name { font-size:13.5px; font-weight:700; color:var(--text); }
.jj-star { font-size:10px; font-weight:700; color:var(--brand); background:var(--brand-light); padding:1px 7px; border-radius:8px; }  /* 红字浅底：与详情页一致 */
.jj-hotel-tags { display:flex; gap:6px; flex-wrap:wrap; margin-top:5px; }
.jj-htag { font-size:10px; color:var(--text-2); background:var(--tag-bg); padding:2px 7px; border-radius:8px; }
/* 2026-08-24k：卡片只渲染最低价酒店组合，其余 12 家统一进详情页选；此行为引导入口 */
.jj-hotel-more { margin-top:7px; padding:7px 10px; font-size:11.5px; font-weight:700; color:var(--brand-accent); background:var(--brand-light); border:1px dashed var(--brand-2); border-radius:9px; cursor:pointer; display:flex; align-items:center; gap:6px; }
.jj-hotel-more:active { opacity:.82; }
.jj-hotel-more-sub { font-size:10px; font-weight:400; color:var(--text-2); }
.jj-htag.link { text-decoration:none; cursor:pointer; color:var(--brand-accent); }  /* 2026-08-19: 卡片酒店官网标签 → 可点链接（新窗口打开），阻止冒泡到卡片详情 */
.jj-foot2 { display:flex; align-items:baseline; gap:8px; padding:8px 14px 4px; flex-wrap:wrap; }
.jj-foot-right { margin-left:auto; display:flex; align-items:baseline; gap:8px; }
.jj-foot-right .jj-price { margin-left:0; }
.jj-foot-seat { flex:0 0 auto; }
.jj-date { font-size:13px; font-weight:800; color:var(--brand); }
.jj-price { margin-left:auto; font-size:20px; font-weight:800; color:var(--brand); letter-spacing:-.5px; }
.jj-price-suffix { font-size:11px; color:var(--text-3); font-weight:400; }
.jj-hls { padding:2px 14px 6px; display:flex; gap:6px; flex-wrap:wrap; }
.jj-hl { font-size:10px; color:var(--text-2); background:var(--tag-bg); padding:2px 7px; border-radius:8px; }
/* 2026-08-26：自由行卡片「小提示」行（如丽江首晚住宿说明），仅当套餐 hotel_details.tip 存在时渲染 */
.jj-tip { margin:0 14px 4px; padding:7px 10px; font-size:11px; line-height:1.6; color:var(--text-2); background:var(--brand-light); border-left:3px solid var(--brand); border-radius:6px; }
.jj-consult { width:calc(100% - 28px); margin:2px 14px 12px; padding:11px; border:none; border-radius:10px; background:var(--brand); color:#fff; font-size:14px; font-weight:700; cursor:pointer; }
.jj-consult:active { opacity:.85; }

/* ── 自由行详情页：航班卡/酒店卡 ── */
.jjd-flight-card { background:var(--tag-bg); border-radius:10px; padding:10px 12px; margin-bottom:8px; }
.jjd-f-hd { display:flex; align-items:center; gap:8px; }
.jjd-f-flt { font-weight:800; font-size:14px; font-family:"SF Mono","Consolas",monospace; }
.jjd-f-airline { font-size:11px; color:var(--text-2); }
.jjd-f-dur { margin-left:auto; font-size:11px; color:var(--green); font-weight:600; }
.jjd-f-row { display:flex; align-items:center; gap:6px; font-size:13px; margin-top:5px; }
.jjd-f-air { color:var(--text); font-weight:500; }
.jjd-f-arrow { color:var(--text-2); }
.jjd-f-time { font-size:12px; color:var(--text-2); margin-top:2px; }
.jjd-f-tags { display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
.jjd-f-tags span { font-size:10px; color:var(--text-2); background:var(--card-bg); padding:2px 7px; border-radius:8px; }
.jjd-hotel-card { background:var(--tag-bg); border-radius:10px; padding:12px; }
.jjd-hotel-hd { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.jjd-hotel-name { font-size:15px; font-weight:800; color:var(--text); }
.jjd-hotel-name a, a.jj-hotel-name { text-decoration:none; color:var(--brand-accent); border-bottom:1px dashed var(--brand-accent); }  /* 2026-08-19: 酒店名即官网链接 */
.jjd-star { font-size:10.5px; font-weight:700; color:var(--brand); background:var(--brand-light); padding:2px 8px; border-radius:8px; }  /* 红字浅底：修复金字浅底反差不足（星级/含早+150徽章） */
.jjd-nights { font-size:10.5px; font-weight:700; color:var(--green); background:#E8F5E9; padding:2px 8px; border-radius:8px; }
.jjd-hotel-brand { font-size:11px; color:var(--text-2); margin-top:3px; }
.jjd-hotel-rows { margin-top:8px; }
.jjd-hr { font-size:12px; line-height:1.75; color:var(--text); }
.jjd-hr b { color:var(--text-2); font-weight:600; margin-right:6px; }

/* 2026-08-24k：OTA 预订须知区块（详情页底部——来源：携程/Trip.com/Booking/Agoda 多源爬取，写入 hotel_details.json 的 notes 字段） */
.jjd-notes { margin-top:10px; background:var(--card-bg); border:1px solid var(--border); border-radius:10px; padding:10px 12px; }
.jjd-notes > b { display:block; font-size:12px; font-weight:700; color:var(--brand); letter-spacing:1px; margin-bottom:6px; }
.jjd-note { font-size:11.5px; line-height:1.7; color:var(--text-2); padding:3px 0; border-top:1px dashed var(--border); }
.jjd-note:first-of-type { border-top:none; padding-top:0; }

/* 2026-08-19：#19 增强渲染 —— 行程安排逐日卡片（日期徽章 + 内容块） */
.jjd-itinerary { font-size:13px; line-height:1.85; color:var(--text); }
.jjd-it-day { background:var(--card-bg); border:1px solid var(--border, #ececec); border-radius:12px; padding:9px 12px; margin-bottom:8px; }
.jjd-it-day:last-child { margin-bottom:0; }
.jjd-it-date { display:inline-block; font-size:11.5px; font-weight:800; color:#fff; background:var(--brand, #DA3A2C); padding:3px 10px; border-radius:8px; margin-bottom:6px; letter-spacing:0.5px; }  /* 白字+品牌红底：修复金字浅底反差不足 */
.jjd-it-txt { font-size:13px; line-height:1.8; color:var(--text); }
.jjd-pickup { font-size:13px; color:var(--text); background:var(--tag-bg); border-radius:10px; padding:10px 12px; }
.jjd-pickup .jjd-pk-yes { color:var(--green); font-weight:700; }
.jjd-pickup .jjd-pk-no { color:var(--brand-accent); font-weight:700; }

/* 自由行详情页头部跟随主题 */
.jjd-header { background: var(--brand-grad) !important; }

/* ── 自由行卡片回程日期（2026-08-07）── */
.jj-retdate { font-size:11.5px; font-weight:600; color:var(--text-2); margin-left:4px; }

/* ── 搜索结果中的自由行命中（2026-08-18 新增）── */
.jj-search-block { margin: 8px 0 4px; }
.jj-search-hd { font-size: 12px; font-weight: 700; color: var(--text-secondary); padding: 6px 4px; display: flex; align-items: center; gap: 6px; }
.jj-search-hd::before { content: ""; width: 3px; height: 12px; background: var(--brand); border-radius: 2px; }
