/* Cartera Viva · las pantallas del portal (Bootstrap) y de la suite. Tokens: cv-tokens.css; base: cv-base.css.
   Las clases heredadas del portal (.btn-rdi, .metric-card, .table-rdi…) traen su estructura de rdi.css; acá van sus COLORES,
   siempre con los tokens. Cómo están armados los estilos y sus reglas: docs/ESTILOS.md. */
@import url("/static/cv-base.css?v=1792860893000");
@import url("/static/cv-componentes.css?v=1792860893000");

/* ── Botones ──────────────────────────────────────────────────────── */
.btn { font-family: var(--cv-font); font-weight: 600; border-radius: var(--cv-r-m); letter-spacing: -.005em;
  transition: background-color var(--cv-dur) var(--cv-ease), border-color var(--cv-dur) var(--cv-ease), box-shadow var(--cv-dur) var(--cv-ease), transform var(--cv-dur) var(--cv-ease); }
.btn:focus-visible { outline: 0; box-shadow: var(--cv-anillo); }
.btn-rdi, .btn-success {
  background: var(--cv-brand); border: 1px solid var(--cv-brand); color: var(--cv-on-brand); font-weight: 700;
  box-shadow: inset 0 1px 0 var(--cv-brillo), var(--cv-sombra-1);
}
.btn-rdi:hover, .btn-rdi:focus, .btn-success:hover { background: var(--cv-brand-600); border-color: var(--cv-brand-600); color: var(--cv-on-brand); }
.btn-rdi:active { transform: scale(.98); }
.btn-dark { background: var(--cv-ink); border-color: var(--cv-ink); color: var(--cv-on-ink); }
.btn-dark:hover { background: var(--cv-ink-2); border-color: var(--cv-ink-2); color: var(--cv-on-ink); }
.btn-outline-secondary, .btn-outline-dark { color: var(--cv-ink-2); border-color: var(--cv-line-2); background: var(--cv-card); }
.btn-outline-secondary:hover, .btn-outline-dark:hover { background: var(--cv-brand-soft); border-color: var(--cv-brand); color: var(--cv-brand-600); }
.btn-outline-success { color: var(--cv-brand-600); border-color: var(--cv-brand); }
.btn-outline-success:hover { background: var(--cv-brand); border-color: var(--cv-brand); color: var(--cv-on-brand); }

/* ── Tarjetas y encabezados ───────────────────────────────────────── */
.card { background: var(--cv-card); border: 1px solid var(--cv-line); border-radius: var(--cv-r-l); box-shadow: var(--cv-sombra-1); color: var(--cv-ink); }
.card-header-dark {
  background: var(--cv-brand-soft); color: var(--cv-ink);
  border-radius: var(--cv-r-l) var(--cv-r-l) 0 0;
  border-bottom: 1px solid var(--cv-line);
  font-weight: 700; font-size: .95rem; letter-spacing: 0;
}
.card-footer.bg-white { background: var(--cv-card) !important; }

