:root{--skein-navy: #0A2041;--skein-navy-hi: #12325F;--skein-paper: #FAFAF7;--skein-ink: #0F1620;--skein-grey: #C8CDD3;--skein-grey-hi: #E5E9EE;--skein-grey-dim: #7A8593;--skein-amber: #F2A900;--skein-green: #1F8A5A;--skein-red: #B02033;--skein-radius: 4px;--skein-focus: 2px solid var(--skein-amber);--skein-font: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--skein-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Consolas, monospace}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--skein-paper);color:var(--skein-ink);font-family:var(--skein-font);font-size:14px;line-height:1.5}*:focus-visible{outline:var(--skein-focus);outline-offset:2px}.app{display:flex;flex-direction:column;min-height:100vh}.appbar{background:var(--skein-navy);color:var(--skein-paper);padding:12px 20px;display:flex;align-items:baseline;justify-content:space-between;gap:20px;border-bottom:1px solid var(--skein-navy-hi)}.appbar-brand{font-weight:700;letter-spacing:4px;font-size:16px}.appbar-sub{font-family:var(--skein-mono);font-size:11px;color:var(--skein-grey);letter-spacing:1px}.appbar-status{display:flex;align-items:center;gap:8px;font-family:var(--skein-mono);font-size:11px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--skein-grey-dim);transition:background .12s}.status-dot.open{background:var(--skein-green)}.status-dot.connecting{background:var(--skein-amber);animation:pulse 1s infinite}.status-dot.closed{background:var(--skein-red)}@keyframes pulse{50%{opacity:.35}}.main{flex:1;padding:20px;max-width:1200px;width:100%;margin:0 auto}.card{background:#fff;border:1px solid var(--skein-grey);border-radius:var(--skein-radius);padding:16px 20px;margin-bottom:16px}.card h2{font-size:13px;text-transform:uppercase;letter-spacing:2px;color:var(--skein-grey-dim);margin:0 0 12px;font-weight:600}.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 20px;font-family:var(--skein-mono);font-size:12px}.kv dt{color:var(--skein-grey-dim)}.kv dd{margin:0}.hint{font-size:12px;color:var(--skein-grey-dim)}.hint code{font-family:var(--skein-mono);background:var(--skein-grey-hi);padding:1px 6px;border-radius:3px}.err{color:var(--skein-red);font-family:var(--skein-mono);font-size:12px}.fleet-table{width:100%;border-collapse:collapse;font-size:12px}.fleet-table th,.fleet-table td{padding:8px 10px;border-bottom:1px solid var(--skein-grey-hi);text-align:left;vertical-align:top}.fleet-table th{font-family:var(--skein-mono);font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--skein-grey-dim)}.mono{font-family:var(--skein-mono)}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-family:var(--skein-mono);font-size:10px;letter-spacing:.5px}.badge-ok{background:#1f8a5a1f;color:var(--skein-green)}.badge-off{background:#7a859326;color:var(--skein-grey-dim)}.chips{display:flex;flex-wrap:wrap;gap:4px}.chip{padding:1px 7px;border-radius:9px;font-size:10px;font-family:var(--skein-mono)}.chip-alarm{background:#b020331f;color:var(--skein-red)}.chip-warn{background:#f2a90026;color:#8a6400}.chip-info{background:#7a859326;color:var(--skein-grey-dim)}.chart-canvas{width:100%;height:420px;display:block;border-radius:var(--skein-radius)}.fleet-table tbody tr{cursor:pointer}.fleet-table tbody tr:hover{background:var(--skein-grey-hi)}.fleet-table tbody tr.selected{background:#f2a9001f}.fleet-table tbody tr.selected td:first-child{border-left:3px solid var(--skein-amber)}.cmd-row{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}.btn{padding:6px 12px;font-size:12px;font-weight:600;background:var(--skein-navy);color:var(--skein-paper);border:none;border-radius:var(--skein-radius);cursor:pointer}.btn:hover{background:var(--skein-navy-hi)}.btn:disabled{opacity:.5;cursor:not-allowed}.cmd-row input,.cmd-row select{padding:5px 8px;border:1px solid var(--skein-grey);border-radius:var(--skein-radius);font-size:12px}.cmd-result{font-family:var(--skein-mono);font-size:12px;padding:8px;border-radius:var(--skein-radius);margin-top:8px}.cmd-sent{background:var(--skein-grey-hi);color:var(--skein-ink)}.cmd-ack{background:#1f8a5a1f;color:var(--skein-green)}.cmd-nak,.cmd-error{background:#b020331f;color:var(--skein-red)}.cmd-info{background:var(--skein-grey-hi);color:var(--skein-grey-dim)}.log-filter{display:block;margin-bottom:10px}.log-list{display:flex;flex-direction:column;gap:4px;max-height:360px;overflow-y:auto}.log-row{display:flex;align-items:center;gap:10px;padding:6px 8px;border-bottom:1px solid var(--skein-grey-hi);font-size:12px}.log-drone{min-width:70px}.log-code{min-width:110px;color:var(--skein-grey-dim)}.log-text{flex:1}.log-time{min-width:70px;text-align:right}.mini-chart{margin-bottom:14px}.mini-chart-title{font-size:11px;color:var(--skein-grey-dim);margin-bottom:4px;text-transform:uppercase;letter-spacing:1px}.mini-chart-canvas{width:100%;height:110px;display:block}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--skein-navy)}.login-card{background:#fff;padding:32px;border-radius:var(--skein-radius);width:320px;display:flex;flex-direction:column;gap:12px}.login-brand{font-weight:700;letter-spacing:4px;font-size:20px;color:var(--skein-navy);text-align:center}.login-sub{font-family:var(--skein-mono);font-size:10px;color:var(--skein-grey-dim);text-align:center;margin-bottom:10px}.login-field{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--skein-grey-dim)}.login-field input{padding:8px;border:1px solid var(--skein-grey);border-radius:var(--skein-radius);font-size:13px}.login-btn{margin-top:8px}.appbar-user{display:flex;align-items:center;gap:8px;margin-left:14px;font-family:var(--skein-mono)}.btn-link{background:none;border:none;color:var(--skein-amber);cursor:pointer;font-size:11px;padding:0;text-decoration:underline}.appbar-nav{display:flex;gap:4px;margin-left:24px}.nav-link{background:none;border:none;color:var(--skein-grey);font-size:12px;font-family:var(--skein-mono);letter-spacing:1px;padding:6px 10px;cursor:pointer;border-radius:var(--skein-radius)}.nav-link:hover{color:#fff}.nav-link.active{color:var(--skein-amber);border-bottom:2px solid var(--skein-amber)}.subheading{font-size:12px;text-transform:uppercase;letter-spacing:1px;color:var(--skein-grey-dim);margin:16px 0 8px}.admin-form{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:8px}.admin-form input,.admin-form select{padding:6px 8px;border:1px solid var(--skein-grey);border-radius:var(--skein-radius);font-size:12px}
