/* Módulo funnels. Solo tokens de css/app.css (:root); sin colores literales. Prefijo .fn-.
 * Secciones: 1 Lienzo · 2 Nodos · 3 Conexiones · 4 Controles · 5 Página y panel lateral · 6 Panel: contenido · 7 Índice de funnels · 8 Lienzo avanzado (ramas, minimapa, métricas) · 9 Panel: transición, selección múltiple, resumen */

/* ============================================================ 1. Lienzo ============================================================ */
.fn-lienzo{position:relative;overflow:hidden;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);min-height:360px;outline:none;isolation:isolate}
.fn-vp{position:absolute;inset:0;touch-action:none;cursor:grab;overflow:hidden;user-select:none;-webkit-user-select:none} /* el pan no selecciona texto (etiquetas «0 %») */
.fn-vp.is-arrastrando{cursor:grabbing}
.fn-grilla{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;color:var(--border-strong)}
.fn-grilla-punto{fill:currentColor;opacity:.55}
.fn-mundo{position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0;will-change:transform}
.fn-svg{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.fn-capa,.fn-nodos{position:absolute;left:0;top:0;width:0;height:0}

/* ============================================================ 2. Nodos ============================================================ */
.fn-nodo{position:absolute;box-sizing:border-box;display:flex;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow-1);
	cursor:pointer;user-select:none;-webkit-user-select:none;transition:border-color var(--dur-base) var(--ease-standard),box-shadow var(--dur-base) var(--ease-standard),transform var(--dur-base) var(--ease-out),opacity var(--dur-base)}
.fn-nodo:hover{border-color:color-mix(in srgb, var(--primary) 55%, var(--border-strong));box-shadow:var(--shadow-2)}
.fn-nodo:focus-visible{outline:2px solid var(--primary);outline-offset:3px}
.fn-nodo.is-seleccionado{border-color:var(--primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--primary) 35%, transparent),var(--shadow-2)}
.fn-nodo.is-arrastrado{cursor:grabbing;transition:none;z-index:2;box-shadow:var(--shadow-3)}
.fn-nodo.is-destino{border-color:var(--primary);background:color-mix(in srgb, var(--primary) 14%, var(--surface));transform:scale(1.03)}
.fn-lienzo.is-edicion .fn-nodo--etapa{cursor:grab}

/* Etapa: franja del color de la etapa (.nx-chip--{slug} fija --c), nombre, conteo grande */
.fn-nodo--etapa{flex-direction:column;justify-content:space-between;padding:var(--sp-3) var(--sp-3) var(--sp-2);
	background:linear-gradient(180deg,color-mix(in srgb, var(--c, var(--estado-secondary)) 9%, var(--surface)),var(--surface) 70%);box-shadow:inset 0 3px 0 var(--c, var(--estado-secondary)),var(--shadow-1)}
