/* ============================================================================
   Lumina CRM · screens.css — estilos que solo necesitan pantallas concretas
   Añade; no redefine nada de components.css. Todo sale de los tokens de tokens.css,
   así que sirve igual en claro y oscuro (la única excepción es el texto blanco
   sobre la foto de P0). La raíz de cada pantalla sigue siendo
   <div class="pantalla sin-tabbar" data-pantalla="ID">, y el diseño de la
   pantalla entera se engancha con [data-pantalla]. Secciones:
     1. P0 Bienvenida              (.bienvenida__*)
     2. OB1–OB6 Onboarding         (.onboarding__*)
     3. W1–W5 Lo que ve la clienta (.exhibicion__*, .califica*)
     4. Pulido
   ========================================================================== */

/* ---------------------------------------------------------------- 1. P0 Bienvenida */
.bienvenida__marca { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-4) 0 var(--space-3); font-family: var(--font-display); font-weight: 700; font-size: var(--fs-lg); }
.bienvenida__logo { height: 28px; width: auto; }
.pantalla[data-pantalla="P0"] { display: flex; flex-direction: column; }
/* La fachada crece con el alto disponible (entre 216 y 360 px) para que la pantalla se vea llena en cualquier celular. */
.bienvenida__hero { position: relative; margin: 0; flex: 1 1 216px; min-height: 216px; max-height: 360px; border-radius: var(--radius-xl); overflow: hidden; background: var(--surface-2); }
.bienvenida__hero img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 40%; }
/* Texto blanco sobre la foto: la pantalla oscura del pie sale de --overlay (dos capas) para que se lea con cualquier fachada. */
.bienvenida__hero figcaption { position: absolute; left: 0; right: 0; bottom: 0; padding: var(--space-5) var(--space-4) var(--space-3); color: #fff; font-size: var(--fs-sm); font-weight: 600; background: linear-gradient(to top, var(--overlay), transparent), linear-gradient(to top, var(--overlay), transparent); }
.bienvenida__texto { margin-top: var(--space-4); }
.bienvenida__lema { font-size: var(--fs-2xl); line-height: var(--lh-2xl); font-weight: 700; letter-spacing: -0.02em; margin: 2px 0 var(--space-1); }
.bienvenida__quien { margin: var(--space-5) 0 var(--space-3); }
.bienvenida__rol { display: flex; align-items: center; gap: var(--space-3); width: 100%; min-height: 76px; padding: var(--space-3); text-align: left; color: inherit; background: var(--surface); border: 2px solid transparent; border-radius: var(--radius-l); transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease); }
.bienvenida__rol:active { transform: scale(0.99); }
.bienvenida__rol.activo { border-color: var(--primary); background: var(--primary-soft); }
.bienvenida__rol-texto { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.bienvenida__rol-nombre { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-lg); line-height: var(--lh-lg); }
.bienvenida__rol-sub { font-size: var(--fs-sm); line-height: var(--lh-sm); color: var(--text-2); }
.bienvenida__rol-sub b { color: var(--primary); font-weight: 700; }
.bienvenida__enlace { display: flex; align-items: center; justify-content: center; gap: var(--space-1); min-height: var(--tap); margin: var(--space-3) auto 0; font-size: var(--fs-sm); font-weight: 600; }
.bienvenida__version { text-align: center; margin-top: var(--space-1); }

