/* editais.css — estilos do módulo Editais
   Tokens: usa --bg-*, --accent, --text-*, --border-* do design system. */

#editais-module-root.editais-module-root {
  padding: 24px 28px 48px;
  min-height: 100%;
}

/* ============================================================
   Page wrapper + header
============================================================ */
.editais-page {
  max-width: 1240px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 22px;
}

.editais-page-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border-subtle);
}

.editais-page-head > div { min-width: 0; }

.editais-page-head h2 {
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--text-1);
  margin: 0 0 4px;
}

.editais-page-head p {
  font-size: 13px;
  color: var(--text-3);
  margin: 0;
  line-height: 1.5;
  max-width: 640px;
}

/* ============================================================
   Loading state
============================================================ */
.editais-loading {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 64px 24px;
  color: var(--text-3);
  font-size: 13px;
  font-family: var(--font-mono);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.editais-loading-spinner {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 2px solid var(--border-strong);
  border-top-color: var(--accent);
  animation: editais-spin 720ms linear infinite;
}

@keyframes editais-spin {
  to { transform: rotate(360deg); }
}

/* ============================================================
   Empty state
============================================================ */
.editais-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 56px 24px 64px;
  background: var(--bg-1);
  border: 1px dashed var(--border-soft);
  border-radius: 16px;
}

.editais-empty .ee-icon {
  width: 56px;
  height: 56px;
  border-radius: 14px;
  background: var(--bg-2);
  border: 1px solid var(--border-subtle);
  color: var(--accent);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  margin-bottom: 16px;
}

.editais-empty h3 {
  font-size: 18px;
  font-weight: 700;
  color: var(--text-1);
  margin: 0 0 8px;
  letter-spacing: -0.01em;
}

.editais-empty p {
  font-size: 13px;
  color: var(--text-3);
  margin: 0;
  max-width: 460px;
  line-height: 1.55;
}

.editais-empty .ee-actions {
  margin-top: 22px;
}

.editais-empty .ee-hint {
  margin-top: 12px;
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--text-4);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

/* ============================================================
   Cards grid
============================================================ */
.editais-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 14px;
}

.edital-card {
  position: relative;
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  padding: 18px 18px 16px;
  cursor: pointer;
  transition: border-color 140ms ease, transform 140ms ease, box-shadow 140ms ease;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 168px;
}

.edital-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: var(--accent);
}

.edital-card:hover {
  border-color: var(--border-strong);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

.edital-card .ec-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 12px;
}

.edital-card .ec-name {
  font-size: 14px;
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.35;
  margin-right: 8px;
  color: var(--text-1);
}

.edital-card .ec-pin {
  flex-shrink: 0;
  background: none;
  border: none;
  font-size: 14px;
  line-height: 1;
  padding: 3px;
  cursor: pointer;
  opacity: 0.45;
  filter: grayscale(1);
  transition: opacity 120ms ease, filter 120ms ease, transform 120ms ease;
}
.edital-card:hover .ec-pin { opacity: 0.75; }
.edital-card .ec-pin:hover { opacity: 1; transform: scale(1.12); }
.edital-card .ec-pin.is-active { opacity: 1; filter: none; }

.edital-card .ec-meta {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--text-3);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 8px;
}

.edital-card .ec-pct-row {
  display: flex;
  align-items: baseline;
  gap: 4px;
  margin-top: auto;
  margin-bottom: 6px;
}

.edital-card .ec-pct {
  font: 700 32px/1 var(--font-sans);
  letter-spacing: -0.03em;
  font-feature-settings: 'tnum';
  color: var(--text-1);
}

.edital-card .ec-pct-suffix {
  font-size: 13px;
  color: var(--text-3);
  font-weight: 600;
}

.edital-card .ec-bar {
  width: 100%;
  height: 4px;
  background: var(--bg-3);
  border-radius: 999px;
  overflow: hidden;
  margin-bottom: 10px;
}

.edital-card .ec-bar-fill {
  height: 100%;
  background: var(--accent);
  border-radius: 999px;
  transition: width 320ms ease;
}

.lixeira-card { cursor: default; }
.lixeira-actions {
  display: flex;
  gap: 8px;
  margin-top: 14px;
}
.lixeira-actions .btn { flex: 1; }

.edital-card .ec-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--text-4);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
}

.edital-card .notes-counter {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--info);
  background: oklch(0.72 0.12 240 / 0.14);
  padding: 1px 6px;
  border-radius: 999px;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.05em;
}

/* Card "+ Novo edital" */
.edital-card.create-new {
  background: transparent;
  border: 1.5px dashed var(--border-soft);
  align-items: center;
  justify-content: center;
  text-align: center;
  color: var(--text-3);
}

.edital-card.create-new::before { display: none; }

.edital-card.create-new:hover {
  border-color: var(--accent);
  color: var(--accent-strong);
  background: var(--accent-soft);
  transform: none;
}

.edital-card.create-new .plus {
  width: 40px;
  height: 40px;
  border-radius: 12px;
  background: var(--bg-2);
  color: var(--text-2);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  margin-bottom: 8px;
  border: 1px solid var(--border-subtle);
  transition: background 140ms, color 140ms, border-color 140ms;
}

.edital-card.create-new:hover .plus {
  background: var(--accent);
  color: var(--accent-fg);
  border-color: var(--accent);
}

.edital-card.create-new strong {
  font-size: 13px;
  color: var(--text-2);
}

.edital-card.create-new .desc {
  font-size: 11px;
  margin-top: 2px;
  color: var(--text-4);
}

/* ============================================================
   Detail header subtitle
============================================================ */
.editais-detail-meta {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-3);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-top: 4px;
}

/* ============================================================
   Stats row
============================================================ */
.editais-stat-row {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr 1.4fr;
  gap: 12px;
  margin-bottom: 22px;
}

.editais-historico-slot:empty { display: none; }

/* =====================================================================
   Mapa de esforço/prioridade — ranking horizontal das disciplinas (ou
   blocos) por priorityScore, pra orientar visualmente onde focar o
   estudo antes de entrar na lista completa.
   ===================================================================== */
.editais-priority-map {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  padding: 16px 18px;
  margin-bottom: 22px;
}
.editais-priority-map-head {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}
.editais-priority-map-head h3 {
  margin: 0;
  font-size: 14px;
  font-weight: 700;
  color: var(--text-1);
}
.editais-priority-map-sub {
  font-size: 11px;
  color: var(--text-3);
}
.editais-priority-map-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.editais-priority-row {
  display: grid;
  grid-template-columns: minmax(120px, 220px) 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 5px 8px;
  border-radius: 8px;
  cursor: pointer;
  transition: background 100ms ease;
}
.editais-priority-row:hover { background: var(--bg-2); }
.editais-priority-row-nome {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--text-2);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.editais-priority-row-bar-wrap {
  height: 8px;
  border-radius: 999px;
  background: var(--bg-2);
  overflow: hidden;
}
.editais-priority-row-bar {
  /* background e box-shadow vêm inline (gradiente contínuo calculado por
     score exato via priorityGradient() — ver editais_main.js) */
  display: block;
  height: 100%;
  border-radius: 999px;
  transition: width 200ms ease, box-shadow 200ms ease;
}
.editais-priority-row-meta {
  font-size: 11px;
  color: var(--text-3);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.editais-priority-map-more {
  background: none;
  border: none;
  color: var(--accent);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  padding: 8px 4px 0;
}
.editais-priority-map-more:hover { text-decoration: underline; }
@media (max-width: 720px) {
  .editais-priority-row { grid-template-columns: 1fr; row-gap: 4px; }
  .editais-priority-row-meta { justify-self: start; }
}

.editais-stat-card {
  position: relative;
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  padding: 16px 18px;
  overflow: hidden;
}

.editais-stat-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: var(--accent);
}

.editais-stat-card.notes-strip::before { background: var(--info); }

/* Meta diaria: cores por urgencia (top-strip + value tint). Mantem o
   mesmo layout do stat-card padrao pra nao quebrar o grid. */