.fn-nodo--etapa:hover{box-shadow:inset 0 3px 0 var(--c, var(--estado-secondary)),var(--shadow-2)}
.fn-nodo--etapa.is-seleccionado{box-shadow:inset 0 3px 0 var(--c, var(--estado-secondary)),0 0 0 2px color-mix(in srgb, var(--primary) 35%, transparent),var(--shadow-2)}
.fn-etapa-cab{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);min-width:0}
.fn-etapa-nombre{font-family:var(--font-display);font-size:var(--fs-base);font-weight:600;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.fn-sla{flex:none;display:inline-flex;align-items:center;gap:3px;height:18px;padding:0 6px;border-radius:var(--radius-full);font-size:var(--fs-xs);font-weight:600;font-variant-numeric:tabular-nums;
	color:var(--critical);background:color-mix(in srgb, var(--critical) 16%, transparent);border:1px solid color-mix(in srgb, var(--critical) 40%, transparent)}
.fn-etapa-cuerpo{display:flex;align-items:baseline;gap:var(--sp-2);min-width:0}
.fn-etapa-total{font-family:var(--font-display);font-size:var(--fs-2xl);font-weight:600;line-height:1;font-variant-numeric:tabular-nums}
.fn-etapa-lbl{font-size:var(--fs-sm);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Puertos (puntos de conexión) */
.fn-puerto{position:absolute;width:9px;height:9px;border-radius:50%;background:var(--surface);border:2px solid var(--border-strong);pointer-events:none;transition:border-color var(--dur-base)}
.fn-puerto--izq{left:-5px;top:calc(50% - 4.5px)}
.fn-puerto--der{right:-5px;top:calc(50% - 4.5px)}
.fn-puerto--arr{top:-5px;left:calc(50% - 4.5px);display:none}
.fn-puerto--aba{bottom:-5px;left:calc(50% - 4.5px);display:none}
.fn-nodo--etapa:hover .fn-puerto,.fn-nodo--etapa.is-seleccionado .fn-puerto{border-color:var(--primary)}
.fn-vertical .fn-nodo--etapa .fn-puerto--arr,.fn-vertical .fn-nodo--etapa .fn-puerto--aba{display:block;width:7px;height:7px;left:calc(50% - 3.5px)}
.fn-vertical .fn-nodo--etapa .fn-puerto--arr{top:-4px}
.fn-vertical .fn-nodo--etapa .fn-puerto--aba{bottom:-4px}
.fn-vertical .fn-nodo--etapa .fn-puerto--izq,.fn-vertical .fn-nodo--etapa .fn-puerto--der{display:block;width:7px;height:7px}
.fn-vertical .fn-nodo--etapa .fn-puerto--izq{left:-4px}
.fn-vertical .fn-nodo--etapa .fn-puerto--der{right:-4px}
.fn-nodo--terminal .fn-puerto--arr{display:none}
.fn-vertical .fn-nodo--terminal .fn-puerto--izq{display:none}
.fn-vertical .fn-nodo--terminal .fn-puerto--arr{display:block;top:-5px}

/* Disparador (avanza) y acción (al_entrar): ícono en baldosa tintada + título + resumen + punto de estado */
.fn-nodo--avanza,.fn-nodo--al_entrar{align-items:center;gap:var(--sp-3);padding:0 var(--sp-3) 0 var(--sp-2);position:absolute}
.fn-nodo--avanza{--c:var(--estado-warning)}
.fn-nodo--al_entrar{--c:var(--estado-info)}
.fn-nodo-ico{flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:var(--radius-sm);font-size:var(--fs-icono);
	color:var(--c);background:color-mix(in srgb, var(--c) 16%, transparent);border:1px solid color-mix(in srgb, var(--c) 32%, transparent)}
.fn-nodo-txt{display:flex;flex-direction:column;min-width:0;flex:1;gap:1px}
.fn-nodo-titulo{font-size:var(--fs-cell);font-weight:600;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fn-nodo-resumen{font-size:var(--fs-sm);color:var(--text-muted);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fn-nodo-resumen:empty{display:none}
.fn-nodo.is-inactivo{opacity:.72;border-style:dashed}
.fn-nodo.is-inactivo:hover,.fn-nodo.is-inactivo.is-seleccionado{opacity:1}
.fn-punto{flex:none;width:8px;height:8px;border-radius:50%;background:var(--good);box-shadow:0 0 0 3px color-mix(in srgb, var(--good) 22%, transparent)}
.fn-punto--pausada{background:var(--text-muted);box-shadow:0 0 0 3px color-mix(in srgb, var(--text-muted) 22%, transparent)}
.fn-punto--error{background:var(--critical);box-shadow:0 0 0 3px color-mix(in srgb, var(--critical) 26%, transparent)}
.fn-vertical .fn-nodo--avanza,.fn-vertical .fn-nodo--al_entrar{gap:var(--sp-2);padding:0 var(--sp-2)}
.fn-vertical .fn-nodo-ico{width:28px;height:28px;font-size:var(--fs-base)}
.fn-vertical .fn-nodo-resumen{display:none}
.fn-vertical .fn-nodo-titulo{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:var(--fs-sm)}
.fn-vertical .fn-etapa-total{font-size:var(--fs-xl)}
.fn-vertical .fn-etapa-nombre{font-size:var(--fs-cell)}
.fn-vertical .fn-nodo--etapa{padding:var(--sp-2) var(--sp-3)}

/* Terminales */
.fn-nodo--terminal{align-items:center;gap:var(--sp-2);padding:0 var(--sp-3);border-radius:var(--radius-full)}
.fn-nodo--exito{--c:var(--good);background:color-mix(in srgb, var(--good) 10%, var(--surface));border-color:color-mix(in srgb, var(--good) 45%, var(--border-strong))}
.fn-nodo--salida{--c:var(--critical);background:color-mix(in srgb, var(--critical) 9%, var(--surface));border-color:color-mix(in srgb, var(--critical) 42%, var(--border-strong))}
.fn-term-ico{color:var(--c);font-size:var(--fs-lg)}
.fn-term-nombre{flex:1;min-width:0;font-size:var(--fs-cell);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fn-term-total{font-family:var(--font-display);font-weight:600;font-size:var(--fs-base);font-variant-numeric:tabular-nums;color:var(--c)}

/* ============================================================ 3. Conexiones ============================================================ */
.fn-con{fill:none;stroke-linecap:round;transition:stroke var(--dur-base)}
.fn-con--flujo{stroke:color-mix(in srgb, var(--text-muted) 75%, var(--bg));stroke-width:2}
.fn-con--nodo{stroke:color-mix(in srgb, var(--text-muted) 55%, var(--bg));stroke-width:1.25;stroke-dasharray:4 5}
.fn-con.is-resaltada{stroke:var(--primary)}
.fn-con.is-activa{stroke:var(--primary);stroke-width:2.5;animation:fn-flujo 1.5s linear}
@keyframes fn-flujo{from{stroke-dashoffset:36}to{stroke-dashoffset:0}}
.fn-flecha{fill:color-mix(in srgb, var(--text-muted) 75%, var(--bg))}
.fn-flecha--nodo{fill:color-mix(in srgb, var(--text-muted) 60%, var(--bg))}
.fn-flecha--act{fill:var(--primary)}
.fn-nodo.is-activa{animation:fn-pulso 1.5s var(--ease-out)}
@keyframes fn-pulso{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--primary) 55%, transparent)}100%{box-shadow:0 0 0 14px transparent}}

/* Botones «+» del modo configuración */
.fn-mas{position:absolute;transform:translate(-50%,-50%);display:grid;place-items:center;padding:0;width:26px;height:26px;border-radius:50%;font-size:var(--fs-xs);cursor:pointer;
	color:var(--text);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-1);
	transition:background var(--dur-fast),color var(--dur-fast),border-color var(--dur-fast),transform var(--dur-base) var(--ease-out),opacity var(--dur-base)}
.fn-mas:hover,.fn-mas:focus-visible{background:var(--primary);color:var(--primary-ink);border-color:var(--primary);transform:translate(-50%,-50%) scale(1.18);opacity:1}
.fn-mas:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.fn-mas--tenue{width:20px;height:20px;font-size:var(--fs-xs);opacity:.7;border-style:dashed;box-shadow:none;background:var(--bg)}

/* ============================================================ 4. Controles flotantes ============================================================ */
.fn-ctrl{position:absolute;left:var(--sp-3);bottom:var(--sp-3);z-index:var(--z-sticky);display:flex;align-items:center;gap:2px;padding:3px;border-radius:var(--radius);
	background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-2)}
.fn-ctrl-btn{display:grid;place-items:center;width:32px;height:32px;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);cursor:pointer;transition:background var(--dur-fast),color var(--dur-fast)}
.fn-ctrl-btn:hover{background:var(--surface-2);color:var(--text)}
.fn-ctrl-btn:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
.fn-zoom-val{min-width:44px;text-align:center;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted)}
.fn-modo{position:absolute;left:var(--sp-3);right:var(--sp-3);top:var(--sp-3);z-index:var(--z-sticky);display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:var(--sp-2) var(--sp-3);pointer-events:none}
.fn-modo>*{pointer-events:auto}
.fn-modo .btn{box-shadow:var(--shadow-1);background-clip:padding-box}
.fn-modo .btn-outline-secondary{background:var(--surface)}
.fn-modo-ayuda{display:none;font-size:var(--fs-sm);color:var(--text-muted);padding:4px 10px;border-radius:var(--radius-full);background:var(--surface);border:1px solid var(--border)}
.fn-lienzo.is-edicion .fn-modo-ayuda{display:inline-block}

