*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;background:#0f1923;color:#ddd;height:100vh;display:flex;flex-direction:column}
.login-page{justify-content:center;align-items:center;background:radial-gradient(ellipse at center,#1a2a3a 0%,#0a1018 100%)}
.login-box{background:#1a2733;border-radius:12px;padding:40px;width:360px;text-align:center;box-shadow:0 8px 32px rgba(0,0,0,.4)}
.login-title{font-size:28px;font-weight:700;color:#4fc3f7;margin-bottom:8px}
.login-subtitle{font-size:14px;color:#78909c;margin-bottom:32px}
.login-box input{width:100%;padding:12px 16px;margin-bottom:16px;background:#0d1b25;border:1px solid #263238;border-radius:8px;color:#fff;font-size:15px;outline:none}
.login-box input:focus{border-color:#4fc3f7}
.login-box button{width:100%;padding:12px;background:#4fc3f7;color:#0a1018;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer}
.login-box button:hover{background:#29b6f6}
.error{color:#ef5350;font-size:13px;margin-top:8px;display:none}
.error.show{display:block}
/* Topbar */
.topbar{display:flex;align-items:center;padding:10px 20px;background:#1a2733;border-bottom:1px solid #263238}
.logo{font-size:18px;font-weight:700;color:#4fc3f7;flex:1}
.stats{font-size:13px;color:#78909c}
.btn-logout{margin-left:16px;padding:6px 16px;background:#37474f;color:#ccc;border:none;border-radius:6px;cursor:pointer;font-size:13px}
.btn-logout:hover{background:#455a64}
/* Layout — 左 sidebar + 中间 main + 右消息面板 */
.layout{display:flex;flex:1;overflow:hidden}
.sidebar{width:260px;min-width:260px;background:#111d27;border-right:1px solid #263238;overflow-y:auto;display:flex;flex-direction:column}
.search-input{width:100%;padding:10px 14px;background:#0d1b25;border:none;border-bottom:1px solid #263238;color:#fff;font-size:14px;outline:none}
.cp-item{padding:12px 14px;border-bottom:1px solid #1a2733;cursor:pointer;font-size:13px}
.cp-item:hover{background:#1a2733}
.cp-item.active{background:#1a3a4a;border-left:3px solid #4fc3f7}
.cp-item .cp-id{font-weight:600;color:#e0e0e0}
.cp-item .cp-ip{font-size:11px;color:#546e7a;margin-top:2px}
.cp-item .cp-status{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}
.cp-status.online{background:#4caf50}
.cp-status.offline{background:#757575}
/* Main */
.main{flex:1;padding:16px;overflow-y:auto;min-width:0}
.placeholder{text-align:center;color:#455a64;margin-top:80px;font-size:16px}
.detail-card{background:#1a2733;border-radius:8px;padding:16px;margin-bottom:12px}
.detail-card h3{font-size:15px;color:#4fc3f7;margin-bottom:10px}
.detail-card .info-row{display:flex;padding:5px 0;font-size:13px}
.detail-card .info-label{color:#78909c;width:90px;flex-shrink:0}
.detail-card .info-value{color:#e0e0e0}
.connectors{display:flex;gap:12px;flex-wrap:wrap}
.connector-card{background:#1a2733;border-radius:8px;padding:14px;flex:1;min-width:160px;text-align:center}
.connector-card .conn-id{font-size:12px;color:#78909c;margin-bottom:4px}
.connector-card .conn-status{font-size:16px;font-weight:700;margin-bottom:6px}
.connector-card .conn-meters{font-size:12px;color:#90a4ae}
.status-Available{color:#4caf50}
.status-Charging{color:#ff9800}
.status-Faulted{color:#ef5350}
.status-Unavailable{color:#757575}
.action-bar{margin-top:10px;display:flex;gap:6px;flex-wrap:wrap}
.action-bar button{padding:7px 14px;background:#37474f;color:#ccc;border:none;border-radius:6px;cursor:pointer;font-size:12px}
.action-bar button:hover{background:#455a64}
.action-bar button.primary{background:#0277bd}
.action-bar button.primary:hover{background:#0288d1}
.action-bar button.danger{background:#b71c1c}
.action-bar button.danger:hover{background:#c62828}

/* Right message panel — compact text log */
.msg-panel{width:900px;min-width:200px;background:#111d27;border-left:1px solid #263238;display:flex;flex-direction:column;overflow:hidden}
.resize-handle{width:4px;cursor:col-resize;background:transparent;transition:background .2s;flex-shrink:0}
.resize-handle:hover,.resize-handle.active{background:#4fc3f7}
.msg-panel .log-header{padding:6px 10px;font-size:11px;color:#546e7a;font-weight:600;border-bottom:1px solid #1a2733;flex-shrink:0}
#logEntries{flex:1;overflow-y:auto;padding:0;font-family:'Courier New',monospace;font-size:11px;line-height:1.35}
.msg-line{padding:1px 10px;white-space:nowrap;display:flex;gap:6px}
.msg-line:hover{background:#151f28}
.msg-line .t{color:#455a64;flex-shrink:0}
.msg-line .cp{color:#4fc3f7;flex-shrink:0;font-weight:700}
.msg-line .dir{flex-shrink:0;font-weight:700;width:32px;text-align:center;font-size:10px}
.msg-line .dir.rx{color:#64b5f6}
.msg-line .dir.tx{color:#81c784}
.msg-line .body{color:#b0bec5;white-space:pre-wrap;word-break:break-all}
.msg-line .body.event{color:#90a4ae}
/* Tabs */
.tab-bar{display:flex;gap:0;margin-bottom:12px;border-bottom:2px solid #263238}
.tab-bar .tab{padding:8px 16px;background:transparent;color:#78909c;border:none;cursor:pointer;font-size:13px;border-bottom:2px solid transparent;margin-bottom:-2px}
.tab-bar .tab:hover{color:#b0bec5;background:#1a2733}
.tab-bar .tab.active{color:#4fc3f7;border-bottom-color:#4fc3f7}
/* Data tables */
.data-table{width:100%;border-collapse:collapse;font-size:12px}
.data-table th{text-align:left;padding:6px 8px;color:#546e7a;border-bottom:1px solid #263238}
.data-table td{padding:5px 8px;border-bottom:1px solid #1a2733;color:#b0bec5}
.data-table tr:hover{background:#151f28}

/* Scrollbar */
::-webkit-scrollbar{width:5px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#37474f;border-radius:3px}
