*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --red:#CE2027;--red-dk:#A51920;
  --navy:#1A2744;--navy2:#0F1A2E;--navy3:#243054;
  --text:#1F2937;--muted:#6B7280;--muted2:#9CA3AF;
  --border:#D1D5DB;--border-lt:#E9ECEF;
  --bg:#EAECF0;--surf:#FFFFFF;--surf2:#F3F4F6;
  --green:#16A34A;--green-bg:#DCFCE7;--green-bd:#86EFAC;
  --amber:#D97706;--amber-bg:#FEF3C7;
  --blue:#2563EB;--blue-bg:#DBEAFE;--blue-bd:#93C5FD;
  --detect:#0EA5E9;--detect-dk:#0284C7;
  --mono:'IBM Plex Mono',monospace;--sans:'IBM Plex Sans',sans-serif;
  --r:5px;--sh:0 1px 3px rgba(0,0,0,.09);--sh2:0 6px 20px rgba(0,0,0,.15);
}
html,body{height:100%;overflow:hidden;font-family:var(--sans);font-size:14px;color:var(--text)}

/* ═══════════════════════════════════════════════════════
   TRANSITIONS
═══════════════════════════════════════════════════════ */
.fade-enter-active,.fade-leave-active{transition:opacity .4s ease}
.fade-enter-from,.fade-leave-to{opacity:0}
.slide-enter-active,.slide-leave-active{transition:transform .35s ease,opacity .35s ease}
.slide-enter-from{transform:translateX(-20px);opacity:0}
.slide-leave-to{transform:translateX(20px);opacity:0}

