.page-graph{--bg:#eef1ef;--paper:#fbfbfa;--ink:#15201c;--muted:#6a766f;--line:#d8dfdb;--line2:#c9d2cd;--red:#d0021b;--green:#1a7f37;--accent:#0f766e;--orange:#ea580c;--youzi:#0f766e;--seat:#64748b;--shared:#b45309;--teal:#0f766e;--teal-deep:#115e59}.page-graph,.page-graph *,.page-graph :after,.page-graph :before{box-sizing:border-box}.page-graph{font-family:PingFang SC,Microsoft YaHei,Noto Sans SC,sans-serif;background:radial-gradient(900px 420px at 100% -8%,rgba(15,118,110,.1) 0,transparent 55%),radial-gradient(700px 380px at 0 100%,rgba(15,118,110,.06) 0,transparent 50%),var(--bg);color:var(--ink);font-size:13px;line-height:1.45}.page-graph .topbar{flex:0 0 auto;z-index:20;align-self:center;background:rgba(251,251,250,.72);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid rgba(201,210,205,.75);height:52px;display:flex;align-items:center;gap:12px;max-width:1280px;width:100%;margin:0 auto;padding:0 12px;box-sizing:border-box}.page-graph .brand-mark{font-family:Songti SC,"Noto Serif SC","Source Han Serif SC",serif;font-weight:700;font-size:17px;letter-spacing:.02em;color:var(--ink);text-decoration:none;white-space:nowrap;flex-shrink:0;cursor:pointer}.page-graph .brand-mark em{font-style:normal;color:var(--teal);margin-left:1px}.page-graph .topbar-spacer{flex:1 1;min-width:8px}.page-graph .topbar .nav-links{display:flex;gap:2px;align-items:center;flex-shrink:0}.page-graph .topbar .nav-links a{font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;padding:6px 11px;white-space:nowrap;border:0;background:transparent}.page-graph .topbar .nav-links a:hover{color:var(--ink)}.page-graph .topbar .nav-links a.active{color:var(--teal-deep);font-weight:600}.page-graph .topbar .page-tools{display:flex;align-items:center;gap:8px;flex-shrink:0}.page-graph .btn{border:1px solid var(--line2);background:rgba(255,255,255,.8);font:inherit;font-size:12px;padding:6px 12px;cursor:pointer;white-space:nowrap}.page-graph .btn:hover{background:#fff}.page-graph #btn-open-arch,.page-graph .btn.active{background:var(--teal);color:#fff;border-color:var(--teal)}.page-graph #btn-open-arch:hover{background:var(--teal-deep);border-color:var(--teal-deep)}.page-graph .btn-link{color:var(--accent);border-color:transparent;background:transparent;text-decoration:underline;padding-left:4px;padding-right:4px}.page-graph .search{display:flex;align-items:center;gap:6px;border:1px solid var(--line2);background:rgba(255,255,255,.65);padding:4px 10px;min-width:160px;max-width:240px}.page-graph .search input{border:0;outline:0;background:transparent;font:inherit;font-size:12px;width:180px}.page-graph .stage-wrap{position:relative;min-width:0;background:radial-gradient(ellipse 80% 60% at 50% 40%,rgba(255,255,255,.55) 0,transparent 70%),transparent;border-right:1px solid rgba(201,210,205,.75)}.page-graph #canvas{display:block;width:100%;height:100%;cursor:-webkit-grab;cursor:grab}.page-graph #canvas.dragging{cursor:-webkit-grabbing;cursor:grabbing}.page-graph .toolbar{left:12px;flex-wrap:wrap;max-width:calc(100% - 72px)}.page-graph .toolbar,.page-graph .zoom-btns{position:absolute;top:12px;z-index:5;display:flex;gap:6px}.page-graph .zoom-btns{right:12px;flex-direction:column}.page-graph .zoom-btns .btn{min-width:40px;min-height:40px;padding:0;background:rgba(255,255,255,.92);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);font-size:18px;line-height:1}.page-graph .drawer-handle{display:none}.page-graph .legend{position:absolute;left:12px;bottom:12px;z-index:5;background:rgba(255,255,255,.92);border:1px solid var(--line2);padding:8px 12px;font-size:11px;color:var(--muted);line-height:1.6}.page-graph .legend b{color:var(--ink);font-weight:600}.page-graph .legend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px;vertical-align:middle}.page-graph .legend .dot.y{background:var(--youzi)}.page-graph .legend .dot.s{background:var(--seat)}.page-graph .legend .dot.sh{background:var(--shared)}.page-graph .hint{position:absolute;right:12px;bottom:12px;z-index:5;font-size:11px;color:var(--muted);background:rgba(255,255,255,.85);padding:4px 8px;border:1px solid var(--line)}.page-graph .side{background:rgba(251,251,250,.82);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);overflow:auto;padding:14px 14px 24px;display:flex;flex-direction:column;gap:12px}.page-graph .side h2{font-size:15px;font-weight:700}.page-graph .side .badge{display:inline-block;font-size:11px;padding:2px 8px;border:1px solid var(--line2);color:var(--muted);margin-bottom:6px}.page-graph .side .badge.youzi{border-color:#99f6e4;background:#f0fdfa;color:var(--youzi)}.page-graph .side .badge.seat{border-color:#e2e8f0;background:#f8fafc;color:var(--seat)}.page-graph .side .badge.shared{border-color:#fde68a;background:#fffbeb;color:var(--shared)}.page-graph .kv{display:grid;grid-gap:6px;gap:6px;font-size:12px}.page-graph .kv .row{display:flex;justify-content:space-between;gap:10px;border-bottom:1px solid var(--line);padding:5px 0}.page-graph .kv .k{color:var(--muted)}.page-graph .kv .v{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-align:right;max-width:62%;word-break:break-all}.page-graph .list{display:flex;flex-direction:column;gap:4px}.page-graph .list button{text-align:left;border:1px solid var(--line);background:#fafafa;font:inherit;font-size:12px;padding:7px 9px;cursor:pointer}.page-graph .list button:hover{border-color:#bbb;background:#fff}.page-graph .list button .meta{color:var(--muted);font-size:11px;margin-top:2px}.page-graph .empty{color:var(--muted);font-size:12px;padding:8px 0}.page-graph .disclaimer{font-size:11px;color:var(--muted);border-top:1px solid var(--line);padding-top:10px;margin-top:auto}.page-graph .stats-mini{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:6px;gap:6px}.page-graph .stats-mini .cell{border:1px solid var(--line);padding:8px;background:#fafafa}.page-graph .stats-mini .k{font-size:11px;color:var(--muted)}.page-graph .stats-mini .v{font-size:16px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.page-graph .toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:#222;color:#fff;font-size:12px;padding:8px 14px;opacity:0;pointer-events:none;transition:opacity .2s;z-index:50}.page-graph .toast.show{opacity:1}@media (max-width:860px){.page-graph .main{grid-template-columns:1fr;grid-template-rows:1fr}.page-graph .stage-wrap{border-right:0}.page-graph .search input{width:100%}.page-graph .legend{bottom:64px;max-width:calc(100% - 24px)}.page-graph .hint{bottom:64px;display:none}.page-graph .side{position:fixed;left:0;right:0;bottom:0;z-index:25;max-height:min(70vh,520px);border-top:1px solid var(--line2);border-radius:12px 12px 0 0;padding-bottom:calc(16px + env(safe-area-inset-bottom));transform:translateY(calc(100% - 56px));transition:transform .2s ease}.page-graph .side.drawer-open{transform:translateY(0)}.page-graph .drawer-handle{display:flex;align-items:center;justify-content:center;position:relative;width:100%;min-height:44px;margin:-6px 0 8px;padding-top:10px;border:0;background:transparent;font:inherit;font-size:13px;font-weight:600;cursor:pointer;color:var(--ink)}.page-graph .drawer-handle:before{content:"";display:block;width:36px;height:4px;border-radius:2px;background:var(--line2);position:absolute;top:8px;left:50%;transform:translateX(-50%)}}.page-graph{height:100vh;height:100dvh;overflow:hidden;display:flex;flex-direction:column}.page-graph .main{flex:1 1;min-height:0;display:grid;grid-template-columns:1fr 300px;grid-gap:0;gap:0}.page-graph .stage-wrap{min-height:0;height:100%}.page-graph .toolbar .btn{background:rgba(255,255,255,.92);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:var(--ink)}.page-graph .toolbar .btn.active{background:var(--accent,#0f766e);color:#fff;border-color:var(--accent,#0f766e)}@media (max-width:860px){.page-graph .main{grid-template-columns:1fr;grid-template-rows:1fr}}