/**
 * 驾界电子路书 · Apple-inspired UI
 * 保留现有业务结构，只统一视觉、触控与响应式体验。
 */

:root {
    --primary: #007AFF;
    --primary-dark: #0066CC;
    --accent: #FF9F0A;
    --accent-dark: #D97706;
    --navy: #1D1D1F;
    --teal: #0A84FF;
    --orange: #FF9F0A;
    --ink: #1D1D1F;
    --muted: #6E6E73;
    --subtle: #8E8E93;
    --bg: #F5F5F7;
    --card: rgba(255, 255, 255, .94);
    --surface: #FFFFFF;
    --text: #1D1D1F;
    --text2: #515154;
    --text3: #8E8E93;
    --border: rgba(60, 60, 67, .14);
    --line: rgba(60, 60, 67, .12);
    --fill: rgba(118, 118, 128, .12);
    --fill-strong: rgba(118, 118, 128, .20);
    --glass: rgba(255, 255, 255, .80);
    --shadow-soft: 0 1px 2px rgba(0, 0, 0, .03), 0 12px 34px rgba(0, 0, 0, .07);
    --shadow-card: 0 1px 2px rgba(0, 0, 0, .025), 0 10px 28px rgba(0, 0, 0, .065);
    --shadow-float: 0 18px 50px rgba(0, 0, 0, .16);
    --radius: 22px;
    --radius-lg: 28px;
    --radius-md: 18px;
    --radius-sm: 14px;
    --spring: cubic-bezier(.22, 1, .36, 1);
    --safe-top: env(safe-area-inset-top, 0px);
    color-scheme: light;
}