/* ============================================================ 5. Página y panel lateral ============================================================ */
.fn-pagina{display:flex;gap:var(--sp-4);align-items:stretch;height:calc(100vh - 345px);height:calc(100dvh - 345px);min-height:440px}
.fn-pagina .fn-lienzo{flex:1;min-width:0;height:100%}
.fn-panel{flex:none;width:400px;max-width:44%;display:none;flex-direction:column;min-height:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-2);overflow:hidden}
.fn-panel.is-abierto{display:flex;animation:fn-panel-in var(--dur-base) var(--ease-out)}
@keyframes fn-panel-in{from{opacity:0;transform:translateX(12px)}to{opacity:1;transform:none}}
.fn-panel-cab{display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-4) var(--sp-4) var(--sp-3);border-bottom:1px solid var(--border)}
.fn-panel-titulo{flex:1;min-width:0;margin:0;font-family:var(--font-display);font-size:var(--fs-lg);font-weight:600;line-height:1.25;overflow-wrap:anywhere}
.fn-panel-sub{margin:2px 0 0;font-size:var(--fs-sm);color:var(--text-muted)}
.fn-tabs{display:flex;gap:2px;padding:0 var(--sp-3);border-bottom:1px solid var(--border);overflow-x:auto}
.fn-tab{flex:none;padding:var(--sp-2) var(--sp-3);border:0;border-bottom:2px solid transparent;background:none;color:var(--text-muted);font-size:var(--fs-cell);font-weight:600;cursor:pointer;margin-bottom:-1px;transition:color var(--dur-fast),border-color var(--dur-fast)}
.fn-tab:hover{color:var(--text)}
.fn-tab[aria-selected="true"]{color:var(--text);border-bottom-color:var(--primary)}
.fn-tab:focus-visible{outline:2px solid var(--primary);outline-offset:-2px;border-radius:var(--radius-sm)}
.fn-panel-cuerpo{flex:1;min-height:0;overflow-y:auto;padding:var(--sp-4)}
.fn-panel-pie{display:flex;gap:var(--sp-2);align-items:center;justify-content:space-between;padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border);background:var(--surface-2)}
.fn-hoja-asa{display:none}

/* ============================================================ 6. Panel: contenido ============================================================ */
.fn-barra-items{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-3)}
.fn-barra-items .form-control{flex:1;min-width:0}
.fn-lista{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sp-2)}
.fn-item{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer;
	transition:border-color var(--dur-fast),background var(--dur-fast)}
.fn-item:hover{border-color:var(--border-strong);background:var(--surface-2)}
.fn-item:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.fn-item.is-sel{border-color:var(--primary);background:color-mix(in srgb, var(--primary) 10%, var(--surface))}
.fn-item[draggable="true"]{cursor:grab}
.fn-item-chk{margin-top:3px;flex:none}
.fn-item-cuerpo{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.fn-item-titulo{font-size:var(--fs-cell);font-weight:600;overflow-wrap:anywhere}
.fn-item-meta{display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-3);font-size:var(--fs-sm);color:var(--text-muted)}
.fn-item-valor{font-variant-numeric:tabular-nums;color:var(--text)}
.fn-item-venc{color:var(--critical);font-weight:600}
.fn-mover{display:flex;gap:var(--sp-2);align-items:center;padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);border-radius:var(--radius);background:color-mix(in srgb, var(--primary) 10%, var(--surface));border:1px solid color-mix(in srgb, var(--primary) 35%, transparent);font-size:var(--fs-sm)}
.fn-mover select{flex:1;min-width:0}
.fn-pag{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--text-muted)}
.fn-campo{margin-bottom:var(--sp-3)}
.fn-campo>label{display:block;margin-bottom:4px;font-size:var(--fs-sm);font-weight:600;color:var(--text-muted)}
.fn-campo .form-text{font-size:var(--fs-xs);color:var(--text-muted)}
.fn-campo.is-invalido .form-control,.fn-campo.is-invalido .form-select{border-color:var(--critical)}
.fn-campo-error{margin:4px 0 0;font-size:var(--fs-sm);color:var(--critical)}
.fn-colores{display:flex;flex-wrap:wrap;gap:var(--sp-2)}
.fn-color{width:28px;height:28px;border-radius:50%;padding:0;cursor:pointer;background:var(--c);border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border-strong);transition:transform var(--dur-fast)}
.fn-color:hover{transform:scale(1.12)}
.fn-color[aria-checked="true"]{box-shadow:0 0 0 2px var(--text)}
.fn-color:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.fn-sub{margin:var(--sp-3) 0;padding:var(--sp-3);border:1px dashed var(--border-strong);border-radius:var(--radius)}
.fn-auto{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2);text-align:left;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:border-color var(--dur-fast),background var(--dur-fast)}
.fn-auto:hover{border-color:var(--border-strong);background:var(--surface-2)}
.fn-auto .fn-nodo-ico{width:30px;height:30px}
.fn-auto-txt{flex:1;min-width:0;display:flex;flex-direction:column}
.fn-auto-sub{font-size:var(--fs-sm);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fn-auto-tipo{margin:var(--sp-4) 0 var(--sp-2);font-size:var(--fs-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}
.fn-interruptor{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}
.fn-plantilla{display:flex;flex-direction:column;gap:2px;padding:var(--sp-3);margin-bottom:var(--sp-2);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer;text-align:left;width:100%;color:var(--text);transition:border-color var(--dur-fast),background var(--dur-fast)}
.fn-plantilla:hover{border-color:var(--primary);background:var(--surface-2)}
.fn-plantilla small{color:var(--text-muted);font-size:var(--fs-sm)}
.fn-cargando{display:flex;flex-direction:column;gap:var(--sp-2)}
.fn-panel .nx-rg-sim-lista{margin-top:var(--sp-3)}

/* ============================================================ 7. Índice de funnels ============================================================ */
.fn-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--sp-4)}
.fn-tarjeta{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-4);color:var(--text);text-decoration:none;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);
	transition:border-color var(--dur-base) var(--ease-standard),transform var(--dur-base) var(--ease-out),box-shadow var(--dur-base)}