/* ═══════════════════════════════════════════════════════
   LOGIN SCREEN
═══════════════════════════════════════════════════════ */
.login-screen{position:fixed;inset:0;display:flex;z-index:1000}
.login-left{flex:0 0 55%;background:linear-gradient(135deg,#0D1220 0%,#1A2744 50%,#0D1A32 100%);
  position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center}
.login-left .tagline{color:#4E6494;font-size:13px;margin-top:12px;letter-spacing:.06em;text-transform:uppercase}
.login-left h2{color:#6B8CC0;font-size:22px;font-weight:300;margin-top:8px;text-align:center;padding:0 30px}
/* Industrial SVG bg circles */
.orb{position:absolute;border-radius:50%;border:1px solid;animation:pulse 3s ease-in-out infinite}
.orb1{width:300px;height:300px;top:50%;left:50%;transform:translate(-50%,-50%);border-color:rgba(206,32,39,.15);animation-delay:0s}
.orb2{width:220px;height:220px;top:50%;left:50%;transform:translate(-50%,-50%);border-color:rgba(206,32,39,.2);animation-delay:.4s}
.orb3{width:140px;height:140px;top:50%;left:50%;transform:translate(-50%,-50%);border-color:rgba(206,32,39,.3);animation-delay:.8s}
.orb-core{position:absolute;width:60px;height:60px;top:50%;left:50%;transform:translate(-50%,-50%);
  background:radial-gradient(circle,rgba(206,32,39,.4),rgba(206,32,39,.1));border-radius:50%}
.hex{position:absolute;opacity:.06;font-size:40px;user-select:none}
@keyframes pulse{0%,100%{transform:translate(-50%,-50%) scale(1);opacity:.6}50%{transform:translate(-50%,-50%) scale(1.06);opacity:1}}
@keyframes float{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-12px) rotate(5deg)}}
.login-illo{position:absolute;width:100%;height:100%}
.login-logo{width:180px;object-fit:contain;position:relative;z-index:2;filter:drop-shadow(0 4px 20px rgba(206,32,39,.4))}
.login-logo-fallback{width:180px;height:60px;background:var(--red);border-radius:8px;display:flex;align-items:center;
  justify-content:center;color:#fff;font-weight:700;font-size:20px;position:relative;z-index:2}
.corner-dots{position:absolute;inset:0;pointer-events:none}
.cdot{position:absolute;width:4px;height:4px;border-radius:50%;background:rgba(206,32,39,.3)}

.login-right{flex:1;background:#fff;display:flex;flex-direction:column;align-items:center;
  justify-content:center;padding:40px;overflow-y:auto}
.lf{width:100%;max-width:380px}
.lf-logo{width:160px;margin-bottom:28px;object-fit:contain}
.lf-logo-fallback{width:160px;height:50px;background:var(--red);border-radius:6px;display:flex;align-items:center;
  justify-content:center;color:#fff;font-weight:700;font-size:18px;margin-bottom:28px}
.lf h1{font-size:24px;font-weight:700;color:var(--navy);margin-bottom:6px}
.lf p{font-size:13px;color:var(--muted);margin-bottom:28px}
.lf-group{margin-bottom:16px}
.lf-group label{display:block;font-size:12px;font-weight:600;color:var(--text);margin-bottom:6px;letter-spacing:.02em}
.lf-inp{width:100%;border:1.5px solid var(--border);border-radius:6px;padding:10px 14px;font-family:var(--sans);
  font-size:14px;color:var(--text);outline:none;transition:border-color .15s;background:#fff}
.lf-inp:focus{border-color:var(--red);box-shadow:0 0 0 3px rgba(206,32,39,.08)}
.lf-err{background:#FEE2E2;color:#DC2626;border:1px solid #FCA5A5;border-radius:5px;padding:8px 12px;font-size:12px;margin-bottom:12px}
.lf-btn{width:100%;background:var(--red);color:#fff;border:none;border-radius:6px;padding:12px;
  font-family:var(--sans);font-size:14px;font-weight:700;cursor:pointer;transition:all .15s;margin-top:4px}
.lf-btn:hover{background:var(--red-dk);transform:translateY(-1px);box-shadow:0 4px 12px rgba(206,32,39,.3)}
.lf-btn:active{transform:none}
.lf-footer{margin-top:24px;font-size:11px;color:var(--muted2);text-align:center}

/* ═══════════════════════════════════════════════════════
   LOADING SPLASH
═══════════════════════════════════════════════════════ */
.loading-screen{position:fixed;inset:0;background:var(--navy2);display:flex;flex-direction:column;
  align-items:center;justify-content:center;z-index:999}
.loading-logo-wrap{position:relative;width:180px;height:80px;margin-bottom:30px}
.loading-logo-wrap img{width:100%;height:100%;object-fit:contain;animation:logoFloat 2s ease-in-out infinite}
.loading-ring{position:absolute;inset:-20px;border-radius:50%;border:2px solid transparent;
  border-top-color:var(--red);animation:spin 1.2s linear infinite}
.loading-ring2{position:absolute;inset:-30px;border-radius:50%;border:1px solid rgba(206,32,39,.3);
  animation:spin 2s linear infinite reverse}
@keyframes logoFloat{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-8px) scale(1.03)}}
@keyframes spin{to{transform:rotate(360deg)}}
.loading-text{color:#4E6494;font-size:14px;margin-bottom:20px;letter-spacing:.05em}
.loading-bar-wrap{width:240px;height:4px;background:rgba(255,255,255,.08);border-radius:2px;overflow:hidden}
.loading-bar-fill{height:100%;background:linear-gradient(90deg,var(--red),#F87171);border-radius:2px;transition:width .2s ease}

/* ═══════════════════════════════════════════════════════
   LOGOUT OVERLAY
═══════════════════════════════════════════════════════ */
.logout-overlay{position:fixed;inset:0;background:rgba(13,18,32,.9);display:flex;flex-direction:column;
  align-items:center;justify-content:center;z-index:999}
.logout-ring{width:70px;height:70px;border-radius:50%;border:3px solid rgba(255,255,255,.1);
  border-top-color:var(--red);animation:spin .9s linear infinite;margin-bottom:16px}
.logout-text{color:#6B7FA8;font-size:14px;letter-spacing:.05em}

/* ═══════════════════════════════════════════════════════
   MAIN APP
═══════════════════════════════════════════════════════ */
.main-app{display:flex;flex-direction:column;height:100vh;overflow:hidden}

/* HEADER */
header{
  flex:0 0 auto;min-height:70px;
  background:var(--surf);border-bottom:3px solid var(--red);
  display:flex;align-items:center;padding:0 18px;gap:12px;
  box-shadow:var(--sh2);z-index:50;flex-wrap:wrap
}
.hdr-hamburger{background:none;border:none;cursor:pointer;padding:6px;border-radius:5px;
  display:flex;flex-direction:column;gap:4px;transition:background .12s}
.hdr-hamburger:hover{background:var(--surf2)}
.hdr-hamburger span{width:20px;height:2px;background:var(--text);border-radius:1px;transition:all .2s}
.hdr-logo-wrap{display:flex;align-items:center;gap:10px}
.hdr-logo{height:38px;object-fit:contain}
.hdr-title{font-size:18px;font-weight:700;color:var(--navy);letter-spacing:-.01em}
.hdr-title span{color:var(--red)}
.hdr-title sub{font-size:10px;font-weight:400;color:var(--muted);margin-left:4px}
/* Inline menu items */
.hdr-menu{display:flex;align-items:stretch;margin-left:8px;gap:2px}
.hdr-mi{position:relative;display:flex;align-items:center;padding:0 12px;cursor:pointer;
  font-size:13px;color:var(--muted);font-weight:500;border-radius:5px;transition:all .12s;user-select:none;height:46px}
.hdr-mi:hover,.hdr-mi.open{background:var(--surf2);color:var(--text)}
.hdr-dd{position:absolute;top:calc(100% + 6px);left:0;background:var(--surf);border:1px solid var(--border);
  border-radius:0 var(--r) var(--r) var(--r);box-shadow:var(--sh2);min-width:200px;z-index:200;overflow:hidden}
.hdr-opt{padding:9px 16px;font-size:13px;color:var(--text);cursor:pointer;display:flex;align-items:center;gap:8px}
.hdr-opt:hover{background:var(--surf2)}
.hdr-sep{border-top:1px solid var(--border-lt);margin:3px 0}
.hdr-sub{padding:6px 16px 4px;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted2)}
.hdr-space{flex:1}
/* connection badge */
.hdr-conn{display:flex;align-items:center;gap:6px;background:var(--surf2);border:1px solid var(--border);
  border-radius:20px;padding:5px 12px;font-size:11px;font-weight:600;color:var(--muted);font-family:var(--mono);white-space:nowrap}
.hdr-conn.on{background:var(--green-bg);border-color:var(--green-bd);color:var(--green)}
.hdr-conn .dot{width:7px;height:7px;border-radius:50%;background:var(--muted);flex-shrink:0}
.hdr-conn.on .dot{background:var(--green);box-shadow:0 0 6px var(--green)}
/* user */
.hdr-user{display:flex;align-items:center;gap:8px;cursor:pointer;position:relative;margin-left:10px;
  padding:6px 10px;border-radius:8px;transition:background .12s}
.hdr-user:hover{background:var(--surf2)}
.hdr-avatar{width:34px;height:34px;border-radius:50%;background:var(--navy);color:#fff;font-weight:700;
  font-size:13px;display:flex;align-items:center;justify-content:center;border:2px solid var(--border);overflow:hidden;flex-shrink:0}
.hdr-avatar img{width:100%;height:100%;object-fit:cover}
.hdr-uname{font-size:12px;font-weight:600;color:var(--text);white-space:nowrap}
.hdr-urole{font-size:10px;color:var(--muted);white-space:nowrap}
.hdr-caret{font-size:10px;color:var(--muted)}
.u-dd{position:absolute;top:calc(100% + 4px);right:0;background:var(--surf);border:1px solid var(--border);
  border-radius:var(--r);box-shadow:var(--sh2);min-width:170px;z-index:200;overflow:hidden}
.u-dd-item{padding:9px 14px;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:8px;color:var(--text)}
.u-dd-item:hover{background:var(--surf2)}
.u-dd-danger{color:var(--red)}

/* APP BODY */
.app-body{flex:1;display:flex;overflow:hidden}

/* SIDEBAR */
.sidebar{
  flex:0 0 250px;min-width:0;
  background:var(--navy);
  display:flex;flex-direction:column;overflow:hidden;
  border-right:1px solid var(--navy2);
  transition:flex-basis .25s ease,min-width .25s ease
}
.sidebar.collapsed{flex-basis:0}
.sb-hdr{padding:10px 14px 8px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:#8099C0;border-bottom:1px solid var(--navy3);flex-shrink:0}
.sb-scroll{flex:1;overflow-y:auto;scroll-behavior:smooth}
.sb-sec{padding:10px 12px;border-bottom:1px solid var(--navy3)}
.sb-sec-title{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#6080A8;margin-bottom:8px}

/* Tree */
.tree-row{display:flex;align-items:center;gap:7px;padding:7px 9px;border-radius:5px;cursor:pointer;
  transition:background .1s;margin-bottom:3px}
.tree-row:hover{background:rgba(255,255,255,.06)}
.tree-row.sel{background:rgba(206,32,39,.2);border-left:3px solid #CE2027;padding-left:6px}
.tree-icon{font-size:14px;flex-shrink:0}
.tree-txt{font-size:13px;font-weight:500;color:#C9D3E8;flex:1;min-width:0;word-break:break-all}
.tree-txt small{display:block;font-size:11px;color:#5A7098;font-family:var(--mono)}
.tree-ch{margin-left:16px}
.tree-ch .tree-row{padding:4px 9px}
.tree-ch .tree-txt{font-size:11px;font-family:var(--mono);color:#6B88B0}
.sp{font-size:9px;padding:2px 6px;border-radius:3px;font-weight:700;font-family:var(--mono);flex-shrink:0}
.sp-on{background:#064E3B;color:#34D399}.sp-off{background:#1E2D50;color:#5A7098}

/* Monitor slot status dot */
.mon-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.md-on{background:#34D399;box-shadow:0 0 5px #34D399}
.md-off{background:#2A3D5A}
/* Offline slot row — dimmed, not interactive */
.tree-ch .tree-row.mon-offline{opacity:.42;cursor:default}
.tree-ch .tree-row.mon-offline:hover{background:transparent}

/* Sidebar buttons */
.sb-btn{width:100%;font-family:var(--sans);font-size:13px;font-weight:600;border:none;
  border-radius:5px;padding:8px 12px;cursor:pointer;display:flex;align-items:center;
  justify-content:center;gap:6px;transition:all .14s;margin-bottom:6px}
.sb-btn:disabled{opacity:.35;cursor:not-allowed}
.sb-detect{background:var(--detect);color:#fff}
.sb-detect:hover:not(:disabled){background:var(--detect-dk)}
.sb-red{background:var(--red);color:#fff}.sb-red:hover:not(:disabled){background:var(--red-dk)}
.sb-out{background:transparent;color:#8099C0;border:1px solid #2A3D6E;font-size:13px}
.sb-out:hover:not(:disabled){background:rgba(255,255,255,.06);color:#C9D3E8}
.sb-danger{background:transparent;color:#F87171;border:1px solid #3D1E1E}
.sb-danger:hover:not(:disabled){background:rgba(239,68,68,.1)}
.sb-field{margin-bottom:8px}
.sb-field label{display:block;font-size:11px;color:#6080A8;margin-bottom:4px;font-weight:500}
.sb-sel{width:100%;background:#0D1220;border:1px solid #2A3D6E;border-radius:4px;color:#C9D3E8;
  font-family:var(--mono);font-size:12px;padding:6px 24px 6px 8px;outline:none;appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238099C0' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 7px center;cursor:pointer}

/* RIGHT AREA (main + log stacked vertically) */
.right-area{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}

/* LOG PANEL (bottom strip, collapsible) */
.log-panel{
  flex:0 0 auto;
  height:220px;
  background:var(--navy2);
  display:flex;flex-direction:column;
  overflow:hidden;
  border-top:2px solid var(--navy3);
  transition:height .25s ease
}
.log-panel.lp-collapsed{height:38px}
.log-panel.lp-resizing{transition:none!important}
/* Resize drag handle at top of log panel */
.log-resize-handle{
  height:6px;background:transparent;cursor:ns-resize;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;user-select:none
}
.log-resize-handle:hover{background:rgba(255,255,255,.06)}
.log-resize-handle::before{
  content:'';width:36px;height:3px;background:#2A3D6E;border-radius:2px
}

/* HEX ↔ ASCII TOOL */
.hex-tool{
  position:fixed;
  bottom:280px;   /* above log panel (220px) + footer (42px) + gap */
  right:12px;
  width:460px;max-width:calc(100vw - 24px);
  background:var(--navy);border:1px solid var(--navy3);
  border-radius:6px;box-shadow:0 -4px 20px rgba(0,0,0,.4);
  z-index:250;overflow:hidden
}
.hex-tool-hdr{
  background:#0D1220;padding:8px 12px;
  display:flex;align-items:center;gap:8px;
  font-size:11px;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;color:#8099C0;
  border-bottom:1px solid var(--navy3)
}
.hex-tool-body{padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.hex-tool-ta{
  width:100%;background:#0D1220;border:1px solid #2A3D6E;
  border-radius:4px;color:#C9D3E8;font-family:var(--mono);
  font-size:11px;padding:7px 9px;resize:vertical;
  min-height:60px;outline:none;transition:border-color .14s;line-height:1.6
}
.hex-tool-ta:focus{border-color:var(--detect)}
.hex-tool-ta.out{color:#86EFAC;cursor:default}
.hex-tool-btns{display:flex;gap:5px;flex-wrap:wrap}
.hex-tool-btns .lp-action-btn{font-size:11px;padding:4px 10px}
.lp-bar{display:flex;align-items:center;padding:8px 12px;background:var(--navy);border-bottom:1px solid var(--navy3);flex-shrink:0}
.lp-bar h3{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#A8C0DC}
.lp-bar .sp2{flex:1}
.lp-cnt{font-size:11px;font-family:var(--mono);color:#96B4CC;margin-right:6px}
.lp-action-btn{font-size:10px;padding:3px 8px;border:1px solid #3A5080;background:transparent;
  color:#96B4CC;border-radius:3px;cursor:pointer;transition:all .12s;margin-left:3px}
.lp-action-btn:hover{background:rgba(255,255,255,.08);color:#E0ECFF}
.log-scroll{flex:1;overflow-y:auto;padding:4px 0;scroll-behavior:smooth}
.log-line{padding:3px 10px;font-size:11px;font-family:var(--mono);line-height:1.7;
  display:flex;gap:6px;align-items:baseline}
.log-line.ll-has-bytes{align-items:flex-start;padding-top:5px;padding-bottom:5px}
.log-line:hover{background:rgba(255,255,255,.04)}
.ll-time{color:#96B4CC;flex-shrink:0;font-size:11px;width:66px}
.ll-tag{flex-shrink:0;min-width:44px}
.tag-info{color:#60A8E8}.tag-debug-tx{color:#F59E0B}.tag-debug-rx{color:#34D399}.tag-error{color:#F87171}
.ll-msg{word-break:break-all;font-size:11px}
.ll-msg.info{color:#B0C8E8}.ll-msg.debug-tx{color:#FCD34D}.ll-msg.debug-rx{color:#86EFAC}.ll-msg.error{color:#FCA5A5}
/* Hex+ASCII dual-line display for TX/RX entries */
.ll-bytes-wrap{flex:1;min-width:0}
.ll-bytes-hex{font-size:11px;color:#FCD34D;word-break:break-all;line-height:1.8;white-space:pre-wrap;tab-size:1}
.ll-bytes-hex.rx{color:#86EFAC}
.ll-bytes-ascii{font-size:11px;color:#A8C4DC;word-break:break-all;line-height:1.6;margin-top:2px;padding-left:4px;border-left:2px solid #3A5080;white-space:pre-wrap;tab-size:1}
.ll-bytes-ascii .bin{color:#F59E0B;font-style:normal}
.ll-byte-count{font-size:11px;color:#96B4CC;margin-left:8px;vertical-align:middle}
.tag-decode{color:#A8C4DC;font-size:11px}
.imp-grp-hdr{font-weight:700;color:var(--muted);padding:6px 0 3px;border-bottom:1px solid var(--border-lt);margin-top:6px;grid-column:1/-1;font-size:11px;letter-spacing:.06em;text-transform:uppercase}
.imp-lbl{color:var(--muted)}
/* Device log tables */
.log-table-wrap{overflow-y:auto;max-height:62vh;border:1px solid var(--border);border-radius:4px}
.log-table{width:100%;border-collapse:collapse;font-size:12px}
.log-table thead tr{position:sticky;top:0;z-index:1}
.log-table th{background:var(--navy);color:#C9D3E8;padding:8px 12px;text-align:left;font-size:11px;font-weight:600;letter-spacing:.04em;white-space:nowrap}
.log-table td{padding:6px 12px;border-bottom:1px solid var(--border-lt);color:var(--text);white-space:nowrap}
.log-table tbody tr:hover td{background:var(--surf2)}
.log-table tbody tr:nth-child(even) td{background:#FAFAFA}
.log-meta{padding:10px 18px;font-size:12px;color:var(--muted);border-bottom:1px solid var(--border-lt);display:flex;align-items:center;gap:16px}
.log-badge{background:var(--navy);color:#C9D3E8;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}
.ll-msg.decode{color:#A8C4DC;font-size:11px;border-left:2px solid #3A5080;padding-left:6px;line-height:1.8}
/* Scrollbar styling */
.log-scroll::-webkit-scrollbar{width:4px}
.log-scroll::-webkit-scrollbar-track{background:transparent}
.log-scroll::-webkit-scrollbar-thumb{background:#1E2D50;border-radius:2px}

/* MAIN CONTENT */
.main-content{flex:1;overflow:hidden;display:flex;flex-direction:column}
.main-scroll{flex:1;overflow-y:auto;overflow-x:hidden;padding:10px;scroll-behavior:smooth}
.main-cols{display:flex;gap:8px}
.col-device{flex:1 1 0;min-width:140px}
.col-sensor{flex:1 1 0;min-width:130px}
.col-settings{flex:1 1 0;min-width:130px}
.col-cal{flex:1 1 0;min-width:130px}

/* CARDS */
.card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r);
  box-shadow:var(--sh);overflow:hidden;margin-bottom:10px}
.card:last-child{margin-bottom:0}
.ch{background:var(--surf2);border-bottom:1px solid var(--border);padding:8px 12px;
  font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);
  display:flex;align-items:center;gap:6px}
.ch-icon{color:var(--red);font-size:13px}
.cb{padding:10px 12px}

/* Form rows */
.fr{display:flex;align-items:center;gap:5px;margin-bottom:6px}
.fr:last-child{margin-bottom:0}
.fr label{width:76px;flex-shrink:0;font-size:12px;color:var(--muted);font-weight:500;line-height:1.3}
.un{font-size:10px;color:var(--muted2);flex-shrink:0}
.sep{border:none;border-top:1px solid var(--border-lt);margin:7px 0}

/* Inputs - editable (white) vs readonly (gray) */
.fi{flex:1;min-width:0;border:1px solid var(--border);border-radius:4px;font-family:var(--mono);
  font-size:12px;padding:5px 8px;outline:none;transition:border-color .14s;background:#fff;color:var(--text)}
.fi:focus{border-color:var(--red);background:#fff}
.fi.ro{background:var(--surf2);color:var(--muted);cursor:default;border-color:var(--border-lt)}
/* Selects with dropdown arrow */
.fs{flex:1;min-width:0;border:1px solid var(--border);border-radius:4px;font-size:12px;
  padding:5px 24px 5px 8px;outline:none;cursor:pointer;background:#fff;color:var(--text);
  appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236B7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 7px center;transition:border-color .14s}
.fs:focus{border-color:var(--red)}
.fs.sb-sel{background-color:#0D1220}

/* STEL/TWA row: narrow select + input no overflow */
.stel-row{display:flex;align-items:center;gap:4px;margin-bottom:6px}
.stel-row label{width:76px;flex-shrink:0;font-size:12px;color:var(--muted);font-weight:500}
.stel-row .fs{flex:0 0 62px;min-width:0}
.stel-row .fi{flex:1;min-width:0}
.stel-row .un{flex-shrink:0;font-size:10px}

/* Buttons */
.btn{font-family:var(--sans);font-size:12px;font-weight:600;border:1px solid transparent;
  border-radius:4px;padding:5px 11px;cursor:pointer;transition:all .13s;display:inline-flex;
  align-items:center;gap:5px;white-space:nowrap}
.btn:disabled{opacity:.38;cursor:not-allowed}
.b-red{background:var(--red);color:#fff;border-color:var(--red-dk)}.b-red:hover:not(:disabled){background:var(--red-dk)}
.b-grn{background:var(--green);color:#fff;border-color:#15803D}.b-grn:hover:not(:disabled){background:#15803D}
.b-blu{background:var(--blue);color:#fff;border-color:#1D4ED8}.b-blu:hover:not(:disabled){background:#1D4ED8}
.b-out{background:#fff;color:var(--text);border-color:var(--border)}.b-out:hover:not(:disabled){background:var(--surf2)}
.b-amb{background:var(--amber);color:#fff}.b-amb:hover:not(:disabled){background:#B45309}
.b-det{background:var(--detect);color:#fff}.b-det:hover:not(:disabled){background:var(--detect-dk)}
.b-row{display:flex;gap:5px;margin-top:6px}
.b-row .btn{flex:1;justify-content:center}
.b-full{width:100%;justify-content:center;margin-top:5px}

/* Cal status */
.cal-status{padding:6px 10px;border-radius:4px;font-size:11px;font-weight:600;text-align:center;
  margin-top:6px;min-height:30px;display:flex;align-items:center;justify-content:center;line-height:1.3}
.cs-pass{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bd)}
.cs-fail{background:#FEE2E2;color:#DC2626;border:1px solid #FCA5A5}
.cs-busy{background:var(--amber-bg);color:var(--amber);border:1px solid #FCD34D}
.cs-idle{background:var(--surf2);color:var(--muted);border:1px solid var(--border);font-weight:400;font-size:10px}

/* Settings grid - 2 columns inside single card */
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 10px}
.settings-grid .fr label{width:80px}
@media(max-width:900px){.settings-grid{grid-template-columns:1fr}}

/* MAIN AREA HEADER */
.main-hdr{flex:0 0 auto;background:var(--surf2);border-bottom:1px solid var(--border);
  padding:7px 12px;display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.main-hdr .mh-icon{color:var(--red)}
.main-hdr .mh-space{flex:1}
.main-hdr .mh-badge{font-size:10px;padding:2px 8px;border-radius:10px;font-weight:600;letter-spacing:.04em}
.main-hdr .mh-badge.on{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bd)}
.main-hdr .mh-badge.off{background:var(--surf);color:var(--muted2);border:1px solid var(--border)}

/* FOOTER */
footer{flex:0 0 auto;background:var(--navy2);border-top:2px solid var(--navy3);
  display:flex;align-items:center;padding:0 20px;min-height:42px;flex-shrink:0}
.ft-l{font-size:11px;color:#6B88B0;width:140px;flex-shrink:0}
.ft-c{flex:1;text-align:center;font-size:12px;color:#90A8C8;font-weight:400}
.ft-r{font-size:11px;color:#6B88B0;width:140px;text-align:right;flex-shrink:0}
.ft-r a,.ft-c a{color:#90A8C8;text-decoration:none}
.ft-r a:hover,.ft-c a:hover{color:#C9D3E8;text-decoration:underline}

/* MODALS */
.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:500;display:flex;align-items:center;justify-content:center;padding:20px}
.modal{background:var(--surf);border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,.25);width:100%;max-width:480px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}
.modal.wide{max-width:620px}
.modal.xl{max-width:900px;max-height:90vh}
.modal-hdr{background:var(--navy);color:#C9D3E8;padding:14px 18px;display:flex;align-items:center;gap:10px;flex-shrink:0}
.modal-hdr h2{font-size:14px;font-weight:600;flex:1}
.modal-close{background:none;border:none;color:#6B7FA8;cursor:pointer;font-size:18px;padding:2px 6px;line-height:1}
.modal-close:hover{color:#fff}
.modal-body{padding:18px;overflow-y:auto;flex:1}
.modal-footer{padding:12px 18px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}
.m-sec{margin-bottom:18px}
.m-sec-title{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);
  margin-bottom:10px;padding-bottom:5px;border-bottom:1px solid var(--border-lt)}
.m-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.m-row label{width:130px;flex-shrink:0;font-size:12px;color:var(--muted);font-weight:500}
.m-inp{flex:1;background:var(--surf2);border:1px solid var(--border);border-radius:4px;
  color:var(--text);font-family:var(--mono);font-size:12px;padding:7px 9px;outline:none;transition:border-color .14s}
.m-inp:focus{border-color:var(--red)}
.m-sel{flex:1;background:var(--surf2);border:1px solid var(--border);border-radius:4px;color:var(--text);
  font-size:12px;padding:7px 24px 7px 9px;outline:none;cursor:pointer;
  appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236B7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center}
.m-sel:focus{border-color:var(--red)}
.m-unit{font-size:11px;color:var(--muted);white-space:nowrap}
.m-hint{font-size:10px;color:var(--muted2)}

/* Help */
.help-email-blk{background:var(--blue-bg);border:1px solid var(--blue-bd);border-radius:6px;padding:16px 18px;margin-bottom:20px;text-align:center}
.help-email-blk h3{font-size:15px;font-weight:700;color:var(--navy);margin-bottom:5px}
.help-email-blk a{color:var(--blue);font-weight:600;font-size:13px}
.faq-item{margin-bottom:14px}
.faq-q{font-size:13px;font-weight:700;color:var(--text);margin-bottom:4px}
.faq-a{font-size:12px;color:var(--muted);line-height:1.6}

/* Profile */
.prof-avatar{width:80px;height:80px;border-radius:50%;background:var(--navy);color:#fff;font-size:26px;
  font-weight:700;display:flex;align-items:center;justify-content:center;margin:0 auto 8px;
  border:3px solid var(--border);overflow:hidden;cursor:pointer;position:relative}
.prof-avatar:hover::after{content:'📷';position:absolute;inset:0;background:rgba(0,0,0,.5);
  display:flex;align-items:center;justify-content:center;font-size:22px;border-radius:50%}
.prof-avatar img{width:100%;height:100%;object-fit:cover}
.role-badge{display:inline-flex;align-items:center;gap:4px;background:var(--navy);color:#7090C0;
  font-size:10px;font-weight:700;padding:3px 10px;border-radius:12px;letter-spacing:.07em}

/* ANIMATIONS */
@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
.log-line{animation:fadeIn .15s ease}

/* spin */
@keyframes rot{to{transform:rotate(360deg)}}
.spin-icon{display:inline-block;animation:rot .7s linear infinite}

/* ── TOUCH-ACTION: eliminate 300ms tap delay everywhere ── */
button,.btn,.sb-btn,.lp-action-btn,.tree-row,.hdr-mi,.hdr-user,
.hdr-opt,.u-dd-item,.hdr-hamburger,.modal-close{touch-action:manipulation}

/* ═══════════════════════════════════════════════════════
   TABLET LANDSCAPE (1025px – 1366px)
═══════════════════════════════════════════════════════ */
@media(min-width:1025px) and (max-width:1366px){
  /* log panel now at bottom — nothing to override */
}

/* ═══════════════════════════════════════════════════════
   TABLET PORTRAIT (769px – 1024px)
═══════════════════════════════════════════════════════ */
@media(min-width:769px) and (max-width:1024px){
  .sidebar{flex:0 0 220px}
  .main-cols{flex-wrap:wrap}
  .col-device,.col-sensor,.col-settings,.col-cal{flex:1 1 calc(50% - 4px);min-width:200px}
}

/* ═══════════════════════════════════════════════════════
   MOBILE (≤768px)
═══════════════════════════════════════════════════════ */
@media(max-width:768px){
  /* Login */
  .login-left{display:none}
  .login-right{flex:1}

  /* Header */
  header{min-height:58px;padding:0 10px;position:sticky;top:0;z-index:50}
  .hdr-title{font-size:14px}
  .hdr-menu{display:none}
  .hdr-uname,.hdr-urole,.hdr-caret{display:none}
  .hdr-conn{font-size:10px;padding:4px 8px}

  /* Sidebar drawer */
  .sidebar{
    position:fixed;left:0;top:0;height:100%;overflow-y:auto;
    z-index:200;transform:translateX(-100%);
    transition:transform .25s ease;
    flex-basis:280px!important;min-width:280px!important
  }
  .sidebar.mobile-open{transform:translateX(0)}

  /* Overlay behind open sidebar */
  .sb-overlay{
    display:none;position:fixed;inset:0;
    background:rgba(0,0,0,.5);z-index:199;
    -webkit-tap-highlight-color:transparent
  }
  .sb-overlay.active{display:block}

  /* Log panel smaller on mobile */
  .log-panel:not(.lp-collapsed){height:160px}
  /* Hex tool repositioned above smaller log panel on mobile */
  .hex-tool{bottom:210px;right:6px}

  /* Main area */
  .main-cols{flex-direction:column;min-width:unset}
  .col-device,.col-sensor,.col-settings,.col-cal{flex:unset;width:100%}

  /* Touch targets — Apple HIG minimum 44px */
  .tree-row{min-height:44px}
  .btn{min-height:44px;padding:8px 14px;font-size:13px}
  .sb-btn{min-height:48px}
  .hdr-mi{height:44px}
  .hdr-hamburger{padding:10px}

  /* Prevent iOS Safari zoom on input focus (font-size must be ≥16px) */
  .fi,.fs,.m-inp,.m-sel,.lf-inp,.sb-sel{font-size:16px!important;min-height:44px}

  /* Footer */
  footer{min-height:auto;padding:8px 14px}
  .ft-l,.ft-r{display:none}
  .ft-c{font-size:11px}

  /* Modals full-width on mobile */
  .modal-bg{padding:10px}
  .modal,.modal.wide,.modal.xl{max-width:100%}
}

@media(max-width:480px){
  .main-scroll{padding:6px}
  .cb{padding:8px 10px}
  .fr label{width:68px;font-size:11px}
  .hdr-conn{display:none}
  .hdr-title{font-size:13px}
  .lf{padding:0 4px}
}