.meta-card .value small {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-3);
  margin-left: 2px;
}
.meta-card--ok::before { background: #10b981; }
.meta-card--ok .value { color: #34d399; }
.meta-card--warn::before { background: #f59e0b; }
.meta-card--warn .value { color: #fbbf24; }
.meta-card--urgent::before { background: #ef4444; }
.meta-card--urgent .value { color: #f87171; }
.meta-card--past::before { background: #64748b; }
.meta-card--past .value { color: var(--text-2); font-size: 22px; font-weight: 700; }
.meta-card--done::before { background: #10b981; }
.meta-card--done .value { font-size: 36px; }
.meta-card--neutral::before { background: var(--text-3); }
.meta-card--neutral .value { color: var(--text-3); }
/* ============================================================
   MODO CELEBRAÇÃO — quando bate a meta diária
   Fundo verde gradiente animado + confete + streak destacado
   ============================================================ */
.meta-card--celebration {
  position: relative;
  /* Mantem o bg-1 do card por baixo + gradiente verde por cima.
     Sem o bg-1, o gradiente translucido deixa a página vazar */
  background:
    linear-gradient(135deg,
      rgba(16, 185, 129, 0.20) 0%,
      rgba(34, 197, 94, 0.10) 40%,
      rgba(34, 197, 94, 0.04) 100%),
    var(--bg-1) !important;
  border: 1px solid rgba(34, 197, 94, 0.5) !important;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.05),
    0 0 0 1px rgba(34, 197, 94, 0.15),
    0 8px 24px rgba(16, 185, 129, 0.18) !important;
  overflow: hidden;
  animation: metaCardCelebrationGlow 4s ease-in-out infinite;
}
/* Texto sempre acima do confete absoluto */
.meta-card--celebration > .label,
.meta-card--celebration > .value,
.meta-card--celebration > .detail,
.meta-card--celebration > .meta-card-streak,
.meta-card--celebration > .meta-card-msg {
  position: relative;
  z-index: 2;
}
.meta-card--celebration .meta-card-confetti {
  z-index: 1;
}
.meta-card--celebration::before {
  background: linear-gradient(90deg, #10b981, #4ade80, #10b981) !important;
  background-size: 200% 100%;
  animation: metaCardStripShine 3s linear infinite;
}
.meta-card--celebration .label {
  color: #4ade80 !important;
  letter-spacing: 0.1em;
  font-weight: 800;
}
.meta-card--celebration .value {
  color: #86efac !important;
  text-shadow: 0 0 24px rgba(74, 222, 128, 0.35);
}
.meta-card--celebration .value small {
  color: rgba(74, 222, 128, 0.7) !important;
  font-size: 14px;
}
.meta-card--celebration .detail {
  color: var(--text-2) !important;
}
.meta-card-streak {
  margin-top: 8px;
  padding: 6px 10px;
  background: rgba(0, 0, 0, 0.25);
  border-radius: 6px;
  font-size: 11px;
  color: #fde68a;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid rgba(251, 191, 36, 0.2);
}
.meta-card-streak strong { color: #fff; font-weight: 800; }
.meta-card-streak .streak-fire {
  font-size: 14px;
  animation: streakFlame 1.4s ease-in-out infinite;
}
.meta-card-msg {
  margin-top: 8px;
  font-size: 11px;
  font-style: italic;
  color: rgba(167, 243, 208, 0.85);
  line-height: 1.4;
}

/* Confetes animados — 5 sparkles distribuídos */
.meta-card-confetti {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
}
.meta-card-confetti .confetti {
  position: absolute;
  font-size: 14px;
  opacity: 0;
  color: #fbbf24;
  animation: confettiFloat 3.5s ease-in-out infinite;
  text-shadow: 0 0 6px rgba(251, 191, 36, 0.5);
}
.meta-card-confetti .c1 { top: 12%; left: 12%;  animation-delay: 0s; }
.meta-card-confetti .c2 { top: 18%; right: 18%; animation-delay: 0.5s; color: #4ade80; }
.meta-card-confetti .c3 { top: 60%; left: 22%;  animation-delay: 1.0s; color: #34d399; }
.meta-card-confetti .c4 { top: 70%; right: 14%; animation-delay: 1.5s; }
.meta-card-confetti .c5 { top: 38%; right: 28%; animation-delay: 2.0s; color: #c4b5fd; }

@keyframes confettiFloat {
  0%   { opacity: 0; transform: translateY(0) rotate(0deg) scale(0.8); }
  20%  { opacity: 1; transform: translateY(-4px) rotate(60deg) scale(1.1); }
  60%  { opacity: 0.8; transform: translateY(-12px) rotate(180deg) scale(1); }
  100% { opacity: 0; transform: translateY(-22px) rotate(280deg) scale(0.6); }
}
@keyframes metaCardCelebrationGlow {
  0%, 100% { box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.05),
    0 0 0 1px rgba(34, 197, 94, 0.15),
    0 8px 24px rgba(16, 185, 129, 0.18); }
  50%      { box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.08),
    0 0 0 1px rgba(34, 197, 94, 0.3),
    0 8px 32px rgba(16, 185, 129, 0.32); }
}
@keyframes metaCardStripShine {
  0%   { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}
@keyframes streakFlame {
  0%, 100% { transform: scale(1) rotate(-2deg); }
  50%      { transform: scale(1.15) rotate(2deg); }
}

.meta-card-ritmo {
  font-size: 11px;
  color: var(--text-3);
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px dashed rgba(148, 163, 184, 0.2);
}

.editais-stat-card .label {
  font-family: var(--font-mono);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-3);
  font-weight: 700;
  margin-bottom: 10px;
}

.editais-stat-card .value {
  font: 800 32px/1 var(--font-sans);
  letter-spacing: -0.03em;
  font-feature-settings: 'tnum';
  color: var(--text-1);
}

.editais-stat-card .detail {
  font-size: 12px;
  color: var(--text-3);
  margin-top: 4px;
}

.editais-stat-card .bar {
  width: 100%;
  height: 4px;
  background: var(--bg-3);
  border-radius: 999px;
  overflow: hidden;
  margin-top: 10px;
}

.editais-stat-card .bar-fill {
  height: 100%;
  background: var(--accent);
  border-radius: 999px;
  transition: width 320ms ease;
}

/* ============================================================
   Tree toolbar + tree
============================================================ */
.editais-tree-toolbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 12px;
  gap: 8px;
  flex-wrap: wrap;
}

.editais-tree-search-wrap {
  position: relative;
  flex: 1;
  min-width: 220px;
  display: flex;
  align-items: center;
}
.editais-tree-search {
  flex: 1;
  width: 100%;
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: var(--r-md);
  padding: 8px 14px;
  padding-right: 110px; /* espaço pro contador */
  color: var(--text-1);
  font-size: 13px;
  font-family: inherit;
}

.editais-tree-search::placeholder { color: var(--text-4); }

.editais-tree-search:focus {
  outline: none;
  border-color: var(--accent);
}

/* Contador de matches à direita do input */
.editais-search-count {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 11px;
  font-weight: 600;
  font-family: var(--font-mono);
  letter-spacing: 0.02em;
  color: var(--text-3);
  pointer-events: none;
  white-space: nowrap;
}
.editais-search-count.has-matches { color: #4ade80; }
.editais-search-count.no-matches { color: #fca5a5; }

/* Highlight da palavra encontrada dentro do título do tópico */
mark.editais-search-hl {
  background: rgba(251, 191, 36, 0.35);
  color: inherit;
  padding: 0 2px;
  border-radius: 3px;
  font-weight: 700;
}
.tree-node.is-match {
  outline: 1px solid rgba(251, 191, 36, 0.4);
  outline-offset: -1px;
  border-radius: 4px;
}

.editais-tree {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  overflow: hidden;
}

.editais-tree-empty {
  padding: 32px 18px;
  text-align: center;
  color: var(--text-3);
  font-size: 13px;
}

.tree-node {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 16px;
  border-bottom: 1px solid var(--border-subtle);
  transition: background 100ms;
  user-select: none;
  position: relative;
}

.tree-node:last-child { border-bottom: 0; }
.tree-node:hover { background: var(--bg-2); }
/* Foco por teclado (navegação com setas) — barra de acento + fundo. */
.tree-node:focus { outline: none; }
.tree-node:focus-visible {
  outline: none;
  background: var(--bg-2);
  box-shadow: inset 3px 0 0 var(--accent, #2edb7f);
}
/* Linhas-pai (têm subtópicos): título em destaque + faixa sutil, pra o
   usuário bater o olho e separar seções dos itens-folha. */
.tree-node.is-parent > .tree-name > .name-text {
  font-weight: 600;
  color: var(--text-1, #e2e8f0);
}
.tree-node.is-parent:not([data-level="1"]) {
  background: rgba(148, 163, 184, 0.045);
}
.tree-node.is-parent:hover,
.tree-node.is-parent:focus-visible {
  background: var(--bg-2);
}
.tree-node[data-level="1"] { background: var(--bg-2); padding-left: 16px; }
.tree-node[data-level="2"] { padding-left: 40px; }
.tree-node[data-level="3"] { padding-left: 64px; }
.tree-node[data-level="4"] { padding-left: 88px; }
.tree-node[data-level="5"] { padding-left: 112px; }
.tree-node[data-level="6"] { padding-left: 136px; }
.tree-node[data-level="7"] { padding-left: 160px; }
.tree-node[data-level="8"] { padding-left: 184px; }
.tree-node.is-hidden { display: none; }

.tree-chevron {
  color: var(--text-3);
  font-size: 9px;
  width: 10px;
  cursor: pointer;
  transition: transform 120ms;
  flex-shrink: 0;
}
.tree-chevron.expanded { transform: rotate(90deg); color: var(--text-2); }
.tree-chevron.is-leaf { visibility: hidden; }

.tree-checkbox {
  width: 18px;
  height: 18px;
  border-radius: 5px;
  border: 1.5px solid var(--text-4);
  background: transparent;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 120ms;
  color: transparent;
  font-size: 12px;
  font-weight: 800;
  font-family: var(--font-mono);
}

.tree-checkbox:hover { border-color: var(--accent); }

.tree-checkbox.checked {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--accent-fg);
}

.tree-checkbox.partial {
  background: var(--accent-soft);
  border-color: var(--accent);
  color: var(--accent);
}

.tree-name {
  flex: 1;
  font-size: 13px;
  color: var(--text-2);
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}

.tree-name .name-text {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Nas FOLHAS o título ocupa o espaço livre (truncando se preciso), empurrando
   os chips de conteúdo + botão da esteira pra uma coluna fixa à direita — assim
   não ficam "em escada" grudados no nome. Só folhas (:not(.is-parent)) pra não
   afastar os badges agregados das disciplinas. */
.tree-node:not(.is-parent) .tree-name .name-text {
  flex: 1 1 0;
  min-width: 0;
}

/* Click-to-copy do titulo do topico (mesma UX da tabela de assuntos do GPS).
   Cursor pointer + underline tracejado discreto no hover; flash verde 600ms
   ao copiar via .is-copied. */
.editais-titulo-copyable {
  cursor: pointer;
  border-radius: 3px;
  padding: 0 2px;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.editais-titulo-copyable:hover {
  text-decoration: underline dotted rgba(16, 185, 129, 0.6);
  text-underline-offset: 3px;
}
.editais-titulo-copyable.is-copied {
  background-color: rgba(16, 185, 129, 0.28);
  box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.5);
}

/* Edicao inline do titulo (duplo-click). is-editing remove ellipsis pro
   input ocupar a largura disponivel; is-saving dá pulsate sutil enquanto
   o PUT esta em voo. */
.editais-titulo-copyable.is-editing {
  cursor: text;
  overflow: visible;
  background-color: rgba(46, 219, 127, 0.08);
  box-shadow: 0 0 0 2px rgba(46, 219, 127, 0.5);
  padding: 0;
  /* Estica pra ocupar a largura da linha (.tree-name é flex:1) — sem isso o
     span colapsa no conteúdo e o input cai no min-width, cortando o título. */
  flex: 1 1 auto;
  min-width: 0;
  display: block;
}
.editais-titulo-copyable.is-editing:hover {
  text-decoration: none;
}
.editais-titulo-edit-input {
  background: var(--bg-1, #0f172a);
  color: var(--text-1, #e2e8f0);
  border: none;
  outline: none;
  font: inherit;
  padding: 2px 6px;
  border-radius: 3px;
  width: 100%;
  min-width: 200px;
  box-sizing: border-box;
  /* Textarea com auto-altura: quebra em linhas em vez de cortar o título. */
  display: block;
  resize: none;
  overflow-y: hidden;
  max-height: 40vh;
  line-height: 1.45;
  white-space: pre-wrap;
  word-break: break-word;
  vertical-align: top;
}
/* Botão "Desfazer" no toast de exclusão. */
.editais-undo-toast .toast-content {
  display: flex;
  align-items: center;
  gap: 10px;
}
.editais-undo-btn {
  flex-shrink: 0;
  padding: 3px 12px;
  border: 1px solid var(--accent, #2edb7f);
  border-radius: 6px;
  background: transparent;
  color: var(--accent-strong, #58e89c);
  font: 600 12px/1.3 inherit;
  cursor: pointer;
  transition: background-color 0.12s ease;
}
.editais-undo-btn:hover { background: rgba(46, 219, 127, 0.14); }

/* Dica do modo outline (renomear com subtópicos). */
.editais-edit-hint {
  margin-top: 4px;
  font-size: 10.5px;
  line-height: 1.3;
  color: var(--text-3, #94a3b8);
  user-select: none;
  pointer-events: none;
}

/* Menu de contexto (botão direito) nos nós da árvore — add/renomear/excluir
   inline, sem abrir modal. */
.editais-ctx-menu {
  position: fixed;
  z-index: 1000;
  min-width: 214px;
  padding: 6px;
  background: var(--bg-1, #0f172a);
  border: 1px solid var(--border-soft, rgba(71, 85, 105, 0.5));
  border-radius: 10px;
  box-shadow: 0 14px 36px rgba(0, 0, 0, 0.5);
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-size: 13px;
  max-height: calc(100vh - 16px);
  overflow-y: auto;
  animation: editais-ctx-pop 0.1s ease;
}
@keyframes editais-ctx-pop {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.editais-ctx-menu button {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 9px;
  width: 100%;
  text-align: left;
  padding: 8px 10px;
  border: none;
  background: transparent;
  color: var(--text-2, #cbd5e1);
  border-radius: 6px;
  cursor: pointer;
  font: inherit;
  transition: background-color 0.12s ease, color 0.12s ease;
}
.editais-ctx-menu button:hover {
  background: var(--bg-2, #1e293b);
  color: var(--text-1, #e2e8f0);
}
/* Destaque de navegação por teclado (mesma cor do hover). */
.editais-ctx-menu button:focus-visible {
  background: var(--bg-2, #1e293b);
  color: var(--text-1, #e2e8f0);
  outline: none;
}
/* Item inaplicável (ex.: "Mover para cima" no primeiro tópico). */
.editais-ctx-menu button:disabled {
  opacity: 0.38;
  cursor: default;
  pointer-events: none;
}
/* Badge de contagem (cards/notas) alinhado à direita do item. */
.editais-ctx-count {
  margin-left: auto;
  min-width: 18px;
  padding: 1px 6px;
  border-radius: 999px;
  background: var(--bg-3, #334155);
  color: var(--text-2, #cbd5e1);
  font-size: 11px;
  font-weight: 600;
  line-height: 1.4;
  text-align: center;
}
.editais-ctx-menu button.is-danger { color: #f87171; }
.editais-ctx-menu button.is-danger:hover { background: rgba(248, 113, 113, 0.12); }
.editais-ctx-menu [data-lucide],
.editais-ctx-menu svg {
  width: 15px;
  height: 15px;
  flex-shrink: 0;
}
.editais-ctx-sep {
  height: 1px;
  background: var(--border-subtle, rgba(71, 85, 105, 0.4));
  margin: 4px 2px;
}
/* Linha de relevância (estrelas) dentro do menu de contexto. */
.editais-ctx-rel-row {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 5px 10px;
}
.editais-ctx-rel-label {
  font-size: 11px;
  color: var(--text-3, #94a3b8);
  margin-right: auto;
}
.editais-ctx-menu .editais-ctx-rel-btn {
  width: auto;
  min-width: 24px;
  padding: 3px 6px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0;
  border: 1px solid transparent;
  border-radius: 5px;
  background: var(--bg-2, #1e293b);
  color: var(--text-3, #94a3b8);
  font-size: 11px;
  line-height: 1;
}
.editais-ctx-menu .editais-ctx-rel-btn:hover {
  background: var(--bg-3, #334155);
  color: var(--text-1, #e2e8f0);
}
.editais-ctx-menu .editais-ctx-rel-btn.is-active {
  color: var(--accent-strong, #58e89c);
  border-color: rgba(46, 219, 127, 0.4);
  background: rgba(46, 219, 127, 0.1);
}

/* Cor personalizada da disciplina — swatches no menu de contexto */
.editais-ctx-cor-row {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px 7px;
  flex-wrap: wrap;
}
.editais-ctx-cor-row .editais-ctx-rel-label {
  width: 100%;
  margin-bottom: 2px;
}
.editais-ctx-cor-swatches {
  display: flex;
  gap: 5px;
  flex-wrap: wrap;
}
.editais-ctx-menu .editais-ctx-cor-swatch {
  width: 18px;
  height: 18px;
  min-width: 0;
  border-radius: 50%;
  border: 2px solid transparent;
  padding: 0;
  cursor: pointer;
  transition: transform 0.1s ease, border-color 0.1s ease;
}
.editais-ctx-menu .editais-ctx-cor-swatch:hover { transform: scale(1.15); }
.editais-ctx-menu .editais-ctx-cor-swatch.is-active {
  border-color: var(--text-1, #e2e8f0);
  box-shadow: 0 0 0 2px rgba(226, 232, 240, 0.25);
}
.editais-ctx-menu .editais-ctx-cor-swatch--none {
  background: var(--bg-2, #1e293b) !important;
  border: 1px solid var(--border-subtle);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  color: var(--text-3, #94a3b8);
}
.editais-ctx-menu .editais-ctx-cor-swatch--none.is-active {
  border-color: var(--text-1, #e2e8f0);
}

/* Cor personalizada na linha da disciplina (nivel 1) — substitui o tint
   automático de urgência (data-tier, ver regras mais abaixo) por um tint na
   cor escolhida pelo usuário. !important necessário: a regra de tier usa
   [data-level="1"][data-tier="..."], mesma especificidade de
   .has-cor[data-level="1"] mas definida depois no arquivo (ganharia o
   empate sem o !important). */
.tree-node.has-cor[data-level="1"] {
  background: linear-gradient(90deg, var(--secao-cor-tint), var(--bg-2) 60%) !important;
  box-shadow: inset 4px 0 0 var(--secao-cor);
}
.tree-node.has-cor[data-level="1"]:focus-visible {
  box-shadow: inset 3px 0 0 var(--accent, #2edb7f), inset 4px 0 0 var(--secao-cor);
}
.editais-titulo-copyable.is-saving {
  opacity: 0.6;
  pointer-events: none;
}

.tree-node[data-level="1"] .tree-name {
  font-weight: 700;
  color: var(--text-1);
  font-size: 14px;
}

.tree-node[data-level="2"] .tree-name {
  font-weight: 600;
  color: var(--text-2);
  font-size: 13px;
}

.tree-node.is-checked .tree-name > .name-text {
  color: var(--text-3);
  text-decoration: line-through;
  text-decoration-color: rgba(255,255,255,0.18);
}

/* Heatmap: faixa colorida na esquerda do nó indicando progresso (L1/L2) */
.tree-node.heat-empty,
.tree-node.heat-low,
.tree-node.heat-mid,
.tree-node.heat-high,
.tree-node.heat-full {
  position: relative;
}

.tree-node.heat-empty::before,
.tree-node.heat-low::before,
.tree-node.heat-mid::before,
.tree-node.heat-high::before,
.tree-node.heat-full::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
}

.tree-node.heat-empty::before { background: oklch(0.55 0.02 250); }              /* cinza */
.tree-node.heat-low::before   { background: oklch(0.68 0.18 27); }                /* vermelho */
.tree-node.heat-mid::before   { background: oklch(0.78 0.15 75); }                /* amarelo */
.tree-node.heat-high::before  { background: oklch(0.74 0.16 152 / 0.7); }         /* verde claro */
.tree-node.heat-full::before  { background: var(--accent); }                      /* verde forte */

/* Flash highlight quando "próximo tópico" navega até a folha */
.tree-node.flash-highlight {
  animation: flashHighlight 1.2s ease;
}

@keyframes flashHighlight {
  0%, 100% { background: var(--bg-1); }
  20%      { background: var(--accent-soft); box-shadow: 0 0 0 2px var(--accent) inset; }
  60%      { background: var(--accent-soft); }
}

/* Botão filtro "só pendentes" */
.filter-toggle {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  color: var(--text-3);
  padding: 8px 12px;
  border-radius: var(--r-md);
  cursor: pointer;
  font-size: 11px;
  font-family: var(--font-mono);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  transition: background 120ms, color 120ms, border-color 120ms;
  white-space: nowrap;
}

.filter-toggle:hover {
  background: var(--bg-2);
  color: var(--text-1);
  border-color: var(--border-strong);
}

.filter-toggle.active {
  background: var(--accent-soft);
  color: var(--accent-strong);
  border-color: var(--accent);
}

/* Filtro de estrelas — grupo de pillinhos. Cada um tem cor da estrela
   correspondente no estado :active pra UX consistente com o nó. */
.editais-rel-filter {
  display: inline-flex;
  gap: 4px;
  align-items: center;
  padding: 2px;
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  border-radius: 8px;
}
.rel-filter-btn {
  background: none;
  border: none;
  color: var(--text-3);
  font-size: 13px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: 5px;
  cursor: pointer;
  line-height: 1;
  transition: background-color 0.12s ease, color 0.12s ease;
}
.rel-filter-btn:hover { background: var(--bg-3); color: var(--text-1); }
.rel-filter-btn.active {
  background: rgba(251, 191, 36, 0.28);
  color: #fde68a;
}
.rel-filter-btn[data-rel="0"].active { background: rgba(148, 163, 184, 0.35); color: #f1f5f9; }
.rel-filter-btn[data-rel="1"].active { background: rgba(239, 68, 68, 0.3);  color: #fecaca; }
.rel-filter-btn[data-rel="2"].active { background: rgba(245, 158, 11, 0.28); color: #fde68a; }
.rel-filter-btn[data-rel="3"].active { background: rgba(34, 197, 94, 0.28);  color: #bbf7d0; }

/* =====================================================================
   "Hoje" — modal com lista priorizada do dia
   ===================================================================== */
.editais-today-overlay {
  position: fixed;
  inset: 0;
  z-index: 1500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.editais-today-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 18, 0.78);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.editais-today-panel {
  position: relative;
  width: min(720px, 100%);
  max-height: 85vh;
  background: var(--bg-1);
  border: 1px solid var(--border-1);
  border-radius: 14px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.editais-today-head {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 18px 22px;
  border-bottom: 1px solid var(--border-1);
  background: rgba(7, 11, 20, 0.5);
}
.editais-today-head h2 {
  margin: 0;
  font-size: 18px;
  color: var(--text-1);
}
.editais-today-sub {
  margin-top: 4px;
  font-size: 12px;
  color: var(--text-3);
}
.editais-today-head .btn-icon {
  margin-left: auto;
  background: none;
  border: none;
  color: var(--text-2);
  font-size: 18px;
  cursor: pointer;
  width: 32px;
  height: 32px;
  border-radius: 6px;
}
.editais-today-head .btn-icon:hover { background: var(--bg-2); color: var(--text-1); }
.editais-today-list {
  overflow-y: auto;
  padding: 12px 16px 18px;
  flex: 1;
}
.editais-today-empty {
  padding: 36px 18px;
  text-align: center;
  color: var(--text-3);
  font-size: 14px;
}
.editais-today-item {
  display: grid;
  grid-template-columns: 30px 1fr auto;
  gap: 12px;
  align-items: center;
  padding: 12px;
  margin: 6px 0;
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  border-radius: 10px;
  transition: opacity 0.3s ease;
}
.editais-today-item.is-done { opacity: 0.45; text-decoration: line-through; }
.editais-today-item[data-relevancia="1"] { box-shadow: inset 3px 0 0 #ef4444; }
.editais-today-item[data-relevancia="2"] { box-shadow: inset 3px 0 0 #f59e0b; }
.editais-today-item[data-relevancia="3"] { box-shadow: inset 3px 0 0 #22c55e; }
.editais-today-num {
  font-family: var(--font-mono);
  font-size: 13px;
  font-weight: 700;
  color: var(--text-3);
  text-align: center;
}
.editais-today-titulo {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: 2px;
}
.editais-today-breadcrumb {
  font-size: 11px;
  color: var(--text-3);
  margin-bottom: 6px;
}
.editais-today-meta {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.editais-today-rel-tag {
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--bg-3);
  color: var(--text-2);
}
.editais-today-rel-tag.rel-1 { background: rgba(239, 68, 68, 0.18); color: #fecaca; }
.editais-today-rel-tag.rel-2 { background: rgba(245, 158, 11, 0.18); color: #fde68a; }
.editais-today-rel-tag.rel-3 { background: rgba(34, 197, 94, 0.18); color: #bbf7d0; }
.editais-today-actions {
  display: flex;
  gap: 6px;
  flex-shrink: 0;
}
.editais-today-actions .btn-sm {
  font-size: 12px;
  padding: 5px 10px;
}

/* =====================================================================
   Anotações livres por seção — badge na árvore + modal
   ===================================================================== */
.tree-anotacao-badge {
  display: inline-flex;
  align-items: center;
  font-size: 12px;
  padding: 1px 4px;
  border-radius: 4px;
  background: rgba(251, 191, 36, 0.16);
  cursor: pointer;
  margin-left: 4px;
  transition: background-color 0.12s ease, transform 0.1s ease;
}
.tree-anotacao-badge:hover {
  background: rgba(251, 191, 36, 0.3);
  transform: scale(1.1);
}
/* Selo "Aplicar prova" aprovada na árvore — o checkbox do tópico vira um
   troféu dourado (em vez do ✓ genérico) quando o domínio foi comprovado
   por avaliação objetiva (nota >= 7 numa prova de questões), não só
   autodeclarado. Nota completa fica no title (tooltip) do checkbox. */
.tree-checkbox.is-prova-trophy {
  background: linear-gradient(135deg, #fde047, #f59e0b);
  border-color: #fbbf24;
  color: #451a03;
  font-size: 13px;
  box-shadow: 0 0 0 2px rgba(251, 191, 36, 0.25);
}
.tree-node.is-prova-aprovada { background: rgba(251, 191, 36, 0.05); }

/* Meta do detalhe do edital clicável (editar nome/banca/data da prova) */
.editais-detail-meta.is-editable { cursor: pointer; }
.editais-meta-edit { opacity: 0.55; font-size: 0.85em; white-space: nowrap; }
.editais-detail-meta.is-editable:hover .editais-meta-edit {
  opacity: 1;
  text-decoration: underline;
}

/* Badge de questões vinculadas no tópico — só um ícone indicando "tem
   questão aqui" (contagem/% de acerto ficam no title e na visão Tabela,
   não precisa poluir a árvore com números). Mesmo padrão do badge de
   anotação (ícone só, sem pill de texto). */
.tree-questoes-badge {
  display: inline-flex;
  align-items: center;
  font-size: 12px;
  padding: 1px 4px;
  border-radius: 4px;
  background: rgba(56, 189, 248, 0.16);
  cursor: pointer;
  margin-left: 4px;
  transition: background-color 0.12s ease;
}
.tree-questoes-badge:hover {
  background: rgba(56, 189, 248, 0.3);
}

/* Badge de imagens da galeria no tópico */
.tree-images-badge {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 11px;
  padding: 1px 7px;
  border-radius: 999px;
  background: rgba(45, 212, 191, 0.16);
  color: #5eead4;
  cursor: pointer;
  margin-left: 4px;
  font-weight: 600;
  transition: background-color 0.12s ease, transform 0.1s ease;
}
.tree-images-badge:hover {
  background: rgba(45, 212, 191, 0.28);
  transform: scale(1.05);
}

/* Indicadores de conteúdo por tópico-folha (galeria · cards · questões).
   Sempre visíveis e em posição fixa pra escanear a coluna num relance:
   verde + contagem quando o tópico TEM; cinza apagado quando não tem.
   Os emojis distintos (🖼️/🃏/🎯) diferenciam o tipo; a cor diz se existe. */
.tree-content-badges {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  /* Empurra os chips pro fim da coluna (mesma lógica do .tree-estudar-btn),
     numa posição consistente entre linhas — sem isso ficavam grudados no
     título, "em escada" conforme o nome do tópico variava. Ficam logo à
     esquerda do botão da esteira. */
  margin-left: auto;
  padding-right: 4px;
  flex-shrink: 0;
}
.tree-content-chip {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  min-width: 22px;
  justify-content: center;
  font-size: 11px;
  font-weight: 700;
  line-height: 1;
  padding: 2px 5px;
  border-radius: 999px;
  cursor: pointer;
  user-select: none;
  transition: background-color 0.12s ease, opacity 0.12s ease, transform 0.1s ease;
}
.tree-content-chip .tcc-ico { font-size: 12px; line-height: 1; }
.tree-content-chip.has {
  background: rgba(16, 185, 129, 0.16);
  color: #6ee7b7;
}
.tree-content-chip.has:hover {
  background: rgba(16, 185, 129, 0.30);
  transform: scale(1.06);
}
/* Badge de CARDS por estado do SRS: em dia (verde) · a revisar (laranja) ·
   acumulou (vermelho). O número mostra os VENCIDOS; total fica no tooltip. */
.tree-content-chip.cards-emdia { background: rgba(16, 185, 129, 0.16); color: #6ee7b7; }
.tree-content-chip.cards-emdia:hover { background: rgba(16, 185, 129, 0.30); transform: scale(1.06); }
.tree-content-chip.cards-due { background: rgba(234, 88, 12, 0.18); color: #fdba74; }
.tree-content-chip.cards-due:hover { background: rgba(234, 88, 12, 0.30); transform: scale(1.06); }
.tree-content-chip.cards-overdue { background: rgba(220, 38, 38, 0.20); color: #fca5a5; }
.tree-content-chip.cards-overdue:hover { background: rgba(220, 38, 38, 0.32); transform: scale(1.06); }
.l1-rollup-pill.cards-emdia { color: #6ee7b7; }
.l1-rollup-pill.cards-due { color: #fdba74; }
.l1-rollup-pill.cards-overdue { color: #fca5a5; }
.tree-content-chip.empty {
  background: transparent;
  opacity: 0.3;
}
.tree-content-chip.empty .tcc-ico { filter: grayscale(1); }
.tree-content-chip.empty:hover {
  opacity: 0.65;
  background: rgba(148, 163, 155, 0.12);
}

/* =====================================================================
   L1 (disciplina): vista estratégica
   - Selo de prioridade (🔥/🟠/🟡/✓)
   - Barra horizontal de volume proporcional ao maior
   - Badges rollup (anotações/notas/cards descendentes)
   - Tint sutil de fundo por tier de urgência
   ===================================================================== */
.tree-node[data-level="1"][data-tier="critical"] {
  background: linear-gradient(90deg, rgba(239, 68, 68, 0.08), var(--bg-2) 60%);
}
.tree-node[data-level="1"][data-tier="high"] {
  background: linear-gradient(90deg, rgba(251, 146, 60, 0.07), var(--bg-2) 60%);
}
.tree-node[data-level="1"][data-tier="medium"] {
  background: linear-gradient(90deg, rgba(251, 191, 36, 0.06), var(--bg-2) 60%);
}
.tree-node[data-level="1"][data-tier="low"] {
  background: linear-gradient(90deg, rgba(34, 197, 94, 0.06), var(--bg-2) 60%);
}

.l1-priority-tag {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  height: 26px;
  padding: 0 8px;
  border-radius: 6px;
  font-size: 13px;
  flex-shrink: 0;
  cursor: default;
}
.l1-priority-tag.tier-critical { background: rgba(239, 68, 68, 0.18); }
.l1-priority-tag.tier-high     { background: rgba(251, 146, 60, 0.18); }
.l1-priority-tag.tier-medium   { background: rgba(251, 191, 36, 0.18); }
.l1-priority-tag.tier-low      { background: rgba(34, 197, 94, 0.18); }
.l1-priority-score {
  font-size: 11px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--text-2, #cbd5e1);
}

.l1-volume {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
  margin-left: 4px;
}
.l1-volume-bar {
  display: inline-block;
  width: 90px;
  height: 6px;
  background: rgba(148, 163, 184, 0.12);
  border-radius: 999px;
  overflow: hidden;
  position: relative;
}
.l1-volume-bar-fill {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, #34d399, #58e89c);
  border-radius: 999px;
  transition: width 0.3s ease;
}
.tree-node[data-tier="critical"] .l1-volume-bar-fill {
  background: linear-gradient(90deg, #ef4444, #f97316);
}
.tree-node[data-tier="high"] .l1-volume-bar-fill {
  background: linear-gradient(90deg, #f97316, #fbbf24);
}
.tree-node[data-tier="medium"] .l1-volume-bar-fill {
  background: linear-gradient(90deg, #fbbf24, #facc15);
}
.tree-node[data-tier="low"] .l1-volume-bar-fill {
  background: linear-gradient(90deg, #22c55e, #4ade80);
}

.l1-rollup-row {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: 6px;
  flex-shrink: 0;
  /* Sempre renderizado (mesmo vazio) pra reservar largura e evitar que
     os elementos à esquerda (selo, barra) saltem entre as linhas. */
  min-width: 130px;
  justify-content: flex-end;
}
.l1-rollup-pill {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 10px;
  font-weight: 600;
  padding: 2px 7px;
  border-radius: 999px;
  background: rgba(148, 163, 184, 0.14);
  color: var(--text-2);
  font-feature-settings: 'tnum';
}
.l1-rollup-pill.cards {
  background: rgba(139, 92, 246, 0.16);
  color: #c4b5fd;
}

/* Em telas estreitas, esconde rollup pra preservar legibilidade */
@media (max-width: 900px) {
  .l1-rollup-row { display: none; }
  .l1-volume-bar { width: 50px; }
}

.editais-anotacao-overlay {
  position: fixed;
  inset: 0;
  z-index: 1500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.editais-anotacao-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 18, 0.78);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.editais-anotacao-panel {
  position: relative;
  width: min(640px, 100%);
  max-height: 80vh;
  background: #fefce8;
  color: #422006;
  border: 1px solid rgba(133, 77, 14, 0.25);
  border-radius: 12px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.editais-anotacao-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  border-bottom: 1px solid rgba(133, 77, 14, 0.15);
  background: #fef3c7;
}
.editais-anotacao-pin {
  font-size: 22px;
  flex-shrink: 0;
  transform: rotate(-15deg);
}
.editais-anotacao-title {
  display: flex;
  gap: 10px;
  flex: 1;
  min-width: 0;
  align-items: center;
}
.editais-anotacao-title h2 {
  margin: 0;
  font-size: 15px;
  font-weight: 700;
  color: #422006;
}
.editais-anotacao-sub {
  font-size: 12px;
  color: #78350f;
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 480px;
}
.editais-anotacao-head .btn-icon {
  background: none;
  border: none;
  font-size: 16px;
  cursor: pointer;
  color: #78350f;
  width: 32px;
  height: 32px;
  border-radius: 6px;
}
.editais-anotacao-head .btn-icon:hover { background: rgba(133, 77, 14, 0.12); }
.editais-anotacao-body {
  flex: 1;
  padding: 14px 18px 8px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  overflow: hidden;
}
.editais-anotacao-textarea {
  flex: 1;
  min-height: 220px;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(133, 77, 14, 0.2);
  border-radius: 8px;
  padding: 12px 14px;
  font-family: inherit;
  font-size: 14px;
  line-height: 1.55;
  color: #422006;
  resize: vertical;
  outline: none;
}
.editais-anotacao-textarea:focus {
  border-color: #d97706;
  box-shadow: 0 0 0 2px rgba(217, 119, 6, 0.2);
}
.editais-anotacao-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 11px;
}
.editais-anotacao-status {
  color: #78350f;
  font-weight: 600;
}
.editais-anotacao-hint {
  color: #92400e;
  opacity: 0.7;
}
.editais-anotacao-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  padding: 12px 18px;
  border-top: 1px solid rgba(133, 77, 14, 0.15);
  background: rgba(254, 243, 199, 0.4);
}
.editais-anotacao-actions .btn-sm {
  font-size: 13px;
  padding: 6px 14px;
}

/* =====================================================================
   Modais de formulário do edital (Dados do edital, Peso das disciplinas)
   — tema escuro, mesmos tokens usados no resto do app (ver
   .editais-esteira-panel / questoes.css). Deliberadamente separado de
   .editais-anotacao-panel, que é o post-it amarelo da anotação livre por
   seção — esses aqui são formulários de configuração, não anotações.
   ===================================================================== */
.editais-form-overlay {
  position: fixed;
  inset: 0;
  z-index: 1500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.editais-form-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 18, 0.78);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.editais-form-panel {
  position: relative;
  width: min(640px, 100%);
  max-height: 80vh;
  background: var(--bg-0, #14161b);
  color: var(--text-1, #e6e8ec);
  border: 1px solid var(--border-soft, rgba(100,116,139,0.25));
  border-radius: 16px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.editais-form-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 18px 20px;
  border-bottom: 1px solid var(--border-soft, rgba(100,116,139,0.2));
}
.editais-form-icon { font-size: 20px; flex-shrink: 0; }
.editais-form-title-wrap {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1 1 auto;
  min-width: 0;
}
.editais-form-title-wrap h2 {
  margin: 0;
  font-size: 15px;
  font-weight: 700;
  color: var(--text-1, #e6e8ec);
}
.editais-form-sub {
  font-size: 12px;
  color: var(--text-3, #94a3b8);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.editais-form-head .btn-icon {
  background: none;
  border: none;
  font-size: 16px;
  cursor: pointer;
  color: var(--text-3, #94a3b8);
  width: 32px;
  height: 32px;
  border-radius: 6px;
  flex-shrink: 0;
}
.editais-form-head .btn-icon:hover { background: rgba(148,163,184,0.12); color: var(--text-1, #e6e8ec); }
.editais-form-body {
  flex: 1;
  padding: 16px 20px 8px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  overflow-y: auto;
}
.editais-form-body .form-label {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12px;
  color: var(--text-3, #94a3b8);
  font-weight: 600;
}
.editais-form-status {
  color: var(--text-2, #cbd5e1);
  font-weight: 600;
  font-size: 12px;
}
.editais-form-empty {
  color: var(--text-3, #94a3b8);
  font-size: 13px;
  margin: 8px 0;
}
.editais-form-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  padding: 14px 20px;
  border-top: 1px solid var(--border-soft, rgba(100,116,139,0.2));
}
.editais-form-actions .btn-sm {
  font-size: 13px;
  padding: 6px 14px;
}

/* --- Modal de peso por disciplina (openPesosModal) --- */
.editais-peso-lista {
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-height: 50vh;
  overflow-y: auto;
}
.editais-peso-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 6px 4px;
  border-bottom: 1px solid var(--border-soft, rgba(100,116,139,0.15));
}
.editais-peso-nome {
  font-size: 13px;
  color: var(--text-1, #e6e8ec);
  font-weight: 600;
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.editais-peso-input {
  /* flex-basis (via o shorthand `flex`) vence sobre `width` na
     sizing do eixo principal do flex, então isso ignora a guerra de
     especificidade com o `input[type="number"] { width: 100% }` global
     de base.css — sem precisar de !important. */
  flex: 0 0 72px;
  width: 72px;
  text-align: center;
}

/* --- Popover de tamanho do Simulado completo --- */
.editais-simulado-tamanhos {
  display: flex;
  gap: 8px;
  margin-top: 10px;
  flex-wrap: wrap;
}

/* =====================================================================
   Esteira de estudo — mapa visual guiado por tópico (Ler → Revisar →
   Treinar → Certificar). Tema escuro (não o "post-it" da anotação),
   reaproveita os mesmos tokens/fallbacks já usados em questoes.css pro
   modal de prática, pra ficar visualmente consistente entre os dois.
   ===================================================================== */
.editais-esteira-overlay {
  position: fixed;
  inset: 0;
  z-index: 1500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.editais-esteira-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 18, 0.78);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.editais-esteira-panel {
  position: relative;
  width: min(720px, 100%);
  max-height: 85vh;
  overflow-y: auto;
  background: var(--bg-0, #14161b);
  color: var(--text-1, #e6e8ec);
  border: 1px solid var(--border-soft, rgba(100,116,139,0.25));
  border-radius: 16px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
}
.editais-esteira-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  padding: 20px 24px 12px;
}
.editais-esteira-kicker {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 700;
  color: var(--accent, #2edb7f);
  margin-bottom: 4px;
}
.editais-esteira-title {
  margin: 0;
  font-size: 1.2rem;
  color: var(--text-1, #e6e8ec);
}
.editais-esteira-body {
  padding: 8px 24px 28px;
}

/* --- O mapa: 4 checkpoints conectados --- */
.editais-esteira-path {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 4px;
  margin: 24px 0 28px;
}
@media (max-width: 640px) {
  .editais-esteira-path { flex-direction: column; align-items: stretch; gap: 18px; }
}

.editais-esteira-step {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 6px;
  flex: 0 0 auto;
  width: 130px;
}
@media (max-width: 640px) {
  .editais-esteira-step { flex-direction: row; text-align: left; width: 100%; gap: 14px; }
}

.editais-esteira-node {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 2px solid var(--border-soft, rgba(100,116,139,0.4));
  background: var(--bg-2, #23262d);
  transition: all 0.2s ease;
  flex-shrink: 0;
}
.editais-esteira-node-icon { font-size: 24px; filter: grayscale(1); opacity: 0.5; }

.editais-esteira-node.is-feito,
.editais-esteira-node.is-aprovado {
  border-color: var(--accent, #2edb7f);
  background: linear-gradient(135deg, var(--accent, #2edb7f), #26c473);
  box-shadow: 0 0 0 4px rgba(46,219,127,0.15);
}
.editais-esteira-node.is-feito .editais-esteira-node-icon,
.editais-esteira-node.is-aprovado .editais-esteira-node-icon { filter: none; opacity: 1; }

.editais-esteira-node.is-em-andamento {
  border-color: #fbbf24;
  background: rgba(251,191,36,0.12);
}
.editais-esteira-node.is-em-andamento .editais-esteira-node-icon { filter: none; opacity: 0.85; }

.editais-esteira-node.is-reprovado {
  border-color: #f87171;
  background: rgba(248,113,113,0.12);
}
.editais-esteira-node.is-reprovado .editais-esteira-node-icon { filter: none; opacity: 0.85; }

.editais-esteira-node.is-proximo {
  animation: editais-esteira-pulse 1.8s ease-in-out infinite;
}
@keyframes editais-esteira-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(46,219,127,0.35); }
  50% { box-shadow: 0 0 0 8px rgba(46,219,127,0); }
}

/* Círculo do estágio como botão (Ler/Treinar/Certificar) — clica no
   ícone, abre a ação direto. Sem texto "Abrir" redundando o ícone que já
   está ali; hover/focus dão o feedback de "isso é clicável". */
.editais-esteira-node.is-clickable {
  cursor: pointer;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.editais-esteira-node.is-clickable:hover {
  transform: scale(1.08);
  box-shadow: 0 0 0 6px rgba(46,219,127,0.14);
}
.editais-esteira-node.is-clickable:active { transform: scale(0.96); }
.editais-esteira-node.is-clickable:focus-visible {
  outline: 2px solid var(--accent, #2edb7f);
  outline-offset: 3px;
}

.editais-esteira-step-label {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-1, #e6e8ec);
}
/* min-height reserva espaço pro PIOR caso (3 linhas ≈ 44.5px, medido) —
   o texto varia bastante de tamanho por estágio/status: "Lido
   (confirmado)" é 1 linha, mas "Disponível — ainda não revisou nenhum
   card, marque quando revisar" (Revisar pronto, ainda não confirmado)
   quebra em 3. Sem essa reserva igual pro pior caso, esse step ficava
   mais "alto" que os outros e tudo que vem depois (ações, checkbox de
   confirmação) desalinhava entre as colunas. */
.editais-esteira-step-sub {
  font-size: 11px;
  color: var(--text-3, #94a3b8);
  line-height: 1.35;
  min-height: 45px;
}

.editais-esteira-node-btn {
  margin-top: 2px;
  font-size: 11px;
  font-weight: 600;
  padding: 3px 10px;
  border-radius: 999px;
  border: 1px solid var(--border-soft, rgba(100,116,139,0.4));
  background: transparent;
  color: var(--text-2, #cbd5e1);
  cursor: pointer;
  transition: background 0.15s ease;
}
.editais-esteira-node-btn:hover { background: var(--bg-2, #23262d); }

/* Menu de escolha do Revisar — some por padrão (height:0) e só aparece
   quando o círculo do Revisar é clicado (.is-revisar-open), pra não
   ocupar espaço à toa. Os OUTROS 3 estágios têm esse mesmo slot vazio no
   DOM (ver render em editais_main.js) só pra poder crescer JUNTO via
   `:has()` abaixo — senão só o checkbox do Revisar descia ao abrir o
   menu, e o do Ler (que não tem nada pra abrir) ficava desalinhado.
   height (não max-height): um slot VAZIO só ocupa espaço de verdade com
   height fixo — max-height é só um teto, não força os vazios a crescer. */
.editais-esteira-step-actions-slot {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 0;
  overflow: hidden;
  margin-top: 0;
  transition: height 0.2s ease, margin-top 0.2s ease;
}
/* Folga confortável (não só os ~48px do card) — o hover dos cards de
   escolha levanta 1px (translateY), e com folga justa isso cortava o
   topo do ícone contra o overflow:hidden do slot. */
.editais-esteira-path:has(.editais-esteira-step.is-revisar-open) .editais-esteira-step-actions-slot {
  height: 56px;
  margin-top: 6px;
}

/* "Menu" de escolha do Revisar — 2 cards grandes de ícone (Cards/Galeria)
   em vez de pills de texto pequenas. A escolha entre os dois É a ação
   (não tem um "padrão" pra pular direto), por isso o círculo do Revisar
   só revela esses 2 cards em vez de navegar direto como os outros. */
.editais-esteira-choice-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  width: 58px;
  height: 48px;
  border-radius: 10px;
  border: 1px solid var(--border-soft, rgba(100,116,139,0.4));
  background: var(--bg-2, #23262d);
  color: var(--text-2, #cbd5e1);
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
}
.editais-esteira-choice-btn:hover {
  background: rgba(46,219,127,0.12);
  border-color: var(--accent, #2edb7f);
  transform: translateY(-1px);
}
.editais-esteira-choice-icon { font-size: 18px; line-height: 1; }
.editais-esteira-choice-label {
  font-size: 9px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.editais-esteira-connector {
  flex: 1 1 auto;
  height: 2px;
  margin-top: 27px;
  background: var(--border-soft, rgba(100,116,139,0.3));
  border-radius: 999px;
  min-width: 12px;
}
.editais-esteira-connector.is-filled {
  background: linear-gradient(90deg, var(--accent, #2edb7f), #26c473);
}
@media (max-width: 640px) {
  .editais-esteira-connector { display: none; }
}

.editais-esteira-continue {
  display: block;
  width: 100%;
  padding: 12px 16px;
  border-radius: 12px;
  border: none;
  background: linear-gradient(135deg, var(--accent, #2edb7f), #26c473);
  color: #06210f;
  font-weight: 700;
  font-size: 14px;
  cursor: pointer;
  transition: transform 0.15s ease;
}
.editais-esteira-continue:hover { transform: translateY(-1px); }
.editais-esteira-done {
  text-align: center;
  padding: 14px;
  border-radius: 12px;
  background: rgba(46,219,127,0.12);
  color: var(--accent, #2edb7f);
  font-weight: 700;
}

/* Checkbox de confirmação manual (Ler/Revisar) — existir nota/card só
   deixa a etapa "pronta"; isso aqui é o que vira "feito" de verdade. */
.editais-esteira-step-confirm {
  display: flex;
  align-items: center;
  gap: 5px;
  margin-top: 4px;
  font-size: 10px;
  color: var(--text-3, #94a3b8);
  cursor: pointer;
}
.editais-esteira-step-confirm input[type="checkbox"] {
  accent-color: var(--accent, #2edb7f);
  cursor: pointer;
}
.editais-esteira-step-confirm input:disabled { cursor: not-allowed; opacity: 0.4; }

.editais-esteira-tempo {
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px solid var(--border-soft, rgba(100,116,139,0.2));
  text-align: center;
  font-size: 12px;
  color: var(--text-3, #94a3b8);
}
.editais-esteira-tempo strong { color: var(--text-1, #e6e8ec); }

/* --- Modo Manutenção (pós-Certificar) — substitui o caminho de 4
   estágios por um selo de saúde do conhecimento + ações de reforço. */
.editais-esteira-manutencao {
  text-align: center;
  padding: 20px 16px;
  border-radius: 14px;
  border: 1px solid var(--border-soft, rgba(100,116,139,0.3));
  background: var(--bg-2, #23262d);
}
.editais-esteira-manutencao-selo { font-size: 40px; line-height: 1; margin-bottom: 8px; }
.editais-esteira-manutencao-titulo { font-size: 16px; font-weight: 700; color: var(--text-1, #e6e8ec); }
.editais-esteira-manutencao-sub { margin-top: 4px; font-size: 12px; color: var(--text-3, #94a3b8); }
.editais-esteira-manutencao-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 18px;
}
.editais-esteira-manutencao.is-fresca { border-color: rgba(46,219,127,0.3); }
.editais-esteira-manutencao.is-enfraquecendo { border-color: oklch(0.78 0.15 75 / 0.4); }
.editais-esteira-manutencao.is-esquecendo { border-color: oklch(0.68 0.18 27 / 0.4); }

/* --- Botão único "Estudar" na árvore (substitui notas/cards/questões/
   galeria/tempo em folhas — consolidado num só ponto de entrada pra
   esteira, com 4 pontinhos de status embutidos). --- */
.tree-estudar-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 2px 9px;
  border-radius: 999px;
  border: 1px solid var(--border-soft, rgba(100,116,139,0.35));
  background: rgba(100,116,139,0.12);
  color: var(--text-2, #cbd5e1);
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
  /* margin-left:auto + ser sempre o último item de .tree-name empurra o
     botão pro fim da coluna, numa posição consistente entre linhas — sem
     isso ele ficava logo depois do título, "escada" conforme o tamanho
     do nome do tópico variava linha a linha. */
  margin-left: auto;
  flex-shrink: 0;
  vertical-align: middle;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.tree-estudar-btn:hover { background: rgba(100,116,139,0.24); }
.tree-estudar-play {
  display: inline-flex;
  font-size: 9px;
  line-height: 1;
}
/* Pós-certificação o botão vira "Manter" e a cor reflete a saúde de
   manutenção (fresca/enfraquecendo/esquecendo) — mesma paleta oklch já
   usada nas faixas de heat-tier da árvore (linha ~1038-1042). */
.tree-estudar-btn.tier-fresca {
  border-color: var(--accent, #2edb7f);
  background: rgba(46,219,127,0.14);
  color: var(--accent, #2edb7f);
}
.tree-estudar-btn.tier-enfraquecendo {
  border-color: oklch(0.78 0.15 75);
  background: oklch(0.78 0.15 75 / 0.16);
  color: oklch(0.85 0.15 75);
}
.tree-estudar-btn.tier-esquecendo {
  border-color: oklch(0.68 0.18 27);
  background: oklch(0.68 0.18 27 / 0.16);
  color: oklch(0.78 0.18 27);
}
.tree-estudar-dots {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
.tree-esteira-mini-seg {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--text-4, #64748b);
  opacity: 0.5;
}
.tree-esteira-mini-seg.is-pronto { background: #fbbf24; opacity: 0.7; }
.tree-esteira-mini-seg.is-feito,
.tree-esteira-mini-seg.is-aprovado { background: var(--accent, #2edb7f); opacity: 1; }
.tree-esteira-mini-seg.is-em-andamento { background: #fbbf24; opacity: 1; }
.tree-esteira-mini-seg.is-reprovado { background: #f87171; opacity: 1; }

/* --- Item de destaque no menu de contexto --- */
.editais-ctx-esteira-btn {
  color: var(--accent, #2edb7f) !important;
  font-weight: 700;
}

/* =====================================================================
   Links externos — badge na árvore + botão + modal
   ===================================================================== */
.tree-links-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: linear-gradient(135deg, rgba(168, 85, 247, 0.25), rgba(168, 85, 247, 0.15));
  color: #e9d5ff;
  border: 1px solid rgba(168, 85, 247, 0.5);
  padding: 2px 10px;
  border-radius: 999px;
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
  cursor: pointer;
  flex-shrink: 0;
  box-shadow: 0 0 0 2px rgba(168, 85, 247, 0.08), 0 2px 6px rgba(168, 85, 247, 0.18);
  transition: transform 0.12s ease, background 0.12s ease, box-shadow 0.15s ease;
}
.tree-links-badge:hover {
  transform: translateY(-1px) scale(1.05);
  background: linear-gradient(135deg, rgba(168, 85, 247, 0.4), rgba(168, 85, 247, 0.25));
  box-shadow: 0 0 0 2px rgba(168, 85, 247, 0.16), 0 4px 12px rgba(168, 85, 247, 0.32);
}
.tree-links-badge svg { width: 12px; height: 12px; stroke-width: 2.4; color: #d8b4fe; }
.tree-links-badge strong { color: #ffffff; font-weight: 800; }

/* Botão de links: cinza quando vazio, roxo brilhante quando há links */
.tree-actions button.links-btn svg { width: 14px; height: 14px; color: var(--text-3); transition: color 0.12s ease; }
.tree-actions button.links-btn:hover { background: rgba(168, 85, 247, 0.18); border-color: rgba(168, 85, 247, 0.4); }
.tree-actions button.links-btn:hover svg { color: #d8b4fe; }
/* Estado "tem links": botão fica destacado mesmo sem hover */
.tree-actions button.links-btn.has-links {
  background: rgba(168, 85, 247, 0.18);
  border-color: rgba(168, 85, 247, 0.5);
  box-shadow: 0 0 0 1px rgba(168, 85, 247, 0.15);
}
.tree-actions button.links-btn.has-links svg { color: #d8b4fe; }
.tree-actions button.links-btn.has-links:hover { background: rgba(168, 85, 247, 0.32); border-color: rgba(168, 85, 247, 0.7); }
.tree-actions button.links-btn.has-links:hover svg { color: #ffffff; }

.editais-links-overlay {
  position: fixed;
  inset: 0;
  z-index: 1500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.editais-links-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 18, 0.78);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.editais-links-panel {
  position: relative;
  width: min(680px, 100%);
  max-height: 80vh;
  background: var(--bg-1);
  border: 1px solid var(--border-1);
  border-radius: 12px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.editais-links-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--border-1);
  background: rgba(7, 11, 20, 0.5);
}
.editais-links-icon {
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
  background: rgba(168, 85, 247, 0.18);
  color: #d8b4fe;
  flex-shrink: 0;
}
.editais-links-icon svg { width: 16px; height: 16px; }
.editais-links-title {
  display: flex;
  gap: 10px;
  flex: 1;
  min-width: 0;
  align-items: center;
}
.editais-links-title h2 {
  margin: 0;
  font-size: 15px;
  font-weight: 700;
  color: var(--text-1);
}
.editais-links-sub {
  font-size: 12px;
  color: var(--text-3);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 480px;
}
.editais-links-head .btn-icon {
  background: none;
  border: none;
  font-size: 16px;
  cursor: pointer;
  color: var(--text-2);
  width: 32px;
  height: 32px;
  border-radius: 6px;
}
.editais-links-head .btn-icon:hover { background: var(--bg-2); color: var(--text-1); }
.editais-links-body {
  flex: 1;
  padding: 14px 18px;
  overflow-y: auto;
}
.editais-links-loading {
  color: var(--text-3);
  text-align: center;
  padding: 20px;
  font-style: italic;
}
.editais-links-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.editais-link-row {
  display: flex;
  gap: 8px;
  align-items: center;
}

/* Detecção automática de tipo de link — ícone/favicon na esquerda */
.editais-link-typebox {
  width: 32px;
  height: 32px;
  border-radius: 6px;
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  transition: background 0.15s ease, border-color 0.15s ease;
  overflow: hidden;
  color: var(--text-2);
}
.editais-link-typebox svg { width: 16px; height: 16px; }
.editais-link-typebox img.link-favicon {
  width: 18px;
  height: 18px;
  border-radius: 3px;
  display: block;
}
.editais-link-typebox[data-kind="youtube"] {
  background: rgba(239, 68, 68, 0.12);
  border-color: rgba(239, 68, 68, 0.32);
}
.editais-link-typebox[data-kind="youtube"] svg { color: #ef4444; }
.editais-link-typebox[data-kind="vimeo"] {
  background: rgba(56, 189, 248, 0.12);
  border-color: rgba(56, 189, 248, 0.32);
}
.editais-link-typebox[data-kind="vimeo"] svg { color: #38bdf8; }
.editais-link-typebox[data-kind="pdf"] {
  background: rgba(244, 114, 182, 0.12);
  border-color: rgba(244, 114, 182, 0.32);
}
.editais-link-typebox[data-kind="pdf"] svg { color: #f472b6; }
.editais-link-typebox[data-kind="lei"] {
  background: rgba(251, 191, 36, 0.12);
  border-color: rgba(251, 191, 36, 0.32);
}
.editais-link-typebox[data-kind="lei"] svg { color: #fbbf24; }
.editais-link-typebox[data-kind="invalid"] {
  background: rgba(239, 68, 68, 0.08);
  border-color: rgba(239, 68, 68, 0.25);
}
.editais-link-typebox[data-kind="invalid"] svg { color: rgba(239, 68, 68, 0.6); }

.editais-link-label,
.editais-link-url {
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  border-radius: 6px;
  padding: 7px 10px;
  font: inherit;
  font-size: 13px;
  color: var(--text-1);
  outline: none;
  transition: border-color 0.12s ease;
}
/* flex-basis explícito (não width) — base.css tem `input[type="text"]/[type="url"]
   { width: 100% }` com especificidade maior que uma classe única, e flex-basis
   tem prioridade sobre width no cálculo de tamanho do item flex, então isso
   evita a guerra de especificidade sem precisar de !important. */
.editais-link-label { flex: 0 0 180px; width: 180px; }
.editais-link-url { flex: 1 1 0%; min-width: 0; }
.editais-link-label:focus,
.editais-link-url:focus {
  border-color: rgba(168, 85, 247, 0.5);
  box-shadow: 0 0 0 2px rgba(168, 85, 247, 0.15);
}
.editais-link-btn {
  /* padding: 0 é necessário — base.css define `button { padding: 0.6rem 1.2rem }`
     global, e com box-sizing:border-box esse padding sozinho já passa dos
     32px de largura do botão, zerando o espaço pro ícone (o svg, item flex
     no eixo principal, encolhia pra 0 de largura por falta de espaço). */
  padding: 0;
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  border-radius: 6px;
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--text-2);
  flex-shrink: 0;
  transition: background 0.12s ease, color 0.12s ease;
}
.editais-link-btn svg { width: 15px; height: 15px; flex-shrink: 0; }
.editais-link-btn--open:hover {
  background: rgba(46, 219, 127, 0.18);
  color: #34d399;
  border-color: rgba(46, 219, 127, 0.45);
}
.editais-link-btn--remove:hover {
  background: rgba(239, 68, 68, 0.18);
  color: #fca5a5;
  border-color: rgba(239, 68, 68, 0.45);
}
.editais-links-add-row {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px dashed var(--border-1);
}
.editais-links-add-row .btn-sm {
  font-size: 12px;
  padding: 6px 12px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.editais-links-add-row .btn-sm svg { width: 13px; height: 13px; }
.editais-links-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  padding: 12px 18px;
  border-top: 1px solid var(--border-1);
  background: rgba(7, 11, 20, 0.5);
}
.editais-links-status {
  font-size: 11px;
  color: var(--text-3);
  font-weight: 600;
}
.editais-links-actions .btn-sm {
  font-size: 13px;
  padding: 6px 14px;
}

@media (max-width: 640px) {
  .editais-link-row { flex-wrap: wrap; }
  .editais-link-label { flex: 1 1 100%; width: 100%; }
  .editais-link-url { flex: 1 1 0%; min-width: 0; }
}

.tree-counter {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-3);
  font-feature-settings: 'tnum';
  min-width: 56px;
  text-align: right;
  font-weight: 600;
  flex-shrink: 0;
}

/* Estrelas de relevância — só em folhas. 3 botoes inline.
   Hover progressivo: hover na 2a estrela preenche 1+2 visualmente. */
.tree-stars {
  display: inline-flex;
  gap: 2px;
  flex-shrink: 0;
  margin-right: 6px;
  opacity: 0.4;
  transition: opacity 0.15s ease;
}
.tree-node:hover .tree-stars,
.tree-stars[data-rel="1"],
.tree-stars[data-rel="2"],
.tree-stars[data-rel="3"] { opacity: 1; }

.tree-star {
  background: none;
  border: none;
  cursor: pointer;
  font-size: 16px;
  line-height: 1;
  padding: 2px 1px;
  color: rgba(148, 163, 184, 0.35);
  transition: color 0.12s ease, transform 0.1s ease;
}
.tree-star:hover { transform: scale(1.15); }
.tree-star.is-filled { color: #fbbf24; }

/* Tints por nivel — leve sombreamento no nó pra orientar olho */
.tree-node[data-relevancia="1"] { box-shadow: inset 3px 0 0 rgba(239, 68, 68, 0.5); }
.tree-node[data-relevancia="2"] { box-shadow: inset 3px 0 0 rgba(245, 158, 11, 0.5); }
.tree-node[data-relevancia="3"] { box-shadow: inset 3px 0 0 rgba(34, 197, 94, 0.5); }

.tree-note-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: oklch(0.72 0.12 240 / 0.14);
  color: var(--info);
  border: 1px solid oklch(0.72 0.12 240 / 0.3);
  padding: 2px 8px;
  border-radius: 999px;
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
  cursor: pointer;
  flex-shrink: 0;
}
.tree-note-badge svg {
  width: 12px;
  height: 12px;
  stroke-width: 2.2;
  color: #34d399;
}
/* Botão de notas no tree-actions e pill rollup do L1 também usam o ícone (azul) */
.tree-actions button.note-btn svg {
  width: 14px;
  height: 14px;
  color: #34d399;
}
.tree-actions button.note-btn:hover svg { color: #ffffff; }
.l1-rollup-pill svg {
  width: 11px;
  height: 11px;
  color: #34d399;
}

/* Badge "📚 GPS" — nó já foi exportado pro GPS de Estudo */
.tree-gps-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: oklch(0.74 0.16 152 / 0.16);
  color: oklch(0.85 0.12 152);
  border: 1px solid oklch(0.74 0.16 152 / 0.4);
  padding: 1px 6px;
  border-radius: 999px;
  font-family: var(--font-mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.04em;
  flex-shrink: 0;
}

.tree-gps-badge.partial {
  background: oklch(0.78 0.15 75 / 0.18);
  color: oklch(0.88 0.13 75);
  border-color: oklch(0.78 0.15 75 / 0.45);
}

.tree-gps-badge.full {
  background: oklch(0.74 0.16 152 / 0.22);
  color: oklch(0.92 0.14 152);
  border-color: oklch(0.74 0.16 152 / 0.6);
}

.tree-actions {
  display: flex;
  gap: 6px;
  opacity: 0;
  transition: opacity 120ms;
  flex-shrink: 0;
  align-items: center;
  margin-left: 8px;
}

.tree-node:hover .tree-actions { opacity: 1; }

/* Base unificada de TODOS os botões de ação. Altura/raio consistentes.
   Botões icon-only ficam quadrados (28x28); com texto, expandem com padding. */
.tree-actions button {
  background: var(--bg-3);
  border: 1px solid var(--border-subtle);
  color: var(--text-2);
  min-width: 28px;
  height: 28px;
  padding: 0 8px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 12px;
  font-weight: 600;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  white-space: nowrap;
  transition: background 120ms, color 120ms, border-color 120ms, transform 100ms;
  font-family: inherit;
}
.tree-actions button:hover {
  background: var(--accent);
  color: var(--accent-fg);
  border-color: var(--accent);
}
.tree-actions button:active { transform: translateY(1px); }

/* Icon-only buttons: padding zero pra ficar quadrado 28x28 */
.tree-actions button.note-btn,
.tree-actions button.anotacao-btn,
.tree-actions button.cards-btn,
.tree-actions button.images-btn {
  padding: 0;
  width: 28px;
}

.tree-actions button.note-btn:hover {
  background: var(--info);
  color: white;
  border-color: var(--info);
}
.tree-actions button.anotacao-btn:hover {
  background: rgba(251, 191, 36, 0.85);
  color: #422006;
  border-color: rgba(251, 191, 36, 0.85);
}
.tree-actions button.cards-btn:hover {
  background: rgba(139, 92, 246, 0.85);
  color: white;
  border-color: rgba(139, 92, 246, 0.85);
}
/* Galeria de imagens do tópico — mesmo papel do botão 🖼️ do GPS: sempre
   visível (não só quando já tem imagem), abre o modal já pronto pra colar
   (Ctrl+V) ou arrastar, sem precisar do menu de contexto. */
.tree-actions button.images-btn:hover {
  background: rgba(45, 212, 191, 0.85);
  color: #042f2e;
  border-color: rgba(45, 212, 191, 0.85);
}
.tree-actions button.images-btn.has-images {
  border-color: rgba(45, 212, 191, 0.5);
  color: #5eead4;
}

/* Botão "+" universal (todos os níveis) — abre popover com opções
   subitem-dentro / irmão-abaixo. Icon-only, mesma base 28x28 do bloco. */
.tree-actions button.add-node-btn {
  padding: 0;
  width: 28px;
  background: transparent;
  border-color: rgba(46, 219, 127, 0.35);
  color: #58e89c;
  font-size: 16px;
  font-weight: 700;
  line-height: 1;
}
.tree-actions button.add-node-btn:hover {
  background: rgba(46, 219, 127, 0.18);
  color: #a5f3fc;
  border-color: rgba(46, 219, 127, 0.6);
}

/* Popover de escolha (Subitem / Irmão) */
.editais-add-popover {
  width: 280px;
  background: var(--bg-1);
  border: 1px solid var(--border-1);
  border-radius: 10px;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.5);
  padding: 6px;
  font-size: 13px;
}
.editais-add-popover-head {
  padding: 8px 10px 10px;
  font-size: 11px;
  color: var(--text-3);
  border-bottom: 1px solid var(--border-1);
  margin-bottom: 4px;
  line-height: 1.3;
}
.editais-add-popover-head strong {
  color: var(--text-1);
  font-size: 12px;
  display: block;
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.editais-add-popover-opt {
  display: flex;
  width: 100%;
  align-items: flex-start;
  gap: 10px;
  padding: 9px 10px;
  background: none;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  text-align: left;
  color: var(--text-1);
  transition: background 0.12s ease;
  font-family: inherit;
}
.editais-add-popover-opt:hover {
  background: rgba(46, 219, 127, 0.12);
}
.editais-add-popover-opt .ico {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  flex-shrink: 0;
  border-radius: 6px;
  background: rgba(46, 219, 127, 0.16);
  color: #58e89c;
}
.editais-add-popover-opt .ico svg { width: 14px; height: 14px; }
.editais-add-popover-opt strong {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: 2px;
}
.editais-add-popover-opt small {
  display: block;
  font-size: 11px;
  color: var(--text-3);
  line-height: 1.3;
}

/* Botão "📚 GPS" — tem texto, mesma base + cor distinta */
.tree-actions button.gps-push-btn {
  font-size: 11px;
  font-family: var(--font-mono);
  letter-spacing: 0.02em;
}
.tree-actions button.gps-push-btn:hover {
  background: oklch(0.74 0.16 152);
  color: oklch(0.16 0.04 152);
  border-color: oklch(0.74 0.16 152);
}

/* Botão apagar inline (lixeira) — só destaca em vermelho no hover */
.tree-actions button.delete-node-btn { padding: 0; width: 28px; }
.tree-actions button.delete-node-btn svg { width: 14px; height: 14px; }
.tree-actions button.delete-node-btn:hover {
  background: rgba(239, 68, 68, 0.18);
  color: #fca5a5;
  border-color: rgba(239, 68, 68, 0.5);
}
.tree-actions button.delete-node-btn:hover svg { color: #fca5a5; }

/* ============================================================
   DRAG-AND-DROP — grab handle + drop indicators
   ============================================================ */
.tree-grab {
  display: inline-flex;
  align-items: center;
  width: 14px;
  font-size: 12px;
  color: rgba(148, 163, 184, 0.35);
  cursor: grab;
  user-select: none;
  flex-shrink: 0;
  opacity: 0;
  transition: opacity 0.12s ease, color 0.12s ease;
  font-family: var(--font-mono);
  margin-right: 2px;
}
.tree-node:hover .tree-grab { opacity: 1; }
.tree-grab:hover { color: #34d399; }
.tree-grab:active { cursor: grabbing; }
.tree-node.is-dragging {
  opacity: 0.45;
  background: rgba(46, 219, 127, 0.06) !important;
}

/* Drop indicators */
.tree-node.is-drop-above {
  box-shadow: inset 0 3px 0 0 #34d399;
}
.tree-node.is-drop-below {
  box-shadow: inset 0 -3px 0 0 #34d399;
}
.tree-node.is-drop-inside {
  background: rgba(46, 219, 127, 0.18) !important;
  outline: 1px dashed #34d399;
  outline-offset: -1px;
}

/* ============================================================
   BULK SELECTION — checkbox selecionado + bottom bar flutuante
   ============================================================ */
.tree-checkbox.is-bulk-selected {
  background: rgba(46, 219, 127, 0.32);
  border-color: #34d399;
  box-shadow: 0 0 0 2px rgba(46, 219, 127, 0.25);
}
.tree-checkbox.is-bulk-selected::after {
  content: '☑';
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  color: #34d399;
  pointer-events: none;
}

.editais-bulk-bar {
  position: fixed;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  z-index: 1400;
  background: var(--bg-1);
  border: 1px solid var(--border-1);
  border-radius: 14px;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(46, 219, 127, 0.2);
  padding: 10px 14px;
  display: flex;
  align-items: center;
  gap: 14px;
  font-size: 13px;
  animation: bulkBarSlide 0.18s ease-out;
}
@keyframes bulkBarSlide {
  from { opacity: 0; transform: translate(-50%, 10px); }
  to { opacity: 1; transform: translate(-50%, 0); }
}
.editais-bulk-count {
  font-size: 12px;
  color: var(--text-2);
  white-space: nowrap;
  padding-right: 12px;
  border-right: 1px solid var(--border-1);
}
.editais-bulk-count strong {
  color: #34d399;
  font-size: 14px;
}
.editais-bulk-actions {
  display: flex;
  gap: 6px;
  align-items: center;
}
.bulk-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  color: var(--text-1);
  font-size: 12px;
  font-weight: 600;
  padding: 6px 10px;
  border-radius: 6px;
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.12s ease, border-color 0.12s ease;
  font-family: inherit;
}
.bulk-btn svg { width: 13px; height: 13px; }
.bulk-btn:hover { background: var(--bg-3); }
.bulk-btn.bulk-mark { color: #4ade80; border-color: rgba(74, 222, 128, 0.4); }
.bulk-btn.bulk-mark:hover { background: rgba(74, 222, 128, 0.18); }
.bulk-btn.bulk-unmark { color: var(--text-3); }
.bulk-btn.bulk-delete { color: #fca5a5; border-color: rgba(239, 68, 68, 0.4); }
.bulk-btn.bulk-delete:hover { background: rgba(239, 68, 68, 0.18); }
.bulk-btn.bulk-clear { padding: 6px 8px; }

.bulk-rel-group {
  display: inline-flex;
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  border-radius: 6px;
  padding: 2px;
  gap: 2px;
}
.bulk-rel-btn {
  background: none;
  border: none;
  color: var(--text-3);
  font-size: 11px;
  font-weight: 700;
  padding: 4px 8px;
  border-radius: 4px;
  cursor: pointer;
  line-height: 1;
  font-family: inherit;
}
.bulk-rel-btn:hover { background: var(--bg-3); color: #fbbf24; }
.bulk-rel-btn[data-nivel="0"]:hover { color: var(--text-1); }

@media (max-width: 720px) {
  .editais-bulk-bar {
    left: 8px;
    right: 8px;
    transform: none;
    bottom: 8px;
    padding: 8px 10px;
    flex-wrap: wrap;
    gap: 8px;
  }
  .editais-bulk-count {
    border-right: none;
    padding-right: 0;
    width: 100%;
  }
  .bulk-btn { padding: 5px 8px; font-size: 11px; }
}

/* ============================================================
   Popover: notas vinculadas (criar/vincular)
============================================================ */
.editais-popover-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  backdrop-filter: blur(2px);
  z-index: 9000;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 80px 16px 16px;
  animation: editais-fade 140ms ease;
}

@keyframes editais-fade {
  from { opacity: 0; }
  to { opacity: 1; }
}

.editais-popover {
  width: 540px;
  max-width: 100%;
  max-height: calc(100vh - 100px);
  background: var(--bg-1);
  border: 1px solid var(--border-strong);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  animation: editais-pop 160ms ease;
}

@keyframes editais-pop {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

.editais-popover-header {
  padding: 14px 18px;
  border-bottom: 1px solid var(--border-subtle);
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
}

.editais-popover-header h4 {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-1);
  margin: 0;
}

.editais-popover-header .ctx {
  font-size: 11px;
  color: var(--text-3);
  margin-top: 2px;
  font-family: var(--font-mono);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 380px;
}

.editais-popover-close {
  background: transparent;
  border: 0;
  color: var(--text-3);
  cursor: pointer;
  font-size: 16px;
  width: 24px;
  height: 24px;
  border-radius: 6px;
  font-family: inherit;
  line-height: 1;
  flex-shrink: 0;
}

.editais-popover-close:hover {
  background: var(--bg-2);
  color: var(--text-1);
}

.editais-popover-search {
  padding: 12px 14px 8px;
  border-bottom: 1px solid var(--border-subtle);
}

.editais-popover-search-input {
  width: 100%;
  background: var(--bg-3);
  border: 1px solid var(--border-subtle);
  border-radius: var(--r-md);
  padding: 9px 14px;
  color: var(--text-1);
  font-size: 13px;
  font-family: inherit;
}

.editais-popover-search-input:focus {
  outline: none;
  border-color: var(--accent);
}

.editais-popover-section {
  font-family: var(--font-mono);
  font-size: 9px;
  color: var(--text-4);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  padding: 10px 18px 4px;
  font-weight: 700;
}

.editais-popover-results {
  flex: 1;
  overflow-y: auto;
  padding: 4px 0 8px;
}

.editais-popover-result {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 14px;
  cursor: pointer;
  transition: background 100ms;
  border: 0;
  background: transparent;
  width: 100%;
  text-align: left;
  font-family: inherit;
  color: inherit;
}

.editais-popover-result:hover,
.editais-popover-result.is-active {
  background: var(--bg-2);
}

.editais-popover-result .icon {
  width: 28px;
  height: 28px;
  border-radius: 7px;
  background: var(--bg-3);
  color: var(--text-2);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  flex-shrink: 0;
}

.editais-popover-result .info {
  flex: 1;
  min-width: 0;
}

.editais-popover-result .title {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.editais-popover-result .folder {
  font-size: 11px;
  color: var(--text-4);
  font-family: var(--font-mono);
  margin-top: 2px;
}

.editais-popover-result.is-clickable { cursor: pointer; }

.editais-popover-result .open-hint {
  font-family: var(--font-mono);
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-4);
  opacity: 0;
  transition: opacity 120ms;
  align-self: center;
}

.editais-popover-result.is-clickable:hover .open-hint,
.editais-popover-result.is-clickable:focus-visible .open-hint {
  opacity: 1;
  color: var(--accent);
}

.editais-popover-result .actions {
  display: flex;
  gap: 4px;
  flex-shrink: 0;
  align-items: center;
}

.editais-popover-result .actions button {
  background: var(--bg-3);
  border: 1px solid var(--border-subtle);
  color: var(--text-3);
  width: 26px;
  height: 26px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: inherit;
  transition: background 120ms, color 120ms, border-color 120ms;
}

.editais-popover-result .actions button:hover {
  background: var(--danger);
  color: white;
  border-color: var(--danger);
}

.editais-popover-result.create-new {
  background: var(--accent-soft);
  border-top: 1px solid var(--border-subtle);
}

.editais-popover-result.create-new:hover {
  background: oklch(0.74 0.16 152 / 0.22);
}

.editais-popover-result.create-new .icon {
  background: var(--accent);
  color: var(--accent-fg);
}

.editais-popover-result.create-new .title { color: var(--accent-strong); }

.editais-popover-empty {
  padding: 24px 18px;
  text-align: center;
  color: var(--text-3);
  font-size: 12px;
}

.editais-popover-footer {
  padding: 10px 14px;
  background: var(--bg-2);
  border-top: 1px solid var(--border-subtle);
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--text-4);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
}

.editais-popover-footer kbd {
  background: var(--bg-3);
  border: 1px solid var(--border-subtle);
  padding: 1px 5px;
  border-radius: 3px;
  font-size: 9px;
  margin: 0 2px;
  color: var(--text-2);
}

/* ============================================================
   Editor de estrutura (Workflowy-style)
============================================================ */
.editais-editor-toolbar {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: var(--r-md);
  padding: 8px 12px;
  margin-bottom: 14px;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.editais-editor-toolbar button {
  background: transparent;
  border: 0;
  color: var(--text-2);
  padding: 5px 10px;
  border-radius: var(--r-sm);
  cursor: pointer;
  font-size: 12px;
  font-family: inherit;
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.editais-editor-toolbar button:hover {
  background: var(--bg-3);
  color: var(--text-1);
}

.editais-editor-toolbar .spacer { flex: 1; }

.editais-editor-toolbar .info {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--text-4);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.editais-editor-toolbar .info strong { color: var(--accent); }

/* Botões de filtro de nível visível */
.editor-view-modes {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  background: var(--bg-2);
  border: 1px solid var(--border-subtle);
  border-radius: var(--r-sm);
  padding: 2px;
  margin-left: 4px;
}

.editor-view-modes button {
  background: transparent !important;
  border: 0 !important;
  padding: 4px 8px !important;
  border-radius: 4px !important;
  font-size: 11px !important;
  font-family: var(--font-mono) !important;
  color: var(--text-3) !important;
  cursor: pointer;
  letter-spacing: 0.04em;
  transition: background 120ms, color 120ms;
}

.editor-view-modes button:hover {
  background: var(--bg-3) !important;
  color: var(--text-1) !important;
}

.editor-view-modes button.active {
  background: var(--accent) !important;
  color: var(--accent-fg) !important;
}

/* Linhas ocultas pelo filtro de nível */
.editor-row.is-hidden { display: none; }

/* Badge de "+N filhos ocultos" */
.row-collapsed-count {
  display: inline-flex;
  align-items: center;
  background: var(--bg-3);
  border: 1px solid var(--border-subtle);
  color: var(--text-3);
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 600;
  padding: 1px 7px;
  border-radius: 999px;
  margin-left: 6px;
  flex-shrink: 0;
  letter-spacing: 0.04em;
}

.editais-editor-tree {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  padding: 8px 0;
  margin-bottom: 14px;
}

.editor-row {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 4px 16px;
  cursor: text;
  transition: background 100ms;
  position: relative;
}

.editor-row:hover { background: var(--bg-2); }

/* Indentação progressiva por nível + headings com destaque visual */
.editor-row[data-level="1"] {
  padding-left: 16px;
  padding-top: 18px;
  padding-bottom: 10px;
  margin-top: 6px;
  border-top: 1px solid var(--border-subtle);
  cursor: default;
}

.editor-row[data-level="1"]:first-child {
  border-top: 0;
  margin-top: 0;
  padding-top: 12px;
}

.editor-row[data-level="2"] {
  padding-left: 44px;
  padding-top: 14px;
  padding-bottom: 6px;
  cursor: default;
}

/* Passo de recuo CONSISTENTE (~28px/nível) pra a hierarquia ser claramente
   visível — antes L2 ficava só +8px de L1 e mal dava pra perceber o subtópico. */
.editor-row[data-level="3"] { padding-left: 72px; }
.editor-row[data-level="4"] { padding-left: 100px; }
.editor-row[data-level="5"] { padding-left: 128px; }
.editor-row[data-level="6"] { padding-left: 156px; }
.editor-row[data-level="7"] { padding-left: 184px; }
.editor-row[data-level="8"] { padding-left: 212px; }

.editor-row[data-level="1"] .row-bullet,
.editor-row[data-level="2"] .row-bullet {
  display: none;
}

/* Bullets visíveis (L3 e L4): círculos com cor consistente do Obsidian */
.row-bullet {
  color: var(--text-3);
  font-size: 11px;
  width: 14px;
  text-align: center;
  flex-shrink: 0;
  line-height: 1;
  user-select: none;
}

.editor-row[data-level="3"] .row-bullet {
  color: var(--accent);
  font-size: 12px;
}

/* Inputs: tipografia escalonada por nível */
.editable-input {
  flex: 1;
  background: transparent;
  border: 0;
  color: var(--text-1);
  font-size: 14px;
  font-family: inherit;
  padding: 4px 6px;
  border-radius: 4px;
  outline: none;
  min-width: 0;
  line-height: 1.5;
}

.editor-row[data-level="1"] .editable-input {
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.025em;
  color: var(--text-1);
  padding: 2px 6px;
}

.editor-row[data-level="2"] .editable-input {
  font-size: 17px;
  font-weight: 700;
  letter-spacing: -0.015em;
  color: var(--text-1);
  padding: 2px 6px;
}

.editor-row[data-level="3"] .editable-input {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-1);
}

.editor-row[data-level="4"] .editable-input {
  font-size: 13px;
  font-weight: 400;
  color: var(--text-2);
}

.editor-row[data-level="5"] .editable-input,
.editor-row[data-level="6"] .editable-input,
.editor-row[data-level="7"] .editable-input,
.editor-row[data-level="8"] .editable-input {
  font-size: 12px;
  font-weight: 400;
  color: var(--text-3);
}

.editable-input:focus {
  background: var(--bg-3);
  box-shadow: 0 0 0 1px var(--accent);
}

.editor-row .quick-actions {
  display: flex;
  gap: 2px;
  opacity: 0;
  transition: opacity 120ms;
  flex-shrink: 0;
}

.editor-row:hover .quick-actions { opacity: 1; }

.quick-actions button {
  background: transparent;
  border: 0;
  color: var(--text-3);
  width: 24px;
  height: 24px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 12px;
  font-family: inherit;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.quick-actions button:hover {
  background: var(--bg-3);
  color: var(--text-1);
}

.editais-editor-shortcuts {
  margin-top: 6px;
  padding: 10px 14px;
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: var(--r-md);
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--text-3);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  display: flex;
  gap: 18px;
  flex-wrap: wrap;
}

.editais-editor-shortcuts kbd {
  background: var(--bg-3);
  border: 1px solid var(--border-subtle);
  padding: 1px 5px;
  border-radius: 3px;
  font-size: 9px;
  margin: 0 2px;
  color: var(--text-2);
}

/* ============================================================
   Cadastro: seletor de modos + form
============================================================ */
.editais-creator-modes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-bottom: 24px;
}

.editais-creator-mode {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  padding: 16px 18px;
  cursor: pointer;
  transition: border-color 140ms, background 140ms;
  text-align: left;
  font-family: inherit;
  color: inherit;
}

.editais-creator-mode:hover { border-color: var(--border-soft); }

.editais-creator-mode.is-active {
  border-color: var(--accent);
  background: var(--accent-soft);
}

.editais-creator-mode .cm-icon {
  width: 36px;
  height: 36px;
  border-radius: 10px;
  background: var(--bg-2);
  color: var(--text-2);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  margin-bottom: 10px;
  border: 1px solid var(--border-subtle);
  transition: background 140ms, color 140ms, border-color 140ms;
}

.editais-creator-mode.is-active .cm-icon {
  background: var(--accent);
  color: var(--accent-fg);
  border-color: var(--accent);
}

.editais-creator-mode .cm-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-1);
  margin-bottom: 4px;
}

.editais-creator-mode .cm-desc {
  font-size: 12px;
  color: var(--text-3);
  line-height: 1.5;
}

/* form */
.editais-form { display: flex; flex-direction: column; }

.editais-form .form-grid-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.editais-form .form-field { margin-bottom: 14px; }

.editais-form .form-label {
  display: block;
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-3);
  margin-bottom: 6px;
}

.editais-form .form-input,
.editais-form .form-textarea {
  width: 100%;
  background: var(--bg-3);
  border: 1px solid var(--border-subtle);
  border-radius: var(--r-md);
  padding: 9px 12px;
  color: var(--text-1);
  font-size: 13px;
  font-family: inherit;
  transition: border-color 120ms, background 120ms;
}

.editais-form .form-input:focus,
.editais-form .form-textarea:focus {
  outline: none;
  border-color: var(--accent);
  background: var(--bg-2);
}

.editais-form .form-textarea {
  min-height: 240px;
  font-family: var(--font-mono);
  font-size: 12px;
  line-height: 1.7;
  resize: vertical;
}

.editais-form .form-help {
  font-size: 11px;
  color: var(--text-4);
  margin-top: 5px;
  line-height: 1.5;
}

.editais-form .form-help code {
  font-family: var(--font-mono);
  background: var(--bg-2);
  padding: 1px 6px;
  border-radius: 4px;
  font-size: 10px;
  color: var(--text-2);
}

.editais-form .form-actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
  margin-top: 22px;
}

.editais-form .form-error {
  background: oklch(0.68 0.18 27 / 0.12);
  border: 1px solid oklch(0.68 0.18 27 / 0.4);
  color: oklch(0.85 0.10 27);
  padding: 10px 12px;
  border-radius: var(--r-md);
  font-size: 12px;
  margin-bottom: 14px;
}

/* ============================================================
   Cadastro: layout split (textarea + preview/editor)
============================================================ */
.editais-create-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 16px;
  align-items: stretch;
}

.editais-create-split .pane {
  display: flex;
  flex-direction: column;
  min-height: 0;
}

.editais-create-split .pane-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 6px;
  font-family: var(--font-mono);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-3);
  font-weight: 700;
}

.editais-create-split .pane-head .badge {
  font-family: var(--font-mono);
  font-size: 10px;
  background: var(--bg-2);
  color: var(--text-2);
  border: 1px solid var(--border-subtle);
  padding: 2px 8px;
  border-radius: 999px;
  font-weight: 600;
  letter-spacing: 0.04em;
}

.editais-create-split .pane-head .badge.live {
  background: var(--accent-soft);
  color: var(--accent-strong);
  border-color: var(--accent);
}

.editais-create-split textarea.form-textarea {
  flex: 1;
  min-height: 380px;
  margin-bottom: 0;
}

/* Box do prompt pra IA reformatar o edital antes de colar (mesma ideia do
   Flashcards: copia o prompt, cola na IA, cola o resultado formatado aqui). */
.editais-ai-prompt-box {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 10px;
  padding: 10px 12px;
  margin-bottom: 10px;
}

.editais-ai-prompt-copy {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.editais-ai-prompt-hint {
  font-size: 12px;
  color: var(--text-3);
  line-height: 1.4;
}

.editais-ai-prompt-details {
  margin-top: 8px;
}

.editais-ai-prompt-details summary {
  cursor: pointer;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-2);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.editais-ai-prompt-text {
  margin-top: 8px;
  max-height: 220px;
  overflow-y: auto;
  background: var(--bg-2);
  border: 1px solid var(--border-subtle);
  border-radius: 8px;
  padding: 10px;
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1.5;
  color: var(--text-2);
  white-space: pre-wrap;
  word-break: break-word;
}

.editais-create-preview {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  padding: 6px 0;
  flex: 1;
  min-height: 380px;
  max-height: 560px;
  overflow-y: auto;
}

.editais-create-preview-empty {
  padding: 32px 18px;
  text-align: center;
  color: var(--text-3);
  font-size: 12px;
  font-family: inherit;
  text-transform: none;
  letter-spacing: 0;
  font-weight: normal;
  line-height: 1.6;
}

.editais-create-preview-empty .hint {
  color: var(--text-4);
  font-size: 11px;
  margin-top: 6px;
}

.editais-create-shortcuts {
  margin-top: 0;
  margin-bottom: 12px;
}

@media (max-width: 1100px) {
  .editais-create-split {
    grid-template-columns: 1fr;
  }
  .editais-create-split textarea.form-textarea {
    min-height: 240px;
  }
  .editais-create-preview {
    min-height: 320px;
  }
}

/* ============================================================
   Responsive
============================================================ */
@media (max-width: 720px) {
  #editais-module-root.editais-module-root {
    padding: 18px 16px 40px;
  }
  .editais-page-head {
    flex-direction: column;
    align-items: stretch;
  }
  .editais-grid {
    grid-template-columns: 1fr;
  }
  .editais-creator-modes { grid-template-columns: 1fr; }
  .editais-form .form-grid-2 { grid-template-columns: 1fr; }
  .editais-stat-row { grid-template-columns: 1fr 1fr; }
}

/* ============================================================
   Adicao incremental: botão + Tópico no hover da disciplina
   ============================================================ */
/* (estilos do .add-topic-btn agora vivem no bloco unificado de .tree-actions button acima) */

/* ============================================================
   Modal "Nova disciplina" / "Novo tópico"
   ============================================================ */
.editais-add-modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(2, 6, 23, 0.72);
  backdrop-filter: blur(4px);
  z-index: 200;
  display: grid;
  place-items: center;
  padding: 20px;
  animation: editais-add-modal-fade 160ms ease-out;
}
@keyframes editais-add-modal-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.editais-add-modal {
  width: min(640px, 100%);
  max-height: min(86vh, 720px);
  background: linear-gradient(180deg, #111827 0%, #0f172a 100%);
  border: 1px solid rgba(71, 85, 105, 0.5);
  border-radius: 14px;
  box-shadow: 0 24px 60px rgba(2, 6, 23, 0.6);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: editais-add-modal-pop 200ms cubic-bezier(0.4, 0, 0.2, 1);
}
.editais-add-modal--small { width: min(520px, 100%); }
.editais-add-modal--wide  { width: min(960px, 100%); max-height: min(90vh, 780px); }
@keyframes editais-add-modal-pop {
  from { transform: scale(0.96); opacity: 0; }
  to   { transform: scale(1);    opacity: 1; }
}
.editais-add-modal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 16px 20px;
  border-bottom: 1px solid rgba(71, 85, 105, 0.35);
}
.editais-add-modal-head h3 {
  margin: 0;
  font-size: 16px;
  font-weight: 700;
  color: #f1f5f9;
}
.editais-add-modal-close {
  background: rgba(15, 23, 42, 0.6);
  border: 1px solid rgba(71, 85, 105, 0.4);
  color: #94a3b8;
  width: 28px;
  height: 28px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  transition: all 0.15s;
}
.editais-add-modal-close:hover {
  background: rgba(127, 29, 29, 0.5);
  color: #fecaca;
  border-color: rgba(248, 113, 113, 0.5);
}
.editais-add-modal-body {
  flex: 1;
  overflow-y: auto;
  padding: 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* Layout 2 colunas (editor | preview) — usado nos modais wide */
.editais-add-modal-body--split {
  flex-direction: row;
  gap: 16px;
  padding: 16px 20px;
  overflow: hidden;
}
.editais-add-modal-pane {
  flex: 1 1 0;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
  overflow-y: auto;
}
.editais-add-modal-pane--preview {
  flex: 1 1 0;
  background: rgba(7, 11, 20, 0.55);
  border: 1px solid rgba(71, 85, 105, 0.35);
  border-radius: 10px;
  padding: 12px;
  overflow: hidden;
}
/* O textarea no split fica fluido pra ocupar a altura disponivel */
.editais-add-modal-body--split .editais-add-modal-textarea {
  flex: 1;
  min-height: 180px;
  resize: none;
}
.editais-add-modal-format-hint {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  padding: 6px 8px;
  background: rgba(15, 23, 42, 0.6);
  border: 1px dashed rgba(71, 85, 105, 0.4);
  border-radius: 6px;
  font-size: 10.5px;
  color: #94a3b8;
}

/* Toolbar acima do textarea: botões de indent/move + hint de atalhos */
.editais-add-textarea-toolbar {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 4px 6px;
  background: rgba(15, 23, 42, 0.85);
  border: 1px solid rgba(71, 85, 105, 0.45);
  border-bottom: none;
  border-radius: 8px 8px 0 0;
  flex-wrap: wrap;
}
.editais-add-textarea-toolbar button {
  background: rgba(30, 41, 59, 0.7);
  border: 1px solid rgba(71, 85, 105, 0.35);
  color: #cbd5e1;
  width: 26px;
  height: 24px;
  border-radius: 4px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  transition: background 0.12s, border-color 0.12s, color 0.12s;
}
.editais-add-textarea-toolbar button:hover {
  background: rgba(46, 219, 127, 0.15);
  border-color: rgba(46, 219, 127, 0.45);
  color: #a5f3fc;
}
.editais-add-textarea-toolbar button:active {
  transform: scale(0.95);
}
.editais-add-textarea-toolbar .separator {
  color: #475569;
  font-size: 14px;
  margin: 0 2px;
}
.editais-add-textarea-toolbar .spacer { flex: 1; }
.editais-add-textarea-toolbar .hint {
  font-size: 10.5px;
  color: #94a3b8;
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.editais-add-textarea-toolbar kbd {
  display: inline-block;
  padding: 1px 5px;
  background: rgba(15, 23, 42, 0.85);
  border: 1px solid rgba(71, 85, 105, 0.45);
  border-radius: 3px;
  font: 600 9.5px/1 var(--font-mono, ui-monospace, monospace);
  color: #a5f3fc;
}
/* Quando a toolbar precede o textarea, junta as bordas */
.editais-add-textarea-toolbar + .editais-add-modal-textarea {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  margin-top: 0;
}
.editais-add-modal-format-hint strong {
  color: #cbd5e1;
  font-weight: 700;
  margin-right: 2px;
}
.editais-add-modal-format-hint span {
  padding: 1px 6px;
  background: rgba(46, 219, 127, 0.08);
  border: 1px solid rgba(46, 219, 127, 0.2);
  border-radius: 3px;
  color: #a5f3fc;
  font-family: var(--font-mono, ui-monospace, monospace);
}

/* Preview ao vivo */
.editais-add-preview-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
  padding-bottom: 8px;
  margin-bottom: 10px;
  border-bottom: 1px solid rgba(71, 85, 105, 0.3);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #a5f3fc;
}
.editais-add-preview-info {
  text-transform: none;
  letter-spacing: 0;
  font-weight: 500;
  color: #64748b;
}
.editais-add-preview {
  height: calc(100% - 36px);
  overflow-y: auto;
  font-size: 13px;
  color: #e2e8f0;
}
.editais-add-preview-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
  text-align: center;
  color: #64748b;
  gap: 6px;
  padding: 20px;
}
.editais-add-preview-empty .emoji { font-size: 30px; opacity: 0.6; }
.editais-add-preview-empty .hint {
  font-size: 11px;
  opacity: 0.85;
  max-width: 260px;
  line-height: 1.4;
}
.editais-add-preview-summary {
  padding: 6px 10px;
  margin-bottom: 8px;
  background: rgba(46, 219, 127, 0.08);
  border: 1px solid rgba(46, 219, 127, 0.22);
  border-radius: 6px;
  font-size: 11px;
  color: #cbd5e1;
}
.editais-add-preview-summary strong { color: #a5f3fc; }
.editais-add-preview-tree {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.editais-add-preview-item {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 4px 6px;
  border-radius: 4px;
  font-size: 13px;
  line-height: 1.4;
  color: #e2e8f0;
  border-left: 2px solid transparent;
}
.editais-add-preview-item .bullet {
  flex-shrink: 0;
  font-size: 10px;
  color: #475569;
  width: 12px;
  text-align: center;
}
.editais-add-preview-item .title {
  flex: 1;
  word-break: break-word;
}
.editais-add-preview-item.is-root {
  background: rgba(46, 219, 127, 0.1);
  border-left-color: rgba(46, 219, 127, 0.55);
  font-weight: 700;
  color: #f1f5f9;
}
.editais-add-preview-item.is-root .bullet { color: #58e89c; }
.editais-add-preview-item.is-root.is-placeholder {
  background: rgba(71, 85, 105, 0.12);
  border-left-color: rgba(71, 85, 105, 0.4);
  color: #64748b;
  font-style: italic;
  font-weight: 500;
}

/* Em viewports pequenos, empilha as colunas */
@media (max-width: 720px) {
  .editais-add-modal--wide { width: min(560px, 100%); max-height: 92vh; }
  .editais-add-modal-body--split {
    flex-direction: column;
    overflow-y: auto;
  }
  .editais-add-modal-pane--preview {
    min-height: 240px;
  }
}
.editais-add-modal-context {
  margin: 0 0 4px;
  padding: 8px 12px;
  background: rgba(46, 219, 127, 0.08);
  border: 1px solid rgba(46, 219, 127, 0.22);
  border-radius: 6px;
  font-size: 12px;
  color: #94a3b8;
}
.editais-add-modal-context strong { color: #a5f3fc; font-weight: 700; }
.editais-add-modal-label {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 12px;
  color: #cbd5e1;
  font-weight: 600;
}
.editais-add-modal-input {
  background: rgba(15, 23, 42, 0.85);
  border: 1px solid rgba(71, 85, 105, 0.5);
  color: #f1f5f9;
  padding: 9px 12px;
  border-radius: 8px;
  font-size: 14px;
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.editais-add-modal-input:focus {
  border-color: rgba(46, 219, 127, 0.6);
  box-shadow: 0 0 0 3px rgba(46, 219, 127, 0.15);
}
.editais-add-modal-textarea {
  background: rgba(15, 23, 42, 0.85);
  border: 1px solid rgba(71, 85, 105, 0.5);
  color: #f1f5f9;
  padding: 10px 12px;
  border-radius: 8px;
  font-size: 13px;
  font-family: var(--font-mono, ui-monospace, monospace);
  outline: none;
  resize: vertical;
  min-height: 120px;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.editais-add-modal-textarea:focus {
  border-color: rgba(46, 219, 127, 0.6);
  box-shadow: 0 0 0 3px rgba(46, 219, 127, 0.15);
}
.editais-add-modal-hint {
  margin: 0;
  font-size: 11px;
  color: #94a3b8;
  font-style: italic;
}
.editais-add-modal-foot {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
  padding: 14px 20px;
  border-top: 1px solid rgba(71, 85, 105, 0.35);
  background: rgba(7, 11, 20, 0.5);
  flex-wrap: wrap;
}

/* =====================================================================
   Overlay de leitura de nota (modo foco sem sair do Editais)
   ===================================================================== */
.editais-note-overlay {
  position: fixed;
  inset: 0;
  z-index: 1500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.editais-note-overlay-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 18, 0.78);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.editais-note-overlay-panel {
  position: relative;
  /* Proporcao golden-ish (~1.45:1) — formato de "documento" confortavel.
     Em telas largas (>1300px) abre ate 1200px; em laptops fica 92vw. */
  width: min(1200px, 92vw);
  height: min(1000px, 94vh);
  max-height: 94vh;
  background: #ffffff;
  color: #1f2937;
  border: 1px solid rgba(15, 23, 42, 0.18);
  border-radius: 14px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.6);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.editais-note-overlay-head {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px 22px;
  border-bottom: 1px solid rgba(15, 23, 42, 0.1);
  background: #f8fafc;
}
.editais-note-overlay-title {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}
.editais-note-overlay-title h2 {
  margin: 0;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: #0f172a;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.editais-note-overlay-icon {
  color: #1ea566;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
}
.editais-note-overlay-icon svg { width: 20px; height: 20px; }
.editais-note-overlay-actions {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
  align-items: center;
}
.editais-note-overlay-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 36px;
  padding: 0 14px;
  border-radius: 8px;
  border: 1px solid rgba(15, 23, 42, 0.15);
  background: #ffffff;
  color: #334155;
  font-size: 14px;
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
}
.editais-note-overlay-btn:hover {
  background: #f1f5f9;
  border-color: rgba(15, 23, 42, 0.25);
}
.editais-note-overlay-btn:active { transform: translateY(1px); }
.editais-note-overlay-btn:focus-visible {
  outline: 2px solid rgba(30, 165, 102, 0.7);
  outline-offset: 2px;
}
.editais-note-overlay-btn svg { width: 16px; height: 16px; }
.editais-note-overlay-btn--edit {
  background: #059669;
  border-color: #047857;
  color: #ffffff;
  font-weight: 600;
}
.editais-note-overlay-btn--edit:hover {
  background: #047857;
  border-color: #065f46;
}
.editais-note-overlay-btn--close,
.editais-note-overlay-btn--toggle-outline {
  width: 36px;
  padding: 0;
}
.editais-note-overlay-body {
  flex: 1;
  display: grid;
  /* Sumario no lado DIREITO: main toma o espaço restante na coluna 1,
     outline fixa em 240px na coluna 2. */
  grid-template-columns: minmax(0, 1fr) 240px;
  grid-template-rows: minmax(0, 1fr);
  min-height: 0;
  overflow: hidden;
}
.editais-note-overlay-body.outline-collapsed,
.editais-note-overlay-body:has(.editais-note-overlay-outline.is-collapsed),
.editais-note-overlay-body:has(.editais-note-overlay-outline.is-empty) {
  grid-template-columns: minmax(0, 1fr);
}
.editais-note-overlay-outline {
  border-left: 1px solid rgba(15, 23, 42, 0.1);
  background: #f8fafc;
  overflow-y: auto;
  padding: 14px 10px;
  font-size: 13px;
}
.editais-note-overlay-outline.is-collapsed,
.editais-note-overlay-outline.is-empty {
  display: none;
}
.editais-note-overlay-outline-head {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 8px 10px;
  color: #64748b;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 11px;
  border-bottom: 1px solid rgba(15, 23, 42, 0.1);
  margin-bottom: 8px;
}
.editais-note-overlay-outline-ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.editais-note-overlay-outline-item {
  margin: 1px 0;
}
.editais-note-overlay-outline-item[data-level="1"] { padding-left: 0; }
.editais-note-overlay-outline-item[data-level="2"] { padding-left: 14px; }
.editais-note-overlay-outline-item[data-level="3"] { padding-left: 28px; }
.editais-note-overlay-outline-item[data-level="4"] { padding-left: 42px; }
.editais-note-overlay-outline-item[data-level="5"] { padding-left: 56px; }
.editais-note-overlay-outline-item[data-level="6"] { padding-left: 70px; }
.editais-note-overlay-outline-btn {
  width: 100%;
  text-align: left;
  background: none;
  border: none;
  /* Default: peso normal + cor neutra. Só L1 ganha bold/dark abaixo. */
  font-weight: 400;
  color: #64748b;
  padding: 4px 8px;
  border-radius: 4px;
  cursor: pointer;
  font-size: inherit;
  line-height: 1.3;
  font-family: inherit;
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* L1 = topico-pai: destaque com bold + cor escura */
.editais-note-overlay-outline-item[data-level="1"] .editais-note-overlay-outline-btn {
  font-weight: 700;
  color: #0f172a;
}
/* L2 = sub-secao: peso medium, ainda visivel mas nao chamativo */
.editais-note-overlay-outline-item[data-level="2"] .editais-note-overlay-outline-btn {
  font-weight: 500;
  color: #334155;
}
/* L3+ = sub-sub: fica em peso normal + cor mais clara */
.editais-note-overlay-outline-item[data-level="3"] .editais-note-overlay-outline-btn,
.editais-note-overlay-outline-item[data-level="4"] .editais-note-overlay-outline-btn,
.editais-note-overlay-outline-item[data-level="5"] .editais-note-overlay-outline-btn,
.editais-note-overlay-outline-item[data-level="6"] .editais-note-overlay-outline-btn {
  font-weight: 400;
  color: #64748b;
  font-size: 12px;
}
.editais-note-overlay-outline-btn:hover {
  background: rgba(30, 165, 102, 0.1);
  color: #0369a1;
}
.editais-note-overlay-btn--toggle-outline[aria-pressed="false"] {
  opacity: 0.55;
}
.editais-note-overlay-main {
  overflow-y: auto;
  padding: 20px 28px 28px;
  min-width: 0;
}
.editais-note-overlay-main > .editais-note-overlay-meta,
.editais-note-overlay-main > .editais-note-overlay-content {
  /* Conforto de leitura: cap em ~78ch — equilibrado pra painel ~1200px */
  max-width: 78ch;
  margin-left: auto;
  margin-right: auto;
}
.editais-note-overlay-content [data-outline-idx].is-flash {
  background: rgba(46, 219, 127, 0.22);
  border-radius: 4px;
  transition: background-color 0.4s ease;
}
.editais-note-overlay-meta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: #475569;
  margin-bottom: 18px;
  padding: 4px 10px;
  background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, 0.06);
  border-radius: 6px;
}
.editais-note-overlay-content {
  font-size: 15px;
  line-height: 1.65;
  color: #1f2937 !important;
  -webkit-mask-image: none !important;
  mask-image: none !important;
  opacity: 1 !important;
  animation: none !important;
}
/* IMPORTANTE: globals em flat.css aplicam h1-h6/p/li com cores claras
   "on dark" e !important. Aqui sobrepomos pra que o overlay seja
   read-mode claro. Tudo com !important pra ganhar a cascata. */
.editais-note-overlay-content h1,
.editais-note-overlay-content h2,
.editais-note-overlay-content h3,
.editais-note-overlay-content h4,
.editais-note-overlay-content h5,
.editais-note-overlay-content h6 {
  color: #0f172a !important;
  -webkit-text-fill-color: #0f172a !important;
  background: none !important;
  -webkit-background-clip: initial !important;
  background-clip: initial !important;
  margin: 1.4em 0 0.5em !important;
  line-height: 1.3 !important;
  font-weight: 700 !important;
}
.editais-note-overlay-content h1 { font-size: 1.7em !important; }
.editais-note-overlay-content h2 { font-size: 1.35em !important; }
.editais-note-overlay-content h3 { font-size: 1.15em !important; }
.editais-note-overlay-content p,
.editais-note-overlay-content li,
.editais-note-overlay-content span,
.editais-note-overlay-content td,
.editais-note-overlay-content th {
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
}
.editais-note-overlay-content p { margin: 0.8em 0; }
.editais-note-overlay-content ul,
.editais-note-overlay-content ol { padding-left: 1.6em; margin: 0.8em 0; }
.editais-note-overlay-content li { margin: 0.3em 0; }
.editais-note-overlay-content strong,
.editais-note-overlay-content b {
  color: #0f172a !important;
  -webkit-text-fill-color: #0f172a !important;
  font-weight: 700;
}
.editais-note-overlay-content em,
.editais-note-overlay-content i {
  color: inherit !important;
  -webkit-text-fill-color: inherit !important;
}
.editais-note-overlay-content code {
  background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, 0.08);
  color: #0f172a;
  padding: 1px 6px;
  border-radius: 4px;
  font-size: 0.92em;
}
.editais-note-overlay-content pre {
  background: #0f172a;
  color: #e2e8f0;
  border: 1px solid rgba(15, 23, 42, 0.2);
  border-radius: 8px;
  padding: 12px 14px;
  overflow-x: auto;
}
.editais-note-overlay-content pre code {
  background: none;
  border: none;
  color: inherit;
  padding: 0;
}
.editais-note-overlay-content blockquote {
  border-left: 3px solid #1ea566;
  padding: 4px 14px;
  margin: 1em 0;
  color: #334155;
  background: rgba(30, 165, 102, 0.06);
  border-radius: 0 6px 6px 0;
}
.editais-note-overlay-content a {
  color: #0369a1;
  text-decoration: underline;
}
.editais-note-overlay-content a:hover {
  color: #0c4a6e;
}
.editais-note-overlay-content table {
  border-collapse: collapse;
  margin: 1em 0;
  width: 100%;
}
.editais-note-overlay-content th,
.editais-note-overlay-content td {
  border: 1px solid rgba(15, 23, 42, 0.12);
  padding: 6px 10px;
  text-align: left;
}
/* !important pra vencer o `th { background: var(--c-chrome) !important;
   color: var(--c-text-on-dark-muted) !important; ... }` global de
   flat.css (cabeçalho de tabela do tema escuro do resto do app) — sem
   isso o cabeçalho da tabela ficava quase preto com texto cinza-escuro,
   ilegível no overlay claro. */
.editais-note-overlay-content th {
  background: #f1f5f9 !important;
  font-weight: 600;
  color: #0f172a !important;
}
/* Idem pro hover de linha: `tbody tr:hover { background: ... !important }`
   + `tbody tr:hover td { color: #f8fafc }` de gps.css pintam a linha de
   navy escuro com texto quase branco ao passar o mouse — ilegível aqui.
   Neutraliza os dois lados do hover (fundo E cor do texto). */
.editais-note-overlay-content tbody tr:hover {
  background-color: transparent !important;
  box-shadow: none !important;
}
.editais-note-overlay-content tbody tr:hover td {
  background-color: transparent !important;
  color: #1f2937 !important;
}
.editais-note-overlay-content hr {
  border: none;
  border-top: 1px solid rgba(15, 23, 42, 0.12);
  margin: 1.5em 0;
}
/* Override do pipeline de callouts do Notebook (postProcessVisualHTML)
   dentro do overlay — sem isso, uma regra global não-escopada
   (.gpsn-callout em spa-modules.css) pinta o callout com o token de fundo
   ESCURO padrão do app (var(--bg-2)) + !important, ilegível aqui dentro
   (tema claro do overlay). Mesmas cores usadas em .gpsn-preview/.gpsn-editor
   (notebook.css), só reescopadas — consistência visual com o Notebook. */
.editais-note-overlay-content .gpsn-callout {
  margin: 1.4em 0 !important;
  padding: 14px 18px 14px 16px !important;
  border-radius: 8px !important;
  border-left: 4px solid #5d6ad2 !important;
  background: #f4f5fc !important;
  color: #2c2c2c !important;
}
.editais-note-overlay-content .gpsn-callout p,
.editais-note-overlay-content .gpsn-callout li,
.editais-note-overlay-content .gpsn-callout span,
.editais-note-overlay-content .gpsn-callout div {
  color: #2c2c2c !important;
}
.editais-note-overlay-content .gpsn-callout-title {
  font-weight: 700 !important;
  color: #5d6ad2 !important;
  margin-bottom: 6px !important;
}
.editais-note-overlay-content .gpsn-callout-dica,
.editais-note-overlay-content .gpsn-callout-tip { border-left-color: #c98014 !important; background: #fdf6e8 !important; }
.editais-note-overlay-content .gpsn-callout-dica .gpsn-callout-title,
.editais-note-overlay-content .gpsn-callout-tip .gpsn-callout-title { color: #a96510 !important; }
.editais-note-overlay-content .gpsn-callout-atencao,
.editais-note-overlay-content .gpsn-callout-warning,
.editais-note-overlay-content .gpsn-callout-aviso { border-left-color: #c5443c !important; background: #fdf0ee !important; }
.editais-note-overlay-content .gpsn-callout-atencao .gpsn-callout-title,
.editais-note-overlay-content .gpsn-callout-warning .gpsn-callout-title,
.editais-note-overlay-content .gpsn-callout-aviso .gpsn-callout-title { color: #a3322a !important; }
.editais-note-overlay-content .gpsn-callout-importante { border-left-color: #b03864 !important; background: #fbeff4 !important; }
.editais-note-overlay-content .gpsn-callout-importante .gpsn-callout-title { color: #93304f !important; }
.editais-note-overlay-content .gpsn-callout-exemplo { border-left-color: #7c3aed !important; background: #f4f0fc !important; }
.editais-note-overlay-content .gpsn-callout-exemplo .gpsn-callout-title { color: #6925cc !important; }
.editais-note-overlay-content .gpsn-callout-success,
.editais-note-overlay-content .gpsn-callout-sucesso { border-left-color: #1ea566 !important; background: #e6f7ee !important; }
.editais-note-overlay-content .gpsn-callout-resumo { border-left-color: #64748b !important; background: #f8fafc !important; }
.editais-note-overlay-content .gpsn-callout-resumo .gpsn-callout-title { color: #475569 !important; }
.editais-note-overlay-content .gpsn-callout-erro,
.editais-note-overlay-content .gpsn-callout-error,
.editais-note-overlay-content .gpsn-callout-perigo { border-left-color: #c5443c !important; background: #fdf3f3 !important; }
.editais-note-overlay-content mark {
  background: #fff2a8;
  color: #0a0a0a;
  padding: 0.05em 0.25em;
  border-radius: 3px;
}
/* Conteúdo editável (formatação rápida) — sinaliza sutilmente que dá
   pra selecionar/formatar, sem parecer um campo de formulário. */
.editais-note-overlay-content[contenteditable="true"] {
  cursor: text;
  outline: none;
  border-radius: 6px;
}
/* Sem anel de foco — o overlay inteiro já é claramente "a coisa que tá
   aberta", não precisa de destaque extra ao clicar dentro pra formatar.
   !important pra vencer o `*:focus-visible { outline ... !important }`
   global de polish.css (regra de acessibilidade genérica do app). */
.editais-note-overlay-content[contenteditable="true"]:focus,
.editais-note-overlay-content[contenteditable="true"]:focus-visible {
  outline: none !important;
  box-shadow: none;
}
/* Override da seleção de texto global do app (polish.css: fundo verde-accent
   + color:var(--text-1), que é claro/branco — pensado pro tema escuro do
   resto do app). Aqui o overlay é claro (fundo branco, texto escuro), então
   o texto selecionado ficava ilegível (texto claro em fundo claro). Mantém
   a cor do texto original (herda), só tinge o fundo. */
.editais-note-overlay-content ::selection {
  background: rgba(37, 99, 235, 0.22);
  color: inherit;
}
.editais-note-overlay-content ::-moz-selection {
  background: rgba(37, 99, 235, 0.22);
  color: inherit;
}

/* Mini floating toolbar (formatação rápida ao selecionar texto) —
   estilo claro, consistente com o tema light do overlay (diferente da
   toolbar dark do editor Visual do Notebook). */
.editais-note-overlay-ft {
  position: fixed;
  z-index: 10050;
  display: none;
  align-items: center;
  gap: 2px;
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.14);
  border-radius: 10px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.18);
  padding: 4px;
}
.editais-note-overlay-ft.is-visible { display: flex; }
.editais-note-overlay-ft-btn {
  min-width: 28px;
  height: 28px;
  padding: 0 6px;
  background: transparent;
  border: none;
  border-radius: 6px;
  color: #1f2937;
  font-size: 13px;
  cursor: pointer;
}
.editais-note-overlay-ft-btn:hover { background: #f1f5f9; }
.editais-note-overlay-ft-sep {
  width: 1px;
  height: 18px;
  background: rgba(15, 23, 42, 0.12);
  margin: 0 2px;
}
.editais-note-overlay-ft-swatch {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 1px solid rgba(15, 23, 42, 0.18);
  cursor: pointer;
  padding: 0;
}
.editais-note-overlay-ft-swatch:hover { transform: scale(1.12); }
.editais-note-overlay-empty,
.editais-note-overlay-loading {
  color: #475569;
  font-style: italic;
}
.editais-note-overlay-fallback {
  white-space: pre-wrap;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 13px;
  color: #334155;
}
@media (max-width: 720px) {
  .editais-note-overlay { padding: 0; }
  .editais-note-overlay-panel {
    width: 100%;
    height: 100%;
    max-height: 100vh;
    border-radius: 0;
    border: none;
  }
  .editais-note-overlay-btn--edit span:not([data-lucide]) { display: none; }
}

/* =====================================================================
   Cronômetro de sessão de estudo (mesmo padrão do módulo Cadernos)
   ===================================================================== */

/* Botões de cronômetro/registrar na linha do tópico (.tree-actions) */
.tree-actions button.timer-btn,
.tree-actions button.register-session-btn {
  padding: 0;
  width: 28px;
  font-size: 12px;
}
.tree-actions button.timer-btn:hover {
  background: rgba(34, 197, 94, 0.85);
  color: white;
  border-color: rgba(34, 197, 94, 0.85);
}
.tree-actions button.timer-btn.is-running {
  background: rgba(251, 191, 36, 0.85);
  color: #422006;
  border-color: rgba(251, 191, 36, 0.85);
  animation: edital-timer-pulse 1.5s ease-in-out infinite;
}
@keyframes edital-timer-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(217, 119, 6, 0.35); }
  50%      { box-shadow: 0 0 0 4px rgba(217, 119, 6, 0); }
}
.tree-actions button.register-session-btn {
  font-size: 11px;
  font-weight: 700;
}
.tree-actions button.register-session-btn:hover {
  background: rgba(34, 197, 94, 0.85);
  color: white;
  border-color: rgba(34, 197, 94, 0.85);
}

/* Display do tempo rodando — sempre visível (não só no hover), pulsando
   em âmbar igual ao dot da barra flutuante. */
.tree-timer-live {
  display: inline-flex;
  align-items: center;
  font-size: 11px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: #fbbf24;
  background: rgba(251, 191, 36, 0.14);
  border: 1px solid rgba(251, 191, 36, 0.4);
  border-radius: 999px;
  padding: 2px 9px;
  white-space: nowrap;
  animation: edital-timer-live-pulse 1.8s ease-in-out infinite;
}
.tree-timer-live.hidden { display: none; }
@keyframes edital-timer-live-pulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.6; }
}

/* Barra flutuante fixa (igual #cad-timer-bar em Cadernos) */
#edital-timer-bar {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 9500;
  display: flex;
  align-items: center;
  gap: 14px;
  background: #1e293b;
  color: #f1f5f9;
  border-radius: 16px;
  padding: 10px 14px 10px 16px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.35), 0 2px 8px rgba(0, 0, 0, 0.2);
  min-width: 380px;
  max-width: 600px;
  animation: edital-timer-bar-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
  color-scheme: light;
}
@keyframes edital-timer-bar-in {
  from { opacity: 0; transform: translateX(-50%) translateY(16px); }
  to   { opacity: 1; transform: translateX(-50%) translateY(0); }
}
#edital-timer-bar.is-paused { background: #334155; }
.edital-timer-bar-left {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 1;
  min-width: 0;
}
.edital-timer-bar-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #475569;
  flex-shrink: 0;
  transition: background 0.3s;
}
#edital-timer-bar.is-running .edital-timer-bar-dot {
  background: #22c55e;
  animation: edital-timer-dot-pulse 1.8s ease-in-out infinite;
}
@keyframes edital-timer-dot-pulse {
  0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.5); }
  50%      { opacity: 0.7; box-shadow: 0 0 0 5px rgba(34, 197, 94, 0); }
}
.edital-timer-bar-info {
  display: flex;
  flex-direction: column;
  min-width: 0;
  gap: 1px;
}
.edital-timer-bar-disc {
  font-size: 0.66rem;
  font-weight: 600;
  color: #94a3b8;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.edital-timer-bar-topic {
  font-size: 0.82rem;
  font-weight: 600;
  color: #f1f5f9;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 220px;
}
.edital-timer-bar-time {
  font-size: 1.35rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.02em;
  color: #94a3b8;
  flex-shrink: 0;
  transition: color 0.3s;
}
#edital-timer-bar.is-running .edital-timer-bar-time { color: #4ade80; }
.edital-timer-bar-actions {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.edital-timer-bar-toggle {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: none;
  background: #1d4ed8;
  color: #fff;
  font-size: 0.9rem;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.12s, transform 0.1s;
  flex-shrink: 0;
}
.edital-timer-bar-toggle:hover { background: #1e40af; transform: scale(1.08); }
.edital-timer-bar-reg {
  height: 34px;
  padding: 0 12px;
  border-radius: 8px;
  border: none;
  background: #15803d;
  color: #fff;
  font-size: 0.76rem;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.12s;
}
.edital-timer-bar-reg:hover { background: #16a34a; }
.edital-timer-bar-close {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: none;
  background: rgba(255, 255, 255, 0.08);
  color: #64748b;
  font-size: 0.75rem;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.12s, color 0.12s;
}
.edital-timer-bar-close:hover { background: #475569; color: #f1f5f9; }
.edital-timer-bar-min {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: none;
  background: rgba(255, 255, 255, 0.08);
  color: #94a3b8;
  font-size: 0.85rem;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.12s, color 0.12s;
}
.edital-timer-bar-min:hover { background: #475569; color: #f1f5f9; }

/* Minimizado: bolha compacta no canto inferior direito, só com o tempo —
   sai do centro da tela (onde ficava por cima da leitura de nota) e não
   cobre mais o conteúdo. "Registrar" e disciplina/tópico somem; toggle,
   tempo, expandir e fechar continuam acessíveis. */
#edital-timer-bar.is-minimized {
  left: auto;
  right: 24px;
  transform: none;
  min-width: 0;
  max-width: none;
  padding: 8px 10px;
  gap: 8px;
}
#edital-timer-bar.is-minimized .edital-timer-bar-left,
#edital-timer-bar.is-minimized .edital-timer-bar-reg {
  display: none;
}

/* Modal "Registrar sessão de estudo" (tempo + histórico da seção) */
.editais-sessao-overlay {
  position: fixed;
  inset: 0;
  z-index: 1500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.editais-sessao-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 18, 0.78);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.editais-sessao-panel {
  position: relative;
  width: min(480px, 100%);
  max-height: 80vh;
  background: var(--bg-1);
  border: 1px solid var(--border-1);
  border-radius: 12px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.editais-sessao-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--border-1);
  background: rgba(7, 11, 20, 0.5);
}
.editais-sessao-icon {
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
  background: rgba(251, 191, 36, 0.18);
  font-size: 15px;
  flex-shrink: 0;
}
.editais-sessao-title {
  display: flex;
  gap: 10px;
  flex: 1;
  min-width: 0;
  align-items: center;
}
.editais-sessao-title h2 {
  margin: 0;
  font-size: 15px;
  font-weight: 700;
  color: var(--text-1);
}
.editais-sessao-sub {
  font-size: 12px;
  color: var(--text-3);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 320px;
}
.editais-sessao-head .btn-icon {
  background: none;
  border: none;
  font-size: 16px;
  cursor: pointer;
  color: var(--text-2);
  width: 32px;
  height: 32px;
  border-radius: 6px;
}
.editais-sessao-head .btn-icon:hover { background: var(--bg-2); color: var(--text-1); }
.editais-sessao-body {
  flex: 1;
  padding: 16px 18px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.editais-sessao-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.editais-sessao-label {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 12px;
  color: var(--text-3);
  font-weight: 600;
}
.editais-sessao-input {
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  border-radius: 6px;
  padding: 7px 10px;
  font: inherit;
  font-size: 13px;
  color: var(--text-1);
  outline: none;
  transition: border-color 0.12s ease;
}
.editais-sessao-input:focus {
  border-color: rgba(251, 191, 36, 0.6);
  box-shadow: 0 0 0 2px rgba(251, 191, 36, 0.18);
}
.editais-sessao-tempo-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.editais-sessao-tempo-label {
  font-size: 12px;
  color: var(--text-3);
  font-weight: 600;
}
.editais-sessao-tempo-manual {
  display: flex;
  align-items: center;
  gap: 6px;
}
.editais-sessao-tempo-h,
.editais-sessao-tempo-m {
  width: 64px;
  text-align: center;
}
.editais-sessao-tempo-sep {
  font-size: 12px;
  color: var(--text-3);
}
.editais-sessao-timer-hint {
  font-size: 11px;
  color: #fbbf24;
  font-style: italic;
}
.editais-sessao-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  padding-top: 4px;
}
.editais-sessao-history {
  border-top: 1px solid var(--border-1);
  padding-top: 14px;
}
.editais-sessao-history-title {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-3);
  margin-bottom: 8px;
}
.editais-sessao-history-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-height: 160px;
  overflow-y: auto;
}
.editais-sessao-history-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 10px;
  background: var(--bg-2);
  border: 1px solid var(--border-1);
  border-radius: 6px;
  font-size: 12px;
}
.editais-sessao-history-date {
  color: var(--text-2);
  flex-shrink: 0;
}
.editais-sessao-history-dur {
  color: var(--text-1);
  font-weight: 700;
  flex: 1;
}
.editais-sessao-history-del {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--text-3);
  padding: 2px 4px;
  border-radius: 4px;
  flex-shrink: 0;
}
.editais-sessao-history-del:hover { background: rgba(239, 68, 68, 0.18); color: #f87171; }
.editais-sessao-loading,
.editais-sessao-empty {
  color: var(--text-3);
  text-align: center;
  padding: 12px;
  font-style: italic;
  font-size: 12px;
}

/* =====================================================================
   Visão em tabela por disciplina (alternativa à árvore)
   ===================================================================== */
.editais-disc-table-wrap {
  background: var(--bg-1);
  border: 1px solid var(--border-subtle);
  border-radius: 12px;
  overflow: auto;
}
.editais-disc-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.editais-disc-table thead th {
  position: sticky;
  top: 0;
  background: var(--bg-2);
  color: var(--text-3);
  text-align: left;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 10px 14px;
  border-bottom: 1px solid var(--border-subtle);
  white-space: nowrap;
}
.editais-disc-table thead th[data-act="sort-disc-table"] {
  cursor: pointer;
  user-select: none;
  transition: color 120ms ease;
}
.editais-disc-table thead th[data-act="sort-disc-table"]:hover { color: var(--text-1); }
.editais-disc-th-num { width: 40px; }
.editais-disc-th-ok { width: 56px; text-align: center; }

.editais-disc-row {
  cursor: pointer;
  transition: background 100ms ease;
}
.editais-disc-row:hover { background: var(--bg-2); }
.editais-disc-row:not(:last-child) td { border-bottom: 1px solid var(--border-subtle); }
.editais-disc-row.is-done .editais-disc-cell-nome { color: var(--text-1); }
.editais-disc-row td { padding: 10px 14px; vertical-align: middle; }
.editais-disc-cell-num { color: var(--text-3); font-variant-numeric: tabular-nums; }
.editais-disc-cell-nome {
  font-weight: 600;
  color: var(--text-2);
  white-space: nowrap;
}
/* display:flex direto no <td> quebra o layout de tabela no Chrome (o
   elemento sai do fluxo de célula e desalinha as colunas seguintes) — por
   isso o flex vive num <div> interno, não na própria célula. */
.editais-disc-cell-nome-inner {
  display: flex;
  align-items: center;
  gap: 8px;
}
.editais-disc-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex-shrink: 0;
}
.editais-disc-cell-prog { min-width: 200px; }
.editais-disc-cell-prog-inner {
  display: flex;
  align-items: center;
  gap: 10px;
}
.editais-disc-prog-wrap {
  width: 90px;
  height: 6px;
  background: var(--bg-3);
  border-radius: 999px;
  overflow: hidden;
  flex-shrink: 0;
}
.editais-disc-prog-bar {
  height: 100%;
  background: var(--accent);
  border-radius: 999px;
  transition: width 320ms ease;
}
.editais-disc-prog-bar.tone-good { background: #22c55e; }
.editais-disc-prog-bar.tone-mid { background: #fbbf24; }
.editais-disc-prog-bar.tone-warn { background: #f87171; }
.editais-disc-prog-txt {
  color: var(--text-3);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.editais-disc-cell-tempo {
  color: var(--text-2);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* --- Colunas "Questões" e "Acerto" (organização estilo Cadernos: número
   de questões feitas/total + pill colorida de % de acerto) --- */
.editais-disc-cell-questoes { text-align: center; white-space: nowrap; }
.editais-disc-questoes-txt { color: var(--text-2); font-variant-numeric: tabular-nums; font-size: 12px; }
.editais-disc-cell-acerto { text-align: center; white-space: nowrap; }
.editais-disc-cell-acerto .editais-disc-questoes-txt { margin-right: 6px; }
.editais-acerto-badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.editais-acerto-badge.tone-good { background: rgba(34, 197, 94, 0.18); color: #4ade80; }
.editais-acerto-badge.tone-mid { background: rgba(251, 191, 36, 0.18); color: #fbbf24; }
.editais-acerto-badge.tone-warn { background: rgba(239, 68, 68, 0.18); color: #f87171; }

.editais-disc-cell-prioridade { white-space: nowrap; }
.editais-disc-cell-rel {
  color: #fbbf24;
  white-space: nowrap;
  letter-spacing: -1px;
}
.editais-disc-cell-ok { text-align: center; }
.editais-disc-ok-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: rgba(34, 197, 94, 0.2);
  color: #4ade80;
  font-weight: 700;
  font-size: 12px;
}
/* Selo "Aplicar prova" aprovada — dourado, mais forte que o ✓ genérico,
   sinaliza domínio comprovado por avaliação objetiva (não autodeclarado). */
.editais-disc-ok-badge.is-prova {
  background: rgba(251, 191, 36, 0.22);
  color: #fbbf24;
}
.editais-disc-row.is-prova-aprovada,
.editais-disc-subrow.is-prova-aprovada {
  background: rgba(251, 191, 36, 0.06);
}
.editais-disc-empty {
  text-align: center;
  color: var(--text-3);
  padding: 32px 18px;
  font-size: 13px;
}

/* Chevron de expandir/recolher o detalhe por tópico dentro da linha da
   disciplina. */
.editais-disc-expand-btn {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--text-3);
  font-size: 9px;
  padding: 2px 4px 2px 0;
  transition: transform 120ms ease, color 120ms ease;
  display: inline-block;
}
.editais-disc-expand-btn:hover { color: var(--text-1); }
.editais-disc-expand-btn.expanded { transform: rotate(90deg); color: var(--accent); }

/* Sub-linhas de detalhe por tópico */
.editais-disc-subrow {
  cursor: pointer;
  background: rgba(148, 163, 184, 0.04);
  transition: background 100ms ease;
}
.editais-disc-subrow:hover { background: var(--bg-2); }
.editais-disc-subrow td {
  padding: 7px 14px;
  border-bottom: 1px solid var(--border-subtle);
  font-size: 12px;
}
.editais-disc-subcell-nome {
  color: var(--text-3);
  padding-left: 34px !important;
  white-space: nowrap;
}
.editais-disc-subcell-status { white-space: nowrap; }
.editais-disc-subrow-done { color: #4ade80; }
.editais-disc-subrow-pending { color: var(--text-4, #64748b); }
.editais-disc-subrow-prova { color: #fbbf24; font-weight: 700; }
.editais-disc-subrow-empty {
  text-align: center;
  color: var(--text-3);
  padding: 14px;
  font-style: italic;
  font-size: 12px;
}
