/* turbine-dashboard-v2 — exact visual tokens */

:root{
  --bg:#0B1220;
  --card:#111B2E;
  --card-soft:#0F1830;
  --line:#1E2C45;
  --text:#F2F6FA;
  --text-dim:#8B9AB3;
  --text-faint:#5A6C87;
  --green:#A7F3D0;
  --green-dim:rgba(6,95,70,0.42);
  --green-line:rgba(52,211,153,0.28);
  --teal:#2DD4BF;
  --blue:#3B82F6;
  --orange:#F97316;
  --yellow:#F5C542;
  --pink:#EC4899;
  --cyan:#38BDF8;
  --red:#EF4444;
}
*{box-sizing:border-box;}
html,body,body.theme-light,body.theme-dash{
  margin:0;background:var(--bg);color:var(--text);
  font-family:'Inter',sans-serif;
}
a{text-decoration:none;color:inherit;}
button,a,select,input,textarea{-webkit-tap-highlight-color:transparent;}
button:focus,button:focus-visible,a:focus,a:focus-visible,select:focus,select:focus-visible{outline:none!important;box-shadow:none!important;}
.bg-app{background:var(--bg)!important;}

.dash-shell,.shell{display:grid;grid-template-columns:264px 1fr;min-height:100vh;width:100%;}
.dash-sidebar,.sidebar{background:#0A1120;border-right:1px solid var(--line);padding:24px 18px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow:hidden;}
.dash-sidebar-inner{height:100%;overflow-y:auto;display:flex;flex-direction:column;}
.dash-main{min-width:0;width:100%;}
.dash-menu-btn{display:none;}

.brand{display:flex;flex-direction:column;align-items:stretch;gap:10px;padding:0 0 22px;}
.brand-lockup{display:flex;align-items:center;justify-content:center;background:#fff;border-radius:12px;padding:8px 10px;line-height:0;}
.brand-lockup img{width:auto;max-width:100%;height:48px;display:block;object-fit:contain;}
.brand p{font-size:10.5px;color:var(--text-faint);margin:0;letter-spacing:0.8px;font-weight:600;padding:0 4px;}

.nav{display:flex;flex-direction:column;gap:3px;}
.nav a,.nav-link-row{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:10px;font-size:13.5px;font-weight:600;color:var(--text-dim);position:relative;}
.nav a svg,.nav-link-row svg,.nav-ico{width:18px;height:18px;flex:none;}
.nav a.active,.nav-link-row.is-on{background:transparent;color:var(--green);box-shadow:none;}
.nav a.active svg,.nav-link-row.is-on svg{color:var(--green);}
.nav a:not(.active):hover,.nav-link-row:not(.is-on):hover{background:var(--card-soft);color:var(--text);}
.badge,.nav-badge{margin-left:auto;background:var(--red);color:#fff;font-size:10.5px;font-weight:700;min-width:18px;height:18px;border-radius:9px;display:flex;align-items:center;justify-content:center;padding:0 5px;}

.sidebar-bottom{margin-top:auto;display:flex;flex-direction:column;gap:14px;padding-top:18px;}
.sys-ok,.status-box{background:var(--green-dim);border:1px solid var(--green-line);border-radius:14px;padding:14px 16px;display:flex;gap:12px;align-items:flex-start;color:#fff;}
.sys-ok svg{width:20px;height:20px;color:var(--green);flex:none;margin-top:1px;}
.sys-ok .l1{font-size:11px;color:var(--text-dim);margin:0 0 2px;}
.sys-ok .l2{font-size:13px;font-weight:700;color:#fff;margin:0 0 1px;}
.sys-ok .l3,#navSystemStatusText{font-size:11.5px;color:var(--green);font-weight:700;margin:0;letter-spacing:0.3px;}
.status-box.is-bad{background:rgba(239,68,68,.12);border-color:#7f1d1d;color:#fecaca;}
.status-box.is-bad #navSystemStatusText{color:#fecaca;}

.profile-chip{display:flex;align-items:center;gap:10px;border-top:1px solid var(--line);padding-top:14px;}
.profile-chip .avatar,.user-ava{width:34px;height:34px;border-radius:50%;background:var(--card-soft);display:flex;align-items:center;justify-content:center;color:var(--text-dim);flex:none;font-size:12px;font-weight:800;}
.profile-chip .who p{margin:0;font-size:13px;font-weight:600;}
.profile-chip .who p:last-child{font-size:11px;color:var(--text-faint);font-weight:400;}
.lang-row{display:flex;align-items:center;gap:6px;margin-left:auto;}

.main{padding:26px 32px 60px;}
.topbar,.dash-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;flex-wrap:wrap;gap:14px;padding:0;}
.greet p{margin:0;font-size:13px;color:var(--text-dim);}
.greet h2{margin:2px 0 0;font-size:22px;font-weight:800;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.dot-txt{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--green);background:var(--green-dim);border:1px solid var(--green-line);padding:4px 10px;border-radius:20px;}
.dot-sm{width:6px;height:6px;border-radius:50%;background:var(--green);display:inline-block;}
.live-dot{width:6px;height:6px;border-radius:50%;background:var(--green);}

.topbar-right,.header-meta{display:flex;align-items:center;gap:22px;flex-wrap:wrap;justify-content:flex-end;}
.meta-item{display:flex;align-items:center;gap:10px;}
.meta-item .ic{width:36px;height:36px;border-radius:10px;background:var(--card);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--text-dim);flex:none;}
.meta-item .ic svg{width:17px;height:17px;}
.meta-item .tx p{margin:0;font-size:13px;font-weight:700;}
.meta-item .tx p:last-child{font-size:11px;color:var(--text-faint);font-weight:500;}
.device-picker{display:flex;flex-direction:column;gap:5px;min-width:228px;}
.device-picker label{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--text-faint);}
.device-picker-ctl{position:relative;display:flex;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:10px;min-height:42px;padding:0 36px 0 14px;}
.device-picker-ctl:focus-within{border-color:var(--line);}
.device-picker-ctl .device-status{width:7px;height:7px;border-radius:50%;background:#34D399;margin-right:10px;flex:none;}
.device-picker-ctl .device-status.is-off{background:#5A6C87;}
.device-picker select,.header-select{appearance:none;-webkit-appearance:none;background:transparent;border:0;color:var(--text);font-size:13px;font-weight:600;width:100%;min-width:0;outline:none;cursor:pointer;font-family:Inter,sans-serif;padding:10px 0;}
.device-picker-ctl::after{content:"";position:absolute;right:14px;top:50%;width:7px;height:7px;border-right:1.5px solid var(--text-dim);border-bottom:1.5px solid var(--text-dim);transform:translateY(-70%) rotate(45deg);pointer-events:none;}

.live-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:14px 18px;margin-bottom:14px;}
.live-bar-id{min-width:0;}
.live-bar .hero-eyebrow{margin:0 0 4px;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-faint);font-weight:700;}
.live-bar h2{margin:0;font-size:22px;font-weight:800;letter-spacing:-.02em;font-family:'JetBrains Mono',monospace;color:var(--text);}
.live-bar-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.live-bar .hero-foot{margin:0;}
.live-bar .hero-foot p{margin:0;font-size:11.5px;color:var(--text-dim);text-align:right;}
.live-bar .hero-foot p:first-child{color:var(--text-faint);margin-bottom:2px;font-size:10px;letter-spacing:.08em;text-transform:uppercase;font-weight:700;}
.live-bar .hero-foot p:last-child{font-family:'JetBrains Mono',monospace;color:var(--text);font-size:12.5px;}
.hero-pill{display:inline-flex;align-items:center;gap:7px;background:rgba(6,95,70,0.55);border:1px solid rgba(52,211,153,0.22);color:#A7F3D0;font-size:11.5px;font-weight:700;padding:6px 13px;border-radius:20px;width:fit-content;letter-spacing:0.4px;}
.dash-offline-hero{padding:6px 12px;border-radius:20px;font-size:11px;font-weight:800;letter-spacing:.4px;color:#fecaca;background:rgba(127,29,29,.55);border:1px solid rgba(239,68,68,.45);}

.stats-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px;margin-bottom:18px;}
.matte-panel{
  position:relative;overflow:hidden;
  background:linear-gradient(160deg, rgba(17,27,46,.98) 0%, rgba(11,18,32,.98) 100%);
  border:1px solid var(--line);border-radius:16px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04);
}
.dash-hero{margin-bottom:18px;padding:0;}
.dash-hero-inner{
  display:flex;align-items:center;justify-content:space-between;gap:18px;
  padding:18px 22px;min-height:0;flex-wrap:wrap;
}
.dash-hero-copy{flex:1;min-width:240px;}
.dash-hero-device{font-size:13px;font-weight:800;color:var(--text);margin-bottom:8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.dash-hero-kicker{margin:0 0 4px;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--text-faint);font-weight:800;}
.dash-hero h1{margin:0;font-size:24px;font-weight:900;letter-spacing:-.02em;}
.dash-hero-sub{margin:8px 0 0;font-size:12.5px;color:var(--text-dim);max-width:520px;line-height:1.5;}
.dash-hero-badge{display:inline-flex;margin-top:12px;padding:7px 12px;border-radius:999px;border:1px solid rgba(59,130,246,.35);background:rgba(59,130,246,.12);font-size:11px;font-weight:700;color:var(--text);}
.dash-hero-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:10px;min-width:180px;}
.dash-hero-badge.is-warn{border-color:rgba(245,158,11,.35);background:rgba(245,158,11,.12);color:#fcd34d;}
.dash-hero-badge.is-bad{border-color:rgba(239,68,68,.35);background:rgba(239,68,68,.12);color:#fecaca;}
.stat-status{font-size:11px;font-weight:700;color:var(--green);margin-top:2px;}
.stat-status.is-muted{color:var(--text-faint);}
.stat-status.is-warn{color:var(--yellow);}
.stat-status.is-bad{color:#fca5a5;}
.dash-metrics-offline .stat-card{opacity:.82;}
.dash-metrics-offline .stat-val{color:var(--text-dim);}
.dash-sensors{margin-bottom:18px;padding:18px 20px;}
.dash-sensors-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;}
.dash-sensors-head h3{margin:0;font-size:13px;font-weight:900;letter-spacing:.12em;}
.dash-sensors-head a{font-size:12px;font-weight:800;color:var(--blue);}
.sensor-list{display:flex;flex-direction:column;gap:10px;}
.sensor-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;background:rgba(15,24,48,.55);border:1px solid var(--line);}
.sensor-ico{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:none;}
.sensor-ico svg{width:18px;height:18px;}
.sensor-ico.ok{background:rgba(34,197,94,.12);color:#86efac;}
.sensor-ico.brake{background:rgba(239,68,68,.12);color:#fca5a5;}
.sensor-main{flex:1;min-width:0;}
.sensor-main strong{display:block;font-size:14px;font-weight:700;}
.sensor-main span{display:block;font-size:11px;color:var(--text-faint);margin-top:2px;}
.sensor-val{font-size:13px;font-weight:800;font-family:'JetBrains Mono',monospace;margin-right:8px;white-space:nowrap;}
.sensor-dot{width:7px;height:7px;border-radius:50%;background:#34D399;flex:none;}
.sensor-dot.is-off{background:#64748b;}
.sensor-chev{color:var(--text-faint);font-size:18px;line-height:1;}
#headerSystemStatus.is-off{background:rgba(127,29,29,.35);border-color:rgba(239,68,68,.35);color:#fecaca;}
#headerSystemStatus.is-off .dot-sm{background:#f87171;}
#headerSystemStatus.is-off #headerSystemText{color:#fecaca;}
.stat-card,.metric-tile{
  background:linear-gradient(160deg, rgba(17,27,46,.98) 0%, rgba(11,18,32,.98) 100%);
  border:1px solid var(--line);border-radius:16px;padding:16px 18px;
  display:flex;flex-direction:column;overflow:hidden;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04);
}
.stat-head,.metric-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.stat-head .ic,.metric-ico{width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none;}
.stat-head .ic svg,.metric-ico svg{width:14px;height:14px;}
.stat-head span,.metric-tile .k{font-size:10.5px;font-weight:700;letter-spacing:0.8px;text-transform:uppercase;color:var(--text-dim);}
.stat-val,.metric-tile .v{font-size:26px;font-weight:800;font-family:'JetBrains Mono',monospace;line-height:1;margin-bottom:4px;color:var(--text);}
.stat-val small,.metric-tile .v small,.metric-tile .v span{font-size:13px;font-weight:600;color:var(--text-faint);margin-left:3px;font-family:Inter,sans-serif;}
.stat-range,.metric-range{font-size:10.5px;color:var(--text-faint);margin-bottom:10px;}
.spark{height:30px;width:100%;margin-top:auto;display:block;}
.ic-wind,.metric-ico.wind{background:rgba(45,212,191,0.15);color:var(--teal);}
.ic-rpm,.metric-ico.rpm{background:rgba(59,130,246,0.15);color:var(--blue);}
.ic-temp,.metric-ico.temp{background:rgba(249,115,22,0.15);color:var(--orange);}
.ic-volt,.metric-ico.volt{background:rgba(245,197,66,0.15);color:var(--yellow);}
.ic-amp,.metric-ico.curr{background:rgba(236,72,153,0.15);color:var(--pink);}
.ic-pwr,.metric-ico.power{background:rgba(56,189,248,0.15);color:var(--cyan);}

.content-grid{display:grid;grid-template-columns:1fr 320px;gap:18px;align-items:start;}
.dash-body{display:block;}
.left-col,.dash-col-main{display:flex;flex-direction:column;gap:18px;min-width:0;}
.right-col,.dash-col-rail{display:flex;flex-direction:column;gap:18px;}

.brake-row{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.brake-card{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px 20px;}
.brake-card.brake-passive{
  background:linear-gradient(180deg, rgba(6,95,70,0.42), rgba(2,44,34,0.52));
  border-color:rgba(52,211,153,0.16);
}
.brake-card.brake-active{
  border-color:rgba(244,63,94,0.28);
  background:linear-gradient(180deg, rgba(136,19,55,0.92), rgba(88,13,39,0.92));
  box-shadow:0 0 22px rgba(190,18,60,0.12);
}
.brake-card.brake-active::after{
  content:"";
  position:absolute;inset:0;
  background:
    radial-gradient(650px 220px at 30% 10%, rgba(255,255,255,0.06), transparent 55%),
    radial-gradient(420px 220px at 85% 80%, rgba(0,0,0,0.18), transparent 60%);
  pointer-events:none;
}
.brake-head{display:flex;align-items:center;justify-content:space-between;gap:12px;position:relative;z-index:1;}
.brake-title{font-size:18px;font-weight:800;color:#F2F6FA;margin:0;}
.brake-badge{font-size:11px;font-weight:800;letter-spacing:.08em;padding:5px 12px;border-radius:8px;border:1px solid rgba(255,255,255,.14);flex:none;}
.brake-badge.brake-passive{background:rgba(6,95,70,.55);color:rgba(167,243,208,.92);}
.brake-badge.brake-active{color:rgba(255,228,230,.98);border-color:rgba(251,113,133,.35);background:rgba(88,13,39,.55);}
.brake-hint,#brakeMagHint,#brakeMechHint{margin:6px 0 0;font-size:12px;color:#8B9AB3;position:relative;z-index:1;}
.brake-card.brake-active .brake-hint,.brake-card.brake-active #brakeMagHint,.brake-card.brake-active #brakeMechHint{color:rgba(254,202,202,.78);}

.card,.glass{background:var(--card)!important;border:1px solid var(--line)!important;border-radius:16px;padding:20px 22px;color:var(--text);width:100%;}
.card-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:16px;}
.card-head h3{margin:0 0 3px;font-size:16px;font-weight:700;display:flex;align-items:center;gap:8px;}
.card-head h3 svg{width:17px;height:17px;color:var(--teal);}
.card-head p{margin:0;font-size:12px;color:var(--text-faint);}

.toolbar{display:flex;gap:8px;flex-wrap:wrap;}
.btn,.chip{display:flex;align-items:center;gap:6px;background:var(--card-soft);border:1px solid var(--line);color:var(--text-dim);font-size:12px;font-weight:600;padding:8px 13px;border-radius:9px;cursor:pointer;font-family:'Inter',sans-serif;}
.btn svg{width:14px;height:14px;}
.btn:hover,.chip:hover{border-color:var(--text-faint);color:var(--text);}
.btn.primary,.chip-ok,.chip.is-on{background:rgba(6,95,70,0.55);border-color:rgba(52,211,153,0.22);color:#A7F3D0;}
.tabs,#metricBtns{display:flex;gap:6px;margin-bottom:18px;flex-wrap:wrap;}
.tabs button,#metricBtns button,.chip{background:transparent;border:0;color:var(--text-dim);font-size:12.5px;font-weight:700;padding:8px 12px;border-radius:0;cursor:pointer;font-family:'Inter',sans-serif;}
#metricBtns button.is-on,.tabs button.active,.chip.is-on{background:transparent;border:0;color:var(--green);}

.chart-legend{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-bottom:6px;font-size:11.5px;color:var(--text-dim);}
.chart-legend .sw{width:8px;height:8px;border-radius:50%;background:var(--green);}
#telemetryChart{width:100%;height:270px;min-height:240px;}
#telemetryChartFs{width:100%;height:100%;min-height:260px;}
#chartFsOverlay:not(.hidden){display:flex;flex-direction:column;}

.summary-row{display:flex;justify-content:space-between;font-size:13px;padding:10px 0;border-bottom:1px solid var(--line);}
.summary-row:last-child{border-bottom:none;}
.summary-row .l, .summary-row span:first-child{color:var(--text-faint);}
.summary-row .r, .summary-row span:last-child{font-weight:700;text-align:right;}
.summary-row .ok{color:var(--green);display:flex;align-items:center;gap:6px;}

.donut-wrap{display:flex;flex-direction:column;align-items:center;padding:6px 0 4px;}
.donut-box,.health-ring{position:relative;width:150px;height:150px;}
.donut-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;}
.donut-center .pct,#healthScore{font-size:26px;font-weight:800;font-family:'JetBrains Mono',monospace;}
.donut-center .lbl,#healthLabel{font-size:11px;color:var(--text-faint);margin-top:2px;}
.health-list{display:flex;flex-direction:column;gap:10px;margin-top:14px;}
.health-item,.health-row{display:flex;align-items:center;justify-content:space-between;font-size:13px;padding:0;border:0;color:var(--text);}
.health-item .lft{display:flex;align-items:center;gap:8px;}
.health-item svg{width:15px;height:15px;color:var(--green);}
.health-item .st,.health-row .ok{color:var(--green);font-size:12px;font-weight:700;}

.alarm-list,.alarm-strip{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:16px;}
.alarm-item{background:var(--card-soft);border:1px solid var(--line);border-radius:12px;padding:14px 16px;display:flex;gap:12px;min-width:0;}
.alarm-item.is-err{border-color:rgba(239,68,68,.35);}
.alarm-item svg,.alarm-ico{width:18px;height:18px;color:var(--yellow);flex:none;margin-top:2px;}
.alarm-item .dt{font-size:11px;color:var(--text-faint);margin:0 0 3px;}
.alarm-item .ti{font-size:13.5px;font-weight:700;margin:0 0 3px;}
.alarm-item .ds{font-size:12px;color:var(--text-dim);margin:0;}
.alarm-foot{display:flex;justify-content:flex-end;}
.alarm-bar{display:block;}

.dash-estop-banner{margin:0 0 18px;}
.dash-estop-banner.is-active{animation:dashEstopPulse 2s ease-in-out infinite;}
@keyframes dashEstopPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,.25);}
  50%{box-shadow:0 0 0 6px rgba(239,68,68,.08);}
}

.hidden{display:none!important;}

@media (max-width:1400px){
  .stats-grid{grid-template-columns:repeat(3,minmax(0,1fr));}
}
@media (max-width:1100px){
  .dash-shell,.shell{grid-template-columns:220px 1fr;}
  .dash-sidebar,.sidebar{display:flex;}
  .dash-menu-btn{display:none;}
  .hero-row,.content-grid{grid-template-columns:1fr;}
  .stats-grid{grid-template-columns:repeat(3,minmax(0,1fr));}
  .main{padding:20px 16px 48px;}
  .meta-item{display:none;}
  .device-picker{min-width:0;flex:1;max-width:280px;}
}
.report-page{display:flex;flex-direction:column;gap:18px;}
.report-hero{padding:2px 2px 0;}
.report-kicker{margin:0;font-size:10px;letter-spacing:.18em;font-weight:800;text-transform:uppercase;color:var(--green);}
.report-hero h1{margin:6px 0 6px;font-size:28px;font-weight:800;letter-spacing:-.02em;}
.report-sub{margin:0;font-size:13.5px;color:var(--text-dim);max-width:560px;line-height:1.45;}
.report-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;padding:16px 18px;}
.report-filters{display:grid;grid-template-columns:minmax(180px,1.6fr) 1fr 1fr auto;gap:12px;align-items:end;flex:1;min-width:min(100%,420px);}
.report-field label{display:block;font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--text-faint);margin-bottom:6px;}
.report-field select,.report-field input{width:100%;background:var(--card-soft);border:1px solid var(--line);color:var(--text);border-radius:10px;padding:10px 12px;font-size:13px;font-family:Inter,sans-serif;outline:none;}
.report-field-btn .btn{height:40px;padding:0 18px;}
.report-exports{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:1px;}
.report-exports-hint{font-size:12px;color:var(--text-faint);padding:0 4px;}
.report-export{height:40px;padding:0 14px;font-weight:700;letter-spacing:.02em;}
.report-export svg{width:15px;height:15px;}
.report-export-csv{background:var(--card-soft);border-color:var(--line);color:var(--text);}
.report-export-pdf{background:rgba(6,95,70,.55);border-color:rgba(52,211,153,.28);color:#A7F3D0;}
.report-export-xls{background:rgba(59,130,246,.14);border-color:rgba(59,130,246,.32);color:#93C5FD;}
.report-empty{margin:0;padding:18px;color:var(--text-dim);font-size:13px;}
.report-empty.hidden,.xls-scroll.hidden,.xls-status.hidden,.report-loading.hidden{display:none!important;}
.report-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:240px;padding:32px 18px;text-align:center;}
.report-loading strong{font-size:16px;font-weight:800;color:var(--text);}
.report-loading span{font-size:13px;color:var(--text-dim);}
.report-spinner{width:28px;height:28px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--green);animation:reportSpin .7s linear infinite;margin-bottom:6px;}
@keyframes reportSpin{to{transform:rotate(360deg);}}
.card.xls-book,.xls-book{padding:0;overflow:hidden;display:flex;flex-direction:column;}
.xls-scroll{max-height:min(68vh,760px);overflow:auto;}
.xls-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:980px;}
.xls-table th,.xls-table td{border:0;border-bottom:1px solid var(--line);padding:7px 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.xls-table thead th{position:sticky;top:0;z-index:2;background:#065F46;color:#ECFDF5;font-size:11px;font-weight:700;letter-spacing:.04em;text-align:center;}
.xls-table td{background:#0F1830;color:var(--text);}
.xls-table tbody tr:nth-child(even) td{background:#111B2E;}
.xls-table tbody tr:hover td{background:#16233A;}
.xls-table td.num{text-align:right;font-family:'JetBrains Mono',monospace;font-size:12px;font-variant-numeric:tabular-nums;}
.xls-rn{width:46px;min-width:46px;text-align:center!important;color:var(--text-faint)!important;font-family:'JetBrains Mono',monospace;font-size:11px;background:#0A1120!important;position:sticky;left:0;z-index:1;}
.xls-table thead .xls-rn{z-index:3;background:#054C38!important;color:#A7F3D0!important;}
.xls-table tbody tr:nth-child(even) .xls-rn{background:#0A1120!important;}
.xls-table tbody tr:hover .xls-rn{background:#10182A!important;}
.xls-status{display:flex;gap:18px;flex-wrap:wrap;padding:8px 14px;border-top:1px solid var(--line);background:#0A1120;font-size:11.5px;color:var(--text-faint);font-family:'JetBrains Mono',monospace;}
.xls-status span + span::before{content:"·";margin-right:18px;color:var(--line);}
.report-pager{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap;padding:10px 14px;border-top:1px solid var(--line);background:#0A1120;}
.report-pager.hidden{display:none!important;}
.report-pager button{min-width:34px;height:32px;padding:0 10px;border-radius:8px;border:1px solid var(--line);background:var(--card-soft);color:var(--text);font-size:12px;font-weight:700;cursor:pointer;}
.report-pager button.active{background:#065F46;border-color:#065F46;color:#ECFDF5;}
.report-pager button:disabled{opacity:.4;cursor:default;}
.report-pager-gap{color:var(--text-faint);padding:0 2px;}
.report-field input[type="datetime-local"]{color-scheme:dark;}
@media (max-width:1100px){
  .report-filters{grid-template-columns:1fr 1fr;}
  .report-field-btn{grid-column:1 / -1;}
  .report-exports{width:100%;}
}
@media (max-width:640px){
  .report-filters{grid-template-columns:1fr 1fr;}
  .report-hero h1{font-size:24px;}
  .stats-grid{grid-template-columns:1fr 1fr;}
  .live-bar{padding:12px 14px;}
  .live-bar h2{font-size:18px;}
}

.devices-page{display:flex;flex-direction:column;gap:18px;}
.devices-account{display:flex;align-items:center;gap:14px;}
.devices-avatar{width:42px;height:42px;border-radius:12px;background:var(--green-dim);border:1px solid var(--green-line);color:var(--green);display:flex;align-items:center;justify-content:center;font-weight:800;flex:none;}
.devices-account-who{flex:1;min-width:0;}
.devices-account-who strong{display:block;font-size:15px;}
.devices-account-who span{display:block;font-size:12px;color:var(--text-faint);margin-top:2px;}
.devices-pill{font-size:11px;font-weight:700;letter-spacing:.04em;padding:5px 10px;border-radius:20px;border:1px solid var(--line);color:var(--text-dim);background:var(--card-soft);flex:none;}
.devices-pill.is-on{background:var(--green-dim);border-color:var(--green-line);color:var(--green);}
.devices-alert{border-radius:12px;padding:12px 14px;font-size:13px;font-weight:600;}
.devices-alert-ok{background:var(--green-dim);border:1px solid var(--green-line);color:var(--green);}
.devices-alert-bad{background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.35);color:#fecaca;}
.devices-alert-info{background:var(--card-soft);border:1px solid var(--line);color:var(--text-dim);}
.devices-list{display:flex;flex-direction:column;gap:8px;}
.devices-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;}
.device-card{background:var(--card-soft);border:1px solid var(--line);border-radius:20px;padding:28px 22px 20px;display:flex;flex-direction:column;align-items:center;gap:16px;overflow:visible;}
.device-card.is-active{border-color:var(--green-line);}
.device-turbine{position:relative;width:176px;height:232px;flex:none;overflow:visible;}
.device-tower{width:100%;height:100%;display:block;}
.device-glow{position:absolute;left:50%;top:43.9%;width:128px;height:128px;margin:-64px 0 0 -64px;border-radius:50%;background:#38bdf8;opacity:0;pointer-events:none;}
.device-card.is-spinning .device-glow{opacity:.22;animation:deviceGlow 1.4s ease-in-out infinite alternate;}
.device-rotor-wrap{position:absolute;left:50%;top:43.9%;width:138px;height:138px;margin:-69px 0 0 -69px;transform-origin:50% 50%;}
.device-rotor{width:100%;height:100%;display:block;overflow:visible;}
.device-card.is-spinning .device-rotor-wrap{animation:deviceRotorSpin var(--spin-ms,1.2s) linear infinite;}
@keyframes deviceRotorSpin{to{transform:rotate(360deg);}}
@keyframes deviceGlow{from{opacity:.16;transform:scale(.92);}to{opacity:.32;transform:scale(1.06);}}
@media (prefers-reduced-motion:reduce){
  .device-card.is-spinning .device-rotor-wrap,
  .device-card.is-spinning .device-glow{animation:none;}
}
.device-card-body{width:100%;display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;}
.device-card-name{font-size:18px;font-weight:800;}
.device-card-code{font-size:12px;color:var(--text-faint);font-family:'JetBrains Mono',monospace;}
.device-card-stats{display:flex;gap:16px;flex-wrap:wrap;justify-content:center;font-size:13px;color:var(--text-dim);}
.device-card-stats b{color:var(--text);font-family:'JetBrains Mono',monospace;font-weight:700;margin:0 2px;}
.device-card-meta{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-top:2px;}
.device-card-open{width:100%;justify-content:center;margin-top:8px;}
.device-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--card-soft);flex-wrap:wrap;}
.device-row.is-active{border-color:var(--green-line);}
.device-dot{width:8px;height:8px;border-radius:50%;background:#34D399;flex:none;}
.device-dot.is-off{background:#5A6C87;}
.device-row-main{flex:1;min-width:140px;}
.device-row-main strong{display:block;font-size:14px;}
.device-row-main span{display:block;font-size:12px;color:var(--text-faint);margin-top:2px;font-family:'JetBrains Mono',monospace;}
.devices-pass{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:14px;align-items:end;}
.devices-danger{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;}
.devices-danger h3{margin:0 0 4px;font-size:16px;}
.devices-danger p{margin:0;font-size:13px;color:var(--text-dim);}
.devices-danger-btn{color:#fecaca;border-color:rgba(239,68,68,.35);}
.devices-modal{position:fixed;inset:0;z-index:80;background:rgba(7,11,18,.72);display:flex;align-items:center;justify-content:center;padding:20px;}
.devices-modal.hidden{display:none!important;}
.devices-modal-card{width:100%;max-width:420px;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:22px;}
.devices-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px;}
.devices-modal-head h3{margin:0 0 4px;font-size:18px;}
.devices-modal-head p{margin:0;font-size:12px;color:var(--text-faint);}
.devices-hint{margin:8px 0 0;font-size:12px;color:var(--text-faint);}
.devices-hint.is-ok{color:var(--green);}
.devices-hint.is-bad{color:#fecaca;}
.devices-modal-actions{display:flex;gap:8px;margin-top:18px;}
.devices-modal-actions .btn{flex:1;justify-content:center;}
@media (max-width:900px){
  .devices-pass{grid-template-columns:1fr;}
}

body.is-auth,
body.is-auth.bg-app{
  background:
    radial-gradient(ellipse at 50% 18%, #f7f8fa 0%, transparent 46%),
    linear-gradient(180deg, #e4e7ec 0%, #d5dae1 100%) !important;
  color:#1c2128;
}
.auth-split{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px 20px;}
.auth-panel{width:100%;display:flex;justify-content:center;}
.auth-form{
  width:100%;
  max-width:420px;
  background:linear-gradient(180deg,#f7f8fa 0%,#eef0f3 100%);
  border:1px solid rgba(255,255,255,.72);
  border-radius:22px;
  padding:34px 32px 26px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.85),
    0 18px 48px rgba(28,34,44,.14),
    0 2px 6px rgba(28,34,44,.06);
}
.auth-logo{height:auto;width:min(100%,240px);max-width:240px;object-fit:contain;display:block;margin:4px auto 26px;}
.auth-form h1{margin:0;font-size:30px;font-weight:800;letter-spacing:-0.035em;color:#1a1e24;text-align:center;}
.auth-lead{margin:8px 0 26px;font-size:14px;color:#8b919a;text-align:center;}
.auth-form form{display:flex;flex-direction:column;text-align:left;}
.auth-form label{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8d939c;margin:0 0 7px;}
.auth-field{
  display:flex;
  align-items:center;
  gap:10px;
  background:#fff;
  border:1px solid #d5d9e0;
  border-radius:12px;
  padding:0 14px;
  margin:0 0 16px;
  min-height:48px;
  box-shadow:inset 0 1px 1px rgba(20,24,32,.03);
}
.auth-field:focus-within{border-color:#b7bec7;box-shadow:0 0 0 3px rgba(176,182,192,.28);background:#fff;}
.auth-field svg{display:none;}
.auth-field input{flex:1;border:0;background:transparent;color:#1c2128;font-size:15px;outline:none;font-family:Inter,sans-serif;padding:12px 0;}
.auth-field input::placeholder{color:#b0b6bf;}
.auth-submit{
  margin-top:8px;
  width:100%;
  border:1px solid #c5cad2;
  border-radius:12px;
  background:
    linear-gradient(180deg, rgba(255,255,255,.72) 0%, rgba(255,255,255,0) 46%),
    linear-gradient(180deg, #f4f6f8 0%, #d5dae1 52%, #c3c9d1 100%);
  color:#2a3038;
  font-size:16px;
  font-weight:700;
  letter-spacing:-0.01em;
  padding:13px 16px;
  cursor:pointer;
  font-family:Inter,sans-serif;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.95),
    inset 0 -1px 0 rgba(70,78,90,.12),
    0 1px 2px rgba(28,34,44,.08);
}
.auth-submit:hover{
  background:
    linear-gradient(180deg, rgba(255,255,255,.85) 0%, rgba(255,255,255,0) 46%),
    linear-gradient(180deg, #fbfcfd 0%, #e0e4ea 52%, #cdd2d9 100%);
}
.auth-submit:active{
  background:linear-gradient(180deg,#c9ced6 0%,#dfe3e8 100%);
  box-shadow:inset 0 1px 2px rgba(40,46,56,.16);
}
.auth-langs{display:flex;justify-content:center;gap:16px;margin-top:14px;font-size:13px;}
.auth-langs a{color:#8b919a;font-weight:600;}
.auth-langs a.is-on{color:#1c2128;font-weight:800;}
.auth-foot{margin:20px 0 0;text-align:center;font-size:13px;color:#8b919a;}
.auth-foot a{color:#3a414a;font-weight:700;}
.auth-alert{margin:0 0 18px;padding:12px 14px;border-radius:12px;background:#FEF2F2;border:1px solid #FECACA;color:#9F1239;font-size:13px;font-weight:600;}
@media (max-width:900px){
  .auth-split{padding:24px 16px;}
  .auth-form{padding:28px 20px 22px;}
  .auth-form h1{font-size:24px;}
}
