:root{
  --verde:#33d69f; --verde-esc:#28b98a; --verde-grad1:#3ddba6; --verde-grad2:#2bbf8f;
  --fundo:#eef1f4; --branco:#ffffff; --tinta:#1f2a37; --cinza:#8a97a6;
  --cinza-cl:#f4f6f8; --borda:#eef0f3; --vermelho:#ff6b6b; --amarelo:#ffb23f;
  --azul:#4c9bff; --sombra:0 12px 30px rgba(31,42,55,.06);
  --raio:18px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:'Segoe UI',system-ui,-apple-system,Roboto,sans-serif;
  background:var(--fundo); color:var(--tinta); line-height:1.45;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none}
input{font-family:inherit}

/* ---------- telas de acesso (login/setup) ---------- */
.acesso{min-height:100vh;display:grid;place-items:center;padding:24px;
  background:linear-gradient(135deg,#e9fbf4,#eef1f4 55%)}
.cartao-acesso{background:var(--branco);width:100%;max-width:400px;
  border-radius:24px;padding:40px 36px;box-shadow:var(--sombra)}
.cartao-acesso .marca{display:flex;align-items:center;gap:10px;margin-bottom:26px}
.cartao-acesso h1{font-size:22px;margin-bottom:6px}
.cartao-acesso p.sub{color:var(--cinza);font-size:14px;margin-bottom:24px}
.campo{margin-bottom:16px}
.campo label{display:block;font-size:13px;color:var(--cinza);margin-bottom:6px}
.campo input{width:100%;padding:13px 15px;border-radius:12px;border:1.5px solid var(--borda);
  background:var(--cinza-cl);font-size:15px;transition:.15s}
.campo input:focus{outline:none;border-color:var(--verde);background:#fff}
.btn-primario{width:100%;padding:13px;border-radius:12px;background:var(--verde);
  color:#fff;font-weight:600;font-size:15px;transition:.15s;
  box-shadow:0 8px 18px rgba(51,214,159,.35)}
.btn-primario:hover{background:var(--verde-esc)}
.erro{background:#fff0f0;color:#d64545;padding:10px 14px;border-radius:10px;
  font-size:13px;margin-bottom:16px}

/* ---------- marca / logo ---------- */
.logo{width:38px;height:38px;border-radius:12px;flex:0 0 auto;
  background:linear-gradient(135deg,var(--verde-grad1),var(--verde-grad2));
  display:grid;place-items:center;color:#fff}
.marca .nome{font-size:19px;font-weight:700;letter-spacing:-.3px}

/* ---------- layout do painel ---------- */
.app{display:grid;grid-template-columns:74px 1fr 300px;gap:18px;
  padding:18px;min-height:100vh;max-width:1440px;margin:0 auto}
@media(max-width:1100px){.app{grid-template-columns:74px 1fr}.rail-dir{display:none}}
@media(max-width:720px){.app{grid-template-columns:1fr}.rail-esq{display:none}}

/* trilho de icones */
.rail-esq{background:linear-gradient(180deg,var(--verde-grad1),var(--verde-grad2));
  border-radius:26px;display:flex;flex-direction:column;align-items:center;
  padding:22px 0;gap:8px}
.rail-esq .ico{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;
  color:#eafff7;opacity:.8;transition:.15s}
.rail-esq .ico:hover{background:rgba(255,255,255,.18);opacity:1}
.rail-esq .ico.ativo{background:#fff;color:var(--verde-esc);opacity:1;
  box-shadow:0 6px 14px rgba(0,0,0,.12)}
.rail-esq .sep{flex:1}

/* coluna central */
.centro{background:var(--branco);border-radius:26px;padding:26px 28px;box-shadow:var(--sombra);
  min-height:calc(100vh - 36px)}
.busca{display:flex;align-items:center;gap:10px;background:var(--cinza-cl);
  border-radius:14px;padding:12px 16px;margin-bottom:26px}
.busca input{flex:1;border:none;background:none;font-size:15px}
.busca input:focus{outline:none}
.busca .lupa{color:var(--cinza)}

.titulo-secao{display:flex;align-items:center;justify-content:space-between;margin:26px 0 14px}
.titulo-secao h2{font-size:16px;font-weight:700}
.titulo-secao a{font-size:13px;color:var(--verde-esc);font-weight:600}

/* grade de maquinas */
.grade{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:16px}
.card-maq{background:var(--branco);border:1.5px solid var(--borda);border-radius:var(--raio);
  padding:18px;transition:.18s;position:relative;overflow:hidden}
.card-maq:hover{box-shadow:var(--sombra);transform:translateY(-2px);border-color:transparent}
.card-maq .top{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.card-maq .icone{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;
  background:#eafaf3;color:var(--verde-esc)}
.pino{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;
  padding:5px 10px;border-radius:20px}
.pino.on{background:#e8faf1;color:#18a86b}
.pino.off{background:#f2f4f6;color:#9aa6b2}
.pino .bolinha{width:7px;height:7px;border-radius:50%;background:currentColor}
.card-maq h3{font-size:15px;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card-maq .meta{font-size:12.5px;color:var(--cinza);margin-bottom:16px;min-height:18px}
.card-maq .acoes{display:flex;gap:8px}
.btn-conectar{flex:1;padding:10px;border-radius:11px;background:var(--verde);color:#fff;
  font-weight:600;font-size:13.5px;transition:.15s}
.btn-conectar:hover{background:var(--verde-esc)}
.btn-conectar:disabled{background:#d7dde3;cursor:not-allowed;box-shadow:none}
.btn-icone{width:40px;height:40px;border-radius:11px;background:var(--cinza-cl);
  color:var(--cinza);display:grid;place-items:center;transition:.15s}
.btn-icone:hover{background:#e9edf1;color:var(--tinta)}

.vazio{text-align:center;color:var(--cinza);padding:50px 20px;font-size:14px}

/* coluna direita */
.rail-dir{display:flex;flex-direction:column;gap:18px}
.painel-dir{background:var(--branco);border-radius:26px;padding:22px;box-shadow:var(--sombra)}
.saudacao{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}
.saudacao .oi{font-size:15px;font-weight:600}
.avatar{width:40px;height:40px;border-radius:50%;
  background:linear-gradient(135deg,var(--verde-grad1),var(--verde-grad2));
  color:#fff;display:grid;place-items:center;font-weight:700}

/* medidor */
.medidor{display:grid;place-items:center;margin:6px 0 20px}
.medidor svg{width:180px;height:110px}
.medidor .num{font-size:30px;font-weight:800;margin-top:-42px}
.medidor .cap{font-size:12.5px;color:var(--cinza);margin-top:44px}

.linha-stat{display:flex;align-items:center;gap:12px;padding:11px 0;border-top:1px solid var(--borda)}
.linha-stat .ic{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;flex:0 0 auto}
.linha-stat .txt{flex:1}
.linha-stat .txt b{display:block;font-size:14px}
.linha-stat .txt span{font-size:12px;color:var(--cinza)}
.linha-stat .val{font-weight:700;font-size:14px}

.cta{margin-top:18px;background:linear-gradient(135deg,#eafaf3,#e5f6ff);
  border-radius:18px;padding:20px;text-align:center}
.cta h4{font-size:15px;margin-bottom:4px}
.cta p{font-size:12.5px;color:var(--cinza);margin-bottom:14px}
.cta button{width:100%;padding:11px;border-radius:11px;background:var(--verde);color:#fff;font-weight:600}
.cta button:hover{background:var(--verde-esc)}

/* ---------- modal ---------- */
.modal-fundo{position:fixed;inset:0;background:rgba(31,42,55,.45);display:none;
  place-items:center;z-index:50;padding:20px;backdrop-filter:blur(2px)}
.modal-fundo.aberto{display:grid}
.modal{background:#fff;border-radius:22px;padding:30px;width:100%;max-width:440px;
  box-shadow:0 24px 60px rgba(0,0,0,.25)}
.modal h3{font-size:19px;margin-bottom:6px}
.modal p.sub{color:var(--cinza);font-size:13.5px;margin-bottom:20px}
.modal .campo input{background:#fff}
.modal .rodape{display:flex;gap:10px;margin-top:22px}
.btn-secundario{flex:1;padding:12px;border-radius:12px;background:var(--cinza-cl);
  color:var(--tinta);font-weight:600}
.btn-secundario:hover{background:#e9edf1}
.modal .btn-primario{flex:1}
.instrucao{background:var(--cinza-cl);border-radius:12px;padding:14px;margin-top:8px;
  font-size:12.5px;font-family:'Consolas',monospace;word-break:break-all;color:#374151}
.instrucao .rot{font-family:'Segoe UI',sans-serif;color:var(--cinza);
  display:block;margin-bottom:3px;font-size:11px;text-transform:uppercase;letter-spacing:.5px}
.instrucao b{color:var(--verde-esc)}
.copiar{margin-top:6px;font-size:12px;color:var(--verde-esc);font-weight:600;background:none}

/* ---------- toast ---------- */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(80px);
  background:var(--tinta);color:#fff;padding:13px 22px;border-radius:12px;font-size:14px;
  opacity:0;transition:.3s;z-index:100;box-shadow:0 10px 30px rgba(0,0,0,.2)}
.toast.ver{transform:translateX(-50%) translateY(0);opacity:1}

/* ---------- pagina de sessao (viewer) ---------- */
.sessao-topo{display:flex;align-items:center;gap:14px;padding:12px 20px;background:#fff;
  border-bottom:1px solid var(--borda)}
.sessao-topo .voltar{width:38px;height:38px;border-radius:11px;background:var(--cinza-cl);
  display:grid;place-items:center;color:var(--tinta)}
.sessao-topo .voltar:hover{background:#e9edf1}
.sessao-topo h1{font-size:16px;flex:1}
.sessao-estado{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;
  padding:7px 14px;border-radius:20px;background:var(--cinza-cl);color:var(--cinza)}
.sessao-estado.on{background:#e8faf1;color:#18a86b}
.sessao-estado.erro{background:#fff0f0;color:#d64545}
.sessao-estado .bolinha{width:8px;height:8px;border-radius:50%;background:currentColor}
.sessao-topo .ferramenta{width:38px;height:38px;border-radius:11px;background:var(--cinza-cl);
  display:grid;place-items:center;color:var(--tinta)}
.sessao-topo .ferramenta:hover{background:#e9edf1}
.sessao-topo .ferramenta.ativa{background:var(--verde);color:#fff}
.palco{background:#0e1116;min-height:calc(100vh - 63px);display:grid;place-items:center;overflow:auto}
#tela{max-width:100%;max-height:calc(100vh - 63px);cursor:crosshair;
  box-shadow:0 0 40px rgba(0,0,0,.5);image-rendering:auto}
.aviso-conectando{color:#cbd5e1;text-align:center;font-size:15px}
.aviso-conectando .spin{width:40px;height:40px;border:3px solid rgba(255,255,255,.15);
  border-top-color:var(--verde);border-radius:50%;margin:0 auto 16px;animation:girar 1s linear infinite}
@keyframes girar{to{transform:rotate(360deg)}}

/* ---------- painel lateral de arquivos ---------- */
.drawer-arq{position:fixed;top:0;right:0;width:360px;max-width:92vw;height:100vh;
  background:#fff;box-shadow:-14px 0 40px rgba(0,0,0,.18);z-index:60;
  transform:translateX(100%);transition:transform .22s ease;
  display:flex;flex-direction:column;padding:18px 18px 10px}
.drawer-arq.aberto{transform:translateX(0)}
.drawer-topo{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.drawer-topo b{font-size:16px}
.drawer-x{width:34px;height:34px;border-radius:10px;background:var(--cinza-cl);
  color:var(--tinta);display:grid;place-items:center}
.drawer-x:hover{background:#e9edf1}
.drawer-secao{margin-bottom:16px;min-height:0}
.drawer-secao.transf{flex:1;display:flex;flex-direction:column}
.drawer-rot{display:flex;align-items:center;justify-content:space-between;
  font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--cinza);
  font-weight:700;margin-bottom:8px}
.arq-atualizar{width:26px;height:26px;border-radius:8px;background:var(--cinza-cl);
  color:var(--cinza);display:grid;place-items:center}
.arq-atualizar:hover{background:#e9edf1;color:var(--tinta)}

.arq-solta{border:2px dashed #d7dde3;border-radius:14px;padding:20px 14px;text-align:center;
  color:var(--cinza);font-size:13px;transition:.15s}
.arq-solta.sobre{border-color:var(--verde);background:#f0fbf6;color:var(--verde-esc)}
.arq-escolher{display:block;margin:8px auto 0;padding:8px 16px;border-radius:10px;
  background:var(--verde);color:#fff;font-weight:600;font-size:13px}
.arq-escolher:hover{background:var(--verde-esc)}

.arq-caminho{font-family:'Consolas',monospace;font-size:11.5px;color:#6b7684;
  background:var(--cinza-cl);border-radius:8px;padding:7px 10px;margin-bottom:8px;
  word-break:break-all;max-height:52px;overflow:auto}
.arq-remota{max-height:34vh;overflow:auto;border:1px solid var(--borda);border-radius:12px}
.arq-item{display:flex;align-items:center;gap:9px;padding:9px 11px;font-size:13.5px;
  cursor:pointer;border-bottom:1px solid var(--borda)}
.arq-item:last-child{border-bottom:none}
.arq-item:hover{background:var(--cinza-cl)}
.arq-item span{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.arq-item em{font-style:normal;font-size:11.5px;color:var(--cinza)}
.arq-item.pasta{color:var(--verde-esc)}
.arq-item.arquivo{color:var(--tinta)}
.arq-erro{padding:12px;font-size:13px;color:var(--vermelho)}

.lista-transf{flex:1;overflow:auto;display:flex;flex-direction:column;gap:8px}
.arq-prog{background:var(--cinza-cl);border-radius:11px;padding:9px 11px}
.arq-prog.feito{opacity:.6}
.arq-nome{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;margin-bottom:5px}
.arq-barra{height:6px;background:#dfe4e9;border-radius:4px;overflow:hidden}
.arq-barra i{display:block;height:100%;width:0;background:var(--verde);
  border-radius:4px;transition:width .15s}
.arq-pct{font-size:11px;color:var(--cinza);margin-top:4px;text-align:right}
