/* Amed'or — PANEL MAESTRO EN EL TELÉFONO (27-oct-2026). Pedido de Carlos: «se ve muy pequeño, montado, el calendario no
 * solamente muestra un solo día, arriba el botón de paneles no se ve bien: amoldar el sistema para el teléfono».
 *
 * REGLA DE ORO: TODO vive dentro de @media (max-width:767px). iPad (>= 768) y escritorio (>= 980) no cambian ni un píxel;
 * el único bloque fuera es el que ESCONDE las piezas nuevas (☰ de la cabecera, barra inferior, «Cerrar» del cajón) por
 * encima de 768. test/telefono.test.js lo vigila.
 *
 * Causa raíz del «se ve chiquito»: la fila de botones de la cabecera medía 474 px en un viewport de 375, y iOS hacía
 * zoom-out de toda la página (~21 %). Aquí la cabecera cabe siempre: ☰ Menú · logo · Cobrar.
 *
 * Accesibilidad (Jennifer es disléxica, §6.8 del módulo de ficha): fondo blanco, icono + palabra en cada destino,
 * toques >= 48 px, campos >= 16 px (iOS no hace zoom al enfocar), una sola columna, nada montado. */

/* ===== fuera del teléfono estas piezas no existen ===== */
@media (min-width:768px){
  #hdrMenu,#tabBar,.sb-cerrar,.sb-mini-txt,#calMas,#calFab,#calBuscarBtn,#calMiniMes,.ib-l,.appt-act .tel-ico,.appt-act .tel-txt{display:none!important}
}

