/* ============================================================
   SMART SWEEP - PROFESSIONAL IOT DASHBOARD
   ============================================================ */
:root{
  --font-main:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  --font-mono:'JetBrains Mono','Courier New',monospace;
  --radius-sm:8px;--radius-md:12px;--radius-lg:16px;
  --transition:220ms cubic-bezier(.4,0,.2,1);
  --sidebar-w:260px;
}
[data-theme="dark"]{
  --bg-base:#020b14;
  --bg-radial:radial-gradient(circle at 70% 10%,#082943 0,#03121f 28%,#020b14 65%);
  --bg-panel:#061827;--bg-panel-2:#081f31;--bg-elevated:#0a2438;--bg-input:#041826;
  --bg-hover:rgba(8,142,222,.09);
  --line:#0b4267;--line-soft:rgba(24,91,131,.32);--line-strong:#12577c;
  --text:#e9f6ff;--text-strong:#ffffff;--muted:#8fadc2;--muted-2:#6b8ba2;
  --cyan:#08c9ff;--blue:#147eff;--green:#00e79a;--purple:#7e73ff;--red:#ff4f72;--amber:#ffb64d;
  --shadow-sm:0 4px 14px rgba(0,0,0,.28);
  --shadow-md:0 12px 38px rgba(0,0,0,.35);
  --shadow-lg:0 24px 70px rgba(0,0,0,.5);
  --glow-cyan:0 0 22px rgba(8,201,255,.28);
}
[data-theme="light"]{
  --bg-base:#eef4fa;
  --bg-radial:radial-gradient(circle at 70% 10%,#dbeafe 0,#eef4fa 45%,#f7fafd 100%);
  --bg-panel:#ffffff;--bg-panel-2:#f8fbff;--bg-elevated:#ffffff;--bg-input:#f1f6fb;
  --bg-hover:rgba(20,126,255,.07);
  --line:#d3e2ef;--line-soft:rgba(160,190,220,.35);--line-strong:#b7cfe3;
  --text:#0b2233;--text-strong:#041625;--muted:#5e7c93;--muted-2:#7d94a6;
  --cyan:#0079b8;--blue:#0a5cff;--green:#009b69;--purple:#5a4bff;--red:#e02e52;--amber:#cc7a00;
  --shadow-sm:0 4px 14px rgba(20,60,100,.08);
  --shadow-md:0 12px 38px rgba(20,60,100,.12);
  --shadow-lg:0 24px 70px rgba(20,60,100,.18);
  --glow-cyan:0 0 22px rgba(0,121,184,.18);
}
*,*::before,*::after{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-x:hidden;scroll-behavior:smooth;}
body{margin:0;min-height:100vh;min-height:100dvh;overflow-x:hidden;font-family:var(--font-main);
  background:var(--bg-radial);background-attachment:fixed;color:var(--text);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  transition:background 320ms ease,color 320ms ease;}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit;
  -webkit-tap-highlight-color:transparent;touch-action:manipulation;}
button:focus-visible{outline:2px solid var(--cyan);outline-offset:2px;}

/* ===== THEME TRANSITION — SMOOTH (tanpa flash) ===== */
html.theme-changing *,
html.theme-changing *::before,
html.theme-changing *::after{
  transition:background-color 320ms ease,
             color 320ms ease,
             border-color 320ms ease,
             box-shadow 320ms ease,
             background 320ms ease !important;
}

/* ===== LANGUAGE TRANSITION ===== */
@keyframes langSwap {
  0%   { opacity:0; transform:translateY(-2px); }
  100% { opacity:1; transform:translateY(0); }
}
html.lang-changing [data-i18n]{
  animation:langSwap 260ms ease-out;
}

/* ===== INTRO SPLASH ===== */
#intro{position:fixed;inset:0;z-index:9999;background:var(--bg-radial);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:26px;padding:24px;transition:opacity 700ms ease,visibility 700ms ease;}
#intro.hide{opacity:0;visibility:hidden;pointer-events:none;}
.intro-logo{width:118px;height:118px;border-radius:50%;border:2px solid var(--cyan);
  position:relative;display:grid;place-items:center;
  box-shadow:0 0 60px rgba(8,201,255,.35),inset 0 0 30px rgba(8,201,255,.12);
  animation:introPulse 2.2s ease-in-out infinite;}
.intro-logo::before,.intro-logo::after{content:"";position:absolute;border:2px solid var(--cyan);
  border-radius:50%;opacity:.45;}
.intro-logo::before{inset:14px;animation:introSpin 3s linear infinite;border-style:dashed;}
.intro-logo::after{inset:28px;animation:introSpin 4.4s linear infinite reverse;border-style:dotted;}
.intro-logo span{font-size:44px;color:var(--cyan);filter:drop-shadow(0 0 14px var(--cyan));z-index:2;}
@keyframes introPulse{0%,100%{transform:scale(1);}50%{transform:scale(1.05);}}
@keyframes introSpin{from{transform:rotate(0);}to{transform:rotate(360deg);}}
.intro-title{font-size:34px;font-weight:900;letter-spacing:-.6px;margin:0;text-align:center;color:var(--text-strong);}
.intro-title span{color:var(--cyan);text-shadow:0 0 26px rgba(8,201,255,.6);}
.intro-sub{font-size:12px;letter-spacing:3px;text-transform:uppercase;color:var(--muted);margin:0;text-align:center;}
.intro-bar{width:min(320px,78vw);height:4px;border-radius:4px;background:rgba(120,160,190,.18);
  overflow:hidden;position:relative;}
.intro-bar i{position:absolute;inset:0;width:0;background:linear-gradient(90deg,var(--cyan),var(--green));
  border-radius:4px;transition:width 100ms linear;box-shadow:0 0 14px var(--cyan);}
.intro-percent{font-family:var(--font-mono);font-size:12px;color:var(--cyan);letter-spacing:1px;}
.intro-skip{position:absolute;top:max(18px,env(safe-area-inset-top));right:18px;
  padding:8px 14px;border-radius:999px;border:1px solid var(--line-strong);
  background:rgba(6,24,39,.55);color:var(--muted);font-size:11px;font-weight:600;
  letter-spacing:.5px;transition:var(--transition);}
.intro-skip:hover{color:var(--cyan);border-color:var(--cyan);}

/* ===== APP LAYOUT ===== */
.app{display:flex;min-height:100vh;min-height:100dvh;}

/* ===== SIDEBAR ===== */
.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:var(--bg-panel);
  border-right:1px solid var(--line-soft);padding:22px 14px 14px;
  position:fixed;top:0;bottom:0;left:0;z-index:100;
  display:flex;flex-direction:column;
  transition:background var(--transition),border-color var(--transition);}
