.heatmap-wrap[data-v-2454ffd9]{position:relative}.map-controls[data-v-2454ffd9]{position:absolute;top:10px;right:10px;z-index:10;display:flex;flex-direction:column;gap:1px}.ctrl-btn[data-v-2454ffd9]{width:32px;height:32px;background:#ffffffd9;border:1px solid #d0d8e8;font-size:16px;line-height:1;color:#5a6a8a;cursor:pointer;display:flex;align-items:center;justify-content:center}.ctrl-btn[data-v-2454ffd9]:first-child{border-radius:5px 5px 0 0}.ctrl-btn[data-v-2454ffd9]:last-child{border-radius:0 0 5px 5px}.ctrl-btn[data-v-2454ffd9]:hover{background:#fff;color:#2272cc}.heatmap-chart[data-v-2454ffd9]{width:100%;height:520px}.stats-bar[data-v-703ba627]{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.stat-card[data-v-703ba627]{flex:1;min-width:120px;background:#fff;border:1px solid #d0d8e8;border-radius:8px;padding:16px 20px;box-shadow:0 1px 4px #0000000f}.stat-card.domestic[data-v-703ba627]{border-left:3px solid #4caf50}.stat-card.foreign[data-v-703ba627]{border-left:3px solid #ff9800}.divider[data-v-703ba627]{width:1px;background:#d0d8e8;margin:0 4px;align-self:stretch}.label[data-v-703ba627]{font-size:12px;color:#5a6a8a;margin-bottom:6px}.value[data-v-703ba627]{font-size:24px;font-weight:600;color:#1a2a44;font-variant-numeric:tabular-nums}.drp[data-v-e3f94f74]{position:relative}.drp-trigger[data-v-e3f94f74]{display:flex;align-items:center;gap:6px;background:#f5f7fa;border:1px solid #d0d8e8;border-radius:6px;padding:6px 12px;font-size:13px;color:#2c3e50;cursor:pointer;white-space:nowrap}.drp-trigger[data-v-e3f94f74]:hover{border-color:#2272cc}.drp-icon[data-v-e3f94f74]{font-size:14px}.drp-caret[data-v-e3f94f74]{font-size:11px;color:#8a9bc0;margin-left:2px}.drp-panel[data-v-e3f94f74]{position:absolute;top:calc(100% + 6px);right:0;background:#fff;border:1px solid #d0d8e8;border-radius:8px;box-shadow:0 4px 16px #0000001f;z-index:200;display:flex;overflow:hidden;min-width:320px}.drp-shortcuts[data-v-e3f94f74]{display:flex;flex-direction:column;background:#f8fafd;border-right:1px solid #e8eef5;padding:8px 0;min-width:90px}.shortcut-btn[data-v-e3f94f74]{background:none;border:none;border-radius:0;padding:8px 16px;font-size:13px;color:#2c3e50;text-align:left;cursor:pointer;width:100%}.shortcut-btn[data-v-e3f94f74]:hover{background:#e8f0fb;color:#2272cc}.shortcut-btn.active[data-v-e3f94f74]{color:#2272cc;font-weight:500;background:#e8f0fb}.drp-custom[data-v-e3f94f74]{padding:16px;display:flex;flex-direction:column;gap:12px;flex:1}.drp-row[data-v-e3f94f74]{display:flex;align-items:center;gap:10px}.drp-row label[data-v-e3f94f74]{font-size:12px;color:#8a9bc0;width:28px;flex-shrink:0}.drp-row input[data-v-e3f94f74]{background:#f5f7fa;border:1px solid #d0d8e8;border-radius:5px;padding:5px 8px;font-size:13px;color:#2c3e50;flex:1}.apply-btn[data-v-e3f94f74]{background:#2272cc;color:#fff;border:none;border-radius:6px;padding:7px 0;font-size:13px;cursor:pointer;width:100%;margin-top:4px}.apply-btn[data-v-e3f94f74]:hover{background:#1a5faa}.table-wrap[data-v-4062ffb3]{overflow:auto;border-radius:8px;border:1px solid #d0d8e8;background:#fff;box-shadow:0 1px 4px #0000000f}table[data-v-4062ffb3]{width:100%;border-collapse:collapse;font-size:13px;color:#2c3e50}thead th[data-v-4062ffb3]{background:#f0f4f8;padding:10px 14px;text-align:left;color:#5a6a8a;font-weight:500;white-space:nowrap}thead th.count-h[data-v-4062ffb3]{text-align:right}tbody tr[data-v-4062ffb3]:nth-child(odd){background:#fff}tbody tr[data-v-4062ffb3]:nth-child(2n){background:#f8fafd}tbody tr[data-v-4062ffb3]:hover{background:#e8f0fb}td[data-v-4062ffb3]{padding:9px 14px;border-top:1px solid #edf0f5;white-space:nowrap}.rank[data-v-4062ffb3]{color:#8a9bc0;width:36px;text-align:center}.ip[data-v-4062ffb3]{font-family:monospace;color:#1a6fcc}.count[data-v-4062ffb3]{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;color:#c0520a}.empty[data-v-4062ffb3]{text-align:center;color:#9aaac0;padding:32px}.table-wrap[data-v-9b5352f1]{overflow:auto;border-radius:8px;border:1px solid #d0d8e8;background:#fff;box-shadow:0 1px 4px #0000000f;max-height:360px}table[data-v-9b5352f1]{width:100%;border-collapse:collapse;font-size:13px;color:#2c3e50}thead th[data-v-9b5352f1]{background:#f0f4f8;padding:10px 14px;text-align:left;color:#5a6a8a;font-weight:500;white-space:nowrap;position:sticky;top:0}thead th.num[data-v-9b5352f1]{text-align:right}thead th.sortable[data-v-9b5352f1]{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable[data-v-9b5352f1]:hover{color:#2272cc}.sort-icon[data-v-9b5352f1]{font-size:11px;margin-left:3px}tbody tr[data-v-9b5352f1]:nth-child(odd){background:#fff}tbody tr[data-v-9b5352f1]:nth-child(2n){background:#f8fafd}tbody tr[data-v-9b5352f1]:hover{background:#e8f0fb}td[data-v-9b5352f1]{padding:8px 14px;border-top:1px solid #edf0f5;white-space:nowrap}.rank[data-v-9b5352f1]{color:#8a9bc0;width:36px;text-align:center}.num[data-v-9b5352f1]{text-align:right;font-variant-numeric:tabular-nums;width:90px}.pct[data-v-9b5352f1]{min-width:140px}.bar-wrap[data-v-9b5352f1]{display:flex;align-items:center;gap:6px}.bar[data-v-9b5352f1]{height:8px;background:#4caf50;border-radius:4px;min-width:2px;transition:width .3s}.empty[data-v-9b5352f1]{text-align:center;color:#9aaac0;padding:32px}.trend-chart[data-v-f43e520f]{width:100%;height:260px}.sync-panel[data-v-f7ce4b51]{display:flex;flex-direction:column;gap:16px}.desc[data-v-f7ce4b51]{font-size:13px;color:#5a6a8a;line-height:1.8}code[data-v-f7ce4b51]{background:#f0f4f8;border-radius:3px;padding:1px 5px;font-size:12px;color:#1a6fcc}.sync-btn[data-v-f7ce4b51]{align-self:flex-start;background:#2272cc;color:#fff;border:none;border-radius:6px;padding:8px 22px;font-size:14px;cursor:pointer}.sync-btn[data-v-f7ce4b51]:hover:not(:disabled){background:#1a5faa}.sync-btn[data-v-f7ce4b51]:disabled{opacity:.5;cursor:not-allowed}.file-list[data-v-f7ce4b51]{display:flex;flex-direction:column;gap:6px;background:#f8fafd;border-radius:8px;padding:12px 14px}.file-header[data-v-f7ce4b51]{display:flex;align-items:center;justify-content:space-between;padding-bottom:8px;border-bottom:1px solid #e8eef5;margin-bottom:4px}.check-all[data-v-f7ce4b51]{font-size:13px;color:#5a6a8a;display:flex;align-items:center;gap:6px;cursor:pointer}.file-count[data-v-f7ce4b51]{font-size:12px;color:#9aaac0}.file-item[data-v-f7ce4b51]{font-size:13px}.file-label[data-v-f7ce4b51]{display:flex;align-items:center;gap:10px;cursor:pointer;padding:4px 0}.file-label .fname[data-v-f7ce4b51]{font-family:monospace;color:#2c3e50;flex:1}.ftype[data-v-f7ce4b51]{font-size:11px;background:#e8eef5;border-radius:3px;padding:1px 6px;color:#5a6a8a}.fstatus[data-v-f7ce4b51]{font-size:11px;color:#c0351a}.fstatus.synced[data-v-f7ce4b51]{color:#1e8a4a}.start-btn[data-v-f7ce4b51]{margin-top:10px}.task-list[data-v-f7ce4b51]{display:flex;flex-direction:column;gap:8px}.task-item[data-v-f7ce4b51]{display:flex;align-items:center;gap:12px;background:#f8fafd;border-radius:6px;padding:8px 14px;font-size:13px}.task-item .fname[data-v-f7ce4b51]{color:#2c3e50;font-family:monospace;flex:1}.status[data-v-f7ce4b51]{font-size:12px}.status.pending[data-v-f7ce4b51]{color:#9aaac0}.status.running[data-v-f7ce4b51]{color:#2272cc}.status.done[data-v-f7ce4b51]{color:#1e8a4a}.status.error[data-v-f7ce4b51]{color:#c0351a}.done-msg[data-v-f7ce4b51]{color:#1e8a4a;font-size:14px;font-weight:500}*{box-sizing:border-box;margin:0;padding:0}body{background:#f0f4f8;color:#2c3e50;font-family:PingFang SC,Helvetica Neue,sans-serif}.app[data-v-b39dc42a]{max-width:1400px;margin:0 auto;padding:24px;display:flex;flex-direction:column;gap:20px}header[data-v-b39dc42a]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;background:#fff;border-radius:10px;padding:16px 20px;box-shadow:0 1px 4px #00000014}h1[data-v-b39dc42a]{font-size:20px;font-weight:600;color:#1a2a44}.page-label[data-v-b39dc42a]{font-size:14px;color:#5a6a8a}.platform-tabs[data-v-b39dc42a]{display:flex;gap:6px;flex-wrap:wrap}.tab-btn[data-v-b39dc42a]{background:#f0f4f8;color:#5a6a8a;border:1px solid #d0d8e8;border-radius:6px;padding:6px 14px;font-size:13px;cursor:pointer}.tab-btn[data-v-b39dc42a]:hover{background:#e0eaf8;color:#2272cc}.tab-btn.active[data-v-b39dc42a]{background:#2272cc;color:#fff;border-color:#2272cc}select[data-v-b39dc42a],input[type=date][data-v-b39dc42a]{background:#f5f7fa;border:1px solid #d0d8e8;color:#2c3e50;border-radius:6px;padding:6px 10px;font-size:13px}button[data-v-b39dc42a]{background:#2272cc;color:#fff;border:none;border-radius:6px;padding:7px 18px;font-size:13px;cursor:pointer}button[data-v-b39dc42a]:hover:not(:disabled){background:#1a5faa}button[data-v-b39dc42a]:disabled{opacity:.5;cursor:not-allowed}.filters[data-v-b39dc42a]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.main-row[data-v-b39dc42a]{display:flex;gap:20px;align-items:flex-start}.table-col[data-v-b39dc42a]{flex:1;min-width:0}.chart-col[data-v-b39dc42a]{flex:1;min-width:0;background:#fff;border-radius:10px;padding:16px;box-shadow:0 1px 4px #0000000f}.section-title[data-v-b39dc42a]{font-size:14px;color:#5a6a8a;margin-bottom:10px;font-weight:500}.upload-page[data-v-b39dc42a]{background:#fff;border-radius:10px;padding:24px;box-shadow:0 1px 4px #00000014;max-width:600px}
