/* MIPo | Modelo de dados: fluxo de ETL, data lake, modelo dimensional e métricas/linhagem (S04).
   Usa somente os tokens de tokens.css (grafite, branco gelo, vermelho rubi; tema escuro e claro). */
.mv{min-width:0;width:100%;max-width:100%}
.mv-body{min-width:0;width:100%}
.mv .sub{margin:0 0 10px;color:var(--text-2);overflow-wrap:anywhere}
.mv-view{display:grid;gap:12px;min-width:0}
.mv-toolbar{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}
.mv-toolbar .seg{max-width:100%;flex-wrap:wrap}
.mv-search{display:flex;align-items:center;gap:6px;margin-left:auto}
.mv-search label,.mv-sel label{font-size:var(--fs-xs);color:var(--text-2);font-weight:var(--fw-medium)}
.mv-search input,.mv-sel select,.mv-reason input,.mv-reason select{min-height:36px;background:var(--surface);color:var(--text);border:1px solid var(--control-border);border-radius:var(--r-sm);padding:4px 10px;font:inherit;font-size:var(--fs-sm)}
.mv-search input{min-width:220px}
.mv-sel{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px}
.mv-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,360px);gap:12px;align-items:start}
.mv-main{min-width:0;display:grid;gap:8px}
.mv-side{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);padding:12px 14px;min-width:0;overflow:auto;max-height:72vh;font-size:var(--fs-sm)}
.mv-side.inline{max-height:none;margin-top:8px}
.mv-side h3{margin:0 0 6px;font-size:var(--fs-md)}
.mv-side h4,.mv-sub h4{margin:14px 0 6px;font-size:var(--fs-sm);color:var(--text-2);font-weight:var(--fw-semibold)}
.mv-sub{display:grid;gap:8px;min-width:0}
.mv-sub h3{margin:6px 0 0;font-size:var(--fs-md);display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.mv-meta{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 8px}
.mv-meta2{font-size:var(--fs-sm);color:var(--text-2);padding:2px 2px}
.mv-deps{margin:0;padding-left:18px;display:grid;gap:3px}
.mv-vals{margin:0;padding-left:16px;font-size:var(--fs-xs)}
.mv-big{font-weight:var(--fw-bold);font-size:1.25rem;font-variant-numeric:tabular-nums}
.mv-tbl{overflow:auto;max-width:100%}
.mv-tbl .btn.text{background:none;border:0;padding:0;min-height:0;color:var(--text);font-weight:var(--fw-semibold);text-align:left;text-decoration:underline;text-underline-offset:3px}
.mv-actions{display:flex;flex-wrap:wrap;gap:8px}
.mv-reason{display:grid;gap:6px;margin-top:10px;padding:10px;border:1px solid var(--border-strong);border-radius:var(--r-md);background:var(--elevated)}
.mv-reason label{font-size:var(--fs-xs);color:var(--text-2)}
.mv-step{display:inline-block;margin:1px 2px 1px 0;padding:0 6px;border:1px solid var(--border-strong);border-radius:var(--r-sm);font-size:11.5px;font-family:var(--font-mono);color:var(--text-2);white-space:nowrap}
.mv-step.st-succeeded{border-color:var(--ok);color:var(--ok)}
.mv-step.st-failed{border-color:var(--err);color:var(--err)}
.mv-step.st-skipped{border-style:dashed}
.mv-pub{font-weight:var(--fw-semibold)}
.mv-pub.p-publicado{color:var(--ok)}.mv-pub.p-invalidado,.mv-pub.p-bloqueado{color:var(--warn)}.mv-pub.p-substituido{color:var(--text-3)}

/* estados: sempre com glifo e texto, nunca só cor */
.mv-state{display:inline-flex;align-items:center;gap:5px;padding:1px 9px;border-radius:var(--r-pill);border:1px solid var(--border-strong);font-size:12px;font-weight:var(--fw-semibold);color:var(--text);background:var(--elevated);white-space:nowrap}
.mv-state i{font-style:normal;font-size:11px}
.mv-state.st-publicado{border-color:var(--ok);background:var(--ok-soft);color:var(--ok)}
.mv-state.st-executado{border-color:var(--info);background:var(--info-soft);color:var(--info)}
.mv-state.st-em_execucao{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-hi)}
.mv-state.st-falhou{border-color:var(--err);background:var(--err-soft);color:var(--err)}
.mv-state.st-defasado,.mv-state.st-aguardando_fonte{border-color:var(--warn);background:var(--warn-soft);color:var(--warn)}
.mv-state.st-implementado{border-color:var(--unknown);background:var(--unknown-bg);color:var(--text-2);border-style:dashed}
.mv-legend{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;padding:6px 2px;color:var(--text-2);font-size:12px}
.mv-edge-key svg{width:34px;height:8px;vertical-align:middle;margin-right:5px}

