:root{
  --bg:#F2F4F8; --card:#FFFFFF; --card2:#F6F8FB; --soft:#EEF1F5;
  --glass:rgba(255,255,255,.84); --glass2:rgba(255,255,255,.94);
  --line:rgba(17,34,68,.08); --line2:rgba(17,34,68,.14);
  --text:#0E1628; --text2:#5A6478; --text3:#99A1B0;
  --blue:#0A6CFF; --blue-l:#EAF2FF; --blue-d:#0050C8; --cyan:#2AA4E0;
  --orange:#FF8A00; --orange-l:#FFF3E3; --orange-d:#C25E00;
  --green:#34C759; --green-d:#1E8E4B; --red:#FF3B30; --violet:#7C5CFA;
  --shadow:0 1px 2px rgba(16,30,60,.04),0 6px 22px rgba(16,30,60,.07);
  --shadow2:0 2px 6px rgba(16,30,60,.06),0 14px 40px rgba(16,30,60,.12);
  --r:16px; --r2:20px;
  --font:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","PingFang SC","Hiragino Sans GB","Helvetica Neue","Microsoft YaHei",sans-serif;
  --sat:env(safe-area-inset-top,0px); --sab:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;overflow:hidden}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
input,select,textarea{font:inherit;color:inherit}
svg{display:block}
.num{font-variant-numeric:tabular-nums;letter-spacing:-.01em}