/* ---------------------------------------------------------------- 2. OB1–OB6 Onboarding */
/* El pie del asistente de components.css es absoluto y se va con el contenido al desplazar; en el onboarding (listas largas) se queda pegado abajo. */
.pantalla[data-pantalla^="OB"] { display: flex; flex-direction: column; padding-bottom: 0; }
.onboarding__cab { position: sticky; top: 0; z-index: 4; margin: 0 calc(-1 * var(--space-4)); padding: 0 var(--space-4); background: var(--bg); }
.onboarding__paso { width: var(--tap); text-align: right; }
.onboarding__cuerpo { flex: 1 0 auto; padding: var(--space-2) 0 var(--space-5); }
.pantalla[data-pantalla^="OB"] .asistente__pie { position: sticky; left: auto; right: auto; bottom: 0; flex: 0 0 auto; margin: 0 calc(-1 * var(--space-4)); }
/* Las horas de apertura y cierre ahora las dibuja el editor de horario por día (.horario-dia en components.css), que ya se adapta a los 320 px. */
.onboarding__servicio { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3); background: var(--surface); border-radius: var(--radius-m); }
.onboarding__servicio-cuerpo { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; text-align: left; color: inherit; transition: opacity var(--dur-fast) var(--ease); }
.onboarding__servicio.apagado .onboarding__servicio-cuerpo { opacity: 0.55; }
/* Los nombres largos ("Extensiones de pestañas (retoque)") se parten en dos líneas en vez de cortarse con puntos suspensivos. */
.onboarding__servicio .fila__titulo .nombre, .onboarding__fila .fila__titulo .nombre { white-space: normal; overflow: visible; }
.onboarding__cada { align-self: flex-start; display: inline-flex; align-items: center; gap: 6px; margin-top: var(--space-2); padding: 4px 10px; border-radius: var(--radius-pill); background: var(--primary-soft); color: var(--primary); font-size: var(--fs-xs); font-weight: 700; }
.onboarding__yo { padding: 0 var(--space-3); background: var(--surface); border-radius: var(--radius-m); }
.onboarding__conexion { text-align: center; padding: var(--space-2) 0; }
.onboarding__plantillas { display: flex; flex-direction: column; gap: var(--space-5); margin-top: var(--space-4); }
.onboarding__plantilla h3 { font-size: var(--fs-md); }
.onboarding__resumen { display: flex; flex-direction: column; padding: 0 var(--space-3); background: var(--surface); border-radius: var(--radius-l); }
.onboarding__fila { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3) 0; }
.onboarding__fila + .onboarding__fila { border-top: 1px solid var(--border); }
.onboarding__fila .fila__sub { white-space: normal; }
.onboarding__ico { width: 36px; height: 36px; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-s); background: var(--primary-soft); color: var(--primary); }
.pantalla[data-pantalla="OB6"] .vacio { padding-top: var(--space-3); padding-bottom: var(--space-4); }

/* ---------------------------------------------------------------- 3. W1–W5 Lo que ve la clienta */
.pantalla[data-pantalla^="W"] { display: flex; flex-direction: column; min-height: 100%; padding-bottom: var(--space-4); }
.exhibicion__sub { display: flex; align-items: center; gap: var(--space-2); padding-bottom: var(--space-2); font-size: var(--fs-sm); }
/* El chat ocupa todo el alto libre y llega a los bordes, como una conversación real de WhatsApp. */
.exhibicion__chat { flex: 1 0 auto; display: flex; flex-direction: column; margin: 0 calc(-1 * var(--space-4)); }
.exhibicion__chat .wa { flex: 1 0 auto; min-height: 360px; border-radius: 0; padding: var(--space-3) var(--space-4) var(--space-5); }
.exhibicion__guion { margin-top: var(--space-3); }
.exhibicion__guion summary { cursor: pointer; min-height: var(--tap); display: flex; align-items: center; }
.exhibicion__ayuda { text-align: center; margin-top: var(--space-2); }
.exhibicion__pie { display: flex; flex-direction: column; gap: var(--space-3); padding-top: var(--space-3); }
.exhibicion__pie .nota-motor { margin-top: 0; }
.wa__enlace { color: var(--info); text-decoration: underline; word-break: break-all; }

/* Página pública «Califica tu visita» (W5): una pantalla, estrellas grandes centradas y un botón ancho. */
.califica { flex: 1 0 auto; display: flex; flex-direction: column; gap: var(--space-3); }
.califica__url { align-self: center; display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: var(--radius-pill); background: var(--surface-2); color: var(--text-2); font-size: var(--fs-xs); font-weight: 600; }
.califica__tarjeta { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); padding: var(--space-4); text-align: center; background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius-xl); box-shadow: var(--shadow); }
.califica__marca { display: flex; align-items: center; gap: var(--space-2); color: var(--text-2); font-size: var(--fs-sm); font-weight: 600; }
.califica__pregunta { font-size: var(--fs-xl); line-height: var(--lh-xl); }
.califica__estrellas { display: flex; justify-content: center; }
.califica__estrellas .estrellas { gap: 6px; }
.califica__estrellas .estrellas--grande .ico-xs { width: var(--tap); height: var(--tap); padding: 4px; cursor: pointer; transition: transform var(--dur-fast) var(--ease); }
.califica__estrellas .estrellas--grande .ico-xs:hover { transform: scale(1.08); }
.califica__estrellas .estrellas .vacia { color: var(--text-3); }
.califica__hint { min-height: var(--lh-sm); }
.califica__tarjeta .campo { width: 100%; text-align: left; }
.califica__tarjeta textarea { min-height: 72px; }
.califica__enviar { margin-top: var(--space-1); }
.califica__gracias { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); padding: var(--space-4) 0; }
.califica__gracias .estrellas--grande .ico-xs { width: 32px; height: 32px; }