.fn-tarjeta:hover{color:var(--text);border-color:color-mix(in srgb, var(--primary) 55%, var(--border-strong));transform:translateY(-2px);box-shadow:var(--shadow-2)}
.fn-tarjeta:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.fn-tarjeta-cab{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3)}
.fn-tarjeta-nombre{margin:0;font-family:var(--font-display);font-size:var(--fs-lg);font-weight:600;line-height:1.25;overflow-wrap:anywhere}
.fn-tarjeta-desc{margin:2px 0 0;font-size:var(--fs-sm);color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.fn-tarjeta-total{flex:none;text-align:right;font-family:var(--font-display);font-size:var(--fs-2xl);font-weight:600;line-height:1;font-variant-numeric:tabular-nums}
.fn-tarjeta-total small{display:block;margin-top:2px;font-family:var(--font-body);font-size:var(--fs-xs);font-weight:400;color:var(--text-muted)}
.fn-mini{display:flex;gap:3px;height:8px}
.fn-mini-seg{flex:1 1 0;min-width:4px;border-radius:var(--radius-full);background:var(--c);opacity:.9}
.fn-mini-seg.is-vacio{opacity:.22}
.fn-tarjeta-pie{display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-3);font-size:var(--fs-sm);color:var(--text-muted)}
.fn-tarjeta-pie .fn-venc{color:var(--critical);font-weight:600}

/* ============================================================ Responsive ============================================================ */
@media (max-width:767.98px){
	.fn-pagina{height:calc(100dvh - 330px);min-height:380px}
	.fn-panel{position:fixed;left:0;right:0;bottom:0;width:auto;max-width:none;max-height:72dvh;z-index:var(--z-popover);border-radius:var(--radius-lg) var(--radius-lg) 0 0;box-shadow:var(--shadow-3)}
	.fn-panel.is-abierto{animation:fn-hoja-in var(--dur-base) var(--ease-out)}
	@keyframes fn-hoja-in{from{transform:translateY(24px);opacity:0}to{transform:none;opacity:1}}
	.fn-hoja-asa{display:block;width:40px;height:4px;margin:var(--sp-2) auto 0;border-radius:var(--radius-full);background:var(--border-strong)}
	.fn-modo-ayuda{display:none!important}
	.fn-grid{grid-template-columns:1fr}
}
@media (max-width:1100px) and (min-width:768px){ .fn-panel{width:340px;max-width:50%} }
@media (prefers-reduced-motion:reduce){
	.fn-nodo,.fn-mas,.fn-tarjeta,.fn-panel.is-abierto{transition:none;animation:none}
}

/* Complementos del panel */
.fn-ico--avanza{--c:var(--estado-warning)}
.fn-ico--al_entrar{--c:var(--estado-info)}
.fn-item.is-arrastrado{opacity:.5}
.fn-sim{margin-top:var(--sp-4)}
.fn-panel-pie .btn.is-cargando{pointer-events:none;opacity:.7}
.fn-modal-borrar{min-width:min(420px,86vw)}

/* ============================================================ 8. Lienzo avanzado (F2): ramas, métricas, edición ============================================================ */
/* Conexiones: condicionada = trazo punteado + ícono de bifurcación en el origen; seleccionada = color principal */
.fn-con--cond{stroke-dasharray:8 5}
.fn-con--manual{stroke:color-mix(in srgb, var(--text) 55%, var(--bg))}
.fn-con.is-seleccionada{stroke:var(--primary);stroke-width:3}
.fn-flecha--sel{fill:var(--primary)}
.fn-con--nuevo{stroke:var(--primary);stroke-width:2;stroke-dasharray:3 5;pointer-events:none}
.fn-con-hit{fill:none;stroke:transparent;stroke-width:16;pointer-events:stroke;cursor:pointer}
@media (hover:hover){ .fn-con-hit:hover{stroke:color-mix(in srgb, var(--primary) 18%, transparent)} }
.fn-con-hit.is-seleccionada{stroke:color-mix(in srgb, var(--primary) 16%, transparent)}
.fn-etiqueta--v{transform:translate(0,-50%)!important}
.fn-etiqueta--vi{transform:translate(-100%,-50%)!important}
.fn-etiqueta{position:absolute;transform:translate(-50%,-50%);display:inline-flex;align-items:center;gap:6px;max-width:170px;height:20px;padding:0 7px;margin:0;border-radius:var(--radius-full);font-size:var(--fs-xs);line-height:1;color:var(--text-muted);
	background:var(--surface-2);border:1px solid var(--border-strong);white-space:nowrap;cursor:pointer;pointer-events:auto;transition:border-color var(--dur-fast),color var(--dur-fast),background var(--dur-fast)}
.fn-etiqueta:hover{color:var(--text);border-color:var(--primary)}
.fn-etiqueta:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.fn-etiqueta.is-seleccionada{color:var(--primary-ink);background:var(--primary);border-color:var(--primary)}
.fn-et-txt{min-width:0;overflow:hidden;text-overflow:ellipsis}
.fn-et-pct{flex:none;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text)}
.fn-etiqueta.is-seleccionada .fn-et-pct{color:inherit}
.fn-et-txt+.fn-et-pct{padding-left:6px;border-left:1px solid var(--border-strong)}
.fn-etiqueta.is-seleccionada .fn-et-txt+.fn-et-pct{border-left-color:color-mix(in srgb, var(--primary-ink) 40%, transparent)}
.fn-rama{position:absolute;transform:translate(-50%,-50%);display:grid;place-items:center;width:20px;height:20px;border-radius:50%;font-size:var(--fs-xs);pointer-events:auto;
	color:var(--warning);background:var(--surface);border:1px solid color-mix(in srgb, var(--warning) 55%, var(--border-strong))}
