/* ============================================================
   CAR CLUB 车友社交 - 深色科技风 v4.5
   四档自适应：车载大屏(带鱼屏) / 中屏控制台 / 桌面 / 手机
   ============================================================ */

* { margin:0; padding:0; box-sizing:border-box; font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif; }
a, button, .nav-item, .card, input, select, textarea { transition:all .2s ease; }

:root {
  --bg-deep:#080c14;
  --bg-base:#0a0f1a;
  --bg-card:#111827;
  --bg-card-light:#161e2e;
  --bg-hover:#1c2536;
  --bg-glass:rgba(10,15,26,0.92);
  --text-primary:#e8edf2;
  --text-secondary:#8896ac;
  --text-muted:#4a5568;
  --accent:#3b82f6;
  --accent-light:#60a5fa;
  --accent-glow:rgba(59,130,246,0.3);
  --teal:#14b8a6;
  --teal-glow:rgba(20,184,166,0.16);
  --orange:#f97316;
  --orange-glow:rgba(249,115,22,0.2);
  --green:#22c55e;
  --red:#ef4444;
  --yellow:#fbbf24;
  --blue:#3b82f6;
  --purple:#8b5cf6;
  --border:#1a2234;
  --border-light:#2a3548;
  --sidebar-w:220px;
  --right-panel-w:340px;
  --header-h:60px;
  --tabbar-h:60px;
  /* 大屏控制台 */
  --console-nav-w:200px;
  --console-right-w:360px;
  --console-gap:16px;
}

html, body { height:100%; overflow:hidden; background:var(--bg-deep); color:var(--text-primary); }
body { -webkit-font-smoothing:antialiased; }

/* ========== 滚动条 ========== */
::-webkit-scrollbar { width:8px; height:8px; }
::-webkit-scrollbar-track { background:transparent; }
::-webkit-scrollbar-thumb { background:var(--border-light); border-radius:4px; }
::-webkit-scrollbar-thumb:hover { background:var(--text-muted); }

