:root{
  --bg:#05070f;--ink:#e8ecf6;--soft:#c5cbdb;--dim:#7d8599;--faint:#4d5468;
  --line:rgba(255,255,255,.08);--card:rgba(255,255,255,.04);
  --biz:#ff7a9a;--rhino:#5ee0e6;--ip:#a78bfa;--space:#f5b85a;--org:#7ee08a;--concept:#c9d1e6;
  --panel:420px;
  font-family:"PingFang SC","Hiragino Sans GB","Noto Sans SC","Microsoft YaHei",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;background:var(--bg);color:var(--ink);overflow:hidden;-webkit-font-smoothing:antialiased}
button,input,textarea{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:0}
#sky{position:fixed;inset:0;width:100%;height:100%;z-index:0}
[hidden]{display:none!important}

/* 登录 */
.login{position:fixed;inset:0;display:grid;place-items:center;z-index:2;padding:16px}
.login-card{width:min(360px,100%);padding:36px 30px 30px;border:1px solid var(--line);border-radius:24px;background:rgba(12,16,30,.78);backdrop-filter:blur(14px);display:flex;flex-direction:column;gap:14px;box-shadow:0 0 80px rgba(120,140,255,.08)}
.login-mark{display:flex;gap:8px;justify-content:center;margin-bottom:4px}
.login-mark span{width:9px;height:9px;border-radius:50%;background:var(--biz);box-shadow:0 0 14px var(--biz)}
.login-mark span:nth-child(2){background:var(--rhino);box-shadow:0 0 14px var(--rhino)}
.login-mark span:nth-child(3){background:var(--ip);box-shadow:0 0 14px var(--ip)}
.login-card h1{text-align:center;font-size:26px;letter-spacing:8px;font-weight:600}
.login-card p{text-align:center;color:var(--dim);font-size:13px;margin-bottom:8px}
.login-card label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--dim)}
.login-card input{padding:11px 14px;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.04);outline:none;font-size:15px}
.login-card input:focus{border-color:rgba(160,180,255,.45)}
.login-card button{margin-top:6px;padding:12px;border-radius:12px;background:linear-gradient(90deg,rgba(255,122,154,.85),rgba(167,139,250,.85));font-weight:600;letter-spacing:4px}
.login-err{min-height:18px;color:#ff9ab0;font-size:13px;text-align:center}

/* 框架 */
.app{position:fixed;inset:0;z-index:1;display:grid;grid-template-columns:1fr var(--panel);grid-template-rows:auto auto 1fr}
.top{grid-column:1/2;display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:26px 32px 10px}
.brand h1{font-size:28px;letter-spacing:6px;font-weight:600}
.brand p{margin-top:6px;color:var(--dim);font-size:13px;letter-spacing:.5px}
.tools{display:flex;align-items:center;gap:10px}
.search{display:flex;align-items:center;gap:8px;padding:7px 14px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.03);width:230px}
.search svg{width:15px;height:15px;fill:none;stroke:var(--dim);stroke-width:1.8;flex:none}
.search input{background:none;border:0;outline:none;width:100%;font-size:14px}
.seg{display:flex;border:1px solid var(--line);border-radius:999px;padding:3px;background:rgba(255,255,255,.03)}
.seg button{padding:6px 16px;border-radius:999px;font-size:14px;color:var(--dim)}
.seg .on{background:rgba(255,255,255,.1);color:var(--ink)}
.ghost{font-size:13px;color:var(--faint);padding:6px 8px}
.ghost:hover{color:var(--dim)}
.cats{grid-column:1/2;display:flex;gap:8px;padding:6px 32px 8px;overflow-x:auto;scrollbar-width:none}
.cats::-webkit-scrollbar{display:none}
.chip{flex:none;display:inline-flex;align-items:center;gap:8px;padding:6px 13px;border-radius:999px;border:1px solid var(--line);font-size:13.5px;color:var(--soft);background:rgba(255,255,255,.02);transition:.2s}
.chip i{width:8px;height:8px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}
.chip b{font-weight:400;color:var(--faint);font-size:12px}
.chip:hover{border-color:rgba(255,255,255,.2)}
.chip.on{border-color:var(--c);color:#fff;background:color-mix(in srgb,var(--c) 14%,transparent);box-shadow:0 0 18px color-mix(in srgb,var(--c) 25%,transparent)}
.chip.on b{color:var(--soft)}

.stage{grid-column:1/2;grid-row:3;position:relative;overflow:hidden;touch-action:none;cursor:grab}
.stage.drag{cursor:grabbing}
#map{width:100%;height:100%;display:block}
.zoom{position:absolute;left:28px;bottom:26px;display:flex;flex-direction:column;gap:6px}
.zoom button{width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:rgba(10,13,24,.7);color:var(--soft);font-size:17px}
.zoom button:hover{border-color:rgba(255,255,255,.25)}
.hint{position:absolute;left:76px;bottom:32px;font-size:12.5px;color:var(--faint);pointer-events:none}
.tip{position:absolute;pointer-events:none;max-width:280px;padding:9px 12px;border-radius:10px;background:rgba(10,13,26,.92);border:1px solid var(--line);font-size:13px;line-height:1.5;color:var(--soft);transform:translate(-50%,calc(-100% - 18px))}
.tip b{display:block;color:#fff;font-weight:500;margin-bottom:2px}

/* 星图里的元素 */
.ring{fill:none;stroke:rgba(160,180,255,.07);stroke-dasharray:2 8}
.ringlab{fill:rgba(160,170,200,.32);font-size:12px}
.edge{fill:none;transition:opacity .35s}
.edge.ai{stroke-dasharray:5 5}
.edge.hot{animation:flow 1.6s linear infinite}
@keyframes flow{to{stroke-dashoffset:-20}}
.elab rect{fill:rgba(8,11,22,.9);stroke:rgba(255,255,255,.25)}
.elab text{fill:#ffd9e2;font-size:12.5px}
.node{cursor:pointer;transition:opacity .35s}
.node .halo{animation:twinkle 4s ease-in-out infinite}
@keyframes twinkle{0%,100%{opacity:.16}50%{opacity:.34}}
.node .lab{fill:var(--soft);font-size:13.5px;paint-order:stroke;stroke:rgba(5,7,15,.85);stroke-width:4px;stroke-linejoin:round}
.node .dt{fill:var(--faint);font-size:11px}
.node:hover .lab,.node.sel .lab{fill:#fff}
.node.sel .lab{font-size:16px;font-weight:600}
.cnode .lab{fill:#8f98ad;font-size:12px;paint-order:stroke;stroke:rgba(5,7,15,.85);stroke-width:4px}
.dim{opacity:.1}
.mute{opacity:.35}
.selring{fill:none;animation:pulse 2.6s ease-out infinite}
@keyframes pulse{from{opacity:.7;transform:scale(.7)}to{opacity:0;transform:scale(1.7)}}

/* 右侧面板 */
.panel{grid-column:2;grid-row:1/4;position:relative;margin:18px 18px 18px 0;border:1px solid var(--line);border-radius:22px;background:linear-gradient(180deg,rgba(18,23,40,.88),rgba(9,12,22,.9));backdrop-filter:blur(12px);overflow:hidden;display:flex;flex-direction:column}
#panelBody{overflow-y:auto;padding:28px 26px 40px;flex:1;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.12) transparent}
.close{position:absolute;right:14px;top:12px;width:32px;height:32px;border-radius:50%;font-size:22px;color:var(--dim);z-index:2;display:none}
.close:hover{background:rgba(255,255,255,.06)}
.tag{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;letter-spacing:.5px;color:var(--c)}
.tag i{width:8px;height:8px;border-radius:50%;background:var(--c);box-shadow:0 0 10px var(--c)}
.panel h2{font-size:24px;line-height:1.4;margin:12px 0 6px;font-weight:600}
.meta{color:var(--dim);font-size:13px;line-height:1.6}
.sec{margin:26px 0 10px;font-size:12.5px;color:var(--dim);letter-spacing:2px;display:flex;justify-content:space-between;align-items:center}
.sec small{letter-spacing:0;color:var(--faint)}
.quote{font-size:15px;line-height:1.85;color:#d3d8e5;border-left:2px solid color-mix(in srgb,var(--c) 70%,transparent);padding-left:14px;white-space:pre-wrap}
.gist{font-size:15px;line-height:1.85;color:#d3d8e5;background:rgba(94,224,230,.06);border:1px solid rgba(94,224,230,.18);border-radius:14px;padding:13px 15px}
.gist small{display:block;margin-top:8px;color:var(--faint);font-size:12px}
.status{display:inline-block;margin-top:12px;font-size:12.5px;padding:4px 12px;border-radius:999px;border:1px solid rgba(255,255,255,.16);color:#d8dce8}
.more{margin-top:10px;font-size:13px;color:#8fd8ff}
.more:hover{text-decoration:underline}
.doc{margin-top:12px;font-size:14px;line-height:1.85;color:#c3c9d8}
.doc p{margin:0 0 12px}
.doc h5{font-size:14.5px;color:#fff;margin:18px 0 8px;font-weight:600}
.doc blockquote{border-left:2px solid rgba(255,255,255,.18);padding-left:12px;color:#aab2c4;margin:0 0 12px}
.doc ul{padding-left:18px;margin:0 0 12px}
.doc b{color:#fff;font-weight:600}
.links{display:flex;flex-direction:column;gap:8px}
.lk{display:block;text-align:left;width:100%;font-size:14px;line-height:1.55;padding:11px 13px;border-radius:12px;background:var(--card);border:1px solid transparent;transition:.2s}
.lk:hover{border-color:rgba(255,255,255,.14);background:rgba(255,255,255,.06)}
.lk .rel{font-size:12px;color:var(--c);margin-right:6px}
.lk b{font-weight:500;color:#fff}
.lk small{display:block;color:var(--dim);font-size:12.5px;margin-top:3px}
.lk em{font-style:normal;font-size:11px;color:var(--faint);margin-left:6px}
.fb{display:flex;flex-direction:column;gap:8px}
.fbi{padding:11px 13px;border-radius:12px;background:rgba(255,200,120,.06);border:1px solid rgba(255,200,120,.14);font-size:14.5px;line-height:1.75;white-space:pre-wrap}
.fbi small{display:flex;justify-content:space-between;margin-top:6px;color:var(--faint);font-size:12px;white-space:normal}
.fbi small button{color:var(--faint);font-size:12px}
.fbi small button:hover{color:#ff9ab0}
.fbform textarea{width:100%;min-height:96px;resize:vertical;padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:rgba(255,255,255,.035);outline:none;font-size:14.5px;line-height:1.7}
.fbform textarea:focus{border-color:rgba(255,200,120,.4)}
.fbrow{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:8px}
.fbrow span{font-size:12px;color:var(--faint);line-height:1.5}
.btn{flex:none;padding:8px 18px;border-radius:999px;background:rgba(255,200,120,.16);border:1px solid rgba(255,200,120,.35);color:#ffe2b8;font-size:13.5px}
.btn:disabled{opacity:.5}
.notice{margin-top:10px;font-size:12.5px;color:#ffd9a0;line-height:1.6}
.ov h2{font-size:22px}
.ov p{color:var(--soft);font-size:14px;line-height:1.85;margin-top:10px}
.cards{display:flex;flex-direction:column;gap:8px}
.card{display:block;width:100%;text-align:left;padding:12px 14px;border-radius:14px;background:var(--card);border:1px solid rgba(255,255,255,.05);transition:.2s}
.card:hover{background:rgba(255,255,255,.07)}
.card .t{font-size:14.5px;line-height:1.5;color:#fff}
.card .t i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:7px;vertical-align:2px;background:var(--c);box-shadow:0 0 8px var(--c)}
.card .r{margin-top:5px;font-size:12.5px;color:#9aa3b6;line-height:1.6}
.card .c{margin-top:5px;font-size:12px;color:var(--c)}
.card .d{float:right;font-size:11.5px;color:var(--faint);margin-left:8px}

/* 时间线 */
.list{grid-column:1/2;grid-row:3;overflow-y:auto;padding:6px 32px 60px}
.day{margin:22px 0 10px;font-size:12.5px;color:var(--dim);letter-spacing:1.5px;display:flex;align-items:center;gap:10px}
.day::after{content:"";flex:1;height:1px;background:var(--line)}
.list .cards{gap:10px;max-width:880px}
.list .card{padding:15px 17px}
.empty{color:var(--dim);font-size:14px;padding:30px 0}

@media (max-width:860px){
  :root{--panel:100%}
  .app{grid-template-columns:1fr}
  .top{padding:14px 16px 6px;flex-wrap:wrap;align-items:center}
  .brand h1{font-size:21px;letter-spacing:4px}
  .brand p{font-size:12px;margin-top:3px}
  .tools{width:100%}
  .search{flex:1;width:auto}
  .cats{padding:6px 16px 8px}
  .list{padding:4px 16px 60px}
  .hint{display:none}
  .zoom{left:14px;bottom:18px}
  .panel{position:fixed;inset:auto 0 0 0;height:88%;margin:0;border-radius:22px 22px 0 0;transform:translateY(102%);transition:transform .3s ease;z-index:5}
  .panel.open{transform:none}
  .close{display:block}
  #panelBody{padding:22px 18px 50px}
  .panel h2{font-size:21px}
}