/* ---------- stage / device frame (desktop) ---------- */
.stage{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;gap:76px;
  background:radial-gradient(900px 600px at 80% 15%,rgba(10,108,255,.10),transparent 60%),radial-gradient(700px 500px at 10% 95%,rgba(255,138,0,.06),transparent 60%),linear-gradient(180deg,#EEF2F7,#E6EBF2)}
.stage-side{position:relative;max-width:380px;color:var(--text2)}
.side-brand{display:flex;align-items:center;gap:10px;color:var(--text);font-weight:600;letter-spacing:.02em}
.side-logo{width:26px;height:26px;border-radius:8px;background:linear-gradient(135deg,#0A6CFF,#4AA3FF);box-shadow:0 4px 12px rgba(10,108,255,.3)}
.stage-side h1{color:var(--text);font-size:34px;line-height:1.25;margin:22px 0 12px;font-weight:700;letter-spacing:-.01em}
.stage-side p{margin:0 0 26px;font-size:15px}
.side-list{list-style:none;padding:0;margin:0 0 28px;display:grid;gap:12px}
.side-list li{font-size:14px;padding-left:16px;position:relative}
.side-list li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;border-radius:50%;background:var(--blue)}
.side-list b{color:var(--text);font-weight:600;margin-right:8px}
.side-note{font-size:12px;color:var(--text3);border-top:1px solid var(--line2);padding-top:14px}
.device{position:relative;width:393px;height:852px;border-radius:58px;padding:11px;background:#16181D;transform-origin:center center;
  box-shadow:0 0 0 1.5px #3a3d45,0 0 0 8px #24272e,0 30px 80px rgba(20,30,60,.28);flex:none}
.device-island{position:absolute;top:21px;left:50%;transform:translateX(-50%);width:120px;height:34px;border-radius:20px;background:#000;z-index:50}
.app{position:relative;width:100%;height:100%;border-radius:47px;overflow:hidden;background:var(--bg);isolation:isolate}
.app{--top-pad:52px}
@media (max-width:1100px){.stage-side{display:none}}
@media (max-height:620px){.stage-side{display:none}}
@media (max-width:520px){
  .stage{display:block;background:var(--bg)}
  .device{width:100%;height:100%;border-radius:0;padding:0;box-shadow:none;background:var(--bg)}
  .device-island,.statusbar{display:none!important}
  .app{border-radius:0}
  .app{--top-pad:calc(var(--sat) + 12px)}
}

/* ---------- status bar ---------- */
.statusbar{position:absolute;top:0;left:0;right:0;height:50px;z-index:40;display:flex;align-items:center;justify-content:space-between;padding:6px 30px 0 40px;font-weight:600;font-size:15px;pointer-events:none;color:#000}
.sb-icons{display:flex;gap:6px;align-items:center}
.sb-signal{width:17px;height:11px;background:#111;clip-path:polygon(0 70%,18% 70%,18% 100%,0 100%,0 70%,29% 50%,47% 50%,47% 100%,29% 100%,29% 50%,59% 28%,76% 28%,76% 100%,59% 100%,59% 28%,88% 0,100% 0,100% 100%,88% 100%)}
.sb-wifi{width:15px;height:11px;border-radius:15px 15px 0 0;background:radial-gradient(circle at 50% 100%,#111 0 2.5px,transparent 3px 4.5px,#111 5px 6.5px,transparent 7px 8.5px,#111 9px 10.5px,transparent 11px);clip-path:polygon(50% 100%,0 0,100% 0)}
.sb-batt{width:25px;height:12px;border:1.5px solid rgba(0,0,0,.35);border-radius:4px;position:relative}
.sb-batt::after{content:"";position:absolute;inset:1.5px;right:5px;background:#111;border-radius:1.5px}

/* ---------- map ---------- */
.map{position:absolute;inset:0;background:#E9EDF2;z-index:0}
.leaflet-container{background:#E9EDF2;font-family:var(--font)}
.tiles-soft{filter:grayscale(1) sepia(.18) hue-rotate(178deg) saturate(1.3) brightness(1.05) contrast(.88)}
.map-vignette{position:absolute;inset:0;pointer-events:none;z-index:2;background:linear-gradient(180deg,rgba(242,244,248,.95) 0%,rgba(242,244,248,.6) 20%,rgba(242,244,248,0) 32%,rgba(242,244,248,0) 70%,rgba(242,244,248,.5) 100%)}
.map-grid{display:none}
.leaflet-control-attribution{background:rgba(255,255,255,.7)!important;color:var(--text3)!important;font-size:9px!important;padding:0 6px!important;border-radius:6px 0 0 0}
.leaflet-control-attribution a{color:var(--text3)!important}
.app .leaflet-bottom{bottom:calc(84px + var(--sab))}

/* branch marker */
.br-mk{position:relative;width:22px;height:22px}
.br-core{position:absolute;inset:5px;border-radius:50%;background:var(--blue);border:2.5px solid #fff;box-shadow:0 2px 6px rgba(10,108,255,.4)}
.br-ring{position:absolute;inset:-2px;border-radius:50%;background:rgba(10,108,255,.14);animation:ping 2.8s ease-out infinite;pointer-events:none}
.br-mk.sel .br-core{inset:1px;border-width:3px;box-shadow:0 3px 10px rgba(10,108,255,.5)}
.br-mk.sel .br-ring{inset:-9px;background:rgba(10,108,255,.18)}
.br-label{position:absolute;left:50%;top:-34px;transform:translateX(-50%);white-space:nowrap;font-size:12.5px;font-weight:600;padding:5px 10px;border-radius:10px;background:#fff;color:var(--blue);box-shadow:0 4px 14px rgba(16,30,60,.16);pointer-events:none}
.br-label::after{content:"";position:absolute;left:50%;bottom:-4px;width:8px;height:8px;background:#fff;transform:translateX(-50%) rotate(45deg)}
@keyframes ping{0%{transform:scale(.6);opacity:1}100%{transform:scale(2.1);opacity:0}}

/* poi marker */
.poi-mk{position:relative;display:flex;align-items:center;justify-content:center;border-radius:50%;font-weight:700;font-size:12px;color:#fff;background:var(--pc);border:2px solid #fff;box-shadow:0 3px 10px color-mix(in srgb,var(--pc) 40%,transparent);transition:transform .2s}
.poi-mk.out{opacity:.5;filter:grayscale(.7);box-shadow:none}
.poi-mk.hl{transform:scale(1.22);z-index:1000}
.poi-mk.hl::before{content:"";position:absolute;inset:-10px;border-radius:50%;background:color-mix(in srgb,var(--pc) 25%,transparent);animation:ping 1.8s ease-out infinite;z-index:-1}
.poi-name{position:absolute;top:calc(100% + 4px);left:50%;transform:translateX(-50%);white-space:nowrap;font-size:11px;font-weight:600;color:#33405A;text-shadow:0 0 3px #fff,0 0 3px #fff,0 0 6px #fff;pointer-events:none}
.poi-mk.out .poi-name{display:none}
.hide-poi-names .poi-name{display:none}

/* ring helpers */
.radar{border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(10,108,255,.10) 0,rgba(10,108,255,.04) 45%,rgba(10,108,255,0) 70%);animation:breathe 4s ease-in-out infinite}
.radar-wrap{pointer-events:none}
@keyframes breathe{0%,100%{transform:scale(.92);opacity:.7}50%{transform:scale(1);opacity:1}}
@keyframes spin{to{transform:rotate(360deg)}}
.ring-label{font-size:10px;font-weight:600;color:var(--blue);background:#fff;border-radius:6px;padding:1px 6px;white-space:nowrap;transform:translate(-50%,-50%);display:inline-block;box-shadow:0 1px 4px rgba(16,30,60,.12)}
.ring-label.off{color:var(--text3);box-shadow:none;background:rgba(255,255,255,.8)}
.fly{stroke-dasharray:4 6;animation:flow 2.4s linear infinite}
@keyframes flow{to{stroke-dashoffset:-20}}
.leaflet-zoom-anim .radar{opacity:0}

/* ---------- top bar ---------- */
.topbar{position:absolute;left:0;right:0;top:0;z-index:30;padding:calc(var(--top-pad)) 14px 0;pointer-events:none}
.topbar>*{pointer-events:auto}
.tb-row{display:flex;align-items:center;gap:10px;padding:0 2px 10px}
.tb-title{flex:1;min-width:0}
.tb-h{font-size:26px;font-weight:700;letter-spacing:-.02em;display:flex;align-items:center;gap:8px}
.pill-orange{font-size:11px;font-weight:600;letter-spacing:.02em;padding:3px 7px;border-radius:7px;color:#fff;background:linear-gradient(135deg,#FF9F2E,#FF7A00)}
.tb-sub{font-size:12px;color:var(--text2);display:flex;align-items:center;gap:6px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live-dot{width:6px;height:6px;border-radius:50%;background:var(--green);flex:none;animation:blink 2s ease-in-out infinite}
@keyframes blink{50%{opacity:.35}}
.icon-btn{width:38px;height:38px;border-radius:13px;display:flex;align-items:center;justify-content:center;background:var(--glass);box-shadow:var(--shadow);backdrop-filter:blur(18px) saturate(1.6);-webkit-backdrop-filter:blur(18px) saturate(1.6)}
.icon-btn.hidden{display:none}
.icon-btn svg{width:19px;height:19px;fill:none;stroke:#3A4559;stroke-width:1.7}
.avatar{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;color:#fff;background:linear-gradient(135deg,#0A6CFF,#4AA3FF);box-shadow:0 3px 10px rgba(10,108,255,.3);border:2px solid #fff;cursor:pointer}
.search{display:flex;align-items:center;gap:8px;height:42px;padding:0 13px;border-radius:14px;background:var(--glass2);box-shadow:var(--shadow);backdrop-filter:blur(18px) saturate(1.6);-webkit-backdrop-filter:blur(18px) saturate(1.6)}
.search svg{width:17px;height:17px;fill:none;stroke:var(--text3);stroke-width:2}
.search input{flex:1;min-width:0;border:0;background:none;outline:none;font-size:15px;color:var(--text)}
.search input::placeholder{color:var(--text3)}
.search input::-webkit-search-cancel-button{-webkit-appearance:none}
.chips{display:flex;gap:7px;overflow-x:auto;padding:10px 16px 6px;scrollbar-width:none;margin:0 -14px}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;height:27px;padding:0 10px;border-radius:14px;font-size:12.5px;font-weight:500;color:var(--text2);background:var(--glass2);box-shadow:0 1px 3px rgba(16,30,60,.08);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);display:flex;align-items:center;gap:5px;transition:all .2s}
.chip.on{color:#fff;background:var(--blue);box-shadow:0 3px 10px rgba(10,108,255,.3)}
.chip .cnt{font-size:10.5px;opacity:.7}
.chip.ind-btn{gap:3px;padding:0 8px 0 9px;color:var(--text)}
.chip.ind-btn svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linejoin:round}
.chip.ind-btn .dd{width:12px;height:12px;opacity:.6}
.chip.ind-btn.act{color:var(--blue);background:var(--blue-l);box-shadow:inset 0 0 0 1.5px var(--blue)}
.ind-group{background:#fff;border-radius:14px;padding:12px 12px 12px;margin-top:10px}
.ind-head{display:flex;align-items:center;gap:8px;font-weight:600;font-size:15px;cursor:pointer}
.ind-head i{width:10px;height:10px;border-radius:3px;flex:none}
.ind-head .cnt{color:var(--text3);font-size:12px;font-weight:500;margin-left:auto}
.ind-all{font-size:12px;font-weight:600;color:var(--blue);padding:3px 8px;border-radius:7px;background:var(--blue-l)}
.ind-all.on{background:var(--blue);color:#fff}
.subs{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.sub{font-size:12.5px;padding:6px 10px;border-radius:9px;background:var(--soft);color:var(--text2)}
.sub small{opacity:.6;margin-left:4px;font-size:11px}
.sub.on{background:var(--blue-l);color:var(--blue);box-shadow:inset 0 0 0 1.5px var(--blue)}
.picker-foot{display:grid;grid-template-columns:1fr 2fr;gap:10px;position:sticky;bottom:calc(-24px - var(--sab));padding:14px 0 calc(24px + var(--sab));background:var(--bg);margin-top:6px}
.picker-foot button{height:46px}
.thinking{color:var(--text3);font-size:13.5px;display:flex;align-items:center;gap:8px}
.thinking::before{content:"";width:14px;height:14px;border-radius:50%;border:2px solid var(--blue);border-top-color:transparent;animation:spin .8s linear infinite}
.search-results{display:none;margin-top:8px;max-height:340px;overflow:auto;border-radius:16px;background:#fff;box-shadow:var(--shadow2)}
.search-results.show{display:block}
.sr-item{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--line);font-size:14px;cursor:pointer}
.sr-item:last-child{border-bottom:0}
.sr-ico{width:28px;height:28px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
.sr-sub{font-size:12px;color:var(--text3);margin-top:1px}
.sr-empty{padding:16px;color:var(--text3);font-size:13px;text-align:center}

.ticker{position:absolute;z-index:20;left:14px;right:72px;top:calc(var(--top-pad) + 146px);height:26px;border-radius:13px;overflow:hidden;background:rgba(255,255,255,.82);box-shadow:0 1px 4px rgba(16,30,60,.08);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-size:11.5px;color:var(--text2);display:flex;align-items:center;pointer-events:none}
.ticker .tk-tag{flex:none;height:100%;display:flex;align-items:center;gap:5px;padding:0 9px;background:var(--orange-l);color:var(--orange-d);font-weight:600;position:relative;z-index:2}
.ticker .tk-tag::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--orange);animation:blink 1.4s infinite}
.ticker .tk-wrap{flex:1;min-width:0;overflow:hidden;height:100%;display:flex;align-items:center}
.ticker .tk-track{white-space:nowrap;animation:marquee 42s linear infinite;padding-left:12px}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ---------- map controls ---------- */
.map-ctrl{position:absolute;right:12px;top:calc(var(--top-pad) + 146px);z-index:20;display:flex;flex-direction:column;gap:8px;align-items:center;transition:opacity .3s}
.seg-v{display:flex;flex-direction:column;border-radius:14px;overflow:hidden;background:var(--glass2);box-shadow:var(--shadow);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.seg-v button{width:46px;height:40px;font-size:15px;font-weight:700;color:var(--text2);display:flex;align-items:baseline;justify-content:center;gap:1px;border-bottom:1px solid var(--line)}
.seg-v button:last-child{border-bottom:0}
.seg-v small{font-size:9px;font-weight:500}
.seg-v button.on{color:#fff;background:var(--blue)}
.ctrl-btn{width:46px;height:46px;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:var(--glass2);box-shadow:var(--shadow);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);font-size:9.5px;color:var(--text2)}
.ctrl-btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8}
.ctrl-btn.on{color:var(--blue);background:var(--blue-l)}

/* ---------- bottom sheet ---------- */
.sheet{position:absolute;left:0;right:0;bottom:0;z-index:25;height:calc(100% - var(--top-pad) - 58px);
  transform:translateY(calc(100% - var(--peek,312px) - 76px - var(--sab)));transition:transform .45s cubic-bezier(.2,.8,.2,1);
  background:rgba(255,255,255,.96);border-radius:24px 24px 0 0;backdrop-filter:blur(26px) saturate(1.6);-webkit-backdrop-filter:blur(26px) saturate(1.6);box-shadow:0 -6px 30px rgba(16,30,60,.10);display:flex;flex-direction:column}
.sheet.full{transform:translateY(0);z-index:32}
.sheet.min{transform:translateY(calc(100% - 118px - 76px - var(--sab)))}
.sheet.dragging{transition:none}
.sheet-handle{height:24px;flex:none;display:flex;align-items:center;justify-content:center;cursor:grab;touch-action:none}
.sheet-handle i{width:38px;height:5px;border-radius:3px;background:#D5DAE2}
.sheet-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 16px calc(96px + var(--sab));overscroll-behavior:contain;scrollbar-width:none}
.sheet-body::-webkit-scrollbar{display:none}
.sheet:not(.full) .sheet-body{overflow:hidden}

.br-head{display:flex;align-items:flex-start;gap:12px}
.br-ico{width:40px;height:40px;border-radius:12px;flex:none;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0A6CFF,#4AA3FF);box-shadow:0 4px 12px rgba(10,108,255,.28)}
.br-ico svg{width:21px;height:21px;fill:none;stroke:#fff;stroke-width:1.8}
.br-name{font-size:18px;font-weight:700;letter-spacing:-.01em;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.br-type{font-size:11px;font-weight:600;padding:2px 7px;border-radius:6px;color:var(--blue);background:var(--blue-l)}
.br-addr{font-size:12px;color:var(--text2);margin-top:2px;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.btn-ghost{flex:none;font-size:13px;font-weight:600;color:var(--blue);padding:7px 11px;border-radius:11px;background:var(--blue-l)}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin:12px 0 10px}
.kpi{border-radius:13px;padding:8px 4px 7px;text-align:center;background:var(--card2)}
.kpi b{display:block;font-size:20px;line-height:1.25;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.kpi span{font-size:11px;color:var(--text3)}
.kpi.hl b{color:var(--orange)}
.kpi.cy b{color:var(--blue)}
.indbar{display:flex;height:8px;border-radius:5px;overflow:hidden;gap:2px;margin-top:8px}
.indbar i{display:block;height:100%;border-radius:2px;transition:flex .5s}
.ind-legend{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:9px;font-size:11.5px;color:var(--text2)}
.ind-legend span{display:flex;align-items:center;gap:5px}
.ind-legend i{width:8px;height:8px;border-radius:3px}
.sec-h{display:flex;align-items:center;justify-content:space-between;margin:18px 0 10px}
.sec-h h3{margin:0;font-size:16px;font-weight:700}
.sec-h small{font-size:12px;color:var(--text3)}
.seg{display:flex;padding:2px;border-radius:10px;background:#E9ECF1;margin:16px 0 8px}
.seg button{flex:1;height:32px;border-radius:8px;font-size:13.5px;font-weight:600;color:var(--text2);transition:all .2s}
.seg button.on{background:#fff;color:var(--text);box-shadow:0 1px 4px rgba(16,30,60,.14)}
.oppty{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:13px;margin-top:2px;line-height:1.45;cursor:pointer;background:var(--orange-l);font-size:13px;color:#8A4B00}
.oppty b{color:var(--orange-d)}
.oppty svg{width:18px;height:18px;flex:none;fill:none;stroke:var(--orange);stroke-width:2}

/* list rows */
.row{display:flex;align-items:center;gap:11px;padding:12px 2px;border-bottom:1px solid var(--line);cursor:pointer}
.row:last-child{border-bottom:0}
.row:active{background:rgba(16,30,60,.03)}
.row-main{flex:1;min-width:0}
.row-t{font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row-s{font-size:12px;color:var(--text3);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row-r{flex:none;text-align:right;font-size:12px;color:var(--text3)}
.row-r b{display:block;font-size:15px;color:var(--text);font-variant-numeric:tabular-nums}
.poi-dot{width:36px;height:36px;border-radius:11px;flex:none;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:var(--pc);background:color-mix(in srgb,var(--pc) 12%,#fff)}
.mini-bar{display:flex;height:4px;border-radius:2px;overflow:hidden;margin-top:6px;width:120px;gap:1px}
.mini-bar i{display:block;height:100%}
.tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.tag{font-size:10.5px;font-weight:600;padding:2px 6px;border-radius:5px;background:var(--blue-l);color:#2F5FD0;white-space:nowrap}
.tag.o{background:var(--orange-l);color:var(--orange-d)}
.tag.g{background:#E7F7EE;color:var(--green-d)}
.tag.v{background:#F1ECFF;color:#6346D6}
.tag.c{background:#E6F5FB;color:#1A7FAD}
.tag.gray{background:var(--soft);color:var(--text2)}
.rel-icons{display:flex;gap:3px;justify-content:flex-end;margin-top:4px}
.rel-icons i{font-style:normal;font-size:10px;font-weight:700;width:17px;height:17px;border-radius:5px;display:flex;align-items:center;justify-content:center}
.ri-b{background:var(--blue-l);color:var(--blue)}.ri-l{background:var(--orange-l);color:var(--orange-d)}.ri-p{background:#E7F7EE;color:var(--green-d)}.ri-n{background:var(--soft);color:var(--text3)}

/* score ring */
.sring{position:relative;width:42px;height:42px;flex:none}
.sring svg{width:42px;height:42px;transform:rotate(-90deg)}
.sring b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}

/* ---------- tab bar ---------- */
.tabbar{position:absolute;left:0;right:0;bottom:0;z-index:28;height:calc(76px + var(--sab));padding:6px 6px calc(18px + var(--sab));display:flex;background:#FAFBFD;border-top:1px solid var(--line);backdrop-filter:blur(24px) saturate(1.6);-webkit-backdrop-filter:blur(24px) saturate(1.6)}
.tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10.5px;color:#9AA2B1}
.tabbar svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.7}
.tabbar button.on{color:var(--blue)}

/* ---------- pages ---------- */
.page{position:absolute;inset:0;z-index:60;background:var(--bg);display:flex;flex-direction:column;transform:translateX(100%);transition:transform .42s cubic-bezier(.2,.8,.2,1);box-shadow:-10px 0 40px rgba(16,30,60,.12)}
.page.in{transform:translateX(0)}
.page.under{transform:translateX(-28%)}
.page::before{content:"";position:absolute;left:0;right:0;top:0;height:260px;pointer-events:none;background:linear-gradient(180deg,#E3EEFF,rgba(242,244,248,0))}
.nav{position:relative;flex:none;display:flex;align-items:center;gap:6px;height:calc(var(--top-pad) + 46px);padding:var(--top-pad) 10px 0;z-index:2;transition:background .2s}
.nav.solid{background:rgba(248,249,252,.88);backdrop-filter:blur(20px) saturate(1.6);-webkit-backdrop-filter:blur(20px) saturate(1.6);border-bottom:1px solid var(--line)}
.nav-back{display:flex;align-items:center;gap:2px;color:var(--blue);font-size:16px;padding:6px 4px;min-width:72px}
.nav-back svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2.2}
.nav-title{flex:1;text-align:center;font-size:16px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;transition:opacity .2s}
.nav-title.show{opacity:1}
.nav-act{min-width:72px;display:flex;justify-content:flex-end}
.page-body{position:relative;flex:1;overflow-y:auto;overflow-x:hidden;padding:0 16px calc(40px + var(--sab));scrollbar-width:none;z-index:1}
.page-body::-webkit-scrollbar{display:none}
.page-body.has-cta{padding-bottom:calc(110px + var(--sab))}
.kind{font-size:12px;font-weight:600;color:var(--blue);letter-spacing:.04em}
.h1{font-size:26px;font-weight:700;letter-spacing:-.02em;margin:4px 0 6px;line-height:1.2}
.sub{font-size:13px;color:var(--text2);line-height:1.5}
.card{border-radius:var(--r2);background:var(--card);box-shadow:var(--shadow);padding:14px;margin-top:12px;position:relative}
.card h4{margin:0 0 10px;font-size:15px;font-weight:700;display:flex;align-items:center;justify-content:space-between}
.card h4 small{font-size:12px;font-weight:500;color:var(--text3)}
.stat4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:14px}
.stat4 div{border-radius:14px;padding:10px 4px;text-align:center;background:#fff;box-shadow:var(--shadow)}
.stat4 b{display:block;font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.stat4 span{font-size:11px;color:var(--text3)}
.donut-wrap{display:flex;align-items:center;gap:16px}
.donut{width:118px;height:118px;flex:none;position:relative}
.donut b{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:22px;font-weight:700}
.donut b small{font-size:10.5px;color:var(--text3);font-weight:500}
.legend{flex:1;display:grid;gap:7px;font-size:12.5px}
.legend div{display:flex;align-items:center;gap:7px}
.legend i{width:9px;height:9px;border-radius:3px;flex:none}
.legend span{flex:1;color:var(--text2)}
.legend em{font-style:normal;font-weight:600;font-variant-numeric:tabular-nums}
.chain-banner{display:flex;gap:10px;align-items:center;padding:12px;border-radius:16px;margin-top:12px;background:#F4F0FF;font-size:13px;line-height:1.5;color:#4B3A8C}
.chain-banner b{color:#3A2A80}
.chain-banner .cb-ico{width:36px;height:36px;border-radius:11px;flex:none;display:flex;align-items:center;justify-content:center;background:#7C5CFA;font-weight:700;color:#fff}
.filters{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:12px -16px 4px;padding:2px 16px 4px}
.filters::-webkit-scrollbar{display:none}
.filters .chip{background:#fff;backdrop-filter:none}
.filters .chip.on{color:#fff;background:var(--blue);box-shadow:0 3px 10px rgba(10,108,255,.28)}
.sort{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--text3);margin:8px 0 2px}
.sort select{background:#fff;border:1px solid var(--line2);border-radius:9px;padding:4px 8px;color:var(--text2);font-size:12px;outline:none}

/* enterprise hero */
.ent-hero{position:relative;border-radius:22px;padding:16px;margin-top:6px;overflow:hidden;background:linear-gradient(165deg,#FFFFFF 0%,#FFFFFF 55%,#FFF6EA 100%);box-shadow:var(--shadow2)}
.ent-hero::after{content:"";position:absolute;right:-70px;top:-70px;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,rgba(10,108,255,.10),transparent 65%)}
.ent-name{font-size:21px;font-weight:700;line-height:1.3;letter-spacing:-.01em;position:relative;z-index:1}
.ent-ind{font-size:12.5px;color:var(--text2);margin-top:4px;position:relative;z-index:1}
.gauge-row{display:flex;align-items:center;gap:14px;margin-top:14px;position:relative;z-index:1}
.gauge{width:132px;height:80px;position:relative;flex:none}
.gauge svg{width:132px;height:80px}
.gauge b{position:absolute;left:0;right:0;bottom:4px;text-align:center;font-size:32px;font-weight:800;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.gauge small{position:absolute;left:0;right:0;bottom:-12px;text-align:center;font-size:10.5px;color:var(--text3)}
.credit{flex:1;min-width:0}
.credit .lbl{font-size:11.5px;color:var(--text2)}
.credit .val{font-size:22px;font-weight:800;color:var(--orange);font-variant-numeric:tabular-nums;margin-top:2px;white-space:nowrap}
.credit .val small{font-size:12px;font-weight:600;margin-left:2px}
.verdict{display:inline-flex;align-items:center;gap:5px;margin-top:8px;font-size:12px;font-weight:600;padding:4px 9px;border-radius:9px}
.verdict.a{background:#E7F7EE;color:var(--green-d)}
.verdict.b{background:var(--orange-l);color:var(--orange-d)}
.verdict.c{background:var(--soft);color:var(--text2)}
.actions{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:12px}
.act{display:flex;flex-direction:column;align-items:center;gap:6px;padding:11px 2px 10px;border-radius:16px;background:#fff;box-shadow:var(--shadow);font-size:11.5px;color:var(--text2)}
.act svg{width:22px;height:22px;fill:none;stroke:var(--blue);stroke-width:1.8}
.act.primary{background:var(--blue);color:#fff;box-shadow:0 6px 16px rgba(10,108,255,.3)}
.act.primary svg{stroke:#fff}
.kv{display:grid;grid-template-columns:1fr 1fr;gap:12px 10px}
.kv div span{display:block;font-size:11.5px;color:var(--text3)}
.kv div b{display:block;font-size:14px;font-weight:600;margin-top:2px}
.timeline{position:relative;padding-left:18px}
.timeline::before{content:"";position:absolute;left:5px;top:6px;bottom:6px;width:1.5px;background:#D9E3F2}
.tl{position:relative;padding:0 0 12px}
.tl:last-child{padding-bottom:0}
.tl::before{content:"";position:absolute;left:-17px;top:5px;width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid var(--blue)}
.tl.bid::before,.tl.contract::before{border-color:var(--orange)}
.tl small{font-size:11.5px;color:var(--text3)}
.tl div{font-size:13.5px;line-height:1.45;margin-top:1px}
.radar-chart{display:flex;align-items:center;gap:16px}
.radar-chart svg{width:190px;height:172px;flex:none;margin-left:-6px}
.rc-list{flex:1;display:grid;gap:7px;font-size:12px}
.rc-list div{display:flex;justify-content:space-between;color:var(--text2)}
.rc-list b{color:var(--text);font-variant-numeric:tabular-nums}
.person{display:flex;align-items:center;gap:12px}
.p-av{width:44px;height:44px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;background:var(--soft);color:var(--text2)}
.p-av.blue{background:linear-gradient(135deg,#0A6CFF,#4AA3FF);color:#fff}
.p-av.or{background:linear-gradient(135deg,#FF9F2E,#FFC266);color:#fff}
.p-main{flex:1;min-width:0}
.p-main b{font-size:15px;display:block}
.p-main span{font-size:12px;color:var(--text3);display:block;margin-top:2px}
.call-btn{width:40px;height:40px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;background:var(--green);box-shadow:0 4px 12px rgba(52,199,89,.35)}
.call-btn svg{width:19px;height:19px;fill:#fff}
.msg-btn{width:40px;height:40px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;background:var(--blue-l);margin-right:2px}
.msg-btn svg{width:18px;height:18px;fill:none;stroke:var(--blue);stroke-width:1.8}
.rel-list{display:grid;gap:0}
.rel{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}
.rel:last-child{border-bottom:0}
.rel span{color:var(--text2)}
.rel em{font-style:normal}
.ok{color:var(--green-d);font-weight:600}.no{color:var(--text3)}.warn{color:var(--orange-d);font-weight:600}
.insight{display:flex;gap:10px;padding:12px;border-radius:14px;margin-top:10px;background:var(--orange-l);font-size:13px;line-height:1.55;color:#7A4300}
.insight svg{width:18px;height:18px;flex:none;fill:none;stroke:var(--orange);stroke-width:2;margin-top:1px}
.insight b{color:var(--orange-d)}
.note{font-size:11.5px;color:var(--text3);margin-top:8px;line-height:1.5}
.btn-sm{font-size:13px;font-weight:600;padding:8px 12px;border-radius:11px;background:var(--blue-l);color:var(--blue)}
.cta{position:absolute;left:0;right:0;bottom:0;z-index:5;padding:14px 16px calc(14px + var(--sab));background:linear-gradient(180deg,rgba(242,244,248,0),rgba(242,244,248,.97) 22%)}
.cta-btn{width:100%;height:52px;border-radius:16px;font-size:16px;font-weight:700;color:#fff;display:flex;align-items:center;justify-content:center;gap:8px;background:linear-gradient(135deg,#0A6CFF,#3D8BFF);box-shadow:0 8px 22px rgba(10,108,255,.32)}
.cta-btn svg{width:20px;height:20px;fill:none;stroke:#fff;stroke-width:2}

/* ---------- AI page ---------- */
.ai-ctx{display:flex;gap:10px;align-items:center;padding:12px;border-radius:16px;background:#fff;box-shadow:var(--shadow);margin-top:4px}
.ai-ctx .p-av{width:38px;height:38px;font-size:14px}
.model-chip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:4px 9px;border-radius:9px;margin-top:10px}
.model-chip.live{background:#E7F7EE;color:var(--green-d)}
.model-chip.off{background:var(--orange-l);color:var(--orange-d)}
.model-chip i{width:6px;height:6px;border-radius:50%;background:currentColor}
.steps{margin:12px 0 4px;display:grid;gap:8px}
.step{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--text3);transition:color .3s}
.step i{width:18px;height:18px;border-radius:50%;flex:none;border:1.5px solid #D5DAE2;display:flex;align-items:center;justify-content:center}
.step.run{color:var(--text)}
.step.run i{border-color:var(--blue);border-top-color:transparent;animation:spin .8s linear infinite}
.step.done{color:var(--text2)}
.step.done i{background:var(--green);border-color:var(--green)}
.step.done i::after{content:"";width:6px;height:3px;border-left:1.8px solid #fff;border-bottom:1.8px solid #fff;transform:rotate(-45deg) translate(1px,-1px)}
.md{font-size:14.5px;line-height:1.75;color:#243049;margin-top:6px}
.md h2{font-size:16.5px;font-weight:700;margin:20px 0 8px;color:var(--text);display:flex;align-items:center;gap:8px}
.md h2::before{content:"";width:4px;height:16px;border-radius:2px;background:var(--blue)}
.md h3{font-size:15px;margin:14px 0 6px;color:var(--text)}
.md p{margin:6px 0}
.md ul,.md ol{margin:6px 0;padding-left:20px}
.md li{margin:4px 0}
.md li::marker{color:var(--blue)}
.md strong{color:var(--text);font-weight:700}
.md blockquote{margin:10px 0;padding:10px 12px;border-radius:12px;background:var(--orange-l);color:#7A4300}
.md table{width:100%;border-collapse:collapse;font-size:13px;margin:8px 0;background:#fff}
.md th,.md td{border:1px solid var(--line2);padding:6px 8px;text-align:left}
.md th{background:var(--blue-l)}
.md code{font-size:12.5px;background:var(--soft);padding:1px 5px;border-radius:5px}
.cursor{display:inline-block;width:7px;height:16px;background:var(--blue);vertical-align:-2px;margin-left:2px;animation:blink 1s steps(2) infinite;border-radius:1px}
.ai-actions{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap}
.ai-actions button{flex:1;min-width:90px;height:40px;border-radius:12px;font-size:13.5px;font-weight:600;background:#fff;box-shadow:var(--shadow);color:var(--text)}
.ask{display:flex;gap:8px;align-items:center;padding:6px 6px 6px 14px;border-radius:16px;background:#fff;box-shadow:var(--shadow2)}
.ask input{flex:1;min-width:0;border:0;background:none;outline:none;font-size:14.5px}
.ask input::placeholder{color:var(--text3)}
.ask button{width:40px;height:40px;border-radius:12px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--blue)}
.ask button svg{width:18px;height:18px;fill:none;stroke:#fff;stroke-width:2.2}
.quick{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0 -16px 8px;padding:0 16px}
.quick::-webkit-scrollbar{display:none}
.quick button{flex:none;font-size:12.5px;padding:6px 10px;border-radius:10px;background:#fff;box-shadow:0 1px 3px rgba(16,30,60,.08);color:var(--blue)}
.qa-q{margin-top:18px;display:flex;justify-content:flex-end}
.qa-q span{max-width:85%;padding:9px 13px;border-radius:16px 16px 4px 16px;background:var(--blue);color:#fff;font-size:14px;line-height:1.5}

/* ---------- sheets / modals ---------- */
.modal-mask{position:absolute;inset:0;z-index:90;background:rgba(10,20,40,.28);opacity:0;transition:opacity .3s}
.modal-mask.in{opacity:1}
.modal{position:absolute;left:0;right:0;bottom:0;z-index:91;max-height:88%;display:flex;flex-direction:column;border-radius:24px 24px 0 0;background:var(--bg);transform:translateY(100%);transition:transform .4s cubic-bezier(.2,.8,.2,1);box-shadow:0 -10px 40px rgba(16,30,60,.18)}
.modal.in{transform:translateY(0)}
.modal-h{display:flex;align-items:center;justify-content:space-between;padding:16px 16px 8px}
.modal-h h3{margin:0;font-size:18px}
.modal-h button{color:var(--blue);font-size:15px;font-weight:600}
.modal-b{overflow-y:auto;padding:4px 16px calc(24px + var(--sab));scrollbar-width:none}
.modal-b::-webkit-scrollbar{display:none}
.form-g{border-radius:14px;background:#fff;margin-top:12px;overflow:hidden}
.form-g .gt{font-size:12px;color:var(--text3);padding:10px 14px 0}
.field{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--line)}
.field:last-child{border-bottom:0}
.field label{width:76px;flex:none;font-size:14px;color:var(--text2)}
.field input,.field select{flex:1;min-width:0;border:0;background:none;outline:none;font-size:14.5px;color:var(--text)}
.field .eye{color:var(--blue);font-size:13px;font-weight:600}
.hint{font-size:12px;color:var(--text3);line-height:1.55;margin:8px 4px 0}
.hint b{color:var(--text2)}
.btn-primary{width:100%;height:48px;border-radius:14px;margin-top:16px;font-size:16px;font-weight:700;color:#fff;background:var(--blue);box-shadow:0 6px 18px rgba(10,108,255,.3)}
.btn-line{width:100%;height:44px;border-radius:14px;margin-top:10px;font-size:15px;font-weight:600;color:var(--blue);background:#fff}
.test-res{margin-top:10px;font-size:13px;line-height:1.5;padding:10px 12px;border-radius:12px;display:none}
.test-res.show{display:block}
.test-res.ok{background:#E7F7EE;color:var(--green-d)}
.test-res.err{background:#FFF0EF;color:#B42318}
.model-pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.model-pills button{font-size:12px;padding:4px 9px;border-radius:8px;background:#fff;border:1px solid var(--line2);color:var(--text)}
.br-pick{display:flex;align-items:center;gap:10px;padding:12px 4px;border-bottom:1px solid var(--line)}
.br-pick.on .row-t{color:var(--blue)}

/* call screen (iOS style, dark) */
.call{position:absolute;inset:0;z-index:120;display:flex;flex-direction:column;align-items:center;padding:calc(var(--top-pad) + 70px) 24px calc(50px + var(--sab));color:#fff;
  background:linear-gradient(180deg,rgba(40,52,74,.96),rgba(18,22,32,.98));backdrop-filter:blur(30px);-webkit-backdrop-filter:blur(30px);opacity:0;transition:opacity .35s}
.call.in{opacity:1}
.call-av{width:104px;height:104px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:40px;font-weight:600;background:linear-gradient(180deg,#9AA6BA,#6C778B);position:relative}
.call-av::before,.call-av::after{content:"";position:absolute;inset:-10px;border-radius:50%;border:2px solid rgba(255,255,255,.3);animation:ping 2.2s ease-out infinite}
.call-av::after{animation-delay:1.1s}
.call-name{font-size:28px;font-weight:600;margin-top:28px}
.call-role{font-size:14px;color:rgba(255,255,255,.7);margin-top:6px;text-align:center}
.call-st{font-size:15px;color:rgba(255,255,255,.85);margin-top:14px;font-variant-numeric:tabular-nums}
.call-tip{font-size:12px;color:rgba(255,255,255,.5);margin-top:8px;text-align:center;line-height:1.5}
.call-grid{display:grid;grid-template-columns:repeat(3,72px);gap:22px 30px;margin-top:auto}
.call-grid button{display:flex;flex-direction:column;align-items:center;gap:7px;font-size:12px;color:rgba(255,255,255,.85)}
.call-grid span{width:66px;height:66px;border-radius:50%;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center}
.call-grid svg{width:26px;height:26px;fill:none;stroke:#fff;stroke-width:1.7}
.hang{width:72px;height:72px;border-radius:50%;background:#FF3B30;margin-top:34px;display:flex;align-items:center;justify-content:center}
.hang svg{width:32px;height:32px;fill:#fff;transform:rotate(135deg)}

/* toast */
.toast{position:absolute;left:50%;top:calc(var(--top-pad) + 10px);z-index:200;transform:translate(-50%,-20px);opacity:0;pointer-events:none;padding:10px 16px;border-radius:14px;font-size:13.5px;font-weight:500;color:#fff;background:rgba(28,32,42,.92);box-shadow:0 10px 30px rgba(16,30,60,.25);transition:all .3s;white-space:nowrap;max-width:90%}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* splash */
.splash{position:absolute;inset:0;z-index:300;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(500px 400px at 50% 38%,#E3EEFF,transparent 70%),#F7F9FC;transition:opacity .6s,visibility .6s}
.splash.out{opacity:0;visibility:hidden}
.splash-orb{position:relative;width:110px;height:110px}
.orb-ring{position:absolute;inset:0;border-radius:50%;border:1.5px solid rgba(10,108,255,.35);animation:spin 6s linear infinite}
.orb-ring.r1{border-top-color:transparent;border-left-color:transparent}
.orb-ring.r2{inset:14px;border-color:rgba(10,108,255,.6);border-right-color:transparent;animation-duration:3.5s;animation-direction:reverse}
.orb-ring.r3{inset:30px;border-color:rgba(255,138,0,.7);border-bottom-color:transparent;animation-duration:2.4s}
.orb-pin{position:absolute;left:50%;top:50%;width:16px;height:16px;margin:-8px;border-radius:50%;background:var(--blue);box-shadow:0 0 0 5px rgba(10,108,255,.15)}
.splash-title{font-size:28px;font-weight:700;margin-top:26px;letter-spacing:.06em;color:var(--text)}
.splash-sub{font-size:13px;color:var(--text2);margin-top:6px;letter-spacing:.06em}
.splash-steps{list-style:none;padding:0;margin:26px 0 0;width:240px;display:grid;gap:7px;min-height:118px}
.splash-steps li{font-size:12.5px;color:var(--text2);display:flex;justify-content:space-between;animation:fadeup .35s ease both}
.splash-steps li b{color:var(--blue);font-variant-numeric:tabular-nums}
@keyframes fadeup{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.splash-bar{width:240px;height:3px;border-radius:2px;background:#E2E7EF;margin-top:14px;overflow:hidden}
.splash-bar i{display:block;height:100%;width:0;background:var(--blue);transition:width .4s}

.empty{padding:30px 10px;text-align:center;color:var(--text3);font-size:13px}
.watermark{font-size:11px;color:var(--text3);text-align:center;margin:22px 0 4px}

.plan-mini{font-size:12px;color:var(--orange-d);margin-top:2px;font-weight:600}
.plan-hd{display:flex;align-items:center;gap:8px}
.plan-name{font-size:17px;font-weight:700}
.chk-list{display:grid}
.chk-row{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
.chk-row:last-child{border-bottom:0}
.chk-ic{width:20px;height:20px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;font-style:normal;font-size:12px;font-weight:700;margin-top:1px}
.chk-ic.ok{background:#E7F7EE;color:var(--green-d)}
.chk-ic.chk{background:var(--orange-l);color:var(--orange-d)}
.chk-ic.no{background:#FFF0EF;color:#B42318}
.chk-main{flex:1;min-width:0}
.chk-main b{display:block;font-size:13.5px;font-weight:600;line-height:1.4}
.chk-main span{display:block;font-size:12px;color:var(--text3);margin-top:1px}
