:root{
  --bg:#0c0e13; --bg2:#131720; --card:#171c26; --line:#252c3a;
  --fg:#e8ecf4; --muted:#8b95a8; --accent:#e10600; --accent2:#00d1b2;
  --ok:#22c55e; --warn:#f59e0b; --err:#ef4444;
  --radius:14px; --gap:14px;
  font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--fg)}
body{min-height:100vh;-webkit-text-size-adjust:100%}
h1,h2{margin:0 0 10px;font-size:1rem;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}
small,.muted{color:var(--muted)}
pre{background:#080a0f;border:1px solid var(--line);border-radius:10px;padding:12px;
    white-space:pre-wrap;word-break:break-word;font-size:.8rem;max-height:340px;overflow:auto}
button,input,select,textarea{font:inherit;color:var(--fg);background:#1d2330;border:1px solid var(--line);
    border-radius:10px;padding:10px 12px}
button{cursor:pointer;transition:filter .15s,transform .05s}
button:hover{filter:brightness(1.25)}
button:active{transform:translateY(1px)}
button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
button.ghost{background:transparent}
button.small{padding:5px 10px;font-size:.8rem}
input[type=range]{padding:0;background:transparent;border:0;width:100%;accent-color:var(--accent)}
label{display:flex;flex-direction:column;gap:6px;font-size:.85rem;color:var(--muted)}

/* login */
.login{min-height:100vh;display:grid;place-items:center;padding:20px;
  background:radial-gradient(1200px 600px at 50% -10%,#1d2330,var(--bg))}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:28px;width:min(380px,100%);display:flex;flex-direction:column;gap:12px}
.logo{font-size:1.15rem;letter-spacing:.04em;display:flex;align-items:center;gap:9px}
.logo b{color:var(--accent)}
.dot{width:10px;height:10px;border-radius:50%;background:var(--muted);flex:none}
.dot.on{background:var(--ok);box-shadow:0 0 10px var(--ok)}
.dot.off{background:var(--err)}
.error{color:var(--err);font-size:.85rem;margin:0}

/* layout */
.topbar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:12px 16px;background:rgba(12,14,19,.92);border-bottom:1px solid var(--line);
  backdrop-filter:blur(8px)}
.tabs{display:flex;gap:6px;overflow-x:auto;flex:1;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{background:transparent;border:0;padding:8px 12px;border-radius:9px;color:var(--muted);white-space:nowrap}
.tabs button.active{background:#1d2330;color:var(--fg)}
main{padding:16px;display:flex;flex-direction:column;gap:var(--gap);max-width:1280px;margin:0 auto}
.grid{display:grid;gap:var(--gap)}
.status-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.controls{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px}
.card.stat b{display:block;font-size:1.35rem;margin:4px 0 2px;line-height:1.15}
.card.stat .label{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.row{display:flex;gap:8px;align-items:center}
.row.wrap{flex-wrap:wrap}
.row.inline{display:inline-flex;float:right;gap:6px}
.row>label{flex:1;min-width:130px}
.row>select,.row>input[type=text]{flex:1;min-width:0}
.slider{margin-top:12px}

/* midia */
.dropzone{border:2px dashed var(--line);border-radius:var(--radius);padding:26px;text-align:center;
  cursor:pointer;transition:border-color .15s,background .15s}
.dropzone:hover,.dropzone.over{border-color:var(--accent);background:#1d1417}
.dropzone p{margin:0 0 6px}
.upload-opts{margin-top:12px}
.up{display:flex;flex-direction:column;gap:6px;margin-top:12px;font-size:.85rem}
.bar{height:8px;background:#0b0e14;border-radius:6px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent2);width:100%;
  transform:scaleX(0);transform-origin:left;transition:transform .2s}
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:.85rem}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
th{color:var(--muted);font-weight:500;font-size:.75rem;text-transform:uppercase}
td.wrap{white-space:normal}
.tag{display:inline-block;padding:2px 8px;border-radius:99px;font-size:.72rem;border:1px solid var(--line)}
.tag.ad{color:var(--warn);border-color:var(--warn)}
.tag.race{color:var(--accent);border-color:var(--accent)}
.tag.video{color:var(--accent2);border-color:var(--accent2)}
.picker{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.picker label{flex-direction:row;align-items:center;gap:6px;background:#1d2330;border:1px solid var(--line);
  border-radius:99px;padding:6px 12px;color:var(--fg);font-size:.85rem;cursor:pointer}

/* luna */
.chat{display:flex;flex-direction:column;gap:10px;max-height:46vh;overflow:auto;margin-bottom:12px}
.msg{padding:10px 12px;border-radius:12px;max-width:min(560px,86%);font-size:.9rem;line-height:1.45}
.msg.user{align-self:flex-end;background:#1d2330}
.msg.luna{align-self:flex-start;background:#101722;border:1px solid var(--line)}
.msg .acts{margin-top:8px;font-size:.75rem;color:var(--muted);border-top:1px dashed var(--line);padding-top:6px}
.msg .acts .ok{color:var(--ok)} .msg .acts .bad{color:var(--err)}

/* logs */
tr.ERROR td{color:#ffb4b4} tr.WARNING td{color:#ffd9a0}

/* toast */
.toast{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);background:#1d2330;
  border:1px solid var(--line);border-radius:10px;padding:11px 16px;z-index:20;max-width:92vw;font-size:.9rem}
.toast.err{border-color:var(--err);color:#ffc9c9}

@media (max-width:620px){
  .card.stat b{font-size:1.1rem}
  main{padding:12px}
  .row.inline{float:none;display:flex;margin-top:8px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

/* ---------------------------------------------------------- v0.4.0 --- */
/* fases da corrida conduzidas pelo servidor */
.phases { display:flex; flex-wrap:wrap; gap:.35rem; align-items:center; margin:.6rem 0 .2rem; }
.phase { font-size:.72rem; letter-spacing:.04em; padding:.18rem .5rem; border-radius:999px;
         border:1px solid var(--line,#2a2f3a); color:var(--muted,#8b93a7); }
.phase.now { background:var(--accent,#3b82f6); border-color:var(--accent,#3b82f6);
             color:#fff; font-weight:600; }
.phases .arrow { color:var(--muted,#8b93a7); font-size:.7rem; }

/* telemetria por dispositivo */
.device { border:1px solid var(--line,#2a2f3a); border-radius:12px; padding:.9rem 1rem;
          margin-bottom:.9rem; }
.device h3 { display:flex; align-items:center; gap:.6rem; margin:0 0 .6rem; font-size:.95rem; }
.device dl { display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr));
             gap:.25rem .9rem; margin:0; }
.device dt { font-size:.7rem; text-transform:uppercase; letter-spacing:.05em;
             color:var(--muted,#8b93a7); }
.device dd { margin:0 0 .45rem; font-variant-numeric:tabular-nums; }
.badge { font-size:.68rem; padding:.12rem .5rem; border-radius:999px; }
.badge.on { background:#16351f; color:#4ade80; }
.badge.off { background:#3a1d1d; color:#f87171; }

.ota-progress:not(:empty) { margin-top:.8rem; padding:.6rem .8rem; border-radius:10px;
                            background:var(--panel-2,#161a22); font-variant-numeric:tabular-nums; }