.fn-etapa-met{display:flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--text-muted);white-space:nowrap}
.fn-etapa-met .fa{font-size:var(--fs-xs);opacity:.8}
.fn-vertical .fn-etapa-met{display:none}

/* Puerto de salida: asa para arrastrar una rama (solo en edición) */
.fn-lienzo.is-edicion:not(.fn-vertical) .fn-nodo--etapa .fn-puerto--der{pointer-events:auto;cursor:crosshair;width:13px;height:13px;right:-7px;top:calc(50% - 6.5px);border-color:var(--primary);background:var(--bg);
	transition:transform var(--dur-fast),background var(--dur-fast)}
.fn-lienzo.is-edicion:not(.fn-vertical) .fn-nodo--etapa .fn-puerto--der::after{content:"";position:absolute;inset:-8px}
.fn-lienzo.is-edicion:not(.fn-vertical) .fn-nodo--etapa .fn-puerto--der:hover{background:var(--primary);transform:scale(1.25)}
/* Rama por arrastre táctil: en vertical (móvil) el asa es el puerto inferior; el área táctil mide 44 px sin crecer el punto visible.
   touch-action solo en el puerto: el fondo conserva pan y pinza. */
.fn-lienzo.is-edicion .fn-nodo--etapa .fn-puerto--der,.fn-lienzo.is-edicion.fn-vertical .fn-nodo--etapa .fn-puerto--aba{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.fn-lienzo.is-edicion.fn-vertical .fn-nodo--etapa .fn-puerto--aba{pointer-events:auto;cursor:crosshair;width:13px;height:13px;left:calc(50% - 6.5px);bottom:-7px;border-color:var(--primary);background:var(--bg);
	transition:transform var(--dur-fast),background var(--dur-fast)}
.fn-lienzo.is-edicion.fn-vertical .fn-nodo--etapa .fn-puerto--aba::after{content:"";position:absolute;inset:-18px}
@media (hover:none),(pointer:coarse){
	.fn-lienzo.is-edicion:not(.fn-vertical) .fn-nodo--etapa .fn-puerto--der::after{inset:-18px}
}
.fn-conectando,.fn-conectando .fn-nodo{cursor:crosshair!important}
.fn-conectando .fn-nodo--etapa .fn-puerto--der,.fn-conectando .fn-nodo--etapa .fn-puerto--aba{transform:none}
.fn-con--nuevo.is-cancelada{stroke:var(--critical);opacity:0;transition:opacity 250ms var(--ease-out)}
.fn-conex-aviso{position:absolute;left:50%;top:56px;transform:translateX(-50%);z-index:var(--z-sticky);max-width:calc(100% - var(--sp-6));padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-full);
	background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text-muted);font-size:var(--fs-sm);line-height:1.2;text-align:center;pointer-events:none;box-shadow:var(--shadow-2);
	overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:border-color var(--dur-fast),color var(--dur-fast)}
.fn-conex-aviso.is-listo{color:var(--text);border-color:var(--primary)}
@media (max-width:767.98px){
	/* la hoja inferior tapa nodos: mientras se arrastra una rama se oculta para poder soltar en cualquier etapa; al terminar vuelve */
	.fn-pagina:has(.fn-conectando) .fn-panel{visibility:hidden;opacity:0;transition:opacity var(--dur-fast)}
}
.fn-nodo.is-destino-conexion{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 40%, transparent),var(--shadow-2)}
.fn-lienzo.fn-libre.is-edicion .fn-nodo{cursor:grab}
.fn-lienzo.fn-modo-marco .fn-vp{cursor:crosshair}

/* Marco de selección */
.fn-marco{position:absolute;z-index:var(--z-sticky);pointer-events:none;border:1px dashed var(--primary);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--primary) 12%, transparent)}
.fn-marco[hidden]{display:none}

/* Barra superior: herramientas de edición, período, resumen */
.fn-herr{display:none;align-items:center;gap:var(--sp-2);flex-wrap:wrap;justify-content:flex-end}
.fn-lienzo.is-edicion .fn-herr{display:flex}
.fn-seg{display:inline-flex;align-items:center;gap:2px;padding:2px 2px 2px var(--sp-2);border-radius:var(--radius);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-1)}
.fn-seg-lbl{margin-right:4px;font-size:var(--fs-xs);color:var(--text-muted)}
.fn-seg-btn{height:26px;padding:0 var(--sp-3);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);font-size:var(--fs-sm);font-weight:600;cursor:pointer;transition:background var(--dur-fast),color var(--dur-fast)}
.fn-seg-btn:hover{color:var(--text)}
.fn-seg-btn[aria-pressed="true"]{background:var(--primary);color:var(--primary-ink)}
.fn-seg-btn:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.fn-solo-libre{display:none}
.fn-lienzo.fn-libre .fn-solo-libre{display:inline-flex;align-items:center;gap:6px}
.fn-periodo{position:relative;display:inline-flex;align-items:center;margin:0}
.fn-periodo .fa{position:absolute;left:9px;font-size:var(--fs-sm);color:var(--text-muted);pointer-events:none;z-index:1}
.fn-periodo .form-select{width:auto;min-width:104px;padding-left:28px;box-shadow:var(--shadow-1);background-color:var(--surface)}
.fn-resumen-btn[aria-pressed="true"]{color:var(--primary);border-color:var(--primary)}