.brand{display:flex;gap:12px;align-items:center;padding:4px 10px 22px;
  border-bottom:1px solid var(--line-soft);margin-bottom:18px;}
.brand-logo{width:46px;height:46px;border:2px solid var(--cyan);border-radius:50%;
  position:relative;flex:0 0 46px;box-shadow:var(--glow-cyan);}
.brand-logo::before,.brand-logo::after{content:"";position:absolute;border:2px solid var(--cyan);
  border-radius:50%;opacity:.5;}
.brand-logo::before{inset:8px;border-style:dashed;}
.brand-logo::after{inset:16px;background:var(--cyan);border:0;box-shadow:0 0 10px var(--cyan);}
.brand-text h1{font-size:17px;margin:0;letter-spacing:-.3px;font-weight:800;color:var(--text-strong);}
.brand-text h1 span{color:var(--cyan);}
.brand-text p{font-size:9.5px;color:var(--muted-2);margin:3px 0 0;letter-spacing:.3px;}
.nav-title{font-size:9px;color:var(--muted-2);letter-spacing:2px;margin:4px 12px 8px;font-weight:700;}
.nav{display:grid;gap:4px;flex:1;}
.nav button{display:flex;align-items:center;gap:13px;padding:11px 13px;
  border-radius:var(--radius-sm);color:var(--muted);font-weight:600;font-size:12.5px;
  text-align:left;transition:var(--transition);position:relative;}
.nav button:hover{background:var(--bg-hover);color:var(--text);}
.nav button.active{background:linear-gradient(90deg,rgba(8,201,255,.14),rgba(8,201,255,.04));
  color:var(--text-strong);box-shadow:inset 3px 0 var(--cyan);}
.nav button.active .nav-icon{color:var(--cyan);}
.nav-icon{width:22px;text-align:center;font-size:16px;color:var(--muted-2);
  flex:0 0 22px;transition:color var(--transition);}

/* ===== SIDEBAR BOTTOM ===== */
.side-bottom{margin-top:14px;padding:12px;border:1px solid var(--line-strong);
  border-radius:var(--radius-md);background:linear-gradient(145deg,var(--bg-elevated),var(--bg-panel));
  position:relative;overflow:hidden;}
.side-bottom::before{content:"";position:absolute;width:90px;height:90px;
  border:1px solid rgba(8,201,255,.16);border-radius:50%;left:-38px;top:-34px;pointer-events:none;}
.bt-row{display:flex;gap:10px;align-items:center;position:relative;z-index:1;}
.bt-orb{width:42px;height:42px;flex:0 0 42px;border-radius:var(--radius-sm);
  display:grid;place-items:center;border:1px solid var(--cyan);
  background:rgba(8,201,255,.08);color:var(--cyan);}
.bt-orb svg{width:22px;height:22px;}
.bt-info b{display:block;font-size:11px;color:var(--text-strong);}
.bt-info small{display:block;font-size:9.5px;color:var(--muted);margin-top:3px;}
.bt-info small.online{color:var(--green);}
.bt-info small.offline{color:var(--red);}
.bt-signal{display:flex;align-items:flex-end;gap:3px;height:14px;margin-left:auto;}
.bt-signal i{display:block;width:3px;background:var(--cyan);border-radius:3px;opacity:.3;transition:var(--transition);}
.bt-signal i:nth-child(1){height:4px;}
.bt-signal i:nth-child(2){height:7px;}
.bt-signal i:nth-child(3){height:10px;}
.bt-signal i:nth-child(4){height:14px;}
.bt-signal.strong i{opacity:1;}
.bt-signal.medium i:nth-child(-n+3){opacity:1;}
.bt-signal.weak i:nth-child(-n+1){opacity:1;background:var(--amber);}
.bt-signal.none i{opacity:.15;}

/* ===== MAIN ===== */
.main{margin-left:var(--sidebar-w);width:calc(100% - var(--sidebar-w));
  min-width:0;padding:20px 24px 28px;}

/* ===== TOPBAR ===== */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;
  margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--line-soft);}
.title-wrap{display:flex;align-items:center;gap:14px;min-width:0;}
.diamond{width:44px;height:44px;flex:0 0 44px;border:1.5px solid var(--cyan);
  transform:rotate(45deg);display:grid;place-items:center;box-shadow:var(--glow-cyan);}
