:root {
  --bg: #f4f1ea;
  --ink: #2b2b2b;
  --muted: #7a7568;
  --line: #d9d3c6;
  --card: #fffdf8;
  --accent: #b5502f;
  --ok: #3f6f42;
  --warn: #9a6a00;
  --danger: #a3352a;
}

* { box-sizing: border-box; }
body {
  margin: 0;
  font: 15px/1.5 system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
  color: var(--ink);
  background: var(--bg);
}
h1 { font-size: 1.5rem; margin: 0; }
h2 { font-size: 1.1rem; margin: 0 0 .75rem; }
.muted { color: var(--muted); }
.error { color: var(--danger); white-space: pre-wrap; }

/* Login */
.login {
  max-width: 380px;
  margin: 12vh auto;
  padding: 2rem;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 10px;
}
.login form { display: flex; gap: .5rem; margin-top: 1rem; }
input, select, button {
  font: inherit;
  padding: .5rem .65rem;
  border: 1px solid var(--line);
  border-radius: 6px;
  background: #fff;
  color: var(--ink);
}
input { flex: 1; }
button {
  cursor: pointer;
  background: var(--ink);
  color: #fff;
  border-color: var(--ink);
}
button:hover { opacity: .9; }
button.ghost { background: transparent; color: var(--ink); }
button.danger { background: var(--danger); border-color: var(--danger); }
button.small { padding: .25rem .5rem; font-size: .85rem; }

/* Topbar */
.topbar {
  display: flex; justify-content: space-between; align-items: center;
  padding: 1rem 1.5rem; border-bottom: 1px solid var(--line); background: var(--card);
}
.topbar-left { display: flex; align-items: center; gap: 1.25rem; }
.topbar-right { display: flex; gap: .5rem; align-items: center; }
.tabs { display: flex; gap: .25rem; }
.tab { background: transparent; color: var(--muted); border: 1px solid transparent; padding: .35rem .75rem; }
.tab.active { color: var(--ink); border-color: var(--line); background: var(--bg); }

.mono { font-family: ui-monospace, Menlo, monospace; font-size: .8rem; }
tr.inactiva { opacity: .5; }
.check { display: inline-flex; align-items: center; gap: .3rem; font-size: .85rem; }
.oculto { display: none; }

/* Política de cuentas por sobre (tab propia) */
.politica { margin-top: .5rem; }
.pol-row {
  display: grid; grid-template-columns: 1.3fr auto 2fr auto auto; gap: .6rem; align-items: center;
  padding: .5rem 0; border-bottom: 1px solid var(--line);
}
.pol-row.ro { grid-template-columns: 1.3fr auto 2fr; }
.pol-sobre { font-size: .92rem; }
.pol-cuentas { display: flex; flex-wrap: wrap; gap: .4rem; align-items: center; }
@media (max-width: 700px) { .pol-row, .pol-row.ro { grid-template-columns: 1fr 1fr; } }