/* Minimapa */
.fn-minimapa{position:absolute;right:var(--sp-3);bottom:var(--sp-3);z-index:var(--z-sticky);padding:3px;border-radius:var(--radius);background:color-mix(in srgb, var(--surface) 92%, transparent);border:1px solid var(--border-strong);box-shadow:var(--shadow-2);backdrop-filter:blur(4px)}
.fn-mm-svg{display:block;border-radius:var(--radius-sm);background:var(--bg);touch-action:none;cursor:pointer}
.fn-mm-n{fill:color-mix(in srgb, var(--c, var(--text-muted)) 62%, var(--surface));stroke:none}
.fn-mm-n--nodo{--c:var(--estado-info);opacity:.8}
.fn-mm-n--avanza{--c:var(--estado-warning)}
.fn-mm-term--exito{--c:var(--good)}
.fn-mm-term--salida{--c:var(--critical)}
.fn-mm-n.is-seleccionado{stroke:var(--primary);stroke-width:1.5;fill:var(--primary)}
.fn-mm-lin{stroke:var(--border-strong);stroke-width:1}
.fn-mm-vp{fill:color-mix(in srgb, var(--primary) 14%, transparent);stroke:var(--primary);stroke-width:1.5;cursor:grab}
.fn-mm-vp:active{cursor:grabbing}
.fn-mm-vp:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.fn-mm-x{position:absolute;top:6px;right:6px;display:grid;place-items:center;width:20px;height:20px;padding:0;border:0;border-radius:var(--radius-sm);font-size:var(--fs-xs);color:var(--text-muted);background:var(--surface);cursor:pointer;opacity:0;transition:opacity var(--dur-fast)}
.fn-minimapa:hover .fn-mm-x,.fn-mm-x:focus-visible{opacity:1}
.fn-mm-x:hover{color:var(--text)}
.fn-mm-x:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.fn-mm-abrir{display:none;position:absolute;right:var(--sp-3);bottom:var(--sp-3);z-index:var(--z-sticky);width:34px;height:34px;padding:0;place-items:center;border-radius:var(--radius);color:var(--text-muted);background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-1);cursor:pointer;transition:color var(--dur-fast),border-color var(--dur-fast)}
.fn-mm-abrir:hover{color:var(--text);border-color:var(--primary)}
.fn-mm-abrir:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.fn-lienzo.fn-mm-oculto .fn-minimapa{display:none}
.fn-lienzo.fn-mm-oculto .fn-mm-abrir{display:grid}

/* ============================================================ 9. Panel: transición, selección múltiple, resumen ============================================================ */
.fn-ramas{list-style:none;margin:0 0 var(--sp-2);padding:0;display:flex;flex-direction:column;gap:var(--sp-2)}
.fn-rama-fila{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-3);text-align:left;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:border-color var(--dur-fast),background var(--dur-fast)}
.fn-rama-fila:hover{border-color:var(--border-strong);background:var(--surface-2)}
.fn-rama-fila:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.fn-rama-fila .fa{color:var(--text-muted);flex:none}
.fn-rama-txt{flex:1;min-width:0;display:flex;flex-direction:column}
.fn-rama-txt strong{font-size:var(--fs-cell);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fn-rama-txt span{font-size:var(--fs-sm);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fn-nota{display:flex;gap:var(--sp-2);padding:var(--sp-3);margin-bottom:var(--sp-3);font-size:var(--fs-sm);color:var(--text-muted);border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--border)}
.fn-nota .fa{margin-top:2px;color:var(--primary)}
.fn-conds{margin:0 0 var(--sp-2)}
.fn-cond-vacia{margin:0 0 var(--sp-2);font-size:var(--fs-sm);color:var(--text-muted)}
.fn-conds .nx-mu-filtro{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"col x" "op op" "val val"}
.fn-conds .nx-mu-f-col{grid-area:col}.fn-conds .nx-mu-f-op{grid-area:op}.fn-conds .nx-mu-f-val{grid-area:val}.fn-conds .nx-mu-f-x{grid-area:x}
.fn-conds-cab{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--sp-2)}
.fn-orden{display:flex;gap:var(--sp-1)}
.fn-trans-ruta{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;margin-bottom:var(--sp-3);font-size:var(--fs-cell)}
.fn-trans-ruta .fa{color:var(--text-muted)}
.fn-multi-n{font-family:var(--font-display);font-size:var(--fs-2xl);font-weight:600;line-height:1}
.fn-multi-grupo{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin:var(--sp-2) 0 var(--sp-4)}
.fn-multi-lista{list-style:none;margin:var(--sp-3) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--sp-1);font-size:var(--fs-sm);color:var(--text-muted)}
.fn-multi-lista li{display:flex;align-items:center;gap:var(--sp-2)}
.fn-multi-lista .fa{width:14px;text-align:center}

/* Resumen */
.fn-kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-2);margin-bottom:var(--sp-4)}
.fn-kpi{display:flex;flex-direction:column;gap:2px;padding:var(--sp-3);border-radius:var(--radius);background:var(--bg);border:1px solid var(--border)}
.fn-kpi-lbl{font-size:var(--fs-xs);color:var(--text-muted)}
.fn-kpi-val{font-family:var(--font-display);font-size:var(--fs-xl);font-weight:600;line-height:1.1;font-variant-numeric:tabular-nums}
.fn-kpi--good .fn-kpi-val{color:var(--good)}
.fn-kpi--critical .fn-kpi-val{color:var(--critical)}
.fn-embudo-t{margin:0 0 var(--sp-2);font-size:var(--fs-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}
.fn-embudo{display:flex;flex-direction:column;gap:var(--sp-2);list-style:none;margin:0;padding:0}
.fn-emb-fila{display:grid;grid-template-columns:minmax(0,92px) minmax(0,1fr) auto;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm)}
.fn-emb-nombre{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-muted)}
.fn-emb-barra{height:18px;border-radius:var(--radius-sm);background:var(--surface-2);overflow:hidden}
.fn-emb-rel{display:block;height:100%;min-width:3px;border-radius:var(--radius-sm);background:color-mix(in srgb, var(--c, var(--estado-secondary)) 80%, var(--surface));transition:width var(--dur-base) var(--ease-out)}
.fn-emb-val{min-width:44px;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}
.fn-emb-val small{margin-left:6px;font-weight:400;font-size:var(--fs-xs);color:var(--text-muted)}
.fn-resumen-pie{margin:var(--sp-4) 0 0;font-size:var(--fs-sm);color:var(--text-muted)}

/* Bitácora con detalle por acción */
.fn-bit summary{cursor:pointer;font-size:var(--fs-sm);color:var(--text-muted);padding:2px 0}
.fn-bit summary:hover{color:var(--text)}
.fn-bit summary:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.fn-bit-lista{list-style:none;margin:var(--sp-1) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--sp-1)}
.fn-bit-lista li{display:flex;align-items:baseline;gap:var(--sp-2);font-size:var(--fs-sm)}

