*{box-sizing:border-box}
:root{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI","Microsoft YaHei",sans-serif;color:#183246;background:#f4f7f8}
html,body{height:100%;margin:0}
body{background:#f4f7f8}
button,input{font:inherit}
.app-shell{height:100%;display:grid;grid-template-columns:minmax(360px,420px) 1fr}
.side{background:#fff;padding:22px 20px calc(24px + env(safe-area-inset-bottom));overflow:auto;border-right:1px solid #dde6eb;z-index:5}
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.eyebrow{margin:0 0 4px;font-size:11px;font-weight:850;letter-spacing:.08em;color:#78909c;text-transform:uppercase}
.side h1{font-size:23px;line-height:1.18;margin:0 0 6px}
.sub{font-size:13px;color:#64748b;margin:0 0 14px;line-height:1.45}
.pwa-badge{flex:0 0 auto;border:1px solid #d1e3e8;background:#eef7f8;color:#0f5875;border-radius:999px;padding:4px 7px;font-size:10px;font-weight:900}
.summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 16px}
.stat{background:#f4f8fa;border:1px solid #e1eaee;border-radius:12px;padding:9px 8px;text-align:center}
.stat strong{display:block;font-size:14px;color:#16425b}.stat span{font-size:11px;color:#718096}
.now-card{margin:0 0 14px;padding:12px 13px;border-radius:14px;background:#eef7fb;border:1px solid #d5e8f0;box-shadow:0 2px 10px rgba(24,50,70,.04)}
.now-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;font-weight:900;color:#173f5f}
.now-time{font-size:10.5px;color:#64748b;font-weight:700}.now-main{margin-top:6px;font-size:13px;line-height:1.5;color:#23465a;font-weight:750}
.budget-box{margin:0 0 14px;padding:12px;border-radius:14px;background:linear-gradient(135deg,#eef7f8,#f9fbfc);border:1px solid #d8e8ed}
.budget-title{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;font-weight:800;color:#173f5f}
.budget-total{font-size:18px;font-weight:900;color:#0f5875;margin-top:5px}.budget-sub{font-size:11px;color:#64748b;line-height:1.45;margin-top:4px}
.budget-pending{display:inline-block;margin-top:7px;padding:4px 7px;border-radius:8px;background:#fff5db;color:#7a5a14;font-size:11px;font-weight:700}
.control-card,.planb{margin:0 0 12px;border:1px solid #dfe8ec;border-radius:13px;background:#fbfcfd;overflow:hidden}
.control-card>summary,.planb>summary{cursor:pointer;padding:11px 12px;font-size:12.5px;font-weight:900;color:#23465a;list-style:none;display:flex;align-items:center;gap:8px;line-height:1.25}
.control-card>summary::-webkit-details-marker,.planb>summary::-webkit-details-marker{display:none}
.control-card>summary:after,.planb>summary:after{content:'+';margin-left:auto;font-size:16px;line-height:1}.control-card[open]>summary:after,.planb[open]>summary:after{content:'−'}
.control-body{padding:0 12px 12px}
.booking-item{padding:9px 0;border-top:1px dashed #e3eaee}.booking-item:first-child{border-top:0}
.booking-title{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;font-weight:850;color:#17324d}
.booking-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:8px}
.field{display:grid;gap:3px;font-size:10.5px;color:#6b7b85}.field.full{grid-column:1/-1}
.field input{width:100%;border:1px solid #d7e3e8;border-radius:8px;padding:8px;background:#fff;color:#183246;font-size:11px}
.checkline{display:flex;align-items:center;gap:7px;font-size:11.5px;color:#315a6b}.checkline input{accent-color:#277c94}
.progress-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:11px;color:#52636f}
.progress-bar{height:7px;border-radius:999px;background:#e8eff2;overflow:hidden}.progress-fill{height:100%;width:0;background:#277c94;transition:width .2s ease}
.check-grid,.emergency-grid{display:grid;gap:7px}.emergency-row{padding:8px 9px;border-radius:9px;background:#fff;border:1px solid #e4eaed;font-size:11px;line-height:1.45;color:#52636f}
.emergency-row strong{color:#17324d}.emergency-row a{color:#0f6b8a;font-weight:800;text-decoration:none}
.offline-note{font-size:10.5px;color:#7a6b44;line-height:1.45;margin-top:8px}
.net-state{font-size:10px;padding:3px 6px;border-radius:999px;background:#eef4f6;color:#52636f;line-height:1.1;flex:0 0 auto}
.plan-grid{display:grid;gap:7px;padding:0 12px 11px}.plan-item{font-size:11px;line-height:1.45;color:#52636f;background:#fff;border-radius:9px;padding:7px 9px;border:1px solid #e7edf0}
.route{position:relative;padding-left:30px}.route:before{content:"";position:absolute;left:12px;top:18px;bottom:18px;width:2px;background:#dbe7ec}
.stop{position:relative;margin-bottom:8px}.marker{position:absolute;left:-30px;top:12px;width:26px;height:26px;border-radius:50%;background:#173f5f;color:#fff;border:3px solid #fff;box-shadow:0 0 0 1px #cbdbe3;display:grid;place-items:center;font-size:12px;font-weight:800;z-index:2}
.stop.pending .marker{background:#94a3b8}.stop-card{background:#fff;border:1px solid #dce7ec;border-radius:14px;padding:12px 13px;box-shadow:0 2px 10px rgba(24,50,70,.045)}
.stop.pending .stop-card{background:#f8fafc;border-style:dashed}.stop.active-now .stop-card{border-color:#6aa8bc;box-shadow:0 0 0 2px rgba(78,151,175,.12),0 4px 16px rgba(24,50,70,.08)}
.stop.completed .stop-card{opacity:.67}.stop-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:5px}
.time{font-weight:800;color:#0f5875;font-size:13px}.duration{font-size:11px;color:#64748b;background:#eef4f6;border-radius:999px;padding:3px 7px;white-space:nowrap}
.place{font-size:15px;font-weight:800;color:#17324d}.detail{font-size:12px;color:#64748b;line-height:1.45;margin-top:4px}
.facts{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}.fact{font-size:11px;line-height:1.25;padding:5px 7px;border-radius:8px;background:#f3f7f9;color:#315a6b;border:1px solid #dde8ed}.fact strong{color:#183246}
.travel-note{font-size:11px;line-height:1.45;color:#64748b;margin-top:8px;padding-top:8px;border-top:1px dashed #e1e8ec}
.source-link{display:inline-block;margin-top:7px;font-size:11px;color:#0f6b8a;text-decoration:none;font-weight:750}
.status-row,.quicktips,.actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.status-chip{font-size:10.5px;font-weight:800;border-radius:999px;padding:4px 7px;border:1px solid #d8e4e9;background:#edf8f0;color:#2f6b43}.status-chip.pending{background:#fff6dc;color:#795b17;border-color:#f0dfad}.status-chip.cutoff{background:#f6f1fb;color:#684b82;border-color:#e4d7ef}
.quicktip{font-size:10.5px;color:#5f6f79;background:#fafbfc;border:1px solid #e8edf0;border-radius:7px;padding:4px 6px}
.action-btn{appearance:none;border:1px solid #bcd6df;background:#e9f5f8;color:#0f5875;text-decoration:none;border-radius:9px;padding:7px 9px;font-size:10.5px;font-weight:850;cursor:pointer}.action-btn.secondary{background:#fff;color:#52636f}.action-btn.complete{margin-left:auto}
.complete-toggle{display:inline-flex;align-items:center;gap:5px;margin-left:auto}.complete-toggle input{accent-color:#277c94}
.hotel-ready{font-size:10.5px;color:#64748b;margin-top:7px;line-height:1.4}
.segment{position:relative;margin:4px 0 8px;padding:7px 10px 7px 38px;min-height:38px;color:#475569;font-size:12px;line-height:1.35}.seg-icon{position:absolute;left:-27px;top:5px;width:24px;height:24px;border-radius:8px;background:#ecf5f7;border:1px solid #cfe2e8;display:grid;place-items:center;font-size:13px;z-index:2}.seg-main{font-weight:800;color:#315a6b}.seg-note{color:#7a8a95;margin-top:1px}
.fx-note,.hint,.install-note{margin-top:12px;padding:10px 11px;border-radius:10px;font-size:11px;line-height:1.5}.fx-note{background:#f7f4ec;color:#6d5b2f;border:1px solid #ebe3cf}.hint{background:#fff6dc;color:#745a15}.install-note{background:#f2f7fb;color:#52636f;border:1px solid #dde9f0}
.mapwrap{position:relative;min-width:0;background:#dcebf0}.fallback,#map{position:absolute;inset:0}.fallback{z-index:3;background:linear-gradient(135deg,#e9f2f5,#dcebf0);display:flex;align-items:center;justify-content:center;padding:24px}.fallback-card{max-width:560px;background:#ffffffed;border:1px solid #cbdde4;border-radius:18px;padding:20px;box-shadow:0 8px 30px #0002;text-align:center}.fallback-title{font-size:18px;font-weight:900;color:#173f5f}.fallback-flow{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;margin-top:14px;font-size:12px;font-weight:800;color:#315a6b}.fallback-flow span{background:#f5f9fa;border:1px solid #dce8ed;border-radius:10px;padding:7px}.fallback-sub{font-size:11px;color:#64748b;line-height:1.45;margin-top:14px}
#map{z-index:2;visibility:hidden}.map-ready #map{visibility:visible}.tiles-ready .fallback{display:none}
.map-engine-status{position:absolute;left:50%;top:max(12px,env(safe-area-inset-top));transform:translateX(-50%);z-index:1050;max-width:84%;padding:7px 10px;border-radius:10px;background:#ffffffee;border:1px solid #d8e4e9;box-shadow:0 2px 10px #0002;color:#52636f;font-size:11px;font-weight:750;text-align:center}.map-engine-status.hidden{display:none}
.map-engine-status button{margin-left:6px;border:0;border-radius:7px;padding:4px 7px;background:#e7f3f6;color:#0f5875;font-weight:850}
.map-tools{position:absolute;left:12px;bottom:12px;z-index:900;display:flex;gap:6px}.map-tool-btn,.fullscreen-exit{border:1px solid #cfdde3;background:#fffffff2;color:#173f5f;border-radius:9px;padding:7px 9px;font-size:11px;font-weight:850;box-shadow:0 2px 9px #0002;cursor:pointer}
.legend{position:absolute;right:16px;bottom:16px;background:#ffffffed;padding:10px 12px;border-radius:12px;font-size:12px;box-shadow:0 3px 16px #0002;z-index:800}.legend div{margin:4px 0}.dot{display:inline-block;width:14px;height:4px;vertical-align:middle;margin-right:6px;border-radius:2px}.drive{background:#277c94}.walk{background:#57917b}.cruise{background:#8a4ba3}
.poi-pin{position:relative;width:42px;height:49px}.poi-num{position:absolute;left:0;bottom:7px;width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:var(--pin,#173f5f);color:#fff;border:3px solid #fff;box-shadow:0 2px 9px #0005;font-weight:900;font-size:12px}.poi-num:after{content:"";position:absolute;left:8px;bottom:-8px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:9px solid var(--pin,#173f5f)}.poi-glyph{position:absolute;right:0;top:0;width:24px;height:24px;border-radius:9px;display:grid;place-items:center;background:#fff;border:1px solid #dce7ec;box-shadow:0 2px 7px #0002;font-size:14px}
.context-pin{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;background:#fffffff2;border:1px solid #ccdbe2;box-shadow:0 2px 8px #0002;font-size:15px}
.leaflet-tooltip.route-badge-tooltip,.leaflet-tooltip.place-label,.leaflet-tooltip.context-label{white-space:nowrap;background:#ffffffef;border:1px solid #d5e2e8;border-radius:9px;padding:5px 7px;box-shadow:0 2px 8px #0002;font-size:11px;font-weight:800;color:#315a6b}.leaflet-tooltip.route-badge-tooltip{border-radius:999px}.leaflet-tooltip.route-badge-tooltip:before{display:none}
.map-pop{min-width:210px;line-height:1.45}.map-pop .mp-title{font-weight:900;color:#17324d;margin-bottom:4px}.map-pop .mp-time{font-size:12px;color:#0f5875;font-weight:800;margin-bottom:6px}.map-pop .mp-tip{margin-top:7px;padding-top:6px;border-top:1px dashed #e1e8ec;font-size:11px;color:#64748b}
.mobile-dock{display:none}.fullscreen-exit{display:none;position:fixed;right:14px;top:max(14px,env(safe-area-inset-top));z-index:11001;padding:9px 11px}
.map-fullscreen .mapwrap{display:block!important;position:fixed!important;inset:0!important;z-index:11000!important;min-height:100dvh!important}.map-fullscreen .side{visibility:hidden}.map-fullscreen .fullscreen-exit{display:block}.map-fullscreen .mobile-dock{display:none!important}
@media(max-width:780px){
  html,body{height:100%;overflow:hidden}.app-shell{height:100vh;height:100dvh;grid-template-columns:1fr;grid-template-rows:minmax(240px,44dvh) minmax(0,1fr);overflow:hidden}
  .mapwrap{order:1;min-height:240px;overflow:hidden;z-index:1}.side{order:2;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;border-right:0;border-top:1px solid #dde6eb;z-index:1;padding:16px 14px calc(88px + env(safe-area-inset-bottom))}
  .legend{display:none}.booking-grid{grid-template-columns:1fr}.field.full{grid-column:auto}
  .mobile-dock{display:flex;position:fixed;left:50%;bottom:max(12px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:1000;background:#ffffffee;border:1px solid #d7e3e8;border-radius:14px;padding:5px;box-shadow:0 5px 22px #0003;gap:4px}
  .mobile-dock button{border:0;background:transparent;color:#52636f;border-radius:10px;padding:8px 13px;font-size:12px;font-weight:850;white-space:nowrap}.mobile-dock button.active{background:#e9f4f7;color:#0f5875}
  .mobile-map-mode .app-shell{grid-template-rows:1fr}.mobile-map-mode .side{display:none}.mobile-map-mode .mapwrap{display:block;min-height:100dvh}
  .mobile-itinerary-mode .app-shell{grid-template-rows:1fr}.mobile-itinerary-mode .mapwrap{display:none}.mobile-itinerary-mode .side{display:block;grid-row:1;border-top:0}
  .leaflet-control-layers-expanded{max-width:72vw;max-height:38dvh;overflow:auto}.leaflet-popup-content-wrapper{max-width:88vw}
}