/* Modo en solo lectura: pill de color por modo */
.pol-modo-ro {
  font-size: .78rem; font-weight: 600; padding: .1rem .55rem; border-radius: 999px;
  border: 1px solid var(--line); text-align: center; justify-self: start;
}
.pol-modo-ro.modo-estricto { background: #f6e3df; color: var(--accent); border-color: #e6c9c1; }
.pol-modo-ro.modo-lista { background: #eef1e6; color: var(--warn); border-color: #dbe0c9; }
.pol-modo-ro.modo-libre { background: #f0ede6; color: var(--muted); }

/* Chip de cuenta esperada (solo lectura) */
.chip {
  display: inline-flex; align-items: center; font-size: .82rem;
  padding: .15rem .55rem; border-radius: 999px; border: 1px solid var(--line); background: #fff;
}
.chip-on { background: #eef4ee; border-color: #cfe0cf; color: var(--ok); }
.chip-on::before { content: "✓"; margin-right: .3rem; font-weight: 700; }

/* Chip-checkbox (editable): se RESALTA al seleccionar, visible de un vistazo */
.chip-check {
  display: inline-flex; align-items: center; gap: .35rem; cursor: pointer;
  font-size: .82rem; padding: .2rem .6rem; border-radius: 999px;
  border: 1px solid var(--line); background: #fff; user-select: none;
}
.chip-check:hover { border-color: var(--muted); }
.chip-check.sel { background: #eef4ee; border-color: var(--ok); color: var(--ok); font-weight: 600; }
.chip-check input { margin: 0; accent-color: var(--ok); }

/* Feedback inline junto al botón Guardar de política */
.pol-feedback { font-size: .82rem; white-space: nowrap; }
.pol-feedback.ok { color: var(--ok); font-weight: 600; }
.pol-feedback.err { color: var(--danger); }
.badge {
  padding: .2rem .6rem; border-radius: 999px; font-size: .8rem; font-weight: 600;
  border: 1px solid var(--line);
}
.badge.junta { background: #eef4ee; color: var(--ok); border-color: #cfe0cf; }
.badge.readonly { background: #f0ede6; color: var(--muted); }

/* Columns */
.cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; padding: 1.5rem; }
@media (max-width: 800px) { .cols { grid-template-columns: 1fr; } }
.col {
  background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 1.25rem;
}
.col.comparar { opacity: .92; }

/* Banner congelado */
.frozen-banner {
  display: flex; align-items: center; gap: .5rem;
  background: #efe7db; border: 1px solid var(--line); border-radius: 6px;
  padding: .5rem .75rem; margin-bottom: 1rem; color: var(--muted); font-size: .9rem;
}

/* Items */
table { width: 100%; border-collapse: collapse; }
th, td { text-align: left; padding: .45rem .5rem; border-bottom: 1px solid var(--line); font-size: .92rem; }
th { color: var(--muted); font-weight: 600; }
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; }
.acciones { display: flex; gap: .35rem; }

.empty { color: var(--muted); padding: 1rem 0; }

/* Enmiendas: distinguidas de los items originales (coherente con variacion_mes) */
tr.enmienda { background: #fbf3ea; }
.tag-enmienda {
  font-size: .7rem; font-weight: 600; color: var(--warn);
  background: #f3e8d0; border-radius: 4px; padding: .05rem .35rem; margin-left: .35rem;
  cursor: help;
}

/* Totales — SEPARADOS por moneda, nunca sumados. El equivalente es solo referencia. */
.totales {
  margin-top: 1rem; padding-top: .75rem; border-top: 2px solid var(--line);
}
.total-linea {
  display: flex; justify-content: space-between; font-weight: 700; font-size: 1.05rem;
  padding: .15rem 0;
}
.total-linea .num { font-variant-numeric: tabular-nums; }
.total-ref { text-align: right; margin-top: .35rem; color: var(--ink); font-size: .95rem; }

/* Zona de congelar */
.freeze-zone {
  margin-top: 1.25rem; padding-top: 1rem; border-top: 1px dashed var(--line);
  display: flex; align-items: center; gap: .75rem; flex-wrap: wrap;
}
.enmienda-form { border-color: var(--warn); background: #fdf8f0; }
.enmienda-nota { grid-column: 1 / -1; margin: 0; color: var(--warn); font-size: .9rem; }
.item-form .motivo { grid-column: 1 / -1; }

/* Modal de confirmación (congelar) */
.modal-overlay {
  position: fixed; inset: 0; background: rgba(0, 0, 0, .45);
  display: flex; align-items: center; justify-content: center; padding: 1rem; z-index: 50;
}
.modal {
  background: var(--card); border: 1px solid var(--line); border-radius: 12px;
  max-width: 460px; width: 100%; padding: 1.5rem; box-shadow: 0 20px 60px rgba(0, 0, 0, .25);
}
.modal h3 { margin: 0 0 1rem; }
.modal-body p { margin: .5rem 0; }
.modal-acciones { display: flex; justify-content: flex-end; gap: .5rem; margin-top: 1.25rem; }

/* Form de item */
.item-form {
  margin-top: 1rem; padding: 1rem; border: 1px dashed var(--line); border-radius: 8px;
  display: grid; grid-template-columns: 2fr 1.5fr 1fr .8fr auto; gap: .5rem; align-items: end;
}
.item-form label { display: flex; flex-direction: column; font-size: .78rem; color: var(--muted); gap: .2rem; }
.item-form .moneda-hint { font-size: .8rem; color: var(--muted); align-self: center; }
@media (max-width: 700px) { .item-form { grid-template-columns: 1fr 1fr; } }

/* Toasts de feedback — arriba a la derecha, se desvanecen solos */
.toasts {
  position: fixed; top: 1rem; right: 1rem; z-index: 100;
  display: flex; flex-direction: column; gap: .5rem; pointer-events: none;
}
.toast {
  padding: .6rem .9rem; border-radius: 8px; font-size: .9rem; font-weight: 600;
  border: 1px solid var(--line); background: var(--card); box-shadow: 0 8px 24px rgba(0, 0, 0, .15);
  opacity: 0; transform: translateY(-8px); transition: opacity .2s, transform .2s;
  max-width: 340px;
}
.toast.show { opacity: 1; transform: translateY(0); }
.toast.ok { background: #eef4ee; border-color: #cfe0cf; color: var(--ok); }
.toast.err { background: #f6e3df; border-color: #e6c9c1; color: var(--danger); }

/* Tab Saldos (solo lectura) — vitrina del dinero real */
/* El panel #view-saldos queda SIN display propio (div plano, como view-cuentas/politica):
   así el atributo `hidden` lo oculta salvo en la tab Saldos. El layout va en el contenido
   interno — un display en el ID pisaría a [hidden] y el panel se vería en todas las tabs. */
#saldos-body { padding: 1.5rem; display: flex; flex-direction: column; gap: 1.5rem; }
.saldos-sec > h2 { margin-bottom: .25rem; }
.saldos-sec table { margin-top: .75rem; }
.saldos-tot-label { margin: 1rem 0 -.25rem; font-size: .85rem; }

/* Prioridad legible (1 supervivencia → 7 ahorro) */
.pri {
  display: inline-block; padding: .1rem .55rem; border-radius: 999px;
  font-size: .78rem; font-weight: 600; border: 1px solid var(--line);
  background: #f0ede6; color: var(--muted);
}
.pri-1 { background: #f6e3df; color: var(--danger); border-color: #e6c9c1; }
.pri-2, .pri-3, .pri-4 { background: #f3ead6; color: var(--warn); border-color: #e6d6b8; }

/* Tipo de sobre */
.tipo-badge { display: inline-block; padding: .05rem .45rem; border-radius: 4px; font-size: .72rem; font-weight: 600; }
.tipo-vaciar { background: #eef1e6; color: var(--muted); }
.tipo-acumular { background: #eef4ee; color: var(--ok); }

/* Falta por fondear / saldo negativo */
.falta { color: var(--danger); font-weight: 600; }