.diamond span{transform:rotate(-45deg);color:var(--cyan);font-size:17px;line-height:1;}
.title h2{font-size:22px;margin:0;font-weight:800;letter-spacing:-.4px;
  color:var(--text-strong);line-height:1.15;}
.title p{font-size:10.5px;color:var(--muted);margin:4px 0 0;line-height:1.4;font-weight:500;}
.top-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:flex-end;}
.top-card{min-width:138px;padding:9px 12px;border:1px solid var(--line);
  border-radius:var(--radius-sm);background:linear-gradient(145deg,var(--bg-elevated),var(--bg-panel));
  transition:var(--transition);}
.top-card small{display:block;font-size:8.5px;color:var(--muted-2);letter-spacing:.4px;
  text-transform:uppercase;font-weight:600;}
.top-card b{display:block;font-size:13px;margin-top:3px;color:var(--text-strong);font-weight:700;}
.top-card b.online{color:var(--green);}
.top-card b.offline{color:var(--red);}
.top-card.clock b{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:13.5px;}
.icon-btn{width:40px;height:40px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--bg-panel);display:grid;place-items:center;color:var(--muted);
  font-size:15px;transition:var(--transition);flex:0 0 40px;}
.icon-btn:hover{color:var(--cyan);border-color:var(--cyan);background:var(--bg-hover);}
.icon-btn:active{transform:scale(.94);}
.icon-btn.alert{
  color:var(--red);
  border-color:var(--red);
  background:rgba(255,79,114,.12);
  animation:bellShake .8s ease-in-out infinite;
}
@keyframes bellShake{
  0%,100%{transform:rotate(0);}
  20%{transform:rotate(-14deg);}
  40%{transform:rotate(14deg);}
  60%{transform:rotate(-10deg);}
  80%{transform:rotate(10deg);}
}
.lang-btn{width:auto;padding:0 12px;gap:6px;font-size:11px;font-weight:800;
  letter-spacing:1px;display:inline-flex;align-items:center;justify-content:center;}

/* Theme button */
.theme-btn{font-size:16px;position:relative;overflow:hidden;}
.theme-btn.spin{animation:themeSpin 500ms cubic-bezier(.4,0,.2,1);}
@keyframes themeSpin{
  0%{transform:rotate(0) scale(1);}
  50%{transform:rotate(180deg) scale(.7);}
  100%{transform:rotate(360deg) scale(1);}
}

/* ===== MODE TOGGLE ===== */
.mode-toggle{
  display:flex;align-items:center;gap:0;border:1px solid var(--line);
  border-radius:var(--radius-sm);background:var(--bg-panel);
  overflow:hidden;height:40px;padding:0;transition:var(--transition);
}
.mode-toggle:hover{border-color:var(--cyan);}
.mode-toggle .mode-opt{
  display:inline-flex;align-items:center;gap:6px;height:100%;padding:0 14px;
  font-size:10.5px;font-weight:800;letter-spacing:.6px;color:var(--muted);
  transition:var(--transition);white-space:nowrap;cursor:pointer;background:transparent;
  text-transform:uppercase;
}
.mode-toggle .mode-opt:hover{color:var(--text);background:var(--bg-hover);}
.mode-toggle .mode-opt.active{color:var(--text-strong);background:var(--bg-hover);}
.mode-toggle .mode-opt.active.demo{
  color:#ffb64d;background:rgba(255,182,77,.12);box-shadow:inset 0 -2px #ffb64d;
}
.mode-toggle .mode-opt.active.live{
  color:var(--green);background:rgba(0,231,154,.12);box-shadow:inset 0 -2px var(--green);
}
.mode-toggle .mode-opt .dot{
  width:6px;height:6px;border-radius:50%;background:currentColor;
  box-shadow:0 0 6px currentColor;animation:modePulse 1.6s ease-in-out infinite;
}
@keyframes modePulse{0%,100%{opacity:1;}50%{opacity:.35;}}

/* ===== PAGES ===== */
.page{display:none;}
.page.active{display:block;animation:fadeUp 320ms ease;}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}

/* ===== KPI ===== */
.kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:14px;}
.kpi{min-width:0;height:118px;padding:14px;border:1px solid var(--line);
  border-radius:var(--radius-md);
  background:radial-gradient(circle at 90% 78%,rgba(8,150,220,.1),transparent 42%),
    linear-gradient(145deg,var(--bg-elevated),var(--bg-panel));
  position:relative;overflow:hidden;box-shadow:var(--shadow-sm);transition:var(--transition);}
.kpi:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--cyan);}
.kpi::after{content:"";position:absolute;right:-22px;bottom:-42px;width:100px;height:100px;
  border:1px solid rgba(8,201,255,.12);border-radius:50%;pointer-events:none;}
.kpi-head{display:flex;justify-content:space-between;align-items:center;font-size:8.5px;
  letter-spacing:.8px;color:var(--muted-2);text-transform:uppercase;font-weight:700;}
.kpi-head strong{color:var(--cyan);font-size:13px;}
.kpi-value{font-size:26px;font-weight:800;margin-top:12px;color:var(--text-strong);
  letter-spacing:-.5px;font-variant-numeric:tabular-nums;transition:color 260ms ease;}