/* Toast con acción (deshacer) */
.nx-toast .fn-toast-accion{margin-left:var(--sp-3);padding:2px 10px;border-radius:var(--radius-sm);font-size:var(--fs-sm);font-weight:600;color:var(--primary);background:transparent;border:1px solid color-mix(in srgb, var(--primary) 50%, transparent);cursor:pointer}
.nx-toast .fn-toast-accion:hover{background:color-mix(in srgb, var(--primary) 14%, transparent)}
.nx-toast .fn-toast-accion:focus-visible{outline:2px solid var(--primary);outline-offset:2px}

/* Subparámetros complejos de acciones (mapa de columnas, etc.) */
.fn-mapa-fila{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:var(--sp-2);align-items:center;margin-bottom:var(--sp-2)}
.fn-checks{display:flex;flex-direction:column;gap:var(--sp-1);max-height:160px;overflow-y:auto;padding:var(--sp-2);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}

/* Tarjeta del índice */
.fn-tarjeta-pie .fn-ult{margin-left:auto}

@media (max-width:767.98px){
	.fn-minimapa,.fn-mm-abrir{display:none!important}
	.fn-herr{display:none!important}
	.fn-modo{gap:var(--sp-2)}
}
@media (prefers-reduced-motion:reduce){ .fn-emb-rel,.fn-etiqueta{transition:none} }

/* ============================================================ Conectores (APIs externas) ============================================================ */
.fn-mono{font-family:var(--font-mono);font-size:var(--fs-sm)}
textarea.fn-mono{line-height:1.5;resize:vertical;tab-size:2}
.fn-enlace-adm{display:inline-flex;align-items:center;gap:6px;margin-top:6px;font-size:var(--fs-sm);color:var(--primary);text-decoration:none}
.fn-enlace-adm:hover{text-decoration:underline}
.fn-enlace-adm:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:var(--radius-sm)}
.fn-llamada{margin:var(--sp-2) 0 0;padding:var(--sp-2) var(--sp-3);max-height:220px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font-family:var(--font-mono);font-size:var(--fs-xs);line-height:1.5;
	color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius)}
.fn-llamada:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.fn-opc{font-weight:400;color:var(--text-muted)}

.fn-cx-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:var(--sp-4)}
.fn-cx{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-4);margin:0;transition:border-color var(--dur-base) var(--ease-standard),box-shadow var(--dur-base) var(--ease-standard)}
.fn-cx:hover{border-color:var(--border-strong);box-shadow:var(--shadow-2)}
.fn-cx.is-inactivo .fn-cx-nombre,.fn-cx.is-inactivo .fn-cx-meta{opacity:.6}
.fn-cx-cab{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}
.fn-cx-nombre{margin:0;min-width:0;font-family:var(--font-display);font-size:var(--fs-lg);font-weight:600;overflow-wrap:anywhere}
.fn-cx-desc{margin:0;font-size:var(--fs-sm);color:var(--text-muted)}
.fn-cx-meta{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3) var(--sp-4);margin:0}
.fn-cx-meta>div{min-width:0}
.fn-cx-meta>div:first-child{grid-column:1/-1}
.fn-cx-meta dt{font-size:var(--fs-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted)}
.fn-cx-meta dd{margin:2px 0 0;font-size:var(--fs-sm);color:var(--text)}
.fn-cx-url{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fn-cx-ok{color:var(--good)}
.fn-cx-falta{color:var(--warning);font-weight:600}
.fn-cx-prueba{display:inline-flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.fn-cx-prueba--nunca{color:var(--text-muted)}
.fn-cx-fecha{font-size:var(--fs-xs);color:var(--text-muted)}
.fn-cx-pie{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:auto;padding-top:var(--sp-3);border-top:1px solid var(--border)}

.nx-modal.fn-cx-modal{width:min(640px,100%)}
.nx-modal.fn-cx-modal--ancho{width:min(900px,100%)}
.fn-cx-form .fn-campo>label,.fn-cx-form .fn-campo>label#cx-f-auth-l{display:block}
.fn-seg{display:flex;flex-wrap:wrap;gap:0;border:1px solid var(--border-strong);border-radius:var(--radius);overflow:hidden;width:fit-content;max-width:100%}
.fn-seg-op{position:relative;margin:0}
.fn-seg-op input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.fn-seg-op span{display:block;padding:6px 14px;font-size:var(--fs-sm);color:var(--text-muted);background:var(--surface);cursor:pointer;border-right:1px solid var(--border);transition:background var(--dur-fast) var(--ease-standard),color var(--dur-fast) var(--ease-standard)}
.fn-seg-op:last-child span{border-right:0}
.fn-seg-op:hover span{background:var(--surface-2);color:var(--text)}
.fn-seg-op input:checked+span{background:var(--primary);color:var(--primary-ink);font-weight:600}
.fn-seg-op input:focus-visible+span{outline:2px solid var(--primary);outline-offset:-2px;box-shadow:inset 0 0 0 2px var(--surface)}
.fn-cx-secreto{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}
.fn-cx-secreto .form-control{flex:1 1 220px;min-width:0}
.fn-cx-secreto .is-activo{border-color:var(--warning);color:var(--warning)}
.fn-cx-cabs{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-2)}
.fn-cx-cabfila{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;gap:var(--sp-2);align-items:center}
.fn-cx-fila2{display:grid;grid-template-columns:minmax(0,1fr) 140px;gap:var(--sp-3)}
.fn-cx-acc{flex-wrap:wrap;align-items:center;margin-top:var(--sp-4);padding-top:var(--sp-3);border-top:1px solid var(--border)}
.fn-cx-sep{flex:1}
.fn-cx-borrar{color:var(--critical)}
.fn-cx-res{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-3);margin-top:var(--sp-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);font-size:var(--fs-sm)}
.fn-cx-res.is-ok{border-color:color-mix(in srgb, var(--good) 45%, var(--border));background:color-mix(in srgb, var(--good) 8%, var(--surface))}
.fn-cx-res.is-error{border-color:color-mix(in srgb, var(--critical) 45%, var(--border));background:color-mix(in srgb, var(--critical) 8%, var(--surface))}
.fn-cx-res.is-ok .fa-check-circle{color:var(--good)}
.fn-cx-res.is-error .fa-times-circle{color:var(--critical)}
.fn-cx-res-cab{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2)}
.fn-cx-cod,.fn-cx-ms{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted);padding:1px 6px;border:1px solid var(--border);border-radius:var(--radius-full)}
.fn-cx-res .fn-llamada{margin-top:0}
.fn-cx-bit-tabla td,.fn-cx-bit-tabla th{vertical-align:top}
.fn-tabla-scroll{overflow-x:auto}
.fn-cx-nw{white-space:nowrap}
.fn-cx-met{font-weight:600;font-size:var(--fs-xs);letter-spacing:.04em;color:var(--text-muted)}
.fn-cx-det{margin-top:2px;font-size:var(--fs-xs);color:var(--text-muted);overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:520px}
.fn-cx-bit-mas{margin-top:var(--sp-3);text-align:center}
.fn-cx-bit-vacio{color:var(--text-muted)}
.fn-cx-nodos{margin:var(--sp-3) 0 0;padding-left:var(--sp-4);font-size:var(--fs-sm)}
@media (max-width:767.98px){
	.fn-cx-grid{grid-template-columns:1fr}
	.fn-cx-cabfila{grid-template-columns:minmax(0,1fr) auto}
	.fn-cx-cabfila>div:nth-child(2){grid-column:1/2}
	.fn-cx-fila2{grid-template-columns:1fr}
	.fn-cx-acc .btn{flex:1 1 auto}
	.fn-cx-sep{display:none}
	/* Etiquetas de arco en vertical: con la hoja inferior abierta quedan tapadas, se ocultan */
	.fn-pagina:has(.fn-panel.is-abierto) .fn-vertical .fn-etiqueta:not(.is-seleccionada){display:none}
}
@media (prefers-reduced-motion:reduce){ .fn-cx,.fn-seg-op span{transition:none} }

