:root{color-scheme:dark;--bg:#0b1220;--surface:#111c2e;--surface-2:#162338;--surface-3:#1c2c43;--line:#26364e;--text:#e7effb;--muted:#9bacc4;--accent:#2dd4bf;--blue:#70b8ff;--green:#53d9a4;--amber:#f3c16d;--red:#ff8796;--radius:14px;--font:Inter,Segoe UI,system-ui,-apple-system,sans-serif}
*{box-sizing:border-box}body.mqtt-ui{margin:0;min-height:100vh;background:var(--bg);color:var(--text);font:14px/1.55 var(--font)}a{color:var(--blue)}button,input,select{font:inherit}button,.btn,.linkbtn,.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2);color:var(--text);padding:9px 13px;font-weight:600;text-decoration:none;cursor:pointer;line-height:1.35}button:hover,.btn:hover,.linkbtn:hover,.button:hover{background:var(--surface-3);border-color:#446181}button.primary,.button.primary,.btn.primary{background:#144238;border-color:#28745f;color:#c2fce9}button.danger,.btn.danger{color:#ffc0c9;background:#3f2432;border-color:#72404b}button:disabled{opacity:.5;cursor:wait}button svg,.button svg{width:18px;height:18px}input:not([type=checkbox]):not([type=hidden]),select,.input,.select{background:#0e192a;color:var(--text);border:1px solid var(--line);border-radius:9px;padding:10px 12px;min-width:0}input:focus,select:focus,button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}h1,h2,h3,h4,p{margin-top:0}h1{font-size:clamp(25px,3vw,32px);line-height:1.25;letter-spacing:-.035em;margin-bottom:9px}h2{font-size:19px;letter-spacing:-.02em}h3{font-size:16px}small,.muted,.hint{color:var(--muted)}.hint{font-size:12px;line-height:1.65}.mono{font-family:Consolas,ui-monospace,monospace}.skip-link{position:fixed;top:-100px;left:12px;z-index:100;background:var(--surface);padding:12px}.skip-link:focus{top:12px}
.mqtt-layout{min-height:100vh;display:grid;grid-template-columns:224px minmax(0,1fr)}.mqtt-sidebar{position:sticky;top:0;height:100vh;padding:28px 17px 20px;background:#0f192a;border-right:1px solid var(--line);display:flex;flex-direction:column}.mqtt-brand{display:flex;gap:11px;align-items:center;color:var(--text);text-decoration:none;font-size:16px;font-weight:750;letter-spacing:-.025em;margin-bottom:39px}.mqtt-brand small{display:block;font-size:10px;letter-spacing:.01em;font-weight:400;color:var(--muted);margin-top:3px}.mqtt-mark{display:grid;place-items:center;width:39px;height:39px;flex-shrink:0;background:#16483f;color:#9ef8df;border:1px solid #296b5a;border-radius:11px;font-size:13px;font-weight:800}.nav-caption{font-size:10px;letter-spacing:.12em;color:#7f93af;padding:0 12px;margin-bottom:11px}.mqtt-nav{display:grid;gap:5px}.mqtt-nav a,.logout-link{display:flex;gap:11px;align-items:center;padding:11px 12px;border-radius:9px;color:#aabbd1;text-decoration:none;font-size:13px;font-weight:550}.mqtt-nav a:hover{background:#17243a;color:var(--text)}.mqtt-nav a.active{background:#183c39;color:#9ef8df}.mqtt-nav svg,.logout-link svg{width:19px;height:19px;flex-shrink:0}.sidebar-bottom{margin-top:auto;padding-top:30px}.privacy-note{display:block;padding:0 12px 15px;font-size:10px;line-height:1.8;color:#7f93af}.logout-link{border-top:1px solid var(--line);border-radius:0;padding-top:15px}.mqtt-main{width:100%;max-width:1510px;margin:0 auto;padding:35px clamp(20px,3vw,46px) 18px;min-width:0}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:27px}.page-header p{color:var(--muted);max-width:780px;margin-bottom:0;font-size:13px;line-height:1.75}.eyebrow{font-size:10px;font-weight:650;letter-spacing:.17em;color:#85a0bd;margin-bottom:11px}.source-badge,.tag{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);border-radius:7px;padding:5px 9px;font-size:10px;font-weight:750;letter-spacing:.06em;white-space:nowrap}.source-nas{background:#123b34;color:#8cebd1;border-color:#23594c}.source-server{background:#172f4a;color:#a1d1ff;border-color:#2a4b6c}.tag.good{background:#123b34;color:#9aefcf}.tag.warn{background:#44371f;color:#f7d28c}.tag.bad{background:#482738;color:#ffb2be}.tag.neutral{color:var(--muted)}.page-footer{border-top:1px solid var(--line);margin-top:28px;padding-top:15px;color:#768ba7;font-size:10px}
.panel{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);padding:22px;margin-bottom:20px}.panel-heading,.section-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:17px}.panel-heading h2,.section-heading h2{margin:0}.panel-heading p{color:var(--muted);font-size:12px;margin:5px 0 0}.toolbar,.actions{display:flex;flex-wrap:wrap;align-items:center;gap:9px}.toolbar input{flex:1;min-width:160px}.toolbar select{max-width:230px}.section-note{border:1px solid var(--line);background:#101e31;color:var(--muted);padding:13px 15px;border-radius:10px;font-size:12px;line-height:1.75;margin:16px 0}.metrics-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-bottom:25px}.metric-card{padding:17px 19px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}.metric-card small{display:block;font-size:11px}.metric-card strong{display:block;font-size:27px;line-height:1.4;letter-spacing:-.03em;margin:5px 0}.metric-card span{font-size:10px;color:var(--muted)}.broker-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-bottom:26px}.broker-card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:26px;position:relative;overflow:hidden}.broker-card::before{content:"";position:absolute;left:0;top:0;right:0;height:3px;background:var(--accent)}.broker-card.server::before{background:var(--blue)}.broker-card-top{display:flex;justify-content:space-between;gap:12px;align-items:center}.broker-symbol{width:45px;height:45px;display:grid;place-items:center;border:1px solid #2b574e;background:#153b36;color:#8cebd1;border-radius:12px}.broker-symbol svg{width:23px;height:23px}.server .broker-symbol{color:#a1d1ff;background:#182e48;border-color:#304b6d}.broker-card h2{font-size:23px;margin:20px 0 7px}.broker-card>p{color:var(--muted);font-size:12px;max-width:440px;min-height:43px}.broker-facts{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:20px 0}.broker-facts small{display:block;font-size:10px;margin-bottom:5px}.broker-facts strong{font-size:14px;font-weight:600}.broker-card .actions{justify-content:space-between}.broker-card .actions a{font-size:12px}.hub-link-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.hub-link{display:block;text-decoration:none;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:19px}.hub-link strong{display:block;font-size:13px;margin-bottom:6px}.hub-link span{color:var(--muted);font-size:11px;line-height:1.6}.hub-link:hover{border-color:#52708c}.hub-refresh{font-size:11px;color:var(--muted);margin-bottom:22px}.tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:20px}.tabs button{border:0;border-radius:0;background:none;color:var(--muted);padding:12px 17px;border-bottom:2px solid transparent}.tabs button.active{color:#9ef8df;border-bottom-color:var(--accent)}[hidden]{display:none!important}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:11px;background:var(--surface)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:13px 15px;border-bottom:1px solid var(--line);vertical-align:top}th{background:#152237;color:#a9bbd3;font-size:10px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}td{font-size:12px}tr:last-child td{border-bottom:0}tbody tr:hover td{background:#142138}.empty{color:var(--muted);padding:28px;text-align:center}.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.field{display:grid;gap:7px}.field label{font-size:12px;font-weight:600}.field .hint{font-size:11px}.check{display:flex;align-items:center;gap:10px;font-size:12px}.toast{display:none;border:1px solid #286655;border-radius:9px;padding:12px;margin-top:15px;color:#a4ecd3;background:#13392f}.toast.show{display:block}.notice{display:none;border:1px solid var(--line);border-radius:10px;padding:12px 15px;color:var(--muted);font-size:12px;margin-bottom:15px}.notice.show{display:block}.login-page{display:grid;place-items:center;padding:30px;min-height:100vh}.login-box{width:min(100%,420px)}.login-box .mqtt-brand{margin-bottom:25px;justify-content:center}.login-box .panel{padding:30px}.login-box h1{font-size:25px}.login-box .field{margin-bottom:17px}.login-box button{width:100%;margin-top:4px}.login-error{background:#432332;border:1px solid #75404c;border-radius:9px;padding:12px;font-size:12px;color:#ffc0cb;margin-bottom:18px}.login-footer{text-align:center;font-size:11px;color:var(--muted)}
.mqtt-nav a.mobile-logout{display:none}
@media(max-width:1100px){.mqtt-layout{grid-template-columns:190px minmax(0,1fr)}.mqtt-sidebar{padding:24px 12px}.mqtt-main{padding:28px 22px}.mqtt-brand{font-size:14px}.metrics-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hub-link-grid{grid-template-columns:1fr}.broker-card{padding:22px}}
@media(max-width:760px){.mqtt-layout{display:block}.mqtt-sidebar{position:static;height:auto;padding:17px 16px 0;border-right:0;border-bottom:1px solid var(--line)}.mqtt-brand{margin:0 0 15px}.mqtt-nav{display:flex;overflow:auto;gap:3px;padding-bottom:12px}.mqtt-nav a{flex-shrink:0;padding:9px 11px}.mqtt-nav svg{width:16px;height:16px}.nav-caption,.sidebar-bottom{display:none}.mqtt-main{padding:24px 16px 15px}.broker-grid{grid-template-columns:1fr}.page-header{margin-bottom:22px}.page-header h1{font-size:27px}.metrics-grid{gap:9px}.metric-card{padding:13px}.broker-card>p{min-height:0}.toolbar input,.toolbar select{width:100%;max-width:none;flex-basis:100%}.panel{padding:17px}.panel-heading{align-items:flex-start;flex-direction:column}.field-grid{grid-template-columns:1fr}.source-badge{font-size:9px}.hub-link-grid{gap:9px}}
@media(max-width:760px){.mqtt-nav a.mobile-logout{display:flex}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