/* ---------------------------------------------------------------- 4. Pulido */
/* El campo de teléfono de C5 usa id="telefono", el mismo del marco del teléfono (#telefono en base.css) y heredaba su alto de pantalla completa, su radio y su sombra. */
input#telefono { position: static; display: block; width: 100%; height: 48px; max-height: none; overflow: visible; box-shadow: none; border-radius: var(--radius-s); background: var(--surface-2); }
input#telefono:focus { background: var(--bg); }

/* ---------------------------------------------------------------- 5. App real (Fase 2): Por enviar hoy, descuento de recontacto */
/* H1 · "Por enviar hoy": una tarjeta por recordatorio o mensaje programado que ya toca enviar. Reutiliza .tarjeta-rc (mismo ritmo que "Para ofrecer"). */
.por-enviar { border-left: 4px solid var(--warning); }
.por-enviar__meta { display: flex; align-items: center; flex-wrap: wrap; gap: 4px var(--space-2); padding-left: 56px; }
.por-enviar__texto { margin-bottom: var(--space-2); }
.por-enviar .fila__sub { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }   /* un recordatorio cabe en dos líneas; el texto de un recontacto programado se recorta */
.por-enviar .tarjeta-rc__acciones .btn--ghost { flex: 0 1 auto; padding: 0 var(--space-4); }
@media (max-width: 379px) { .por-enviar__meta { padding-left: 0; } }

/* N7 · descuento de recontacto vigente con su interruptor. */
.descuento-vigente { display: flex; flex-direction: column; gap: var(--space-1); }
.descuento-vigente .fila-sw { padding-bottom: 0; }
.descuento-vigente__precio { font-size: var(--fs-sm); color: var(--text-2); }
.descuento-vigente__precio b { color: var(--text); }

/* N3 / N6 · ángulo de la foto antes de tomarla (en la app la cámara es la del celular). */
.angulos-foto { margin-top: var(--space-3); }

/* C2 · ficha de una clienta eliminada. */
.eliminada__cab { display: flex; align-items: center; gap: var(--space-4); margin-top: var(--space-2); }
.eliminada__cab .avatar { background: var(--neutral-soft); color: var(--neutral); }

/* C2 · Historial: «+ Sesión anterior» y precios por servicio (M-020), una línea por servicio que se abre con sus visitas. */
.historial__acciones { display: flex; justify-content: flex-end; }
.precios { display: flex; flex-direction: column; gap: var(--space-2); }
.precios__servicio { background: var(--surface); border-radius: var(--radius-m); }
.precios__servicio summary { list-style: none; cursor: pointer; min-height: var(--tap); display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); }
.precios__servicio summary::-webkit-details-marker { display: none; }
.precios__nombre { flex: 1; min-width: 0; font-weight: 600; overflow-wrap: anywhere; }
.precios__rango { font-size: var(--fs-sm); white-space: nowrap; }
.precios__chev { color: var(--text-3); transition: transform 0.15s ease; flex: 0 0 auto; }
.precios__servicio[open] .precios__chev { transform: rotate(180deg); }
.precios__filas { padding: 0 var(--space-3) var(--space-2); display: flex; flex-direction: column; }
.precios__fila { display: grid; grid-template-columns: 5.5em minmax(0, 1fr); column-gap: var(--space-2); width: 100%; text-align: left; color: inherit; padding: var(--space-2) 0; border-top: 1px solid var(--border); font-size: var(--fs-sm); }
.precios__dia { color: var(--text-2); }
.precios__nota { grid-column: 2; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }   /* la nota completa está en la sesión (C3) */

/* ST10 · Colores de la app (M-016): cada muestra lleva su propio data-tema y se pinta con ese tema dentro del actual */