/* ===== F4: plantillas de conector, marcadores y entrada por webhook ===== */
.fn-marcador{padding:0 5px;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--warning);background:color-mix(in srgb, var(--warning) 14%, transparent);border:1px solid color-mix(in srgb, var(--warning) 45%, var(--border))}
.fn-marc-aviso{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-1) var(--sp-2);margin-top:6px;font-size:var(--fs-sm);color:var(--text-muted)}
.fn-cx-marc:empty{display:none}
.fn-cx-preset{display:flex;gap:var(--sp-3);align-items:flex-start;margin-bottom:var(--sp-4);padding:var(--sp-3);border:1px solid var(--border);border-left:3px solid var(--primary);border-radius:var(--radius);background:var(--surface-2);font-size:var(--fs-sm)}
.fn-cx-preset>i{font-size:var(--fs-xl);color:var(--primary);margin-top:2px}
.fn-cx-preset-txt{display:block;color:var(--text-muted)}
.fn-cx-presets-sub{color:var(--text-muted);font-size:var(--fs-sm);margin:0 0 var(--sp-4)}
.fn-cx-pgrid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--sp-3)}
.fn-cx-pitem{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);transition:border-color var(--dur-fast) var(--ease-standard),background var(--dur-fast) var(--ease-standard)}
.fn-cx-pitem:hover,.fn-cx-pitem:focus-within{border-color:var(--primary);background:var(--surface-2)}
.fn-cx-pbtn{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"i n" "i a";column-gap:var(--sp-3);align-items:center;text-align:left;width:100%;padding:0;border:0;background:none;color:var(--text);cursor:pointer}
.fn-cx-pbtn:focus-visible{outline:2px solid var(--primary);outline-offset:3px;border-radius:var(--radius-sm)}
.fn-cx-pico{grid-area:i;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--border);color:var(--primary);font-size:var(--fs-lg)}
.fn-cx-pnom{grid-area:n;font-weight:600}
.fn-cx-pauth{grid-area:a;font-size:var(--fs-xs);color:var(--text-muted)}
.fn-cx-payuda{font-size:var(--fs-sm);color:var(--text-muted);overflow-wrap:anywhere}
.fn-cx-payuda a,.fn-cx-preset a{color:var(--primary)}
.fn-wh-nota{padding:var(--sp-2) var(--sp-3);border-left:3px solid var(--primary);background:var(--surface-2);border-radius:var(--radius-sm)}
.fn-wh-bloque{margin:var(--sp-4) 0 0;padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--radius);min-width:0}
.fn-wh-bloque legend{float:none;width:auto;margin:0;padding:0 var(--sp-2);font-size:var(--fs-sm);font-weight:600;color:var(--text-muted)}
.fn-wh-prev-acc{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-2)}
.fn-wh-res{margin-top:var(--sp-3)}
.fn-wh-cond{display:flex;gap:var(--sp-2);align-items:flex-start;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);font-size:var(--fs-sm);margin-bottom:var(--sp-2);border:1px solid var(--border)}
.fn-wh-cond.is-ok{color:var(--good);border-color:color-mix(in srgb, var(--good) 45%, var(--border))}
.fn-wh-cond.is-no{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 45%, var(--border))}
.fn-wh-dl{margin:0;display:grid;gap:var(--sp-2)}
.fn-wh-dl.is-tenue{opacity:.55}
.fn-wh-dl>div{display:grid;grid-template-columns:90px minmax(0,1fr);gap:var(--sp-2);align-items:baseline}
.fn-wh-dl dt{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:600}
.fn-wh-dl dd{margin:0;overflow-wrap:anywhere}
.fn-wh-dl .fn-llamada{margin:0}
.fn-wh-vacio{color:var(--text-muted)}
.fn-wh-mal{color:var(--critical)}
@media (max-width:480px){ .fn-wh-dl>div{grid-template-columns:1fr;gap:2px} .fn-cx-pgrid{grid-template-columns:1fr} }
.fn-cx-payuda .fn-cx-preset-txt{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.fn-cx-payuda a{display:inline-block;margin-top:2px}
