/* Estilos del editor de UNA ficha (ficha-formulario.js). Todo cuelga de `.fe` (la raíz donde se monta) o de
   `.feDlg` (sus diálogos secundarios, que viven en <body>), así que no chocan con el panel ni con /editar.
   Los tokens son los del panel; el anfitrión puede cambiar el color de la cabecera con `--fe-cab`. */
.fe{--line:var(--border,#E8E5E0);--teal:var(--accent,#047857);--ok:#047857;--dark:#0f2a23;
  --cream:var(--bg,#E9EEEC);--chip:var(--bg-2,#DDE5E1);--gold:#c9a464;
  color:var(--ink,#1A1A1A);font-family:inherit;line-height:1.55}
.fe *{box-sizing:border-box}
.fe h3,.fe h4,.fe p{margin:0}
.fe button{font:inherit;cursor:pointer;border:none;background:none;color:inherit}
.fe input,.fe textarea,.fe select{font:inherit;color:inherit}
.fe img{display:block;max-width:100%}
.fe [hidden]{display:none!important}
.fe .feMarco{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;height:100%;background:var(--cream)}
.fe .pista{font-size:.875rem;color:var(--muted);line-height:1.45}
.fe .item{background:#fff;border:1px solid var(--line);border-radius:14px;margin-bottom:.8rem;overflow:hidden}
.fe .cod{font-family:ui-monospace,monospace;font-size:.875rem;font-weight:700;color:var(--teal)}
.fe .iMeta{font-size:.875rem;color:var(--muted);margin-top:.15rem}
.fe .editor{display:none;border-top:1px solid var(--line);padding:1rem;background:#fcfbf8}
.fe .item.abierto .editor{display:block}
.fe .grupo{margin-bottom:1.1rem}
.fe .grupo .rejilla{row-gap:.55rem}
.fe .grupo > h3{font-size:.98rem;margin-bottom:.7rem;color:var(--dark)}
.fe .rejilla{display:grid;grid-template-columns:1fr;gap:.7rem;min-width:0}
.fe .campo{min-width:0}
@media(min-width:640px){
  .fe .rejilla{grid-template-columns:repeat(2,1fr)}
}
@media(min-width:1000px){
  .fe .rejilla{grid-template-columns:repeat(4,1fr)}
}
.fe .campo label{display:block;font-size:.875rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.05em;color:var(--muted);margin-bottom:.25rem}
.fe .campo input,
.fe .campo textarea{width:100%;border:1px solid var(--line);border-radius:8px;
  padding:.55rem .7rem;font-size:.9rem;background:#fff}
.fe .campo input:focus,
.fe .campo textarea:focus{outline:2px solid var(--teal)}
.fe .campo .pista{font-size:.88rem;color:var(--muted);margin-top:.3rem;line-height:1.45}
.fe .full{grid-column:1/-1}
/* Pedir un campo nuevo no es elegir un valor: va separado de las opciones y
   con el trazo discontinuo que en esta interfaz significa "añadir". */
.fe .campoNuevoBtn{display:inline-block;margin-top:.9rem;border:1px dashed var(--line);background:none;
  color:var(--muted);border-radius:8px;padding:.4rem .8rem;font-size:.875rem;cursor:pointer}
.fe .campoNuevoBtn:hover{color:var(--teal);border-color:var(--teal)}
.fe .campoNuevoForm{display:grid;gap:.5rem;margin-top:.6rem;padding:.7rem;border:1px solid var(--line);
  border-radius:10px;background:#fff}
.fe .campoNuevoForm input,
.fe .campoNuevoForm select{border:1px solid var(--line);border-radius:8px;
  padding:.5rem .65rem;font-size:.875rem;background:#fff}
/* Vista previa con el mismo lenguaje de la ficha pública */
/* Qué falta para publicar, en el índice. Los pendientes se tocan para ir
   directo, que es lo que uno intenta hacer al leerlos. */
.fe .faltan{display:flex;flex-direction:column;gap:.5rem;padding:.85rem 1rem;margin-bottom:.7rem;
  border-radius:12px;background:#fdf3ec;border:1px solid #f0d9c6}
.fe .faltan b{font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;color:#9a5a1c}
.fe .faltan.lista{background:#eaf5ee;border-color:#c9e4d3}
.fe .faltan.lista b{color:#2d6a4a}
.fe .faltan.lista span{font-size:.9rem;color:var(--muted)}
.fe .faltanChips{display:flex;flex-wrap:wrap;gap:.4rem}
.fe .faltaChip{border:1px solid #e3c4a8;background:#fff;color:#8a4d13;border-radius:9999px;
  padding:.3rem .7rem;font-size:.875rem;font-weight:600;cursor:pointer}
.fe .faltaChip:hover{background:#fff7f0}
.fe .previa.vacia .tarjetas{display:none}
.fe .previa.vacia h4{opacity:.6;font-style:italic}
.fe .previa{background:#fff;border:1px solid var(--line);border-radius:12px;padding:.9rem;margin-top:.4rem}
.fe .previa h4{font-size:.875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:.6rem}
.fe .tarjetas{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.7rem}
.fe .tarj{border:1px solid #e7eaef;border-radius:8px;overflow:hidden}
.fe .tarj > b{display:block;background:var(--chip);padding:.45rem .6rem;font-size:.875rem;font-weight:700;color:#33404d}
.fe .tarj .cuerpo{padding:.5rem .6rem}
.fe .tarj .k{font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;color:#8a949e;margin-top:.3rem}
.fe .tarj .v{font-size:.875rem;color:#33404d;line-height:1.45}
.fe .guardarBtn{background:var(--dark);color:#fff;border-radius:9px;padding:.6rem 1.2rem;font-size:.875rem;font-weight:700}
.fe .guardarBtn:disabled{opacity:.5;cursor:default}
.fe .estado{font-size:.875rem;color:var(--muted)}
.fe .estado.ok{color:var(--ok);font-weight:700}
.fe .cargando{text-align:center;padding:4rem 1rem;color:var(--muted)}
/* El error se montaba dentro del marco del panel —1080px por 92vh— con un
   texto de dos renglones arriba y el resto en blanco, sin decir qué hacer. */
.fe .errorBox{max-width:24rem;margin:3.5rem auto;padding:1.6rem 1.4rem;text-align:center;
  color:var(--muted);background:var(--card);border:1px solid var(--line);border-radius:14px}
.fe .errorBox .ico{font-size:1.6rem;line-height:1;display:block;margin-bottom:.6rem}
.fe .errorBox b{display:block;color:#b03a2e;font-size:1.05rem;margin-bottom:.35rem}
.fe .errorBox p{margin:0 0 1rem;font-size:.9rem;line-height:1.5}
.fe .errorBox button{border:0;border-radius:9px;padding:.6rem 1.1rem;font:inherit;font-weight:700;
  color:#fff;background:var(--teal);cursor:pointer}
.fe .errorBox button{min-height:44px;font-size:1rem}
.fe .errorBox button:hover{filter:brightness(1.08)}
/* Pregunta del editor (descartar cambios, quitar): reemplaza a confirm(), que dentro del marco del
   panel sale con el dominio encima. Va encima de la ficha, también en el marco. */
.feDlg.fePregunta{margin:auto;border:1px solid var(--line);border-radius:14px;padding:0;max-width:24rem;
  width:calc(100% - 2rem);box-shadow:0 14px 44px rgba(13,33,28,.22);color:var(--ink);background:#fff}
.feDlg.fePregunta::backdrop{background:rgba(13,33,28,.45)}
.fe .pqForm{padding:1.3rem;display:flex;flex-direction:column;gap:.6rem}
.fe .pqForm h3{font-size:1.1rem;margin:0}
.fe .pqForm p{margin:0;font-size:.95rem;line-height:1.45;color:var(--muted)}
.fe .pqForm .dlgBtns{flex-wrap:wrap}
.fe .pqForm .btnXls{min-height:44px;font-size:.95rem}
/* Opciones preseleccionables */
.fe .faqFilas{display:grid;gap:.5rem}
.fe .faqFila{display:grid;grid-template-columns:1fr auto;gap:.35rem .4rem;align-items:start;
  padding:.5rem;border:1px solid var(--line);border-radius:9px}
.fe .faqFila .faqP{font-weight:700}
.fe .faqFila .faqR{grid-column:1;resize:vertical}
.fe .faqQuitar{grid-row:1/3;align-self:center;border:none;background:none;color:var(--muted);
  cursor:pointer;font-size:.875rem;padding:.2rem .35rem;border-radius:6px}
.fe .faqQuitar:hover{color:#c0392b;background:#fdeceb}
.fe .faqAgregar{margin-top:.5rem;border:1px dashed var(--line);background:none;color:var(--muted);
  border-radius:8px;padding:.35rem .7rem;font-size:.875rem;cursor:pointer}
.fe .faqAgregar:hover{color:var(--teal);border-color:var(--teal)}
/* Opciones sugeridas de un campo.

   Eran de .76rem con 3.5px de padding vertical y en gris apagado: por debajo
   de lo que un pulgar acierta, y con el color que en el resto del editor
   significa "no disponible" —así que parecían deshabilitadas justo lo que hay
   que tocar—. Ahora tienen el tamaño del texto que las rodea y su color. */
/* Un dato que la familia todavía no pregunta. Se marca para que se note que
   está de paso, no para esconderlo: esconderlo es lo que causó el problema. */
.fe .campo.huerfano input{border-style:dashed;background:#fffdf7}
.fe .campo.huerfano label{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.fe .promoverBtn{border:1px solid var(--teal);color:var(--teal);background:#fff;border-radius:99px;
  padding:.15rem .55rem;font-size:.875rem;font-weight:700;text-transform:none;letter-spacing:0}
.fe .promoverBtn:hover{background:var(--teal);color:#fff}
.fe .promoverBtn:disabled{opacity:.5}
/* Cómo se cobra. Va arriba y con marco propio: no es un campo más, es la
   pregunta de la que dependen los demás. */
/* Paquetes. Rejilla de columnas fijas para que tipo, nombre y los dos precios
   queden alineados entre filas: leerlos en columna es lo que deja ver de un
   vistazo que un paquete tiene precio y otro no. */
.fe .paquetes{background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:.85rem 1rem;margin-bottom:.9rem}
.fe .paquetes > label{display:block;font-size:.875rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.05em;color:var(--muted);margin-bottom:.5rem}
/* Tarjetas de paquete: campos apilados con su etiqueta, tipo en chips y el
   dinero con su signo. La rejilla anterior era de escritorio y en un teléfono
   colapsaba en piezas sueltas. */
.fe .paqFilas{display:grid;gap:.65rem}
.fe .paqFila{background:var(--card);border:1px solid var(--border);border-radius:12px;
  padding:.8rem .9rem;display:grid;grid-template-columns:minmax(0,1fr);gap:.6rem}
.fe .paqTop{display:flex;align-items:center;justify-content:space-between;gap:.6rem}
.fe .paqCampo{display:block}
.fe .paqCampo .pEtq{display:block;font-size:.875rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.04em;color:var(--muted);margin-bottom:.25rem}
.fe .paqCampo input{width:100%;border:1px solid var(--border);border-radius:9px;
  padding:.5rem .65rem;font-size:16px;background:var(--card);min-width:0}
.fe .paqCampo input:focus{outline:none;border-color:var(--accent)}
.fe .paqPrecios{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.6rem}
.fe .paqDinero{display:flex;align-items:center;border:1px solid var(--border);border-radius:9px;
  background:var(--card);overflow:hidden}
.fe .paqDinero i{font-style:normal;color:var(--muted);font-weight:700;padding:0 0 0 .6rem}
.fe .paqDinero input{border:0;flex:1;width:auto;min-width:0;padding-left:.25rem}
.fe .paqDinero:focus-within{border-color:var(--accent)}
.fe .paqCampo[hidden]{display:none}
.fe .paqQuitar{border:none;background:none;color:var(--muted);cursor:pointer;font-size:.9rem;
  border-radius:7px;padding:.25rem .45rem;flex:none}
.fe .paqQuitar:hover{color:#c0392b;background:#fdeceb}
.fe .paqAgregar{margin-top:.6rem;border:1px dashed var(--line);background:none;color:var(--muted);
  border-radius:8px;padding:.35rem .7rem;font-size:.875rem;cursor:pointer}
.fe .paqAgregar:hover{color:var(--teal);border-color:var(--teal)}
.fe .cobro{background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:.85rem 1rem;margin-bottom:.9rem}
.fe .cobro > label{display:block;font-size:.875rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.05em;color:var(--muted);margin-bottom:.5rem}
.fe .cobroOpts{display:flex;flex-wrap:wrap;gap:.4rem}
.fe .cobroDice{margin-top:.55rem;font-size:.875rem;color:var(--ink);font-weight:600}
.fe .opciones{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem;max-width:100%}
.fe .opt{border:1px solid var(--line);background:#fff;border-radius:99px;
  padding:.45rem .9rem;font-size:.875rem;font-weight:600;color:var(--ink);
  line-height:1.2;transition:.14s}
.fe .opt:hover{border-color:var(--teal);color:var(--teal);background:#f6faf8}
.fe .opt.on{background:var(--teal);border-color:var(--teal);color:#fff}
.fe .opt.on:hover{background:var(--teal);color:#fff}
/* Archivos */
.fe .archivos{display:grid;grid-template-columns:1fr;gap:.7rem}
@media(min-width:700px){
  .fe .archivos{grid-template-columns:1fr 1fr}
}
.fe .caja{border:1px dashed #c9d2cd;border-radius:10px;padding:.8rem;background:#fff}
.fe .caja h4{font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:.5rem}
.fe .btnFile{background:var(--teal);color:#fff;border-radius:8px;padding:.5rem .9rem;font-size:.875rem;font-weight:700}
.fe .btnFile:hover{background:var(--dark)}
.fe .mini{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}
.fe .mini figure{position:relative;width:70px;height:56px;border-radius:7px;overflow:hidden;border:1px solid var(--line)}
.fe .mini img,
.fe .mini video{width:100%;height:100%;object-fit:cover}
.fe .mini .playBadge{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:.875rem;text-shadow:0 1px 4px rgba(0,0,0,.7);pointer-events:none}
.fe .mini .btnQuitar{position:absolute;top:2px;right:2px;background:rgba(176,58,46,.92);color:#fff;
  width:17px;height:17px;border-radius:50%;font-size:.875rem;line-height:1;display:flex;align-items:center;justify-content:center}
.fe .mini figure.portada{border:2px solid var(--gold)}
.fe .subiendo{font-size:.875rem;color:var(--muted);margin-top:.4rem}
.fe .btnXls.nueva{background:var(--teal);border-color:var(--teal);color:#fff;font-weight:800}
.fe .btnXls.nueva:hover{background:var(--dark);border-color:var(--dark)}
.fe .dlgBtns{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.2rem}
.fe .pubBar{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:.6rem .75rem;margin-bottom:.8rem}
.fe .pubBar .est{font-size:.875rem;font-weight:800}
.fe .pubBar .est.si{color:var(--ok)}
.fe .pubBar .est.no{color:#b03a2e}
.fe .pubBar .txt{font-size:.875rem;color:var(--muted);flex:1;min-width:12rem}
.fe .pubBtn{border:1px solid var(--teal);color:var(--teal);background:#fff;border-radius:8px;
  padding:.4rem .9rem;font-size:.875rem;font-weight:800}
.fe .pubBtn:hover{background:var(--teal);color:#fff}
.fe .btnXls{border:1px solid var(--line);background:#fff;border-radius:8px;padding:.5rem 1rem;
  font-size:.875rem;font-weight:700;color:var(--teal);cursor:pointer;text-decoration:none}
.fe .btnXls:hover{border-color:var(--teal)}
.fe .btnXls.alt{background:var(--teal);color:#fff;border-color:var(--teal)}
.fe .mapaCaja{border:1px solid var(--line);border-radius:10px;overflow:hidden}
.fe .mapaPick{height:240px;width:100%}
.fe .pegaBox{background:#fff;border:1px dashed #c9d2cd;border-radius:12px;padding:.9rem}
.fe .pegaBox textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:.6rem .7rem;
  font-size:.9rem;font-family:inherit;resize:vertical}
.fe .pegaBox textarea:focus{outline:2px solid var(--teal)}
/* Un `display` propio de clase le gana al atributo hidden, así que ocultar
   con `.hidden = true` no surtía efecto en la rejilla del índice. */
.fe [hidden]{display:none!important}
.fe .fhHead{display:flex;align-items:flex-start;gap:1rem;padding:1rem 1.1rem;background:var(--dark);color:#fff;flex:none}
.fe .fhTit{flex:1;min-width:0}
.fe .fhTit .cod{color:var(--gold)}
.fe .fhTit h3{font-size:1.06rem;line-height:1.25;margin-top:.1rem}
.fe .fhTit .iMeta{color:rgba(255,255,255,.65)}
.fe .fhCerrar{flex:none;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.14);
  color:#fff;font-size:1.5rem;line-height:1;display:flex;align-items:center;justify-content:center}
.fe .fhCerrar:hover{background:rgba(255,255,255,.28)}
.fe .fhCuerpo{flex:1;overflow-y:auto;padding:1rem;-webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;display:flex;flex-direction:column}
/* El contenido no se comprime dentro del scroller: en una columna flex el hijo
   se encogía por flex-shrink hasta el alto visible (958px de ficha exprimidos
   a 394) y el scroll interno nunca aparecía —parecía que sólo se movía el
   fondo—. Con flex-shrink:0 desborda y genera su propio scroll. */
.fe .fhCuerpo > *{flex-shrink:0}
/* El pie de sección se va al fondo: una sección corta —Medidas son cuatro
   campos— dejaba media pantalla suelta dentro del panel, que va completo. */
.fe .fhCuerpo > .secPie{margin-top:auto}
/* Aire dentro de la tarjeta del modal.

   La barra de publicar, el aviso de pendientes, el índice y el editor cuelgan
   todos directo de `.item`, que no tenía padding: cada uno traía el suyo y
   quedaba pegado al borde redondeado de la tarjeta, con el texto rozando la
   orilla. El respiro se pone una vez, en el contenedor, y el editor deja de
   poner el suyo para no duplicarlo. */
.fe .fhCuerpo .item{padding:.9rem}
.fe .fhCuerpo .editor{padding:.9rem 0 0;background:transparent}
@media(max-width:640px){
  .fe .fhCuerpo .item{padding:.75rem}
  .fe .fhCuerpo .editor{padding:.75rem 0 0}
}
.fe .fhPie{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex:none;
  padding:.7rem 1.1rem;background:#fff;border-top:1px solid var(--line)}
@media(max-width:640px){
  .fe #dlgFicha{width:100%;max-width:100%;max-height:100dvh;height:100dvh;border-radius:0}
  .fe .fhCuerpo{padding:.75rem}
}
/* ===== Índice de secciones ===== */
/* Un formulario de cuarenta campos en una sola columna obliga a bajar
   buscando; en botones se ve de un vistazo qué falta por llenar. */
.fe .secIndice{display:grid;grid-template-columns:1fr;gap:.5rem}
@media(min-width:700px){
  .fe .secIndice{grid-template-columns:1fr 1fr}
}
.fe .secBtn{display:flex;align-items:center;gap:.7rem;width:100%;text-align:left;
  background:#fff;border:1px solid var(--line);border-radius:11px;padding:.75rem .85rem;transition:.15s}
.fe .secBtn:hover{border-color:var(--teal);transform:translateY(-1px);box-shadow:0 6px 16px rgba(13,33,28,.08)}
.fe .secBtn.pendiente{border-color:#e6c9a8;background:#fffaf3}
.fe .secIco{flex:none;width:34px;height:34px;border-radius:9px;background:var(--chip);
  display:flex;align-items:center;justify-content:center;font-size:1.05rem}
.fe .secIco img{width:22px;height:22px;object-fit:contain}
.fe .secBtn.pendiente .secIco{background:#fdeacf}
.fe .secTxt{flex:1;min-width:0;display:flex;flex-direction:column}
.fe .secTxt b{font-size:.92rem;font-weight:800}
.fe .secTxt small{font-size:.875rem;color:var(--muted);margin-top:.1rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fe .secBtn.pendiente .secTxt small{color:#a8660d;font-weight:700}
.fe .secChev{flex:none;color:var(--muted);font-size:1.3rem}
.fe .fhVolver{flex:none;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.14);
  color:#fff;font-size:19px;line-height:1;display:grid;place-items:center;cursor:pointer}
.fe .fhVolver:hover{background:rgba(255,255,255,.26)}
.fe .fhVolver[hidden]{display:none}
/* Pegada abajo del área que se desplaza: con un formulario de veinte campos,
   "Siguiente" al final obligaba a recorrerlo entero para avanzar aunque no se
   fuera a llenar nada. */
.fe .secPie{position:sticky;bottom:0;z-index:5;display:flex;align-items:center;
  justify-content:space-between;gap:.6rem;margin-top:1.2rem;padding:.7rem 0 .2rem;
  border-top:1px solid var(--line);background:var(--bg);
  box-shadow:0 -8px 12px -8px rgba(10,25,18,.18)}
.fe .btnSec{border:1px solid var(--line);background:#fff;border-radius:9px;padding:.6rem .9rem;
  font-size:.875rem;font-weight:700;color:var(--teal);cursor:pointer;max-width:45%;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fe .btnSec:hover{border-color:var(--teal)}
.fe .btnSec.sig{background:var(--teal);color:#fff;border-color:var(--teal)}
.fe .secPos{font-size:.875rem;color:var(--muted);flex:none}
.fe .volverSec{display:inline-flex;align-items:center;gap:.3rem;color:var(--teal);
  font-size:.875rem;font-weight:800;margin-bottom:.6rem}
.fe .volverSec:hover{text-decoration:underline}
.fe .editor.secciones{display:block;border:0;background:none;padding:0}
.fe .mapaPick{height:320px;width:100%}
/* Estrella de portada sobre cada miniatura. */
.fe .mini figure{position:relative}
.fe .mini .btnPortada{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;
  background:rgba(13,33,28,.62);color:#fff;font-size:.875rem;line-height:1;
  display:flex;align-items:center;justify-content:center;padding:0;border:0;cursor:pointer}
.fe .mini .btnPortada:hover{background:rgba(13,33,28,.9)}
.fe .mini .btnPortada.on{background:var(--gold);color:#0d211c}
.fe .geoBuscar{display:flex;gap:.45rem;margin-bottom:.55rem}
.fe .geoBuscar .geoQ{flex:1;min-width:0;border:1px solid var(--line);border-radius:9px;
  padding:.55rem .7rem;font:inherit;background:var(--card);color:inherit}
.fe .geoRes{margin-bottom:.55rem;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.fe .geoRes button{display:block;width:100%;text-align:left;border:0;background:none;font:inherit;
  padding:.55rem .7rem;cursor:pointer;border-bottom:1px solid var(--line);line-height:1.35}
.fe .geoRes button:last-child{border-bottom:0}
.fe .geoRes button:hover{background:var(--bg-2)}
.fe .geoRes .geoVacio{padding:.6rem .7rem;color:var(--muted);font-size:.88rem}
.fe .mapaCaja{position:relative}
.fe .pdMsg{color:var(--muted);font-size:.875rem}
.fe .pdMsg.ok{color:var(--ok);font-weight:700}
.fe .pdGuardar{border:0;border-radius:10px;background:var(--teal);color:#fff;font:inherit;
  font-weight:700;padding:.65rem 1.15rem;cursor:pointer}
.fe .pdGuardar:disabled{opacity:.55;cursor:progress}
/* Dinero bloqueado: se ve apagado y con la razón en el title. */
.fe input[data-n]:disabled,.fe .paqDinero input:disabled,.fe .cobroOpts .opt:disabled,.fe [data-unidad]:disabled,.fe #nvPrecio:disabled{opacity:.6;cursor:not-allowed}
.fe .dineroNota{margin:.2rem 0 .8rem;padding:.6rem .8rem;border-radius:10px;background:var(--accent-soft);color:var(--ink);font-size:.9rem;line-height:1.4}
.feDlg.fePaq{margin:auto;border:0;border-radius:16px;padding:0;width:min(34rem,calc(100% - 1.6rem));
  box-shadow:0 24px 70px rgba(10,25,18,.35)}
.feDlg.fePaq::backdrop{background:rgba(10,20,16,.45)}
.fe .dpHead{display:flex;align-items:center;justify-content:space-between;gap:.8rem;
  padding:.9rem 1.1rem;border-bottom:1px solid var(--border)}
.fe .dpHead b{font-size:1rem}
.fe .dpHead small{display:block;color:var(--muted);font-weight:500}
.fe .dpCerrar{border:0;background:var(--bg-2);border-radius:50%;width:2rem;height:2rem;
  font-size:1rem;cursor:pointer;flex:none}
.fe .dpCuerpo{padding:1rem 1.1rem;max-height:70vh;overflow-y:auto;overscroll-behavior:contain}
.fe .dpCuerpo .paquetes{border:0;padding:0;margin:0;background:none}
.fe .dpPie{display:flex;align-items:center;justify-content:flex-end;gap:.8rem;
  padding:.8rem 1.1rem;border-top:1px solid var(--border)}
.fe .paqCopiar{width:100%;border:1px dashed var(--accent);background:var(--accent-soft);
  color:var(--accent);border-radius:11px;padding:.7rem;font:inherit;font-weight:700;
  cursor:pointer;margin-bottom:.9rem;font-size:.9rem}
.fe .paqCopiar:hover{background:var(--accent);color:#fff}
/* Cómo se vende. Bloque con fondo propio: es de otra naturaleza que el listado
   de secciones de abajo —aquí se elige el producto, allí se captura texto— y
   con el mismo estilo se leían como una sola lista de catorce cosas. */
.fe .idxPaq{margin-bottom:1.1rem;background:var(--bg-2);border-radius:14px;padding:.8rem .85rem}
.fe .idxPaqTit{font-size:.875rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;
  color:var(--ink);margin-bottom:.6rem}
.fe .idxPaqTit span{font-weight:600;text-transform:none;letter-spacing:0;opacity:.8}
/* `safe center`: centra cuando caben, y alinea al inicio cuando no. Con
   `center` a secas, tres tarjetas más anchas que la pantalla arrancaban
   desplazadas y cortaban la primera y la última. */
.fe .paqTabs{display:flex;gap:.4rem;overflow-x:auto;padding-bottom:.15rem;scrollbar-width:none;
  justify-content:safe center}
.fe .paqTabs::-webkit-scrollbar{display:none}
.fe .paqTab{position:relative;flex:none;display:flex;flex-direction:column;align-items:flex-start;
  gap:.15rem;background:var(--card);border:1px solid var(--border);border-radius:11px;
  padding:.55rem 1.9rem .55rem .7rem;font:inherit;min-width:7.4rem}
.fe .paqTab b{font-size:1rem;font-weight:800;white-space:nowrap;color:var(--ink)}
.fe .paqTab .ptPrecio,
.fe .paqTab .ptBalance{display:flex;align-items:baseline;gap:.35rem;
  font-size:.95rem;font-weight:800;white-space:nowrap}
.fe .paqTab .ptPrecio{color:var(--accent)}
.fe .paqTab .ptBalance{color:var(--ink)}
.fe .paqTab i{font-style:normal;font-size:.875rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.02em;color:var(--muted)}
.fe .paqTab .ptPrecio,
.fe .paqTab .ptBalance{justify-content:space-between;width:100%;gap:.5rem}
.fe .ptEditar{position:absolute;top:.4rem;right:.4rem;border:1px solid var(--border);
  background:var(--card);border-radius:7px;width:1.6rem;height:1.6rem;padding:0;
  display:grid;place-items:center;font-size:.875rem;cursor:pointer}
.fe .ptEditar:hover{background:var(--accent-soft);border-color:var(--accent)}
.fe .paqTab.fantasma{align-items:center;justify-content:center;min-width:2.8rem;padding:.6rem;
  border-style:dashed;color:var(--muted);font-size:1.2rem;font-weight:800;cursor:pointer}
.fe .paqTab.fantasma:hover{color:var(--accent);border-color:var(--accent)}
.fe .paqFila.resaltada{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.fe .idxOtros{display:flex;gap:.4rem;margin-top:.7rem}
.fe .otroBtn{flex:1;min-width:0;display:flex;align-items:center;justify-content:center;gap:.3rem;
  background:var(--card);border:1px solid var(--border);border-radius:9px;
  padding:.55rem .4rem;font:inherit;font-size:.88rem;font-weight:700;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fe .otroBtn:hover{border-color:var(--accent);color:var(--accent)}
.fe .otroBtn b{color:var(--accent);font-weight:800}
.fe .pdBorrar{border:1px solid var(--border);background:none;color:#c0392b;border-radius:9px;
  padding:.55rem .9rem;font:inherit;font-weight:700;cursor:pointer;margin-right:auto}
.fe .pdBorrar:hover{background:#fdeceb;border-color:#c0392b}
/* La herramienta de pegar, fuera del listado de datos: no es algo que llenar. */
.fe .lugarFila{display:flex;gap:.45rem}
.fe .lugarFila input{flex:1;min-width:0}
.fe .lugarBtn{flex:none;border:1px solid var(--line);background:var(--card);border-radius:9px;
  padding:.5rem .75rem;font:inherit;font-size:.88rem;font-weight:700;
  color:var(--accent);cursor:pointer;white-space:nowrap}
.fe .lugarBtn:hover{background:var(--accent-soft);border-color:var(--accent)}
.feDlg.feLugar{margin:auto;border:0;border-radius:16px;padding:0;width:min(34rem,calc(100% - 1.6rem));
  box-shadow:0 24px 70px rgba(10,25,18,.35)}
.feDlg.feLugar::backdrop{background:rgba(10,20,16,.45)}
.feDlg.feLugar .mapaPick{height:300px;border-radius:11px;overflow:hidden;
  position:relative;z-index:0;isolation:isolate}
.feDlg.feLugar .leaflet-pane,
.feDlg.feLugar .leaflet-top,
.feDlg.feLugar .leaflet-bottom{z-index:1}
.fe .ptsLista{display:grid;gap:.6rem;margin-top:.4rem}
.fe .ptFila{background:var(--card);border:1px solid var(--line);border-radius:11px;
  padding:.7rem .8rem;display:grid;gap:.45rem}
.fe .ptTop{display:flex;gap:.5rem;align-items:center}
.fe .ptFila input{width:100%;border:1px solid var(--line);border-radius:9px;
  padding:.5rem .65rem;font:inherit;font-size:16px;background:var(--card);min-width:0}
.fe .ptFila .ptNom{font-weight:700}
.fe .ptFila input:focus{outline:none;border-color:var(--accent)}
.fe .ptPie{display:flex;gap:.5rem;align-items:center}
.fe .ptPie input{flex:1;min-width:0}
.fe .ptsAgregar{margin-top:.6rem;border:1px dashed var(--line);background:none;color:var(--muted);
  border-radius:9px;padding:.45rem .8rem;font:inherit;font-size:.88rem;font-weight:700;cursor:pointer}
.fe .ptsAgregar:hover{color:var(--accent);border-color:var(--accent)}

/* ── Ajustes del módulo ── */
.fe .fhHead{background:var(--fe-cab,var(--dark))}
.fe .fhCerrar,.fe .fhVolver{width:44px;height:44px;font-size:1.7rem}
.fe .fhVolver{font-size:1.4rem}
.fe .fhTit h3{font-size:1.1rem}
.fe .guardarBtn{min-height:44px}
/* Toques de al menos 44 px en todo lo que se pulsa. */
.fe .opt,.fe .btnXls,.fe .btnSec,.fe .pubBtn,.fe .btnFile,.fe .lugarBtn,.fe .ptsAgregar,.fe .paqAgregar,
.fe .faqAgregar,.fe .campoNuevoBtn,.fe .promoverBtn,.fe .otroBtn,.fe .faltaChip,.fe .pdGuardar,.fe .pdBorrar,
.fe .paqCopiar,.fe .secBtn,.fe .geoRes button,.fe .errorBox button{min-height:44px}
.fe .faqQuitar,.fe .paqQuitar,.fe .dpCerrar,.fe .ptQuitar{min-width:44px;min-height:44px}
.fe .promoverBtn{display:inline-flex;align-items:center}
.fe .paqTab{padding-right:3.4rem}
.fe .ptEditar{top:.1rem;right:.1rem;width:44px;height:44px;border:0;background:none;font-size:1rem}
.fe .mini figure{width:104px;height:84px}
.fe .mini .btnQuitar,.fe .mini .btnPortada{width:32px;height:32px;font-size:1rem}
.fe .mini .btnQuitar{top:4px;right:4px}
.fe .mini .btnPortada{top:4px;left:4px}
.fe .mini .btnQuitar::before,.fe .mini .btnPortada::before{content:"";position:absolute;inset:-6px}
.fe .mini .btnQuitar,.fe .mini .btnPortada{position:absolute}
.fe .mini .playBadge{font-size:1rem}
.fe .secPie .btnSec{max-width:46%}
/* iOS amplía la pantalla al enfocar un campo de menos de 16 px. */
@media(max-width:759px){
  .fe input,.fe textarea,.fe select{font-size:16px!important}
}
@media(max-width:640px){
  .fe .feMarco{max-height:100dvh}
}
/* El pie fijo de cada sección va pegado al borde: con relleno abajo, el contenido se asomaba por debajo de él. */
.fe .fhCuerpo{padding-bottom:0}
.fe .fhCuerpo > .item,.fe .fhCuerpo > .errorBox{margin-bottom:1rem}
/* Sin minmax(0,…) una celda con texto sin salto de línea ensanchaba toda la rejilla más allá del teléfono. */
.fe .secIndice{grid-template-columns:minmax(0,1fr)}
@media(min-width:700px){.fe .secIndice{grid-template-columns:repeat(2,minmax(0,1fr))}}
.fe .item{min-width:0}
.fe .idxOtros{flex-wrap:wrap}
.fe .otroBtn{flex:1 1 9rem;white-space:normal}
