:root{color:#16211b;background:#f4f7f5;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;letter-spacing:0}*{box-sizing:border-box}body{margin:0;min-width:320px}button,input,select{font:inherit}.shell{width:min(1280px,calc(100vw - 32px));margin:0 auto;padding:24px 0 40px}.toolbar{display:grid;grid-template-columns:minmax(240px,360px) 1fr;gap:24px;align-items:end;padding:18px 0 20px;border-bottom:1px solid #d9e1dc}.brand{display:flex;align-items:center;gap:14px}.brand-mark{display:grid;width:48px;height:48px;place-items:center;color:#f7fbf8;background:#1f6f55;border-radius:8px}h1,h2,p{margin:0}h1{font-size:28px;line-height:1.05}h2{font-size:16px;line-height:1.25}.brand p,.map-head span,.section-title span,.metric span{color:#66746d}.target-form{display:grid;grid-template-columns:minmax(220px,1fr) 150px;gap:12px;align-items:end}label{display:grid;gap:7px;color:#4e5e56;font-size:13px;font-weight:700}input,select{width:100%;height:44px;color:#16211b;background:#fff;border:1px solid #cad6d0;border-radius:8px;outline:none;padding:0 12px}input:focus,select:focus{border-color:#1f6f55;box-shadow:0 0 0 3px #1f6f5524}button{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;color:#fff;background:#1f6f55;border:0;border-radius:8px;cursor:pointer;font-weight:800}button:disabled{cursor:progress;opacity:.72}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.notice{display:flex;gap:8px;align-items:center;margin:18px 0 0;padding:12px 14px;color:#782d24;background:#fff0ed;border:1px solid #f1c8bf;border-radius:8px}.overview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:18px 0}.metric,.map-panel,.timeline,.results{background:#fff;border:1px solid #d9e1dc;border-radius:8px}.metric{display:grid;grid-template-columns:28px 1fr;grid-template-rows:auto auto;column-gap:8px;row-gap:2px;min-height:86px;padding:16px}.metric svg{grid-row:1 / span 2;color:#1f6f55}.metric strong{min-width:0;overflow-wrap:anywhere;font-size:22px}.workspace{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(420px,.92fr);gap:16px}.map-panel,.timeline,.response-board,.results{padding:16px}.map-panel{color:#16211b;background:#fff;border-color:#d9e1dc;box-shadow:none}.map-head,.section-title{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:14px}.map-head span{min-width:0;max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-panel .map-head span{color:#66746d}.china-map-2d{--map-bg-top: #fbfdfc;--map-bg-bottom: #f1f6f3;--map-grid: rgba(31, 111, 85, .055);--map-glow: rgba(31, 111, 85, .1);--map-border: #dfe8e3;--map-title: #173a30;--map-muted: #66746d;--province-fill: #d9eee5;--province-stroke: #ffffff;--province-active: #9ddfbe;--province-active-stroke: #0f7d5c;--province-hover: #b6e8d1;--province-hover-stroke: #24956f;--node-text: #173a30;--node-text-stroke: rgba(255, 255, 255, .92);position:relative;height:430px;margin-bottom:10px;overflow:hidden;background:linear-gradient(var(--map-grid) 1px,transparent 1px),linear-gradient(90deg,var(--map-grid) 1px,transparent 1px),radial-gradient(circle at 50% 46%,var(--map-glow),transparent 52%),linear-gradient(180deg,var(--map-bg-top) 0%,var(--map-bg-bottom) 100%);background-size:100% 28px,34px 100%,auto,auto;border:1px solid var(--map-border);border-radius:8px;isolation:isolate}.china-map-2d.theme-blueprint{--map-bg-top: #f8fbff;--map-bg-bottom: #eef5ff;--map-grid: rgba(40, 119, 209, .06);--map-glow: rgba(40, 119, 209, .12);--map-border: #d8e6f7;--map-title: #18375f;--map-muted: #607083;--province-fill: #dbeafe;--province-stroke: #ffffff;--province-active: #a9cdf8;--province-active-stroke: #246fc4;--province-hover: #c0dcff;--province-hover-stroke: #2877d1;--node-text: #18375f}.china-map-2d.theme-warm{--map-bg-top: #fffdf8;--map-bg-bottom: #f8f1e8;--map-grid: rgba(169, 116, 61, .07);--map-glow: rgba(208, 135, 63, .14);--map-border: #eadfce;--map-title: #4b3926;--map-muted: #7b6a57;--province-fill: #f0e6d5;--province-stroke: #fffaf1;--province-active: #efd0a8;--province-active-stroke: #b96c2e;--province-hover: #f6d9b2;--province-hover-stroke: #d0873f;--node-text: #4b3926}.china-map-2d.theme-dark{--map-bg-top: #101820;--map-bg-bottom: #17232d;--map-grid: rgba(113, 238, 209, .065);--map-glow: rgba(56, 198, 162, .16);--map-border: #2b414e;--map-title: #e7fbf4;--map-muted: #9bb3bd;--province-fill: #233342;--province-stroke: #14212a;--province-active: #226f68;--province-active-stroke: #67f0cf;--province-hover: #2e7e77;--province-hover-stroke: #8cf4da;--node-text: #f2fff9;--node-text-stroke: rgba(10, 20, 26, .88)}.china-map-2d.theme-tcptest{--map-bg-top: #fbfdfc;--map-bg-bottom: #f1f6f3;--map-grid: rgba(31, 111, 85, .055);--map-glow: rgba(31, 111, 85, .1);--map-border: #dfe8e3;--map-title: #173a30;--map-muted: #66746d}.china-map-2d.theme-china-red{--map-bg-top: #fff8ed;--map-bg-bottom: #fbe5dc;--map-grid: rgba(201, 49, 40, .075);--map-glow: rgba(217, 45, 32, .16);--map-border: #f1c8b8;--map-title: #5c1111;--map-muted: #8b4a3a}.china-map-2d.theme-golden-red{--map-bg-top: #fffdf3;--map-bg-bottom: #f7ead1;--map-grid: rgba(180, 83, 9, .075);--map-glow: rgba(217, 119, 6, .15);--map-border: #e9d1a6;--map-title: #4a1b0b;--map-muted: #7d5a27}.china-map-2d.theme-imperial{--map-bg-top: #2b1714;--map-bg-bottom: #160f0e;--map-grid: rgba(255, 209, 102, .075);--map-glow: rgba(212, 175, 55, .16);--map-border: #5c3128;--map-title: #fff7df;--map-muted: #e6c77a}.map-chart{position:absolute;inset:14px 18px 10px;z-index:1}.map-chart canvas{border-radius:6px}.south-china-sea-inset{position:absolute;right:15px;bottom:14px;z-index:2;width:106px;height:112px;overflow:hidden;color:var(--map-muted);pointer-events:none}.south-china-sea-chart{position:absolute;inset:6px 6px 20px;display:block;width:92px;height:84px}.south-china-sea-inset span{position:absolute;right:0;bottom:5px;left:0;color:inherit;font-size:11px;font-weight:800;line-height:1;text-align:center;text-shadow:0 1px 2px color-mix(in srgb,var(--map-bg-top) 92%,transparent)}.map-corner-star{position:absolute;top:18px;right:22px;z-index:3;width:34px;height:34px;pointer-events:none}.map-corner-star img{display:block;width:100%;height:100%;object-fit:contain;opacity:.78;filter:drop-shadow(0 5px 10px rgba(170,65,35,.18))}.map-custom-label{position:absolute;z-index:4;color:#fff7df;font-size:14px;font-weight:950;line-height:1;pointer-events:none;text-shadow:0 1px 0 rgba(80,33,24,.96),1px 0 0 rgba(80,33,24,.96),0 -1px 0 rgba(80,33,24,.96),-1px 0 0 rgba(80,33,24,.96),0 2px 6px rgba(0,0,0,.18);transform:translate(-50%,-50%)}.inner-mongolia-label{left:56.5%;top:36.5%}.echarts-map-tooltip{display:grid;gap:4px;min-width:96px;padding:8px 10px;color:#fff;font-size:12px;line-height:1.25}.echarts-map-tooltip strong{font-size:14px}.echarts-map-tooltip span{color:#ffffffd1}.map-svg{display:block;width:100%;height:100%;padding:18px 22px 12px}.map-title{position:absolute;z-index:3;top:12px;left:12px;display:inline-flex;max-width:calc(100% - 24px);gap:8px;align-items:center;padding:7px 9px;color:var(--map-title);background:color-mix(in srgb,var(--map-bg-top) 82%,transparent);border:1px solid color-mix(in srgb,var(--map-border) 78%,transparent);border-radius:8px;box-shadow:0 8px 20px #16211b0f;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:12px;pointer-events:none}.map-title strong,.map-title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-title span{color:var(--map-muted);font-weight:800}.province-shape{fill:var(--province-fill);stroke:none;stroke-linejoin:round;cursor:pointer;transition:fill .18s ease}.province-shape.active{fill:var(--province-active)}.province-shape.hovered{fill:var(--province-hover)}.province-boundary,.province-highlight{fill:none;pointer-events:none;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.province-boundary{stroke:var(--province-stroke);stroke-width:1.2}.province-highlight.active{stroke:var(--province-active-stroke);stroke-width:1.65}.province-highlight.hovered{filter:drop-shadow(0 4px 8px rgba(29,74,59,.16));stroke:var(--province-hover-stroke);stroke-width:2.15}.node-marker{color:#16815f;pointer-events:none}.node-marker.normal{color:#f0b93a}.node-marker.slow,.node-marker.bad{color:#ff5d4d}.node-pulse{fill:currentColor;filter:url(#node-glow);opacity:.18;transform-origin:center;animation:node-pulse 1.8s ease-out infinite}.node-dot{fill:currentColor;stroke:#fff;stroke-width:2.2}.node-marker text{fill:var(--node-text);paint-order:stroke;stroke:var(--node-text-stroke);stroke-width:4px;font-size:13px;font-weight:900}@keyframes node-pulse{0%{opacity:.28;transform:scale(.7)}to{opacity:0;transform:scale(1.55)}}.map-placeholder:before{position:absolute;inset:70px 12% 54px;content:"";background:radial-gradient(circle at 52% 50%,rgba(31,111,85,.14),rgba(31,111,85,.045) 54%,transparent 56%),linear-gradient(180deg,#ffffff70,#ffffff14);border:1px solid rgba(31,111,85,.12);border-radius:8px}.map-placeholder:after{position:absolute;top:14px;left:14px;color:#6d7c75;content:"地图加载中";font-size:12px;font-weight:800}.map-theme-switcher{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}.map-theme{width:auto;height:34px;padding:0 10px 0 8px;color:#4b5b53;background:#f7faf8;border:1px solid #dbe6e0;border-radius:8px;font-size:12px;font-weight:900}.map-theme:hover{background:#eef6f2}.map-theme.active{color:#0f5d45;background:#e2f5ec;border-color:#83c6a6;box-shadow:0 0 0 2px #1f6f551a}.map-theme:nth-child(2).active,.map-theme:nth-child(3).active{color:#7f1d1d;background:#fff3df;border-color:#f0bc7a;box-shadow:0 0 0 2px #d977061f}.map-theme:nth-child(4).active{color:#fff7df;background:#3a211c;border-color:#b98f3d;box-shadow:0 0 0 2px #d4af3729}.theme-swatches{display:inline-flex;gap:2px;padding:2px;background:#ffffffb8;border:1px solid rgba(22,33,27,.1);border-radius:999px}.theme-swatches i{display:block;width:10px;height:10px;border-radius:999px}.map-legend{display:flex;flex-wrap:wrap;gap:8px 12px;width:fit-content;max-width:100%;margin:0 0 14px;padding:8px 10px;color:#53635b;background:#f7faf8;border:1px solid #dfe8e3;border-radius:8px;font-size:12px;font-weight:800}.map-legend span{display:inline-flex;align-items:center;gap:5px}.legend-dot{display:inline-block;width:9px;height:9px;border-radius:999px}.legend-dot.fast{background:#16815f}.legend-dot.normal{background:#f0b93a}.legend-dot.slow{background:#ff5d4d}.legend-dot.idle{background:#8a9890}.dns-summary{margin-top:12px;padding:14px;background:#f8fbf9;border:1px solid #d9e3de;border-radius:8px}.dns-summary-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:11px;border-bottom:1px solid #e1e9e4}.dns-summary-head h3{margin:0;color:#173a30;font-size:15px}.dns-summary-head span{display:block;margin-top:3px;color:#708078;font-size:12px}.dns-summary-head b{color:#0f7354;font-size:13px;white-space:nowrap}.dns-list{display:grid;gap:7px;margin-top:10px}.dns-entry{display:grid;grid-template-columns:10px minmax(116px,1fr) minmax(96px,auto) minmax(112px,auto);align-items:center;gap:10px;min-height:38px;padding:8px 10px;color:#66746d;background:#fff;border:1px solid #e0e8e3;border-radius:6px;font-size:12px}.dns-entry.active{border-color:#9bcfb5;background:#f4fbf7}.dns-entry strong{color:#17251f;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:13px}.dns-entry b{color:#0f7354;font-size:12px;font-weight:800;text-align:right}.dns-dot{width:8px;height:8px;background:#9aa7a0;border-radius:999px}.dns-entry.active .dns-dot{background:#17815f}.dns-empty{display:grid;min-height:74px;place-items:center;color:#74827a;font-size:13px}.response-board{min-height:100%;overflow:hidden;background:#fff;border:1px solid #d9e1dc;border-radius:8px;padding:0}.response-board-top{display:grid;grid-template-columns:auto auto auto minmax(130px,1fr);gap:8px;align-items:center;min-height:72px;padding:14px 16px;border-bottom:1px solid #e1e7e4}.response-tabs{display:inline-grid;grid-template-columns:repeat(2,64px);gap:6px}.response-tabs button{height:40px;color:#4b5563;background:#f0f2f5;border-radius:8px;font-size:15px;font-weight:900}.response-tabs button.active{color:#fff;background:#3b82f6;box-shadow:0 8px 18px #3b82f638}.response-count{display:inline-flex;min-width:50px;height:40px;align-items:center;justify-content:center;color:#2563eb;background:#eff6ff;border-radius:8px;font-size:20px;font-weight:950}.response-board-top>span{color:#4b5563;font-size:13px;font-weight:900;white-space:nowrap}.response-progress{position:relative;height:28px;overflow:hidden;background:#e5e7eb;border-radius:999px}.response-progress i{position:absolute;inset:0 auto 0 0;min-width:0;background:linear-gradient(90deg,#3b82f6,#60a5fa);border-radius:inherit;transition:width .28s cubic-bezier(.22,1,.36,1)}.response-progress.running i:after{position:absolute;inset:0;content:"";background:linear-gradient(90deg,transparent,rgba(255,255,255,.45),transparent);animation:board-scan .9s linear infinite}.response-progress b{position:absolute;inset:0 12px 0 auto;display:inline-flex;align-items:center;color:#fff;font-size:16px;font-weight:950}.response-table{display:grid;overflow:hidden}.response-row{position:relative;display:grid;grid-template-columns:minmax(118px,.92fr) minmax(136px,1.32fr) minmax(136px,1.32fr) minmax(78px,.5fr);align-items:center;min-height:50px;border-bottom:1px solid #e1e5ea;color:#374151;background:#fff;transform-origin:center}.response-row.head{min-height:52px;color:#6b7280;background:#f8fafc;font-weight:950}.response-row:not(.head){animation:leaderboard-hit .42s ease-out both;animation-delay:var(--board-row-delay, 0ms)}.response-row.active:before{position:absolute;inset:0 auto 0 0;width:4px;content:"";background:#3b82f6;animation:board-strike .52s ease-out both;animation-delay:var(--board-row-delay, 0ms)}.response-row span,.response-row strong,.response-row b{min-width:0;overflow:hidden;padding:0 10px;text-overflow:ellipsis;white-space:nowrap}.response-row strong,.response-row b{color:#374151;font-size:16px;font-weight:950}.response-row strong{display:flex;align-items:center;gap:8px}.response-row strong i{display:inline-grid;flex:0 0 auto;width:28px;height:24px;place-items:center;color:#2563eb;background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;font-size:12px;font-style:normal;font-weight:950}.response-row:not(.active) strong i{color:#9ca3af;background:#f3f4f6;border-color:#e5e7eb}.response-row b{text-align:center}.response-row span{font-size:14px;font-weight:850}.empty-state{display:grid;grid-template-columns:20px 1fr;gap:8px;align-items:center;min-height:38px;color:#4d5d55;background:#f6f8f7;border:1px solid #e1e7e4;border-radius:8px;padding:8px 10px}@keyframes leaderboard-hit{0%{opacity:0;transform:translateY(11px) scale(.982)}55%{opacity:1;transform:translateY(-3px) scale(1.008)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes board-strike{0%{opacity:0;transform:scaleY(.2)}35%{opacity:1;transform:scaleY(1)}to{opacity:.55;transform:scaleY(1)}}@keyframes board-scan{0%{transform:translate(-100%)}to{transform:translate(100%)}}.results{margin-top:16px}.table-wrap{overflow-x:auto}table{width:100%;min-width:820px;border-collapse:collapse}th,td{height:44px;padding:0 10px;text-align:left;border-bottom:1px solid #e5ebe8;white-space:nowrap}th{color:#5a6a62;font-size:13px}.node-cell{display:grid;gap:2px;min-width:168px}.node-cell strong{font-size:14px}.node-cell span{color:#66746d;font-size:12px}.empty-cell{color:#6d7c75;text-align:center}.status{display:inline-flex;min-width:58px;height:24px;align-items:center;justify-content:center;border-radius:999px;font-size:12px;font-weight:800}.status.ok{color:#0f5d45;background:#dff4eb}.status.bad{color:#842b22;background:#ffe7e1}@media(max-width:900px){.toolbar,.target-form,.overview,.workspace{grid-template-columns:1fr}.dns-entry{grid-template-columns:10px minmax(0,1fr) auto}.dns-entry b{grid-column:2 / -1;text-align:left}.china-map-2d{height:330px}.south-china-sea-inset{right:10px;bottom:10px;width:84px;height:90px}.south-china-sea-chart{inset:5px 5px 18px;width:74px;height:67px}.south-china-sea-inset span{bottom:4px;font-size:10px}.map-legend{justify-content:center}}