/* ── Métricas (los números grandes) ───────────────────────────────── */
.metric-card {
  background: var(--cv-card); color: var(--cv-ink);
  border: 1px solid var(--cv-line); border-left: 4px solid var(--cv-brand);
  border-radius: var(--cv-r-m); box-shadow: var(--cv-sombra-1);
}
.metric-val { color: var(--cv-ink); font-family: var(--cv-font); font-weight: 800; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.metric-lbl { color: var(--cv-muted); }
.metric-ok .metric-val   { color: var(--cv-ok); }
.metric-warn { border-left-color: var(--cv-warn); }
.metric-warn .metric-val { color: var(--cv-warn); }
.metric-alert { border-left-color: var(--cv-bad); }
.metric-alert .metric-val { color: var(--cv-bad); }

/* ── Tablas ───────────────────────────────────────────────────────── */
.table-rdi thead th { background: var(--cv-card-2); color: var(--cv-muted); border-bottom: 1px solid var(--cv-line); }
.table-rdi tbody tr:hover { background: var(--cv-brand-soft); }
.table { --bs-table-bg: transparent; }

/* ── Estados y etiquetas ──────────────────────────────────────────── */
.badge-pendiente { background: var(--cv-warn-soft); color: var(--cv-warn); }
.badge-enviado   { background: var(--cv-ok-soft);   color: var(--cv-ok); }
.badge-error     { background: var(--cv-bad-soft);  color: var(--cv-bad); }
.price-tag, .comp-price { color: var(--cv-ink); font-variant-numeric: tabular-nums; }
.price-diff-up { color: var(--cv-warn); }
.price-diff-down { color: var(--cv-ok); }
.prop-photo, .prop-photo-placeholder { background: var(--cv-card-2); color: var(--cv-muted); }
.prop-photo-placeholder { background: linear-gradient(135deg, var(--cv-card-2), var(--cv-line)); }

/* ── Formularios ──────────────────────────────────────────────────── */
.form-control, .form-select { border-color: var(--cv-line-2); border-radius: var(--cv-r-s); background-color: var(--cv-card); color: var(--cv-ink); }
.form-control:focus, .form-select:focus { border-color: var(--cv-brand); box-shadow: 0 0 0 .2rem var(--cv-foco); }
.form-label { font-weight: 600; color: var(--cv-ink-2); font-size: .85rem; }

/* ── Entrada (login): la primera impresión de Dominio ─────────────────── */
.login-wrap { min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: var(--cv-e-4); padding: var(--cv-e-5) var(--cv-e-4);
  background: radial-gradient(900px 480px at 50% -140px, var(--cv-luz), transparent 72%) no-repeat, var(--cv-bg); }
.login-card {
  background: var(--cv-card); border: 1px solid var(--cv-line); border-top: 2px solid var(--cv-oro); border-radius: var(--cv-r-xl);
  box-shadow: var(--cv-sombra-2); padding: 1.9rem 1.75rem; width: 100%; max-width: 400px;
}
.login-card .form-control, .login-card .form-control:focus { background: var(--cv-card); color: var(--cv-ink); }
.login-card label { color: var(--cv-ink-2); font-size: var(--cv-t-s); }
.login-card .btn-rdi { min-height: 46px; }
.login-marca { display: flex; flex-direction: column; align-items: center; gap: var(--cv-e-3); }
.login-marca img { width: 56px; height: 56px; }
.login-marca span { font-weight: 800; font-size: 1.6rem; letter-spacing: -.03em; line-height: 1; }
.login-marca span b { color: var(--cv-brand); }
.login-marca .cv-marca-txt { font: 600 2.1rem/1 var(--cv-font-marca); letter-spacing: .22em; text-transform: uppercase; color: var(--cv-ink);
  padding-bottom: var(--cv-e-3); border-bottom: 1px solid var(--cv-oro); }
.login-bajada { color: var(--cv-muted); font-size: var(--cv-t-m); text-align: center; max-width: 360px; margin: 0; }

/* ── Más clases heredadas: sus colores (la estructura, en rdi.css) ── */
.analysis-text { color: var(--cv-ink); }
.chart-wrap { background: var(--cv-card); border: 1px solid var(--cv-line); box-shadow: var(--cv-sombra-1); }
.chart-title { color: var(--cv-muted); }
.price-diff-ok { color: var(--cv-muted); }
/* `bg-light` de Bootstrap queda claro aunque el tema sea oscuro, y el texto de adentro hereda el color claro */
.bg-light { background-color: var(--cv-card-2) !important; color: var(--cv-ink); }

/* La impresión y el PDF del informe: en rdi.css (el PDF solo carga esa hoja). */


/* ── La ANATOMÍA de una pantalla (igual en todas; docs/ESTILOS.md) ───────────────────────────────────────────────────
   Arriba la cáscara (barra, pestañas, para qué sirve, estado: cv-shell.css). Después, siempre en este orden y en el carril:
     .cv-hero   el título (h1) con su bajada (p); arriba, en dorado chico, la fecha o el «← volver» (.fe); a la derecha, las acciones
     .cv-sec    cada bloque, con su h2; adentro, .cv-panel (la caja) con .cv-fila (los renglones) o tarjetas
   Los tamaños salen de la escala de cv-tokens.css (--cv-t-*, --cv-e-*): nada de números sueltos en una pantalla nueva. */
.cv-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--cv-e-3) var(--cv-e-4); flex-wrap: wrap;
  margin: var(--cv-e-2) 0 var(--cv-e-5); }
