:root{--bg-primary: #0f1419;--bg-secondary: #1a2332;--bg-tertiary: #243044;--bg-elevated: #2d3a4d;--text-primary: #e6edf3;--text-secondary: #8b949e;--text-muted: #6e7681;--accent: #33c3f0;--accent-hover: #5dd5f5;--accent-muted: rgba(51, 195, 240, .15);--success: #3fb950;--success-bg: rgba(63, 185, 80, .12);--warning: #d29922;--error: #f85149;--error-bg: rgba(248, 81, 73, .12);--border: rgba(110, 118, 129, .3);--border-focus: var(--accent);--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--shadow: 0 4px 24px rgba(0, 0, 0, .25);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .35);font-family:DM Sans,system-ui,-apple-system,sans-serif;line-height:1.5;font-weight:400;color:var(--text-primary);background-color:var(--bg-primary);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}a{color:var(--accent);text-decoration:none;transition:color .15s ease}a:hover{color:var(--accent-hover)}h1,h2,h3{font-weight:600;color:var(--text-primary);margin-top:0}h1{font-size:1.75rem;margin-bottom:1.25rem}h2{font-size:1.25rem;margin-bottom:.75rem}h3{font-size:1rem;margin-bottom:.5rem}button{font-family:inherit;font-weight:500;cursor:pointer;transition:all .15s ease;border-radius:var(--radius-md)}.layout{display:flex;flex-direction:column;min-height:100vh}nav{display:flex;align-items:center;gap:.25rem;padding:.75rem 1.5rem;background:var(--bg-secondary);border-bottom:1px solid var(--border);flex-wrap:wrap}nav a,nav button{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem .875rem;font-size:.9rem;font-weight:500;color:var(--text-secondary);background:transparent;border:none;border-radius:var(--radius-md);text-decoration:none;cursor:pointer;transition:all .15s ease}nav a:hover,nav button:hover{color:var(--text-primary);background:var(--bg-tertiary)}nav a.active{color:var(--accent);background:var(--accent-muted)}nav button.logout{margin-left:auto;color:var(--text-muted)}nav button.logout:hover{color:var(--error);background:var(--error-bg)}nav a.external{color:var(--accent)}nav a.external:hover{background:var(--accent-muted)}main{flex:1;padding:1.5rem;max-width:1400px;margin:0 auto;width:100%}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem}.login{max-width:380px;margin:4rem auto;padding:2rem;background:var(--bg-secondary);border-radius:var(--radius-xl);border:1px solid var(--border);box-shadow:var(--shadow)}.login h1{text-align:center;margin-bottom:1.5rem}.login label{display:block;margin-bottom:1rem;font-size:.9rem;color:var(--text-secondary)}.login input{width:100%;margin-top:.25rem}.login button{width:100%;margin-top:.5rem;padding:.75rem}input,select,button.btn{padding:.5rem .875rem;font-size:.9rem;font-family:inherit;color:var(--text-primary);background:var(--bg-tertiary);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color .15s,box-shadow .15s}input:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-muted)}input::placeholder{color:var(--text-muted)}button.btn-primary{background:var(--accent);color:var(--bg-primary);border-color:var(--accent)}button.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}button.btn-ghost{background:transparent;color:var(--accent)}button.btn-ghost:hover{background:var(--accent-muted)}button.btn-danger{background:transparent;color:var(--error)}button.btn-danger:hover{background:var(--error-bg)}button.btn,.btn{display:inline-flex;align-items:center;gap:.4rem}.loading,.error-box{display:flex;align-items:center;justify-content:center;min-height:200px;padding:2rem}.loading{color:var(--text-secondary)}.error-box{flex-direction:column;gap:.5rem;color:var(--error);background:var(--error-bg);border-radius:var(--radius-md);border:1px solid rgba(248,81,73,.3)}.dashboard .cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:1rem;margin-bottom:1.5rem}.dashboard .card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.25rem;transition:border-color .15s,box-shadow .15s}.dashboard .card:hover{border-color:var(--accent);box-shadow:var(--shadow)}.dashboard .card h3{font-size:.85rem;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;margin-bottom:.5rem}.dashboard .big{font-size:2rem;font-weight:700;color:var(--accent);margin:0}.dashboard .meta{color:var(--text-secondary);font-size:.9rem;margin-bottom:1rem}.filters{display:flex;gap:1rem;margin-bottom:1.25rem;flex-wrap:wrap}.filters select{min-width:160px}.table-wrap{background:var(--bg-secondary);border-radius:var(--radius-lg);border:1px solid var(--border);overflow:hidden;box-shadow:var(--shadow)}table{width:100%;border-collapse:collapse}th,td{padding:.75rem 1rem;text-align:left}th{background:var(--bg-tertiary);font-size:.75rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}tbody tr{border-top:1px solid var(--border);transition:background .1s ease}tbody tr:hover{background:var(--bg-tertiary)}tbody tr:nth-child(2n){background:#ffffff05}tbody tr:nth-child(2n):hover{background:var(--bg-tertiary)}td{color:var(--text-primary);font-size:.9rem}code{font-size:.85em;font-family:SF Mono,Monaco,Consolas,monospace;background:var(--bg-primary);padding:.2em .5em;border-radius:var(--radius-sm);color:var(--text-secondary)}.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .5rem;font-size:.8rem;font-weight:500;border-radius:999px}.badge.online{color:var(--success);background:var(--success-bg)}.badge.online:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--success)}.badge.offline{color:var(--text-muted);background:var(--bg-tertiary)}.td-actions{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.td-actions label{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.9rem;color:var(--text-secondary)}.td-actions input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent)}.td-actions a{display:inline-flex;align-items:center;gap:.35rem;font-size:.875rem}.map-devices .grid{display:grid;grid-template-columns:1fr 1.2fr;gap:2rem;align-items:start}@media(max-width:900px){.map-devices .grid{grid-template-columns:1fr}}.map-devices .panel{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem;box-shadow:var(--shadow)}.map-devices ul{list-style:none;padding:0;margin:0}.map-devices ul li{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem;border-bottom:1px solid var(--border);transition:background .1s}.map-devices ul li:last-child{border-bottom:none}.map-devices ul li:hover{background:var(--bg-tertiary)}.map-devices ul li span{flex:1;overflow:hidden;text-overflow:ellipsis}.map-devices form label{display:block;margin-bottom:1rem;font-size:.9rem;color:var(--text-secondary)}.map-devices form input,.map-devices form select{width:100%;margin-top:.25rem}.map-devices form button{margin-top:.5rem}.meshviewer-sources .intro{color:var(--text-secondary);margin-bottom:1.5rem}.meshviewer-sources form{display:flex;gap:.75rem;margin-bottom:1.5rem;flex-wrap:wrap}.meshviewer-sources form input{flex:1;min-width:200px}.settings form label{display:block;margin-bottom:1.25rem;font-size:.9rem;color:var(--text-secondary)}.settings form input{width:100%;max-width:400px;margin-top:.25rem}.settings form button{margin-top:.5rem}.gateways .intro{color:var(--text-secondary);margin-bottom:1.5rem}.gateways .intro code{font-size:.9em}.gateways .panel{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem;margin-bottom:1.5rem;box-shadow:var(--shadow)}.gateways .panel h2{margin-top:0;margin-bottom:1.25rem}.gateways form label{display:block;margin-bottom:1rem;font-size:.9rem;color:var(--text-secondary)}.gateways form input,.gateways form textarea{width:100%;max-width:400px;margin-top:.25rem}.gateways form textarea{resize:vertical;min-height:4rem}.gateways .form-actions{display:flex;gap:.75rem;margin-top:1rem}
