:root{color-scheme:dark;--bg:#050b14;--panel:#091321;--panel2:#0d1929;--line:#203148;--text:#f2f7ff;--muted:#8da0b8;--cyan:#57d7ff;--blue:#5287ff;--hot:#ff6b7a;--warm:#ffc35a;--cool:#59d9c2;--shadow:0 24px 70px rgba(0,0,0,.38)}
*{box-sizing:border-box}body{margin:0;min-width:320px;background:radial-gradient(circle at 62% 22%,#0e2038 0,transparent 34%),var(--bg);color:var(--text);font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;font-size:16px;overflow:hidden}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{display:grid;grid-template-columns:264px 1fr;height:100vh}.sidebar{border-right:1px solid var(--line);background:rgba(6,14,25,.94);padding:20px 14px;display:flex;flex-direction:column;z-index:30}.brand{height:54px;display:flex;align-items:center;gap:11px;padding:0 8px 18px}.brand-mark{width:34px;height:34px;border:1px solid #3c7895;background:#102a3d;color:#8be7ff;display:grid;place-items:center;border-radius:10px;box-shadow:0 0 24px rgba(87,215,255,.18)}.brand strong{display:block;font-size:18px}.brand span{display:block;color:var(--muted);font-size:12px;letter-spacing:.12em;margin-top:2px}.nav-item{width:100%;border:0;background:transparent;color:#b9c7d8;min-height:46px;padding:0 12px;border-radius:9px;display:grid;grid-template-columns:24px 1fr auto;align-items:center;text-align:left;gap:8px;margin:3px 0}.nav-item:hover{background:#0e1b2c}.nav-item.active{color:white;background:linear-gradient(90deg,#142943,#0e1e33);box-shadow:inset 3px 0 var(--cyan)}.nav-item b{font-weight:500;font-size:13px;color:#7990aa}.nav-icon{color:var(--item,#7d91aa)}.section-label{display:flex;justify-content:space-between;align-items:center;color:#607590;font-size:12px;letter-spacing:.12em;text-transform:uppercase;margin:24px 10px 8px}.section-label button{width:28px;height:28px;border:1px solid var(--line);border-radius:7px;color:#a9bdd4;background:#0c1726;font-size:19px;line-height:1}.sidebar-footer{margin-top:auto;display:grid;grid-template-columns:1fr 1fr;gap:8px;padding-top:14px;border-top:1px solid var(--line)}.workspace{min-width:0;padding:24px;display:grid;grid-template-rows:auto 1fr;gap:20px}.topbar{display:flex;align-items:end;justify-content:space-between;gap:18px}.eyebrow{font-size:11px;letter-spacing:.17em;color:#62cdee;font-weight:700;margin-bottom:5px}.topbar h1,.modal h2,.drawer h2{margin:0;font-size:28px;letter-spacing:-.03em}.top-actions{display:flex;align-items:center;gap:10px}.stat{min-width:62px;padding:5px 12px;border-left:1px solid var(--line)}.stat span{font-weight:700;font-size:19px;display:block}.stat small{color:var(--muted);font-size:12px}.primary-btn,.secondary-btn,.ghost-btn,.icon-btn{border-radius:8px;min-height:40px;padding:0 15px;border:1px solid transparent;color:var(--text);background:none}.primary-btn{background:linear-gradient(135deg,#168bb4,#536ef0);font-weight:700;box-shadow:0 8px 24px rgba(40,130,220,.2)}.primary-btn:hover{filter:brightness(1.12)}.secondary-btn{border-color:var(--line);background:#0d1928;color:#b8c7d9;font-size:13px}.ghost-btn{min-height:34px;border-color:#263a54;color:#9eb2c9;font-size:13px}.icon-btn{width:40px;padding:0;border-color:var(--line);background:#0d1928;font-size:22px}.map-card{border:1px solid var(--line);background:rgba(7,17,30,.78);box-shadow:var(--shadow);min-height:0;display:grid;grid-template-rows:50px 1fr;overflow:hidden;position:relative}.map-card:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(circle,#29405d 1px,transparent 1px);background-size:28px 28px;opacity:.22}.map-toolbar{padding:0 14px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);z-index:2;background:rgba(8,18,31,.78)}.legend{display:flex;gap:18px;color:var(--muted);font-size:12px}.legend span{display:flex;gap:7px;align-items:center}.dot{width:7px;height:7px;border-radius:50%;display:inline-block}.hot{background:var(--hot)}.warm{background:var(--warm)}.cool{background:var(--cool)}.map-actions{display:flex;gap:8px}.canvas-wrap{position:relative;min-height:0}.canvas-wrap:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at center,rgba(52,108,158,.13),transparent 55%);pointer-events:none}#starMap{width:100%;height:100%;display:block;touch-action:none;position:relative;z-index:1}.map-tip{position:absolute;left:16px;bottom:14px;color:#627995;font-size:12px;z-index:2}.empty-state{position:absolute;inset:0;z-index:3;display:grid;place-content:center;justify-items:center;text-align:center}.empty-state[hidden]{display:none}.empty-star{font-size:44px;color:#67d5ff;text-shadow:0 0 30px #3696cc}.empty-state h2{margin:9px 0 4px}.empty-state p{margin:0 0 18px;color:var(--muted)}.node-label{font-size:13px;fill:#eaf4ff;font-weight:650;pointer-events:none}.node-meta{font-size:10px;fill:#8095ae;pointer-events:none}.edge{stroke:#37506c;stroke-width:1.2;opacity:.72}.edge.glow{stroke:#4eacd0;opacity:.5}.node-hit{cursor:grab}.node-hit:active{cursor:grabbing}.node-core{filter:drop-shadow(0 0 8px currentColor)}.country-ring{fill:none;stroke-width:1;stroke-dasharray:4 6;opacity:.3}.country-count{font-size:10px;fill:#91a6bd}.modal{width:min(460px,calc(100vw - 28px));border:1px solid #2a3e58;background:#091523;color:var(--text);border-radius:13px;box-shadow:var(--shadow);padding:0}.modal::backdrop{background:rgba(0,5,12,.72);backdrop-filter:blur(5px)}.modal form{padding:22px}.modal-head,.drawer-head{display:flex;justify-content:space-between;align-items:start;margin-bottom:22px}.modal label,.drawer label{display:grid;gap:7px;color:#9fb0c4;font-size:13px}.modal input,.drawer input,.drawer select,.drawer textarea{width:100%;background:#07111e;border:1px solid #283b53;color:var(--text);border-radius:8px;min-height:43px;padding:10px 12px;outline:none}.drawer textarea{resize:vertical}.modal input:focus,.drawer input:focus,.drawer select:focus,.drawer textarea:focus{border-color:#4abbe5;box-shadow:0 0 0 3px rgba(74,187,229,.12)}.modal form>label{margin-bottom:16px}.color-picker{display:flex;align-items:center;justify-content:space-between;color:#9fb0c4;font-size:13px}.color-picker>div{display:flex;gap:8px}.color-option{width:25px;height:25px;border-radius:50%;border:2px solid transparent;padding:0}.color-option.selected{border-color:white;box-shadow:0 0 0 3px #233850}.modal-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:24px}.drawer{position:fixed;right:0;top:0;width:min(510px,100vw);height:100vh;background:#091421;border-left:1px solid #29405a;z-index:50;box-shadow:-24px 0 70px rgba(0,0,0,.42);transform:translateX(104%);transition:transform .24s ease;padding:24px;overflow:auto}.drawer.open{transform:none}.drawer h2{font-size:24px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 13px}.full{grid-column:1/-1}.drawer-actions{display:flex;gap:9px;margin-top:24px;padding-top:18px;border-top:1px solid var(--line)}.spacer{flex:1}.backdrop{position:fixed;inset:0;background:rgba(0,5,12,.6);backdrop-filter:blur(3px);z-index:40}.backdrop[hidden]{display:none}.danger-text{color:#ff8792!important}.file-label{display:grid;place-items:center;cursor:pointer}.file-label input{display:none}.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,30px);opacity:0;background:#dff9ff;color:#07202d;border-radius:8px;padding:11px 16px;z-index:80;font-size:14px;font-weight:650;transition:.2s;pointer-events:none}.toast.show{transform:translate(-50%,0);opacity:1}.mobile-only{display:none}
@media(max-width:800px){body{overflow:auto}.app-shell{grid-template-columns:1fr;height:100dvh}.sidebar{position:fixed;inset:0 auto 0 0;width:min(290px,88vw);transform:translateX(-102%);transition:.2s;box-shadow:var(--shadow)}.sidebar.open{transform:none}.mobile-only{display:block}.brand .mobile-only{margin-left:auto}.workspace{padding:14px;gap:14px}.topbar{align-items:center}.topbar h1{font-size:22px}.top-actions .stat{display:none}.primary-btn{padding:0 12px}.map-toolbar{overflow:auto}.legend{display:none}.map-card{min-height:0}.drawer{padding:18px}.form-grid{grid-template-columns:1fr}.full{grid-column:auto}.drawer-actions{position:sticky;bottom:-18px;background:#091421;padding-bottom:18px}.map-tip{display:none}}
@media(max-width:430px){.top-actions .primary-btn{font-size:0}.top-actions .primary-btn:after{content:"＋ 公司";font-size:14px}.workspace{grid-template-rows:auto 1fr}.map-card{height:calc(100dvh - 88px)}.topbar .eyebrow{display:none}}
.search-box{width:270px;height:42px;display:flex;align-items:center;gap:8px;border:1px solid #263b55;background:#081422;border-radius:9px;padding:0 11px;position:relative}.search-box>span{font-size:22px;color:#7188a4;transform:rotate(-18deg)}.search-box input{width:100%;border:0;outline:0;background:transparent;color:var(--text);font-size:14px}.search-box input::placeholder{color:#647a94}.search-results{position:absolute;left:0;right:0;top:48px;background:#0b1726;border:1px solid #2b415c;border-radius:10px;box-shadow:var(--shadow);max-height:360px;overflow:auto;z-index:35;padding:6px}.search-results[hidden]{display:none}.search-result{width:100%;border:0;background:transparent;color:var(--text);display:grid;grid-template-columns:8px 1fr;gap:10px;text-align:left;padding:10px;border-radius:7px}.search-result:hover,.search-result:focus{background:#14263a}.result-dot{width:7px;height:7px;border-radius:50%;margin-top:6px}.search-result strong{font-size:14px;display:block}.search-result small{display:block;color:var(--muted);font-size:12px;margin-top:3px}.search-empty{padding:18px;text-align:center;color:var(--muted);font-size:13px}
.edge{fill:none;opacity:.9}.edge.business{stroke:#57d7ff;stroke-width:2}.edge.referral{stroke:#ae82ff;stroke-width:2;stroke-dasharray:9 7}.edge.project{stroke:#ffbd59;stroke-width:3}.edge.supply{stroke:#59d9c2;stroke-width:2;stroke-dasharray:2 7;stroke-linecap:round}.edge.other{stroke:#91a4ba;stroke-width:1.5;stroke-dasharray:13 5 2 5}.connection-hit{cursor:pointer}.connection-label{font-size:10px;fill:#aebed1;paint-order:stroke;stroke:#07111f;stroke-width:4px;stroke-linejoin:round;pointer-events:none}.connect-btn{border-color:#32718c;color:#8ce5ff}
.modal select{width:100%;background:#07111e;border:1px solid #283b53;color:var(--text);border-radius:8px;min-height:43px;padding:10px 12px;outline:none}.connection-modal{width:min(570px,calc(100vw - 28px))}.connection-modal form>label{display:grid;margin-top:16px}.connection-nodes{display:grid;grid-template-columns:1fr 28px 1fr;gap:10px;align-items:end}.connection-nodes>span{height:43px;display:grid;place-items:center;color:#69cfee}.line-preview{height:34px;margin-top:16px;position:relative}.line-preview:after{content:"";position:absolute;left:7%;right:7%;top:50%;border-top:2px solid #57d7ff}.line-preview.referral:after{border-color:#ae82ff;border-top-style:dashed}.line-preview.project:after{border-color:#ffbd59;border-top-width:3px}.line-preview.supply:after{border-color:#59d9c2;border-top-style:dotted}.line-preview.other:after{border-color:#91a4ba;border-top-style:dashed}.connection-actions{align-items:center}
@media(max-width:1050px){.search-box{width:210px}.top-actions .stat{display:none}}
@media(max-width:800px){.search-box{position:absolute;left:14px;right:14px;top:70px;width:auto;z-index:20}.workspace{padding-top:14px}.map-card{margin-top:54px}.connection-nodes{grid-template-columns:1fr}.connection-nodes>span{height:18px;transform:rotate(90deg)}.map-actions{white-space:nowrap}}
@media(max-width:430px){.search-box{top:64px}.map-card{margin-top:52px}.map-toolbar{padding:0 8px}.ghost-btn{padding:0 9px}}
.zoom-controls{position:absolute;right:16px;bottom:14px;z-index:4;height:38px;display:flex;align-items:center;border:1px solid #2b425d;background:rgba(7,17,30,.9);border-radius:9px;box-shadow:0 10px 28px rgba(0,0,0,.28);overflow:hidden;backdrop-filter:blur(8px)}.zoom-controls button{height:100%;min-width:38px;padding:0 11px;border:0;border-right:1px solid #263b54;background:transparent;color:#b9cce1;font-size:17px}.zoom-controls button:hover{background:#14263a;color:#fff}.zoom-controls button:last-child{border-right:0;font-size:12px;color:#78d9fa}.zoom-controls span{min-width:55px;text-align:center;color:#8fa5bd;font-size:12px;font-variant-numeric:tabular-nums}.canvas-wrap.is-panning #starMap{cursor:grabbing}#starMap{cursor:grab}
@media(max-width:800px){.zoom-controls{right:10px;bottom:10px}.zoom-controls span{min-width:48px}.zoom-controls button{min-width:35px;padding:0 8px}}