/* ========== 左侧导航 ========== */
.side-nav {
  position:fixed; left:0; top:0; bottom:0; width:var(--sidebar-w);
  background:var(--bg-base); border-right:1px solid var(--border);
  z-index:9000; display:flex; flex-direction:column;
}
.side-brand { padding:20px 16px; display:flex; align-items:center; gap:12px; }
.brand-icon {
  width:36px; height:36px; border-radius:10px;
  background:linear-gradient(135deg,var(--accent),#1d4ed8);
  display:flex; align-items:center; justify-content:center; color:#fff;
  box-shadow:0 4px 12px var(--accent-glow); flex-shrink:0;
}
.brand-text { font-size:15px; font-weight:800; letter-spacing:1px; color:var(--text-primary); white-space:nowrap; }
.brand-icon.small { width:36px; height:36px; border-radius:10px; }
.side-nav-menu { flex:1; padding:8px 0; overflow-y:auto; }
.side-nav-item {
  display:flex; align-items:center; gap:12px; padding:10px 16px; margin:2px 12px;
  color:var(--text-secondary); text-decoration:none; font-size:14px;
  cursor:pointer; transition:all .2s; position:relative;
  border-radius:10px;
}
.side-nav-item:hover { color:var(--text-primary); background:rgba(255,255,255,0.04); }
.side-nav-item.active {
  color:var(--accent-light);
  background:linear-gradient(135deg, rgba(59,130,246,0.22), rgba(59,130,246,0.06));
  box-shadow:0 0 20px rgba(59,130,246,0.12);
}
.side-nav-item svg { flex-shrink:0; opacity:.8; }
.side-nav-item.active svg { opacity:1; }
.nav-dot {
  margin-left:auto; background:var(--red); color:#fff; font-size:10px;
  border-radius:8px; padding:1px 6px; font-weight:700;
}

/* ========== 主区域 ========== */
.main-area { margin-left:var(--sidebar-w); height:100vh; display:flex; flex-direction:column; }

/* 顶部栏 */
.header {
  height:var(--header-h); background:var(--bg-base); border-bottom:1px solid var(--border);
  display:flex; align-items:center; padding:0 24px; gap:16px; z-index:9500;
  position:relative; flex-shrink:0;
}
.header::after {
  content:""; position:absolute; bottom:-1px; left:0; right:0; height:1px;
  background:linear-gradient(90deg, transparent, var(--accent-glow) 50%, transparent);
}
.hamburger { width:40px; height:40px; border-radius:8px; background:transparent; border:none; color:var(--text-primary); font-size:20px; cursor:pointer; display:none; }
.header-title { font-size:20px; font-weight:700; letter-spacing:.3px; white-space:nowrap; }
.header .search-input {
  flex:0 1 360px; margin:0 auto;
  padding:9px 18px; border-radius:10px; border:1px solid var(--border);
  background:var(--bg-card); color:var(--text-primary); font-size:14px; outline:none;
  transition:border-color .2s;
}
.header .search-input:focus { border-color:var(--accent); }
.header .search-input::placeholder { color:var(--text-muted); }
.header-right { display:flex; align-items:center; gap:6px; margin-left:auto; }
.header-notify { position:relative; display:flex; align-items:center; justify-content:center; width:36px; height:36px; border-radius:10px; background:var(--bg-card); border:1px solid var(--border); color:var(--text-secondary); cursor:pointer; transition:all .2s; }
.header-notify:hover { color:var(--accent-light); border-color:var(--accent); }
.notify-badge { position:absolute; top:-5px; right:-5px; min-width:17px; height:17px; padding:0 4px; border-radius:9px; background:var(--orange); color:#fff; font-size:10px; font-weight:700; display:flex; align-items:center; justify-content:center; line-height:1; }
.route-map { position:relative; border-radius:12px; overflow:hidden; border:1px solid var(--border); background:#0c1420; }
.route-map-svg { display:block; width:100%; height:150px; }
.route-line { stroke-dasharray: 620; stroke-dashoffset: 620; animation:routeDash 5.5s linear infinite; }
.route-dot { animation:routePulse 1.6s ease-in-out infinite; }
.route-dot-pulse { animation:routePulse 1.6s ease-in-out .6s infinite; }
.route-end { animation:routePulse 1.6s ease-in-out 1.1s infinite; }
.route-car { animation:routeMove 5.5s linear infinite; }
.route-map-info { position:absolute; left:10px; bottom:10px; right:10px; display:flex; justify-content:space-between; gap:8px; padding:7px 12px; border-radius:10px; background:rgba(12,20,32,.85); border:1px solid rgba(255,255,255,.08); font-size:11px; color:#c9d4e3; backdrop-filter:blur(6px); }
@keyframes routeDash { 0% { stroke-dashoffset:620 } 60%,100% { stroke-dashoffset:0 } }
@keyframes routePulse { 0%,100% { opacity:1 } 50% { opacity:.35 } }
@keyframes routeMove { 0%,20% { transform:translate(0,0) } 60%,100% { transform:translate(245px,-96px) } }
.header-icon {
  width:36px; height:36px; border-radius:10px; background:transparent;
  border:none; color:var(--text-secondary); cursor:pointer;
  display:flex; align-items:center; justify-content:center; transition:all .2s;
}
.header-icon:hover { background:rgba(255,255,255,0.05); color:var(--text-primary); }
.header-icon.active { color:var(--accent-light); }

/* ===== 城市切换（胶囊条 + 下拉） ===== */
.city-switch { display:flex; align-items:center; gap:8px; }
.city-pills { display:flex; gap:8px; }
.city-pill {
  padding:7px 16px; border-radius:20px; cursor:pointer; font-size:13px;
  background:var(--bg-card); border:1px solid var(--border); color:var(--text-secondary);
}
.city-pill:hover { border-color:var(--accent); color:var(--text-primary); }
.city-pill.active { background:var(--accent); color:#fff; border-color:var(--accent); box-shadow:0 0 12px var(--accent-glow); }
.city-selector { position:relative; }
.city-btn {
  background:var(--bg-card); border:1px solid var(--border); color:var(--text-primary);
  padding:7px 14px; border-radius:20px; cursor:pointer; font-size:13px;
}
.city-dropdown {
  position:absolute; top:44px; right:0; background:var(--bg-card);
  border:1px solid var(--border); border-radius:12px; width:200px; max-height:320px;
  overflow-y:auto; display:none; box-shadow:0 8px 32px rgba(0,0,0,.5); z-index:9600;
}
.city-dropdown.show { display:block; }
.city-item { padding:10px 14px; cursor:pointer; font-size:14px; display:flex; justify-content:space-between; }
.city-item:hover { background:var(--bg-hover); }
.city-item.active { color:var(--accent-light); }

.user-avatar {
  width:36px; height:36px; border-radius:50%; margin-left:8px;
  background:linear-gradient(135deg,var(--accent),#1d4ed8);
  display:flex; align-items:center; justify-content:center; color:#fff;
  font-size:14px; font-weight:600; text-decoration:none;
  box-shadow:0 0 12px var(--accent-glow); overflow:hidden;
}

/* ========== 内容区 ========== */
.content-area { flex:1; display:flex; overflow:hidden; position:relative; }

#panel-map { flex:1; position:relative; }
#map { width:100%; height:100%; z-index:1; }
.dark-map .leaflet-tile-pane { filter:invert(1) hue-rotate(180deg) saturate(.3) brightness(.85) contrast(1.1); }

/* 搜索面板 */
.search-panel {
  position:absolute; top:70px; left:50%; transform:translateX(-50%); z-index:9500; display:none; width:400px;
}
.search-panel.show { display:block; }
.search-panel input { display:none; }
.search-results {
  background:var(--bg-card); border:1px solid var(--border);
  border-radius:14px; max-height:320px; overflow-y:auto; box-shadow:0 8px 32px rgba(0,0,0,.5);
}
.search-result-item { padding:12px 16px; cursor:pointer; font-size:13px; border-bottom:1px solid var(--border); }
.search-result-item:hover { background:var(--bg-hover); }
.search-result-name { font-size:14px; font-weight:600; margin-bottom:2px; }
.search-result-addr { font-size:12px; color:var(--text-secondary); }

/* ========== 右侧信息面板 ========== */
.right-panel {
  width:var(--right-panel-w); background:var(--bg-base);
  border-left:1px solid var(--border); overflow-y:auto; padding:20px 16px;
  display:flex; flex-direction:column; gap:16px; flex-shrink:0;
}
.rp-card {
  background:linear-gradient(145deg, var(--bg-card), #0d1420);
  border:1px solid var(--border); border-radius:16px;
  overflow:hidden; position:relative;
}
.rp-card::before {
  content:""; position:absolute; top:0; left:0; right:0; height:1px;
  background:linear-gradient(90deg, transparent, var(--accent-glow), transparent);
}
.rp-card-header { display:flex; justify-content:space-between; align-items:center; padding:14px 16px 10px; }
.rp-card-title { font-size:15px; font-weight:600; }
.rp-card-arrow { color:var(--text-muted); font-size:18px; }
.rp-card-body { padding:0 16px 16px; position:relative; z-index:1; }

.rp-row {
  display:flex; align-items:center; gap:12px;
  background:var(--bg-card-light); border-radius:12px; padding:10px 12px;
  cursor:pointer; transition:background .2s; margin-bottom:8px;
}
.rp-row:last-child { margin-bottom:0; }
.rp-row:hover { background:var(--bg-hover); }
.rp-ava, .rp-mini-avatar {
  width:38px; height:38px; border-radius:50%;
  background:linear-gradient(135deg,var(--accent),#1d4ed8);
  display:flex; align-items:center; justify-content:center; font-size:16px; flex-shrink:0;
}
.rp-mini-name { font-size:14px; font-weight:600; }
.rp-mini-sub { font-size:12px; color:var(--text-secondary); margin-top:2px; }

.rp-act-card { background:var(--bg-card-light); border-radius:12px; padding:14px; }
.rp-act-card + .rp-act-card { margin-top:10px; }
.rp-act-head { display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.rp-act-icon {
  width:40px; height:40px; border-radius:10px;
  display:flex; align-items:center; justify-content:center; font-size:20px; flex-shrink:0;
}
.rp-act-icon.orange { background:var(--orange-glow); }
.rp-act-icon.teal { background:var(--teal-glow); }
.rp-act-name { font-size:14px; font-weight:600; }
.rp-act-sub { font-size:12px; color:var(--text-secondary); margin-top:2px; }
.rp-act-desc, .rp-merchant-desc { font-size:12px; color:var(--text-secondary); line-height:1.6; margin-bottom:12px; }
.rp-act-actions { display:flex; gap:8px; }
.rp-btn-primary {
  flex:1; padding:9px 12px; border-radius:10px; border:none;
  background:linear-gradient(135deg,var(--accent),#1d4ed8);
  color:#fff; font-size:12px; font-weight:600; cursor:pointer;
  box-shadow:0 2px 8px var(--accent-glow);
}
.rp-btn-primary:hover { box-shadow:0 4px 16px var(--accent-glow); }
.rp-btn-secondary {
  flex:1; padding:9px 12px; border-radius:10px;
  background:var(--bg-hover); border:1px solid var(--border-light);
  color:var(--text-secondary); font-size:12px; cursor:pointer;
}
.rp-btn-secondary:hover { border-color:var(--accent); color:var(--accent-light); }

/* ========== 通用页面容器（列表页/独立页） ========== */
.page-shell { flex:1; overflow:hidden; display:flex; flex-direction:column; }
.page-scroll { flex:1; overflow-y:auto; padding:24px; }
.page-title-row { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; flex-wrap:wrap; gap:12px; }
.page-title { font-size:24px; font-weight:700; }
.page-subtitle { color:var(--text-secondary); font-size:14px; margin-bottom:20px; }

/* 筛选 chips */
.filter-chips { display:flex; gap:8px; margin-bottom:20px; flex-wrap:wrap; }
.chip { padding:6px 16px; border-radius:20px; background:var(--bg-card); border:1px solid var(--border); color:var(--text-secondary); font-size:13px; cursor:pointer; transition:all .2s; white-space:nowrap; }
.chip:hover { border-color:var(--border-light); color:var(--text-primary); }
.chip.active { background:var(--accent); color:#fff; border-color:var(--accent); }

/* ========== 卡片栅格 ========== */
.cards-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:16px; }
.card {
  background:var(--bg-card); border:1px solid var(--border); border-radius:16px;
  overflow:hidden; transition:all .2s; position:relative;
}
.card:hover { border-color:var(--accent); transform:translateY(-2px); box-shadow:0 8px 24px rgba(0,0,0,.3); }

/* ========== 统计卡（大屏 KPI） ========== */
.stats-row { display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:24px; }
.stat-card {
  background:linear-gradient(145deg,var(--bg-card),#0d1420);
  border:1px solid var(--border); border-radius:16px; padding:20px;
  position:relative; overflow:hidden;
  transition:transform .28s cubic-bezier(.2,.8,.3,1.2), box-shadow .28s ease, border-color .28s ease;
}
.stat-card::before {
  content:""; position:absolute; top:0; left:0; right:0; height:1px;
  background:linear-gradient(90deg, transparent, var(--accent-glow), transparent);
  transition:height .28s ease, background .28s ease;
}
.stat-card:hover { transform:translateY(-5px); }
.stat-card:hover::before { height:2px; background:linear-gradient(90deg, transparent, #60a5fa, transparent); }
.stat-card:nth-child(1):hover { border-color:rgba(34,197,94,.55); box-shadow:0 14px 30px rgba(34,197,94,.16), 0 0 0 1px rgba(34,197,94,.22); }
.stat-card:nth-child(2):hover { border-color:rgba(96,165,250,.55); box-shadow:0 14px 30px rgba(59,130,246,.16), 0 0 0 1px rgba(59,130,246,.22); }
.stat-card:nth-child(3):hover { border-color:rgba(45,212,191,.55); box-shadow:0 14px 30px rgba(45,212,191,.16), 0 0 0 1px rgba(45,212,191,.22); }
.stat-card:nth-child(4):hover { border-color:rgba(251,146,60,.55); box-shadow:0 14px 30px rgba(251,146,60,.16), 0 0 0 1px rgba(251,146,60,.22); }
.stat-card .stat-label { font-size:13px; color:var(--text-secondary); margin-bottom:8px; transition:color .28s ease; }
.stat-card:hover .stat-label { color:var(--text-primary); }
.stat-card .stat-value { font-size:34px; font-weight:800; color:var(--text-primary); line-height:1; letter-spacing:.5px; transition:transform .28s ease, text-shadow .28s ease; }
.stat-card:hover .stat-value { transform:scale(1.1); text-shadow:0 0 22px currentColor; }
.stat-card .stat-value.accent { color:var(--accent-light); }
.stat-card .stat-value.teal { color:var(--teal); }
.stat-card .stat-value.orange { color:var(--orange); }
.stat-card .stat-value.green { color:var(--green); }
.stat-card .stat-delta { font-size:12px; color:var(--green); margin-top:8px; }
.stat-card .stat-icon { position:absolute; top:16px; right:16px; font-size:22px; opacity:.4; transition:transform .3s ease, opacity .3s ease; }
.stat-card:hover .stat-icon { transform:scale(1.3) rotate(-10deg); opacity:1; }
.stat-card:hover .stat-delta { text-shadow:0 0 12px rgba(34,197,94,.55); }

/* ========== 大屏两栏布局（内容 + 右档案栏） ========== */
.dash-layout { flex:1; display:flex; overflow:hidden; gap:var(--console-gap); }
.dash-main { flex:1; overflow-y:auto; padding:24px; }
.dash-side { width:var(--console-right-w); flex-shrink:0; overflow-y:auto; padding:24px 16px; border-left:1px solid var(--border); background:var(--bg-base); }
.panel-block { margin-bottom:20px; }
.panel-block-title { font-size:15px; font-weight:700; margin-bottom:14px; display:flex; align-items:center; gap:8px; }
.panel-block-title::before { content:""; width:4px; height:16px; border-radius:2px; background:var(--accent); box-shadow:0 0 8px var(--accent-glow); }

/* 车辆档案 */
.vehicle-profile { background:var(--bg-card); border:1px solid var(--border); border-radius:16px; padding:20px; }
.vp-hero { text-align:center; padding:8px 0 16px; border-bottom:1px solid var(--border); margin-bottom:16px; }
.vp-car-icon { font-size:44px; margin-bottom:8px; }
.vp-car-img { width:200px; height:200px; object-fit:contain; margin-bottom:8px; filter:drop-shadow(0 12px 26px rgba(0,0,0,.45)); }
.vp-model { font-size:18px; font-weight:700; }
.vp-plate { font-size:13px; color:var(--text-secondary); margin-top:4px; letter-spacing:1px; }
.vp-row { display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid var(--border); font-size:14px; }
.vp-row:last-child { border-bottom:none; }
.vp-label { color:var(--text-secondary); }
.vp-value { color:var(--text-primary); font-weight:600; }
.vp-tags { display:flex; gap:8px; margin-top:12px; flex-wrap:wrap; }

/* 车辆档案 - 属性格 */
.vp-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.vp-item { background:var(--bg-card-light); border-radius:12px; padding:14px; }
.vp-item .vp-item-label { font-size:12px; color:var(--text-secondary); margin-bottom:6px; }
.vp-item .vp-item-value { font-size:16px; font-weight:700; }

/* ========== 车友卡片（广场） ========== */
.car-card-2 { background:var(--bg-card); border:1px solid var(--border); border-radius:16px; padding:18px; transition:all .2s; overflow:hidden; }
.car-card-2:hover { border-color:var(--accent); transform:translateY(-2px); box-shadow:0 8px 24px rgba(0,0,0,.3); }
.cc-head { display:flex; align-items:center; gap:14px; margin-bottom:12px; }
.cc-avatar {
  width:96px; height:96px; border-radius:16px;
  background:linear-gradient(135deg, rgba(59,130,246,.14), rgba(29,78,216,.06));
  display:flex; align-items:center; justify-content:center; font-size:20px; font-weight:700; color:#fff; flex-shrink:0; position:relative;
  overflow:hidden;
}
.cc-avatar .cc-car { width:100%; height:100%; object-fit:contain; border-radius:16px; padding:6px; }
.cc-avatar .cc-online { position:absolute; bottom:6px; right:6px; width:14px; height:14px; border-radius:50%; border:2px solid var(--bg-card); }
.cc-avatar .cc-online.on { background:var(--green); box-shadow:0 0 8px rgba(34,197,94,.6); }
.cc-avatar .cc-online.off { background:var(--text-muted); }
/* 车友卡片：舞台射灯 + 小车/小人/宠物 三段错位不遮挡 */
.cc-scene {
  position:relative; height:190px; margin:-18px -18px 14px;
  background:radial-gradient(130% 130% at 30% 15%, rgba(59,130,246,.18), rgba(13,18,32,.93) 55%, rgba(5,8,18,.98));
  border-top:1px solid rgba(148,163,184,.28); border-bottom:1px solid var(--border);
  border-radius:15px 15px 0 0; overflow:hidden;
}
.cc-scene::before { /* 射灯光束 */
  content:''; position:absolute; inset:0; pointer-events:none; z-index:0;
  background:
    radial-gradient(ellipse 46% 58% at 50% 10%, rgba(226,232,240,.14), rgba(226,232,240,.04) 45%, transparent 72%),
    linear-gradient(103deg, transparent 40%, rgba(148,163,184,.06) 47%, rgba(148,163,184,.13) 52%, rgba(148,163,184,.06) 57%, transparent 64%),
    linear-gradient(77deg, transparent 40%, rgba(148,163,184,.05) 47%, rgba(148,163,184,.10) 52%, rgba(148,163,184,.05) 57%, transparent 64%);
}
.cc-scene::after { /* 舞台地面光斑 */
  content:''; position:absolute; bottom:4px; left:10%; width:80%; height:34px; pointer-events:none; z-index:0;
  background:radial-gradient(ellipse 50% 46% at 50% 50%, rgba(148,163,184,.24), rgba(148,163,184,.07) 55%, transparent 78%);
  filter:blur(3px);
}
.cc-scene-car { position:absolute; left:50%; bottom:2px; transform:translateX(-50%); height:170px; object-fit:contain; z-index:1; filter:drop-shadow(0 10px 18px rgba(0,0,0,.55)); }
/* 左上角人头像（圆形，带眨眼与在线点） */
.cc-person-avatar {
  position:absolute; top:10px; left:10px; width:46px; height:46px; border-radius:50%;
  overflow:hidden; z-index:3; cursor:pointer;
  background:linear-gradient(135deg,#24324d,#101a2e);
  border:2px solid rgba(255,255,255,.32);
  box-shadow:0 4px 12px rgba(0,0,0,.45), inset 0 0 10px rgba(59,130,246,.25);
  transition:transform .2s ease, border-color .2s ease;
}
.cc-person-avatar:hover { transform:scale(1.1); border-color:var(--accent-light); }
.cc-av-img { position:absolute; left:0; top:0; width:100%; height:100%; object-fit:cover; object-position:center 0%; transform:translateY(2%); }
.cc-av-close { opacity:0; animation:pBlinkImg 4.6s ease-in-out infinite; }
.cc-scene-online { position:absolute; bottom:-2px; right:-2px; width:14px; height:14px; border-radius:50%; border:2px solid #0d1420; z-index:2; }
.cc-scene-online.on { background:#22c55e; box-shadow:0 0 8px rgba(34,197,94,.75); }
.cc-scene-online.off { background:#6b7280; }
/* 右上角宠物头像（圆形 GIF，点击打开萌宠档案） */
.cc-pet-avatar {
  position:absolute; top:10px; right:10px; width:46px; height:46px; border-radius:50%;
  overflow:hidden; z-index:3; cursor:pointer;
  background:radial-gradient(120% 120% at 50% 30%, #2b2340, #14101f);
  border:2px solid rgba(255,255,255,.32);
  box-shadow:0 4px 12px rgba(0,0,0,.45), inset 0 0 10px rgba(139,92,246,.28);
  transition:transform .2s ease, border-color .2s ease;
}
.cc-pet-avatar:hover { transform:scale(1.12); border-color:#a78bfa; }
.cc-pet-avatar img { position:absolute; left:0; top:0; width:100%; height:100%; object-fit:contain; transform:scale(0.85); display:block; }
.cc-person { position:absolute; left:63%; bottom:4px; transform:translateX(-50%); z-index:3; }
.cc-person-img { height:112px; width:auto; display:block; }
.cc-bl { animation:pSway 3.6s ease-in-out infinite; transform-origin:50% 100%; filter:drop-shadow(0 6px 14px rgba(0,0,0,.5)); }
.cc-bl-close { position:absolute; left:0; top:0; opacity:0; animation:pSway 3.6s ease-in-out infinite, pBlinkImg 4.6s ease-in-out infinite; transform-origin:50% 100%; filter:drop-shadow(0 6px 14px rgba(0,0,0,.5)); }
@keyframes pBlinkImg { 0%,86%,100% { opacity:0 } 88%,94% { opacity:1 } 96% { opacity:0 } }
.cc-pet { position:absolute; left:47%; bottom:2px; transform:translateX(-50%); z-index:2; width:auto; cursor:pointer; transition:transform .2s ease; }
.cc-pet:hover { transform:translateX(-50%) scale(1.12); }
.cc-pet-img { height:100%; width:auto; display:block; filter:drop-shadow(0 5px 12px rgba(0,0,0,.5)); }
.cc-pet-chip { display:inline-flex; align-items:center; gap:4px; font-size:12px; font-weight:700; color:#8b5cf6;
  background:rgba(139,92,246,.12); padding:3px 10px; border-radius:12px; cursor:pointer; margin-right:6px; }
.cc-pet-chip:hover { background:rgba(139,92,246,.2); }
/* 萌宠档案面板 */
.pet-profile { display:flex; flex-direction:column; gap:12px; }
.pet-hero { display:flex; align-items:center; gap:14px; }
.pet-img { width:64px; height:64px; object-fit:contain; background:radial-gradient(120% 120% at 50% 30%, rgba(139,92,246,.16), rgba(13,18,32,0) 70%); border-radius:16px; }
.pet-name { font-size:20px; font-weight:800; color:var(--text-primary); }
.pet-species { font-size:12px; color:var(--text-secondary); margin-top:2px; }
.pet-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.pet-item { background:rgba(139,92,246,.08); border:1px solid rgba(139,92,246,.14); border-radius:12px; padding:8px 12px; }
.pet-item-label { font-size:11px; color:var(--text-secondary); }
.pet-item-value { font-size:14px; font-weight:700; color:var(--text-primary); margin-top:2px; }
.pet-desc { font-size:13px; line-height:1.6; color:var(--text-secondary); background:rgba(13,18,32,.4); border:1px solid var(--border); border-radius:12px; padding:10px 12px; }
.cc-scene-online { position:absolute; bottom:-2px; right:-2px; width:14px; height:14px; border-radius:50%; border:2px solid #0d1420; z-index:2; }
.cc-scene-online.on { background:#22c55e; box-shadow:0 0 8px rgba(34,197,94,.75); }
.cc-scene-online.off { background:#6b7280; }
.cc-online-badge { color:#22c55e; font-size:12px; }
@keyframes pSway { 0%,100% { transform:rotate(0deg) scale(1) } 50% { transform:rotate(1.4deg) scale(1.012) } }
.cc-name { font-size:16px; font-weight:600; margin-bottom:2px; }
.cc-username { font-size:12px; color:var(--text-secondary); }
.cc-model { font-size:13px; color:var(--accent-light); font-weight:600; margin-top:2px; }
.cc-plate { font-size:12px; color:var(--text-secondary); letter-spacing:.5px; }
.cc-meta { display:flex; align-items:center; gap:8px; margin-bottom:12px; font-size:13px; color:var(--text-secondary); }
.cc-tags { display:flex; gap:6px; margin-bottom:14px; flex-wrap:wrap; }
.tag { padding:3px 10px; border-radius:12px; font-size:11px; background:var(--bg-hover); border:1px solid var(--border); color:var(--text-secondary); cursor:pointer; transition:all .2s; }
.tag:hover { border-color:var(--accent); color:var(--accent-light); transform:translateY(-1px); }
.tag.active { color:#fff; background:var(--accent); border-color:var(--accent); }
.tag.hot { color:var(--orange); border-color:rgba(249,115,22,.3); background:var(--orange-glow); }
.tag.hot.active { color:#fff; background:var(--orange); border-color:var(--orange); }
.tag.blue { color:var(--accent-light); border-color:rgba(59,130,246,.3); background:rgba(59,130,246,.1); }
.tag.blue.active { color:#fff; background:#3b82f6; border-color:#3b82f6; }
.tag-bar { display:flex; align-items:center; gap:8px; margin:10px 0 0; padding:8px 14px; border-radius:12px; background:var(--bg-card); border:1px solid var(--border); font-size:13px; color:var(--text-secondary); flex-wrap:wrap; }
.tag-bar-icon { font-size:15px; }
.tag-bar-clear { margin-left:auto; color:var(--accent-light); cursor:pointer; font-size:12px; }
.tag-bar-clear:hover { text-decoration:underline; }
.cc-actions { display:flex; gap:8px; }

/* ========== 活动详情页 ========== */
.act-detail { flex:1; display:flex; overflow:hidden; gap:var(--console-gap); padding:24px; }
.act-detail-main { flex:1; overflow-y:auto; display:flex; flex-direction:column; gap:16px; padding-right:8px; }
.act-detail-side { width:var(--console-right-w); flex-shrink:0; overflow-y:auto; }
.act-hero { border-radius:16px; overflow:hidden; position:relative; height:300px; min-height:300px; }
.act-hero img { width:100%; height:100%; object-fit:cover; }
.act-hero-cover { position:absolute; inset:0; background:linear-gradient(180deg, transparent 40%, rgba(8,12,20,.92)); }
.act-hero-content { position:absolute; left:24px; bottom:20px; right:24px; }
.act-hero-title { font-size:28px; font-weight:800; margin-bottom:8px; }
.act-hero-meta { font-size:14px; color:var(--text-secondary); }
.badge { display:inline-block; font-size:12px; padding:4px 12px; border-radius:14px; font-weight:600; }
.badge-signup { background:rgba(34,197,94,.16); color:#22c55e; }
.badge-full { background:rgba(107,114,128,.16); color:#9ca3af; }
.badge-done { background:rgba(59,130,246,.16); color:#60a5fa; }

.act-info-panel { background:var(--bg-card); border:1px solid var(--border); border-radius:16px; padding:20px; margin-bottom:16px; }
.act-info-row { display:flex; justify-content:space-between; align-items:center; padding:11px 0; border-bottom:1px solid var(--border); font-size:14px; }
.act-info-row:last-child { border-bottom:none; }
.act-info-label { color:var(--text-secondary); display:flex; align-items:center; gap:8px; }
.act-info-value { color:var(--text-primary); font-weight:600; }
.act-quota { height:8px; background:var(--bg-hover); border-radius:4px; overflow:hidden; margin:12px 0 8px; }
.act-quota-bar { height:100%; background:linear-gradient(90deg,var(--green),var(--teal)); border-radius:4px; }
.act-quota-text { font-size:12px; color:var(--text-secondary); }
.act-quota-text strong { color:var(--green); }

/* 报名车友 */
.participants { display:flex; gap:12px; }
.participant { text-align:center; width:60px; }
.participant-ava {
  width:52px; height:52px; border-radius:50%; margin:0 auto 6px;
  background:linear-gradient(135deg,var(--accent),var(--purple));
  display:flex; align-items:center; justify-content:center; font-size:18px; font-weight:700; color:#fff;
  overflow:hidden; position:relative; border:2px solid rgba(255,255,255,.22);
  box-shadow:0 4px 10px rgba(0,0,0,.3);
}
.participant-ava img { position:absolute; left:0; top:0; width:100%; height:100%; object-fit:cover; object-position:center 0%; transform:translateY(2%); display:block; }
.participant-name { font-size:12px; color:var(--text-secondary); }

/* 活动相册 */
.gallery { display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:10px; }
.gallery img { width:100%; aspect-ratio:4/3; object-fit:cover; border-radius:10px; cursor:pointer; border:1px solid var(--border); }
.gallery img:hover { border-color:var(--accent); }

/* 群聊窗口 */
.group-chat {
  background:var(--bg-card); border:1px solid var(--border); border-radius:16px;
  overflow:hidden; display:flex; flex-direction:column; max-height:320px;
}
.gc-header { padding:12px 16px; border-bottom:1px solid var(--border); display:flex; align-items:center; gap:10px; font-weight:600; }
.gc-body { padding:12px 16px; overflow-y:auto; flex:1; display:flex; flex-direction:column; gap:8px; }
.gc-msg { max-width:80%; padding:8px 12px; border-radius:14px; font-size:13px; line-height:1.5; }
.gc-msg-them { align-self:flex-start; background:var(--bg-hover); border-bottom-left-radius:4px; }
.gc-msg-them .gc-sender { font-size:11px; color:var(--accent-light); margin-bottom:2px; }
.gc-msg-me { align-self:flex-end; background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; border-bottom-right-radius:4px; }

/* ========== 路线路书页 ========== */
.route-layout { flex:1; display:flex; overflow:hidden; gap:var(--console-gap); padding:16px; }
.route-map-wrap { flex:1; position:relative; border-radius:16px; overflow:hidden; border:1px solid var(--border); }
.route-map-wrap #routeMap { width:100%; height:100%; }
.route-stats {
  position:absolute; left:20px; bottom:20px; display:flex; gap:16px; z-index:600;
  background:var(--bg-glass); border:1px solid var(--border); border-radius:14px; padding:12px 18px; backdrop-filter:blur(12px);
}
.route-stat { font-size:13px; color:var(--text-secondary); }
.route-stat strong { display:block; font-size:18px; color:var(--accent-light); font-weight:700; }
.route-side { width:var(--console-right-w); flex-shrink:0; overflow-y:auto; display:flex; flex-direction:column; gap:14px; }
.route-create { background:var(--bg-card); border:1px dashed var(--accent); border-radius:16px; padding:18px; }
.route-create .rc-title { font-size:15px; font-weight:700; margin-bottom:14px; }
.route-form-row { margin-bottom:12px; }
.route-form-row label { display:block; font-size:12px; color:var(--text-secondary); margin-bottom:6px; }
.route-form-row input, .route-form-row textarea {
  width:100%; padding:10px 12px; border-radius:10px; border:1px solid var(--border);
  background:var(--bg-deep); color:var(--text-primary); font-size:13px; outline:none;
}
.route-form-row input:focus, .route-form-row textarea:focus { border-color:var(--accent); }
.route-list { display:flex; flex-direction:column; gap:12px; }
.route-entry { display:flex; gap:12px; background:var(--bg-card); border:1px solid var(--border); border-radius:14px; padding:12px; align-items:center; }
.route-entry-thumb { width:72px; height:56px; border-radius:10px; overflow:hidden; flex-shrink:0; background:var(--bg-hover); display:flex; align-items:center; justify-content:center; font-size:24px; }
.route-entry-thumb img { width:100%; height:100%; object-fit:cover; }
.route-entry-info { flex:1; min-width:0; }
.route-entry-name { font-size:14px; font-weight:600; margin-bottom:4px; }
.route-entry-meta { display:flex; gap:14px; font-size:12px; color:var(--text-secondary); flex-wrap:wrap; }
.route-entry-actions { display:flex; flex-direction:column; gap:6px; align-items:flex-end; }
.icon-btn { background:transparent; border:none; color:var(--text-secondary); cursor:pointer; font-size:13px; display:flex; align-items:center; gap:4px; }
.icon-btn:hover { color:var(--text-primary); }
.icon-btn.liked { color:var(--red); }

/* ========== 商家中心页 ========== */
.merch-layout { flex:1; display:flex; overflow:hidden; gap:var(--console-gap); padding:16px; }
.merch-map-wrap { flex:1; position:relative; border-radius:16px; overflow:hidden; border:1px solid var(--border); }
.merch-map-wrap #merchMap { width:100%; height:100%; }
.merch-cat-bar {
  position:absolute; left:50%; bottom:20px; transform:translateX(-50%); z-index:600;
  display:flex; gap:8px; background:var(--bg-glass); border:1px solid var(--border);
  border-radius:16px; padding:10px 14px; backdrop-filter:blur(12px);
}
.merch-list { width:var(--console-right-w); flex-shrink:0; overflow-y:auto; display:flex; flex-direction:column; gap:12px; }
.merch-item { background:var(--bg-card); border:1px solid var(--border); border-radius:14px; overflow:hidden; }
.merch-item:hover { border-color:var(--accent); }
.merch-item-head { display:flex; gap:12px; padding:14px; }
.merch-thumb { width:64px; height:64px; border-radius:12px; overflow:hidden; flex-shrink:0; background:var(--bg-hover); display:flex; align-items:center; justify-content:center; font-size:28px; }
.merch-thumb img { width:100%; height:100%; object-fit:cover; }
.merch-item-name { font-size:15px; font-weight:600; margin-bottom:4px; }
.merch-item-type { font-size:11px; color:var(--accent-light); margin-bottom:4px; }
.merch-item-meta { font-size:12px; color:var(--text-secondary); line-height:1.7; }
.merch-item-actions { display:flex; gap:8px; padding:0 14px 14px; }
.stars { color:var(--yellow); letter-spacing:1px; }
.star-empty { color:var(--text-muted); }

/* ========== 消息中心页 ========== */
.msg-layout { flex:1; display:flex; overflow:hidden; }
.msg-left { width:340px; flex-shrink:0; border-right:1px solid var(--border); background:var(--bg-base); display:flex; flex-direction:column; }
.msg-tabs { display:flex; border-bottom:1px solid var(--border); padding:0 12px; flex-shrink:0; }
.msg-tab { padding:13px 12px; font-size:13px; color:var(--text-secondary); cursor:pointer; border-bottom:2px solid transparent; }
.msg-tab.active { color:var(--accent-light); border-bottom-color:var(--accent); }
.msg-convs { flex:1; overflow-y:auto; }
.conv-item { display:flex; gap:12px; padding:14px 16px; cursor:pointer; border-bottom:1px solid var(--border); align-items:center; }
.conv-item:hover, .conv-item.active { background:var(--bg-hover); }
.conv-ava {
  width:44px; height:44px; border-radius:50%; flex-shrink:0;
  background:linear-gradient(135deg,var(--accent),var(--purple));
  display:flex; align-items:center; justify-content:center; font-size:18px; font-weight:700; color:#fff; position:relative;
}
.conv-ava .u-online { position:absolute; bottom:0; right:0; width:10px; height:10px; border-radius:50%; background:var(--green); border:2px solid var(--bg-card); }
.conv-info { flex:1; min-width:0; }
.conv-name { font-size:14px; font-weight:600; display:flex; align-items:center; gap:6px; }
.conv-preview { font-size:12px; color:var(--text-secondary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-top:2px; }
.conv-time { font-size:11px; color:var(--text-muted); }
.conv-unread { background:var(--red); color:#fff; font-size:10px; border-radius:10px; padding:1px 7px; font-weight:700; }
.msg-chat { flex:1; display:flex; flex-direction:column; background:var(--bg-deep); }
.msg-chat-header { height:60px; border-bottom:1px solid var(--border); display:flex; align-items:center; padding:0 20px; gap:10px; flex-shrink:0; }
.chat-messages { flex:1; padding:20px; display:flex; flex-direction:column; gap:12px; overflow-y:auto; }
.msg { max-width:60%; padding:10px 14px; border-radius:16px; font-size:14px; line-height:1.5; }
.msg-me { align-self:flex-end; background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; border-bottom-right-radius:4px; }
.msg-them { align-self:flex-start; background:var(--bg-hover); border-bottom-left-radius:4px; }
.msg-time { font-size:10px; color:var(--text-muted); margin-top:4px; }
.msg-input-bar { display:flex; gap:10px; padding:16px 20px; border-top:1px solid var(--border); flex-shrink:0; }
.msg-input-bar input { flex:1; padding:11px 16px; border-radius:20px; border:1px solid var(--border); background:var(--bg-base); color:var(--text-primary); font-size:14px; outline:none; }
.msg-input-bar input:focus { border-color:var(--accent); }
.send-btn { padding:10px 22px; border-radius:20px; border:none; background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; font-size:14px; font-weight:600; cursor:pointer; }
.msg-right { width:280px; flex-shrink:0; border-left:1px solid var(--border); background:var(--bg-base); padding:16px; overflow-y:auto; }
.msg-right-block { margin-bottom:20px; }
.msg-right-title { font-size:13px; font-weight:700; color:var(--text-secondary); margin-bottom:12px; }
.side-friend { display:flex; align-items:center; gap:10px; padding:8px 0; }
.side-friend-ava { width:36px; height:36px; border-radius:50%; background:var(--bg-hover); display:flex; align-items:center; justify-content:center; font-size:15px; font-weight:600; }
.side-friend-name { font-size:13px; }
.remind-item { padding:10px; background:var(--bg-card); border-radius:10px; margin-bottom:8px; font-size:12px; color:var(--text-secondary); }

/* ========== 个人主页页 ========== */
.profile-layout { flex:1; display:flex; overflow:hidden; gap:var(--console-gap); padding:24px; }
.profile-main { flex:1; overflow-y:auto; }
.profile-side { width:var(--console-right-w); flex-shrink:0; overflow-y:auto; }
.profile-hero {
  background:linear-gradient(145deg,var(--bg-card),#0d1420); border:1px solid var(--border);
  border-radius:16px; padding:24px 28px; position:relative; overflow:hidden; margin-bottom:16px;
  display:flex; align-items:center; justify-content:space-between; gap:16px; text-align:left;
}
.profile-hero::before { content:""; position:absolute; top:0; left:0; right:0; height:1px; background:linear-gradient(90deg,transparent,var(--accent-glow),transparent); }
.profile-hero-left { display:flex; align-items:center; gap:18px; min-width:0; }
.profile-avatar {
  width:92px; height:92px; border-radius:50%; flex-shrink:0;
  background:linear-gradient(135deg,var(--accent),var(--purple));
  display:flex; align-items:center; justify-content:center; font-size:38px; font-weight:800; color:#fff;
  box-shadow:0 0 28px var(--accent-glow); position:relative;
}
.profile-avatar .online-dot { position:absolute; bottom:4px; right:4px; width:16px; height:16px; border-radius:50%; background:var(--green); border:3px solid var(--bg-card); }
.profile-hero-info { display:flex; flex-direction:column; align-items:flex-start; min-width:0; }
.profile-nickname { font-size:22px; font-weight:800; }
.profile-car { font-size:14px; color:var(--accent-light); margin-top:4px; font-weight:600; }
.profile-plate { font-size:13px; color:var(--text-secondary); margin-top:2px; letter-spacing:1px; }
.online-badge {
  display:inline-flex; align-items:center; gap:6px; margin-top:10px;
  background:rgba(34,197,94,.12); border:1px solid rgba(34,197,94,.35);
  color:var(--green); font-size:12px; font-weight:700; padding:3px 12px; border-radius:12px;
}
.online-badge .ob-dot { width:8px; height:8px; border-radius:50%; background:var(--green); box-shadow:0 0 8px rgba(34,197,94,.8); }
.profile-hero-actions { display:flex; flex-direction:column; gap:10px; flex-shrink:0; align-items:stretch; }
.profile-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin:20px 0; }
.profile-stat { background:var(--bg-card-light); border-radius:12px; padding:14px 8px; text-align:center; }
.profile-stat .ps-num { font-size:22px; font-weight:800; color:var(--accent-light); }
.profile-stat .ps-label { font-size:12px; color:var(--text-secondary); margin-top:4px; }
.profile-tabs { display:flex; border-bottom:1px solid var(--border); margin-bottom:18px; }
.profile-tab { padding:12px 18px; font-size:14px; color:var(--text-secondary); cursor:pointer; border-bottom:2px solid transparent; }
.profile-tab.active { color:var(--accent-light); border-bottom-color:var(--accent); }
.profile-panel { display:none; }
.profile-panel.active { display:block; }
.vp-mod-list { display:flex; gap:8px; flex-wrap:wrap; }
.vp-mod-item { background:var(--bg-card-light); border:1px solid var(--border); border-radius:10px; padding:6px 12px; font-size:13px; }
.car-color-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
.car-color-cell { background:var(--bg-card); border:1px solid var(--border); border-radius:12px; overflow:hidden; aspect-ratio:1; display:flex; align-items:center; justify-content:center; font-size:30px; cursor:pointer; }
.car-color-cell:hover { border-color:var(--accent); }
.car-color-cell span { font-size:12px; color:var(--text-secondary); position:absolute; bottom:6px; }
.car-color-img { width:72%; height:72%; object-fit:contain; filter:drop-shadow(0 4px 6px rgba(0,0,0,.25)); }
.avatar-img { width:44px; height:44px; border-radius:50%; object-fit:cover; flex-shrink:0; border:1px solid var(--border); }

/* ========== 管理后台 ========== */
.admin-wrap { flex:1; overflow-y:auto; padding:24px; }
.admin-kpis { display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:20px; }
.admin-kpi { background:linear-gradient(145deg,var(--bg-card),#0d1420); border:1px solid var(--border); border-radius:16px; padding:20px; position:relative; overflow:hidden; }
.admin-kpi::before { content:""; position:absolute; top:0; left:0; right:0; height:1px; background:linear-gradient(90deg,transparent,var(--accent-glow),transparent); }
.admin-kpi .ak-label { font-size:13px; color:var(--text-secondary); margin-bottom:8px; }
.admin-kpi .ak-value { font-size:32px; font-weight:800; }
.admin-kpi .ak-delta { font-size:12px; color:var(--green); margin-top:8px; }
.admin-charts { display:grid; grid-template-columns:2fr 1fr 1fr; gap:16px; margin-bottom:20px; }
.chart-card { background:var(--bg-card); border:1px solid var(--border); border-radius:16px; padding:18px; }
.chart-card-title { font-size:14px; font-weight:600; margin-bottom:14px; }
.admin-table-card { background:var(--bg-card); border:1px solid var(--border); border-radius:16px; padding:18px; }
.admin-table-card h3 { font-size:15px; font-weight:700; margin-bottom:14px; }
table.admin-table { width:100%; border-collapse:collapse; font-size:13px; }
.admin-table th { text-align:left; padding:10px 12px; color:var(--text-secondary); font-weight:500; border-bottom:1px solid var(--border); font-size:12px; }
.admin-table td { padding:11px 12px; border-bottom:1px solid var(--border); }
.admin-table tr:hover td { background:var(--bg-hover); }
.admin-role { font-size:11px; padding:3px 10px; border-radius:10px; font-weight:600; }
.admin-role.admin { background:rgba(59,130,246,.16); color:#60a5fa; }
.admin-role.user { background:rgba(107,114,128,.16); color:#9ca3af; }
.row-actions { display:flex; gap:6px; }
.row-btn { padding:5px 10px; border-radius:8px; font-size:12px; cursor:pointer; border:1px solid var(--border); background:var(--bg-hover); color:var(--text-secondary); }
.row-btn:hover { border-color:var(--accent); color:var(--accent-light); }
.row-btn.danger:hover { border-color:var(--red); color:var(--red); }

/* ========== 通用控件 ========== */
.btn-primary { background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; border:none; padding:9px 16px; border-radius:10px; font-size:14px; font-weight:600; cursor:pointer; }
.btn-primary:hover { opacity:.9; }
.btn-secondary { background:var(--bg-hover); color:var(--text-secondary); border:1px solid var(--border-light); padding:9px 16px; border-radius:10px; font-size:14px; cursor:pointer; }
.btn-secondary:hover { color:var(--text-primary); border-color:var(--accent); }
.btn-outline { background:transparent; border:1px solid var(--border); color:var(--text-secondary); padding:8px 14px; border-radius:10px; font-size:13px; cursor:pointer; }
.btn-outline:hover { border-color:var(--accent); color:var(--accent-light); }
.btn-mini { padding:7px 12px; border-radius:10px; font-size:12px; border:none; cursor:pointer; font-weight:600; }
.btn-mini.btn-primary { background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; }
.btn-mini.btn-outline { background:var(--bg-hover); border:1px solid var(--border-light); color:var(--text-secondary); }
.btn-mini.btn-outline:hover { border-color:var(--accent); color:var(--accent-light); }

/* ========== 弹窗 ========== */
.modal-overlay { position:fixed; inset:0; background:rgba(0,0,0,.7); z-index:10000; display:none; align-items:center; justify-content:center; backdrop-filter:blur(4px); }
.modal-overlay.show { display:flex; }
.modal-box { background:var(--bg-card); border-radius:16px; padding:20px; width:90%; max-width:440px; border:1px solid var(--border); max-height:84vh; overflow-y:auto; }
.modal-title { font-size:16px; font-weight:600; margin-bottom:16px; }
.modal-body { margin-bottom:16px; }
.modal-footer { display:flex; gap:8px; justify-content:flex-end; }
.review-stars { display:flex; gap:6px; font-size:28px; cursor:pointer; }
.review-stars span { color:var(--text-muted); }
.review-stars span.on { color:var(--yellow); }

/* ========== 抽屉 / 底部Tab（移动端） ========== */
.drawer-mask { position:fixed; inset:0; background:rgba(0,0,0,.6); z-index:9600; display:none; }
.drawer-mask.show { display:block; }
.drawer {
  position:fixed; top:0; left:-300px; width:280px; height:100%;
  background:var(--bg-card); border-right:1px solid var(--border); z-index:9700;
  transition:left .3s; display:flex; flex-direction:column;
}
.drawer.show { left:0; }
.drawer-header { padding:20px 16px; border-bottom:1px solid var(--border); }
.drawer-brand { display:flex; align-items:center; gap:12px; }
.drawer-username { font-size:16px; font-weight:600; }
.drawer-user-info { font-size:12px; color:var(--text-secondary); margin-top:2px; }
.drawer-tabs { display:flex; border-bottom:1px solid var(--border); }
.drawer-tab { flex:1; padding:12px 0; text-align:center; font-size:13px; color:var(--text-secondary); cursor:pointer; border-bottom:2px solid transparent; }
.drawer-tab.active { color:var(--accent-light); border-bottom-color:var(--accent); }
.drawer-content { flex:1; overflow-y:auto; padding:12px; }
.drawer-tab-panel { display:none; }
.drawer-tab-panel.active { display:block; }
.car-card, .act-card, .route-card { background:var(--bg-card-light); border-radius:12px; padding:12px; margin-bottom:10px; }
.car-card-header { display:flex; align-items:center; gap:10px; margin-bottom:8px; }
.car-card-avatar { width:36px; height:36px; border-radius:50%; background:var(--accent); display:flex; align-items:center; justify-content:center; font-size:14px; font-weight:600; }
.car-card-name { font-size:14px; font-weight:600; }
.car-card-model { font-size:12px; color:var(--text-secondary); }
.car-card-footer { display:flex; justify-content:space-between; align-items:center; }
.car-card-distance { font-size:12px; color:var(--text-secondary); }
.btn-greet { background:var(--accent); color:#fff; border:none; padding:6px 12px; border-radius:16px; font-size:12px; cursor:pointer; }
.act-title { font-size:14px; font-weight:600; margin-bottom:4px; }
.act-desc { font-size:12px; color:var(--text-secondary); line-height:1.5; margin-bottom:8px; }
.act-meta { font-size:12px; color:var(--text-secondary); display:flex; justify-content:space-between; }
.btn-join { background:var(--green); color:#000; border:none; padding:6px 12px; border-radius:16px; font-size:12px; cursor:pointer; font-weight:600; }
.btn-cancel { background:var(--bg-hover); color:var(--text-secondary); border:1px solid var(--border); }

/* ========== Leaflet 弹窗 ========== */
.leaflet-popup-content-wrapper { background:var(--bg-card); color:var(--text-primary); border-radius:14px; border:1px solid var(--border); }
.leaflet-popup-tip { background:var(--bg-card); }
.leaflet-popup-content { margin:0; line-height:1.4; }
.leaflet-popup-close-button { color:var(--text-secondary) !important; }
.car-popup { background:var(--bg-card); border-radius:14px; padding:14px; min-width:220px; }
.car-popup-title { font-size:15px; font-weight:600; margin-bottom:4px; }
.car-popup-info { font-size:13px; color:var(--text-secondary); margin-bottom:10px; line-height:1.6; }
.car-popup-actions { display:flex; gap:8px; }
.btn-navigate { flex:1; background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; border:none; padding:8px; border-radius:10px; font-size:13px; cursor:pointer; font-weight:600; }
.btn-chat { flex:1; background:var(--bg-hover); color:var(--text-primary); border:1px solid var(--border); padding:8px; border-radius:10px; font-size:13px; cursor:pointer; }

/* ========== 导航状态栏 ========== */
.nav-bar {
  position:absolute; bottom:24px; left:20px; right:380px;
  background:var(--bg-glass); border:1px solid var(--accent);
  border-radius:16px; padding:14px 18px; z-index:9800;
  display:none; backdrop-filter:blur(16px);
  box-shadow:0 4px 32px var(--accent-glow);
}
.nav-bar.show { display:block; }
.nav-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.nav-destination { font-size:15px; font-weight:600; }
.nav-close { background:var(--bg-hover); border:1px solid var(--border); color:var(--text-primary); padding:5px 14px; border-radius:14px; font-size:12px; cursor:pointer; }
.nav-turn { display:flex; align-items:center; gap:12px; margin-bottom:8px; }
.nav-turn-icon { font-size:28px; }
.nav-turn-text { font-size:14px; font-weight:500; }
.nav-turn-dist { font-size:13px; color:var(--text-secondary); margin-left:auto; }
.nav-info { display:flex; gap:24px; }
.nav-info-label { font-size:11px; color:var(--text-secondary); }
.nav-info-value { font-size:18px; font-weight:700; color:var(--accent-light); }
.nav-progress { margin-top:10px; height:4px; background:var(--bg-hover); border-radius:2px; overflow:hidden; }
.nav-progress-bar { height:100%; background:linear-gradient(90deg,var(--accent),var(--accent-light)); border-radius:2px; width:0%; transition:width .3s; }

/* ========== 底部Tab栏（移动端） ========== */
.tab-bar { position:fixed; bottom:0; left:0; right:0; height:var(--tabbar-h); background:var(--bg-card); border-top:1px solid var(--border); display:none; z-index:9999; }
.tab-item { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; font-size:11px; color:var(--text-secondary); cursor:pointer; gap:2px; position:relative; }
.tab-item.active { color:var(--accent-light); }
.tab-icon { font-size:20px; }
.tab-badge { position:absolute; top:6px; right:50%; margin-right:-16px; min-width:18px; height:18px; background:var(--red); color:#fff; border-radius:9px; font-size:11px; font-weight:700; display:none; align-items:center; justify-content:center; padding:0 5px; border:2px solid var(--bg-card); }

/* ========== 右侧滑出抽屉 ========== */
.full-panel {
  position:fixed; top:var(--header-h); right:0; bottom:0;
  width:420px; max-width:100vw;
  background:var(--bg-base); z-index:9850; display:none; flex-direction:column;
  border-left:1px solid var(--border);
  box-shadow:-8px 0 32px rgba(0,0,0,.4);
  transform:translateX(100%);
  transition:transform .3s cubic-bezier(.4,0,.2,1);
}
.full-panel.show { display:flex; transform:translateX(0); }
.full-panel-header { height:48px; background:var(--bg-card); border-bottom:1px solid var(--border); display:flex; align-items:center; padding:0 16px; gap:12px; flex-shrink:0; }
.full-panel-back { background:transparent; border:none; color:var(--text-primary); font-size:20px; cursor:pointer; width:32px; height:32px; display:flex; align-items:center; justify-content:center; border-radius:8px; }
.full-panel-title { font-size:16px; font-weight:600; }
.full-panel-body { flex:1; overflow-y:auto; padding:16px; }
.panel-mask { position:fixed; inset:var(--header-h) 0 0 0; background:rgba(0,0,0,.5); z-index:9840; display:none; backdrop-filter:blur(2px); }
.panel-mask.show { display:block; }
.loading-hint { text-align:center; color:var(--text-secondary); padding:40px 20px; font-size:14px; }

.list-card { background:var(--bg-card); border-radius:14px; padding:14px; margin-bottom:10px; border:1px solid var(--border); }
.list-card-header { display:flex; align-items:center; gap:12px; margin-bottom:10px; }
.avatar-circle { width:44px; height:44px; border-radius:50%; background:linear-gradient(135deg,var(--accent),var(--purple)); display:flex; align-items:center; justify-content:center; font-size:18px; font-weight:600; color:#fff; flex-shrink:0; }
.list-card-info { min-width:0; }
.list-card-name { font-size:15px; font-weight:600; margin-bottom:2px; }
.list-card-sub { font-size:12px; color:var(--text-secondary); line-height:1.4; }
.list-card-actions { display:flex; gap:8px; }
.btn-mini.btn-primary { background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; }
.btn-mini.btn-outline { background:transparent; border:1px solid var(--border); color:var(--text-secondary); }
.btn-mini.faved { color:var(--yellow); border-color:var(--yellow); }
.chat-card { cursor:pointer; }

/* ========== 聊天窗口（抽屉内） ========== */
.chat-messages { flex:1; overflow-y:auto; padding:16px; display:flex; flex-direction:column; gap:10px; }
.chat-msg { max-width:75%; display:flex; flex-direction:column; }
.chat-msg-me { align-self:flex-end; align-items:flex-end; }
.chat-msg-them { align-self:flex-start; align-items:flex-start; }
.chat-bubble { padding:10px 14px; border-radius:16px; font-size:14px; line-height:1.4; word-break:break-word; }
.chat-msg-me .chat-bubble { background:linear-gradient(135deg,var(--accent),#1d4ed8); color:#fff; border-bottom-right-radius:4px; }
.chat-msg-them .chat-bubble { background:var(--bg-hover); color:var(--text-primary); border-bottom-left-radius:4px; }
.chat-time { font-size:10px; color:var(--text-secondary); margin-top:4px; }
.chat-input-bar { display:flex; gap:8px; padding:12px 16px; background:var(--bg-card); border-top:1px solid var(--border); flex-shrink:0; }
.chat-input-bar input { flex:1; padding:10px 14px; border-radius:20px; border:1px solid var(--border); background:var(--bg-deep); color:var(--text-primary); font-size:14px; outline:none; }
.chat-input-bar input:focus { border-color:var(--accent); }
.chat-send-btn { padding:10px 20px; border-radius:20px; border:none; background:var(--accent); color:#fff; font-size:14px; cursor:pointer; font-weight:600; }

/* ============================================================
   四档自适应断点
   ============================================================ */

/* ---- 手机端（<=768px）：单栏 + 底部Tab ---- */
@media (max-width:768px) {
  .side-nav { display:none; }
  .main-area { margin-left:0; }
  .right-panel { display:none; }
  .hamburger { display:none; }
  .tab-bar { display:flex; }
  .header-title { font-size:16px; }
  .city-btn { display:none; }
  .city-pills { display:none; }
  .header .search-input { display:none; }
  .nav-bar { left:16px; right:16px; bottom:80px; }
  .full-panel { width:100vw; border-left:none; }
  .panel-mask { top:0; }
  .page-scroll { padding:16px; }
  .stats-row { grid-template-columns:repeat(2,1fr); gap:10px; }
  .admin-kpis { grid-template-columns:repeat(2,1fr); gap:10px; }
  .admin-charts { grid-template-columns:1fr; }
  .dash-layout, .act-detail, .route-layout, .merch-layout, .profile-layout { flex-direction:column; overflow-y:auto; }
  .dash-side, .act-detail-side, .route-side, .merch-list, .profile-side { width:100%; border-left:none; border-top:1px solid var(--border); padding:16px; }
  .msg-layout { flex-direction:column; }
  .msg-left { width:100%; border-right:none; }
  .msg-right { width:100%; border-left:none; border-top:1px solid var(--border); }
  .msg-chat { height:50vh; }
  .route-map-wrap, .merch-map-wrap { height:40vh; }
  .act-hero { height:180px; min-height:180px; }
  .profile-stats { grid-template-columns:repeat(2,1fr); }
}

/* ---- 桌面端（769-1279px）：左导航 + 常规布局 ---- */
@media (min-width:769px) and (max-width:1279px) {
  .hamburger { display:none; }
  .tab-bar { display:none; }
  .drawer { display:none; }
  .drawer-mask { display:none; }
  :root { --console-right-w:300px; --right-panel-w:300px; }
  .city-pills .city-pill:nth-child(n+6) { display:none; }
  .cards-grid { grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); }
}

/* ---- 中屏控制台（1280-1999px）：16:9 控制台布局 ---- */
@media (min-width:1280px) and (max-width:1999px) {
  .hamburger { display:none; }
  .tab-bar { display:none; }
  .drawer { display:none; }
  .drawer-mask { display:none; }
  :root { --console-right-w:340px; }
  body { overflow:hidden; }
  .page-scroll { padding:26px; }
  .cards-grid { grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); }
  .act-hero { height:340px; }
}

/* ---- 车载大屏 / 带鱼屏（>=2000px）：超宽 21:9 / 32:9 ---- */
@media (min-width:2000px) {
  .hamburger { display:none; }
  .tab-bar { display:none; }
  .drawer { display:none; }
  .drawer-mask { display:none; }
  :root {
    --sidebar-w:240px;
    --console-right-w:420px;
    --right-panel-w:400px;
    --console-gap:20px;
    --header-h:68px;
  }
  .main-area { margin-left:var(--sidebar-w); }
  .header { padding:0 32px; }
  .header-title { font-size:22px; }
  .header .search-input { flex-basis:480px; font-size:15px; padding:10px 20px; }
  .page-scroll { padding:32px; }
  .stats-row { grid-template-columns:repeat(4,1fr); gap:20px; }
  .stat-card { padding:24px; }
  .stat-card .stat-value { font-size:42px; }
  .cards-grid { grid-template-columns:repeat(auto-fill,minmax(360px,1fr)); gap:20px; }
  .act-hero { height:400px; }
  .act-hero-title { font-size:32px; }
  .route-layout, .merch-layout { padding:20px; }
  .msg-chat-header { height:68px; }
  .admin-kpis { grid-template-columns:repeat(4,1fr); gap:20px; }
  .route-entry-thumb { width:88px; height:64px; }
}

/* 桌面端隐藏移动元素兜底 */
@media (min-width:769px) {
  .hamburger { display:none; }
  .tab-bar { display:none; }
  .drawer { display:none; }
  .drawer-mask { display:none; }
}

/* ===== 状态与隐私设置 ===== */
.privacy-form { text-align:left; }
.privacy-input {
  width:100%; padding:11px 14px; border:1px solid var(--border); border-radius:10px;
  background:var(--bg-card); color:var(--text-primary); font-size:14px; outline:none; box-sizing:border-box; margin-bottom:10px;
}
.privacy-input:focus { border-color:var(--accent); }
.privacy-line { display:flex; align-items:center; gap:8px; padding:7px 0; font-size:14px; color:var(--text-secondary); cursor:pointer; }
.privacy-line input { accent-color:var(--accent); width:16px; height:16px; }
.privacy-hint { margin:8px 0 0; font-size:12px; color:var(--text-muted); line-height:1.6; }
.save-tip { margin-top:12px; text-align:center; color:var(--green); font-size:13px; }

/* ===== 亮色模式覆盖 ===== */
html[data-theme="light"] {
  --bg-deep:#f0f2f5; --bg-base:#fff; --bg-card:#fff; --bg-card-2:#f8f9fa;
  --bg-hover:#f0f2f5; --bg-glass:rgba(255,255,255,.85); --bg-input:#fff;
  --text-primary:#1a1a2e; --text-secondary:#6b7280; --text-muted:#9ca3af;
  --accent:#2563eb; --accent-light:#3b82f6; --accent-glow:rgba(37,99,235,.15);
  --border:#e5e7eb; --border-light:#d1d5db;
  --green:#16a34a; --red:#dc2626; --yellow:#d97706;
  --shadow-card:0 2px 8px rgba(0,0,0,.08); --shadow-glow:0 0 20px rgba(37,99,235,.1);
}
html[data-theme="light"] body { background:var(--bg-deep); }
html[data-theme="light"] .side-nav { background:var(--bg-base); border-right-color:var(--border); }
html[data-theme="light"] .header { background:var(--bg-glass); }
html[data-theme="light"] .right-panel, html[data-theme="light"] .bottom-panel { background:var(--bg-card); }
html[data-theme="light"] .leaflet-container { background:#e8eaf0 !important; }

/* 侧边栏底部主题按钮 */
.side-nav-bottom { padding:8px 0 12px; text-align:center; }
.side-theme-btn { background:transparent; border:1px solid var(--border); color:var(--text-secondary); border-radius:10px; width:36px; height:36px; cursor:pointer; font-size:16px; transition:all .2s; margin-bottom:4px; }
.side-theme-btn:hover { border-color:var(--accent); color:var(--accent-light); }

/* 响应式：手机端侧边栏适配 */
@media (max-width:768px) {
  .side-nav { transform:translateX(-100%); transition:transform .3s; z-index:1001; }
  .side-nav.open { transform:translateX(0); }
  .side-nav-bottom { display:flex; flex-direction:row; gap:8px; justify-content:center; padding-bottom:16px; }
}
