:root{--bg-primary: #1a1a2e;--bg-secondary: #16213e;--bg-card: #0f3460;--bg-hover: #1a4a7a;--text-primary: #e8e8e8;--text-secondary: #a0a0b0;--accent: #00b4d8;--accent-hover: #0096c7;--success: #4caf50;--warning: #ff9800;--error: #f44336;--border: #2a3a5c;--font-mono: "Courier New", monospace}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background-color:var(--bg-primary);color:var(--text-primary);line-height:1.6}.app-container{display:flex;flex-direction:column;height:100vh}.header{background:var(--bg-secondary);border-bottom:1px solid var(--border);padding:12px 24px;display:flex;align-items:center;justify-content:space-between}.header h1{font-size:18px;font-weight:600;color:var(--accent)}.header .status-badge{font-size:12px;padding:4px 10px;border-radius:12px;background:var(--success);color:#fff}.header .status-badge.disconnected{background:var(--error)}.main-content{display:flex;flex:1;overflow:hidden}.sidebar{width:280px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}.sidebar-header{padding:12px 16px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);border-bottom:1px solid var(--border)}.device-list{flex:1;overflow-y:auto;padding:8px}.device-item{padding:10px 12px;border-radius:6px;cursor:pointer;margin-bottom:4px;transition:background .15s}.device-item:hover{background:var(--bg-hover)}.device-item.selected{background:var(--bg-card);border:1px solid var(--accent)}.device-item .endpoint{font-size:14px;font-weight:500}.device-item .status{font-size:11px;color:var(--text-secondary);margin-top:2px}.device-item .status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}.device-item .status-dot.registered{background:var(--success)}.device-item .status-dot.active{background:var(--accent)}.device-item .status-dot.deregistered{background:var(--text-secondary)}.content-area{flex:1;display:flex;flex-direction:column;overflow:hidden}.object-browser{flex:1;overflow-y:auto;padding:20px}.no-device{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-secondary);font-size:15px}.object-group{margin-bottom:8px;border:1px solid var(--border);border-radius:6px;overflow:hidden}.object-header{display:flex;align-items:center;padding:10px 14px;background:var(--bg-card);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}.object-header:hover{background:var(--bg-hover)}.object-header .toggle{width:16px;margin-right:8px;font-size:12px;color:var(--text-secondary)}.object-header .obj-id{font-family:var(--font-mono);font-size:13px;color:var(--accent);margin-right:10px;min-width:50px}.object-header .obj-name{font-size:14px;font-weight:500;flex:1}.resource-table{width:100%;border-collapse:collapse;font-size:13px}.resource-table th{text-align:left;padding:8px 14px;background:var(--bg-secondary);color:var(--text-secondary);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.5px}.resource-table td{padding:8px 14px;border-top:1px solid var(--border)}.resource-table tr:hover td{background:#00b4d80d}.resource-table .res-id{font-family:var(--font-mono);color:var(--accent);width:60px}.resource-table .res-ops{width:60px}.resource-table .res-type{width:80px;color:var(--text-secondary)}.resource-table .res-value{font-family:var(--font-mono);color:var(--success)}.btn{padding:4px 10px;border:1px solid var(--border);border-radius:4px;background:var(--bg-card);color:var(--text-primary);font-size:12px;cursor:pointer;transition:all .15s}.btn:hover{background:var(--accent);border-color:var(--accent);color:#fff}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-read{border-color:var(--accent)}.btn-write{border-color:var(--warning)}.btn-execute{border-color:var(--error)}.btn-observe{border-color:var(--success)}.btn-observe-active{background:var(--success);border-color:var(--success);color:#fff;font-weight:600}.btn-observe-active:hover{background:#388e3c;border-color:#388e3c;color:#fff}.observing-row td{background:#4caf5014!important;border-left:2px solid var(--success)}.observe-pulse{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--success);margin-left:8px;vertical-align:middle;animation:observe-blink 1.5s ease-in-out infinite}@keyframes observe-blink{0%,to{opacity:1}50%{opacity:.3}}.action-btns{display:flex;gap:4px}.notification-bar{padding:8px 24px;background:var(--bg-secondary);border-top:1px solid var(--border);font-size:12px;color:var(--text-secondary);display:flex;align-items:center;gap:8px}.notification-bar .ws-indicator{width:8px;height:8px;border-radius:50%}.notification-bar .ws-indicator.connected{background:var(--success)}.notification-bar .ws-indicator.disconnected{background:var(--error)}.dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.dialog-box{background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;width:420px;max-width:90vw;box-shadow:0 8px 32px #0006}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border)}.dialog-header h3{font-size:15px;font-weight:600;color:var(--text-primary)}.dialog-close{background:none;border:none;color:var(--text-secondary);font-size:20px;cursor:pointer;padding:0 4px;line-height:1}.dialog-close:hover{color:var(--text-primary)}.dialog-meta{padding:12px 18px;border-bottom:1px solid var(--border)}.dialog-meta-row{display:flex;gap:8px;margin-bottom:4px;font-size:13px}.dialog-label{color:var(--text-secondary);min-width:70px}.dialog-value{font-family:var(--font-mono);color:var(--accent)}.dialog-input-group{padding:16px 18px 8px}.dialog-input-group label{display:block;font-size:12px;color:var(--text-secondary);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}.dialog-input-group input{width:100%;padding:8px 12px;background:var(--bg-primary);border:1px solid var(--border);border-radius:4px;color:var(--text-primary);font-family:var(--font-mono);font-size:14px;outline:none}.dialog-input-group input:focus{border-color:var(--accent)}.dialog-input-group input:disabled{opacity:.5}.dialog-error{padding:0 18px 8px;color:var(--error);font-size:12px}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid var(--border)}.btn-write-submit{background:var(--warning);border-color:var(--warning);color:#000;font-weight:600}.btn-write-submit:hover{background:#e68900;border-color:#e68900}.btn-execute-submit{background:var(--error);border-color:var(--error);color:#fff;font-weight:600}.btn-execute-submit:hover{background:#d32f2f;border-color:#d32f2f}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--accent)}