.cv-hero .fe { margin-bottom: var(--cv-e-1); font: 700 var(--cv-t-xs)/1.4 var(--cv-font); text-transform: uppercase; letter-spacing: .1em;
  color: var(--cv-brand-600); }
.cv-hero .fe a { color: inherit; text-decoration: none; }
.cv-hero .fe a:hover { color: var(--cv-brand); }
.cv-hero h1 { font-size: var(--cv-t-2xl); font-weight: 800; letter-spacing: -.035em; line-height: 1.12; margin: 0; }
.cv-hero p { margin: var(--cv-e-2) 0 0; color: var(--cv-muted); font-size: var(--cv-t-m); line-height: 1.5; max-width: 72ch; }
.cv-banner { display: flex; gap: 10px; align-items: flex-start; border-radius: var(--cv-r-m); padding: 11px 14px; font-size: .88rem; margin-bottom: 16px; }
.cv-banner.demo { background: var(--cv-warn-soft); border: 1px solid var(--cv-warn-line); }
.cv-banner b { color: var(--cv-ink); }
.cv-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin-bottom: 20px; }
.cv-kpi { background: var(--cv-card); border: 1px solid var(--cv-line); border-radius: var(--cv-r-l); padding: 16px 18px; box-shadow: var(--cv-sombra-1); display: flex; flex-direction: column; gap: 2px; min-width: 0; text-decoration: none !important; color: var(--cv-ink) !important; }
a.cv-kpi:hover { border-color: var(--cv-brand); box-shadow: var(--cv-sombra-2); }
.cv-kpi .l { font-size: .74rem; font-weight: 700; color: var(--cv-muted); text-transform: uppercase; letter-spacing: .05em; display: flex; justify-content: space-between; gap: 6px; align-items: center; }
.cv-kpi .v { font-size: 1.9rem; font-weight: 800; letter-spacing: -.03em; line-height: 1.15; font-variant-numeric: tabular-nums; }
.cv-kpi .h { font-size: .8rem; color: var(--cv-muted); }
.cv-kpi.alerta .v { color: var(--cv-bad); } .cv-kpi.buena .v { color: var(--cv-ok); }
.cv-sec { margin: 0 0 var(--cv-e-5); }
.cv-sec > h2 { font-size: var(--cv-t-l); font-weight: 800; letter-spacing: -.015em; margin: 0 0 var(--cv-e-3); display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.cv-sec > h2 small { font-weight: 600; font-size: .8rem; }
.cv-panel { background: var(--cv-card); border: 1px solid var(--cv-line); border-radius: var(--cv-r-l); box-shadow: var(--cv-sombra-1); overflow: hidden; }
/* La caja sola (.cv-panel) es el contenedor de RENGLONES (.cv-fila y parientes), que traen su propio padding. Si adentro va contenido
   suelto (títulos, textos, campos, botones), la caja lleva .cv-caja: aire adentro, igual en todas las pantallas. Una nota al pie de
   una caja de renglones va en .cv-panel-pie. (mvp/qa/estilos.py controla que ninguna caja deje la letra pegada al borde) */
.cv-caja { padding: 16px 18px; }
details.cv-caja > summary { cursor: pointer; font-weight: 700; }
.cv-panel-pie { margin: 0; padding: 10px 16px 12px; border-top: 1px solid var(--cv-line); font-size: var(--cv-t-s); color: var(--cv-muted); }
.cv-fila { display: flex; align-items: center; gap: 12px; padding: 12px 16px; transition: background-color var(--cv-dur) var(--cv-ease); border-bottom: 1px solid var(--cv-line); text-decoration: none !important; color: var(--cv-ink) !important; }
.cv-fila:last-child { border-bottom: 0; }
a.cv-fila:hover { background: var(--cv-card-2); }
.cv-fila .ic { width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; background: var(--cv-brand-soft); color: var(--cv-brand-600); flex: none; }
.cv-fila .ic.mal { background: var(--cv-bad-soft); color: var(--cv-bad); } .cv-fila .ic.av { background: var(--cv-warn-soft); color: var(--cv-warn); }
.cv-fila .tx { min-width: 0; flex: 1; line-height: 1.3; }
.cv-fila .tx b { display: block; font-size: .92rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cv-fila .tx span { font-size: .8rem; color: var(--cv-muted); }
.cv-fila .der { font-size: .8rem; font-weight: 700; white-space: nowrap; color: var(--cv-muted); }
.cv-accesos { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }
.cv-acceso { display: flex; flex-direction: column; gap: 8px; padding: 14px; border-radius: var(--cv-r-m); background: var(--cv-card); border: 1px solid var(--cv-line); text-decoration: none !important; color: var(--cv-ink) !important; font-weight: 700; font-size: .9rem; }
.cv-acceso .cv-ic { width: 26px; height: 26px; color: var(--cv-brand); }
.cv-acceso:hover { border-color: var(--cv-brand); box-shadow: var(--cv-sombra-2); }
.cv-acceso .cv-chip { align-self: flex-start; }
.cv-prop { display: flex; gap: 12px; align-items: center; padding: 10px 14px; border-bottom: 1px solid var(--cv-line); text-decoration: none !important; color: var(--cv-ink) !important; }
.cv-prop:last-child { border-bottom: 0; }
.cv-prop-ph { width: 64px; height: 46px; border-radius: 8px; background: var(--cv-card-2); color: var(--cv-muted); display: grid; place-items: center; flex: none; }
.cv-prop img { width: 64px; height: 46px; object-fit: cover; border-radius: 8px; background: var(--cv-card-2); flex: none; }
.cv-ejemplo { font-size: .62rem; font-weight: 800; letter-spacing: .04em; color: var(--cv-warn); background: var(--cv-warn-soft); padding: 1px 6px; border-radius: 6px; text-transform: uppercase; vertical-align: middle; }
.cv-dos { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
@media (min-width: 992px) { .cv-dos { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); } }
/* barra de progreso: <div class="cv-barra"><i style="width: 40%"></i></div> (Operaciones, Inicio, Administración) */
.cv-barra { display: block; height: 8px; border-radius: var(--cv-r-pill); background: var(--cv-line); overflow: hidden; }
.cv-barra i { display: block; height: 100%; border-radius: inherit; background: var(--cv-brand); }
.cv-login-perfiles { display: grid; gap: 8px; width: 100%; max-width: 420px; }
.cv-perfil { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 10px 12px; border-radius: var(--cv-r-m); background: var(--cv-card); border: 1px solid var(--cv-line); cursor: pointer; font-family: inherit; color: var(--cv-ink); }
.cv-perfil:hover { border-color: var(--cv-brand); box-shadow: var(--cv-sombra-2); }
.cv-perfil b { display: block; font-size: .92rem; } .cv-perfil span { font-size: .78rem; color: var(--cv-muted); }
.cv-perfil .cv-avatar { cursor: pointer; color: var(--cv-on-brand); font-size: .85rem; }   /* (sin el color, `.cv-perfil span` le pintaba las iniciales de gris) */
.cv-perfil.dueno .cv-avatar { background: var(--cv-ink); color: var(--cv-on-ink); }
@media (max-width: 991.98px) { .cv-banner { flex-direction: column; gap: 6px; } .cv-hero h1 { font-size: var(--cv-t-xl); } .cv-kpi .v { font-size: 1.6rem; } .cv-kpis { grid-template-columns: repeat(2, 1fr); } }

/* ── Avisos de resultado (✓ sincronizado, ✗ no se encontró…): siguen al tema ─────── */
.cv-alert { padding: 10px 14px; border-radius: var(--cv-r-m); border: 1px solid var(--cv-line); border-left-width: 3px; font-size: var(--cv-t-m);
  margin-bottom: var(--cv-e-4); background: var(--cv-card); color: var(--cv-ink); }
.cv-alert.ok   { background: var(--cv-ok-soft);   border-color: var(--cv-ok-line);   border-left-color: var(--cv-ok); }
.cv-alert.info { background: var(--cv-info-soft); border-color: var(--cv-info-line); border-left-color: var(--cv-info); }
.cv-alert.bad  { background: var(--cv-bad-soft);  border-color: var(--cv-bad-line);  border-left-color: var(--cv-bad); }
.cv-alert.warn { background: var(--cv-warn-soft); border-color: var(--cv-warn-line); border-left-color: var(--cv-warn); }
.cv-alert.ok b, .cv-alert.ok strong { color: var(--cv-ok); }
.cv-alert.info b, .cv-alert.info strong { color: var(--cv-info); }
.cv-alert.bad b, .cv-alert.bad strong { color: var(--cv-bad); }
.cv-alert.warn b, .cv-alert.warn strong { color: var(--cv-warn); }

/* ── Catálogos (propiedades en conjunto) y Fidelización ─────────────────────── */
.cv-cat { padding: 12px 14px; margin-bottom: 10px; }
.cv-cat-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.cv-cat-top .tit { min-width: 0; display: flex; flex-direction: column; line-height: 1.3; }
.cv-cat-top .tit b { overflow-wrap: anywhere; }
.cv-cat-top .precio { font-weight: 800; white-space: nowrap; font-variant-numeric: tabular-nums; }
.cv-cat-tags { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 8px; margin: 8px 0 10px; }
.cv-cat-acc { display: flex; flex-wrap: wrap; gap: 6px; }
.cv-cat-acc form { margin: 0; }
.cv-link code { display: block; padding: 8px 10px; border-radius: var(--cv-r-s); background: var(--cv-card); border: 1px solid var(--cv-line); color: var(--cv-ink); overflow-wrap: anywhere; font-size: .85rem; }
.cv-interno { background: var(--cv-card-2); border: 1px dashed var(--cv-line-2); border-radius: var(--cv-r-m); padding: 12px 14px; }
.cv-interno .tit { font-size: .7rem; text-transform: uppercase; letter-spacing: .08em; color: var(--cv-muted); font-weight: 700; margin-bottom: 8px; }
.cv-mail { width: 100%; height: 62vh; min-height: 380px; border: 1px solid var(--cv-line); border-radius: var(--cv-r-m); background: #FFFFFF; }   /* fijo: un mail se ve sobre blanco */

/* ── Agenda, Operaciones, Mensajes y Resumen de la semana (suite/agenda.py, operaciones.py, mensajes.py, resumen.py) ── */
.cv-form { padding: 14px; margin-bottom: 18px; }
.cv-ag .tx b, .cv-ag .tx span { white-space: normal; }
.cv-ag-hora { width: 44px; flex: none; font-weight: 800; font-size: .85rem; font-variant-numeric: tabular-nums; color: var(--cv-ink-2); }
.cv-ag > .btn, .cv-ag form { flex: none; margin: 0; }
.cv-ag-acc { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; flex: none; }
/* Celular: el botón pasa abajo del texto (alineado con él) y el título usa todo el ancho */
@media (max-width: 575.98px) {
  .cv-ag { flex-wrap: wrap; row-gap: 8px; }
  .cv-ag > .tx { flex: 1 1 calc(100% - 104px); }
  .cv-ag:not(:has(> .cv-ag-hora)) > .tx { flex-basis: calc(100% - 50px); }
  .cv-ag > .btn { margin-left: 90px; }
  .cv-ag > .cv-ag-acc { margin-left: 46px; justify-content: flex-start; }
}
/* devolución de una visita: opciones grandes, de un toque */
.cv-dev { padding: 12px 14px; margin-bottom: 10px; }
.cv-dev-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; list-style: none; cursor: pointer; }
.cv-dev-top::-webkit-details-marker { display: none; }
.cv-dev[open] > .cv-dev-top { margin-bottom: 8px; }
.cv-dev[open] > .cv-dev-top .cv-chip { display: none; }
.cv-opciones { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 10px; border: 0; padding: 0; min-width: 0; }
.cv-opciones legend { float: none; width: 100%; font-size: .74rem; font-weight: 700; color: var(--cv-muted); text-transform: uppercase; letter-spacing: .05em; margin: 0 0 2px; }
.cv-opcion { position: relative; margin: 0; }
.cv-opcion input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.cv-opcion span { display: inline-flex; align-items: center; min-height: 40px; padding: 6px 14px; border-radius: var(--cv-r-pill); border: 1px solid var(--cv-line-2);
  background: var(--cv-card); color: var(--cv-ink-2); font-weight: 600; font-size: .88rem; cursor: pointer; user-select: none; }
.cv-opcion input:checked + span { background: var(--cv-brand); border-color: var(--cv-brand); color: var(--cv-on-brand); }
.cv-opcion input:focus-visible + span { outline: 2px solid var(--cv-brand); outline-offset: 2px; }
.cv-aut-form { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 8px 0; border-top: 1px solid var(--cv-line); margin: 0; }
.cv-aut-form .nom { flex: 1 1 220px; font-size: .9rem; font-weight: 600; }
.cv-aut-form input[type=date] { width: auto; flex: 0 1 170px; }
/* operaciones */
.cv-op { display: block; padding: 12px 14px; margin-bottom: 10px; text-decoration: none !important; color: var(--cv-ink) !important; }
a.cv-op:hover { border-color: var(--cv-brand); box-shadow: var(--cv-sombra-2); }
.cv-op-top { display: flex; justify-content: space-between; gap: 10px; align-items: flex-start; }
.cv-op-meta { font-size: .82rem; color: var(--cv-muted); margin-top: 6px; display: flex; flex-wrap: wrap; gap: 2px 14px; }
.cv-op .cv-barra { margin-top: 10px; }
.cv-trabada { display: flex; gap: 6px; align-items: flex-start; color: var(--cv-bad); font-size: .84rem; font-weight: 600; margin-top: 8px; }
.cv-trabada .cv-ic { width: 18px; height: 18px; }
.cv-check { display: flex; gap: 12px; align-items: flex-start; padding: 11px 14px; border-bottom: 1px solid var(--cv-line); cursor: pointer; margin: 0; font-size: .92rem; }
.cv-check:last-child { border-bottom: 0; }
.cv-check:hover { background: var(--cv-card-2); }
.cv-check input { width: 20px; height: 20px; flex: none; margin-top: 1px; accent-color: var(--cv-brand); }
.cv-check:has(input:checked) span { color: var(--cv-muted); text-decoration: line-through; }
/* «Guardar» de una operación: queda a mano mientras se recorre la lista (arriba de la barra de abajo en el celular) */
.cv-guardar { position: sticky; bottom: 16px; z-index: 5; margin: 4px 0 16px; box-shadow: var(--cv-sombra-2); }
@media (max-width: 991.98px) { .cv-guardar { bottom: calc(var(--cv-dock-h, 64px) + env(safe-area-inset-bottom) + 10px); } }
/* mensajes */
.cv-msgs { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; }
@media (min-width: 992px) { .cv-msgs { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.cv-msg { padding: 14px; display: flex; flex-direction: column; gap: 10px; }
.cv-msg-txt { background: var(--cv-card-2); border-radius: 12px 12px 12px 4px; padding: 10px 12px; font-size: .92rem; line-height: 1.45; white-space: pre-wrap; overflow-wrap: anywhere; }
mark.cv-var, .cv-msg-txt mark { background: var(--cv-brand-soft); color: var(--cv-brand-600); padding: 0 1px; border-radius: 4px; font-weight: 600; }
.cv-msg-wa { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 6px; margin: 0; }
.cv-msg-wa select, .cv-msg-wa button { grid-column: 1 / -1; }
.cv-msg-edit summary { font-size: .85rem; font-weight: 600; color: var(--cv-brand-600); cursor: pointer; }
.cv-msg-edit form { margin-top: 8px; }
/* resumen */
.cv-dif { font-weight: 800; }
.cv-dif.sube { color: var(--cv-ok); } .cv-dif.baja { color: var(--cv-bad); }
.cv-tabla { --bs-table-bg: transparent; color: var(--cv-ink); }
.cv-tabla th { font-size: .74rem; text-transform: uppercase; letter-spacing: .04em; color: var(--cv-muted); font-weight: 700; background: var(--cv-card-2); }
.cv-tabla td, .cv-tabla th { padding: 9px 12px; border-color: var(--cv-line); font-variant-numeric: tabular-nums; }

/* ── Capacitación y Administración (2026-10-07) ────────────────────────────── */
.cv-sec-sub { font-size: .78rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--cv-muted); margin: 14px 0 8px; }
.cv-texto { white-space: pre-wrap; overflow-wrap: anywhere; line-height: 1.55; }          /* texto escrito por el dueño o la IA, con sus saltos */
.cv-asistente { border-color: var(--cv-brand); }
.cv-respuesta { border-left: 4px solid var(--cv-brand); padding: 14px 16px; margin-bottom: 18px; }
/* gastos por categoría: cada fila con su barra (la barra va con .cv-barra, la misma de Operaciones) */
.cv-gastos { padding: 12px 16px; display: grid; gap: 10px; }
.cv-gasto { display: grid; grid-template-columns: 1fr auto; gap: 4px 12px; font-size: .9rem; }
.cv-gasto .val { font-weight: 700; font-variant-numeric: tabular-nums; }
.cv-gasto .cv-barra { grid-column: 1 / -1; height: 6px; }

/* ── Celular: que se sienta como una app (2026-10-06) ───────────────────────── */
@media (max-width: 991.98px) {
  .cv-solo-pc { display: none !important; }                    /* p. ej. «← Propiedades»: en el celular ya están las pestañas de arriba */
}
@media (max-width: 575.98px) {
  /* Filas (Inicio, Resumen…): el título en dos líneas en vez de cortado, y una flecha en vez de «Abrir →», como una lista nativa */
  .cv-fila .tx b { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .cv-fila .der.cv-ir { font-size: 0; width: 18px; display: grid; place-items: center; color: var(--cv-muted); }
  .cv-fila .der.cv-ir::after { content: ""; width: 9px; height: 9px; border-top: 2px solid currentColor; border-right: 2px solid currentColor;
    transform: rotate(45deg); margin-right: 4px; }
  /* Propiedades: el buscador a todo el ancho y los dos filtros lado a lado */
  .cv-filtros { display: grid !important; grid-template-columns: 1fr 1fr; }
  .cv-filtros > * { width: 100% !important; max-width: none !important; }
  .cv-filtros > input { grid-column: 1 / -1; }
  /* Informes: cada informe es una tarjeta (la tabla no entra en el ancho de un celular) */
  .cv-hist thead { display: none; }
  .cv-hist, .cv-hist tbody, .cv-hist tr, .cv-hist td { display: block; width: 100%; }
  .cv-hist tr { position: relative; padding: 12px 14px; border-bottom: 1px solid var(--cv-line); }
  .cv-hist tr:last-child { border-bottom: 0; }
  .cv-hist td { border: 0 !important; padding: 1px 0 !important; background: none !important; }
  .cv-hist td:first-child { padding-right: 92px !important; }
  .cv-hist td:nth-child(4) { position: absolute; top: 12px; right: 14px; width: auto; }
  .cv-hist td:last-child { display: flex; flex-wrap: wrap; gap: 6px; padding-top: 8px !important; }
}
/* Respuesta al toque: lo que se toca se marca, como en una app (solo en pantallas táctiles) */
@media (hover: none) {
  a.cv-fila:active, a.cv-prop:active, .cv-check:active { background: var(--cv-card-2); }
  a.cv-kpi:active, a.cv-acceso:active, a.cv-op:active, .cv-perfil:active { transform: scale(.985); background: var(--cv-card-2); }
  .btn:active { transform: scale(.97); }
  a.cv-kpi, a.cv-acceso, a.cv-op, .btn { transition: transform .12s ease, background-color .12s ease; }
}

/* Una pantalla sin contenido propio: acceso restringido, no disponible (mensaje centrado) */
.cv-vacio { max-width: 460px; margin: 60px auto; text-align: center; }
.cv-vacio .cv-chip { margin-bottom: 12px; }
.cv-vacio h1 { font-size: 1.4rem; font-weight: 800; }