html { background:#E9E9ED; }
body {
    background:
        radial-gradient(circle at 20% 15%,rgba(10,132,255,.10),transparent 30%),
        radial-gradient(circle at 82% 82%,rgba(255,159,10,.08),transparent 28%),
        #E9E9ED;
    color:var(--text);
    font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","PingFang SC","Helvetica Neue",Arial,sans-serif;
    font-feature-settings:"kern";
    letter-spacing:-.01em;
}
button,a { -webkit-touch-callout:none; }
button { color:inherit; }
button:focus-visible,a:focus-visible { outline:3px solid rgba(0,122,255,.30); outline-offset:2px; }
.page { background:var(--bg); transition:transform .46s var(--spring),opacity .28s ease,visibility .46s; }

/* 列表与每日页 */
.list-page,.days-page {
    background:linear-gradient(180deg,rgba(255,255,255,.96) 0,rgba(245,245,247,.98) 160px),var(--bg);
}
.list-header,.days-header {
    padding-top:calc(14px + var(--safe-top));
    background:rgba(248,248,250,.80);
    -webkit-backdrop-filter:saturate(180%) blur(24px);
    backdrop-filter:saturate(180%) blur(24px);
    border-bottom-color:rgba(60,60,67,.10);
}
.list-header { min-height:calc(64px + var(--safe-top)); padding-right:16px; padding-bottom:11px; }
.list-title { display:flex; flex-direction:column; font-size:20px; font-weight:700; letter-spacing:-.03em; }
.list-title::after { content:"电子路书"; margin-top:1px; color:var(--text3); font-size:10px; font-weight:600; letter-spacing:.12em; }
.list-nav,#planSwitcher { gap:4px; padding:3px; border-radius:12px; background:var(--fill); }
.list-nav a,.days-plan-switch {
    min-height:28px; padding:6px 10px; border:0; border-radius:9px;
    background:transparent; box-shadow:none; color:var(--text2); font-size:11px; font-weight:600;
}
.list-nav a:active { background:rgba(255,255,255,.90); }
.list-grid { gap:18px; padding:14px 14px calc(44px + var(--safe-bottom)); }
.list-card,.day-card {
    border:.5px solid rgba(60,60,67,.10); border-radius:var(--radius-lg);
    background:rgba(255,255,255,.96); box-shadow:var(--shadow-card);
    transition:transform .22s var(--spring),box-shadow .22s ease;
}
.list-card:active,.day-card:active { transform:scale(.976); box-shadow:0 4px 14px rgba(0,0,0,.07); }
.list-card-cover,.list-card-placeholder { max-height:232px; }
.list-card-placeholder {
    align-items:flex-end; padding:20px;
    background:linear-gradient(180deg,transparent 20%,rgba(0,0,0,.48)),linear-gradient(135deg,#90C8FF,#007AFF 52%,#0A3F7A);
    font-size:20px; font-weight:700; letter-spacing:-.03em;
}
.list-card-body { padding:17px 18px 18px; }
.list-card-title { font-size:19px; font-weight:700; letter-spacing:-.025em; }
.list-card-sub { margin-top:6px; color:var(--text2); line-height:1.55; }
.list-card-meta { gap:6px; margin-top:13px; }
.list-card-tag,.day-card-metric,.timeline-tag,.map-node-card-chip,.ns-next-chip {
    border:0; border-radius:999px; background:var(--fill); color:var(--text2); font-weight:600;
}
.list-card-tag { padding:5px 9px; }
.rb-footer {
    margin:28px 14px calc(22px + var(--safe-bottom)); padding:16px 17px;
    border:.5px solid var(--border); border-radius:20px; background:rgba(255,255,255,.72);
    color:var(--text2); box-shadow:none;
}
.rb-footer-brand { color:var(--text); font-weight:650; }
.rb-footer-slogan { color:var(--text3); letter-spacing:.08em; }

/* 沉浸封面 */
.cover-page { background:#000; }
.cover-page::after {
    background:linear-gradient(180deg,rgba(0,0,0,.28) 0%,rgba(0,0,0,.18) 28%,
               rgba(0,0,0,.32) 56%,rgba(0,0,0,.92) 100%);
}
.cover-bg { opacity:.90; filter:saturate(.92) contrast(1.02); transform:scale(1.01); }
.cover-bg-fallback {
    background:radial-gradient(circle at 50% 28%,rgba(10,132,255,.38),transparent 35%),
               linear-gradient(180deg,#204A67,#102738 52%,#05080B);
}
.cover-logo-tr {
    top:calc(14px + var(--safe-top)); right:16px; width:38px; height:38px; padding:7px;
    border:.5px solid rgba(255,255,255,.24); background:rgba(18,18,20,.42);
    -webkit-backdrop-filter:saturate(160%) blur(18px); backdrop-filter:saturate(160%) blur(18px);
    box-shadow:0 8px 24px rgba(0,0,0,.16);
}
.cover-status {
    top:calc(62px + var(--safe-top)); border:.5px solid rgba(255,255,255,.20);
    background:rgba(255,69,58,.80); -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px); font-weight:650;
}
.cover-content {
    overflow-y:auto; padding:0 20px calc(20px + var(--safe-bottom)); scrollbar-width:none;
    -webkit-overflow-scrolling:touch;
}
.cover-content::-webkit-scrollbar { display:none; }
.cover-text-block { flex-shrink:0; padding-top:max(11vh,calc(82px + var(--safe-top))); }
.cover-eyebrow {
    min-height:27px; margin-bottom:11px; padding:6px 11px;
    border:.5px solid rgba(255,255,255,.25); background:rgba(24,24,27,.40);
    -webkit-backdrop-filter:saturate(150%) blur(18px); backdrop-filter:saturate(150%) blur(18px);
    font-size:10px; font-weight:650; letter-spacing:.14em;
}
.cover-title {
    max-width:370px; margin:0 auto; font-size:clamp(32px,9.4vw,42px); font-weight:750;
    line-height:1.08; letter-spacing:-.045em; text-shadow:0 8px 28px rgba(0,0,0,.36);
}
.cover-subtitle { max-width:350px; margin:9px auto 0; color:rgba(255,255,255,.72); line-height:1.45; }
.cover-route-launch {
    max-width:390px; margin:13px auto 0; padding:10px 12px 5px; overflow:hidden;
    border:.5px solid rgba(255,255,255,.22); border-radius:18px;
    background:linear-gradient(135deg,rgba(12,22,34,.60),rgba(22,22,26,.34));
    -webkit-backdrop-filter:saturate(150%) blur(22px); backdrop-filter:saturate(150%) blur(22px);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.08),0 16px 40px rgba(0,0,0,.16);
}
.cover-route-launch-head { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.cover-route-status,.cover-route-source {
    display:inline-flex; align-items:center; min-width:0; color:rgba(255,255,255,.66);
    font-size:9px; font-weight:650; letter-spacing:.06em; white-space:nowrap;
}
.cover-route-status { color:rgba(255,255,255,.90); }
.cover-route-status i {
    width:6px; height:6px; margin-right:7px; border-radius:50%; background:#0A84FF;
    box-shadow:0 0 0 4px rgba(10,132,255,.14),0 0 14px rgba(10,132,255,.72);
    animation:coverRoutePulse .9s ease-in-out infinite alternate;
}
.cover-route-svg { display:block; width:100%; height:72px; margin-top:-2px; overflow:visible; }
.cover-route-glow,.cover-route-path { fill:none; stroke-linecap:round; stroke-linejoin:round; }
.cover-route-glow { stroke:rgba(120,194,255,.24); stroke-width:6; filter:blur(3px); }
.cover-route-path {
    stroke:#77C3FF; stroke-width:2.15; stroke-dasharray:1; stroke-dashoffset:1;
    filter:drop-shadow(0 0 5px rgba(10,132,255,.74));
}
.cover-route-node {
    fill:#fff; opacity:0; transform:scale(.45); transform-box:fill-box; transform-origin:center;
    filter:drop-shadow(0 0 4px rgba(120,194,255,.95));
}
.cover-route-launch.is-active .cover-route-path { animation:coverRouteTrace 2.04s var(--spring) forwards; }
.cover-route-launch.is-active .cover-route-node { animation:coverRouteNodeWake .36s var(--spring) forwards; animation-delay:var(--node-delay); }
.cover-route-launch.is-complete .cover-route-status i {
    background:#30D158; box-shadow:0 0 0 4px rgba(48,209,88,.14),0 0 14px rgba(48,209,88,.60); animation:none;
}
@keyframes coverRouteTrace { to { stroke-dashoffset:0; } }
@keyframes coverRouteNodeWake { to { opacity:1; transform:scale(1); } }
@keyframes coverRoutePulse { to { opacity:.52; transform:scale(.86); } }
.cover-mission-card {
    max-width:390px; margin:10px auto 0; padding:12px 13px 11px; text-align:left;
    border:.5px solid rgba(255,255,255,.22); border-radius:20px;
    background:rgba(248,248,250,.88); color:#1D1D1F;
    -webkit-backdrop-filter:saturate(180%) blur(26px); backdrop-filter:saturate(180%) blur(26px);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.76),0 18px 42px rgba(0,0,0,.18);
}
.cover-mission-head { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.cover-mission-kicker { display:block; color:#007AFF; font-size:8px; font-weight:750; letter-spacing:.14em; line-height:1; }
.cover-mission-head h2 { margin:4px 0 0; font-size:17px; font-weight:750; letter-spacing:-.035em; line-height:1.1; }
.cover-mission-day {
    flex:0 0 auto; padding:5px 8px; border-radius:999px; background:rgba(0,122,255,.10);
    color:#007AFF; font-size:10px; font-weight:750; letter-spacing:.04em;
}
.cover-mission-grid {
    display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin-top:11px; padding:10px 0;
    border-top:.5px solid rgba(60,60,67,.12); border-bottom:.5px solid rgba(60,60,67,.12);
}
.cover-mission-metric { min-width:0; padding:0 7px; text-align:center; }
.cover-mission-metric + .cover-mission-metric { border-left:.5px solid rgba(60,60,67,.12); }
.cover-mission-metric strong {
    display:block; overflow:hidden; color:#1D1D1F; font-size:15px; font-weight:760;
    letter-spacing:-.035em; line-height:1.1; white-space:nowrap; text-overflow:ellipsis;
}
.cover-mission-metric.compact strong { font-size:12px; letter-spacing:-.045em; }
.cover-mission-metric strong small { margin-left:2px; color:#6E6E73; font-size:8px; font-weight:700; letter-spacing:0; }
.cover-mission-metric > span { display:block; margin-top:4px; color:#8E8E93; font-size:8px; font-weight:650; white-space:nowrap; }
.cover-mission-foot { display:flex; align-items:center; justify-content:space-between; gap:7px; margin-top:8px; }
.cover-mission-verified {
    min-width:0; color:#6E6E73; font-size:8px; font-weight:600; line-height:1.3; white-space:nowrap;
    overflow:hidden; text-overflow:ellipsis;
}
.cover-feature-row { flex:0 0 auto; gap:4px; margin-top:0; }
.cover-feature-pill {
    min-height:20px; padding:3px 6px; border:0; border-radius:999px; background:rgba(118,118,128,.10);
    color:#6E6E73; font-size:8px; font-weight:650; -webkit-backdrop-filter:none; backdrop-filter:none;
}
.cover-action-block { flex-shrink:0; margin-top:11px; }
.cover-tour-bridge {
    margin-top:0; padding:11px 13px; border:.5px solid rgba(255,255,255,.20); border-radius:16px;
    background:rgba(255,255,255,.10); -webkit-backdrop-filter:saturate(150%) blur(20px); backdrop-filter:saturate(150%) blur(20px);
}
.cover-tour-bridge .ctb-icon { display:none; }
.cover-tour-bridge .ctb-line { font-weight:600; }
.cover-tour-bridge .ctb-arrow { color:#fff; }
.cover-actions { gap:8px; margin-top:10px; }
.cover-enter {
    min-height:52px; padding:14px 18px; border-radius:17px; background:rgba(255,255,255,.96);
    color:#000; font-size:16px; font-weight:700; letter-spacing:-.015em; box-shadow:0 12px 34px rgba(0,0,0,.22);
}
.cover-enter:active { transform:scale(.975); background:rgba(242,242,247,.96); box-shadow:0 7px 22px rgba(0,0,0,.18); }
.cover-offline {
    min-height:44px; border:.5px solid rgba(255,255,255,.20); border-radius:15px;
    background:rgba(28,28,30,.30); color:rgba(255,255,255,.88);
    -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px); font-weight:600;
}
.cover-offline-hint { margin-top:6px; color:rgba(255,255,255,.52); }
.cover-risk-notice {
    max-width:390px; margin:10px auto 0; padding-top:9px; text-align:center;
    border-top:.5px solid rgba(255,255,255,.18); color:rgba(255,255,255,.64);
}
.cover-risk-notice p { margin:0; font-size:10px; line-height:1.55; letter-spacing:0; }
.cover-access-note {
    display:inline-flex; margin:0 auto 6px; padding:4px 8px; border:.5px solid rgba(255,255,255,.22);
    border-radius:999px; background:rgba(255,255,255,.10); color:rgba(255,255,255,.92);
    font-size:10px; font-weight:650; letter-spacing:.01em;
}
.cover-risk-link {
    margin-top:5px; padding:3px 7px; border:0; background:transparent;
    color:rgba(255,255,255,.88); font-size:10px; font-weight:650; text-decoration:underline;
    text-decoration-color:rgba(255,255,255,.38); text-underline-offset:3px;
}

/* 首次进入路书前的风险告知 */
body.roadbook-notice-locked { overflow:hidden; }
.roadbook-notice-gate {
    position:fixed; inset:0; z-index:5000; display:flex; align-items:center; justify-content:center;
    padding:calc(18px + var(--safe-top)) 14px calc(18px + var(--safe-bottom));
    background:rgba(0,0,0,.58); -webkit-backdrop-filter:saturate(130%) blur(22px); backdrop-filter:saturate(130%) blur(22px);
}
.roadbook-notice-card {
    display:flex; flex-direction:column; width:min(100%,520px); max-height:100%; padding:20px;
    border:.5px solid rgba(255,255,255,.68); border-radius:28px; background:rgba(248,248,250,.97);
    box-shadow:0 28px 90px rgba(0,0,0,.36); color:#1D1D1F;
}
.roadbook-notice-head { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
.roadbook-notice-kicker {
    display:block; margin-bottom:5px; color:#FF3B30; font-size:10px; font-weight:750; letter-spacing:.14em;
}
.roadbook-notice-head h2 { margin:0; font-size:23px; font-weight:760; line-height:1.18; letter-spacing:-.035em; }
.roadbook-notice-close {
    display:none; flex:0 0 auto; width:32px; height:32px; border:0; border-radius:50%;
    background:rgba(118,118,128,.12); color:#6E6E73; font-size:22px; line-height:1;
}
.roadbook-notice-gate.is-review .roadbook-notice-close { display:block; }
.roadbook-notice-lead { margin:9px 0 12px; color:#6E6E73; font-size:13px; line-height:1.55; }
.roadbook-notice-scroll {
    min-height:160px; overflow-y:auto; padding:14px 15px; border:.5px solid rgba(60,60,67,.12);
    border-radius:18px; background:#fff; -webkit-overflow-scrolling:touch; outline:none;
}
.roadbook-notice-scroll section + section { margin-top:15px; padding-top:14px; border-top:.5px solid rgba(60,60,67,.12); }
.roadbook-notice-scroll h3 { margin:0 0 6px; font-size:14px; font-weight:720; letter-spacing:-.015em; }
.roadbook-notice-scroll p { margin:0; color:#4A4A4F; font-size:12px; line-height:1.72; letter-spacing:0; }
.roadbook-notice-meta {
    display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:16px; padding-top:13px;
    border-top:.5px solid rgba(60,60,67,.12); color:#8E8E93; font-size:10px;
}
.roadbook-notice-meta a { color:#007AFF; font-weight:650; text-decoration:none; }
.roadbook-notice-confirm { margin-top:12px; }
.roadbook-notice-read-status { margin-bottom:7px; color:#FF3B30; font-size:10px; font-weight:650; }
.roadbook-notice-read-status.is-complete { color:#248A3D; }
.roadbook-notice-ack {
    display:flex; align-items:flex-start; gap:9px; padding:10px 11px; border-radius:15px;
    background:rgba(0,122,255,.07); color:#3A3A3C; font-size:11px; line-height:1.55; cursor:pointer;
}
.roadbook-notice-ack input { flex:0 0 auto; width:18px; height:18px; margin:0; accent-color:#007AFF; }
.roadbook-notice-ack input:disabled { opacity:.42; }
.roadbook-notice-actions { display:flex; align-items:center; gap:10px; margin-top:12px; }
.roadbook-notice-exit {
    flex:0 0 auto; padding:11px 7px; color:#6E6E73; font-size:12px; font-weight:650; text-decoration:none;
}
.roadbook-notice-enter {
    flex:1; min-height:48px; padding:12px 16px; border:0; border-radius:15px; background:#007AFF;
    color:#fff; font-size:14px; font-weight:700; box-shadow:0 8px 20px rgba(0,122,255,.22);
}
.roadbook-notice-enter:disabled { background:#D1D1D6; color:#8E8E93; box-shadow:none; }
.roadbook-notice-gate.is-review .roadbook-notice-confirm,
.roadbook-notice-gate.is-review .roadbook-notice-exit { display:none; }
.roadbook-notice-gate.is-review .roadbook-notice-actions { justify-content:flex-end; }
.roadbook-notice-gate.is-review .roadbook-notice-enter { flex:0 0 auto; min-width:150px; }

/* 每日卡片 */
.days-header { min-height:calc(60px + var(--safe-top)); padding-right:14px; padding-bottom:9px; }
.days-back,.map-back,.mini-back {
    width:38px; height:38px; border:0; background:var(--fill); color:var(--text);
    box-shadow:none; font-size:19px; font-weight:500;
}
.days-title-text { font-weight:650; letter-spacing:-.02em; }
.days-plan-switch { min-height:29px; padding:5px 10px; font-weight:650; }
.days-plan-switch[style*="background"] {
    background:#fff !important; color:var(--text) !important; border-color:transparent !important;
    box-shadow:0 1px 4px rgba(0,0,0,.10);
}
.days-scroll { padding:14px 14px calc(104px + var(--safe-bottom)); }
.day-card { margin-bottom:18px; }
.day-card-cover-placeholder { max-height:224px; padding:18px; }
.day-card-cover-placeholder::after { background:linear-gradient(180deg,rgba(0,0,0,.02) 25%,rgba(0,0,0,.52) 100%); }
.day-card-logo {
    top:13px; right:13px; border:.5px solid rgba(255,255,255,.60); border-radius:12px;
    background:rgba(255,255,255,.84); -webkit-backdrop-filter:blur(16px); backdrop-filter:blur(16px);
    box-shadow:0 8px 24px rgba(0,0,0,.10);
}
.day-card-cover-label {
    font-size:36px; font-weight:720; letter-spacing:-.04em; color:rgba(255,255,255,.92);
    text-shadow:0 5px 20px rgba(0,0,0,.24);
}
.day-card-body { padding:16px 17px 17px; }
.day-card-day { color:var(--primary); font-weight:700; letter-spacing:.11em; }
.day-card-title { margin-top:5px; font-size:19px; font-weight:700; letter-spacing:-.025em; }
.day-card-route { margin-top:7px; color:var(--text2); }
.day-card-footer { gap:6px; margin-top:14px; padding-top:13px; }
.day-card-metric { padding:6px 9px; }
.days-tour-bridge {
    margin:4px 14px calc(26px + var(--safe-bottom)); padding:17px 18px;
    border:.5px solid var(--border); border-radius:22px; background:#fff; color:var(--text); box-shadow:var(--shadow-card);
}
.days-tour-bridge .dtb-text { font-weight:650; letter-spacing:-.01em; }
.days-tour-bridge .dtb-arrow { color:var(--primary); }

/* 地图与时间轴 */
.map-page,#pageMap { background:#E7EDF2; }
.map-topbar { padding:calc(10px + var(--safe-top)) 12px 10px; background:linear-gradient(180deg,rgba(0,0,0,.23),transparent); }
.map-back,.map-day-label,.map-total-km {
    border:.5px solid rgba(255,255,255,.48); background:rgba(250,250,252,.82);
    -webkit-backdrop-filter:saturate(180%) blur(22px); backdrop-filter:saturate(180%) blur(22px);
    box-shadow:0 8px 24px rgba(0,0,0,.10);
}
.map-day-label { max-width:45vw; padding:8px 12px; border-radius:14px; font-weight:650; }
.map-total-km { padding:8px 10px; border-radius:14px; color:var(--text2); font-weight:650; }
.map-live-badge {
    min-height:32px; padding:7px 10px; border:.5px solid rgba(255,255,255,.20); border-radius:14px;
    background:rgba(28,28,30,.68); -webkit-backdrop-filter:blur(20px); backdrop-filter:blur(20px);
    box-shadow:0 8px 22px rgba(0,0,0,.12); font-weight:650;
}
.map-live-dot { background:#30D158; box-shadow:0 0 0 3px rgba(48,209,88,.17); }
.map-live-badge.offline .map-live-dot { background:#FF9F0A; box-shadow:0 0 0 3px rgba(255,159,10,.17); }
.map-layer-btns {
    top:calc(58px + var(--safe-top)); gap:5px; padding:3px;
    border:.5px solid rgba(255,255,255,.50); border-radius:15px; background:rgba(248,248,250,.78);
    -webkit-backdrop-filter:saturate(180%) blur(22px); backdrop-filter:saturate(180%) blur(22px);
    box-shadow:0 10px 28px rgba(0,0,0,.10);
}
.map-layer-btn {
    height:34px; border:0; border-radius:11px; background:transparent; color:var(--text2);
    box-shadow:none; font-weight:650;
}
.map-layer-btn.active { border:0; background:#fff; color:var(--text); box-shadow:0 1px 4px rgba(0,0,0,.12); }
.map-layer-count {
    min-width:19px; height:19px; padding:0 5px; border-radius:999px;
    background:rgba(60,60,67,.10); color:var(--text2); font-size:10px; font-weight:700;
}
.map-layer-btn.active .map-layer-count { background:rgba(0,122,255,.11); color:var(--primary); }
.map-layer-btn.empty:not(.active) { color:var(--text3); }
.map-nearest-panel {
    border:.5px solid rgba(255,255,255,.64); border-radius:18px; background:rgba(250,250,252,.88);
    -webkit-backdrop-filter:saturate(180%) blur(24px); backdrop-filter:saturate(180%) blur(24px);
    box-shadow:0 10px 30px rgba(0,0,0,.13);
}
.map-nearest-locate-icon { border-radius:11px; background:rgba(10,132,255,.11); color:var(--primary); }
.map-nearest-title { color:var(--text); font-weight:680; letter-spacing:-.01em; }
.map-nearest-subtitle,.map-nearest-privacy { color:var(--text3); }
.map-nearest-arrow { color:var(--primary); }
.map-nearest-dot { background:var(--primary); box-shadow:0 0 0 4px rgba(10,132,255,.15); }
.map-nearest-refresh { border-radius:10px; background:rgba(10,132,255,.10); color:var(--primary); font-weight:650; }
.map-nearest-item { border:.5px solid rgba(60,60,67,.08); border-radius:12px; background:rgba(118,118,128,.08); color:var(--text); }
.map-nearest-item-name { font-weight:650; }
.map-nearest-item-distance { color:var(--primary); font-weight:700; }
.map-control-stack { top:calc(108px + var(--safe-top)); }
.map-control-btn {
    width:44px; height:44px; border:.5px solid rgba(255,255,255,.50); border-radius:15px;
    background:rgba(250,250,252,.84); color:var(--primary);
    -webkit-backdrop-filter:saturate(180%) blur(22px); backdrop-filter:saturate(180%) blur(22px);
    box-shadow:0 8px 24px rgba(0,0,0,.12);
}
.map-control-btn.location-ready { border-color:transparent; background:var(--primary); color:#fff; box-shadow:0 8px 24px rgba(0,122,255,.24); }
.map-route-status {
    top:calc(108px + var(--safe-top)); border:.5px solid rgba(255,159,10,.24); border-radius:14px;
    background:rgba(255,249,235,.88); color:#8A5200; -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px);
}
.map-node-card {
    bottom:calc(108px + var(--safe-bottom)); padding:14px;
    border:.5px solid rgba(255,255,255,.72); border-radius:24px; background:rgba(250,250,252,.90);
    -webkit-backdrop-filter:saturate(180%) blur(24px); backdrop-filter:saturate(180%) blur(24px);
    box-shadow:var(--shadow-float);
}
.map-node-card-icon { border-radius:13px; box-shadow:none; }
.map-node-card-kicker { color:var(--primary); font-weight:700; }
.map-node-card-name { color:var(--text); font-weight:700; letter-spacing:-.02em; }
.map-node-card-close { background:var(--fill); color:var(--text2); }
.map-node-card-actions { gap:6px; }
.map-node-card-actions.compact { grid-template-columns:1fr 1fr; }
.map-node-card-btn {
    height:42px; border:0; border-radius:13px; background:var(--fill);
    color:var(--text); font-weight:650;
}
.map-node-card-btn.primary { background:var(--primary); color:#fff; box-shadow:none; }
.map-node-card-btn.service { border:0; background:rgba(10,132,255,.10); color:var(--primary-dark); }
.map-day-bar { bottom:calc(10px + var(--safe-bottom)); justify-content:center; }
.map-day-chip {
    min-width:44px; min-height:36px; padding:8px 13px; border:.5px solid rgba(255,255,255,.48);
    border-radius:14px; background:rgba(250,250,252,.82); color:var(--text2);
    -webkit-backdrop-filter:saturate(180%) blur(22px); backdrop-filter:saturate(180%) blur(22px);
    box-shadow:0 8px 22px rgba(0,0,0,.10); font-weight:650;
}
.map-day-chip.active { border-color:transparent; background:var(--primary); color:#fff; box-shadow:0 8px 22px rgba(0,122,255,.26); }
.map-view-switch {
    bottom:calc(55px + var(--safe-bottom)); gap:2px; padding:3px; border:.5px solid rgba(255,255,255,.55);
    border-radius:15px; background:rgba(248,248,250,.82);
    -webkit-backdrop-filter:saturate(180%) blur(24px); backdrop-filter:saturate(180%) blur(24px);
    box-shadow:0 10px 30px rgba(0,0,0,.13);
}
.map-view-btn { min-width:78px; height:34px; border-radius:11px; color:var(--text2); font-weight:650; }
.map-view-btn.active { background:#fff; color:var(--text); box-shadow:0 1px 4px rgba(0,0,0,.14); }
.map-timeline {
    padding-top:calc(110px + var(--safe-top)); padding-bottom:calc(122px + var(--safe-bottom));
    background:linear-gradient(180deg,#F2F7FC 0,#F5F5F7 210px),var(--bg);
}
.timeline-summary {
    margin-bottom:17px; padding:19px; border:.5px solid rgba(60,60,67,.10); border-radius:26px;
    background:rgba(255,255,255,.94); color:var(--text); box-shadow:var(--shadow-card);
}
.timeline-summary::after { border-color:rgba(0,122,255,.06); }
.timeline-summary-kicker { color:var(--primary); font-weight:700; }
.timeline-summary-title { margin-top:7px; font-size:21px; font-weight:720; letter-spacing:-.03em; }
.timeline-summary-meta { gap:6px; margin-top:13px; }
.timeline-summary-chip {
    padding:6px 9px; border:0; border-radius:999px; background:var(--fill); color:var(--text2); font-weight:600;
}
.timeline-list::before { background:linear-gradient(180deg,rgba(0,122,255,.55),rgba(0,122,255,.08)); }
.timeline-item { margin-bottom:12px; }
.timeline-dot { border-color:#F5F5F7; border-radius:13px; box-shadow:0 5px 14px rgba(0,0,0,.10); }
.timeline-card {
    padding:13px 14px; border:.5px solid rgba(60,60,67,.10); border-radius:19px;
    background:rgba(255,255,255,.94); box-shadow:0 5px 18px rgba(0,0,0,.055);
}
.timeline-card:active { background:#F8F8FA; }
.timeline-step { color:var(--primary); font-weight:700; }
.timeline-name { color:var(--text); font-weight:680; letter-spacing:-.015em; }
.timeline-desc { color:var(--text2); }
#mapContainer.local-route-map,#mapContainer.local-route-map.leaflet-container {
    background:radial-gradient(circle at 22% 16%,rgba(10,132,255,.13),transparent 32%),
               radial-gradient(circle at 82% 78%,rgba(52,199,89,.10),transparent 34%),
               linear-gradient(145deg,#ECF5FB 0%,#F5F5F7 48%,#E5EEF2 100%);
}
#mapContainer.local-route-map::before { opacity:.19; }
#mapContainer.local-route-map::after {
    bottom:calc(108px + var(--safe-bottom)); border-radius:999px; background:rgba(28,28,30,.66);
    -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px); font-weight:600; box-shadow:0 8px 22px rgba(0,0,0,.10);
}
.leaflet-container { background:#E9E9ED; }
.rb-marker { box-shadow:0 8px 22px rgba(0,0,0,.16),0 0 0 .5px rgba(0,0,0,.08); }
.rb-marker.selected { box-shadow:0 12px 28px rgba(0,0,0,.20),0 0 0 4px rgba(0,122,255,.30); }
.rb-marker.next { box-shadow:0 10px 24px rgba(0,0,0,.18),0 0 0 3px rgba(48,209,88,.24); }
.rb-marker-index { background:var(--primary); color:#fff; box-shadow:0 3px 9px rgba(0,122,255,.26); }
.rb-marker-distance {
    border:.5px solid rgba(255,255,255,.75); border-radius:8px; background:rgba(250,250,252,.90); color:var(--primary);
    -webkit-backdrop-filter:blur(16px); backdrop-filter:blur(16px); box-shadow:0 4px 14px rgba(0,0,0,.12); font-weight:700;
}
.rb-location-marker-core { background:var(--primary); }
.rb-dist-label span {
    border-radius:8px; background:rgba(255,255,255,.88); color:var(--primary);
    -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px); box-shadow:0 2px 8px rgba(0,0,0,.10);
}

/* 节点详情 */
.node-overlay { background:rgba(0,0,0,.32); -webkit-backdrop-filter:blur(5px); backdrop-filter:blur(5px); }
.node-sheet {
    max-height:91vh; border:.5px solid rgba(255,255,255,.66); border-bottom:0; border-radius:30px 30px 0 0;
    background:rgba(246,246,248,.96); -webkit-backdrop-filter:saturate(180%) blur(30px); backdrop-filter:saturate(180%) blur(30px);
    box-shadow:0 -24px 70px rgba(0,0,0,.24); transition:transform .42s var(--spring);
}
.node-sheet-handle { padding-top:8px; }
.node-sheet-handle span { width:38px; height:5px; background:rgba(60,60,67,.28); }
.node-sheet-topbar { min-height:46px; padding:0 14px 8px 18px; }
.node-sheet-topbar-title { color:var(--text3); font-weight:650; letter-spacing:.06em; }
.node-sheet-close {
    width:32px; height:32px; flex-basis:32px; border:0; background:var(--fill-strong);
    color:var(--text2); box-shadow:none; font-weight:500;
}
.node-sheet-scroll { padding:0 14px calc(24px + var(--safe-bottom)); }
.ns-hero {
    min-height:152px; max-height:228px; margin-bottom:13px; border:.5px solid rgba(255,255,255,.30);
    border-radius:25px; box-shadow:0 12px 32px rgba(0,0,0,.16);
}
.ns-hero::after { background:linear-gradient(180deg,rgba(0,0,0,.04),rgba(0,0,0,.76)); }
.ns-hero-body { padding:18px; }
.ns-kicker { margin-bottom:7px; font-size:10px; font-weight:650; letter-spacing:.04em; }
.ns-name { font-size:23px; font-weight:720; line-height:1.16; letter-spacing:-.035em; }
.ns-status-row { gap:5px; }
.ns-status-pill {
    min-height:23px; padding:4px 8px; border:.5px solid rgba(255,255,255,.20); border-radius:999px;
    background:rgba(255,255,255,.14); font-weight:600;
}
.ns-action-row { gap:7px; margin:13px 0; }
.ns-action {
    min-height:46px; border:0; border-radius:15px; background:#fff; color:var(--text);
    font-weight:650; box-shadow:0 1px 2px rgba(0,0,0,.035);
}
.ns-action.primary { background:var(--primary); color:#fff; box-shadow:0 7px 18px rgba(0,122,255,.22); }
.ns-action.active { border:0; background:rgba(52,199,89,.12); color:#248A3D; }
.ns-day-progress,.ns-info-item,.ns-service-item,.mini-point-card {
    border:.5px solid rgba(60,60,67,.10); background:rgba(255,255,255,.92); box-shadow:0 4px 16px rgba(0,0,0,.045);
}
.ns-day-progress { padding:13px; border-radius:20px; }
.ns-day-progress-title { color:var(--text); font-weight:680; }
.ns-day-progress-count { color:var(--text3); font-weight:600; }
.ns-day-progress-step {
    flex-basis:94px; border:.5px solid rgba(60,60,67,.10); border-radius:14px;
    background:var(--fill); color:var(--text2);
}
.ns-day-progress-step.current { border-color:rgba(0,122,255,.28); background:rgba(0,122,255,.10); color:var(--text); box-shadow:none; }
.ns-day-progress-index { color:var(--primary); }
.ns-next-card {
    padding:15px; border:.5px solid rgba(255,159,10,.18); border-radius:20px;
    background:rgba(255,159,10,.09); box-shadow:none;
}
.ns-next-title { color:#A85D00; font-weight:680; }
.ns-next-name { color:var(--text); font-weight:680; }
.ns-next-chip { background:rgba(255,255,255,.72); color:var(--text2); }
.ns-next-open { background:var(--primary); font-weight:650; }
.ns-section { margin-top:17px; padding-top:17px; border-top-color:var(--line); }
.ns-section-title { margin-bottom:10px; font-size:15px; font-weight:680; letter-spacing:-.015em; }
.ns-section-title::before { width:3px; height:15px; background:var(--primary); }
.ns-section-sub { color:var(--text3); }
.ns-section-text { color:var(--text2); line-height:1.78; letter-spacing:0; }
.ns-info-item { border-radius:16px; padding:12px; }
.ns-info-label { color:var(--text3); }
.ns-info-value { color:var(--text); font-weight:600; }
.ns-tips {
    padding:13px; border:.5px solid rgba(255,159,10,.18); border-radius:18px;
    background:rgba(255,159,10,.09);
}
.ns-tips-title { color:#A85D00; font-weight:680; }
.ns-tips-text { color:#7A4A00; }
.ns-listen-card {
    padding:13px; border:.5px solid rgba(0,122,255,.12); border-radius:18px;
    background:rgba(0,122,255,.08); box-shadow:none;
}
.ns-listen-icon { background:var(--primary); box-shadow:none; }
.ns-listen-title { color:var(--text); font-weight:680; }
.ns-listen-sub { color:var(--text2); }
.ns-listen-btn { min-height:38px; color:var(--primary); box-shadow:none; font-weight:650; }
.ns-listen-btn.active { background:var(--primary); }
.ns-human-audio-card {
    padding:14px; border:.5px solid rgba(255,255,255,.16); border-radius:20px;
    background:linear-gradient(145deg,#1C1C1E,#313136); box-shadow:0 9px 24px rgba(0,0,0,.14);
}
.ns-human-audio-title { font-weight:680; }
.ns-service-item { border-radius:17px; padding:12px; }
.ns-service-item.local { background:rgba(255,255,255,.94); }
.ns-service-name { font-weight:650; }
.ns-service-btn {
    min-height:34px; border-radius:11px; background:rgba(0,122,255,.10);
    color:var(--primary); font-weight:650;
}
.ns-layer-shortcuts,.mini-layer-bar { gap:5px; padding:3px; border-radius:14px; background:var(--fill); }
.ns-layer-shortcut,.mini-layer-btn {
    border:0; border-radius:11px; background:transparent; box-shadow:none; color:var(--text2); font-weight:650;
}
.ns-layer-shortcut.active,.mini-layer-btn.active {
    border:0; background:#fff; color:var(--text); box-shadow:0 1px 4px rgba(0,0,0,.12);
}
.ns-video { border-radius:18px; box-shadow:0 8px 24px rgba(0,0,0,.12); }
.ns-image-btn { border-radius:18px; box-shadow:0 6px 18px rgba(0,0,0,.09); }
.ns-mini-btn {
    min-height:46px; border-radius:15px; background:var(--primary); color:#fff;
    box-shadow:0 7px 18px rgba(0,122,255,.20); font-weight:650;
}
.ns-mini-btn.compact { border:0; background:rgba(0,122,255,.10); color:var(--primary); box-shadow:none; }
.ns-offline-note { border:.5px solid rgba(60,60,67,.10); border-radius:17px; background:var(--fill); color:var(--text2); }
.ns-commercial-disclosure {
    margin:12px 0; padding:12px 13px; border:.5px solid rgba(255,149,0,.24); border-radius:15px;
    background:rgba(255,149,0,.08); color:#6B4200; font-size:12px; line-height:1.6;
}
.ns-commercial-title { margin-bottom:3px; color:#4A3000; font-weight:700; }
.ns-commercial-badge {
    display:inline-flex; align-items:center; margin-right:6px; padding:2px 6px; border-radius:999px;
    font-size:10px; font-weight:700; line-height:1.4;
}
.ns-commercial-badge.partner,.ns-status-pill.commercial-partner { background:rgba(0,122,255,.12); color:#0062CC; }
.ns-commercial-badge.ad,.ns-status-pill.commercial-ad { background:rgba(255,149,0,.14); color:#9A5A00; }
.ns-unlock { border:.5px solid rgba(0,122,255,.22); border-radius:18px; background:rgba(0,122,255,.07); }
.ns-unlock-title { color:var(--text); font-weight:680; }
.ns-unlock button { background:var(--primary); color:#fff; box-shadow:0 7px 18px rgba(0,122,255,.22); }
.mini-title { font-weight:680; letter-spacing:-.02em; }
.mini-map-preview {
    border:.5px solid rgba(60,60,67,.10); border-radius:19px;
    background:linear-gradient(145deg,#EAF5FF,#F5F5F7);
}
.mini-point-card { border-radius:18px; }
.mini-point-name { color:var(--text); font-weight:650; }
.mini-point-tips { border-radius:12px; background:rgba(255,159,10,.09); color:#7A4A00; }
.mini-point-nav {
    min-height:38px; border-radius:12px; background:rgba(0,122,255,.10);
    color:var(--primary); font-weight:650;
}

/* 图片、状态与反馈 */
.node-lightbox {
    padding-top:calc(58px + var(--safe-top)); background:rgba(0,0,0,.94);
    -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px);
}
.node-lightbox-img { border-radius:16px; box-shadow:0 28px 80px rgba(0,0,0,.42); }
.node-lightbox-close,.node-lightbox-nav button {
    border:.5px solid rgba(255,255,255,.18); background:rgba(118,118,128,.28);
    -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px);
}
.app-toast {
    bottom:calc(20px + var(--safe-bottom)); padding:12px 15px; border:.5px solid rgba(255,255,255,.10);
    border-radius:15px; background:rgba(28,28,30,.86);
    -webkit-backdrop-filter:saturate(160%) blur(20px); backdrop-filter:saturate(160%) blur(20px);
    box-shadow:0 12px 32px rgba(0,0,0,.16);
}

@media (min-width:760px) {
    .page {
        max-width:452px; overflow:hidden; border-left:.5px solid rgba(255,255,255,.62);
        border-right:.5px solid rgba(255,255,255,.62); box-shadow:0 22px 70px rgba(0,0,0,.16);
    }
    .page.off-right { transform:translateX(calc(-50% + 452px)); }
    .page.off-left { transform:translateX(calc(-50% - 452px)); }
    .node-sheet { max-width:452px; }
    .app-toast { width:416px; }
}

@media (max-width:360px) {
    .cover-content { padding-left:16px; padding-right:16px; }
    .cover-title { font-size:34px; }
    .cover-mission-card,.cover-route-launch { width:100%; }
    .cover-mission-metric { padding-left:4px; padding-right:4px; }
    .cover-mission-metric strong { font-size:14px; }
    .cover-mission-metric.compact strong { font-size:11px; }
    .map-layer-btn { font-size:10px; }
    .node-sheet-scroll { padding-left:11px; padding-right:11px; }
    .ns-hero { border-radius:21px; }
    .roadbook-notice-card { padding:16px; border-radius:24px; }
    .roadbook-notice-head h2 { font-size:20px; }
    .roadbook-notice-scroll { padding:12px; }
}

@media (max-height:720px) {
    .cover-content { padding-bottom:calc(12px + var(--safe-bottom)); }
    .cover-text-block { padding-top:max(7vh,calc(54px + var(--safe-top))); }
    .cover-eyebrow { min-height:24px; margin-bottom:8px; padding-top:4px; padding-bottom:4px; }
    .cover-title { font-size:clamp(29px,8.8vw,36px); }
    .cover-subtitle { display:none; }
    .cover-route-launch { margin-top:8px; padding-top:8px; padding-bottom:3px; }
    .cover-route-svg { height:60px; }
    .cover-mission-card { margin-top:8px; padding-top:10px; padding-bottom:9px; }
    .cover-mission-grid { margin-top:8px; padding:8px 0; }
    .cover-mission-foot { margin-top:6px; }
    .cover-feature-row { display:none; }
    .cover-action-block { margin-top:8px; }
    .cover-tour-bridge { padding-top:9px; padding-bottom:9px; }
    .cover-actions { margin-top:8px; }
    .cover-enter { min-height:48px; padding-top:12px; padding-bottom:12px; }
    .cover-offline { min-height:40px; padding-top:9px; padding-bottom:9px; }
    .cover-offline-hint { min-height:0; }
    .cover-risk-notice { margin-top:7px; padding-top:7px; }
    .roadbook-notice-card { padding-top:17px; padding-bottom:15px; }
    .roadbook-notice-lead { margin-top:6px; margin-bottom:8px; }
    .roadbook-notice-confirm,.roadbook-notice-actions { margin-top:8px; }
}

@media (prefers-reduced-motion:reduce) {
    *,*::before,*::after {
        scroll-behavior:auto !important;
        animation-duration:.01ms !important;
        animation-iteration-count:1 !important;
        transition-duration:.01ms !important;
    }
}
