:root {
  --paper: #f6f1e7;
  --card: #fffdf8;
  --ink: #2a2521;
  --ink-2: #6b625a;
  --line: #e4dccf;
  --classic: #c8553d;
  --skill: #d98c2b;
  --wonder: #2b3a67;
  --route: #2f7d6d;
  --ok: #2f7d4f;
  --warn: #b7791f;
  --bad: #b23b3b;
  --r: 14px;
  --shadow: 0 6px 24px rgba(42, 37, 33, .14);
  font-family: -apple-system, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;
}
* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; background: var(--paper); color: var(--ink); overflow: hidden; }
button { font: inherit; cursor: pointer; }

/* 顶栏与筛选 */
.topbar {
  position: fixed; top: 0; left: 0; right: 0; z-index: 20; height: 56px;
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 16px; background: rgba(246, 241, 231, .92); backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--line);
}
.brand { display: flex; align-items: center; gap: 10px; }
.brand-mark { font-size: 26px; color: var(--skill); line-height: 1; }
.brand-name { font-weight: 700; font-size: 17px; letter-spacing: 1px; }
.brand-sub { font-size: 11px; color: var(--ink-2); letter-spacing: 2px; }
.chips {
  position: fixed; top: 56px; left: 0; right: 0; z-index: 19; display: flex; gap: 8px;
  padding: 8px 16px; overflow-x: auto; scrollbar-width: none;
}
.chips::-webkit-scrollbar { display: none; }
.chips button {
  flex: none; border: 1px solid var(--line); background: var(--card); color: var(--ink);
  border-radius: 999px; padding: 6px 12px; font-size: 13px; box-shadow: 0 1px 3px rgba(0,0,0,.05);
}
.chips button.on { background: var(--ink); color: #fff; border-color: var(--ink); }

#map { position: fixed !important; top: 0; left: 0; right: 0; bottom: 0; width: 100% !important; height: 100% !important; z-index: 1; }

.map-search {
  position: fixed; top: 108px; left: 16px; z-index: 18; width: min(360px, calc(100% - 88px)); height: 44px;
  display: flex; align-items: center; gap: 8px; padding: 0 12px; border: 1px solid var(--line); border-radius: 14px;
  background: rgba(255,253,248,.96); box-shadow: var(--shadow); backdrop-filter: blur(8px);
}
.map-search > span { color: var(--ink-2); font-size: 22px; transform: rotate(-15deg); }
.map-search input { width: 100%; border: 0; outline: 0; background: transparent; color: var(--ink); font: inherit; font-size: 14px; }
.map-search-results { position: absolute; top: 50px; left: 0; right: 0; display: none; overflow: hidden; border: 1px solid var(--line); border-radius: 14px; background: var(--card); box-shadow: var(--shadow); }
.map-search-results.open { display: block; }
.map-search-results button { width: 100%; display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 11px 12px; border: 0; border-bottom: 1px solid var(--line); background: transparent; text-align: left; color: var(--ink); }
.map-search-results button:last-child { border-bottom: 0; }
.map-search-results button:hover { background: var(--paper); }
.map-search-results b { font-size: 14px; }
.map-search-results span { flex: none; font-size: 12px; color: var(--ink-2); }
.map-search-empty { padding: 13px 12px; color: var(--ink-2); font-size: 13px; }
.map-locate { position: fixed; top: 108px; right: 16px; z-index: 18; width: 44px; height: 44px; border: 1px solid var(--line); border-radius: 14px; background: var(--card); color: #3b6fb6; box-shadow: var(--shadow); font-size: 24px; }
.map-locate.loading { opacity: .55; }
.map-spot-rail { position: fixed; left: 16px; right: 16px; bottom: calc(72px + env(safe-area-inset-bottom)); z-index: 17; display: flex; gap: 8px; overflow-x: auto; padding: 2px 0; scrollbar-width: none; }
.map-spot-rail::-webkit-scrollbar { display: none; }
.map-spot-card { flex: 0 0 auto; max-width: 250px; display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 14px; background: rgba(255,253,248,.96); color: var(--ink); box-shadow: var(--shadow); text-align: left; }
.map-spot-card > span:last-child { min-width: 0; }
.map-spot-card b { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; }
.map-spot-card small { display: block; margin-top: 2px; color: var(--ink-2); font-size: 11px; }
.map-spot-type { width: 7px; height: 30px; flex: none; border-radius: 99px; }
.map-spot-empty { padding: 10px 12px; border-radius: 12px; background: var(--card); color: var(--ink-2); font-size: 13px; }
body.sheet-open .map-search, body.sheet-open .map-locate, body.sheet-open .map-spot-rail { visibility: hidden; pointer-events: none; }

.btn-ghost {
  border: 1px solid var(--line); background: var(--card); border-radius: 999px;
  padding: 6px 14px; font-size: 14px; color: var(--ink);
}
.btn-ghost.dark { background: rgba(255,255,255,.12); color: #fff; border-color: rgba(255,255,255,.3); }
.btn-main {
  border: 0; background: var(--ink); color: #fff; border-radius: 12px;
  padding: 12px 18px; font-size: 15px; font-weight: 600;
}
.btn-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.btn-row .btn-main, .btn-row .btn-ghost { flex: 1 1 auto; text-align: center; }

.status-pill {
  position: fixed; left: 16px; bottom: 16px; z-index: 5; font-size: 12px; color: var(--ink-2);
  background: rgba(255,253,248,.9); border: 1px solid var(--line); border-radius: 999px; padding: 4px 10px;
}

/* 底部卡片（手机）/ 右侧面板（电脑） */
.sheet {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 30; max-height: 60vh;
  background: var(--card); border-radius: 20px 20px 0 0; box-shadow: var(--shadow);
  transform: translateY(105%); transition: transform .28s ease; display: flex; flex-direction: column;
}
.sheet.open { transform: translateY(0); }
.sheet-grip { width: 40px; height: 5px; border-radius: 3px; background: var(--line); margin: 8px auto 0; flex: none; }
.sheet-close {
  position: absolute; right: 12px; top: 8px; width: 32px; height: 32px; border-radius: 50%;
  border: 0; background: var(--paper); font-size: 20px; line-height: 1; color: var(--ink-2); z-index: 2;
}
.sheet-body { overflow-y: auto; padding: 8px 16px 24px; }
.sheet-primary { flex: none; padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); border-top: 1px solid var(--line); background: var(--card); box-shadow: 0 -8px 20px rgba(42,37,33,.06); }
.sheet-primary:empty { display: none; }
.arrival-primary { width: 100%; min-height: 48px; font-size: 16px; }
.arrival-hint { margin-top: 6px; color: var(--ink-2); font-size: 12px; text-align: center; line-height: 1.4; }
@media (min-width: 900px) {
  .sheet {
    left: auto; top: 108px; right: 16px; bottom: 16px; width: 400px; max-height: none;
    border-radius: 20px; transform: translateX(120%);
  }
  .sheet.open { transform: translateX(0); }
  .sheet-grip { display: none; }
  .sheet-body { padding-top: 16px; }
}

/* 机位卡片内容 */
.cover {
  position: relative; width: 100%; aspect-ratio: 4 / 3; border-radius: var(--r); overflow: hidden;
  background: #ddd; margin-top: 8px;
}
.cover img, .cover svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.tag {
  display: inline-block; font-size: 12px; padding: 2px 8px; border-radius: 6px; color: #fff; margin-right: 6px;
}
.tag.classic { background: var(--classic); } .tag.skill { background: var(--skill); }
.tag.wonder { background: var(--wonder); } .tag.route { background: var(--route); }
.tag.soft { background: var(--paper); color: var(--ink-2); border: 1px solid var(--line); }
h2 { font-size: 20px; margin: 12px 0 4px; }
h3 { font-size: 14px; margin: 18px 0 8px; color: var(--ink-2); font-weight: 600; letter-spacing: 1px; }
.muted { color: var(--ink-2); font-size: 13px; }
p { line-height: 1.6; margin: 6px 0; }

.cond {
  display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; border-radius: 12px;
  margin-top: 12px; font-size: 14px; line-height: 1.5;
}
.cond .dot { width: 10px; height: 10px; border-radius: 50%; margin-top: 6px; flex: none; }
.cond.ok { background: #e8f2ea; } .cond.ok .dot { background: var(--ok); }
.cond.wait { background: #fbf1dc; } .cond.wait .dot { background: var(--warn); }
.cond.bad { background: #f7e3e0; } .cond.bad .dot { background: var(--bad); }

.arrival-progress { display: grid; grid-template-columns: auto 1fr auto 1fr auto; align-items: center; gap: 6px; margin-top: 14px; color: var(--ink-2); font-size: 11px; }
.arrival-progress span { display: flex; align-items: center; gap: 4px; white-space: nowrap; }
.arrival-progress i { width: 20px; height: 20px; display: grid; place-items: center; border: 1px solid var(--line); border-radius: 50%; background: var(--paper); font-style: normal; }
.arrival-progress span.done { color: var(--ok); font-weight: 700; }
.arrival-progress span.done i { border-color: var(--ok); background: var(--ok); color: #fff; }
.arrival-progress b { height: 1px; background: var(--line); }
.arrival-progress.compact { grid-template-columns: auto 1fr auto; }

.tech { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.tech div { background: var(--paper); border-radius: 10px; padding: 8px 10px; font-size: 13px; line-height: 1.45; }
.tech b { display: block; font-size: 11px; color: var(--ink-2); font-weight: 500; margin-bottom: 2px; }

.steps { list-style: none; padding: 0; margin: 0; counter-reset: s; }
.steps li { position: relative; padding: 6px 0 6px 32px; font-size: 14px; line-height: 1.5; counter-increment: s; }
.steps li::before {
  content: counter(s); position: absolute; left: 0; top: 6px; width: 22px; height: 22px; border-radius: 50%;
  background: var(--ink); color: #fff; font-size: 12px; display: grid; place-items: center;
}
.kv { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; padding: 6px 0; border-bottom: 1px dashed var(--line); }
.kv span:first-child { color: var(--ink-2); flex: none; }

.timeline { position: relative; margin: 8px 0 0; padding-left: 18px; border-left: 2px solid var(--line); }
.timeline .ti { position: relative; padding: 4px 0 12px 8px; }
.timeline .ti::before {
  content: ""; position: absolute; left: -25px; top: 8px; width: 12px; height: 12px; border-radius: 50%;
  background: var(--card); border: 3px solid var(--route);
}
.timeline .time { font-weight: 700; font-size: 15px; }
.cand { padding: 10px 12px; border: 1px solid var(--line); border-radius: 12px; margin-bottom: 8px; cursor: pointer; }
.cand.on { border-color: var(--wonder); background: #eef0f8; }
.cand .big { font-weight: 700; font-size: 16px; }

/* 路书全屏 */
.guide {
  position: fixed; inset: 0; z-index: 50; background: #151311; color: #fff;
  display: none; flex-direction: column;
}
.guide.open { display: flex; }
.guide-top { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; }
.guide-progress { display: flex; gap: 4px; }
.guide-progress i { width: 18px; height: 4px; border-radius: 2px; background: rgba(255,255,255,.25); }
.guide-progress i.on { background: #fff; }
.guide-stage { flex: 1; display: flex; flex-direction: column; justify-content: center; padding: 0 16px; overflow-y: auto; }
.guide-photo { width: 100%; max-width: 560px; margin: 0 auto; aspect-ratio: 4 / 3; border-radius: 16px; overflow: hidden; background: #2a2622; }
.guide-photo svg, .guide-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.guide-text { max-width: 560px; margin: 18px auto 0; font-size: 22px; line-height: 1.5; font-weight: 600; }
.guide-sub { max-width: 560px; margin: 8px auto 0; font-size: 14px; color: rgba(255,255,255,.65); line-height: 1.6; }
.guide-bottom { display: flex; gap: 10px; padding: 14px 16px calc(14px + env(safe-area-inset-bottom)); }
.guide-bottom .btn-main { flex: 1; background: #fff; color: var(--ink); }

/* 构图指引：指南针 */
.compass { position: relative; width: 200px; height: 200px; margin: 0 auto; }
.compass .ring { position: absolute; inset: 0; border-radius: 50%; border: 2px solid rgba(255,255,255,.3); }
.compass .target { position: absolute; left: 50%; top: 0; width: 4px; height: 50%; margin-left: -2px; transform-origin: 50% 100%; }
.compass .target::before { content: ""; position: absolute; top: 0; left: -8px; border: 10px solid transparent; border-bottom: 16px solid #f0b458; border-top: 0; }
.compass .me { position: absolute; left: 50%; top: 18%; bottom: 50%; width: 2px; margin-left: -1px; background: rgba(255,255,255,.8); }
.compass .deg { position: absolute; inset: 0; display: grid; place-items: center; font-size: 28px; font-weight: 700; }

/* 演示字幕 */
.caption {
  position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%) translateY(150%); z-index: 60;
  width: min(640px, calc(100% - 32px)); background: rgba(21, 19, 17, .92); color: #fff; border-radius: 16px;
  padding: 14px 16px 12px; transition: transform .3s ease, opacity .3s; opacity: 0; visibility: hidden;
}
.caption.open { transform: translateX(-50%) translateY(0); opacity: 1; visibility: visible; }
.caption-step { font-size: 12px; color: #f0b458; letter-spacing: 1px; }
.caption-text { font-size: 16px; line-height: 1.55; margin-top: 4px; }
.caption-stop { position: absolute; right: 10px; top: 8px; background: none; border: 0; color: rgba(255,255,255,.6); font-size: 12px; }
.sheet.open ~ .caption { bottom: calc(60vh + 12px); }
@media (min-width: 900px) { .sheet.open ~ .caption { bottom: 24px; transform: translateX(calc(-50% - 210px)); } }

.toast {
  position: fixed; left: 50%; top: 110px; transform: translateX(-50%); z-index: 70; background: var(--ink); color: #fff;
  padding: 8px 14px; border-radius: 999px; font-size: 13px; opacity: 0; pointer-events: none; transition: opacity .2s;
  max-width: calc(100% - 32px);
}
.toast.show { opacity: 1; }

/* 演示菜单 */
.demo-item { display: flex; gap: 12px; align-items: center; padding: 12px; border: 1px solid var(--line); border-radius: 14px; margin-bottom: 10px; cursor: pointer; background: var(--card); }
.demo-item:hover { border-color: var(--ink-2); }
.demo-no { width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; color: #fff; font-weight: 700; flex: none; }

/* 离线预览地图 */
.offline-map {
  background: #efe9df;
  background-image: linear-gradient(rgba(0,0,0,.04) 1px, transparent 1px), linear-gradient(90deg, rgba(0,0,0,.04) 1px, transparent 1px);
  background-size: 40px 40px; touch-action: none; overflow: hidden;
}
.om-svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.om-markers { position: absolute; inset: 0; }
.om-mk { position: absolute; transform: translate(-50%, -50%); cursor: pointer; }
.om-mk svg { width: 100%; height: 100%; display: block; }
.om-note { position: absolute; right: 12px; bottom: 16px; font-size: 12px; color: var(--ink-2); background: rgba(255,253,248,.9); padding: 4px 10px; border-radius: 999px; border: 1px solid var(--line); }

body.guiding .caption.open { bottom: calc(90px + env(safe-area-inset-bottom)) !important; transform: translateX(-50%) !important; }

/* 顶栏按钮 */
.top-actions { display: flex; gap: 8px; }
@media (max-width: 420px) { .top-actions .btn-ghost { padding: 6px 10px; font-size: 13px; } }

/* 名场面信息 */
.scene { margin-top: 12px; border-left: 3px solid var(--classic); background: #fbefe9; border-radius: 0 12px 12px 0; padding: 10px 12px; }
.scene-src { font-size: 12px; color: var(--classic); font-weight: 600; letter-spacing: 1px; }
.scene-moment { font-size: 15px; margin-top: 4px; }
.scene-line { font-size: 16px; font-weight: 700; margin-top: 4px; }
.scene-place { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; margin-top: 8px; font-size: 13px; }
.scene-place span { color: var(--ink-2); }

/* 表单 */
.form { margin-top: 8px; }
.field { display: block; margin-top: 12px; font-size: 13px; }
.field > span { display: block; color: var(--ink-2); margin-bottom: 6px; }
.field input:not([type=range]), .field select, .field textarea {
  width: 100%; font: inherit; font-size: 15px; padding: 9px 11px; border: 1px solid var(--line); border-radius: 10px; background: #fff; color: var(--ink); margin-bottom: 6px;
}
.field input[type=range] { width: calc(100% - 50px); vertical-align: middle; accent-color: var(--skill); }
details.more { margin-top: 12px; border: 1px dashed var(--line); border-radius: 12px; padding: 8px 12px; }
details.more summary { cursor: pointer; font-size: 14px; color: var(--ink-2); }
.upload-drop { display: grid; place-items: center; min-height: 150px; margin-top: 12px; border: 2px dashed var(--line); border-radius: 14px; background: var(--paper); color: var(--ink-2); cursor: pointer; overflow: hidden; }
.upload-drop img { width: 100%; display: block; }
.seg { display: flex; gap: 8px; }
.seg button { flex: 1; border: 1px solid var(--line); background: var(--card); border-radius: 10px; padding: 10px; font-size: 14px; color: var(--ink); }
.seg button.on { background: var(--ink); color: #fff; border-color: var(--ink); }
.ck-photo img { width: 100%; border-radius: 14px; margin-top: 10px; display: block; }
.cmp-preview { margin-top: 12px; border-radius: 12px; overflow: hidden; background: var(--paper); min-height: 120px; }
.cmp-preview img { width: 100%; display: block; }
.mine-item { display: flex; gap: 12px; align-items: center; padding: 10px 0; border-bottom: 1px dashed var(--line); cursor: pointer; }
.mine-item img, .mine-ph { width: 64px; height: 64px; border-radius: 10px; object-fit: cover; flex: none; background: var(--paper); }

/* 相机 */
.cam { position: fixed; inset: 0; z-index: 80; background: #000; display: none; }
.cam.open { display: block; }
.cam video, .cam #camRef { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.cam #camRef { pointer-events: none; }
.cam-hint { position: absolute; left: 0; right: 0; top: 42%; text-align: center; color: #fff; font-size: 15px; line-height: 1.6; padding: 0 24px; }
.cam-top { position: absolute; top: 0; left: 0; right: 0; display: flex; gap: 12px; align-items: center; padding: 14px 16px; background: linear-gradient(rgba(0,0,0,.55), transparent); }
.cam-tip { color: #fff; font-size: 14px; line-height: 1.4; }
.cam-bottom { position: absolute; left: 0; right: 0; bottom: 0; padding: 16px 16px calc(24px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; align-items: center; gap: 14px; background: linear-gradient(transparent, rgba(0,0,0,.6)); }
.cam-alpha { color: #fff; font-size: 13px; display: flex; gap: 10px; align-items: center; }
.cam-alpha input { accent-color: #D98C2B; }
.cam-shot { width: 74px; height: 74px; border-radius: 50%; border: 5px solid #fff; background: #D98C2B; }

.btn-acc { background: var(--ink); color: #fff; border-color: var(--ink); max-width: 7em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
button:disabled { cursor: wait; }
.kv a { color: var(--ink); text-decoration: underline; text-decoration-color: var(--skill); text-underline-offset: 3px; }
#acMsg { margin-top: 4px; }
@media (max-width: 420px) { .brand-sub { display: none; } }

/* ================= 页面层 ================= */
.view { position: fixed; inset: 0; z-index: 26; overflow-y: auto; background: var(--paper); display: none; -webkit-overflow-scrolling: touch; }
.view.open { display: block; }
.view > * { max-width: 760px; margin-left: auto; margin-right: auto; }
.back { width: 36px; height: 36px; border-radius: 50%; border: 1px solid var(--line); background: var(--card); font-size: 24px; line-height: 1; color: var(--ink); flex: none; display: grid; place-items: center; padding-bottom: 3px; }
.topbar .back { margin-right: 2px; }
.link { background: none; border: 0; color: var(--ink-2); font-size: 14px; padding: 4px 0; text-decoration: underline; text-decoration-color: var(--skill); text-underline-offset: 3px; }
.pad { padding: 16px; }
@media (max-width: 480px) { .top-actions .lbl { display: none; } .top-actions .btn-ghost { padding: 6px 11px; } }

/* 首页 */
.h-top { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px 0; }
.h-top .brand-name { font-size: 18px; }
.hero { padding: 28px 20px 8px; }
.eyebrow { font-size: 12px; letter-spacing: 4px; color: var(--skill); font-weight: 700; margin: 0 0 10px; }
.hero h1 { font-size: clamp(34px, 9vw, 52px); line-height: 1.12; margin: 0 0 16px; letter-spacing: 1px; font-weight: 800; }
.lead { font-size: 16px; line-height: 1.75; color: var(--ink-2); margin: 0 0 20px; }
.lead b { color: var(--ink); }
.hero-art { width: 100%; height: auto; display: block; border-radius: 22px; box-shadow: 0 20px 50px -30px rgba(42,37,33,.5); }
.hero-cta { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px; }
.hero-cta .btn-main { flex: 1 1 200px; padding: 15px 18px; font-size: 16px; border-radius: 14px; }
.hero-cta .btn-ghost { flex: 1 1 140px; padding: 14px 16px; font-size: 15px; border-radius: 14px; }
.pillars { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 28px 20px 8px; }
@media (max-width: 640px) { .pillars { grid-template-columns: 1fr; } }
.pillar { position: relative; background: var(--card); border: 1px solid var(--line); border-radius: 18px; padding: 16px 16px 16px 20px; overflow: hidden; }
.pillar::before { content: ""; position: absolute; left: 0; top: 16px; bottom: 16px; width: 4px; border-radius: 0 4px 4px 0; background: var(--c); }
.pillar .pk { font-size: 12px; color: var(--c); font-weight: 700; letter-spacing: 2px; }
.pillar b { display: block; font-size: 19px; margin: 4px 0 6px; }
.pillar p { font-size: 14px; color: var(--ink-2); margin: 0; line-height: 1.65; }
.sec { padding: 28px 20px 4px; }
.sec-h { display: flex; align-items: baseline; justify-content: space-between; }
.sec h2 { font-size: 22px; margin: 0 0 14px; }
.cat-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
.cat-grid.wide { padding: 0 20px 24px; }
@media (min-width: 640px) { .cat-grid { grid-template-columns: repeat(3, 1fr); } }
.cat { position: relative; text-align: left; background: var(--card); border: 1px solid var(--line); border-radius: 18px; padding: 16px 14px 14px; min-height: 104px; overflow: hidden; }
.cat::before { content: ""; position: absolute; right: -26px; top: -26px; width: 84px; height: 84px; border-radius: 50%; background: var(--c); opacity: .14; }
.cat b { display: block; font-size: 16px; margin-bottom: 6px; }
.cat span { font-size: 12.5px; color: var(--ink-2); line-height: 1.5; display: block; }
.cat .cat-n { position: absolute; right: 12px; top: 10px; font-size: 13px; font-weight: 700; color: var(--c); }
.strip { display: flex; gap: 12px; overflow-x: auto; padding-bottom: 6px; scrollbar-width: none; }
.strip::-webkit-scrollbar { display: none; }
.card { flex: none; width: 160px; text-align: left; background: none; border: 0; padding: 0; }
.card-img { width: 160px; height: 200px; border-radius: 16px; overflow: hidden; background: var(--line); }
.card-img img, .card-img svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.card b { display: block; font-size: 14px; margin-top: 8px; line-height: 1.4; }
.card span { font-size: 12px; color: var(--ink-2); }
.how ol { list-style: none; padding: 0; margin: 0; counter-reset: h; display: grid; gap: 10px; }
.how li { counter-increment: h; position: relative; padding: 14px 14px 14px 56px; background: var(--card); border: 1px solid var(--line); border-radius: 16px; font-size: 14px; color: var(--ink-2); line-height: 1.6; }
.how li::before { content: counter(h); position: absolute; left: 14px; top: 14px; width: 28px; height: 28px; border-radius: 50%; background: var(--ink); color: #fff; font-weight: 700; display: grid; place-items: center; font-size: 14px; }
.how li b { display: block; color: var(--ink); font-size: 15px; }
.motto { margin: 28px 20px 0; padding: 26px 20px; border-radius: 22px; background: var(--ink); color: #fff; }
.motto p { margin: 0 0 6px; font-size: 20px; font-weight: 700; line-height: 1.5; }
.motto .muted { color: rgba(255,255,255,.65); font-size: 14px; font-weight: 400; }
.motto .btn-main { background: var(--skill); }
.motto .btn-ghost { background: transparent; color: #fff; border-color: rgba(255,255,255,.35); }
.h-foot { font-size: 12px; color: var(--ink-2); text-align: center; padding: 22px 20px 36px; }

/* 列表页 */
.l-top { position: sticky; top: 0; z-index: 2; display: flex; gap: 12px; align-items: center; padding: 14px 20px; background: rgba(246,241,231,.94); backdrop-filter: blur(8px); border-bottom: 1px solid var(--line); }
.l-top h1 { font-size: 20px; margin: 0; }
.l-sub { margin: 2px 0 0; font-size: 13px; color: var(--ink-2); }
.tabs { display: flex; gap: 8px; overflow-x: auto; padding: 12px 20px; scrollbar-width: none; }
.tabs::-webkit-scrollbar { display: none; }
.tabs button { flex: none; border: 1px solid var(--line); background: var(--card); border-radius: 999px; padding: 6px 12px; font-size: 13px; }
.tabs button.on { background: var(--ink); color: #fff; border-color: var(--ink); }
.rows { padding: 4px 20px 32px; display: grid; gap: 10px; }
.row { display: flex; gap: 12px; align-items: center; text-align: left; background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 10px; width: 100%; }
.row-img { width: 76px; height: 76px; border-radius: 12px; overflow: hidden; flex: none; background: var(--line); }
.row-img img, .row-img svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.row-t { flex: 1; min-width: 0; }
.row-t b { display: block; font-size: 15px; line-height: 1.4; }
.row-t span { display: block; font-size: 12.5px; color: var(--ink-2); line-height: 1.5; margin-top: 2px; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.row em { font-style: normal; font-weight: 700; font-size: 13px; color: var(--skill); flex: none; }
.row i { font-style: normal; color: var(--ink-2); font-size: 20px; flex: none; }

/* 个人主页 */
.p-body { padding: 16px 20px 40px; }
.p-card { display: flex; gap: 16px; align-items: center; padding: 18px; border-radius: 22px; background: linear-gradient(135deg, #F3D9A8, #F6F1E7 70%); border: 1px solid var(--line); }
.avatar { width: 68px; height: 68px; border-radius: 50%; background: var(--ink); color: #fff; font-size: 28px; font-weight: 800; display: grid; place-items: center; flex: none; box-shadow: 0 0 0 4px #fff; }
.p-id h2 { margin: 0; font-size: 22px; }
.p-id p { margin: 2px 0 0; font-size: 13px; }
.p-id a { color: var(--ink); font-size: 14px; }
.stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 12px; }
.stats div { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 12px; text-align: center; }
.stats b { display: block; font-size: 24px; }
.stats span { font-size: 12px; color: var(--ink-2); }
.grid2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
@media (min-width: 640px) { .grid2 { grid-template-columns: repeat(3, 1fr); } }
.tile { background: var(--card); border: 1px solid var(--line); border-radius: 16px; overflow: hidden; position: relative; }
.tile-img { display: block; width: 100%; aspect-ratio: 4 / 5; border: 0; padding: 0; background: var(--line); }
.tile-img img, .tile-img svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.tile-t { padding: 8px 10px 10px; }
.tile-t b { display: block; font-size: 14px; line-height: 1.4; }
.tile-t span { font-size: 12px; color: var(--ink-2); }
.tile-share { position: absolute; right: 8px; top: 8px; border: 0; border-radius: 999px; background: rgba(21,19,17,.72); color: #fff; font-size: 12px; padding: 5px 10px; }
.p-empty { padding: 24px 20px; text-align: center; }
.p-empty .hero-art { margin-bottom: 18px; }
.p-empty .btn-row { justify-content: center; }
.p-foot { margin-top: 24px; }
body:not(.on-map) .caption { display: none; }

/* ================= 底部四标签 ================= */
.tabbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 28; display: grid; grid-template-columns: repeat(4, 1fr);
  height: calc(60px + env(safe-area-inset-bottom)); padding-bottom: env(safe-area-inset-bottom);
  background: rgba(255,253,248,.96); backdrop-filter: blur(10px); border-top: 1px solid var(--line); }
.tabbar button { border: 0; background: none; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; color: var(--ink-2); font-size: 11px; padding: 0; }
.tabbar svg { width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linejoin: round; stroke-linecap: round; }
.tabbar svg .fill { fill: currentColor; stroke: none; opacity: .0; }
.tabbar button.on { color: var(--ink); font-weight: 700; }
.tabbar button.on svg { stroke-width: 2.3; }
.tabbar button.on svg .fill { opacity: 1; fill: var(--skill); }
.tab-plus i { font-style: normal; width: 40px; height: 28px; border-radius: 10px; background: var(--ink); color: #fff; display: grid; place-items: center; font-size: 20px; line-height: 1; }
body.guiding .tabbar { display: none; }
@media (min-width: 900px) {
  .tabbar { left: 50%; right: auto; bottom: 16px; width: 380px; transform: translateX(-50%); border: 1px solid var(--line); border-radius: 20px; height: 62px; padding: 0; box-shadow: var(--shadow); }
  body.on-map .tabbar { left: calc(50% - 210px); }
  .sheet { bottom: 16px; }
}
.view { padding-bottom: calc(76px + env(safe-area-inset-bottom)); }
.status-pill { bottom: calc(70px + env(safe-area-inset-bottom)); }
.caption { bottom: calc(72px + env(safe-area-inset-bottom)); }
@media (min-width: 900px) { .caption { bottom: 92px; } .sheet.open ~ .caption { bottom: 92px; } .status-pill { bottom: 16px; } }
#btnUpload, #btnAccount { display: none; }

/* ================= 首页（新版） ================= */
.hero { padding: 22px 20px 4px; }
.hero h1 { font-size: clamp(32px, 8.4vw, 50px); }
.now { margin-top: 18px; background: var(--ink); color: #fff; border-radius: 22px; padding: 18px 18px 14px; position: relative; overflow: hidden; }
.now::before { content: ""; position: absolute; right: -60px; top: -60px; width: 200px; height: 200px; border-radius: 50%; background: radial-gradient(circle, rgba(217,140,43,.55), rgba(217,140,43,0) 70%); }
.now-h { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; position: relative; }
.now-h b { font-size: 13px; letter-spacing: 3px; color: #f0b458; }
.now-h span { font-size: 12px; color: rgba(255,255,255,.6); }
.now-time { position: relative; font-size: 22px; font-weight: 800; margin: 8px 0 2px; line-height: 1.35; }
.now-sub { position: relative; font-size: 13px; color: rgba(255,255,255,.72); margin: 0 0 12px; line-height: 1.6; }
.now-list { position: relative; display: grid; gap: 8px; }
.now-item { display: flex; align-items: center; gap: 10px; background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.12); border-radius: 14px; padding: 8px; color: #fff; text-align: left; width: 100%; }
.now-item .ni-img { width: 44px; height: 44px; border-radius: 10px; overflow: hidden; flex: none; background: #444; }
.now-item .ni-img img, .now-item .ni-img svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.now-item .ni-t { flex: 1; min-width: 0; }
.now-item .ni-t b { display: block; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.now-item .ni-t span { font-size: 12px; color: rgba(255,255,255,.62); }
.now-item em { font-style: normal; font-size: 12px; color: #f0b458; flex: none; }
.now .btn-row { position: relative; margin-top: 12px; }
.now .btn-main { background: var(--skill); }
.now .btn-ghost { background: transparent; color: #fff; border-color: rgba(255,255,255,.3); }
.badge { display: inline-block; font-size: 11px; font-weight: 700; border-radius: 999px; padding: 2px 8px; margin-right: 6px; vertical-align: 1px; }
.badge.ok { background: rgba(47,125,79,.14); color: var(--ok); }
.badge.wait { background: rgba(183,121,31,.14); color: var(--warn); }
.badge.bad { background: rgba(107,98,90,.14); color: var(--ink-2); }
.now .badge.ok { background: rgba(120,200,150,.2); color: #9fe0b5; }
.now .badge.wait { background: rgba(240,180,88,.2); color: #f0b458; }
.now .badge.bad { background: rgba(255,255,255,.12); color: rgba(255,255,255,.6); }

.plays { display: grid; gap: 10px; }
.play { position: relative; display: flex; gap: 14px; align-items: center; text-align: left; width: 100%; background: var(--card); border: 1px solid var(--line); border-radius: 20px; padding: 16px; overflow: hidden; }
.play::after { content: "›"; font-size: 22px; color: var(--ink-2); margin-left: auto; }
.play-ic { width: 54px; height: 54px; border-radius: 16px; background: var(--c); flex: none; display: grid; place-items: center; }
.play-ic svg { width: 30px; height: 30px; fill: none; stroke: #fff; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.play-t b { display: block; font-size: 18px; }
.play-t b small { font-size: 12px; color: var(--c); font-weight: 700; margin-left: 6px; }
.play-t span { display: block; font-size: 13px; color: var(--ink-2); line-height: 1.55; margin-top: 3px; }
.play-t i { display: block; font-style: normal; font-size: 12px; color: var(--ink-2); opacity: .8; margin-top: 4px; }
@media (min-width: 640px) { .plays { grid-template-columns: repeat(3, 1fr); } .play { flex-direction: column; align-items: flex-start; } .play::after { position: absolute; right: 16px; top: 16px; } }

.topics { display: flex; gap: 12px; overflow-x: auto; scrollbar-width: none; margin: 0 -20px; padding: 0 20px 6px; scroll-snap-type: x mandatory; }
.topics::-webkit-scrollbar { display: none; }
.topic { flex: none; width: 78%; max-width: 320px; aspect-ratio: 4 / 5; border-radius: 22px; border: 0; padding: 0; position: relative; overflow: hidden; text-align: left; color: #fff; scroll-snap-align: start; background: var(--c); }
.topic svg.t-art { position: absolute; inset: 0; width: 100%; height: 100%; }
.topic .t-txt { position: absolute; left: 0; right: 0; bottom: 0; padding: 18px; background: linear-gradient(transparent, rgba(0,0,0,.45)); }
.topic .t-n { font-size: 12px; letter-spacing: 2px; opacity: .85; }
.topic b { display: block; font-size: 24px; margin: 4px 0 6px; }
.topic span { font-size: 13px; opacity: .9; line-height: 1.55; display: block; }

.route-card { display: block; width: 100%; text-align: left; background: var(--card); border: 1px solid var(--line); border-radius: 20px; padding: 16px; margin-bottom: 10px; }
.route-card b { display: block; font-size: 16px; line-height: 1.45; }
.route-card span { display: block; font-size: 13px; color: var(--ink-2); line-height: 1.55; margin-top: 4px; }
.route-dots { display: flex; align-items: center; gap: 0; margin-top: 12px; }
.route-dots i { width: 10px; height: 10px; border-radius: 50%; background: var(--route); flex: none; }
.route-dots s { flex: 1; height: 2px; background: repeating-linear-gradient(90deg, var(--route) 0 5px, transparent 5px 9px); }
.route-names { display: flex; justify-content: space-between; font-size: 12px; color: var(--ink-2); margin-top: 6px; gap: 6px; }

.idea { margin: 28px 20px 0; padding: 26px 20px 22px; border-radius: 22px; background: var(--ink); color: #fff; }
.idea .eyebrow { color: #f0b458; }
.idea h2 { font-size: 22px; line-height: 1.5; margin: 0 0 8px; }
.idea > p { color: rgba(255,255,255,.7); font-size: 14px; line-height: 1.7; margin: 0 0 16px; }
.idea-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.idea-3 div { border: 1px solid rgba(255,255,255,.16); border-radius: 14px; padding: 12px 10px; }
.idea-3 em { font-style: normal; font-size: 11px; color: #f0b458; letter-spacing: 1px; }
.idea-3 b { display: block; font-size: 15px; margin-top: 4px; }
.idea-3 span { display: block; font-size: 12px; color: rgba(255,255,255,.62); line-height: 1.5; margin-top: 4px; }
.idea .btn-main { background: var(--skill); }
.idea .btn-ghost { background: transparent; color: #fff; border-color: rgba(255,255,255,.35); }

/* 此刻 · 我身边 列表页 */
.now-bar { margin: 12px 20px 4px; padding: 14px 16px; border-radius: 18px; background: var(--ink); color: #fff; }
.now-bar b { font-size: 17px; display: block; }
.now-bar span { font-size: 13px; color: rgba(255,255,255,.7); line-height: 1.6; }
.grp { font-size: 14px; font-weight: 700; padding: 14px 20px 2px; margin: 0; color: var(--ink); }
.grp small { font-weight: 400; color: var(--ink-2); margin-left: 6px; }
@media (max-width: 899px) {
  .sheet { bottom: 0; max-height: 86vh; box-shadow: 0 -6px 24px rgba(42,37,33,.14); }
  .sheet .cover { aspect-ratio: 16 / 9; }
  .sheet.open ~ .caption { bottom: calc(86vh + 12px); }
  body.sheet-open .tabbar { display: none; }
  body.sheet-open .status-pill { visibility: hidden; }
  .status-pill { display: none; }
}
@media (max-width: 899px) { .sheet { transform: translateY(calc(100% + 90px)); } .sheet.open { transform: translateY(0); } }
.sheet:not(.open) { pointer-events: none; }
#vProfile .l-top .back { display: none; }

/* ================= 五标签版（9/30） ================= */
.tabbar { grid-template-columns: repeat(5, 1fr); }
@media (min-width: 900px) { .tabbar { width: 440px; } body.on-map .tabbar { left: calc(50% - 210px); } }
.fit { height: 100%; display: flex; flex-direction: column; overflow: hidden; }
.view.open { overflow: hidden; }
#vList.open { overflow-y: auto; }
.search { display: flex; align-items: center; gap: 8px; background: var(--card); border: 1px solid var(--line); border-radius: 999px; padding: 0 14px; height: 40px; }
.search svg { width: 18px; height: 18px; fill: none; stroke: var(--ink-2); stroke-width: 2; flex: none; }
.search input { border: 0; background: none; outline: none; font: inherit; font-size: 15px; flex: 1; min-width: 0; color: var(--ink); }
.topbar { gap: 10px; }
.topbar .search { flex: 1; }
.status-pill { top: 112px; bottom: auto !important; left: 16px; }

/* 首页 */
.home { padding: 14px 16px 10px; gap: 12px; }
.hm-top { display: flex; align-items: center; gap: 12px; flex: none; }
.hm-name { font-size: 22px; font-weight: 800; letter-spacing: 2px; line-height: 1.2; }
.hm-slogan { font-size: 13px; color: var(--ink-2); letter-spacing: 2px; }
.hm-search { flex: none; height: 44px; }
.carousel { flex: 1; min-height: 0; display: flex; overflow-x: auto; scroll-snap-type: x mandatory; gap: 12px; scrollbar-width: none; border-radius: 24px; }
.carousel::-webkit-scrollbar { display: none; }
.slide { position: relative; flex: none; width: 100%; height: 100%; scroll-snap-align: center; border-radius: 24px; overflow: hidden; background: #3a332d; cursor: pointer; }
.slide-img, .slide-img img, .slide-img svg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.slide-shade { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.15) 0%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 45%, rgba(0,0,0,.72) 100%); }
.slide-tag { position: absolute; left: 16px; top: 16px; color: #fff; font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: 999px; }
.slide-txt { position: absolute; left: 0; right: 0; bottom: 0; padding: 18px; color: #fff; }
.slide-txt b { display: block; font-size: 24px; line-height: 1.3; }
.slide-txt > span { display: block; font-size: 13px; opacity: .8; margin-top: 4px; }
.slide-act { display: flex; align-items: center; gap: 10px; margin-top: 14px; }
.slide-act .btn-main { background: var(--skill); padding: 12px 22px; border-radius: 999px; }
.slide-act .rx-row { margin: 0 0 0 auto; }
.dots { display: flex; justify-content: center; gap: 6px; flex: none; }
.dots i { width: 6px; height: 6px; border-radius: 3px; background: var(--line); transition: width .2s; }
.dots i.on { width: 18px; background: var(--ink); }

/* 点赞、收藏 */
.rx-row { display: flex; gap: 8px; margin: 8px 0 2px; }
.rx { display: inline-flex; align-items: center; gap: 5px; border: 1px solid var(--line); background: var(--card); border-radius: 999px; padding: 6px 12px; font-size: 13px; color: var(--ink); }
.rx i { font-style: normal; font-size: 16px; line-height: 1; }
.rx.on { border-color: #e0a8a0; color: var(--classic); }
.rx.fav.on { border-color: #ecc98f; color: var(--skill); }
.rx.dark { background: rgba(255,255,255,.16); border-color: rgba(255,255,255,.35); color: #fff; backdrop-filter: blur(6px); }
.rx.dark.on { background: rgba(255,255,255,.95); color: var(--classic); }
.rx.dark.fav.on { color: var(--skill); }
.rx-star { border: 0; background: none; font-size: 22px; line-height: 1; color: var(--ink-2); padding: 4px; }
.rx-star.on { color: var(--skill); }

/* 地图页底部：我身边 */
.near { position: fixed; left: 0; right: 0; bottom: calc(60px + env(safe-area-inset-bottom)); z-index: 6; display: none; padding: 8px 0 10px; background: linear-gradient(transparent, rgba(246,241,231,.96) 30%); }
body.on-map .near { display: block; }
body.guiding .near { display: none; }
.near-h { display: flex; align-items: baseline; gap: 8px; padding: 0 16px 6px; }
.near-h b { font-size: 15px; flex: none; }
.near-h span { font-size: 12px; color: var(--ink-2); flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.near-h .link { font-size: 12px; flex: none; }
.near-list { display: flex; gap: 10px; overflow-x: auto; padding: 0 16px; scrollbar-width: none; }
.near-list::-webkit-scrollbar { display: none; }
.near-card, .near-empty { flex: none; width: 236px; display: flex; gap: 10px; align-items: center; background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 8px; box-shadow: 0 4px 14px rgba(42,37,33,.1); cursor: pointer; text-align: left; }
.near-empty { flex-direction: column; align-items: flex-start; justify-content: center; width: 170px; border-style: dashed; }
.near-empty b { font-size: 14px; } .near-empty span { font-size: 12px; color: var(--skill); }
.nc-img { width: 52px; height: 52px; border-radius: 12px; overflow: hidden; flex: none; background: var(--line); }
.nc-img img, .nc-img svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.nc-t { flex: 1; min-width: 0; }
.nc-t b { display: block; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nc-t span { font-size: 12px; color: var(--ink-2); }
.nc-t .badge { font-style: normal; }
@media (min-width: 900px) { .near { right: 432px; bottom: 88px; background: none; } }

/* 专题 */
.pg-h { flex: none; padding: 18px 20px 8px; }
.pg-h h1 { margin: 0; font-size: 26px; }
.pg-h p { margin: 4px 0 0; color: var(--ink-2); font-size: 13px; }
.topic-page .tp-grid { flex: 1; min-height: 0; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 10px; padding: 8px 16px; }
.tp-card { position: relative; border: 0; border-radius: 20px; overflow: hidden; color: #fff; text-align: left; padding: 0; background: var(--c); }
.tp-card .t-art { position: absolute; inset: 0; width: 100%; height: 100%; }
.tp-txt { position: absolute; left: 0; right: 0; bottom: 0; padding: 12px; background: linear-gradient(transparent, rgba(0,0,0,.42)); }
.tp-txt em { font-style: normal; font-size: 11px; opacity: .85; letter-spacing: 1px; }
.tp-txt b { display: block; font-size: 18px; margin: 2px 0 3px; }
.tp-txt span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: 12px; opacity: .9; line-height: 1.45; }
.tp-more { flex: none; display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 4px 16px 12px; }
.tp-more button { position: relative; text-align: left; background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 12px 26px 12px 14px; }
.tp-more b { display: block; font-size: 15px; } .tp-more span { font-size: 12px; color: var(--ink-2); }
.tp-more i { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); font-style: normal; color: var(--ink-2); font-size: 20px; }

/* 登录引导（上传、我的） */
.gate { align-items: center; justify-content: center; text-align: center; padding: 24px; gap: 6px; }
.gate h1 { font-size: 22px; margin: 10px 0 0; }
.gate .btn-row { width: 100%; max-width: 360px; justify-content: center; }
.gate-steps { list-style: none; padding: 0; margin: 14px 0 6px; width: 100%; max-width: 360px; counter-reset: g; text-align: left; display: grid; gap: 8px; }
.gate-steps li { counter-increment: g; position: relative; background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 10px 12px 10px 46px; }
.gate-steps li::before { content: counter(g); position: absolute; left: 12px; top: 12px; width: 24px; height: 24px; border-radius: 50%; background: var(--ink); color: #fff; font-size: 13px; font-weight: 700; display: grid; place-items: center; }
.gate-steps b { display: block; font-size: 14px; } .gate-steps span { font-size: 12px; color: var(--ink-2); }

/* 我的 */
.prof { padding: 14px 16px 8px; gap: 10px; }
.prof .p-card { flex: none; padding: 14px; gap: 12px; }
.prof .avatar { width: 56px; height: 56px; font-size: 22px; }
.p-id { flex: 1; min-width: 0; }
.p-id h2 { font-size: 19px; }
.login-state { font-size: 12px !important; color: var(--ok); display: flex; align-items: center; gap: 6px; }
.dot-ok { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); flex: none; }
.p-ops { display: flex; flex-direction: column; gap: 4px; align-items: flex-end; }
.p-tabs { flex: none; display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.p-tabs button { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 8px 4px; }
.p-tabs b { display: block; font-size: 20px; } .p-tabs span { font-size: 12px; color: var(--ink-2); }
.p-tabs button.on { background: var(--ink); border-color: var(--ink); color: #fff; } .p-tabs button.on span { color: rgba(255,255,255,.75); }
.p-list { flex: 1; min-height: 0; overflow-y: auto; border-radius: 16px; }
.prof .p-foot { flex: none; margin: 0; text-align: center; }
.empty { text-align: center; padding: 30px 16px; color: var(--ink-2); }
.empty b { display: block; color: var(--ink); font-size: 16px; margin-bottom: 6px; } .empty p { margin: 0 0 12px; font-size: 13px; }

/* 上传表单：更高的卡片，底部固定发布按钮 */
@media (max-width: 899px) { .sheet.tall { max-height: calc(100% - 60px - 64px - env(safe-area-inset-bottom)); } }
.tip { font-size: 13px; color: var(--ink-2); background: #FFF6E4; border: 1px solid #F0DDB6; border-radius: 12px; padding: 8px 12px; margin: 6px 0 10px; line-height: 1.6; }
.sticky-actions { position: sticky; bottom: -24px; background: var(--card); padding: 10px 0 14px; margin-bottom: -14px; box-shadow: 0 -8px 12px -8px rgba(42,37,33,.12); }
.btn-ghost.wide { width: 100%; margin-top: 6px; padding: 10px; border-style: dashed; }
.step-ed { position: relative; display: flex; gap: 10px; align-items: stretch; background: var(--paper); border-radius: 14px; padding: 10px; margin-top: 8px; }
.step-no { flex: none; width: 24px; height: 24px; border-radius: 50%; background: var(--ink); color: #fff; font-size: 13px; font-weight: 700; display: grid; place-items: center; }
.step-ph { flex: none; width: 72px; height: 72px; border-radius: 10px; border: 1px dashed var(--line); background: var(--card); display: grid; place-items: center; overflow: hidden; font-size: 11px; color: var(--ink-2); text-align: center; cursor: pointer; }
.step-ph img { width: 100%; height: 100%; object-fit: cover; }
.step-ed textarea { flex: 1; min-width: 0; border: 1px solid var(--line); border-radius: 10px; padding: 8px; font: inherit; font-size: 14px; resize: vertical; background: var(--card); }
.step-del { position: absolute; right: 4px; top: 2px; border: 0; background: none; color: var(--ink-2); font-size: 18px; }
.steps .step-img { display: block; width: 100%; max-width: 280px; border-radius: 10px; margin: 4px 0 6px; }
.topbar .back[hidden], .top-actions [hidden] { display: none !important; }
.publish-row { margin-top: 18px; padding-bottom: 8px; }
@media (min-width: 900px) {
  .map-search { left: 24px; }
  .map-spot-rail { left: 24px; right: 440px; bottom: 92px; }
  .sheet-primary { padding-bottom: 14px; }
}

/* 合并：地图页用浮在地图上的搜索框（带即时结果），底部用“我身边” */
@media (max-width: 899px) {
  .topbar { display: none; }
  .chips { top: env(safe-area-inset-top); }
  .map-search, .map-locate { top: calc(52px + env(safe-area-inset-top)); }
  #btnDemo { position: fixed; top: calc(104px + env(safe-area-inset-top)); right: 16px; z-index: 18; width: 44px; height: 44px; border-radius: 14px; box-shadow: var(--shadow); padding: 0; }
  #btnDemo .lbl { display: none; }
  body:not(.on-map) #btnDemo { display: none; }
}
#mapSpotRail { display: none !important; }
body.sheet-open .near { display: none; }
body:not(.on-map) .map-search, body:not(.on-map) .map-locate { display: none; }

/* 地图上的机位标签：照片 + 名称，引线连到机位点（参考美食地图样式） */
.map-labels { position: fixed; inset: 0; z-index: 2; pointer-events: none; }
body:not(.on-map) .map-labels, body.sheet-open .map-labels, body.guiding .map-labels { display: none; }
.ml-lines { position: absolute; left: 0; top: 0; overflow: visible; }
.mlabel { position: absolute; width: 148px; height: 46px; display: flex; align-items: center; gap: 7px; padding: 4px 8px 4px 4px; border: 1.5px solid var(--c); border-radius: 12px; background: rgba(255,253,248,.97); box-shadow: 0 3px 10px rgba(42,37,33,.16); pointer-events: auto; text-align: left; cursor: pointer; }
.ml-img { width: 36px; height: 36px; border-radius: 8px; overflow: hidden; flex: none; background: var(--line); }
.ml-img img, .ml-img svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.mlabel b { font-size: 13px; line-height: 1.3; color: var(--ink); overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
/* 搜索框：去掉旁边的定位圆圈，搜索框占满一行、字放大；定位统一用“我身边”里的“重新定位” */
.map-locate { display: none !important; }
.map-search { width: auto; right: 16px; height: 48px; }
.map-search input { font-size: 16px; }
.map-search > span { font-size: 24px; }
.tp-more.one { grid-template-columns: 1fr; }
.near-h .link { font-size: 14px; font-weight: 700; color: #3b6fb6; text-decoration: none; }
@media (min-width: 900px) { .map-search { right: 440px; } }

/* 发帖式上传 */
.meta-card { display: grid; gap: 6px; background: var(--paper); border: 1px solid var(--line); border-radius: 14px; padding: 10px 12px; margin: 8px 0; }
.meta-card div { display: flex; gap: 10px; font-size: 13px; line-height: 1.5; }
.meta-card span { flex: none; width: 60px; color: var(--ink-2); }
.meta-card b { font-weight: 500; min-width: 0; overflow-wrap: anywhere; }
.form textarea#upBody { border: 1px solid var(--line); border-radius: 10px; padding: 10px; font: inherit; font-size: 15px; line-height: 1.6; resize: vertical; background: var(--card); color: var(--ink); width: 100%; }
.tag-ed { display: flex; flex-wrap: wrap; gap: 6px; }
.tag-ed:empty { display: none; }
.tag-chip { display: inline-flex; align-items: center; gap: 2px; background: #FFF1DC; color: #9a5a12; border-radius: 999px; padding: 4px 4px 4px 10px; font-size: 13px; }
.tag-chip button { border: 0; background: none; color: inherit; font-size: 15px; line-height: 1; padding: 0 4px; }
.tag-sug { display: flex; flex-wrap: wrap; gap: 6px; margin-top: -4px; }
.tag-sug button { border: 1px dashed var(--line); background: var(--card); border-radius: 999px; padding: 4px 10px; font-size: 12.5px; color: var(--ink-2); }
.post { font-size: 15px; line-height: 1.75; }
.post-tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 8px; }
.post-tags span { font-size: 13px; color: #3b6fb6; }
/* 地图选点：上传卡片降下去，底部出现 ✓ */
.sheet.lowered { transform: translateY(calc(100% + 90px)) !important; }
body.picking .map-search, body.picking .near, body.picking .chips { visibility: hidden; }
#pickBar { display: none; }
body.picking #pickBar { position: fixed; left: 12px; right: 12px; bottom: calc(16px + env(safe-area-inset-bottom)); z-index: 40; display: flex; align-items: center; gap: 10px; background: var(--card); border: 1px solid var(--line); border-radius: 18px; padding: 10px 10px 10px 16px; box-shadow: var(--shadow); }
.pick-t { flex: 1; min-width: 0; display: grid; gap: 2px; }
.pick-t b { font-size: 14px; } .pick-t span { font-size: 12px; color: var(--ink-2); }
.pick-x { border: 0; background: none; color: var(--ink-2); font-size: 14px; padding: 8px; }
.pick-ok { width: 52px; height: 52px; border-radius: 50%; border: 0; background: var(--ink); color: #fff; font-size: 24px; font-weight: 700; flex: none; }
@media (min-width: 900px) { body.picking #pickBar { left: 24px; right: auto; width: 420px; } }

/* ================= Arie 风格（9/30 晚）：白底、大照片、常规字重大标题、青柠绿胶囊按钮 ================= */
:root {
  --paper: #ffffff; --card: #ffffff; --ink: #0f0f0f; --ink-2: #6e6e6e; --line: #ececea;
  --lime: #d7f36b; --skill: #0f0f0f; --classic: #0f0f0f; --wonder: #5b4bb7;
  --shadow: 0 10px 30px rgba(15,15,15,.10);
  font-family: "Manrope", "PingFang SC", "Hiragino Sans GB", "Noto Sans SC", "Microsoft YaHei", sans-serif;
}
body, .view { background: #ffffff; }
h1, h2, .hm-name, .pg-h h1, .slide-txt b { font-weight: 500; letter-spacing: -.01em; }
.btn-main { background: var(--lime); color: #0f0f0f; border-radius: 999px; font-weight: 600; }
.btn-ghost { border-radius: 999px; }
.tab-plus i { background: var(--lime); color: #0f0f0f; border-radius: 999px; }
.tabbar { background: rgba(255,255,255,.96); }
.tabbar button.on { color: #0f0f0f; }
.tabbar button.on svg .fill { fill: #0f0f0f; }
.chips button { border-color: var(--line); background: #ffffff; }
.chips button.on { background: #0f0f0f; color: #ffffff; }
.search, .map-search { background: #ffffff; border-color: var(--line); border-radius: 999px; }
/* 首页：更大的标题、满幅照片 */
.hm-name { font-size: 24px; letter-spacing: .04em; }
.hm-slogan { letter-spacing: .08em; }
.slide { border-radius: 28px; }
.slide-txt b { font-size: 28px; line-height: 1.2; }
.slide-act .btn-main { background: var(--lime); color: #0f0f0f; padding: 13px 24px; }
.rx.dark { background: rgba(255,255,255,.14); }
.dots i.on { background: #0f0f0f; }
/* 地图 */
.mlabel { border-color: #0f0f0f !important; border-width: 1px; border-radius: 14px; }
.near-h .link { color: #0f0f0f; text-decoration: underline; text-decoration-color: var(--lime); text-decoration-thickness: 3px; text-underline-offset: 3px; }
.near-card { border-radius: 18px; }
.badge.ok { background: #eef8cf; color: #3d5a07; }
.rx-star.on { color: #0f0f0f; }
/* 专题：6 张图卡 + 限定奇观 */
.topic-page .tp-grid { grid-template-rows: repeat(3, 1fr); }
.tp-card { border-radius: 22px; background: var(--c); }
.tp-card img.t-art { object-fit: cover; }
.tp-txt { background: linear-gradient(transparent, rgba(0,0,0,.62)); }
.tp-txt em { color: var(--lime); opacity: 1; }
.tp-wonder { display: flex; align-items: center; gap: 12px; }
.tp-wonder b { flex: none; }
.tp-wonder .moon { width: 30px; height: 30px; border-radius: 50%; background: radial-gradient(circle at 40% 40%, #ffffff, var(--lime)); flex: none; }
.tp-more button { border-radius: 999px; }
/* 机位卡片、我的、上传 */
.sheet { border-radius: 26px 26px 0 0; }
.tag, .tag.classic, .tag.skill, .tag.wonder { background: #0f0f0f; color: #ffffff; }
.tag.soft { background: #f2f2ef; color: #0f0f0f; }
.p-card { background: #f6f6f3; border-color: transparent; }
.avatar { background: var(--lime); color: #0f0f0f; box-shadow: none; }
.p-tabs button.on { background: #0f0f0f; }
.tip { background: #f7fbe6; border-color: #e6f2b8; color: #4a4a4a; }
.tag-chip { background: var(--lime); color: #0f0f0f; }
.post-tags span { color: #0f0f0f; background: #f2f2ef; border-radius: 999px; padding: 2px 9px; }
.pick-ok { background: var(--lime); color: #0f0f0f; }
.arrival-primary { background: var(--lime); color: #0f0f0f; }
.link { text-decoration-color: var(--lime); }

/* 地图：热力图 + 白色照片标签 + 合并机位的相册 */
.map-labels .heat { position: absolute; left: 0; top: 0; pointer-events: none; mix-blend-mode: multiply; }
.mlabel { border: 0 !important; background: rgba(255,255,255,.97); border-radius: 16px; box-shadow: 0 6px 18px rgba(15,15,15,.14); width: 150px; height: 48px; }
.ml-img { position: relative; overflow: visible; }
.ml-img img, .ml-img svg { border-radius: 9px; }
.ml-n { position: absolute; right: -6px; top: -6px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--lime); color: #0f0f0f; font-style: normal; font-size: 11px; font-weight: 700; display: grid; place-items: center; box-shadow: 0 0 0 2px #fff; }
.gal { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; margin-top: 10px; }
.gal::-webkit-scrollbar { display: none; }
.gal-item { position: relative; flex: none; width: 100%; margin: 0; scroll-snap-align: center; }
.gal-img { width: 100%; aspect-ratio: 4 / 5; border-radius: 20px; overflow: hidden; background: #f1f1ee; }
.gal-img img, .gal-img svg { width: 100%; height: 100%; object-fit: cover; display: block; }
.gal-item figcaption { padding: 8px 2px 0; display: grid; gap: 2px; padding-right: 110px; }
.gal-item figcaption b { font-size: 15px; } .gal-item figcaption span { font-size: 12px; color: var(--ink-2); }
.gal-more { position: absolute; right: 12px; bottom: 58px; border: 0; background: var(--lime); color: #0f0f0f; font-weight: 600; font-size: 14px; border-radius: 999px; padding: 10px 16px; box-shadow: 0 4px 12px rgba(0,0,0,.18); }
.topic-page .tp-grid.seven { grid-template-rows: repeat(4, 1fr); }
.tp-card.wide { grid-column: 1 / -1; }
.tp-txt em { font-size: 12px; }
.tp-txt b { font-size: 20px; }
.tile-del { position: absolute; left: 8px; top: 8px; border: 0; border-radius: 999px; background: rgba(255,255,255,.92); color: #c0392b; font-size: 12px; font-weight: 600; padding: 5px 10px; }
.btn-danger { border: 0; background: #d64530; color: #fff; border-radius: 999px; padding: 12px 18px; font-size: 15px; font-weight: 600; flex: 1 1 auto; }

/* 步行导航条 */
.navbar { display: none; }
body.navigating .navbar { display: grid; gap: 8px; position: fixed; left: 12px; right: 12px; bottom: calc(14px + env(safe-area-inset-bottom)); z-index: 45; background: #ffffff; border-radius: 22px; padding: 14px 16px; box-shadow: 0 12px 30px rgba(15,15,15,.2); }
body.navigating .map-search, body.navigating .near, body.navigating .chips, body.navigating .map-labels { visibility: hidden; }
.nav-top { display: flex; align-items: center; gap: 10px; }
.nav-tag { background: #0f0f0f; color: #fff; border-radius: 999px; font-size: 12px; padding: 3px 10px; }
.nav-left { font-size: 14px; color: #6e6e6e; font-variant-numeric: tabular-nums; }
.nav-step { font-size: 20px; font-weight: 600; line-height: 1.4; }
.nav-next { font-size: 12.5px; color: #6e6e6e; line-height: 1.5; }
.nav-btns { display: flex; gap: 8px; margin-top: 2px; }
.nav-btns > * { flex: 1 1 auto; text-align: center; text-decoration: none; padding: 11px 10px; font-size: 14px; }
.nav-btns .btn-main { flex: 1.3 1 auto; }
@media (min-width: 900px) { body.navigating .navbar { left: 24px; right: auto; width: 440px; } }
/* 选站位和朝向：两步 + 搜索 */
body.picking #pickBar { display: grid; gap: 8px; align-items: stretch; padding: 12px 12px 12px 14px; }
.pick-steps { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: #9a9a9a; }
.pick-steps span.on { color: #0f0f0f; font-weight: 700; }
.pick-steps span.done { color: #3d5a07; }
.pick-steps i { flex: 0 0 24px; height: 1px; background: #d8d8d4; }
.pick-search { display: flex; gap: 6px; }
.pick-search input { flex: 1; min-width: 0; border: 1px solid #e6e6e2; border-radius: 999px; padding: 9px 14px; font: inherit; font-size: 15px; background: #f7f7f4; }
.pick-search button { border: 0; background: #0f0f0f; color: #fff; border-radius: 999px; padding: 0 16px; font-size: 14px; }
.pick-res { display: grid; gap: 4px; max-height: 34vh; overflow-y: auto; }
.pick-res:empty { display: none; }
.pick-res button { text-align: left; border: 0; background: #f6f6f3; border-radius: 12px; padding: 8px 12px; display: grid; gap: 1px; }
.pick-res b { font-size: 14px; } .pick-res span { font-size: 12px; color: #6e6e6e; }
.pick-res p { margin: 4px 2px; font-size: 13px; }
.pick-row { display: flex; align-items: center; gap: 8px; }
.pick-ok[disabled] { opacity: .4; }
.gps-help { background: #fff7e6; border: 1px solid #f3dfb2; border-radius: 14px; padding: 10px 12px; font-size: 13px; line-height: 1.6; margin: 8px 0; }
.gps-help > b { display: block; font-size: 14px; margin-bottom: 2px; }
.gps-help p { margin: 2px 0; }
.gps-help ul { margin: 4px 0; padding-left: 18px; }
.gps-help li b { font-weight: 600; }

/* 手填拍摄时间 / 焦段 */
#upManual .manual{margin-top:10px}
.f35-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.f35-row button{border:1px solid #e3e3e3;background:#fff;border-radius:999px;padding:6px 10px;font:600 13px/1.1 inherit;color:#0f0f0f;display:flex;flex-direction:column;align-items:center;cursor:pointer}
.f35-row button small{font-size:10px;color:#888;font-weight:500;margin-top:2px}
.f35-row button.on{background:#d7f36b;border-color:#0f0f0f}
.f35-row input{width:92px;flex:0 0 auto}
/* 限定奇观 */
.wonder-ed{margin-top:12px;padding:12px;border-radius:14px;background:#f3f1ff;border:1px solid #dcd7ff}
.wonder-ed>b{color:#4b3fb5}
.wonder-ed select{width:100%;padding:10px;border-radius:10px;border:1px solid #d9d9d9;font:inherit;background:#fff}
.wonder-info{margin:10px 0;padding:10px 12px;border-radius:14px;background:#f3f1ff;display:grid;gap:6px}
.wonder-info div{display:flex;gap:10px;font-size:14px}
.wonder-info span{flex:0 0 64px;color:#6a5acd}
.wonder-info .wi-next b{color:#2d2466}
.l-grp{margin:14px 4px 6px;font-size:15px;display:flex;align-items:center;gap:8px}
.l-grp em{font-style:normal;font-size:12px;color:#fff;background:#6a5acd;border-radius:999px;padding:1px 8px}

/* 版权与使用说明 */
.legal p{font-size:14px;line-height:1.7;margin:0 0 10px;color:#333}
.legal b{color:#0f0f0f}
.legal a{color:#4b3fb5}
.agree{display:flex;gap:8px;align-items:flex-start;font-size:13px;line-height:1.6;margin:10px 0;color:#333}
.agree input{margin-top:4px;width:18px;height:18px;accent-color:#0f0f0f;flex:0 0 auto}
.agree .link,.scene-note .link{padding:0;font-size:inherit}
.scene-note{font-size:12px;color:#888;margin:8px 0 0}
.p-foot{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}
.report-row{margin:10px 0 0;font-size:12px;color:#888}.report-row .link{font-size:12px;color:#888;padding:0}
