/* Mapa de publicações no estilo de dispersão: nós vazados, rótulos curtos e
   setas discretas. Vale para Explorar literatura, Grafo de referências e os
   mapas de biblioteca e de autor.
   FIGURA: nós, arestas, rótulos e eixos têm cores próprias e o quadro continua
   claro nos dois temas, como o Canvas da rede (mapTheme em citation_map.mjs) e o
   PNG exportado, que copia os estilos calculados do SVG. Por isso a moldura
   declara fundo claro e texto escuro juntos. Legenda, controles e rótulo do
   cursor são interface sobre a figura e usam os tokens globais. */
:root{--cm-bg:#f7f8fa;--cm-paper:#fff;--cm-node:#17191e;--cm-label:#363b47;--cm-edge:#acb8c6;--cm-axis:#b6bfca;--cm-focus:#167884;--cm-hover:#bbe3e6;--cm-highlight:#d9eff1;--cm-muted:#646d7c}
.cm-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* Quadro: coluna com a faixa da legenda no topo e a figura abaixo. Controles,
   eixos e atalhos continuam sobrepostos e ancorados embaixo, junto da figura;
   o rótulo do cursor e o recorte do PNG medem a caixa da própria figura. */
.ex-map-frame,.cm-frame{position:relative;display:flex;flex-direction:column;border-radius:var(--radius-card);overflow:hidden;background:var(--cm-bg);color:var(--cm-label);isolation:isolate}
.ex-map-frame[hidden],.cm-frame[hidden]{display:none}
.ex-map-frame .ex-svg,.cm-frame .cm-svg{display:block;width:100%;height:auto;background:transparent;user-select:none;touch-action:none}
.ex-map-frame .ex-background,.cm-background{fill:transparent}
.ex-focus-mode .ex-map{background:var(--surface)}
.ex-map-frame .ex-force-graph{border:0;border-radius:0;background:transparent}
.ex-map-frame .ex-force-canvas canvas{border-radius:0}

/* Arestas: cinza-azulado fino; em foco, teal e mais espessa */
.ex-map-frame .ex-edges line,.cm-edge{stroke:var(--cm-edge);stroke-width:1;stroke-opacity:1;opacity:1;vector-effect:non-scaling-stroke;stroke-dasharray:none;animation:none;transition:opacity var(--t-fast) var(--ease-out),stroke var(--t-fast) var(--ease-out)}
.ex-map-frame .ex-svg.animations-enabled .ex-edges line{stroke-dasharray:none;animation:none}
.ex-map-frame .ex-edges line.is-receded,.cm-edge.is-receded{opacity:.25}
.ex-map-frame .ex-edges line.is-focus,.ex-map-frame .ex-edges line.is-neighbor{stroke:var(--cm-focus);stroke-width:2;opacity:1;marker-end:url(#exploration-arrow-focus)}
.cm-edge.is-focus{stroke:var(--cm-focus);stroke-width:2;opacity:1}
.ex-map-frame .ex-edges line.is-dimmed{stroke:var(--cm-edge);stroke-width:1;opacity:.25;marker-end:url(#exploration-arrow)}
.ex-map-frame .ex-edges line:focus-visible{stroke:var(--cm-focus);outline:none}

/* Nós: círculo vazado com contorno escuro; semente preenchida.
   As regras do Grafo de referências passam por .cm-frame .cm-node para vencer
   as regras genéricas .ex-node circle de exploration.css (os nós recebem também
   a classe ex-node), senão os resultados aparecem preenchidos e a legenda mente. */
.ex-map-frame .ex-node,.cm-node{cursor:pointer;transition:opacity var(--t-fast) var(--ease-out)}
.ex-map-frame .ex-node>.ex-node-body,.cm-frame .cm-node .cm-node-body{fill:var(--cm-bg);stroke:var(--cm-node);stroke-width:2;vector-effect:non-scaling-stroke}
.ex-map-frame .ex-node.is-seed>.ex-node-body,.cm-frame .cm-node.is-seed .cm-node-body{fill:var(--cm-node);stroke:var(--cm-node)}
.ex-map-frame .ex-node.is-selected>.ex-node-body,.ex-map-frame .ex-node.is-inspected>.ex-node-body,.ex-map-frame .ex-node.is-selected.is-inspected>.ex-node-body{stroke:var(--cm-node);stroke-width:2}
.ex-map-frame .ex-node.is-inspected>.ex-node-body,.cm-frame .cm-node.is-inspected .cm-node-body{fill:var(--cm-hover)}
.ex-map-frame .ex-node.is-missing>.ex-node-body{stroke-dasharray:4 3}
.ex-map-frame .ex-node:hover circle,.ex-map-frame .ex-node:focus circle,.ex-map-frame .ex-node.is-neighbor circle{stroke-width:2}
.ex-map-frame .ex-node:focus-visible circle,.cm-frame .cm-node:focus-visible .cm-node-body{outline:none}
.ex-map-frame .ex-seed-mark,.cm-seed-glyph{fill:var(--cm-paper);pointer-events:none}
.ex-map-frame .ex-node.is-seed.is-selected .ex-seed-mark{display:none}
.ex-map-frame .ex-node-check{fill:none;stroke:var(--cm-node);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none}
.ex-map-frame .ex-node.is-seed .ex-node-check{stroke:var(--cm-paper)}
/* Anéis: teal claro para o artigo inspecionado e para o cursor. O foco de
   teclado usa o teal forte (4,9:1 sobre o quadro), nunca só o brilho claro. */
.ex-map-frame .ex-node-halo,.ex-map-frame .ex-node-glow,.ex-node-halo,.ex-node-glow{fill:transparent;stroke:none;vector-effect:non-scaling-stroke}
.ex-map-frame .ex-node-glow,.ex-node-glow{fill:none;pointer-events:none}
.ex-map-frame .ex-node.is-inspected>.ex-node-halo{fill:var(--cm-hover)}
.ex-map-frame .ex-node.is-hovered>.ex-node-halo{stroke:var(--cm-hover);stroke-width:2}
.ex-map-frame .ex-node:focus-visible>.ex-node-halo{stroke:var(--cm-focus);stroke-width:2.5}
.ex-map-frame .ex-node.is-hovered>.ex-node-glow,.ex-map-frame .ex-node:focus-visible>.ex-node-glow{stroke:var(--cm-highlight);stroke-width:4}
.cm-frame .cm-node.is-hovered .cm-node-body{filter:drop-shadow(0 0 3px var(--cm-hover))}
/* O nó do Grafo não tem anel próprio: o contorno do grupo marca o foco. */
.cm-frame .cm-node:focus-visible{outline:2px solid var(--cm-focus);outline-offset:3px}

/* Recuo: fora do foco ficam quase transparentes e sem rótulo */
.ex-map-frame .ex-node.is-receded,.cm-node.is-receded{opacity:.1}
.ex-map-frame .ex-node.is-neighbor,.ex-map-frame .ex-node.is-focus-neighbor:not(.is-dimmed){opacity:1}
.ex-map-frame .ex-node.is-dimmed{opacity:.1}

/* Rótulos: sobrenome e ano, cinza-escuro com halo da cor do quadro */
.ex-map-frame .ex-node-label,.cm-label{display:none;font-size:12.5px;font-weight:400;fill:var(--cm-label);stroke:var(--cm-bg);stroke-width:3px;stroke-linejoin:round;paint-order:stroke;pointer-events:none;letter-spacing:.01em}
.ex-map-frame .ex-node-label.is-visible,.cm-label.is-visible{display:block}
.ex-map-frame .ex-node.is-neighbor .ex-node-label,.cm-node.is-neighbor .cm-label{display:block;font-weight:600}
.ex-map-frame .ex-node.is-focus-neighbor .ex-node-label{font-weight:600}
.ex-map-frame .ex-node.is-inspected .ex-node-label,.cm-node.is-inspected .cm-label{display:block;font-weight:600;font-size:14px}
.ex-map-frame .ex-node.is-receded .ex-node-label,.ex-map-frame .ex-node.is-dimmed .ex-node-label,.cm-node.is-receded .cm-label,.ex-map-frame .ex-node.is-hovered .ex-node-label,.cm-node.is-hovered .cm-label{display:none}
.ex-map-frame .ex-node.is-receded.is-neighbor .ex-node-label{display:block}

/* Eixos discretos nas bordas */
.ex-map-frame .ex-axis{stroke:var(--cm-axis);stroke-width:1;fill:none;vector-effect:non-scaling-stroke}
.ex-map-frame .ex-axis-label{font-size:12px;fill:var(--cm-muted)}

/* Legenda em faixa própria no topo do quadro (order:-1, antes da figura), à
   direita. Não cobre o canto superior direito, onde a dispersão põe os artigos
   mais recentes e mais citados. Interface com fundo próprio, legível no tema
   escuro sobre o quadro claro. */
.cm-legend{position:relative;z-index:3;order:-1;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:4px;padding:8px 10px 2px;font-size:12px;color:var(--ink-2);pointer-events:auto}
.paper-explorer .cm-legend-item,.cm-legend-item{display:inline-flex;align-items:center;gap:6px;min-height:0;margin:0;border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in oklch,var(--surface) 90%,transparent);color:inherit;padding:4px 9px;font:inherit;font-size:12px;font-weight:500;cursor:help;line-height:1.2;transition:background-color var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out)}
.paper-explorer .cm-legend-item:hover,.cm-legend-item:hover,.paper-explorer .cm-legend-item:focus-visible,.cm-legend-item:focus-visible{background:var(--green-wash);border-color:var(--green-line);color:var(--ink)}
.paper-explorer .cm-legend-item:focus-visible,.cm-legend-item:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.cm-legend-icon{display:inline-grid;place-items:center;width:11px;height:11px;border-radius:50%;box-sizing:border-box;font-size:12px;line-height:1}
.cm-legend-references{width:auto;height:auto;border-radius:0;color:inherit}
/* Ícones em currentColor: semente cheia com miolo, resultado vazado. */
.cm-legend-seeds{background:radial-gradient(circle,var(--surface) 0 1.5px,currentColor 2px)}
.cm-legend-results{border:1.6px solid currentColor}
.cm-legend-selected{border:1.6px solid currentColor;font-size:8px;font-weight:700}

/* Controles flutuantes no canto inferior direito */
.cm-controls{position:absolute;right:10px;bottom:10px;z-index:3;display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border:1px solid var(--line);border-radius:var(--radius-card);background:color-mix(in oklch,var(--surface) 88%,transparent);backdrop-filter:blur(6px);box-shadow:var(--shadow-sm)}
.ex-graph-tools.cm-controls,.ex-focus-mode .ex-graph-tools.cm-controls{flex-wrap:nowrap;padding:3px;border:1px solid var(--line)}
.ex-graph-tools.cm-controls .ex-selection-tools,.ex-graph-tools.cm-controls .ex-actions{display:flex;flex-direction:column;flex-wrap:nowrap;gap:2px}
.ex-graph-tools.cm-controls .ex-actions{padding-top:3px;margin-top:1px;border-top:1px solid var(--line)}
.paper-explorer .cm-control,.cm-control{display:grid;place-items:center;width:34px;height:34px;min-height:0;margin:0;padding:0;border:0;border-radius:var(--radius);background:transparent;color:var(--ink-2);cursor:pointer;font-size:16px;transition:background-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),transform var(--t-fast) var(--ease-out)}
.paper-explorer .cm-control:hover:not(:disabled,[aria-pressed="true"]),.cm-control:hover:not(:disabled,[aria-pressed="true"]){background:var(--surface-3);color:var(--ink)}
.paper-explorer .cm-control[aria-pressed="true"],.cm-control[aria-pressed="true"]{background:var(--green);color:var(--on-accent)}
.paper-explorer .cm-control:active:not(:disabled),.cm-control:active:not(:disabled){transform:scale(.97)}
.paper-explorer .cm-control:focus-visible,.cm-control:focus-visible{outline:2px solid var(--focus);outline-offset:1px}
.paper-explorer .cm-control:disabled,.cm-control:disabled{opacity:.55;cursor:not-allowed}
.cm-icon{display:block}

/* Rótulo completo do cursor: interface sobre a figura */
.ex-graph-tooltip[data-kind="node"]{width:auto;max-width:min(340px,calc(100vw - 24px));padding:5px 9px;border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in oklch,var(--surface) 95%,transparent);box-shadow:var(--shadow-sm);color:var(--ink);font-size:12.5px;line-height:1.35;text-align:center}
.ex-graph-tooltip[data-kind="node"]>:not(.ex-tooltip-label){position:absolute!important;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ex-graph-tooltip .ex-tooltip-label{margin:0;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
.ex-graph-tooltip[data-kind="edge"] .ex-tooltip-label{display:none}
/* Largura independente da posição anterior: o script mede e limita às bordas. */
.cm-hover-label{position:absolute;z-index:4;left:0;top:0;transform:translateX(-50%);box-sizing:border-box;width:max-content;max-width:min(300px,calc(100% - 16px));padding:5px 9px;border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in oklch,var(--surface) 95%,transparent);box-shadow:var(--shadow-sm);color:var(--ink);font-size:12.5px;font-weight:500;line-height:1.35;text-align:center;overflow-wrap:anywhere;pointer-events:none}
.cm-hover-label[hidden]{display:none}

/* Seleção por área */
.ex-map-frame .ex-selection-box{fill:color-mix(in oklch,var(--cm-focus) 14%,transparent);stroke:var(--cm-focus);stroke-width:.6;vector-effect:non-scaling-stroke}
.ex-map-frame .ex-force-selection-box{border-color:var(--cm-focus);background:color-mix(in oklch,var(--cm-focus) 14%,transparent)}

/* Painel da rede de forças, recolhido abaixo do mapa (Explorar literatura e Grafo de referências): três linhas da folha,
   cada uma sob uma divisória fina, sem recuo lateral e sem cartão dentro da folha. O resumo é o disclosure canônico de
   style.css (chevron, 13.5px, altura); aqui só o espaçamento. force_graph.css cuida do conteúdo de cada linha. */
.ex-force-panel{margin-top:8px}
.ex-force-more{border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;color:var(--ink)}

/* Eixos do Grafo de referências (camada HTML sobre o SVG, parte da figura) */
.cm-axes{position:absolute;inset:0;pointer-events:none}
.cm-axis{position:absolute;display:flex;align-items:center;gap:8px;font-size:12px;color:var(--cm-muted);white-space:nowrap}
.cm-axis-x{left:30px;right:120px;bottom:6px}
.cm-axis-y{left:8px;bottom:26px;width:min(300px,55%);transform-origin:left top;transform:rotate(-90deg)}
.cm-axis-text{min-width:0;overflow:hidden;text-overflow:ellipsis}
.cm-axis-line{height:1px;background:var(--cm-axis);flex:1}
.cm-axis-line.cm-short{flex:0 0 16px}
.cm-axis-head{flex:none;width:7px;height:8px;background:var(--cm-axis);clip-path:polygon(0 0,100% 50%,0 100%)}
.cm-frame .cm-controls{bottom:10px}
#evidence-workbench-view .cm-frame svg{max-width:none;margin:0}
#evidence-workbench-view .cm-frame{margin:16px 0}
@media (prefers-reduced-motion:reduce){.ex-map-frame .ex-node,.cm-node,.ex-map-frame .ex-edges line,.cm-edge,.cm-control,.cm-legend-item{transition:none}.cm-control:active:not(:disabled){transform:none}}
@media (max-width:650px){.cm-legend{padding:6px 6px 2px}.cm-axis-x{right:56px}}
/* Toque: alvos de 44px que não encolhem no celular. No Explorar, seleção e
   ações viram duas colunas de três no canto inferior direito, mais baixas que a
   coluna única de seis. A legenda só explica a figura (dica no cursor), por isso
   fica com 28px, o que basta para o alvo mínimo de 24px. */
@media (pointer:coarse){
 .paper-explorer .cm-control,.cm-control{width:44px;height:44px}
 .paper-explorer .cm-legend-item,.cm-legend-item{min-height:28px}
 .ex-graph-tools.cm-controls{flex-direction:row;align-items:flex-end}
 .ex-graph-tools.cm-controls .ex-actions{padding:0 0 0 3px;margin:0 0 0 1px;border-top:0;border-left:1px solid var(--line)}
}
/* Celular com toque: o quadro é baixo, então os controles deitam numa fileira
   (no Explorar, duas fileiras de três) e cobrem menos da figura. */
@media (pointer:coarse) and (max-width:650px){
 .cm-controls{flex-direction:row}
 .ex-graph-tools.cm-controls{flex-direction:column;align-items:flex-end}
 .ex-graph-tools.cm-controls .ex-selection-tools,.ex-graph-tools.cm-controls .ex-actions{flex-direction:row}
 .ex-graph-tools.cm-controls .ex-actions{padding:3px 0 0;margin:1px 0 0;border-left:0;border-top:1px solid var(--line)}
 /* Fileira de controles: 144px de largura mais 10px de margem e folga. */
 .cm-axis-x{right:162px}
}
/* Indicadores de integridade no mapa: só alertas e cautelas, como selo discreto */
.ex-map-frame [data-integrity-status="no_major_risks"]>.ex-integrity-svg,.ex-map-frame [data-integrity-status="unable_to_check"]>.ex-integrity-svg{display:none}
.ex-map-frame .ex-integrity-svg circle{stroke-width:1.5;vector-effect:non-scaling-stroke}
.paper-explorer .ex-force-network-toggle{margin-top:8px;min-height:34px;font-size:13px;font-weight:500;padding:7px 12px;border:1px solid var(--control-line);border-radius:var(--radius);background:var(--surface);color:var(--ink-2)}
@media (pointer:coarse){.paper-explorer .ex-force-network-toggle{min-height:44px}}