/* ---------------------------------------------------------------- Apariencia (M-022, ADR-BRAND-06) */
.muestras-color { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-3) var(--space-2); }
.muestra-color { display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: var(--fs-xs); font-weight: 600; color: var(--text-2); text-align: center; }
.muestra-color__boton { width: 44px; height: 44px; border-radius: 50%; background: linear-gradient(135deg, var(--bg) 0 50%, var(--primary) 50% 100%); box-shadow: inset 0 0 0 1px var(--border); transition: transform var(--dur-fast) var(--ease); }
.muestra-color__boton:active { transform: scale(0.92); }
.muestra-color__boton[aria-pressed="true"] { box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px var(--primary); }
.muestra-color__boton:disabled { opacity: 1; cursor: default; }
.diseno-propio--activo { box-shadow: 0 0 0 2px var(--primary); }
.barra-tonos { width: 100%; height: 14px; margin-top: var(--space-2); -webkit-appearance: none; appearance: none; border-radius: 7px; outline: none;
  background: linear-gradient(90deg, hsl(0,60%,45%), hsl(60,60%,40%), hsl(120,55%,35%), hsl(180,60%,35%), hsl(240,55%,50%), hsl(300,50%,45%), hsl(359,60%,45%)); }
.barra-tonos::-webkit-slider-thumb { -webkit-appearance: none; width: 26px; height: 26px; border-radius: 50%; background: #fff; border: 2px solid var(--text); cursor: pointer; }
.barra-tonos::-moz-range-thumb { width: 24px; height: 24px; border-radius: 50%; background: #fff; border: 2px solid var(--text); cursor: pointer; }
.barra-tonos:focus-visible { outline: 2px solid var(--primary); outline-offset: 4px; }
@media (prefers-reduced-motion: reduce) { .muestra-color__boton { transition: none; } }

.diseno-propio .chips { flex-wrap: wrap; overflow: visible; }
.campana-mensaje { display: block; margin-top: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------------------------------------------------------------- AV1 / AV2 · La agenda viva (M-037, RN-22) */
/* AV2 · la vista previa de cuántas horas verá la clienta. */
.av-previa { padding: var(--space-3); border-radius: var(--radius-m); background: var(--primary-soft); color: var(--primary); margin-top: var(--space-2); }
.av-previa .row { gap: var(--space-2); align-items: center; }
/* AV1 · la página pública simulada: una tarjeta con los días y sus dos o tres horas (en el Worker es HTML sin JavaScript con el mismo cálculo). */
.av-pagina { background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius-xl); padding: var(--space-4); box-shadow: var(--shadow); }
.av-dia { margin-top: var(--space-3); }
.av-dia__titulo { font-size: var(--fs-sm); color: var(--text-2); font-weight: 600; margin-bottom: 4px; }
.av-op { display: flex; align-items: center; gap: var(--space-3); min-height: var(--tap); padding: 6px var(--space-3); border: 1px solid var(--border); border-radius: var(--radius-m); background: var(--surface); margin-top: 6px; cursor: pointer; }
.av-op input { width: 22px; height: 22px; accent-color: var(--primary); margin: 0; flex: none; }
.av-op > span:first-of-type { flex: 1; }
.av-op small { display: block; }
.av-op--sel { border-color: var(--primary); background: var(--primary-soft); }
/* La hoja «¿Lo enviaste?» mientras el Worker firma el enlace de la agenda viva. */
.btn--espera { opacity: .55; }

/* M-041 · AC1 «Agendar cita»: la agenda real del día dentro de la hoja (una columna por profesional, lo libre se toca) */
.ac-agenda { overflow-x: auto; margin-top: var(--space-2); border: 1px solid var(--border); border-radius: var(--radius-m); background: var(--bg); max-height: 52vh; overflow-y: auto; }
.ac-agenda__cab, .ac-agenda__fila { display: grid; grid-template-columns: 54px repeat(var(--cols, 1), minmax(108px, 1fr)); min-width: calc(54px + var(--cols, 1) * 108px); }
.ac-agenda__cab { position: sticky; top: 0; z-index: 1; background: var(--surface-2); border-bottom: 1px solid var(--border); }
.ac-agenda__pro { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 6px 4px; font-size: var(--fs-xs); text-align: center; }
.ac-agenda__pro small { color: var(--text-3); }
.ac-agenda__hora { font-size: var(--fs-xs); color: var(--text-3); padding: 4px 6px 0 0; text-align: right; white-space: nowrap; }
.ac-celda { display: flex; align-items: center; gap: 4px; min-height: 34px; margin: 1px 3px; padding: 4px 6px; border: 0; border-radius: 8px; font: inherit; font-size: var(--fs-xs); text-align: left; background: transparent; color: var(--text-3); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.ac-celda--libre { background: var(--primary-soft); color: var(--primary); font-weight: 600; cursor: pointer; }
.ac-celda--libre.activa { background: var(--primary); color: var(--primary-ink); }   /* M-072 (C): por token (en oscuro el primario es claro) */
.ac-celda--ocupada { background: var(--surface-2); color: var(--text-2); border-radius: 0; margin-top: 0; margin-bottom: 0; }
.ac-celda--ocupada.ac-celda--inicio { border-radius: 8px 8px 0 0; margin-top: 1px; color: var(--text); font-weight: 600; }
.ac-celda--descanso { background: repeating-linear-gradient(45deg, var(--surface-2), var(--surface-2) 4px, transparent 4px, transparent 8px); }
/* Agendar fuera de horario (la dueña): la hora fuera del horario se toca; elegida, lleva el color de aviso y la hoja dice que queda fuera del horario */
button.ac-celda--fuera, button.ac-celda--descanso { cursor: pointer; }
/* ADR-0092: la franja ocupada se toca para agendar a la misma hora; las citas que se cruzan, un carril cada una */
button.ac-celda--ocupada { cursor: pointer; }
button.ac-celda--ocupada.activa { background: var(--warning-soft); color: var(--warning); box-shadow: inset 0 0 0 2px var(--warning); }
.ac-carriles { display: grid; grid-template-columns: repeat(var(--carriles, 1), minmax(0, 1fr)); gap: 2px; flex: 1; min-width: 0; align-self: stretch; }
.ac-carril { grid-column: calc(var(--carril, 0) + 1); min-height: 100%; border-radius: 4px; background: var(--surface); border-left: 2px solid var(--border); padding: 2px 4px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: var(--text-3); }
.ac-carril--inicio { color: var(--text); font-weight: 600; border-left-color: var(--warning); }
button.ac-celda--fuera { border: 1px dashed var(--border); }
button.ac-celda--fuera.activa, button.ac-celda--descanso.activa { background: var(--warning-soft); color: var(--warning); border-color: var(--warning); font-weight: 600; }
/* Ronda 3 · frente B (O10): el «?» del número de Recompra (el de M7) bajo sus cifras; «Ya les escribí» va aparte y no suma */
.que-cuenta { margin-top: var(--space-2); }
.burbuja-lista__aparte { border-top: 1px solid var(--border); margin-top: var(--space-2); padding-top: var(--space-2); }
.burbuja-lista__aparte > p { margin: 0 var(--space-3) var(--space-1) var(--space-4); }
.burbuja-lista__subtitulo { margin: 0 var(--space-3) 2px var(--space-4); font-weight: 600; font-size: var(--fs-sm); color: var(--text-2); }

/* ---------------------------------------------------------------- D1 · la Caja del Centro de datos (M-057, RN-10) */
/* Hoy · Semana · Mes · Rango arriba; la cifra grande con sus visitas y el cambio (ícono, texto y color); las barras a escala con los extremos
   rotulados; el cierre de caja con una fila por profesional (su color, su parte del total) y lo que más se hizo. Todo con los tokens: claro y oscuro. */
.caja-rango .campo__ayuda:empty { display: none; }
.caja-cabeza { margin-top: var(--space-4); }
.caja-cabeza__periodo { font-size: var(--fs-sm); line-height: var(--lh-sm); font-weight: 600; color: var(--text-2); }
.caja-cabeza__total { margin-top: 2px; font-family: var(--font-display); font-size: var(--fs-3xl); line-height: var(--lh-3xl); font-weight: 700; letter-spacing: -0.01em; color: var(--text); }
.caja-cabeza__sub { font-size: var(--fs-sm); line-height: var(--lh-sm); color: var(--text-2); }
.caja-cambio { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin-top: var(--space-2); font-size: var(--fs-sm); line-height: var(--lh-sm); color: var(--text-2); }
.caja-cambio__num { font-size: var(--fs-sm); gap: 4px; padding: 2px 8px; border-radius: var(--radius-pill); background: var(--surface-2); }
.caja-cambio__num.tendencia--sube { background: var(--accent-soft); }
.caja-cambio__num.tendencia--baja { background: var(--danger-soft); }
.caja-barras { display: flex; align-items: flex-end; gap: max(2px, calc(56px / var(--n, 7))); height: 88px; }
.caja-barras__b { flex: 1 1 0; min-width: 0; min-height: 2px; border-radius: 3px 3px 0 0; background: color-mix(in srgb, var(--primary) 38%, var(--surface)); }
.caja-barras__b--mejor { background: var(--primary); }
.caja-barras__b--futuro { min-height: 0; background: transparent; border-top: 2px dotted var(--border); border-radius: 0; }
.caja-cierre__titulo { font-family: var(--font-display); font-size: var(--fs-lg); line-height: var(--lh-lg); font-weight: 700; }
.caja-fila { margin-top: var(--space-2); }
.caja-fila__linea { display: flex; align-items: baseline; gap: var(--space-2); font-size: var(--fs-sm); line-height: var(--lh-sm); }
.caja-fila__nombre { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; color: var(--text); }
.caja-fila__nombre .ico-sm { vertical-align: -3px; color: var(--text-2); }
.caja-fila__visitas { flex: 0 0 auto; color: var(--text-2); }
.caja-fila__pesos { flex: 0 0 auto; min-width: 84px; text-align: right; font-weight: 700; }
.caja-fila__barra { margin-top: 4px; height: 6px; border-radius: var(--radius-pill); background: var(--surface-2); overflow: hidden; }
.caja-fila__barra i { display: block; height: 100%; border-radius: inherit; }
.caja-fila--aparte { margin-top: var(--space-3); padding-top: var(--space-3); border-top: 1px solid var(--border); }
.caja-texto { width: 100%; padding: var(--space-3); border-radius: var(--radius-s); background: var(--surface-2); border: 1px solid var(--border); color: var(--text); font: inherit; font-size: var(--fs-sm); line-height: var(--lh-sm); resize: none; }

/* ---------------------------------------------------------------- RN-25 (M-064): la Tienda */
.tienda-linea { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) 0; border-top: 1px solid var(--border); }
.tienda-linea:first-of-type { border-top: 0; }
.tienda-linea__cuerpo { flex: 1; min-width: 0; }
.tienda-linea__nombre { font-weight: 600; }
.tienda-linea__sub { font-size: var(--fs-xs); color: var(--text-2); display: flex; align-items: center; gap: 4px; }
.tienda-linea__sub--alerta { color: var(--warning); font-weight: 600; }
.tienda-linea__pesos { font-weight: 600; white-space: nowrap; }
.stepper { display: inline-flex; align-items: center; gap: 2px; }
.stepper button { width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--border); background: var(--surface); color: var(--text); font-size: var(--fs-lg); line-height: 1; display: inline-flex; align-items: center; justify-content: center; }
.stepper button:active { background: var(--surface-2); }
.stepper__n { min-width: 22px; text-align: center; font-weight: 700; font-variant-numeric: tabular-nums; }
.tienda-totales { border-top: 1px solid var(--border); padding-top: var(--space-2); margin-top: var(--space-2); font-size: var(--fs-sm); }
.tienda-totales b { font-size: var(--fs-md); }
.quedan { display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-xs); color: var(--text-2); }
.quedan--alerta { color: var(--warning); font-weight: 600; }
.hoja__cuerpo .tienda-grupo { margin-top: var(--space-3); }
/* M-076 (ADR-0100): la Tienda con tres botones. En Ajustes, la fila entera abre el artículo; «Llegaron» más marcado en lo por reponer; «Agregar …» al final de la lista */
.tienda-linea__toque { text-align: left; background: none; border: 0; padding: 0; color: inherit; min-height: var(--tap); display: flex; flex-direction: column; justify-content: center; }
.tienda-llegaron { position: relative; background: var(--surface-2); color: var(--primary); border-color: var(--border); }
.tienda-llegaron--fuerte { background: var(--primary-soft); border-color: var(--primary-soft); }
.tienda-llegaron::after, .tienda-mas::after, .stepper--pastilla button::after { content: ''; position: absolute; inset: -7px -4px; }   /* 44 px de toque */
.tienda-agregar { display: flex; align-items: center; gap: var(--space-2); width: 100%; min-height: 48px; border-top: 1px solid var(--border); color: var(--primary); font-weight: 650; text-align: left; }
.tienda-agregar:first-child { border-top: 0; }
.tienda-agregar .ico { width: 18px; height: 18px; }
.tienda-pie { text-align: center; }
.segmento--con-sub button { flex-direction: column; gap: 0; height: auto; min-height: 44px; padding: 5px 4px; line-height: 1.2; }
.segmento__sub { font-size: var(--fs-xs); color: var(--text-3); font-weight: 600; }
.segmento--con-sub button.activo .segmento__sub { color: var(--primary); }
/* En la cita: nombre, precio y un «+» redondo que al sumar se vuelve «− N +» */
.tienda-linea--venta { min-height: 56px; }
.tienda-linea__precio { font-size: var(--fs-sm); color: var(--text-2); white-space: nowrap; }
.tienda-mas { position: relative; width: 36px; height: 36px; border-radius: 50%; background: var(--surface-2); color: var(--primary); display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; }
.tienda-mas .ico { width: 18px; height: 18px; }
.tienda-mas:active { background: var(--primary-soft); }
.stepper--pastilla { background: var(--primary-soft); border-radius: var(--radius-pill); height: 36px; padding: 0 2px; gap: 0; flex: 0 0 auto; }
.stepper--pastilla button { position: relative; border: 0; background: transparent; color: var(--primary); width: 32px; height: 36px; }
.stepper--pastilla button:active { background: rgba(0, 0, 0, 0.06); }
.tienda-lleva { font-size: var(--fs-sm); line-height: 1.4; min-height: 1.4em; color: var(--text-2); text-align: center; margin: 0 0 var(--space-2); overflow-wrap: anywhere; }
.tienda-lleva b { color: var(--text); font-weight: 600; }