.kpi-value span{font-size:10.5px;color:var(--muted);font-weight:500;margin-left:2px;}
.kpi-value.safe{color:var(--green);}
.kpi-value.danger{color:var(--red);}
.kpi-value.blue{color:var(--cyan);}
.kpi-sub{font-size:8.5px;color:var(--green);margin-top:5px;font-weight:600;}

/* ===== GRID MAIN ===== */
.grid-main{display:grid;grid-template-columns:1.4fr 1fr;gap:14px;margin-bottom:14px;}
.robot-card{min-height:350px;border:1px solid var(--line-strong);border-radius:var(--radius-lg);
  background:linear-gradient(145deg,var(--bg-elevated),var(--bg-panel));
  overflow:hidden;position:relative;box-shadow:var(--shadow-md);display:flex;flex-direction:column;}
.robot-card::before{content:"";position:absolute;inset:0;
  background:radial-gradient(circle at 55% 78%,rgba(8,201,255,.16),transparent 34%);
  pointer-events:none;}
.robot-card.alarm{
  border-color:var(--red);
  animation:robotAlarm 1.4s ease-in-out infinite;
}
@keyframes robotAlarm{
  0%,100%{box-shadow:var(--shadow-md),0 0 0 0 rgba(255,79,114,0);}
  50%{box-shadow:var(--shadow-md),0 0 0 8px rgba(255,79,114,.12);}
}
.robot-top{display:flex;justify-content:space-between;align-items:flex-start;
  padding:16px 18px 8px;position:relative;z-index:1;}
.robot-status{font-size:8.5px;color:var(--muted);letter-spacing:1px;font-weight:700;}
.robot-status b{display:block;font-size:17px;color:var(--cyan);margin-top:4px;letter-spacing:-.3px;}
.robot-status b.running{color:var(--green);}
.robot-status b.stopped{color:var(--amber);}
.robot-status b.obstacle{color:var(--red);}
.robot-status b.offline{color:var(--muted-2);}
.robot-status span{display:block;font-size:9px;color:var(--muted-2);
  margin-top:3px;font-weight:500;letter-spacing:0;}
.robot-scene{flex:1;min-height:190px;position:relative;display:grid;place-items:center;perspective:800px;}
.floor-grid{position:absolute;width:78%;height:70%;transform:rotateX(58deg);
  background:linear-gradient(rgba(8,150,200,.18) 1px,transparent 1px),
    linear-gradient(90deg,rgba(8,150,200,.18) 1px,transparent 1px);
  background-size:32px 32px;box-shadow:0 0 60px rgba(8,201,255,.14);border-radius:4px;}
.ring{position:absolute;width:230px;height:86px;border:2px solid rgba(8,201,255,.55);
  border-radius:50%;box-shadow:0 0 24px rgba(8,201,255,.3);animation:ringPulse 3s ease-in-out infinite;}