/* diagramas */
.mv-canvas{position:relative;border:1px solid var(--border);border-radius:var(--r-md);background-color:var(--surface);background-image:radial-gradient(var(--grid) 1px,transparent 1px);background-size:18px 18px;overflow:hidden;height:min(74vh,760px);cursor:grab}
.mv-canvas.short{height:min(40vh,300px)}
.mv-canvas.panning{cursor:grabbing}
.mv-canvas:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.mv-svg{width:100%;height:100%;display:block;touch-action:none;user-select:none}
.mv-zoom{position:absolute;right:8px;top:8px;display:flex;gap:4px;z-index:2}
.mv-zbtn{min-width:36px;min-height:36px;padding:0;font-size:16px;line-height:1}
.mv-lane{fill:none;stroke:var(--border)}
.mv-lane-t{fill:var(--text-3);font:600 11.5px var(--font-mono)}
.mv-edge{fill:none;stroke:var(--text-3);stroke-width:1.4}
.mv-edge.e-carga{stroke:var(--info);stroke-dasharray:2 3}
.mv-edge.e-publicacao{stroke:var(--ok);stroke-dasharray:5 3}
.mv-edge.e-grava{stroke:var(--border-strong)}
.mv-edge.e-dependencia{stroke:var(--accent-hi);stroke-dasharray:7 4;stroke-width:1.6}
.mv-edge.dim{opacity:.18}
.mv-arrow{fill:var(--text-3)}
.mv-node{cursor:pointer}
.mv-node rect.mv-base{fill:var(--surface);stroke:none}
.mv-node rect{fill:var(--elevated);stroke:var(--border-strong);stroke-width:1.2;transition:stroke var(--dur-1) var(--ease)}
.mv-node.st-publicado rect{stroke:var(--ok);fill:var(--ok-soft)}
.mv-node.st-executado rect{stroke:var(--info);fill:var(--info-soft)}
.mv-node.st-em_execucao rect{stroke:var(--accent);fill:var(--accent-soft)}
.mv-node.st-falhou rect{stroke:var(--err);fill:var(--err-soft)}
.mv-node.st-defasado rect,.mv-node.st-aguardando_fonte rect{stroke:var(--warn);fill:var(--warn-soft);stroke-dasharray:5 3}
.mv-node.st-implementado rect{stroke:var(--unknown);fill:var(--unknown-bg);stroke-dasharray:2 3}
.mv-node.sel rect{stroke:var(--accent-hi);stroke-width:2.6}
.mv-node.match rect{stroke:var(--accent-hi);stroke-width:2.4}
.mv-node.dim{opacity:.25}
.mv-node:focus{outline:none}
.mv-node:focus rect{stroke:var(--focus);stroke-width:3}
.mv-node .nt{fill:var(--text);font:600 13px var(--font-sans)}
.mv-node .nt.big{font-size:15px}
.mv-node .ns{fill:var(--text-2);font:11.5px var(--font-sans)}
text.ns{fill:var(--text-2);font:11.5px var(--font-sans)}
text.mv-ct{fill:var(--text-3);font:11px var(--font-mono)}
.mv-svg .nt,.mv-svg .ns{pointer-events:none}

/* cartões do lake */
.mv-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.mv-card{text-align:left;background:var(--elevated);border:1px solid var(--border);border-left:4px solid var(--unknown);border-radius:var(--r-md);padding:10px 12px;display:grid;gap:3px;color:var(--text);cursor:pointer;min-height:44px;font:inherit;font-size:var(--fs-sm)}
.mv-card.layer-bronze{border-left-color:var(--s5)}.mv-card.layer-silver{border-left-color:var(--s6)}.mv-card.layer-gold{border-left-color:var(--s3)}
.mv-card.sel{border-color:var(--accent);box-shadow:var(--shadow-glow)}
.mv-card:hover{border-color:var(--border-strong)}
.mv-card:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.mv-card small{font-weight:var(--fw-regular);color:var(--text-2)}

@media (max-width:1180px){
 .mv-split{grid-template-columns:minmax(0,1fr)}
 .mv-side{max-height:none}
 .mv-search{margin-left:0}
}
@media (max-width:700px),(pointer:coarse){
 .mv-zbtn{min-width:44px;min-height:44px}
 .mv-canvas{height:min(54vh,420px)}
 .mv-search input{min-width:0;width:100%;flex:1}
 .mv-search{width:100%}
 .mv-meta2,.mv-side{overflow-wrap:anywhere}
}
@media print{
 .mv-zoom,.mv-toolbar,.mv-actions,.mv-reason{display:none!important}
 .mv-canvas{height:auto;border:0;background:none;overflow:visible}
 .mv-side{max-height:none;overflow:visible}
}