/* M-076 (ADR-0100): IM1 «Importar datos»: arriba el Excel con las cuatro hojas; debajo, las cuatro a la vista, cada una con su plantilla y «Pegar celdas» */
.im-todo { background: var(--primary-soft); border-radius: var(--radius-l); padding: var(--space-4); }
.im-todo .row .ico { color: var(--primary); }
.im-todo__botones { display: flex; gap: var(--space-2); }
.im-todo__botones > .btn { flex: 1 1 0; min-width: 0; height: auto; min-height: var(--tap); white-space: normal; }
.im-leido { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); background: var(--surface); border-radius: var(--radius-s); padding: 4px 4px 4px var(--space-3); }
.im-leido .ico { color: var(--accent); flex: 0 0 auto; }
.im-o { text-align: center; margin: var(--space-4) 0 var(--space-2); }
.im-bloque + .im-bloque { margin-top: var(--space-2); }
.im-bloque__cab { display: flex; align-items: center; gap: var(--space-2); }
.im-bloque__ico { width: 32px; height: 32px; border-radius: 10px; background: var(--surface-2); color: var(--primary); display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; }
.im-bloque__ico .ico { width: 18px; height: 18px; }
.im-bloque__acciones { display: flex; gap: var(--space-4); border-top: 1px solid var(--border); margin-top: var(--space-2); }
.im-bloque__acciones .btn { min-height: var(--tap); }
.im-bloque__pegar { padding-bottom: var(--space-2); }
.im-bloque--foco { box-shadow: 0 0 0 2px var(--primary); }
.im-chat { text-align: center; }

/* M-058 (RN-26) · ST15 Tu plan y el aviso de solo lectura */
.plan-estado { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-2); }
.plan-estado__titulo { font-size: var(--fs-lg); margin: 0; }
.plan-opciones { display: grid; gap: var(--space-2); }
.plan-opcion { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: var(--space-3); border-radius: var(--radius-m); background: var(--surface); border: 2px solid transparent; width: 100%; text-align: left; color: inherit; }
.plan-opcion.activo { border-color: var(--primary); background: var(--primary-soft); }
.plan-opcion__nombre { font-weight: 700; }
.plan-opcion__desc { font-size: var(--fs-sm); color: var(--text-2); }
.plan-opcion__precio { font-weight: 700; margin-top: var(--space-1); }
.plan-acepto { display: flex; gap: var(--space-2); align-items: flex-start; font-size: var(--fs-sm); }
.plan-acepto input { width: 22px; height: 22px; margin-top: 2px; accent-color: var(--primary); flex: none; }
.plan-transferencia { white-space: pre-line; }
.aviso-solo-lectura { margin-bottom: var(--space-3); }
