:root{--bg: #1a1d21;--panel: #22262b;--panel-2: #1c2024;--border: #3a3f46;--amber: #f59e0b;--amber-hi: #fbbf24;--green: #22c55e;--red: #ef4444;--text: #d6d9dd;--text-dim: #8b9199;--mono: Consolas, "Courier New", "Microsoft YaHei", monospace}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:Microsoft YaHei,PingFang SC,Segoe UI,sans-serif;font-size:14px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:#141619}::-webkit-scrollbar-thumb{background:#34393f;border-radius:5px;border:2px solid #141619}::-webkit-scrollbar-thumb:hover{background:#454b53}.mono{font-family:var(--mono)}.amber{color:var(--amber-hi)}.dim{color:var(--text-dim)}.btn{padding:9px 18px;font-size:13px;font-family:inherit;letter-spacing:1px;border-radius:6px;border:1px solid var(--border);background:linear-gradient(180deg,#31363c,#24282d);color:var(--text);cursor:pointer;box-shadow:inset 0 1px #ffffff0d,0 1px 2px #0006;transition:filter .15s,transform .1s;white-space:nowrap}.btn:hover{filter:brightness(1.18)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.btn-green{color:#4ade80;border-color:#2e5e41;background:linear-gradient(180deg,#1d3a2a,#16281d)}.btn-red{color:#f87171;border-color:#6b2f2f;background:linear-gradient(180deg,#3a1d1d,#281414)}.btn-amber{color:var(--amber-hi);border-color:#8a6414;background:linear-gradient(180deg,#3a2c10,#241b08);box-shadow:0 0 8px #f59e0b2e,inset 0 1px #ffffff0d}.btn-ghost{background:transparent}.btn-mini{padding:5px 10px;font-size:12px}.metal{background:repeating-linear-gradient(90deg,#ffffff06,#ffffff06,#0000000d,#0000000d 3px),linear-gradient(180deg,#2a2f35,#20242a)}.screw{position:absolute;width:15px;height:15px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#7b828a,#33383e 55%,#14161a);box-shadow:inset 0 1px 2px #ffffff4d,inset 0 -1px 2px #000000b3,0 1px 1px #000c;z-index:2}.screw:after{content:"";position:absolute;left:2.5px;right:2.5px;top:6.5px;height:2px;border-radius:1px;background:#101214;transform:rotate(40deg)}.screw.tl{top:10px;left:10px}.screw.tr{top:10px;right:10px;transform:rotate(95deg)}.screw.bl{bottom:10px;left:10px;transform:rotate(-60deg)}.screw.br{bottom:10px;right:10px;transform:rotate(160deg)}.led{width:12px;height:12px;border-radius:50%;display:inline-block;flex:none}.led.on{background:radial-gradient(circle at 35% 30%,#6ee7a0,#22c55e 55%,#15803d);box-shadow:0 0 6px #22c55e,0 0 14px #22c55e8c}.led.off{background:radial-gradient(circle at 35% 30%,#f87171,#ef4444 55%,#b91c1c);box-shadow:0 0 6px #ef4444a6}.tgl{position:relative;display:inline-block;width:64px;height:26px;flex:none;cursor:pointer}.tgl input{position:absolute;opacity:0;width:0;height:0}.tgl .track{position:absolute;top:0;right:0;bottom:0;left:0;background:#0c0e10;border:1px solid var(--border);border-radius:5px;box-shadow:inset 0 2px 5px #000000bf;transition:background .18s;overflow:hidden}.tgl .t-on,.tgl .t-off{position:absolute;top:50%;transform:translateY(-50%);font:700 10px/1 var(--mono);letter-spacing:1px;transition:color .18s,text-shadow .18s}.tgl .t-on{left:8px;color:#4d3c11}.tgl .t-off{right:6px;color:#82898f}.tgl .knob{position:absolute;top:2px;left:2px;width:30px;height:20px;border-radius:4px;background:linear-gradient(180deg,#4d545c,#2b3036);border:1px solid #171a1d;box-shadow:0 1px 2px #0009;transition:left .18s,background .18s}.tgl input:checked~.track{background:#241a05}.tgl input:checked~.track .knob{left:calc(100% - 34px);background:linear-gradient(180deg,#fbbf24,#d97706)}.tgl input:checked~.track .t-on{color:#fcd34d;text-shadow:0 0 7px rgba(245,158,11,.9)}.tgl input:disabled~.track{opacity:.55}.tgl.sm{width:54px;height:22px}.tgl.sm .knob{width:24px;height:16px}.tgl.sm input:checked~.track .knob{left:calc(100% - 26px)}.tgl.sm .t-on,.tgl.sm .t-off{font-size:9px}.tgl.sm .t-on{left:6px}.tgl.sm .t-off{right:4px}.input-inset{width:100%;padding:10px 12px;background:#15171a;border:1px solid var(--border);border-radius:6px;box-shadow:inset 0 2px 6px #000000b3;color:var(--text);font-size:13.5px;font-family:inherit;outline:none;transition:border-color .15s}.input-inset:focus{border-color:var(--amber)}.input-inset.sel{width:auto;padding:8px 10px}select.input-inset option{background:#1c2024;color:var(--text)}.login-wrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:30px 16px;background:radial-gradient(900px 480px at 50% -80px,#2b3138 0%,var(--bg) 62%)}.login-panel{position:relative;width:400px;max-width:94vw;padding:38px 34px 20px;border:2px solid var(--border);border-radius:14px;background:repeating-linear-gradient(90deg,#ffffff05,#ffffff05,#0000000d,#0000000d 3px),linear-gradient(180deg,#272c32,#1b1f23);box-shadow:0 24px 60px #000000a6,inset 0 1px #ffffff0f}.login-brand{text-align:center;margin-bottom:26px}.login-model{font-size:10px;color:#6a727b;letter-spacing:2px}.login-brand h1{margin:10px 0 6px;font-size:21px;letter-spacing:4px;color:var(--amber);text-shadow:0 -1px 0 #000,0 0 14px rgba(245,158,11,.35)}.login-ver{font-size:11px;color:var(--text-dim);letter-spacing:4px}.login-field{margin-bottom:14px}.login-field label{display:block;font-size:12.5px;color:var(--text-dim);margin-bottom:6px;letter-spacing:1px}.login-err{min-height:20px;font-size:12.5px;color:#f87171;margin:2px 0 6px}.btn-power{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;margin-top:4px;padding:13px 0;font:700 16px/1 var(--mono);letter-spacing:6px;color:var(--amber);background:linear-gradient(180deg,#1d1f22,#121417);border:2px solid var(--amber);border-radius:10px;cursor:pointer;box-shadow:0 0 12px #f59e0b47,inset 0 0 10px #f59e0b1f;transition:box-shadow .18s,color .18s,transform .1s}.btn-power:hover{color:var(--amber-hi);box-shadow:0 0 20px #f59e0b8c,inset 0 0 14px #f59e0b38}.btn-power:active{transform:translateY(1px)}.btn-power:disabled{opacity:.55;cursor:wait}.btn-power .pw-dot{width:10px;height:10px;border-radius:50%;background:var(--amber);box-shadow:0 0 8px var(--amber);animation:pulse 1.6s infinite}@keyframes pulse{50%{opacity:.3}}.login-hint{margin-top:14px;text-align:center;font-size:12px;color:#9aa1a9;letter-spacing:1px}.login-divider{height:1px;background:linear-gradient(90deg,transparent,var(--border),transparent);margin:14px 0 10px}.login-foot{text-align:center;font-size:12.5px;color:#b9bfc6;letter-spacing:2px}.login-copy{font-size:12px;color:#6a727b;letter-spacing:1px}.shell{display:flex;flex-direction:column;min-height:100vh}.hdr{display:flex;align-items:flex-end;gap:14px;padding:0 18px;border-bottom:2px solid var(--border);box-shadow:0 2px 12px #00000080;position:sticky;top:0;z-index:50}.nameplate{display:flex;flex-direction:column;justify-content:center;margin:10px 0;padding:8px 18px;min-width:330px;border:2px solid var(--border);border-radius:6px;background:linear-gradient(180deg,#17191c,#101214);box-shadow:inset 0 2px 8px #000c,0 1px #ffffff0a}.nameplate h1{margin:0;font-size:16px;letter-spacing:3px;color:var(--amber);text-shadow:0 -1px 0 #000,0 1px 1px rgba(245,158,11,.25);white-space:nowrap}.nameplate .co{margin-top:3px;font-size:11px;color:#7d848d;letter-spacing:1px;white-space:nowrap}.tabs{display:flex;gap:8px;align-items:flex-end;flex:1;justify-content:center}.tab{position:relative;top:2px;padding:10px 22px 9px;font-size:14px;letter-spacing:2px;color:#9aa1a9;text-decoration:none;background:linear-gradient(180deg,#343a41,#262b30);border:1px solid var(--border);border-bottom:2px solid var(--border);border-radius:8px 8px 0 0;box-shadow:inset 0 1px #ffffff0f;transition:color .15s}.tab:hover{color:var(--text)}.tab.active{color:var(--amber-hi);background:linear-gradient(180deg,#22262b,#1a1d21);border-bottom-color:#1a1d21;transform:translateY(2px);box-shadow:inset 0 3px 7px #0000008c;text-shadow:0 0 8px rgba(245,158,11,.5)}.hdr-right{display:flex;align-items:center;gap:12px;margin:10px 0}.clock{font-size:12px;color:var(--text-dim);letter-spacing:1px}.power-ind{display:flex;align-items:center;gap:9px;padding:7px 14px;border:2px solid var(--border);border-radius:6px;background:#15171a;box-shadow:inset 0 2px 6px #000000b3}.power-txt{display:flex;flex-direction:column;line-height:1.3}.power-txt b{font-size:13px;letter-spacing:1px;color:#4ade80;text-shadow:0 0 8px rgba(34,197,94,.5)}.power-txt b.standby{color:#f87171;text-shadow:0 0 8px rgba(239,68,68,.4)}.power-txt i{font-style:normal;font-size:11px;color:var(--text-dim)}.layout{flex:1;display:flex;min-height:0}.sidebar{width:170px;flex:none;background:#1c2024;border-right:2px solid var(--border);padding:14px 10px}.side-title{font-size:12px;letter-spacing:3px;color:var(--text-dim);border-bottom:1px solid #2b3036;padding-bottom:8px;margin-bottom:10px}.side-group{display:flex;align-items:center;gap:7px;padding:9px 8px;margin-bottom:2px;border-radius:6px;cursor:pointer;border:1px solid transparent;font-size:12.5px;letter-spacing:1px;transition:background .15s}.side-group:hover{background:#23282e}.side-group.active{border-color:#f59e0b66;background:#26221a;color:var(--amber-hi)}.side-group .led{width:8px;height:8px}.side-group .g-count{margin-left:auto;font-size:10.5px;color:var(--text-dim)}.side-note{margin-top:14px;padding:8px;font-size:11px;line-height:1.8;color:var(--text-dim);border:1px dashed #33383e;border-radius:6px}.page{flex:1;padding:18px 22px 34px;min-width:0}.ftr{border-top:1px solid var(--border);padding:10px 20px;display:flex;gap:26px;justify-content:center;align-items:center;color:var(--text-dim);font-size:12px;letter-spacing:1px;background:#16181b}.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:16px;flex-wrap:wrap}.page-title{margin:0;font-size:20px;letter-spacing:3px;color:#e5e8eb}.page-sub{margin:6px 0 0;font-size:12.5px;color:var(--text-dim);letter-spacing:1px}.head-ops{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.filter-chip{display:inline-flex;align-items:center;gap:8px;margin-bottom:14px;padding:6px 14px;font-size:12.5px;font-family:inherit;color:var(--amber-hi);background:#26221a;border:1px solid rgba(245,158,11,.4);border-radius:999px;cursor:pointer}.filter-chip:hover{background:#2e2819}.loading{padding:46px;text-align:center;color:var(--text-dim);font-family:var(--mono);letter-spacing:2px}.empty{padding:30px;text-align:center;color:var(--text-dim)}.dev-areas{display:flex;flex-direction:column;gap:24px}.sec-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.sec-bar{width:4px;height:16px;background:var(--amber);border-radius:2px;box-shadow:0 0 6px #f59e0b99}.sec-head h3{margin:0;font-size:15px;letter-spacing:2px;color:var(--text)}.sec-count{font-size:11.5px;color:var(--text-dim);font-family:var(--mono);border:1px solid #2f343a;padding:2px 8px;border-radius:4px;background:#1b1e22}.dev-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(216px,1fr));gap:12px}.dev-card{background:linear-gradient(180deg,#262b31,#1f2328);border:2px solid var(--border);border-radius:8px;box-shadow:inset 0 1px 6px #00000080;padding:12px 13px;display:flex;flex-direction:column;gap:7px;transition:border-color .15s,box-shadow .15s}.dev-card.is-on{border-color:#22c55e73;box-shadow:inset 0 1px 6px #00000080,0 0 12px #22c55e1f}.dev-top{display:flex;align-items:center;justify-content:space-between;gap:8px}.dev-name{font-size:13.5px;color:#e2e5e8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dev-meta{font-size:11px;color:#7d848d}.dev-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:2px}.dev-time{font-size:11px;color:var(--text-dim);text-align:right;line-height:1.55}.dev-time .amber{font-size:13px}.scene-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.scene-card{background:linear-gradient(180deg,#262b31,#1f2328);border:2px solid var(--border);border-radius:10px;box-shadow:inset 0 1px 8px #00000073;padding:16px;display:flex;flex-direction:column;gap:11px;transition:border-color .15s,box-shadow .15s}.scene-card.active{border-color:var(--amber);box-shadow:0 0 0 1px #f59e0b66,0 0 22px #f59e0b47,inset 0 1px 8px #00000073}.scene-top{display:flex;align-items:center;justify-content:space-between;gap:10px}.scene-name{font-size:17px;font-weight:700;letter-spacing:3px;color:var(--amber-hi)}.scene-badge{font-size:11px;color:var(--amber-hi);border:1px solid rgba(245,158,11,.55);border-radius:999px;padding:2px 10px;background:#f59e0b1a;animation:pulse 1.8s infinite;white-space:nowrap}.scene-desc{margin:0;font-size:12.5px;line-height:1.7;color:#9aa1a9;min-height:43px}.scene-combo{display:flex;flex-direction:column;gap:6px;padding:10px;background:#17191c;border:1px solid #2b3036;border-radius:6px;box-shadow:inset 0 2px 5px #00000080}.combo-line{display:flex;align-items:baseline;gap:10px;font-size:12px;min-width:0}.combo-k{flex:none;padding:1px 8px;border-radius:4px;font-size:11px}.k-on{color:#4ade80;border:1px solid #2b5e40;background:#22c55e14}.k-off{color:#f87171;border:1px solid #6b2b2b;background:#ef444414}.combo-v{font-size:11.5px;color:#c3c8ce;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.combo-v.dim{color:#6f767e}.scene-card .btn{margin-top:2px}.rule-table{border:2px solid var(--border);border-radius:8px;overflow:hidden;background:var(--panel);box-shadow:inset 0 1px 8px #0006}.rule-row{display:grid;grid-template-columns:1.3fr .8fr 1.9fr .5fr .7fr 1.5fr;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid #2b3036}.rule-row:last-child{border-bottom:none}.rule-head{background:#1c2025;color:var(--text-dim);font-size:12px;letter-spacing:2px;padding:10px 16px}.rule-name{color:#e2e5e8;font-size:13.5px}.rule-actions{color:#9aa1a9;font-size:12.5px}.rule-ops{display:flex;align-items:center;gap:10px;justify-content:flex-end}.tag{display:inline-block;padding:3px 10px;border-radius:4px;font-size:12px;border:1px solid;white-space:nowrap}.tag-event{color:#93c5fd;border-color:#3b5b7d;background:#3b82f614}.tag-on{color:#4ade80;border-color:#2b5e40;background:#22c55e14}.tag-off{color:#f87171;border-color:#6b2b2b;background:#ef444414}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#08090ba8;display:flex;align-items:center;justify-content:center;z-index:200}.modal{width:480px;max-width:calc(100vw - 40px);max-height:calc(100vh - 60px);overflow:auto;background:linear-gradient(180deg,#262b31,#1d2125);border:2px solid var(--border);border-radius:10px;box-shadow:0 24px 60px #000000b3,inset 0 1px #ffffff0d;padding:22px 24px;position:relative}.modal h3{margin:0 0 18px;letter-spacing:3px;color:var(--amber-hi);font-size:16px}.form-field{margin-bottom:14px}.form-field>label{display:block;font-size:12.5px;color:var(--text-dim);margin-bottom:6px;letter-spacing:1px}.chk-group{display:flex;flex-wrap:wrap;gap:8px 16px;padding:10px;background:#17191c;border:1px solid #2b3036;border-radius:6px;box-shadow:inset 0 2px 5px #00000080}.chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}.chk input{accent-color:var(--amber);width:15px;height:15px;cursor:pointer}.modal-err{color:#f87171;font-size:12.5px;min-height:18px;margin:4px 0 8px}.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}.term{background:#070907;border:2px solid var(--border);border-radius:10px;box-shadow:inset 0 0 26px #000000d9,inset 0 0 70px #122e1247;padding:14px 16px;font-family:var(--mono);font-size:13px;line-height:1.8;height:calc(100vh - 280px);min-height:380px;overflow:auto;color:#4ade80}.term-line{white-space:nowrap}.term .t{color:#52705c}.term .lvl-INFO{color:#4ade80}.term .lvl-WARN{color:var(--amber-hi)}.term .lvl-ERROR{color:#f87171}.term .d{color:var(--amber)}.term .e{color:#86efac}.term-empty{color:#52705c;text-align:center;padding:44px 0;letter-spacing:2px}#toast{position:fixed;left:50%;bottom:34px;transform:translate(-50%) translateY(20px);background:#101214;color:var(--amber-hi);border:1px solid rgba(245,158,11,.55);border-radius:8px;padding:10px 22px;font-size:13.5px;letter-spacing:1px;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;z-index:300;box-shadow:0 8px 30px #0009,0 0 14px #f59e0b33}#toast.show{opacity:1;transform:translate(-50%) translateY(0)}@media (max-width: 1100px){.nameplate{min-width:0}.nameplate .co,.clock{display:none}.rule-row{grid-template-columns:1.2fr .9fr 1.6fr .6fr}.rule-row span:nth-child(5),.rule-row span:nth-child(6){grid-column:auto}}