.ring.r2{width:180px;height:66px;opacity:.45;animation-delay:-1.5s;}
@keyframes ringPulse{0%,100%{transform:scale(1);opacity:.6;}50%{transform:scale(1.06);opacity:.9;}}
.robot{width:185px;height:96px;border-radius:52% 52% 45% 45%;
  background:linear-gradient(180deg,#f6fbff,#93a9b8 62%,#263e4b);
  position:relative;z-index:2;box-shadow:0 20px 34px rgba(0,0,0,.5),var(--glow-cyan);}
[data-theme="light"] .robot{background:linear-gradient(180deg,#e8f3fb,#b3c7d6 60%,#5b7484);}
.robot::before{content:"";position:absolute;left:15px;right:15px;top:-7px;height:52px;
  border-radius:50%;background:linear-gradient(180deg,#111d27,#02080e);border:2px solid #566b76;}
.robot::after{content:"SMART SWEEP";position:absolute;top:28px;left:0;right:0;text-align:center;
  font-size:6.5px;color:#b5c6ce;letter-spacing:1.5px;font-weight:700;}
.sensor-eye{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);
  width:42px;height:10px;border-radius:8px;background:#062033;border:1px solid var(--cyan);
  box-shadow:0 0 16px var(--cyan);}
.brush{position:absolute;bottom:-9px;width:45px;height:13px;
  background:repeating-linear-gradient(90deg,#1b2a31 0 4px,#7d8e95 5px 7px);
  border-radius:0 0 50% 50%;}
.brush.l{left:25px;}
.brush.r{right:25px;}
.robot-buttons{display:flex;gap:8px;padding:0 14px 14px;position:relative;z-index:1;}
.action{flex:1;min-width:0;padding:11px 8px;border-radius:var(--radius-sm);
  border:1px solid var(--line-strong);background:var(--bg-input);color:var(--text);
  font-size:10px;font-weight:800;letter-spacing:.8px;transition:var(--transition);text-transform:uppercase;}
.action:hover:not(:disabled){filter:brightness(1.12);transform:translateY(-1px);}
.action:active:not(:disabled){transform:translateY(0);}
.action:disabled{opacity:.45;cursor:not-allowed;}
.action.start{background:linear-gradient(90deg,#009b6b,#00d493);color:#fff;border-color:#00d493;}
.action.stop{background:linear-gradient(90deg,#a81c42,#d63864);color:#fff;border-color:var(--red);}
.action.boost{background:linear-gradient(90deg,#5e4be0,#8577ff);color:#fff;border-color:var(--purple);}

/* ===== SENSOR PANEL ===== */
.sensor-panel{display:grid;gap:12px;min-width:0;}
.panel{border:1px solid var(--line-strong);border-radius:var(--radius-md);
  background:linear-gradient(145deg,var(--bg-elevated),var(--bg-panel));
  box-shadow:var(--shadow-sm);overflow:hidden;transition:var(--transition);}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:12px 15px;border-bottom:1px solid var(--line-soft);}
.panel-head h3{font-size:11.5px;margin:0;letter-spacing:.6px;font-weight:800;
  color:var(--text-strong);text-transform:uppercase;}
.panel-head span{font-size:8.5px;color:var(--muted);font-weight:700;
  letter-spacing:.5px;text-transform:uppercase;}
.live{color:var(--green)!important;display:inline-flex;align-items:center;gap:5px;}
.live::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--green);
  box-shadow:0 0 8px var(--green);animation:livePulse 1.4s ease-in-out infinite;}
@keyframes livePulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.4;transform:scale(.85);}}
.sensor-grid{padding:12px;display:grid;grid-template-columns:repeat(2,1fr);gap:12px;}
.sensor{padding:14px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--bg-input);min-height:130px;position:relative;transition:var(--transition);}
.sensor:hover{border-color:var(--cyan);}
.sensor-icon{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--cyan);color:var(--cyan);background:rgba(8,201,255,.08);font-size:15px;}
.sensor b{display:block;font-size:10.5px;margin-top:8px;color:var(--text-strong);font-weight:700;}
.sensor .big{font-size:20px;font-weight:800;margin-top:6px;color:var(--text-strong);
  font-variant-numeric:tabular-nums;}
.sensor .big small{font-size:9.5px;color:var(--muted);font-weight:500;}
.sensor small{display:block;font-size:8.5px;color:var(--muted-2);margin-top:3px;}

/* ============================================================
   ACTUATORS
   ============================================================ */
.actuators{padding:14px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;}
.actuator{
  padding:16px 18px;border:1px solid var(--line);border-radius:var(--radius-md);
  background:linear-gradient(145deg,var(--bg-elevated),var(--bg-panel));
  display:grid;grid-template-columns:52px 1fr auto;align-items:center;gap:14px;
  min-width:0;transition:var(--transition);position:relative;overflow:hidden;
}
.actuator::before{
  content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,transparent,var(--cyan),transparent);
  opacity:0;transition:opacity var(--transition);
}
.actuator:hover::before{opacity:.6;}
.actuator:hover{
  border-color:var(--cyan);transform:translateY(-2px);
  box-shadow:0 8px 24px rgba(8,201,255,.12);
}
.actuator.on{
  border-color:var(--green);
  box-shadow:0 0 20px rgba(0,231,154,.15);
}
.actuator.on::before{
  background:linear-gradient(90deg,transparent,var(--green),transparent);opacity:.8;
}
.act-icon{
  width:52px;height:52px;flex:0 0 52px;border-radius:14px;
  display:grid;place-items:center;border:1.5px solid var(--line-strong);
  background:radial-gradient(circle at 30% 30%,rgba(8,201,255,.18),transparent 70%),
             linear-gradient(145deg,var(--bg-panel-2),var(--bg-input));
  color:var(--cyan);font-size:20px;
  box-shadow:0 0 16px rgba(8,201,255,.15),inset 0 0 12px rgba(8,201,255,.05);
  transition:var(--transition);
}
.actuator:hover .act-icon{
  border-color:var(--cyan);
  box-shadow:0 0 24px rgba(8,201,255,.35),inset 0 0 16px rgba(8,201,255,.1);
}
.actuator.on .act-icon{
  border-color:var(--green);color:var(--green);
  background:radial-gradient(circle at 30% 30%,rgba(0,231,154,.22),transparent 70%),
             linear-gradient(145deg,var(--bg-panel-2),var(--bg-input));
  box-shadow:0 0 24px rgba(0,231,154,.4),inset 0 0 14px rgba(0,231,154,.1);
}
.act-text{min-width:0;display:flex;flex-direction:column;gap:5px;overflow:hidden;}
.actuator b{font-size:13px;color:var(--text-strong);font-weight:700;letter-spacing:-.2px;
  line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.actuator .on{
  display:inline-flex;align-items:center;gap:6px;font-size:10px;font-weight:800;
  letter-spacing:1.2px;line-height:1;color:var(--muted-2);
  transition:color var(--transition);text-transform:uppercase;
}
.actuator .on::before{
  content:"";width:6px;height:6px;border-radius:50%;background:currentColor;
  box-shadow:none;flex:0 0 6px;transition:box-shadow var(--transition);
}
.actuator.on .on{color:var(--green);}
.actuator.on .on::before{box-shadow:0 0 10px var(--green);animation:dotPulse 1.6s ease-in-out infinite;}
@keyframes dotPulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.5;transform:scale(.85);}}

/* ============================================================
   AKTUATOR DI DALAM PANEL SENSOR (DESKTOP)
   Layout vertikal (1 kolom), rapi & proporsional
   ============================================================ */
@media (min-width: 641px) {
  .sensor-panel > .panel.actuator-panel .actuators {
    grid-template-columns: 1fr;
    gap: 10px;
    padding: 12px;
  }
  .sensor-panel > .panel.actuator-panel .actuator {
    padding: 14px 16px;
    grid-template-columns: 44px 1fr auto;
    gap: 14px;
  }
  .sensor-panel > .panel.actuator-panel .act-icon {
    width: 44px;
    height: 44px;
    flex: 0 0 44px;
    font-size: 17px;
    border-radius: 12px;
  }
  .sensor-panel > .panel.actuator-panel .actuator b {
    font-size: 12.5px;
  }
  .sensor-panel > .panel.actuator-panel .actuator .on {
    font-size: 9.5px;
  }
}

.switch{
  flex:0 0 38px;width:38px;height:20px;border-radius:10px;background:#1d3446;
  position:relative;cursor:pointer;transition:var(--transition);
  border:1px solid rgba(255,255,255,.08);
}
[data-theme="light"] .switch{background:#c6d5e3;border-color:rgba(0,0,0,.08);}
.switch::after{
  content:"";position:absolute;width:14px;height:14px;border-radius:50%;
  top:2px;left:2px;background:#d7e7ef;
  box-shadow:0 2px 5px rgba(0,0,0,.4);
  transition:left var(--transition),background var(--transition);
}
.switch.on{
  background:var(--green);border-color:var(--green);
  box-shadow:0 0 14px rgba(0,231,154,.5),inset 0 0 8px rgba(0,231,154,.2);
}
.switch.on::after{left:20px;background:#fff;box-shadow:0 0 8px rgba(255,255,255,.5),0 2px 5px rgba(0,0,0,.3);}
.switch:hover{border-color:var(--cyan);}

/* ===== ANALYTICS ===== */
.analytics{display:grid;grid-template-columns:1.35fr .75fr .9fr;gap:14px;margin-top:14px;}
.chart-panel{min-height:265px;display:flex;flex-direction:column;}
.chart-wrap{flex:1;min-height:200px;padding:10px 14px;}
.chart-wrap canvas{width:100%;height:100%;display:block;}
.donut-area{height:200px;display:grid;place-items:center;position:relative;}
.donut{width:135px;height:135px;border-radius:50%;
  background:conic-gradient(var(--cyan) 0 68%,var(--blue) 68% 84%,var(--line) 84% 100%);
  position:relative;box-shadow:var(--glow-cyan);transition:background 400ms ease;}
.donut::after{content:"";position:absolute;inset:21px;border-radius:50%;
  background:var(--bg-panel);border:1px solid var(--line);}
.donut-center{position:absolute;text-align:center;z-index:2;}
.donut-center b{display:block;font-size:23px;color:var(--text-strong);font-weight:800;}
.donut-center small{font-size:8px;color:var(--muted);letter-spacing:.6px;font-weight:700;}
.legend{padding:0 14px 12px;display:grid;gap:6px;}
.legend div{display:flex;justify-content:space-between;font-size:9px;color:var(--muted);font-weight:600;}
.legend div b{color:var(--text-strong);}
.legend i{width:8px;height:8px;display:inline-block;border-radius:2px;
  background:var(--cyan);margin-right:6px;vertical-align:middle;}
.legend div:nth-child(2) i{background:var(--blue);}
.legend div:nth-child(3) i{background:var(--line);}
.health{padding:12px;display:grid;grid-template-columns:1fr 1fr;gap:9px;}
.health-item{padding:10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-input);}
.health-item small{font-size:8px;color:var(--muted);text-transform:uppercase;
  letter-spacing:.5px;font-weight:700;}
.health-item b{display:block;font-size:12px;margin:4px 0;color:var(--text-strong);font-weight:800;}
.bar{height:5px;background:var(--line-soft);border-radius:8px;overflow:hidden;}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--green));
  border-radius:8px;transition:width 400ms ease;}

/* ===== MATRIX ===== */
.matrix{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:14px;}
.matrix .cell{height:66px;padding:10px;border:1px solid var(--line);
  border-radius:var(--radius-sm);background:var(--bg-input);position:relative;transition:var(--transition);}
.matrix .cell:hover{border-color:var(--cyan);}
.matrix .cell.alarm{border-color:var(--red);background:rgba(255,79,114,.08);}
.cell b{font-size:9.5px;color:var(--text-strong);font-weight:700;}
.cell small{display:block;color:var(--muted);font-size:8px;margin-top:7px;}
.led{position:absolute;right:10px;top:11px;width:7px;height:7px;border-radius:50%;
  background:var(--green);box-shadow:0 0 9px var(--green);}
.led.off{background:var(--muted-2);box-shadow:none;}
.matrix .cell.alarm .led{animation:ledBlink .6s ease-in-out infinite;}
@keyframes ledBlink{
  0%,100%{opacity:1;transform:scale(1);}
  50%{opacity:.3;transform:scale(.7);}
}

/* ===== BOTTOM GRID ===== */
.bottom-grid{display:grid;grid-template-columns:1.25fr .8fr;gap:14px;margin-top:14px;}

/* ===== HISTORY TABLE ===== */
.history{padding-bottom:10px;}
.table-wrap{padding:0 12px 6px;overflow-x:auto;-webkit-overflow-scrolling:touch;}
.history table{width:100%;border-collapse:collapse;font-size:10px;min-width:560px;}
.history th,.history td{text-align:left;padding:9px 8px;
  border-bottom:1px solid var(--line-soft);white-space:nowrap;}
.history th{color:var(--muted);font-weight:700;font-size:9px;letter-spacing:.5px;text-transform:uppercase;}
.history td{color:var(--text);font-weight:500;}

/* ===== LOGS ===== */
.logs{height:280px;display:flex;flex-direction:column;}
.logs-list{flex:1;overflow-y:auto;padding:8px 14px;}
.logs-list::-webkit-scrollbar{width:5px;}
.logs-list::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:3px;}

