/* 六盘山漫游 · 全域智慧旅游交通服务平台 */
:root{
  --green:#0f6b52; --green2:#12876a; --green3:#e7f3ef;
  --red:#c62828; --red2:#e53935; --red-bg:#fdeaea;
  --ink:#1c2321; --sub:#6b7a75; --line:#e6ecea;
  --bg:#f2f5f4; --card:#ffffff; --gold:#c99a2e;
  --shadow:0 6px 22px rgba(16,60,48,.10);
  --radius:16px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;font-family:-apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:var(--ink);background:var(--bg)}
a{color:inherit;text-decoration:none}
img{max-width:100%}
button{font-family:inherit;cursor:pointer;border:none;background:none}

/* ---------- Phone shell ---------- */
.phone-wrap{max-width:430px;margin:0 auto;min-height:100vh;background:var(--card);position:relative;box-shadow:0 0 40px rgba(0,0,0,.08);display:flex;flex-direction:column}
@media(min-width:600px){body{background:linear-gradient(160deg,#e9f0ee,#dfe9e6)}.phone-wrap{margin:18px auto;min-height:calc(100vh - 36px);border-radius:26px;overflow:hidden}}

/* ---------- Top bar ---------- */
.statusbar{height:26px;background:var(--green);color:#fff;font-size:11px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;letter-spacing:.5px}
.navbar{background:linear-gradient(135deg,var(--green),var(--green2));color:#fff;padding:10px 14px 12px;position:sticky;top:0;z-index:30}
.navbar.simple{display:flex;align-items:center;gap:10px}
.navbar h1{font-size:17px;margin:0;font-weight:600;letter-spacing:1px;display:flex;align-items:center;gap:7px}
.navbar .sub{font-size:11px;opacity:.85;margin-top:3px}
.back{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;font-size:16px}

/* ---------- Content ---------- */
.content{flex:1;overflow-y:auto;padding:12px 12px 84px}
.section-title{font-size:14px;font-weight:600;margin:16px 4px 8px;display:flex;align-items:center;justify-content:space-between}
.section-title .more{font-size:11px;color:var(--sub);font-weight:400}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:12px;box-shadow:var(--shadow)}
.muted{color:var(--sub);font-size:12px}
.tag{display:inline-block;font-size:10px;padding:2px 7px;border-radius:20px;background:var(--green3);color:var(--green);margin-right:5px}
.tag.red{background:var(--red-bg);color:var(--red)}
.tag.gold{background:#fdf5e3;color:var(--gold)}
.btn{display:block;width:100%;background:linear-gradient(135deg,var(--green),var(--green2));color:#fff;border-radius:12px;padding:13px;font-size:15px;font-weight:600;text-align:center;transition:.15s}
.btn:active{transform:scale(.985);opacity:.92}
.btn.ghost{background:#fff;color:var(--green);border:1px solid var(--green)}
.btn.red{background:linear-gradient(135deg,var(--red),var(--red2))}
.btn.sm{padding:9px 14px;width:auto;display:inline-block;font-size:13px;border-radius:10px}
.btn[disabled]{filter:grayscale(.4);opacity:.5}

/* ---------- Quick grid ---------- */
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.quick{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 4px;text-align:center;box-shadow:var(--shadow)}
.quick .ic{font-size:22px;display:block;margin-bottom:5px}
.quick span{font-size:11px;color:#33413c}

/* ---------- Stats ---------- */
.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.stat{background:linear-gradient(135deg,#0f6b52,#12876a);color:#fff;border-radius:14px;padding:10px 8px;text-align:center}
.stat b{font-size:18px;display:block;line-height:1.2}
.stat span{font-size:10px;opacity:.85}
.stat.plain{background:#fff;border:1px solid var(--line);color:var(--ink);box-shadow:var(--shadow)}
.stat.plain b{color:var(--green)}
.stat.plain span{color:var(--sub)}

/* ---------- Scenic list ---------- */
.spot{display:flex;gap:10px;padding:11px 0;border-bottom:1px dashed var(--line);align-items:center}
.spot:last-child{border-bottom:none}
.spot .badge{width:42px;height:42px;border-radius:12px;background:var(--green3);color:var(--green);display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex:0 0 auto}
.spot .badge.red{background:var(--red-bg);color:var(--red)}
.spot .info{flex:1;min-width:0}
.spot .info b{font-size:13.5px;display:block}
.spot .info .meta{font-size:11px;color:var(--sub);margin-top:3px}
.spot .right{text-align:right;font-size:12px;color:var(--green);font-weight:600}
.spot .right small{display:block;color:var(--sub);font-weight:400;font-size:10px}

/* ---------- Map ---------- */
.mapbox{position:relative;width:100%;border-radius:14px;overflow:hidden;background:#eef4f2;border:1px solid var(--line)}
.mapbox svg{display:block;width:100%;height:auto}
.legend{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:10px;color:var(--sub);margin-top:8px}
.legend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:4px;vertical-align:middle}

/* ---------- Bottom tab ---------- */
.tabbar{position:sticky;bottom:0;display:flex;background:rgba(255,255,255,.97);border-top:1px solid var(--line);backdrop-filter:blur(8px);z-index:40}
.tabbar a{flex:1;text-align:center;padding:7px 0 9px;color:#93a29d;font-size:10px}
.tabbar a .ic{font-size:19px;display:block;margin-bottom:2px;filter:grayscale(1);opacity:.6}
.tabbar a.active{color:var(--green);font-weight:600}
.tabbar a.active .ic{filter:none;opacity:1}

/* ---------- Forms ---------- */
.field{margin-bottom:12px}
.field label{font-size:12px;color:var(--sub);display:block;margin-bottom:5px}
.field select,.field input{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:11px;font-size:14px;background:#fbfdfc;color:var(--ink);appearance:none}
.field input:focus,.field select:focus{outline:2px solid var(--green3);border-color:var(--green2)}
.choice{display:flex;gap:8px;flex-wrap:wrap}
.choice span{padding:8px 13px;border:1px solid var(--line);border-radius:20px;font-size:12.5px;background:#fff}
.choice span.on{background:var(--green);color:#fff;border-color:var(--green)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.switch{display:flex;align-items:center;gap:8px;font-size:13px}
.switch input{appearance:none;width:40px;height:23px;border-radius:20px;background:#cfd8d5;position:relative;transition:.2s}
.switch input:checked{background:var(--green)}
.switch input::after{content:"";position:absolute;top:2.5px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.2s}
.switch input:checked::after{left:19px}

/* ---------- Ticket ---------- */
.ticket{background:linear-gradient(135deg,#0f6b52,#12876a);color:#fff;border-radius:16px;padding:16px;position:relative;overflow:hidden}
.ticket .qr{background:#fff;border-radius:10px;padding:8px;width:120px;margin:12px auto}
.ticket .qr canvas{display:block;width:104px;height:104px}
.ticket .dash{position:absolute;right:-12px;top:50%;transform:translateY(-50%);}
.big-ok{font-size:44px;text-align:center;margin:10px 0 4px}

/* ---------- Chat/voice ---------- */
.voice{background:var(--red-bg);border:1px solid #f3c9c9;border-radius:14px;padding:12px}
.voice .wave{display:flex;align-items:flex-end;gap:3px;height:26px;margin:8px 0}
.voice .wave i{width:4px;background:var(--red);border-radius:3px;animation:wv 1s infinite ease-in-out}
@keyframes wv{0%,100%{height:6px}50%{height:24px}}

/* ---------- Progress ---------- */
.bar{height:8px;background:#e9efed;border-radius:8px;overflow:hidden}
.bar > i{display:block;height:100%;background:linear-gradient(90deg,var(--green),var(--green2))}
.bar.warn > i{background:linear-gradient(90deg,#e08a00,#e5b23a)}
.bar.danger > i{background:linear-gradient(90deg,var(--red),var(--red2))}

/* ---------- Admin ---------- */
.admin{max-width:1180px;margin:0 auto;padding:18px}
.admin h2{margin:22px 0 10px;font-size:16px}
.admin-head{background:linear-gradient(135deg,#0f6b52,#12876a);color:#fff;border-radius:18px;padding:20px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}
.admin-head h1{margin:0;font-size:20px}
.admin-head p{margin:6px 0 0;opacity:.9;font-size:12px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-top:14px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px;box-shadow:var(--shadow)}
.kpi b{font-size:23px;color:var(--green);display:block}
.kpi span{font-size:12px;color:var(--sub)}
.kpi small{color:#9aa8a3}
.panel{background:#fff;border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:var(--shadow);margin-top:12px}
table{width:100%;border-collapse:collapse;font-size:12.5px}
th,td{padding:8px 9px;text-align:left;border-bottom:1px solid var(--line)}
th{color:var(--sub);font-weight:600;background:#f7faf9;font-size:11.5px}
tr:hover td{background:#fbfdfc}
.pill{font-size:11px;padding:2px 8px;border-radius:20px;background:var(--green3);color:var(--green)}
.pill.warn{background:#fdf5e3;color:#a97a12}
.pill.danger{background:var(--red-bg);color:var(--red)}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:760px){.two-col{grid-template-columns:1fr}}
.arch{display:flex;flex-direction:column;gap:8px}
.arch .layer{border-radius:12px;padding:12px 14px;color:#fff}
.arch .layer b{font-size:13px}
.arch .layer p{margin:4px 0 0;font-size:11.5px;opacity:.95}
.arch .l1{background:linear-gradient(135deg,#14532d,#166534)}
.arch .l2{background:linear-gradient(135deg,#0f6b52,#12876a)}
.arch .l3{background:linear-gradient(135deg,#155e75,#0e7490)}
.toast{position:fixed;left:50%;bottom:96px;transform:translateX(-50%) translateY(20px);background:rgba(20,40,34,.94);color:#fff;padding:11px 18px;border-radius:12px;font-size:13px;opacity:0;transition:.28s;z-index:99;max-width:88%;text-align:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.loader{width:22px;height:22px;border:3px solid var(--green3);border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite;margin:18px auto}
@keyframes spin{to{transform:rotate(360deg)}}
.empty{text-align:center;color:var(--sub);font-size:13px;padding:30px 10px}
.flash{animation:flash .6s ease}
@keyframes flash{from{background:#fff8e1}to{background:transparent}}
