:root{--bg: #ffffff;--panel: #f5f7fa;--panel-2: #fafbfc;--border: #e8ebf0;--border-strong: #dfe3ea;--overlay: rgba(31, 35, 41, .45);--primary: #2f6fed;--primary-hover: #1d5fe0;--primary-active: #1a54c9;--primary-soft: #eaf1fe;--primary-soft-2: #f4f8ff;--green: #18a058;--green-soft: #e8f7ef;--red: #d03050;--red-soft: #fcebef;--amber: #f0a020;--amber-soft: #fdf3e3;--text: #1f2329;--text-2: #6b7280;--text-3: #9aa1ad;--text-inv: #ffffff;--r-sm: 6px;--r: 8px;--r-md: 10px;--r-lg: 12px;--shadow-1: 0 1px 2px rgba(31, 35, 41, .04), 0 1px 3px rgba(31, 35, 41, .05);--shadow-2: 0 4px 12px rgba(31, 35, 41, .07), 0 2px 4px rgba(31, 35, 41, .04);--shadow-3: 0 12px 32px rgba(31, 35, 41, .12), 0 4px 10px rgba(31, 35, 41, .06);--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;--mono: "SF Mono", "JetBrains Mono", "Fira Code", ui-monospace, Menlo, Consolas, monospace;--ease: cubic-bezier(.22, .61, .36, 1);--dur: .18s;--sidebar-w: 220px;--sidebar-w-collapsed: 64px}[data-theme=dark]{--bg: #101218;--panel: #181b22;--panel-2: #1c2029;--border: #272c36;--border-strong: #313846;--overlay: rgba(0, 0, 0, .6);--primary: #5a8df0;--primary-hover: #6f9af2;--primary-active: #4f82e8;--primary-soft: #1b2741;--primary-soft-2: #161e30;--green: #36ad6a;--green-soft: #15291f;--red: #e05572;--red-soft: #2c1820;--amber: #f0a838;--amber-soft: #2a2113;--text: #e6e8ec;--text-2: #9aa1ad;--text-3: #6b7280;--shadow-1: 0 1px 2px rgba(0, 0, 0, .3);--shadow-2: 0 4px 12px rgba(0, 0, 0, .4);--shadow-3: 0 12px 32px rgba(0, 0, 0, .55)}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%}body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}#root{height:100%}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.mono{font-family:var(--mono)}a{color:var(--primary);text-decoration:none}a:hover{color:var(--primary-hover)}::selection{background:var(--primary-soft)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:6px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--text-3)}::-webkit-scrollbar-track{background:transparent}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInRight{0%{transform:translate(24px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes drawerIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes modalIn{0%{transform:translate(-50%,-50%) translateY(12px) scale(.98);opacity:0}to{transform:translate(-50%,-50%) translateY(0) scale(1);opacity:1}}@keyframes pulseRing{0%{box-shadow:0 0 #d0305073}70%{box-shadow:0 0 0 6px #d0305000}to{box-shadow:0 0 #d0305000}}@keyframes shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}@keyframes spin{to{transform:rotate(360deg)}}.fade-up{animation:fadeUp var(--dur) var(--ease) both}.fade-in{animation:fadeIn var(--dur) var(--ease) both}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.container{max-width:1280px;margin:0 auto;padding:0 24px}.muted{color:var(--text-2)}.faint{color:var(--text-3)}.row{display:flex;align-items:center}.col{display:flex;flex-direction:column}.gap-4{gap:4px}.gap-6{gap:6px}.gap-8{gap:8px}.gap-12{gap:12px}.gap-16{gap:16px}.gap-24{gap:24px}.grow{flex:1}.wrap{flex-wrap:wrap}.center{align-items:center;justify-content:center}.between{justify-content:space-between}.end{justify-content:flex-end}.h1{font-size:22px;font-weight:650;letter-spacing:-.01em;margin:0}.h2{font-size:17px;font-weight:620;letter-spacing:-.005em;margin:0}.h3{font-size:14px;font-weight:600;margin:0}.eyebrow{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3)}.label{font-size:12.5px;color:var(--text-2)}.card{background:var(--bg);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-1);transition:box-shadow var(--dur) var(--ease),transform var(--dur) var(--ease),border-color var(--dur) var(--ease)}.card-pad{padding:18px 20px}.card-hover{cursor:pointer}.card-hover:hover{box-shadow:var(--shadow-2);transform:translateY(-2px);border-color:var(--border-strong)}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.btn{--bc: var(--border-strong);--bg-c: var(--bg);--fg: var(--text);display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;padding:0 14px;font-family:var(--font);font-size:13.5px;font-weight:520;line-height:1;color:var(--fg);background:var(--bg-c);border:1px solid var(--bc);border-radius:var(--r);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),color var(--dur) var(--ease),transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.btn:active{transform:translateY(.5px) scale(.99)}.btn:hover{background:var(--panel)}.btn svg{width:15px;height:15px}.btn.sm{height:28px;padding:0 10px;font-size:12.5px}.btn.xs{height:24px;padding:0 8px;font-size:12px;gap:4px}.btn.lg{height:40px;padding:0 20px;font-size:14.5px}.btn.block{width:100%}.btn.primary{--bg-c: var(--primary);--bc: var(--primary);--fg: #fff;box-shadow:0 1px 2px #2f6fed40}.btn.primary:hover{--bg-c: var(--primary-hover);--bc: var(--primary-hover)}.btn.primary:active{--bg-c: var(--primary-active)}.btn.ghost{--bc: transparent;--bg-c: transparent}.btn.ghost:hover{--bg-c: var(--panel)}.btn.soft{--bg-c: var(--primary-soft);--bc: transparent;--fg: var(--primary)}.btn.soft:hover{--bg-c: var(--primary-soft-2)}.btn.danger{--fg: var(--red);--bc: var(--border-strong)}.btn.danger:hover{--bg-c: var(--red-soft);--bc: var(--red)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-link{background:none;border:none;color:var(--primary);cursor:pointer;font:inherit;font-size:13px;padding:0}.btn-link:hover{color:var(--primary-hover);text-decoration:underline}.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--r);border:1px solid transparent;background:transparent;color:var(--text-2);cursor:pointer;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}.btn-icon:hover{background:var(--panel);color:var(--text)}.btn-icon svg{width:18px;height:18px}.tag{display:inline-block;white-space:nowrap;vertical-align:middle;width:auto;padding:3px 9px;border-radius:6px;box-sizing:border-box;font-size:12px;font-weight:520;line-height:15px;background:var(--panel);color:var(--text-2);border:1px solid var(--border)}.tag.solid{border-color:transparent}.tag.green{background:var(--green-soft);color:var(--green);border-color:transparent}.tag.red{background:var(--red-soft);color:var(--red);border-color:transparent}.tag.amber{background:var(--amber-soft);color:#b9791a;border-color:transparent}.tag.blue{background:var(--primary-soft);color:var(--primary);border-color:transparent}.tag.gray{background:var(--panel);color:var(--text-2);border:1px solid var(--border-strong)}.tag.t-dot:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;margin-right:6px;vertical-align:1px}[data-theme=dark] .tag.amber{color:var(--amber)}.proto-tag{font-weight:600;letter-spacing:.02em}.dot{width:8px;height:8px;border-radius:50%;flex:none}.dot.green{background:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.dot.red{background:var(--red);box-shadow:0 0 0 3px var(--red-soft)}.dot.amber{background:var(--amber);box-shadow:0 0 0 3px var(--amber-soft)}.dot.pulse{animation:pulseRing 1.8s var(--ease) infinite}.bar{height:6px;border-radius:4px;background:var(--panel);overflow:hidden}.bar>span{display:block;height:100%;border-radius:4px;transition:width .6s var(--ease)}.bar>span.green{background:var(--green)}.bar>span.amber{background:var(--amber)}.bar>span.red{background:var(--red)}.metric-line{display:grid;grid-template-columns:38px 1fr 44px;align-items:center;gap:8px}.metric-line .label{font-size:12px}.metric-line .val{font-size:12px;text-align:right}.tbl-wrap{overflow-x:auto;border-radius:var(--r-lg)}table.tbl{width:max-content;min-width:100%;border-collapse:collapse;font-size:13.5px}table.tbl th{text-align:left;font-weight:600;color:var(--text-2);font-size:12.5px;padding:10px 14px;background:var(--panel-2);border-bottom:1px solid var(--border);white-space:nowrap;position:sticky;top:0}table.tbl td{padding:9px 14px;border-bottom:1px solid var(--border);vertical-align:middle;line-height:1.4;white-space:nowrap}table.tbl td.wrap-cell{white-space:normal}table.tbl tbody tr{transition:background var(--dur) var(--ease)}table.tbl tbody tr:hover{background:var(--primary-soft-2)}table.tbl tbody tr:last-child td{border-bottom:none}.tbl .actions{display:flex;gap:2px;align-items:center}.tbl .num,table.tbl td.num{font-variant-numeric:tabular-nums}.field{margin-bottom:16px}.field>label{display:block;font-size:13px;font-weight:520;margin-bottom:6px;color:var(--text)}.field .hint{font-size:12px;color:var(--text-3);margin-top:5px}.req:after{content:" *";color:var(--red)}.input,.select,textarea.input{width:100%;height:36px;padding:0 12px;font-family:var(--font);font-size:13.5px;color:var(--text);background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--r);transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease);outline:none}textarea.input{height:auto;padding:9px 12px;resize:vertical;line-height:1.5}.input::placeholder{color:var(--text-3)}.input:focus,.select:focus,textarea.input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.input.error{border-color:var(--red)}.input.error:focus{box-shadow:0 0 0 3px var(--red-soft)}.field-err{color:var(--red);font-size:12px;margin-top:5px}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.input-affix{position:relative}.input-affix .suffix{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--text-3);font-size:12.5px}.input-affix .eye{position:absolute;right:8px;top:50%;transform:translateY(-50%)}.search{position:relative;display:flex;align-items:center}.search svg{position:absolute;left:10px;width:16px;height:16px;color:var(--text-3);pointer-events:none}.search .input{padding-left:32px}.checkbox{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;-webkit-user-select:none;user-select:none}.checkbox input{display:none}.checkbox .box{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--border-strong);display:inline-flex;align-items:center;justify-content:center;transition:all var(--dur) var(--ease)}.checkbox input:checked+.box{background:var(--primary);border-color:var(--primary)}.checkbox .box svg{width:11px;height:11px;color:#fff;opacity:0;transition:opacity var(--dur) var(--ease)}.checkbox input:checked+.box svg{opacity:1}.switch{position:relative;display:inline-block;vertical-align:middle;width:38px;height:22px;border-radius:11px;background:#9aa6b6;cursor:pointer;transition:background var(--dur) var(--ease);flex:none}.switch:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #00000052;transition:transform var(--dur) var(--ease)}.switch.on{background:var(--green)}.switch.on:after{transform:translate(16px)}.switch.sm{width:32px;height:18px}.switch.sm:after{width:14px;height:14px}.switch.sm.on:after{transform:translate(14px)}.seg{display:inline-flex;padding:3px;background:var(--panel);border-radius:var(--r);gap:2px}.seg button{border:none;background:transparent;padding:5px 11px;border-radius:6px;font:inherit;font-size:12.5px;color:var(--text-2);cursor:pointer;transition:all var(--dur) var(--ease)}.seg button.active{background:var(--bg);color:var(--text);box-shadow:var(--shadow-1);font-weight:520}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);z-index:100;animation:fadeIn .16s var(--ease)}.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:101;width:min(560px,calc(100vw - 32px));max-height:calc(100vh - 64px);background:var(--bg);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-3);animation:modalIn var(--dur) var(--ease);display:flex;flex-direction:column}.modal.wide{width:min(680px,calc(100vw - 32px))}.modal-head{flex:none;display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--border)}.modal-body{flex:1 1 auto;min-height:0;padding:20px 22px;overflow-y:auto}.modal-foot{flex:none;display:flex;justify-content:flex-end;gap:10px;padding:14px 22px;border-top:1px solid var(--border)}.drawer{position:fixed;right:0;top:0;bottom:0;z-index:101;width:min(460px,100vw);background:var(--bg);border-left:1px solid var(--border);box-shadow:var(--shadow-3);animation:drawerIn var(--dur) var(--ease);display:flex;flex-direction:column}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--border)}.drawer-body{padding:20px 22px;overflow-y:auto;flex:1}.toast-wrap{position:fixed;top:20px;left:50%;transform:translate(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center}.toast{display:flex;align-items:center;gap:9px;padding:10px 16px;background:var(--bg);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-2);font-size:13.5px;animation:fadeUp var(--dur) var(--ease)}.toast svg{width:17px;height:17px}.toast.success svg{color:var(--green)}.toast.error svg{color:var(--red)}.toast.info svg{color:var(--primary)}.code{background:var(--panel);border:1px solid var(--border);border-radius:var(--r);padding:12px 14px;font-family:var(--mono);font-size:12.5px;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:break-all;position:relative}.code .copy{position:absolute;top:8px;right:8px}.warn-note{display:flex;gap:8px;align-items:flex-start;padding:10px 12px;background:var(--red-soft);border-radius:var(--r);color:var(--red);font-size:12.5px;font-weight:520;margin-bottom:12px}.warn-note svg{width:16px;height:16px;flex:none;margin-top:1px}.skel{background:linear-gradient(90deg,var(--panel) 25%,var(--panel-2) 37%,var(--panel) 63%);background-size:800px 100%;animation:shimmer 1.4s linear infinite;border-radius:6px}.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:56px 20px;color:var(--text-3);gap:10px;text-align:center}.empty svg{width:42px;height:42px;opacity:.7}.timeline{position:relative}.tl-item{display:flex;gap:14px;padding-bottom:20px}.tl-item:last-child{padding-bottom:0}.tl-rail{position:relative;width:12px;flex:none;display:flex;justify-content:center}.tl-rail:before{content:"";position:absolute;top:16px;bottom:-16px;width:2px;background:var(--border)}.tl-item:last-child .tl-rail:before{display:none}.tl-dot{width:12px;height:12px;border-radius:50%;background:var(--bg);border:2px solid var(--border-strong);box-sizing:border-box;margin-top:4px;z-index:1}.tl-dot.green{border-color:var(--green)}.tl-dot.red{border-color:var(--red)}.tl-dot.amber{border-color:var(--amber)}.tl-dot.blue{border-color:var(--primary)}.tl-content{flex:1;min-width:0}.tl-head{display:flex;align-items:center;gap:8px;min-height:22px;flex-wrap:wrap}.tl-title{line-height:22px}.tl-time{font-size:12px;line-height:22px;flex:none}.divider{height:1px;background:var(--border);margin:16px 0}.vr{width:1px;align-self:stretch;background:var(--border);margin:0 4px}.menu{position:absolute;min-width:168px;background:var(--bg);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-2);padding:5px;z-index:90;animation:fadeUp .14s var(--ease)}.menu-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:6px;font-size:13px;cursor:pointer;color:var(--text);transition:background var(--dur) var(--ease)}.menu-item:hover{background:var(--panel)}.menu-item.danger{color:var(--red)}.menu-item svg{width:15px;height:15px}.stat-val{font-size:30px;font-weight:660;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums}.stat-label{font-size:12.5px;color:var(--text-2);display:flex;align-items:center;gap:6px}.stat-sub{font-size:12px;color:var(--text-3);margin-top:2px}.grid{display:grid;gap:16px}.grid.kpi{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.grid.cards-3{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.grid.cards-4{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.grid.nodes{grid-template-columns:repeat(auto-fill,minmax(330px,1fr))}.grid.mini{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}.spin{animation:spin .8s linear infinite}.mobile-only{display:none!important}@media (max-width: 860px){.desktop-only{display:none!important}.mobile-only{display:inline-flex!important}.container{padding:0 16px}.stat-val{font-size:26px}}@media (max-width: 600px){.grid.kpi{grid-template-columns:1fr 1fr}main{padding:16px!important}}