@media (max-width:767px){
  /* ---------- raíz: nunca más ancho que la pantalla (sin zoom-out de iOS) ---------- */
  html,body{overflow-x:clip}
  .app{overflow-x:clip}
  /* En el teléfono se desplaza la PÁGINA, no .content: con overflow:auto .content era un contenedor de desplazamiento que
     no se desplazaba, y todo lo «pegado» (barra del calendario, buscador, barra del chat) se pegaba a él y no a la pantalla. */
  .content{overflow:visible}
  /* el cajón abierto no deja desplazar el fondo */
  html:has(body.sb-open){overflow:hidden}   /* R4: en el body no sirve (html ya no es visible por el clip): la página saltaba a 0 al abrir el cajón */

  /* ---------- CABECERA DEL TELÉFONO: ☰ Menú · logo · Cobrar (una fila que cabe siempre) ---------- */
  /* La franja de la muesca/reloj del iPhone instalado queda oscura (el reloj sale en blanco con black-translucent). */
  .hdr{min-height:calc(56px + env(safe-area-inset-top,0px));padding:0 8px 0 2px;gap:4px;border-top:env(safe-area-inset-top,0px) solid #0e0a07}   /* R6: con muesca la cabecera mide 56 + la franja, igual que los «top» pegados */
  .hdr .brand{flex:1 1 auto;min-width:0;justify-content:center;gap:0}
  .hdr .brand img{height:30px}
  .hdr .brand b{display:none}
  .hdr .hdr-menu{display:inline-flex;order:-1;flex:0 0 auto;min-height:48px;min-width:48px;padding:0 12px 0 10px;gap:8px;border:0;border-radius:14px;background:none;color:#2a2118;font-size:1rem;font-weight:500}
  .hdr .hdr-menu .ico{width:26px;height:26px}
  .hdr .hdr-menu:active{background:#f4ecdc}
  .hdr .row{flex:0 0 auto;gap:6px}
  .hdr #homeBtn,.hdr #apptBtn,.hdr #refreshBtn,.hdr #logout{display:none}
  .hdr .out[hidden]{display:none}
  /* «Cobrar» (venta rápida; solo con el módulo de ventas encendido): dorado, 48 px, icono + palabra */
  .hdr #hdrVenta{min-height:48px;padding:0 16px 0 12px;gap:8px;border-radius:14px;border-color:transparent;background:linear-gradient(135deg,#9c6a1f,#7a5418);color:#fff;font-size:1rem;font-weight:600}
  .hdr #hdrVenta .ico{width:20px;height:20px}

  /* En la ficha, el ☰ cede su sitio al «← Clientes / Inicio / Citas» (única salida de la ficha): 48 px, en la cabecera. */
  body:has(#detailView.active) .hdr .hdr-menu{display:none}
  body:has(#detailView.active) .hdr .brand{visibility:hidden}
  #detailView.active > #backList{position:fixed;top:env(safe-area-inset-top,0px);left:2px;z-index:21;height:56px;max-width:46vw;margin:0;padding:0 12px 0 10px;display:inline-flex;align-items:center;gap:6px;border-radius:14px;color:#2a2118;font-size:1rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #detailView.active > #backList .ico{width:24px;height:24px;flex:0 0 auto}

  /* Con la agenda del teléfono montada (AGENDA_MOVIL) ella trae su cabecera con ☰: la general sobra. */
  body.am-agenda-on:has(#calendarView.active) .hdr{display:none}   /* R2: solo mientras la Agenda está a la vista (en Inicio/Clientes vuelve el ☰) */
  body.am-agenda-on .am-root{border-top:env(safe-area-inset-top,0px) solid #0e0a07}   /* R3: la cabecera de la agenda no queda bajo la muesca */
  body.am-agenda-on .content,body.am-agenda-on #calendarView{padding-bottom:0}   /* R10: la agenda ya descuenta la barra; sin relleno de más */

  /* ---------- BARRA INFERIOR: Inicio · Agenda · Citas · Mensajes · Clientes ---------- */
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:60;height:calc(64px + env(safe-area-inset-bottom,0px));padding:0 4px env(safe-area-inset-bottom,0px);background:#fff;border-top:1px solid rgba(40,28,12,.14);box-shadow:0 -8px 24px -18px rgba(40,28,12,.5)}
  .tb-item{position:relative;flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:64px;padding:6px 1px 4px;border:0;border-radius:12px;background:none;color:#5c5040;font:inherit;font-size:.875rem;font-weight:500;line-height:1.2;cursor:pointer;-webkit-tap-highlight-color:transparent}
  .tb-item .ico{width:26px;height:26px;padding:2px 12px;box-sizing:content-box;border-radius:15px;transition:background .15s}
  .tb-item > span:not(.tb-badge){max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .tb-item.active{color:#7a5418;font-weight:600}
  .tb-item.active .ico{background:#f4ecdc}
  .tb-item:focus-visible{outline:3px solid #8a6a25;outline-offset:-3px}
  .tb-badge{position:absolute;top:4px;left:calc(50% + 4px);min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:#c62828;color:#fff;font-size:.74rem;font-weight:700;line-height:20px;text-align:center;letter-spacing:0}
  .tb-badge[hidden]{display:none}
  /* el contenido no termina debajo de la barra */
  .content{padding-bottom:calc(76px + env(safe-area-inset-bottom,0px))}
  .home-block.resumen-block{bottom:calc(64px + env(safe-area-inset-bottom,0px))}
  /* En la ficha (chat y cobro abajo) y en el mostrador de venta la barra se esconde; las hojas y modales van por encima. */
  body:has(#detailView.active) .tabbar,body:has(#posMostradorView.active) .tabbar{display:none}
  body:has(#detailView.active) .content,body:has(#posMostradorView.active) .content{padding-bottom:0}
  /* avisos que vivían pegados abajo: por encima de la barra */
  .toast{bottom:calc(84px + env(safe-area-inset-bottom,0px))}
  .undo-toast{bottom:calc(140px + env(safe-area-inset-bottom,0px))}
  .install-card{bottom:calc(76px + env(safe-area-inset-bottom,0px))}
  /* Agenda del teléfono (cuando se encienda): su alto ya descuenta la barra (ajustarAlto); el área segura la absorbe la barra. */
  body.am-agenda-on .am-root .am-fab{bottom:16px}
  body.am-agenda-on .am-root .am-hoyflot{bottom:20px}
  body.am-agenda-on .am-root .am-scroll{padding-bottom:96px}

  /* Lo que la barra y el ☰ vuelven redundante en el teléfono */
  #modBlock,#calAccess,.home-block:has(> #calAccess){display:none}
  .appt-head .backbtn[id^="backFrom"],#calendarView .cal-toolbar #backFromCal{display:none}

  /* ---------- CAJÓN (menú ☰): «Cerrar», Actualizar y Salir con palabra, solo lo que no está en la barra ---------- */
  body.sb-open .sidebar{width:min(320px,88vw);padding-top:calc(8px + env(safe-area-inset-top))}
  body.sb-open .sb-cerrar{position:absolute;top:calc(8px + env(safe-area-inset-top));right:8px;z-index:2;display:inline-flex;align-items:center;gap:6px;min-height:48px;padding:0 12px;border:0;border-radius:12px;background:none;color:#2a2118;font:inherit;font-size:1rem;font-weight:500;cursor:pointer}
  body.sb-open .sb-cerrar .ico{width:22px;height:22px}
  body.sb-open .sb-brand{padding-right:108px;min-height:48px}
  body.sb-open .sb-actions{display:contents}
  body.sb-open .sb-mini-btn{width:100%;height:auto;min-height:48px;justify-content:flex-start;gap:12px;padding:0 12px;border:0;border-radius:12px;background:none;color:#2a2118;font-size:1.02rem}
  body.sb-open .sb-mini-btn .ico{width:22px;height:22px;color:#7a5418}
  body.sb-open .sb-mini-txt{display:inline}
  body.sb-open #sbRefresh{order:1;margin:0 0 2px}
  body.sb-open .sb-nav{order:2}
  body.sb-open .sb-foot{order:3}
  body.sb-open #sbLogout{order:4;margin-top:auto;padding-top:10px;border-top:1px solid rgba(40,28,12,.14);border-radius:0;color:#9a2a2a}
  body.sb-open #sbLogout .sb-out-ch{display:inline-flex;width:22px;justify-content:center;font-size:1.2rem;color:#9a2a2a}
  /* los 5 destinos de la barra no se repiten en el cajón */
  body.sb-open .sb-link[data-nav="home"],body.sb-open .sb-link[data-nav="cal"],body.sb-open .sb-link[data-nav="appts"],body.sb-open .sb-link[data-nav="messages"],body.sb-open .sb-link[data-nav="clients"]{display:none}

  /* ---------- CAMPOS: >= 16 px (iOS no hace zoom al enfocar) y toques >= 48 px ---------- */
  :where(.app-main,.sheet--light,.am-capa,.pos-hoja,.move-backdrop) :where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),select,textarea){font-size:16px}
  .app-main .input.search,.pl-row .input,.hor-times .input,.approval-bar .ab-reschedule .input,#tab-caso textarea.input,.vid-dev select,.app-main .appt-dt,.sheet--light .appt-dt,.app-main .docs-proc,.app-main select.input.note-tipo,.app-main .note-tipo{font-size:16px}
  .app-main select.input.note-tipo,.app-main .note-tipo{min-height:44px;text-transform:none;letter-spacing:0}
  .app-main .input.search{min-height:48px;padding:10px 18px}
  .approval-bar .ab-reschedule .input{min-height:44px}
  .backbtn{min-height:48px}
  .appt-act,.appt-btn,.cal-vbtn,.cal-today,.cal-arrow,.cal-tool,.msg-tab,.mod-tab,.pend-case-btn,.tabs button{min-height:48px}
  .appt-act{font-size:.95rem;padding:8px 14px}
  .appt-act.danger{min-width:48px}

  /* ---------- LEGIBILIDAD (dislexia): peso 400 y colores de estado con contraste >= 4.5 sobre blanco ---------- */
  .app-main{font-weight:400;--ok:#1d6b3f;--warn:#8a5a00;--danger:#a3222f}
  .appt-head .hint{font-size:.95rem}
  .appt-head .appt-title,.appt-head h2.serif{font-size:1.6rem}
  .searchwrap{top:calc(56px + env(safe-area-inset-top,0px))}

  /* ---------- CALENDARIO (28-oct-2026, Carlos: «calendario mini, por días, exactamente igual que Vagaro»): barra de 2 filas
     pegada arriba (‹ Hoy › fecha / Buscar · Más), MINI-MES y debajo el DÍA en rejilla que se desplaza por dentro. Sin Semana ni Mes. ---------- */
  #calendarView{padding:0 16px 0}
  body:has(#calendarView.active) .content{padding-bottom:0}   /* la rejilla ya termina encima de la barra inferior (calAjustarAlto) */
  #calBlock .cal-head{position:sticky;top:calc(56px + env(safe-area-inset-top,0px));z-index:8;background:#fff;margin:0 -16px 10px;padding:8px 16px 8px;border-bottom:1px solid rgba(40,28,12,.14)}
  #calBlock .cal-toolbar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
  #calBlock .cal-search{display:none;grid-column:1/-1;order:9;max-width:none;min-width:0}   /* «Buscar clienta» a lo ancho (16 px: sin zoom de iOS), solo al tocar «Buscar» */
  #calBlock .cal-head.buscar-open .cal-search{display:block}
  #calBlock .cal-search .input{font-size:16px;min-height:44px}
  /* Día | Semana (Mes no existe en el teléfono): Semana = miniatura tipo Vagaro, bloques de color sin texto */
  #calBlock .cal-views{grid-column:1/3;display:grid;grid-template-columns:1fr 1fr;padding:3px}
  #calBlock .cal-vbtn{min-height:42px;padding:0 4px;font-size:1rem}
  #calBlock .cal-vbtn[data-view="month"]{display:none}
  #calBlock .cal-buscar-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;grid-column:3/4;min-height:48px;padding:0 4px;border-radius:14px;font-size:.95rem}
  #calBlock .cal-buscar-btn[aria-expanded="true"]{background:#f4ecdc;border-color:#8a6a25}
  #calBlock .cal-buscar-btn .ico{width:18px;height:18px}
  #calBlock .cal-back,#calBlock .cal-title{display:none}
  #calBlock .cal-nav{grid-column:1/-1;min-width:0;gap:8px}
  #calBlock .cal-arrow{width:48px;height:48px;font-size:1.3rem}
  #calBlock .cal-today{min-height:48px;padding:0 16px;font-size:1rem;font-weight:600}
  #calBlock .cal-period{display:block;min-width:0;margin-left:4px;font-size:1.08rem;font-weight:600;text-transform:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #calBlock .cal-period::first-letter{text-transform:uppercase}
  #calBlock .cal-mas-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;grid-column:4/5;min-height:48px;padding:0 4px;border-radius:14px;font-size:.95rem}
  #calBlock .cal-mas-btn[aria-expanded="true"]{background:#f4ecdc;border-color:#8a6a25}
  #calBlock .cal-toolbar .cal-tools,#calBlock .cal-toolbar .cal-legend-btn,#calBlock .cal-bloqs{display:none}
  #calBlock .cal-head.mas-open .cal-toolbar .cal-tools:not([hidden]){display:flex;grid-column:1/-1;flex-wrap:wrap;gap:8px}
  #calBlock .cal-head.mas-open .cal-toolbar .cal-legend-btn{display:inline-flex;grid-column:1/-1}
  #calBlock .cal-head.mas-open .cal-bloqs:not([hidden]){display:flex}
  #calBlock .cal-toolbar .cal-tool{min-height:48px;padding:0 14px;font-size:1rem;border-radius:14px}
  #calBlock .cal-tool .ico{width:18px;height:18px}
  #calBlock .cal-legend{font-size:.85rem;gap:6px 12px}
  /* la tira de días no existe en el teléfono: el mini-mes la reemplaza */
  #calBlock .cal-datestrip{display:none}
  /* ---------- MINI-MES (renderMiniMesTelefono en app.js): mes chico arriba, el día elegido en dorado, punto en los días con citas ---------- */
  #calBlock .cal-minimes{margin:0 0 8px;padding:0 0 6px;border-bottom:1px solid rgba(40,28,12,.14);user-select:none;touch-action:pan-y}
  #calBlock .cal-minimes[hidden]{display:none}
  #calBlock .mm-head{display:grid;grid-template-columns:48px minmax(0,1fr) 48px auto;align-items:center;gap:4px;min-height:48px}
  #calBlock .mm-nav{width:48px;height:48px;border:0;border-radius:14px;background:none;color:#2a2118;font:inherit;font-size:1.5rem;line-height:1;cursor:pointer}
  #calBlock .mm-nav:active{background:#f4ecdc}
  #calBlock .mm-title{min-width:0;min-height:48px;border:0;background:none;color:#2a2118;font:inherit;font-size:1.1rem;font-weight:600;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
  #calBlock .mm-title::first-letter{text-transform:uppercase}
  #calBlock .mm-toggle{display:inline-flex;align-items:center;gap:4px;min-height:44px;padding:0 10px 0 8px;border:1px solid rgba(40,28,12,.2);border-radius:12px;background:#fff;color:#7a5418;font:inherit;font-size:.9rem;font-weight:500;cursor:pointer}
  #calBlock .mm-toggle .ico{width:16px;height:16px;transform:rotate(-90deg);transition:transform .15s}
  #calBlock .mm-toggle[aria-expanded="false"] .ico{transform:rotate(90deg)}
  #calBlock .mm-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px 0}
  #calBlock .mm-dow{min-width:0;padding:2px 0 4px;text-align:center;font-size:.9rem;color:#5c5040}
  #calBlock .mm-cell{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:0;min-height:44px;padding:0;border:0;border-radius:12px;background:none;color:#2a2118;font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}
  #calBlock .mm-cell.empty{visibility:hidden;cursor:default}
  #calBlock .mm-cell .mm-num{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;font-family:'Jost',system-ui,sans-serif;font-size:1.05rem;font-weight:500;line-height:1}
  #calBlock .mm-cell .mm-dot{width:6px;height:6px;border-radius:50%;background:transparent}
  #calBlock .mm-cell.has .mm-dot{background:#8a6a25}
  #calBlock .mm-cell.today .mm-num{box-shadow:inset 0 0 0 2px #8a6a25;color:#7a5418;font-weight:600}
  #calBlock .mm-cell.sel .mm-num{background:linear-gradient(135deg,#9c6a1f,#7a5418);color:#fff;font-weight:600;box-shadow:none}
  #calBlock .mm-cell.sel .mm-dot{background:#7a5418}
  #calBlock .mm-cell.sel.has .mm-dot{background:#7a5418}
  #calBlock .mm-cell.blocked{background:repeating-linear-gradient(135deg,rgba(201,48,44,.18) 0 6px,#fff 6px 12px)}
  #calBlock .mm-cell.otro{color:#8a8070}
  #calBlock .mm-cell:focus-visible{outline:3px solid #8a6a25;outline-offset:-3px}
  /* el DÍA en rejilla se desplaza por dentro (alto = hasta la barra inferior, calAjustarAlto); deslizar de lado = otro día */
  #calBlock .cal-tl-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;touch-action:pan-y;border:1px solid rgba(40,28,12,.14);border-radius:16px;background:#fff}
  #calBlock .cal-tl-scroll .cal-hour:first-child{border-top:0}
  #calBlock .cal-day-empty{display:none}   /* el botón «Nueva cita» flotante ya lo dice; la nota alargaba la página */
  /* ---------- SEMANA EN MINIATURA (renderWeekView, 48 px/h): 7 columnas, bloques de color SIN texto (tocar = hoja de la cita),
     cabecera de días con palabra completa (tocar = ese día en grande); se desplaza por dentro; deslizar = otra semana ---------- */
  #calBlock .wkg{border-color:rgba(40,28,12,.14)}
  #calBlock .wkg-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;touch-action:pan-y}
  #calBlock .wkg-head,#calBlock .wkg-body{grid-template-columns:44px repeat(7,minmax(0,1fr))}
  #calBlock .wkg-dh{min-height:52px;padding:5px 1px 4px}
  #calBlock .wkg-dh .dh-dow{font-size:.8rem;letter-spacing:0;text-transform:none;color:#5c5040}
  #calBlock .wkg-dh .dh-num{font-family:'Jost',system-ui,sans-serif;font-size:1.05rem;font-weight:600;color:#2a2118}
  #calBlock .wkg-dh .dh-cnt{display:none}
  #calBlock .wkg-dh.today{background:#f4ecdc}
  #calBlock .wkg-dh.today .dh-dow,#calBlock .wkg-dh.today .dh-num{color:#7a5418}
  #calBlock .wkg-gutter .gh{right:3px;font-size:.78rem;font-weight:600;color:#2a2118}
  #calBlock .wkg-appt{display:block;padding:0;border-radius:6px;border-left-width:4px;min-height:14px}
  #calBlock .wkg-appt > *{display:none!important}   /* nada de texto ni manijas: el bloque es solo color; el quién sale al tocar */
  #calBlock .wkg-now .now-lbl{display:none}
  /* vista Día: letra legible, sin manija de duración; la etiqueta de «ahora» en la columna de las horas */
  #calBlock .cal-hour .ch-label{flex:0 0 58px;font-size:.88rem;padding-top:4px}
  #calBlock .cal-hour .ch-half{font-size:.78rem}
  #calBlock .cal-now-line{left:58px}
  #calBlock .cal-now-line .now-lbl{left:-56px;font-size:.78rem}
  #calBlock .tl-appt{padding:4px 10px;justify-content:flex-start;line-height:1.25}
  #calBlock .tl-appt .ta-cli{font-size:1rem;font-weight:600}
  #calBlock .tl-appt .ta-time,#calBlock .tl-appt .ta-svc,#calBlock .tl-appt .ta-line2{font-size:.88rem}
  #calBlock .tl-appt .appt-st{font-size:.82rem;margin-top:1px}
  /* talla del bloque (alto real): 45 min = 48 px -> nombre + estado; 30 min = 32 px -> solo el nombre; 60 min = todo */
  #calBlock .tl-appt.t-s .ta-line2,#calBlock .tl-appt.t-xs .ta-line2,#calBlock .tl-appt.t-xxs .ta-line2,#calBlock .tl-appt.t-xxs .appt-st{display:none}
  #calBlock .tl-appt.t-xs,#calBlock .tl-appt.t-xxs{padding:2px 10px;justify-content:center}
  #calBlock .tl-appt.t-xs .appt-st{display:inline-flex}
  #calBlock .wa-resize{display:none}
  #calBlock .cal-day-empty{font-size:1rem}
  /* botón flotante «Nueva cita» (56 px) por encima de la barra inferior */
  #calBlock .cal-fab{position:fixed;right:16px;bottom:calc(80px + env(safe-area-inset-bottom,0px));z-index:30;display:inline-flex;align-items:center;gap:8px;min-height:56px;padding:0 20px 0 16px;border:0;border-radius:28px;background:#7a5418;color:#fff;font:inherit;font-size:1.05rem;font-weight:600;box-shadow:0 8px 22px rgba(26,18,6,.3);cursor:pointer}
  #calBlock .cal-fab .ico{width:22px;height:22px}
  #calBlock .cal-fab:active{transform:scale(.97)}

  /* ---------- HOJAS Y MODALES (Nueva cita, Mover, Horario, Bloquear): hoja inferior con desplazamiento ---------- */
  .move-backdrop{align-items:flex-end;padding:0}
  .move-card,.move-card-wide{width:100%;max-width:none;max-height:92dvh;overflow-y:auto;overscroll-behavior:contain;border-radius:22px 22px 0 0;padding:18px 16px calc(18px + env(safe-area-inset-bottom,0px))}
  .move-backdrop .pf-label{font-size:.95rem;letter-spacing:0;text-transform:none}
  .move-backdrop .input{min-height:48px}
  .move-actions{position:sticky;bottom:calc(-18px - env(safe-area-inset-bottom,0px));background:#fff;padding:10px 0 0}
  .sheet-actions .appt-btn,.vg-menu .appt-btn{min-height:48px;font-size:.95rem}
  .vg-menu .appt-btn small{font-size:.82rem}
  .sheet-dur .sd-opt{min-height:44px;font-size:.95rem}

  /* ---------- CITAS, INICIO y barra de aprobación: acciones en rejilla 2x2 de 48 px, icono + palabra ---------- */
  .appt-actions,.pend-actions,.approval-bar .ab-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .appt-actions .appt-act,.pend-actions .appt-act,.approval-bar .ab-actions .appt-act{width:100%;min-height:48px;margin:0;padding:6px 10px;font-size:1rem;border-radius:12px}
  .appt-act .tel-ico{display:inline-block;width:18px;height:18px}
  .appt-act.danger .tel-txt{display:inline}
  .appt-act.primary{grid-column:1/-1;order:-1}
  .appt-act.ghost{order:5}
  .appt-act.danger{order:6}
  .approval-bar .ab-reschedule .input{font-size:16px;min-height:48px}
  .approval-bar{position:static}   /* R1: pegada arriba tapaba 183 px de la ficha (en el teléfono se desplaza la página entera) */
  .appt-kpis,.pay-kpis{grid-template-columns:1fr 1fr;gap:8px}
  .ak{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:56px;padding:8px 14px;text-align:left}
  .ak b{font-size:1.5rem}
  .ak span{margin:0;font-size:.9rem;letter-spacing:0;text-transform:none;text-align:right}
  .appt-top{flex-wrap:wrap}
  .appt-meta{white-space:normal;font-size:.95rem;line-height:1.4}
  .appt-pill{font-size:.8rem;letter-spacing:0;text-transform:none;padding:4px 10px}
  .pend-cli{white-space:normal}
  .up-row{min-height:52px;font-size:1rem}
  .qb-chip{min-height:44px;font-size:.95rem}

  /* ---------- FICHA: cabecera compacta, contactos con palabra, pestañas en rejilla, chat con la barra abajo ---------- */
  #detailView .client-hero{padding:4px 16px 6px}
  #detailView .ch-meta{display:none}
  #detailView .ch-name{font-size:1.35rem}
  #detailView .ch-name-btn{min-height:48px}
  #detailView .ch-actions{width:100%;display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:4px 0 0}
  #detailView .ch-actions .fu-chip{grid-column:span 2;min-height:48px;font-size:.95rem;justify-content:center}
  .row-ib{width:auto;height:auto;min-height:56px;flex-direction:column;gap:3px;padding:6px 2px;border-radius:14px;font-size:.875rem;font-weight:500;line-height:1.05;color:#2a2118;text-decoration:none}
  .row-ib .ib-l{white-space:normal;text-align:center}
  .row-ib .ico{width:22px;height:22px;color:#7a5418}
  .row-ib .ib-l{display:block;line-height:1}
  .lead-acts,.row-acts{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
  .dic-bar{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;margin:0 0 6px}
  .dic-start{min-width:0;overflow:hidden}
  .dic-start{min-height:52px;font-size:1rem}
  .dic-sec,.dic-sec-mini{min-height:52px}
  .dic-bar-sub{display:contents}
  .tabs{position:static;padding:8px 16px 0;gap:4px}
  .tabs.ficha-hub,.tabs{display:grid;grid-template-columns:repeat(4,1fr);overflow:visible}
  .tabs button,.tabs.ficha-hub button{flex-direction:column;gap:3px;min-height:58px;min-width:0;padding:6px 2px;font-size:.875rem;line-height:1.05;border-radius:10px;border-bottom-width:3px;overflow-wrap:anywhere;text-align:center}
  .tabs.ficha-hub,.tabs{grid-template-columns:repeat(4,minmax(0,1fr))}
  .tabs button.active{color:#7a5418}
  .tabs button[hidden]{display:none}
  .tabs #tabPerfil{display:none}
  .tabs button .ico{width:20px;height:20px}
  .tabs button.active{background:#f8f3e8}
  .fh-kpis{grid-template-columns:1fr}
  .fh-kpi{flex-direction:row;align-items:center;justify-content:space-between;gap:10px;min-height:48px;padding:8px 14px}
  .fh-kpi span{font-size:1rem}
  .fh-kpi b{font-size:1.05rem;text-align:right}
  #tab-caso .label{font-size:1rem;letter-spacing:0;text-transform:none;font-weight:600}
  #tab-caso textarea.input{font-size:16px;padding:12px}
  #tab-caso .btn{min-height:52px;font-size:1rem;width:100%}
  .notes-list{max-height:none}
  #tab-chat{height:auto;min-height:60vh}
  #tab-chat .chat-log{overflow:visible;flex:1 1 auto}
  #tab-chat .chat-foot{position:sticky;bottom:0;z-index:5}   /* 28-oct: el pie (nota de voz + barra) pegado al fondo */
  #tab-chat .chat-bar{padding:10px 12px calc(12px + env(safe-area-inset-bottom,0px))}
  #tab-chat .chat-input{font-size:16px;min-height:48px;min-width:0;padding-left:12px;padding-right:12px}   /* encoge: con el micrófono a la izquierda, «Enviar» se cortaba (28-oct) */
  #tab-chat .chat-send{flex:0 0 auto;width:auto;min-width:56px;min-height:48px;padding:0 16px;border-radius:24px;display:inline-flex;align-items:center;gap:6px;font-weight:600}
  #tab-chat .chat-send::after{content:"Enviar";font-size:.95rem}
  /* Nota de voz (28-oct-2026): micrófono y botones de 52 px, tarjeta pegada encima del compositor. */
  #tab-chat .chat-mic{flex:0 0 52px;width:52px;height:52px;min-height:52px;font-size:1.4rem}
  #tab-chat .voz-nota{position:sticky;bottom:calc(78px + env(safe-area-inset-bottom,0px));z-index:5;margin:0 12px 8px}   /* la barra mide 75 px */
  #tab-chat .voz-botones .btn{min-height:52px;font-size:16px}
  #tab-chat .voz-estado,#tab-chat .voz-tiempo{font-size:16px}
  .pf-label,.intake-q{font-size:.95rem;letter-spacing:0;text-transform:none}
  /* sin mayúsculas sostenidas ni letra de 9-11 px en etiquetas y chips (dislexia) */
  .lvl-txt,.pill,.origin-tag,.pay-badge,.ak span,.mc-soon,.sb-soon{text-transform:none;letter-spacing:0}
  .lead-dot-wrap .lvl-txt{font-size:.72rem}
  .pill{font-size:.8rem}
  .origin-tag{font-size:.8rem}
  .pay-badge{font-size:.8rem}
  /* [hidden] gana a display:flex (barra de aprobación vacía bajo «Dictar» y píldora «NUEVO» junto a «Cliente desde») */
  .approval-bar[hidden],.ch-line1 .pill[hidden]{display:none}

  /* ---------- CLIENTES, LEADS, MENSAJES, PAGOS, POR REVISAR ---------- */
  #clientList .lead-dot-wrap,#msgList .lead-dot-wrap{display:none}   /* en Clientes todas son clientas; en Mensajes el nivel le quitaba el sitio al nombre */
  .client-row,.msg-row{padding:12px 10px;min-height:64px}
  .client-row .cr-top,.msg-row .cr-top{flex-wrap:wrap;row-gap:2px}
  .client-row .cr-top b,.msg-row .cr-top b{font-family:'Jost',system-ui,sans-serif;font-size:1.05rem;font-weight:600;white-space:normal}
  .client-row .cr-chev{display:none}
  .cr-time{font-size:.85rem}
  .cr-sub{font-size:.95rem}
  .lead-chips{padding:0 16px}
  .msg-swipe .msg-row{touch-action:pan-y}
  .msg-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px 16px 4px}
  .msg-tab{min-height:48px;font-size:1rem;border-radius:14px}
  .msg-tab.active{background:#1a1206;color:#fff}
  .pay-actions{grid-template-columns:1fr}
  .pay-kpis,.pay-kpis.k4{grid-template-columns:1fr}   /* Pagos y cobros: los botones uno debajo del otro (numero a la izquierda, palabra a la derecha) */
  .pay-kpis .ak span{font-size:.95rem}
  .pay-per{display:flex}
  .pay-per-fila .pay-per{flex:1 1 100%}
  .pay-mes{flex:1 1 100%;min-height:48px;font-size:16px}   /* 16 px: iOS no hace zoom */
  .pay-per-b{flex:1;min-width:0;min-height:48px;font-size:1rem}
  .pay-chip{flex:1 1 calc(50% - 8px)}
  .pay-fila .pf-txt small{font-size:.9rem}
  .pay-act{min-height:56px}
  .pay-act .pa-name{font-size:1.05rem}
  .pay-act .pa-sub{font-size:.9rem}
  .dr-link,.dr-pay,.dr-del{min-height:48px;font-size:.95rem}
  .am-mod-root{padding:0 16px}
  .rv-quote{font-style:normal}

  /* ---------- COBRAR (ficha y mostrador) y PRODUCTOS ---------- */
  .pos-buscar{flex-wrap:wrap}
  .pos-buscar .pos-input{flex:1 1 100%;order:-1}
  .pos-buscar .pos-escanear{flex:1 1 100%;justify-content:center}
  /* productos y servicios del cobro: UNA columna de filas (icono · nombre completo · precio); en 2 columnas el nombre no cabía */
  .pos-mosaicos{grid-template-columns:minmax(0,1fr);gap:8px}
  .pos-mosaico{min-height:60px;flex-direction:row;justify-content:flex-start;text-align:left;gap:12px;padding:8px 14px}
  .pos-mosaico .pm-nom{font-size:1rem;-webkit-line-clamp:2;flex:1 1 auto;min-width:0}
  .pos-mosaico .pm-pre{font-size:1.05rem;color:#2a2118;flex:0 0 auto;white-space:nowrap}
  .pos-hoja-card{max-height:calc(100dvh - 24px);overflow-y:auto}
  .caja-kpis{grid-template-columns:repeat(3,1fr)}
  .prod-vista{padding:12px 16px 32px}
  .prod-tabs{display:grid;grid-template-columns:1fr 1fr;gap:6px;overflow:visible}
  .prod-tab{min-height:52px;justify-content:center}

  /* ---------- REVISIÓN DE ACCESIBILIDAD (ronda 2, 27-oct-2026): contraste, letra >= 14 px, sin mayúsculas, toques, foco ---------- */
  /* X2: letra blanca sobre el dorado (la tinta oscura daba 2.74:1); igual que «Vender» */
  .appt-act.primary,.move-btn.primary,.cal-today,.cal-vbtn.active,.btn-gold,.avatar,.msg-tab.active{color:#fff}
  .cal-today{border-color:transparent;background:linear-gradient(135deg,#9c6a1f,#7a5418)}
  /* X3/X4: las hojas, los modales y el cajón heredan los colores de estado oscuros y el peso 400 */
  .sheet--light,.move-backdrop,.pos-hoja,.am-capa{--ok:#1d6b3f;--warn:#8a5a00;--danger:#a3222f;font-weight:400}
  body.sb-open .sidebar{font-weight:400}
  /* X5: el menú de la hoja de la cita no se sale por la derecha */
  .vg-menu{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .vg-menu .appt-btn{min-width:0}
  .vg-menu .appt-btn small{white-space:normal}
  /* X7: el nivel en Mensajes, en minúsculas y completo */
  .msg-row .lead-dot-wrap{width:auto;min-width:64px}
  .lead-dot-wrap .lvl-txt{text-transform:none;letter-spacing:0;font-size:.8rem;font-weight:600}
  /* X8/X9: sin mayúsculas sostenidas (dislexia) */
  .eyebrow,.resumen-h,.kpi .kpi-label,.block-head,body.sb-open .sb-brand-sub{text-transform:none;letter-spacing:0;font-size:.95rem}
  .kpi .kpi-label{font-size:.875rem}
  /* X10/X11: insignia de visita, estado y hora del chat legibles */
  #calBlock .tl-appt .appt-visit{font-size:.75rem}
  #calBlock .tl-appt .appt-st{font-size:.875rem}
  .bub .ct{position:static;display:block;text-align:right;margin-top:4px;font-size:.85rem;opacity:1}
  .app-main .cb.me .bub .ct,.app-main .cb.her .bub .ct{color:#4a3f30}
  /* X14/X15: «Dictar» y los chips dorados con contraste >= 4.5 */
  .dic-start{color:#1a1206}
  .dic-start small{display:none}
  .fu-chip,.note-tag,.pend-case-btn,.lead-tag.lvl-tibio,.noname-tag,.snr-mas,.vg-lbl{color:#7a5418}
  /* X16/X17: letra >= 14 px en filas, chips y acciones deslizadas */
  .msg-actions button{font-size:.875rem}
  .msg-act-unread{background:#1f5f9e}
  .origin-tag,.cr-time,.pay-badge,.appt-pill,.hb-count,.mode-desc,.lead-tag,.risk-dias,.up-serv,.row-ask,.note-meta,.note-vis-tag,.sb-soon,.photo-badge{font-size:.875rem!important}
  /* X19/X27: toques >= 48 px */
  .sheet .snr-mas,.hor-row .sw-row,.risk-row,.kpi,.bloq-quit,.qb-chip,.mode-seg button,.sd-opt,.reason-chip,.sw-row,.rv-ver,.fh-link,.pos-link,.cal-vbtn{min-height:48px}
  label:has(#naSeguimiento){min-height:48px;display:flex;align-items:center}
  /* X20: icono + palabra en Cerrar, Voz y Más */
  .sheet-close{width:auto;min-height:48px;padding:0 14px;border-radius:24px;gap:6px;font-size:.95rem;font-weight:500;color:#2a2118}
  .sheet-close::after{content:"Cerrar"}
  .dic-sec-mini{width:auto;flex-basis:auto;padding:0 12px;gap:6px}
  .msg-menu{width:auto;min-width:48px;padding:0 8px;gap:4px}
  .msg-menu::after{content:"Más";font-size:.875rem}
  /* X29-X34: números en Jost, «De» sin mayúscula, chips de Por revisar en varias filas, botón deshabilitado legible, sin opacidad .8 */
  .ak b,.qb-chip b,.kpi-num,.call-phone{font-family:'Jost',system-ui,sans-serif}
  #detailView .ch-line1 .pill{display:none}
  .home-hero .muted{text-transform:none}
  .home-hero .muted::first-letter{text-transform:uppercase}
  .rv-chips{flex-wrap:wrap;overflow:visible}
  .pos-cobrar:disabled{background:#ebe6dc;color:#5c5040}
  .cal-hour .ch-half,.msg-row:not(.unread) .cr-sub{opacity:1}
}
