/* Desenvolvimento (dev.js): scheduler e apps instalados. Prefixo dv. */
.dv-log { margin: 0; padding: 12px 14px; border-radius: 8px; background: #0f172a; color: #e2e8f0; font: 12px/1.55 ui-monospace, "Cascadia Code", Consolas, monospace; white-space: pre-wrap; word-break: break-word; max-height: 420px; overflow: auto; }
/* sandbox: roxo, para nunca ser confundido com HML (âmbar) nem PRD (vermelho) */
.amb-selo.sbx { background: #f3e8ff; color: #6b21a8; border: 1px solid #d8b4fe; }
body.amb-sbx .trilha { box-shadow: inset 0 3px 0 #9333ea; }
.amb-card.sbx { border-left-color: #9333ea; }
/* desenvolvimento: verde */
.amb-selo.dev { background: #dcfce7; color: #166534; border: 1px solid #86efac; }
body.amb-dev .trilha { box-shadow: inset 0 3px 0 #16a34a; }
.amb-card.dev { border-left-color: #16a34a; }
.dv-sbx-tipos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 6px 0 12px; }
.dv-sbx-tipo { border: 1px solid var(--line); border-radius: 8px; padding: 12px; cursor: pointer; display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--ink-3); }
.dv-sbx-tipo b { color: var(--ink); font-size: 13px; }
.dv-sbx-tipo.on { border-color: var(--brand); box-shadow: 0 0 0 2px var(--brand-soft); }
.dv-sbx-tipo input { display: none; }
.dv-passos { margin: 6px 0 0; padding: 0; list-style: none; font-size: 11.5px; max-height: 220px; overflow: auto; }
.dv-passos li { padding: 3px 0; color: var(--ink-2); display: flex; gap: 8px; }
.dv-passos li span { color: var(--ink-4); font-family: ui-monospace, Consolas, monospace; }
.dv-passos li.erro { color: var(--erro); }
.dv-passos li.aviso { color: #b45309; }
@media (max-width: 760px) { .dv-sbx-tipos { grid-template-columns: 1fr; } }
/* mapa de chamadas */
.dvf { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 12px; align-items: start; }
.dvf-tela { overflow: auto; padding: 8px; }
.dvf-tela svg { display: block; }
.dvf-lado { padding: 12px 14px; position: sticky; top: 10px; max-height: calc(100vh - 40px); overflow: auto; }
.dvf-lado h4 { margin: 0 0 4px; font-size: 13px; }
.dvf-col { font-size: 10px; font-weight: 700; letter-spacing: .06em; fill: var(--ink-4); }
.dvf-no { cursor: pointer; }
.dvf-no rect { fill: #fff; stroke: var(--line); stroke-width: 1.2; }
.dvf-no:hover rect, .dvf-no.sel rect { stroke: var(--brand); stroke-width: 2; }
.dvf-no .st { fill: var(--ink-4); }
.dvf-no.ok .st { fill: #22c55e; } .dvf-no.alerta .st { fill: #f59e0b; } .dvf-no.erro .st { fill: var(--erro); } .dvf-no.zero .st { fill: #cbd5e1; }
.dvf-no.erro rect { stroke: #fca5a5; } .dvf-no.zero rect { stroke-dasharray: 4 3; }
.dvf-no.externo rect { fill: #f8fafc; }
.dvf-tx { font: 12px/1.3 Inter, "Segoe UI", system-ui, sans-serif; color: var(--ink); display: flex; flex-direction: column; gap: 2px; overflow: hidden; }
.dvf-tx b { display: flex; align-items: center; gap: 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 12px; }
.dvf-tx span { font-size: 10.5px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dvf-seta { cursor: pointer; }
.dvf-rot { font-size: 10.5px; font-weight: 600; fill: var(--ink-2); paint-order: stroke; stroke: #fff; stroke-width: 3px; }
.dvf-rot.parado { fill: var(--ink-4); font-weight: 400; }
.dvf-leg { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; font-size: 11.5px; color: var(--ink-3); margin-top: 8px; }
.dvf-leg i { display: inline-block; width: 18px; height: 3px; border-radius: 2px; vertical-align: middle; margin-right: 5px; }
.dvf-leg i.tr { background: repeating-linear-gradient(90deg, #94a3b8 0 5px, transparent 5px 9px); }
.dvf-leg i.ap { background: #3b82f6; opacity: .25; }
.dvf-leg .conta { margin-left: auto; }
@media (max-width: 1100px) { .dvf { grid-template-columns: 1fr; } .dvf-lado { position: static; } }
/* infraestrutura */
.dvi-maqs { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.dvi-maq { background: #fff; border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; }
.dvi-maq.falha { border-color: #fecaca; }
.dvi-maq-topo { display: flex; align-items: center; gap: 10px; }
.dvi-maq-topo > div { flex: 1; display: flex; flex-direction: column; }
.dvi-maq-topo .mono { font-size: 11px; color: var(--ink-3); }
.dvi-maq-ic { width: 32px; height: 32px; border-radius: 8px; background: var(--brand-soft); color: var(--brand); display: grid; place-items: center; }
.dvi-maq p { margin: 0; }
.dvi-uso { display: grid; grid-template-columns: 1fr; gap: 3px; font-size: 11.5px; color: var(--ink-3); }
.dvi-uso b { color: var(--ink); }
.dvi-consol { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 8px; }
.dvi-papeis { display: flex; flex-wrap: wrap; gap: 4px 6px; align-items: center; }
.dvi-pares { margin: 6px 0 0; padding-left: 18px; font-size: 11.5px; color: var(--ink-3); }
.dvi-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 0 12px; }
.dvi-checks { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 12px; margin-bottom: 10px; }
.dvi-checks .chk { display: flex; gap: 6px; align-items: baseline; font-size: 12.5px; cursor: pointer; }
@media (max-width: 640px) { .dvi-2col, .dvi-checks { grid-template-columns: 1fr; } }
.dvi-barra { height: 6px; border-radius: 999px; background: var(--line-soft, #f1f3f5); overflow: hidden; margin-bottom: 4px; }
.dvi-barra i { display: block; height: 100%; border-radius: 999px; }
.dvi-cont { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; font-size: 11.5px; }
.dvi-cont li { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.dvi-cont em { font-style: normal; color: var(--ink-4); margin-left: auto; }
.dvi-cont i, .dvi-reps i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; background: var(--ink-4); }
.dvi-cont i.ok, .dvi-reps i.ok { background: #22c55e; }
.dvi-cont i.alerta { background: #f59e0b; }
.dvi-cont i.erro, .dvi-reps i.erro { background: var(--erro); }
.dvi-reps { display: flex; gap: 4px; }
.dvi-reps i { width: 14px; height: 14px; border-radius: 4px; }
.contadores.dv-4 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 760px) { .contadores.dv-4 { grid-template-columns: repeat(2, 1fr); } }
tr.inativo td { color: var(--ink-3); }
tr.inativo td b { color: var(--ink-2); }

/* modelo de produto: checklist de prontidão (Promover, em Versões e esteira) */
.prm-lista{display:flex;flex-direction:column;gap:6px;max-height:260px;overflow:auto}
.prm-item{display:flex;gap:8px;align-items:flex-start;border:1px solid var(--line);border-radius:6px;padding:7px 10px;font-size:12.5px}
.prm-item div{display:flex;flex-direction:column;gap:2px}
.prm-item div span{font-size:11.5px;color:var(--ink-3)}
.prm-item.ok{border-color:#bbf7d0;background:#f0fdf4}.prm-item.ok svg{color:#15803d}
.prm-item.falta{border-color:#fecaca;background:#fef2f2}.prm-item.falta svg{color:#dc2626}
.prm-item.aviso{border-color:#fde68a;background:#fffbeb}.prm-item.aviso svg{color:#b45309}