:root{--bg-deep:#0a0e17;--bg-panel:rgba(16,22,36,0.82);--bg-glass:rgba(22,30,48,0.65);--border:rgba(99,140,220,0.18);--border-bright:rgba(99,180,255,0.35);--text:#e8edf5;--text-muted:#8b9bb8;--accent:#3b9eff;--accent-green:#2dd4a0;--accent-yellow:#f5c542;--accent-red:#ee2135;--glow:0 0 24px rgba(59,158,255,0.25);--radius:14px;--radius-sm:8px;--header-h:60px;--header-h-mobile:52px;--toolbar-w:52px;--panel-w:340px;--dock-h:88px;--dock-h-collapsed:58px;--mobile-toolbar-h:58px;--mobile-header-height:52px;--glass-mobile:rgba(15,23,42,0.88);--font:"Segoe UI",system-ui,-apple-system,sans-serif;--transition:0.22s cubic-bezier(0.4,0,0.2,1)}*,:after,:before{box-sizing:border-box;margin:0;padding:0}body,html{height:100%;min-height:100dvh;overflow:hidden;font-family:var(--font);background:var(--bg-deep);color:var(--text)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.mobile-only{display:none}.desktop-only{display:initial}body.light{--bg-deep:#eef2f8;--bg-panel:rgba(255,255,255,0.88);--bg-glass:rgba(255,255,255,0.72);--border:rgba(60,100,180,0.15);--text:#1a2332;--text-muted:#5a6a82}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select,textarea{font-family:inherit;font-size:13px}a{color:var(--accent)}#loader{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg-deep);transition:opacity .5s,visibility .5s}#loader.hidden{opacity:0;visibility:hidden;pointer-events:none}.loader-ring{width:48px;height:48px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.loader-text{margin-top:16px;font-size:13px;color:var(--text-muted);letter-spacing:2px;text-transform:uppercase}@keyframes spin{to{transform:rotate(1turn)}}.header{position:fixed;top:0;left:0;right:0;height:var(--header-h);z-index:100;display:flex;align-items:center;gap:10px;padding:0 16px;background:var(--bg-panel);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-bottom:1px solid var(--border)}.header-mobile{display:none}.logo{gap:8px;font-weight:700;font-size:14px;letter-spacing:1px;white-space:nowrap;flex-shrink:0}.logo,.logo-icon{display:flex;align-items:center}.logo-icon{width:28px;height:28px;background:linear-gradient(135deg,var(--accent),var(--accent-green));border-radius:8px;justify-content:center}.logo-icon.mobile{width:24px;height:24px;border-radius:7px}.logo-sub{font-size:10px;color:var(--text-muted);font-weight:400;letter-spacing:0}.project-select{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 10px;color:var(--text);font-size:12px;max-width:180px}.project-dropdown-wrap{position:relative;flex-shrink:0}.project-pill{display:inline-flex;align-items:center;gap:6px;max-width:220px;padding:8px 12px;border-radius:999px;background:var(--bg-glass);border:1px solid var(--border);font-size:12px;font-weight:600;color:var(--text);transition:var(--transition)}.project-pill,.project-pill span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-pill:focus-visible,.project-pill:hover{border-color:var(--border-bright);box-shadow:var(--glow);outline:none}.project-pill.mobile{max-width:120px;font-size:11px;padding:6px 10px}.dropdown-menu{position:absolute;top:calc(100% + 8px);left:0;min-width:220px;background:var(--glass-mobile);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid rgba(148,163,184,.16);border-radius:14px;box-shadow:0 20px 60px rgba(0,0,0,.35);padding:6px;opacity:0;visibility:hidden;transform:translateY(-6px);transition:var(--transition);z-index:200}.dropdown-menu.open{opacity:1;visibility:visible;transform:translateY(0)}.dropdown-menu-right{left:auto;right:0}.dropdown-item{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;border-radius:10px;font-size:12px;text-align:left;color:var(--text);transition:var(--transition)}.dropdown-item.active,.dropdown-item:hover{background:rgba(59,158,255,.12);color:var(--accent)}.dropdown-divider{height:1px;background:var(--border);margin:4px 6px}.header-actions{display:flex;align-items:center;gap:6px;margin-left:auto;flex-shrink:0}.btn,.header-more-wrap{position:relative}.btn{display:inline-flex;align-items:center;gap:5px;padding:8px 12px;border-radius:14px;font-size:12px;font-weight:500;white-space:nowrap;transition:var(--transition);border:1px solid transparent;min-height:36px}.btn:hover{background:rgba(59,158,255,.12);border-color:var(--border)}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn-primary{background:linear-gradient(135deg,var(--accent),#2a7fd4);color:#fff;border-color:transparent}.btn-primary:hover{filter:brightness(1.1)}.btn-icon{width:34px;height:34px;padding:0;border-radius:var(--radius-sm)}.btn-icon,.icon-btn{justify-content:center}.icon-btn{width:44px;height:44px;display:inline-flex;align-items:center;border-radius:14px;position:relative;transition:var(--transition)}.icon-btn:focus-visible,.icon-btn:hover{background:rgba(59,158,255,.12);outline:none}.save-dot{position:absolute;top:8px;right:8px;width:7px;height:7px;border-radius:50%;background:#f59e0b;opacity:0;transition:opacity .2s}.save-dot.visible{opacity:1}.avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#6366f1,var(--accent));display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;margin-left:4px;flex-shrink:0}.avatar.mobile{width:28px;height:28px;font-size:10px;margin-left:0}.mobile-header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1}.mobile-header-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.mobile-brand{font-size:12px;font-weight:700;letter-spacing:1px;color:var(--text);flex-shrink:0}.app{display:flex;height:100dvh;padding-top:var(--header-h)}.left-toolbar{position:fixed;left:10px;top:calc(var(--header-h) + 12px);z-index:90;display:flex;flex-direction:column;gap:4px;background:var(--bg-panel);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius);padding:6px;box-shadow:var(--glow)}.device-sheet-overlay,.mobile-bottom-toolbar,.mobile-device-sheet-header,.mobile-fab,.mobile-panel-overlay,.panel-close-mobile,.panel-drawer-header{display:none}.tool-btn{position:relative;width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:var(--transition);color:var(--text-muted)}.tool-btn:hover{background:rgba(59,158,255,.12);color:var(--text)}.tool-btn.active{background:rgba(59,158,255,.2);color:var(--accent);box-shadow:0 0 12px rgba(59,158,255,.2)}.tool-btn svg{width:18px;height:18px}.tool-btn .tooltip{position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);background:#1a2236;color:var(--text);padding:4px 8px;border-radius:6px;font-size:11px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;border:1px solid var(--border);z-index:200}.tool-btn:hover .tooltip{opacity:1}.tool-sep{height:1px;background:var(--border);margin:2px 6px}.workspace-wrap{flex:1 1;position:relative;overflow:hidden;margin-left:62px;margin-right:0;transition:margin var(--transition)}.workspace-wrap.panel-open{margin-right:var(--panel-w)}#workspace{width:100%;height:100%;cursor:-webkit-grab;cursor:grab;touch-action:none;position:relative;background:var(--bg-deep)}#workspace.panning{cursor:-webkit-grabbing;cursor:grabbing}#workspace.connecting,#workspace.placing{cursor:crosshair}.workspace-inner{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform}.grid-bg{position:absolute;inset:-5000px;background-image:radial-gradient(circle,rgba(99,140,220,.15) 1px,transparent 0);background-size:24px 24px;pointer-events:none}#cables-svg{position:absolute;top:0;left:0;overflow:visible}#cables-svg .cable-hit{pointer-events:stroke;cursor:pointer}#cables-svg .cable-line{pointer-events:none;fill:none;stroke-width:2.5;transition:stroke .25s,filter .25s,stroke-dasharray .25s}#cables-svg .cable-line.connected{stroke:var(--accent-green);filter:drop-shadow(0 0 5px rgba(45,212,160,.55))}#cables-svg .cable-line.disconnected{stroke:var(--accent-red);stroke-dasharray:6 5;filter:none;opacity:.85}#cables-svg .cable-line.warning{stroke:var(--accent-yellow);stroke-dasharray:5 4;filter:drop-shadow(0 0 3px rgba(245,158,11,.4))}#cables-svg .cable-line.problem{stroke:var(--accent-red);stroke-dasharray:3 4;filter:drop-shadow(0 0 4px rgba(238,33,53,.45))}#cables-svg .cable-line.simulation-active{stroke:var(--accent);stroke-width:3.5;filter:drop-shadow(0 0 12px rgba(59,158,255,.75))}#cables-svg .cable-line.wireless{stroke-dasharray:8 6}#cables-svg .cable-line.fiber{stroke-width:3.5}#cables-svg .cable-line.console{stroke-width:1.5;opacity:.75}#cables-svg .cable-line.selected{stroke:var(--accent);stroke-width:3.5;filter:drop-shadow(0 0 8px rgba(59,158,255,.6))}#cables-svg .packet-dot.success{fill:#2dd4a0;color:#2dd4a0}#cables-svg .packet-dot.fail{fill:#ff5c6c;color:#ff5c6c}#cables-svg .packet-dot{filter:drop-shadow(0 0 6px currentColor)}#cables-svg .cable-port-labels{pointer-events:none}#cables-svg .port-label rect{fill:rgba(15,23,42,.9);stroke:rgba(148,163,184,.35);stroke-width:1}#cables-svg .port-label text{fill:#e8edf5;font-size:10px;font-weight:700;font-family:Consolas,SFMono-Regular,monospace;paint-order:stroke;stroke:rgba(15,23,42,.25);stroke-width:.5px}#cables-svg .port-label.connected rect{stroke:rgba(45,212,160,.55)}#cables-svg .port-label.warning rect{stroke:rgba(245,197,66,.65)}#cables-svg .port-label.disconnected rect,#cables-svg .port-label.problem rect{stroke:rgba(238,33,53,.65)}#cables-svg .port-label.selected rect{fill:rgba(17,35,58,.96);stroke:var(--accent);filter:drop-shadow(0 0 7px rgba(59,158,255,.45))}#cables-svg .cable-line.wireless{stroke:#38bdf8;stroke-dasharray:6 6;filter:drop-shadow(0 0 8px rgba(56,189,248,.5))}.wireless-wave-deco.connected{stroke:#38bdf8}.wireless-wave-deco.warning{stroke:#f5c542}.wireless-wave-deco.disconnected,.wireless-wave-deco.problem{stroke:#ff5c6c}.wireless-mid-icon{font-size:11px;opacity:.7;pointer-events:none}.wireless-mid-icon,.wireless-ping-wave.success{fill:#38bdf8;font-weight:700}.wireless-ping-wave.fail{fill:#ff5c6c;font-weight:700}.port-cards{display:flex;flex-direction:column;gap:8px;max-height:220px;overflow-y:auto}.port-card{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;font-size:11px}.port-card-head{display:flex;align-items:center;gap:6px;margin-bottom:4px}.port-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.port-type-tag{font-size:9px;color:var(--text-muted);margin-left:auto}.port-card-meta{color:var(--text-muted);font-size:10px}.port-card-warn{color:var(--accent-yellow);font-size:10px;margin-top:4px}.port-enable-row{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:11px}.port-visual-modal{max-width:520px;width:94%;max-height:80dvh;overflow-y:auto;position:relative}.port-visual-body h3{margin-bottom:12px;font-size:15px}.port-visual-grid{display:grid;grid-gap:8px;gap:8px;margin-bottom:12px}.port-visual-cell{min-height:64px;border-radius:12px;border:1px solid var(--border);background:var(--bg-glass);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:6px}.port-visual-cell:active,.port-visual-cell:hover{border-color:var(--accent)}.port-visual-dot{width:12px;height:12px;border-radius:50%}.port-visual-name{font-size:9px;font-weight:600;text-align:center}.port-visual-detail{font-size:12px;color:var(--text-muted);padding:10px;background:var(--bg-glass);border-radius:var(--radius-sm);border:1px solid var(--border)}.port-visual-close{position:absolute;top:8px;right:8px;z-index:2}#devices-layer{position:absolute;top:0;left:0}.inspector-section{margin-top:16px;padding-top:14px;border-top:1px solid var(--border)}.inspector-section h4{font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--text-muted);margin-bottom:10px}.iface-card,.route-card{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px;margin-bottom:8px}.iface-card .iface-head,.route-card .route-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;font-weight:600}.route-preview{font-family:Consolas,monospace;font-size:10px;background:#0d1117;border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px;max-height:140px;overflow:auto;line-height:1.6}.route-preview .c-route{color:var(--accent-green)}.route-preview .s-route{color:var(--accent)}.dyn-routing-row{display:flex;align-items:center;justify-content:space-between;padding:6px 0;font-size:12px;border-bottom:1px solid rgba(99,140,220,.08)}.device-node{position:absolute;width:130px;min-height:72px;background:var(--bg-glass);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1.5px solid var(--border);border-radius:var(--radius);padding:10px;cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:box-shadow .2s,border-color .2s;touch-action:none}.device-node:hover{border-color:var(--border-bright);box-shadow:var(--glow)}.device-node.selected{border-color:var(--accent);box-shadow:0 0 20px rgba(59,158,255,.35)}.device-node.dragging{cursor:-webkit-grabbing;cursor:grabbing;z-index:50;opacity:.92}.device-node.connect-source{border-color:var(--accent-green);box-shadow:0 0 16px rgba(45,212,160,.4)}.device-header{gap:8px;margin-bottom:4px}.device-header,.device-icon{display:flex;align-items:center}.device-icon{width:32px;height:32px;border-radius:8px;justify-content:center;flex-shrink:0}.device-icon svg{width:18px;height:18px}.device-icon.router{background:rgba(59,158,255,.2);color:var(--accent)}.device-icon.switch-type{background:rgba(45,212,160,.2);color:var(--accent-green)}.device-icon.end{background:rgba(139,155,184,.2);color:var(--text-muted)}.device-icon.server{background:rgba(245,197,66,.2);color:var(--accent-yellow)}.device-icon.cloud{background:rgba(99,102,241,.2);color:#818cf8}.device-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1}.device-ip{font-size:10px;color:var(--text-muted);font-family:Consolas,monospace}.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.status-dot.online{background:var(--accent-green);box-shadow:0 0 6px var(--accent-green)}.status-dot.warning{background:var(--accent-yellow)}.status-dot.offline{background:var(--accent-red)}.port-dots{position:absolute;width:6px;height:6px;background:var(--border-bright);border-radius:50%}.port-dots.top{top:-3px}.port-dots.bottom,.port-dots.top{left:50%;transform:translateX(-50%)}.port-dots.bottom{bottom:-3px}.port-dots.left{left:-3px}.port-dots.left,.port-dots.right{top:50%;transform:translateY(-50%)}.port-dots.right{right:-3px}.comment-badge{top:-6px;right:-6px;width:18px;height:18px;background:var(--accent);border-radius:50%;font-size:9px;font-weight:700}.comment-badge,.empty-state{position:absolute;display:flex;align-items:center;justify-content:center}.empty-state{inset:0;flex-direction:column;pointer-events:none;color:var(--text-muted);text-align:center;padding:20px}.empty-state svg{width:64px;height:64px;opacity:.3;margin-bottom:16px}.empty-state h3{font-size:16px;margin-bottom:6px;color:var(--text)}.empty-state p{font-size:13px;max-width:280px}.empty-mobile{display:none}.empty-desktop{display:block}.device-dock{position:fixed;bottom:12px;left:50%;transform:translateX(-50%);z-index:50;display:flex;flex-direction:column;align-items:center;max-width:calc(100vw - 24px)}.device-dock .mobile-device-sheet-header{display:none}.device-dock .dock-body{display:flex;flex-direction:column;align-items:center}.dock-cats{display:flex;gap:4px;margin-bottom:6px;background:var(--bg-panel);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:20px;padding:4px;overflow-x:auto;scrollbar-width:none;max-width:100%}.dock-cats::-webkit-scrollbar{display:none}.dock-cat{padding:5px 12px;border-radius:16px;font-size:11px;color:var(--text-muted);transition:var(--transition);white-space:nowrap;flex-shrink:0}.dock-cat.active{background:rgba(59,158,255,.2);color:var(--accent)}.dock-items{display:flex;gap:6px;background:var(--bg-panel);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius);padding:8px 12px;overflow-x:auto;scrollbar-width:none;box-shadow:var(--glow)}.dock-items::-webkit-scrollbar{display:none}.dock-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:8px 10px;border-radius:var(--radius-sm);min-width:64px;transition:var(--transition);cursor:pointer;flex-shrink:0}.dock-item:hover{background:rgba(59,158,255,.1)}.dock-item.active{background:rgba(59,158,255,.2);border:1px solid var(--border-bright)}.dock-item svg{width:24px;height:24px;color:var(--text-muted)}.dock-item span{font-size:10px;color:var(--text-muted);text-align:center;line-height:1.2}.mobile-bottom-toolbar{display:none}.mbt-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;flex:1 1;min-width:0;min-height:44px;padding:4px 2px;border-radius:14px;color:var(--text-muted);transition:var(--transition)}.mbt-btn svg{width:20px;height:20px;flex-shrink:0}.mbt-label{font-size:9px;font-weight:600;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.mbt-btn.active,.mbt-btn:active{background:rgba(59,158,255,.18);color:var(--accent)}.mbt-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.mobile-fab{display:none;border:none;cursor:pointer;align-items:center;justify-content:center;background:linear-gradient(135deg,#38bdf8,#3b82f6);color:#fff;box-shadow:0 12px 32px rgba(59,130,246,.45);transition:transform .22s,opacity .22s,visibility .22s}.mobile-fab.fab-hidden{opacity:0;visibility:hidden;pointer-events:none;transform:scale(.85)}.device-sheet-overlay{display:none;position:fixed;inset:0;z-index:75;background:rgba(0,0,0,.4);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s}.device-sheet-overlay.show{opacity:1;visibility:visible}.mobile-device-sheet-header{display:none;align-items:center;gap:8px;padding:6px 4px 8px;flex-shrink:0}.mobile-device-sheet-title{flex:1 1;font-size:14px;font-weight:700;text-align:center}.mobile-device-sheet-close{width:44px;height:44px;border-radius:12px;font-size:16px;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.mobile-device-sheet-close:hover{background:rgba(59,158,255,.1);color:var(--text)}.right-panel{position:fixed;right:0;top:var(--header-h);bottom:0;width:var(--panel-w);z-index:95;background:var(--bg-panel);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-left:1px solid var(--border);display:flex;flex-direction:column;transform:translateX(0);transition:transform var(--transition)}.right-panel.collapsed{transform:translateX(100%)}.panel-toggle{position:absolute;left:-32px;top:50%;transform:translateY(-50%);width:28px;height:56px;background:var(--bg-panel);border:1px solid var(--border);border-right:none;border-radius:var(--radius-sm) 0 0 var(--radius-sm);display:flex;align-items:center;justify-content:center;color:var(--text-muted)}.panel-tabs{display:flex;border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none;flex-shrink:0}.panel-tabs::-webkit-scrollbar{display:none}.panel-tab{flex:1 1;min-width:60px;padding:10px 6px;font-size:11px;text-align:center;color:var(--text-muted);border-bottom:2px solid transparent;transition:var(--transition);white-space:nowrap}.panel-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.panel-content{flex:1 1;overflow-y:auto;padding:14px}.panel-section{display:none}.panel-section.active{display:block}.form-group{margin-bottom:12px}.form-group label{display:block;font-size:11px;color:var(--text-muted);margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px}.form-group input,.form-group select,.form-group textarea{width:100%;padding:8px 10px;background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);outline:none;transition:border-color .2s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--accent)}.form-group textarea{resize:vertical;min-height:60px}.form-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px}.inspector-empty{text-align:center;padding:40px 16px;color:var(--text-muted);font-size:13px}.filter-label{font-size:11px;color:var(--text-muted);margin-bottom:6px;display:block;text-transform:uppercase;letter-spacing:.5px}.event-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.panel-drawer-header{display:none;align-items:center;justify-content:flex-end;padding:4px 10px 0;flex-shrink:0}.panel-close-mobile{width:44px;height:44px;border-radius:12px;font-size:16px;color:var(--text-muted);display:none;align-items:center;justify-content:center}.panel-close-mobile:hover{background:rgba(59,158,255,.1);color:var(--text)}.sim-controls{gap:6px;flex-wrap:wrap}.sim-controls,.toggle-row{display:flex;margin-bottom:12px}.toggle-row{align-items:center;justify-content:space-between;padding:8px 10px;background:var(--bg-glass);border-radius:var(--radius-sm);border:1px solid var(--border)}.toggle{width:40px;height:22px;background:var(--border);border-radius:11px;position:relative;cursor:pointer;transition:background .2s}.toggle.on{background:var(--accent-green)}.toggle:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s}.toggle.on:after{transform:translateX(18px)}.filter-chips{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:12px}.chip{padding:4px 8px;border-radius:12px;font-size:10px;border:1px solid var(--border);color:var(--text-muted);cursor:pointer;transition:var(--transition)}.chip.active{background:rgba(59,158,255,.15);color:var(--accent);border-color:var(--accent)}.event-table{width:100%;font-size:11px;border-collapse:collapse}.event-table th{text-align:left;padding:6px 4px;color:var(--text-muted);border-bottom:1px solid var(--border);font-weight:500}.event-table td{padding:6px 4px;border-bottom:1px solid rgba(99,140,220,.08)}.event-table .success{color:var(--accent-green)}.event-table .fail{color:var(--accent-red)}.task-progress{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;padding:10px;background:var(--bg-glass);border-radius:var(--radius-sm);border:1px solid var(--border)}.progress-bar{flex:1 1;height:6px;background:var(--border);border-radius:3px;margin:0 10px;overflow:hidden}.progress-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-green));border-radius:3px;transition:width .4s}.task-item{display:flex;align-items:flex-start;gap:10px;padding:10px;border-radius:var(--radius-sm);margin-bottom:6px;border:1px solid transparent;transition:var(--transition)}.task-item.done{background:rgba(45,212,160,.08);border-color:rgba(45,212,160,.2)}.task-check{width:20px;height:20px;border-radius:50%;border:2px solid var(--border);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:11px}.task-item.done .task-check{background:var(--accent-green);border-color:var(--accent-green);color:#fff}.task-text{font-size:12px;line-height:1.4}.task-text.done{color:var(--text-muted);text-decoration:line-through}.comment-card{background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px;margin-bottom:8px}.comment-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.comment-avatar{width:24px;height:24px;border-radius:50%;background:var(--accent);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:600}.comment-meta{flex:1 1}.comment-author{font-size:12px;font-weight:600}.comment-time{font-size:10px;color:var(--text-muted)}.comment-text{font-size:12px;line-height:1.5}.comment-del{color:var(--accent-red);font-size:11px;padding:2px 6px}.comment-form{margin-top:12px}.json-view{background:#0d1117;border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px;font-family:Consolas,monospace;font-size:10px;line-height:1.5;max-height:300px;overflow:auto;white-space:pre-wrap;word-break:break-all;color:#a8d4a8;margin-bottom:10px}#toasts{position:fixed;bottom:110px;right:16px;z-index:10000;display:flex;flex-direction:column;gap:8px;pointer-events:none}.toast{padding:10px 16px;border-radius:var(--radius-sm);font-size:13px;background:var(--bg-panel);border:1px solid var(--border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:var(--glow);animation:toastIn .3s ease;pointer-events:auto;max-width:320px}.toast.success{border-color:rgba(45,212,160,.4)}.toast.error{border-color:rgba(255,92,108,.4)}@keyframes toastIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.modal-overlay{position:fixed;inset:0;z-index:10001;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s}.modal-overlay.show{opacity:1;visibility:visible}.modal{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);padding:24px;max-width:400px;width:90%;box-shadow:var(--glow);transform:scale(.95);transition:transform .2s}.modal-overlay.show .modal{transform:scale(1)}.modal h3{font-size:16px;margin-bottom:8px}.modal p{font-size:13px;color:var(--text-muted);margin-bottom:16px;line-height:1.5}.modal-actions{display:flex;gap:8px;justify-content:flex-end}.hidden-input{display:none}.sheet-overlay{z-index:100}.mobile-panel-overlay,.sheet-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s}.mobile-panel-overlay{z-index:85}.mobile-panel-overlay.show,.sheet-overlay.show{opacity:1;visibility:visible}.bottom-sheet{position:fixed;left:12px;right:12px;bottom:0;z-index:100;max-height:70dvh;background:var(--glass-mobile);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid rgba(148,163,184,.16);border-bottom:none;border-radius:22px 22px 0 0;box-shadow:0 20px 60px rgba(0,0,0,.35);padding:8px 14px calc(14px + env(safe-area-inset-bottom));transform:translateY(110%);transition:transform .28s cubic-bezier(.4,0,.2,1);overflow:hidden;display:flex;flex-direction:column}.bottom-sheet.show{transform:translateY(0)}.sheet-handle{width:40px;height:4px;border-radius:999px;background:rgba(148,163,184,.35);margin:4px auto 10px;flex-shrink:0}.sheet-title{font-size:15px;font-weight:700;margin-bottom:10px;flex-shrink:0}.sheet-list{overflow-y:auto;flex:1 1;min-height:0}.sheet-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:14px 12px;border-radius:14px;font-size:14px;text-align:left;min-height:48px}.sheet-item.active,.sheet-item:hover{background:rgba(59,158,255,.12)}.sheet-item-badge{font-size:10px;color:var(--accent);font-weight:600}.sheet-actions{padding-top:10px;flex-shrink:0}.sheet-action-btn{width:100%;min-height:48px;justify-content:center}.sheet-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:8px;gap:8px}.sheet-tile{min-height:48px;padding:12px;border-radius:14px;background:rgba(59,158,255,.08);border:1px solid var(--border);font-size:12px;font-weight:600;text-align:center}.sheet-tile:hover{border-color:var(--border-bright)}@media (max-width:768px){:root{--header-h:var(--header-h-mobile);--panel-w:100%}.header-desktop{display:none!important}.header-mobile{display:flex;height:var(--header-h-mobile);padding:0 10px;gap:6px}.mobile-only{display:flex!important}.empty-mobile{display:block}.empty-desktop{display:none}.app{padding-top:var(--header-h-mobile);height:100dvh}.left-toolbar-desktop{display:none!important}.workspace-wrap{margin-left:0;margin-right:0;height:calc(100dvh - var(--header-h-mobile));flex:1 1}#workspace{height:100%;padding-bottom:calc(96px + env(safe-area-inset-bottom))}.workspace-wrap.panel-open{margin-right:0}body.device-sheet-open .workspace-wrap,body.panel-drawer-open .workspace-wrap{filter:brightness(.94)}.mobile-bottom-toolbar{left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));height:var(--mobile-toolbar-h);border-radius:22px;z-index:60;align-items:center;justify-content:space-around;gap:2px;padding:4px 6px;background:rgba(15,23,42,.92);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid rgba(148,163,184,.18);box-shadow:0 20px 50px rgba(0,0,0,.45)}.mobile-bottom-toolbar,.mobile-fab{display:flex!important;position:fixed}.mobile-fab{right:18px;bottom:calc(86px + env(safe-area-inset-bottom));width:56px;height:56px;border-radius:999px;z-index:70}.mobile-fab:active{transform:scale(.96)}.device-sheet-overlay{display:block}.device-dock{position:fixed;left:10px;right:10px;bottom:calc(82px + env(safe-area-inset-bottom));transform:translateY(120%);max-width:none;max-height:38dvh;z-index:80;opacity:0;visibility:hidden;pointer-events:none;flex-direction:column;align-items:stretch;background:rgba(15,23,42,.94);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid rgba(148,163,184,.18);border-radius:24px;box-shadow:0 20px 60px rgba(0,0,0,.45);overflow:hidden;transition:transform .28s cubic-bezier(.4,0,.2,1),opacity .22s,visibility .22s}.device-dock.dock-expanded{transform:translateY(0);opacity:1;visibility:visible;pointer-events:auto}.device-dock .mobile-device-sheet-header{display:flex!important}.device-dock .dock-body{display:flex;flex-direction:column;overflow:hidden;max-height:calc(38dvh - 52px)}.dock-cats{margin-bottom:0;border-radius:0;background:transparent;border:none;padding:4px 10px 6px;flex-shrink:0}.dock-cat{min-width:92px;min-height:36px;display:inline-flex;align-items:center;justify-content:center;padding:8px 14px;font-size:11px}.dock-items{display:grid;grid-template-columns:repeat(4,minmax(64px,1fr));grid-gap:10px;gap:10px;border:none;border-radius:0;background:transparent;box-shadow:none;padding:8px 12px 14px;overflow-y:auto;overflow-x:hidden;flex:1 1;min-height:0}.dock-item{min-width:0;width:100%;min-height:78px;height:auto;padding:10px 6px;border-radius:14px;background:rgba(59,158,255,.06);border:1px solid rgba(148,163,184,.12)}.dock-item svg{width:26px;height:26px}.dock-item span{font-size:11px}.mobile-panel-overlay{display:block}.panel-drawer-header{display:flex;align-items:center;justify-content:flex-end;padding:2px 8px 0}.panel-close-mobile{display:inline-flex!important}.panel-toggle{display:none}.right-panel{width:100%;top:auto;bottom:0;left:0;right:0;height:min(88dvh,720px);max-height:88dvh;border-left:none;border-top:1px solid rgba(148,163,184,.16);border-radius:24px 24px 0 0;background:rgba(15,23,42,.94);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);box-shadow:0 -20px 60px rgba(0,0,0,.4);z-index:90;transform:translateY(0)}.right-panel.collapsed{transform:translateY(110%);pointer-events:none}.panel-tabs{position:-webkit-sticky;position:sticky;top:0;background:inherit;z-index:2;overflow-x:auto;scrollbar-width:none;flex-shrink:0}.panel-tabs::-webkit-scrollbar{display:none}.panel-tab{min-height:44px;min-width:72px;font-size:12px;flex-shrink:0}.panel-content{padding-bottom:calc(16px + env(safe-area-inset-bottom));overflow-y:auto}#toasts{bottom:calc(96px + env(safe-area-inset-bottom));right:10px;left:10px;z-index:120}.toast{max-width:none}}@media (min-width:769px){.bottom-sheet,.device-sheet-overlay,.mobile-bottom-toolbar,.mobile-fab,.mobile-only,.mobile-panel-overlay,.panel-close-mobile,.panel-drawer-header,.sheet-overlay{display:none!important}.device-dock{transform:translateX(-50%);opacity:1;visibility:visible;pointer-events:auto}.device-dock.dock-collapsed .dock-body{display:flex}.device-dock .mobile-device-sheet-header{display:none!important}}@media (max-width:480px){.project-pill.mobile{max-width:88px}.dock-items{grid-template-columns:repeat(3,minmax(64px,1fr))}.dock-item{min-height:72px}.dock-item svg{width:22px;height:22px}.device-node{width:110px;min-height:64px;padding:8px}.mbt-label{font-size:8px}.mobile-fab{right:14px;width:52px;height:52px}}