/* ===== PAGE CARDS ===== */
.page-card{padding:22px;border:1px solid var(--line-strong);border-radius:var(--radius-lg);
  background:linear-gradient(145deg,var(--bg-elevated),var(--bg-panel));box-shadow:var(--shadow-md);}
.page-card h2{margin:0 0 6px;font-size:22px;color:var(--text-strong);font-weight:800;letter-spacing:-.3px;}
.page-card>p{color:var(--muted);font-size:11px;margin:0 0 18px;line-height:1.5;}
.settings-row{display:flex;justify-content:space-between;align-items:center;
  padding:15px 0;border-bottom:1px solid var(--line-soft);gap:12px;}
.settings-row:last-child{border-bottom:0;}
.settings-row span{color:var(--text);font-size:12px;font-weight:600;}
.settings-row b{font-size:11.5px;font-weight:800;}
.settings-row b.online{color:var(--green);}
.settings-row b.offline{color:var(--red);}
.settings-row b.demo{color:#ffb64d;}
.settings-row .switch{flex:0 0 40px;margin-left:auto;}

.robot-status-right{text-align:right;}
.air-value{color:var(--green);}
.health-cpu .bar i{width:43%;}
.health-ram .bar i{width:61%;}
#rssiBar,#tempBar{width:0%;}
.history-empty{text-align:center;color:var(--muted);padding:22px;}
.sensor-grid-page{padding:0;}
.actuators-page{padding:0;}
.big-chart-wrap{height:460px;position:relative;}
.big-chart-wrap canvas{width:100%;height:100%;display:block;}
.table-wrap-full{padding:0;}
.history-full-table{width:100%;border-collapse:collapse;font-size:11px;}

/* ===== FOOTER ===== */
.footer{padding:18px 4px 0;color:var(--muted-2);font-size:9.5px;text-align:right;
  letter-spacing:.4px;font-weight:500;}

/* ===== TOAST ===== */
.toast{position:fixed;right:24px;bottom:24px;z-index:500;
  padding:14px 18px;border:1px solid var(--cyan);border-radius:var(--radius-md);
  background:var(--bg-elevated);box-shadow:var(--shadow-lg);font-size:11px;
  color:var(--text);max-width:320px;
  transform:translateY(140%);opacity:0;
  transition:transform 320ms cubic-bezier(.4,0,.2,1),opacity 320ms ease;
  pointer-events:none;}
.toast.show{transform:translateY(0);opacity:1;}

/* ===== MOBILE NAV ===== */
.mobile-nav{display:none;}

/* ===== HISTORY TOGGLE ===== */
.history-toggle {
  display: inline-flex;align-items: center;justify-content: center;
  padding: 5px 12px;border-radius: 6px;border: 1px solid var(--line-strong);
  background: var(--bg-input);color: var(--cyan);
  font-size: 9px;font-weight: 800;letter-spacing: 0.5px;text-transform: uppercase;
  cursor: pointer;transition: var(--transition);white-space: nowrap;
}
.history-toggle:hover {
  background: var(--bg-hover);border-color: var(--cyan);color: var(--text-strong);
  box-shadow: 0 0 12px rgba(8, 201, 255, 0.25);
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media(max-width:1200px){
  .kpis{grid-template-columns:repeat(3,1fr);}
  .grid-main{grid-template-columns:1fr;}
  .analytics{grid-template-columns:1fr 1fr;}
  .analytics>.chart-panel:first-child{grid-column:1/-1;}
  .bottom-grid{grid-template-columns:1fr 1fr;}
  .matrix{grid-template-columns:repeat(3,1fr);}
}

@media(max-width:900px){
  .sidebar{width:78px;flex:0 0 78px;padding:14px 9px;}
  .brand{justify-content:center;padding:4px 0 18px;}
  .brand-text{display:none;}
  .brand-logo{width:44px;height:44px;flex:0 0 44px;}
  .nav-title{display:none;}
  .nav button{justify-content:center;padding:12px 8px;}
  .nav button .nav-label{display:none;}
  .nav-icon{width:auto;font-size:19px;flex:0 0 auto;}
  .bt-info{display:none;}
  .side-bottom{padding:9px;}
  .bt-row{justify-content:center;}
  .bt-signal{margin-left:0;}
  .main{margin-left:78px;width:calc(100% - 78px);padding:16px;}
  .top-actions{display:none;}
  .title h2{font-size:19px;}
  .kpis{grid-template-columns:repeat(3,1fr);}
  .sensor-grid{grid-template-columns:repeat(2,1fr);}
  .actuators{grid-template-columns:1fr;gap:10px;}
  .actuator{padding:14px 16px;grid-template-columns:46px 1fr auto;gap:12px;}
  .act-icon{width:46px;height:46px;flex:0 0 46px;font-size:18px;}
  .actuator b{font-size:12px;}
  .analytics{grid-template-columns:1fr;}
  .bottom-grid{grid-template-columns:1fr;}
  .matrix{grid-template-columns:repeat(2,1fr);}
}

@media(max-width:640px){
  .sidebar{display:none;}
  .main{margin-left:0;width:100%;padding:12px 12px 96px;}
  .topbar{flex-direction:column;align-items:stretch;gap:12px;padding-bottom:12px;margin-bottom:12px;}
  .title-wrap{width:100%;}
  .diamond{width:38px;height:38px;flex:0 0 38px;}
  .diamond span{font-size:14px;}
  .title h2{font-size:18px;}
  .title p{font-size:9.5px;}

  .top-actions{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
    gap:8px;width:100%;
  }
  .top-card{min-width:0;}
  .top-card.clock{grid-column:1/-1;}
  .icon-btn,.lang-btn{width:100%;height:40px;flex:auto;}

  .mode-toggle{
    grid-column:1/-1;width:100%;height:42px;
    display:grid;grid-template-columns:1fr 1fr;
  }
  .mode-toggle .mode-opt{padding:0 8px;font-size:10px;justify-content:center;}

  .kpis{grid-template-columns:1fr;gap:10px;}
  .kpi{height:104px;padding:12px;}
  .kpi-value{font-size:24px;}
  .robot-scene{min-height:170px;}
  .robot{width:155px;height:82px;}
  .robot::before{height:45px;top:-6px;}
  .robot::after{top:24px;font-size:6px;}
  .robot-buttons{padding:0 10px 12px;gap:6px;}
  .action{font-size:9px;padding:10px 4px;}
  .sensor-grid{grid-template-columns:1fr 1fr;padding:10px;gap:8px;}
  .sensor{min-height:108px;padding:10px;}
  .sensor .big{font-size:17px;}
  .actuators{grid-template-columns:1fr;padding:10px;gap:8px;}
  .actuator{padding:14px;grid-template-columns:44px 1fr auto;gap:12px;}
  .act-icon{width:44px;height:44px;flex:0 0 44px;font-size:17px;}
  .actuator b{font-size:12px;}
  .actuator .on{font-size:9px;}
  .switch{flex:0 0 36px;width:36px;height:20px;}
  .switch::after{width:14px;height:14px;}
  .switch.on::after{left:18px;}
  .matrix{grid-template-columns:1fr 1fr;}
  .matrix .cell{height:60px;}
  .chart-wrap{min-height:170px;padding:8px 10px;}
  .donut-area{height:170px;}
  .donut{width:110px;height:110px;}
  .donut::after{inset:17px;}
  .donut-center b{font-size:20px;}
  .health{padding:10px;gap:7px;}
  .footer{text-align:center;padding-top:14px;}
  .page-card{padding:16px;}
  .page-card h2{font-size:19px;}
  .toast{left:14px;right:14px;bottom:96px;max-width:none;}

  .mobile-nav{
    display:grid;grid-template-columns:repeat(6,1fr);
    position:fixed;left:0;right:0;bottom:0;z-index:200;
    background:var(--bg-panel);border-top:1px solid var(--line-strong);
    padding:6px 0 max(6px,env(safe-area-inset-bottom));
    backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
    box-shadow:0 -14px 38px rgba(0,0,0,.32);
  }
  .mobile-nav button{
    display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:3px;padding:6px 2px;color:var(--muted);font-size:0;transition:var(--transition);}
  .mobile-nav button .nav-icon{font-size:18px;color:var(--muted);}
  .mobile-nav button.active{color:var(--cyan);}
  .mobile-nav button.active .nav-icon{color:var(--cyan);filter:drop-shadow(0 0 6px rgba(8,201,255,.4));}
}

@media(max-width:380px){
  .main{padding:10px 10px 92px;}
  .title h2{font-size:16px;}
  .title p{font-size:8.5px;}
  .kpi{height:98px;}
  .kpi-value{font-size:22px;}
  .sensor-grid{grid-template-columns:1fr;}
  .matrix{grid-template-columns:1fr;}
  .robot{width:135px;height:72px;}
  .robot-scene{min-height:150px;}
  .action{font-size:8px;letter-spacing:.4px;}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;}
}
/* ============================================================
   ALARM OVERLAY
   ============================================================ */
.alarm-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(255, 79, 114, 0.15);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  z-index: 9999;
  align-items: center;
  justify-content: center;
  animation: alarmFlash 1s ease-in-out infinite;
}
.alarm-overlay.show {
  display: flex;
}
@keyframes alarmFlash {
  0%, 100% { background: rgba(255, 79, 114, 0.15); }
  50% { background: rgba(255, 79, 114, 0.30); }
}
.alarm-box {
  background: linear-gradient(145deg, #1a0a0f, #0a0205);
  border: 3px solid #ff4f72;
  border-radius: 20px;
  padding: 40px 50px;
  text-align: center;
  box-shadow: 0 0 80px rgba(255, 79, 114, 0.7),
              inset 0 0 40px rgba(255, 79, 114, 0.2);
  animation: alarmPulse 0.8s ease-in-out infinite;
  max-width: 90vw;
}
@keyframes alarmPulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.05); }
}
.alarm-icon {
  font-size: 80px;
  color: #ff4f72;
  line-height: 1;
  animation: alarmIconShake 0.4s ease-in-out infinite;
  text-shadow: 0 0 30px #ff4f72;
}
@keyframes alarmIconShake {
  0%, 100% { transform: rotate(-8deg); }
  50% { transform: rotate(8deg); }
}
.alarm-box h2 {
  color: #ff4f72;
  font-size: 42px;
  margin: 16px 0 8px;
  letter-spacing: 4px;
  font-weight: 900;
  text-shadow: 0 0 20px #ff4f72;
}
.alarm-box p {
  color: #ffe9ee;
  font-size: 15px;
  margin: 6px 0;
  letter-spacing: 1px;
}
.alarm-box .alarm-sub {
  color: #b87788;
  font-size: 12px;
  margin-top: 12px;
  letter-spacing: 2px;
  text-transform: uppercase;
}