/* ==========================================================================
   FORMULARIOS — vestido del plugin Fluent Forms
   ==========================================================================
   El plugin trae su propio aspecto, con azules y bordes que no son los de este
   sitio. Aquí NO se rehace su maquetación: solo se le cambian los colores, la
   letra y el aire, para que un formulario no parezca pegado desde fuera.

   Se toca por las clases del plugin —.ff-el-*— y no metiendo clases propias en
   sus campos: quien edite el formulario desde el escritorio no tiene que saber
   nada de este archivo para que le quede bien.

   Solo se carga en las páginas que llevan un formulario. Ver functions.php.
   ========================================================================== */

/* El rojo de «obligatorio», declarado UNA vez: lo usan el asterisco que pinta el
   plugin junto a cada campo y el que aparece escrito dentro del texto de la
   página. Si se separan, el día que cambie uno el otro se queda distinto y nadie
   se entera hasta que alguien los ve juntos.

   Es el acento oscurecido, no el acento tal cual: sobre fondo claro, el rojo del
   sitio no llega al contraste exigible para un texto tan pequeño. */
:root {
  --gt-required: #a03836;
  --gt-required: color-mix(in srgb, var(--color-accent) 86%, #000);
}

.frm-fluent-form {
  font-family: var(--font-primary);
}

/* El asterisco escrito dentro del texto —«Los campos marcados con * son
   obligatorios»— tiene que ser el MISMO que el de los campos, o no se entiende
   que hablan de lo mismo. */
.gt-required {
  color: var(--gt-required);
  font-weight: 700;
}

/* --------------------------------------------------------------------------
   Un campo y su etiqueta
   -------------------------------------------------------------------------- */

/* EL :not() NO ES DECORATIVO, ES LO QUE HACE QUE ESTA REGLA EXISTA. El plugin
   declara `.fluentform .ff-el-group { margin-bottom: 20px }`: dos clases, las
   mismas que esta, y su hoja carga DESPUÉS de la del tema. En un empate de
   especificidad gana la última, así que esta regla no se aplicaba nunca: los
   22px de aquí eran letra muerta y el formulario respiraba 20. :not() suma la
   especificidad de su argumento, una clase más, y con eso gana sin recurrir a
   !important.

   Y de paso separa lo que hay que separar: la nota legal no es un campo, es la
   explicación de la casilla que va justo debajo, y va pegada a ella. */
.frm-fluent-form .ff-el-group:not(.ff-custom_html) {
  margin-bottom: 22px;
}

.frm-fluent-form .ff-el-group.ff-custom_html {
  /* Pegada a la casilla, pero no encima: son dos cosas que se leen juntas, no
     una sola. Menos que el aire entre campos —22px— y más que el que separa dos
     renglones del mismo párrafo. */
  margin-bottom: 18px;
}

/* OTRO EMPATE PERDIDO, y este se veía. El plugin declara
   `.ff-default .ff-el-input--label label { font-weight: 500 }`: dos clases y un
   tipo, lo mismo que había aquí, y carga después. Resultado: en /contacto/ las
   etiquetas salían en 500 y en /empleo/ y /canal-etico/ en 600, porque allí el
   formulario vive dentro de .gt-prose y algo de esa cadena desempataba. Dos
   formularios del mismo sitio con la etiqueta de distinto grosor.

   Con .ff-el-group delante pesa una clase más y vale en los tres.

   Poppins no trae 600 —ver la memoria del tema padre—, así que esto se dibuja
   con el 700. Es lo que ya se veía en los otros dos formularios. */
.frm-fluent-form .ff-el-group .ff-el-input--label label {
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.4;
  color: var(--color-primary);
}

/* Un respiro entre la etiqueta y su caja. Pegadas, la etiqueta parece parte del
   campo de arriba: en una columna de nueve campos, esos pocos píxeles son los
   que dicen qué pertenece a qué. */
.frm-fluent-form .ff-el-group .ff-el-input--label {
  margin-bottom: 7px;
}

/* El asterisco es del sitio, no del plugin.

   EL SELECTOR ES LARGO A PROPÓSITO. El del plugin es
   `.fluentform .ff-el-input--label.ff-el-is-required.asterisk-right label::after`,
   cuatro clases; con tres, la de aquí perdía y el asterisco de los campos salía
   en el rojo claro del plugin mientras el escrito en el texto salía en el del
   sitio. Dos rojos distintos para decir lo mismo, a dos dedos el uno del otro.
   Se le añade `.ff-el-group`, que es el envoltorio real de cada campo, para
   pasarle una clase y ganar sin recurrir a !important. */
.frm-fluent-form .ff-el-group .ff-el-input--label.ff-el-is-required.asterisk-right label::after,
.frm-fluent-form .ff-el-group .ff-el-input--label.ff-el-is-required.asterisk-left label::before {
  color: var(--gt-required);
}

.frm-fluent-form .ff-el-input--content .ff-el-help-message {
  margin-top: 6px;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: #5a5a5a;
}

/* --------------------------------------------------------------------------
   Cajas de texto
   -------------------------------------------------------------------------- */

/* EL SELECTOR ES ASÍ DE LARGO PORQUE HAY QUE GANAR DOS PELEAS, NO UNA.

   Antes de esto, en un mismo formulario convivían tres estilos de campo:

     · las cajas de texto las vestía el TEMA PADRE, con
       input:not([type=submit]):not([type=radio]):not([type=checkbox]):not([type=file])
       —cuatro :not(), cada uno con el peso de un atributo—, que ganaba a las
       dos clases de aquí: salían con 8px de relleno y letra de 17,6px;
     · el desplegable y la caja grande los vestía el PLUGIN, con
       .ff-default .ff-el-form-control, que empata con esta regla y carga
       después: 11px de relleno y letra de 16px;
     · y lo de aquí solo se aplicaba en lo que ninguno de los dos tocaba.

   Resultado: campos de 44px al lado de campos de 47px, con dos tamaños de letra
   distintos, uno debajo del otro. Se ve como descuido aunque no se sepa decir
   por qué.

   Para las cajas de texto se repite la cadena de :not() del padre y se le añade
   la clase del formulario: una clase más que la suya, gana. Para el desplegable
   y la caja grande basta con nombrar el tipo junto a la clase del plugin.

   Los tipos excluidos se quedan fuera a propósito: enviar es un botón, y radio,
   casilla y archivo tienen cada uno su apartado más abajo. */
.frm-fluent-form input:not([type="submit"]):not([type="radio"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]),
.frm-fluent-form textarea.ff-el-form-control,
.frm-fluent-form select.ff-el-form-control {
  width: 100%;
  padding: 12px 14px;

  font-family: var(--font-primary);
  font-size: 1rem;
  line-height: 1.5;
  color: var(--color-text);

  background-color: var(--color-bg);

  /* EL FILO ES AZUL REBAJADO, no gris neutro. Un borde de negro al 22% sobre un
     panel gris no pertenece a ninguna paleta: es el gris de todos los
     formularios de internet. Con el azul del sitio rebajado, la caja sigue
     siendo discreta pero forma parte de la casa. */
  border: 1px solid #c3ced6;
  border: 1px solid color-mix(in srgb, var(--color-primary) 26%, transparent);
  border-radius: 3px;

  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

/* Al pasar el ratón, el filo se marca. Es la señal de que la caja se puede usar,
   y llega ANTES de pulsar: sin ella, un formulario largo se ve como un dibujo
   hasta que se hace clic. No se toca el fondo, que ya es blanco sobre gris. */
.frm-fluent-form input:not([type="submit"]):not([type="radio"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):hover,
.frm-fluent-form textarea.ff-el-form-control:hover,
.frm-fluent-form select.ff-el-form-control:hover {
  border-color: #7e95a6;
  border-color: color-mix(in srgb, var(--color-primary) 55%, transparent);
}

.frm-fluent-form textarea.ff-el-form-control {
  min-height: 160px;
  resize: vertical;
}


/* --------------------------------------------------------------------------
   Desplegables — la flecha
   --------------------------------------------------------------------------
   La flecha que pinta el navegador no es la misma en Windows, en Mac y en
   Android: un triángulo relleno aquí, un doble galón allá, y siempre en el gris
   del sistema. Era el único trozo del formulario que no decidía nadie.

   Se apaga con appearance: none y se dibuja la nuestra, en el azul de la casa y
   con el trazo redondeado. Va como imagen de fondo y no como pseudoelemento
   porque un <select> no admite ::after; y como fondo hay que reservarle sitio
   con relleno a la derecha, o el nombre de un país largo le pasa por debajo.

   La imagen se declara con propiedades sueltas y no con el atajo background:
   el atajo reiniciaría el color de fondo que se fija ahí arriba.
   -------------------------------------------------------------------------- */

.frm-fluent-form select.ff-el-form-control {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;

  padding-right: 42px;

  /* DE MANITA, no de flecha de texto. Un desplegable no se escribe, se elige, y
     el puntero es lo primero que lo dice —antes de leer la etiqueta y antes de
     hacer clic—. El navegador le pone por defecto la flecha normal. */
  cursor: pointer;

  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.75 6 6.25 11 1.75' fill='none' stroke='%23254961' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 15px center;
  background-size: 12px 8px;
}

/* AL PASAR EL RATÓN Y AL ENFOCAR, EL GALÓN SE PONE ROJO.

   El filo ya se marcaba —lo hacen todos los campos—, pero en un desplegable eso
   se queda corto: lo que se va a pulsar es la flecha, y era lo único que no se
   enteraba. En rojo se usa el mismo idioma que el resto del sitio, donde el rojo
   es siempre la señal de «esto responde»: el círculo de las vías de contacto, el
   botón de enviar.

   Es el acento OSCURECIDO, el mismo de los asteriscos de obligatorio, no el rojo
   puro: sobre blanco, el acento tal cual se queda corto de contraste para un
   trazo tan fino.

   SE REPITE EL DIBUJO ENTERO, con el color dentro. Una imagen de fondo no puede
   tomar el color de una variable: el color va escrito dentro del SVG. La
   alternativa —enmascarar— pintaría el <select> entero, no solo la flecha.

   :focus-visible y no :focus: quien llega con el teclado ve el galón rojo además
   del halo; quien acaba de hacer clic no necesita que le confirmen dónde pulsó. */
.frm-fluent-form select.ff-el-form-control:hover,
.frm-fluent-form select.ff-el-form-control:focus-visible {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.75 6 6.25 11 1.75' fill='none' stroke='%23a03836' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

/* Mientras no se ha elegido nada, el desplegable enseña un texto que NO es una
   respuesta —«— Elija un servicio —»— y lo enseñaba en negro, con el mismo
   aspecto que un campo ya contestado. En gris, el mismo de los textos de ejemplo
   de las cajas de texto, se lee como lo que es: un hueco por rellenar.

   :has() no llega a navegadores viejos; allí el texto sale en negro, que es
   exactamente como estaba antes: no se rompe nada, solo no mejora.

   Las opciones recuperan el color del texto: en Windows heredan el del <select>
   y sin esto la lista desplegada saldría entera en gris. */
.frm-fluent-form select.ff-el-form-control:has(option[value=""]:checked) {
  color: #8a8a8a;
}

.frm-fluent-form select.ff-el-form-control option {
  color: var(--color-text);
}

/* El foco tiene que verse SIN depender solo del color: borde más oscuro y un
   halo, para quien no distinga bien el azul del gris. */
.frm-fluent-form input:focus,
.frm-fluent-form textarea.ff-el-form-control:focus,
.frm-fluent-form select.ff-el-form-control:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(37, 73, 97, 0.18);
  outline: 0;
}

.frm-fluent-form ::placeholder {
  color: #8a8a8a;
  opacity: 1;
}

/* --------------------------------------------------------------------------
   Casillas y opciones
   --------------------------------------------------------------------------
   Once motivos seguidos sin aire entre ellos se leen como un párrafo con
   recuadros. Cada opción necesita su renglón y su separación, y la casilla
   alineada con la PRIMERA línea del texto, no centrada: las hay de dos líneas.
   -------------------------------------------------------------------------- */

.frm-fluent-form .ff-el-form-check {
  margin-bottom: 12px;
}

.frm-fluent-form .ff-el-form-check-label {
  display: flex;
  align-items: flex-start;
  gap: 12px;

  font-size: 0.9375rem;
  line-height: 1.5;
  color: var(--color-text);
  cursor: pointer;
}

.frm-fluent-form .ff-el-form-check input[type="checkbox"],
.frm-fluent-form .ff-el-form-check input[type="radio"] {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  margin: 3px 0 0;

  /* accent-color pinta la marca con el color del sitio sin tener que dibujar
     la casilla a mano, que es lo que rompe el comportamiento nativo. */
  accent-color: var(--color-primary);
  cursor: pointer;
}

.frm-fluent-form .ff-el-form-check input:focus-visible {
  outline: 3px solid var(--color-primary);
  outline-offset: 2px;
}

/* --------------------------------------------------------------------------
   Adjuntar un archivo
   --------------------------------------------------------------------------
   El botón de subir NO es el botón principal. Aquí la acción que importa es
   enviar la candidatura, y esa es la roja. Adjuntar es un paso previo, así que
   va en secundario: contorno azul sobre fondo claro. Dos botones rellenos en la
   misma pantalla se disputarían la atención.
   -------------------------------------------------------------------------- */

.frm-fluent-form .ff_upload_btn.ff-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 26px;

  background-color: var(--color-bg);
  color: var(--color-primary);

  font-family: var(--font-primary);
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: 0.03em;

  border: 1px solid var(--color-primary);
  border-radius: 3px;
  box-shadow: none;
  cursor: pointer;

  transition: background-color 0.2s ease, color 0.2s ease;
}

.frm-fluent-form .ff_upload_btn.ff-btn:hover,
.frm-fluent-form .ff_upload_btn.ff-btn:focus-visible {
  background-color: var(--color-primary);
  color: var(--color-bg);
}

/* El campo real está oculto para lectores de pantalla, así que el foco hay que
   pintarlo sobre el falso botón o quien va con el teclado no ve dónde está. */
.frm-fluent-form input[type="file"]:focus-visible + .ff_upload_btn,
.frm-fluent-form .ff_upload_btn:focus-visible {
  outline: 3px solid var(--color-primary);
  outline-offset: 3px;
}

/* El archivo ya adjuntado: la barra de progreso venía en el azul del plugin,
   que no es ninguno de los del sitio. */
.frm-fluent-form .ff-uploaded-list .ff-upload-preview {
  margin-top: 12px;
}

.frm-fluent-form .ff-el-progress-bar {
  background-color: var(--color-primary);
}

/* --------------------------------------------------------------------------
   Aviso legal dentro del formulario
   --------------------------------------------------------------------------
   Es la letra pequeña de siempre: se consulta, no se lee seguida. Al mismo
   tamaño que los campos competiría con lo que hay que rellenar. Mismo criterio
   que .gt-legal-note en prose.css, pero aquí el bloque lo pinta el plugin, así
   que la clase va escrita en su campo de HTML.
   -------------------------------------------------------------------------- */

.gt-form-legal {
  font-size: 0.8125rem;
  line-height: 1.6;
  color: #4a4a4a;
}

/* EL TAMAÑO VA SOBRE EL PÁRRAFO, no solo sobre el envoltorio. El tema padre fija
   `p { font-size: 18px }` con un selector de tipo, y eso gana a lo que el
   párrafo heredaría de su contenedor. En /empleo/ no se notaba porque allí el
   formulario vive dentro de .gt-prose, que ya corrige el tamaño de los <p>; en
   /contacto/ no hay prosa y la nota legal salía a tamaño de cuerpo. */
.gt-form-legal p {
  margin: 0 0 10px;
  font-size: 0.8125rem;

  /* Y EL COLOR TAMBIÉN VA AQUÍ, por lo mismo. Estaba declarado solo en el
     envoltorio, y el gris nunca llegó: el párrafo salía en el negro del padre,
     el mismo de la frase de la casilla. Sin ese gris la nota y la casilla se
     ven como el mismo tipo de texto en dos tamaños, que es lo que hacía que la
     diferencia de tamaño pareciera un descuido en vez de una jerarquía. */
  color: #4a4a4a;

  /* Trece píxeles piden más renglón que dieciséis: la línea es más corta en
     altura y la mancha se cierra. */
  line-height: 1.7;
}

.gt-form-legal p:last-child {
  margin-bottom: 0;
}

.gt-form-legal a {
  color: var(--color-primary);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* --------------------------------------------------------------------------
   Condiciones
   -------------------------------------------------------------------------- */

/* La casilla de condiciones NO viene maquetada como las demás: el plugin la
   monta como una TABLA —`display: table-row` en la etiqueta y `table-cell` en
   la casilla y en el texto—, y dentro de una tabla `gap` no existe y la
   alineación depende de contra qué mide cada celda.

   Se intentó seguirle el juego con `vertical-align: middle` en las dos celdas,
   y de ahí no salía: la casilla quedaba dos píxeles por debajo de la frase, los
   justos para verse torcido sin saber qué mirar. Al quitarle el relleno que el
   plugin le fuerza, se iba dos píxeles por el otro lado.

   Así que se deshace la tabla y se monta como lo que es: una casilla al lado de
   una frase. Con flex el hueco es `gap` y la alineación no depende de nadie.

   VA ALINEADA CON LA PRIMERA LÍNEA, no con el centro del bloque: en un teléfono
   la frase ocupa dos renglones, y una casilla centrada contra dos renglones se
   queda flotando en medio. Alineada con la primera línea vale para uno y para
   tres, y cuando solo hay una el resultado ES el centrado que se pedía.

   El desplazamiento es la mitad de lo que le sobra al renglón sobre la casilla,
   y la cuenta la hace el navegador: si algún día cambia el tamaño de la letra,
   sigue valiendo sin tocar nada. */
.frm-fluent-form .ff-el-group .ff-el-tc label.ff_tc_label {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}

/* EL !important NO ES PEREZA: es el único modo de responder a otro. El plugin
   escribe `.fluentform .ff-el-tc label.ff_tc_label > span` con
   `padding-top: 8px !important`, y a una declaración marcada no se le gana con
   una normal por muchos selectores que se le pongan: solo otra marcada, y
   además con más peso —cuatro clases frente a sus tres—.

   `flex: none` para que la casilla no se estreche cuando la frase es larga: un
   cuadrito de 14px en vez de 18 no se ve como un error, se ve como otra cosa. */
.frm-fluent-form .ff-el-group .ff-el-tc label.ff_tc_label > span.ff_tc_checkbox {
  display: block;
  flex: none;
  padding: 0 !important;
}

.frm-fluent-form .ff-el-group .ff-el-tc label.ff_tc_label > div.ff_t_c {
  display: block;
  padding: 0;
}

.frm-fluent-form .ff-el-tc input[type="checkbox"] {
  display: block;

  /* SIN EL EMPUJÓN DEL PLUGIN. Fluent Forms sube dos píxeles TODAS sus casillas
     con `.fluentform .ff-el-form-check-label .ff-el-form-check-input {
     position: relative; top: -2px }`, pensando en una casilla metida dentro de
     una línea de texto. Aquí la casilla ya no va dentro de una línea: va en su
     sitio, medido contra el renglón de al lado. Los dos píxeles solo servían
     para descuadrarla, y eran los que quedaban después de arreglar el resto.

     Se desactiva SOLO en esta casilla, no en las de las listas de opciones: allí
     el empujón sí encaja con cómo están montadas. */
  position: static;
  width: 18px;
  height: 18px;

  /* 1.5em es la altura de renglón del texto de al lado: la mitad de lo que le
     sobra sobre la casilla es lo que hay que bajarla para que coincidan. */
  margin: calc((1.5em - 18px) / 2) 0 0;
  accent-color: var(--color-primary);
  cursor: pointer;
}

/* SIN RECUADRO. Se probó con fondo propio y no funciona: dentro del panel gris
   del formulario, un rectángulo de color parece un campo donde escribir, y esto
   no es un campo, es una casilla con un texto más largo que las otras. Lo que la
   distingue es lo que dice, no una caja. */
.frm-fluent-form .ff-el-tc {
  padding: 4px 0;
}

/* Un poco más de aire ENTRE la casilla y el botón que entre la nota y la
   casilla. Los tres van seguidos, pero no dicen lo mismo: los dos primeros
   explican y piden permiso, el tercero envía. El hueco es lo que separa leer de
   actuar. */
.frm-fluent-form .ff-el-group:not(.ff-custom_html):has(.ff-el-tc) {
  margin-bottom: 28px;
}

.frm-fluent-form .ff-el-tc p {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.5;
  color: var(--color-text);
}

.frm-fluent-form .ff-el-tc a {
  color: var(--color-primary);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* --------------------------------------------------------------------------
   Botón de envío — el mismo que el resto del sitio
   -------------------------------------------------------------------------- */

.frm-fluent-form .ff-btn-submit {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 15px 34px;

  /* EL COLOR NO SE PONE AQUÍ. El plugin lo inyecta con un selector de ID
     —#fluentform_3 .ff-btn-submit—, que gana a cualquier clase. Declararlo
     también aquí serían dos fuentes para lo mismo y la de aquí no se aplicaría
     nunca: da la falsa impresión de que se controla desde el tema. El color
     está en el propio formulario, en Fluent Forms. */

  font-family: var(--font-primary);
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: 0.04em;

  border: 0;
  border-radius: 3px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.22);
  cursor: pointer;

  transition: background-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}

.frm-fluent-form .ff-btn-submit:hover,
.frm-fluent-form .ff-btn-submit:focus-visible {
  transform: translateY(-2px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.26);
}

.frm-fluent-form .ff-btn-submit:focus-visible {
  outline: 3px solid var(--color-primary);
  outline-offset: 3px;
}

/* EN MÓVIL, DE LADO A LADO. En una pantalla estrecha el botón es el final de un
   recorrido largo y se pulsa con el pulgar, muchas veces a una mano: a todo lo
   ancho no hay que apuntar. En escritorio se queda de su tamaño, porque un botón
   de 600px de ancho no parece un botón. */
@media (max-width: 767px) {

  .frm-fluent-form .ff-btn-submit {
    width: 100%;
    justify-content: center;
  }

}

/* --------------------------------------------------------------------------
   Errores y confirmación
   -------------------------------------------------------------------------- */

.frm-fluent-form .error-text,
.frm-fluent-form .text-danger {
  margin-top: 6px;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--gt-required);
}

.frm-fluent-form .ff-el-is-error input,
.frm-fluent-form .ff-el-is-error textarea {
  border-color: var(--gt-required);
}

.ff-message-success {
  padding: 20px 22px;
  background-color: var(--color-bg-alt);
  border-left: 4px solid var(--color-primary);
  border-radius: 3px;
  font-size: 1rem;
  line-height: 1.6;
}

@media (prefers-reduced-motion: reduce) {

  /* LOS SELECTORES SE REPITEN ENTEROS. Quien pide no ver movimiento tiene que
     ganarle a la regla que lo declara, y esa regla es la de arriba, la de los
     cinco :not(). Con `.frm-fluent-form input` a secas esto perdía y la
     transición seguía corriendo para quien había pedido que no. */
  .frm-fluent-form input:not([type="submit"]):not([type="radio"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]),
  .frm-fluent-form textarea.ff-el-form-control,
  .frm-fluent-form select.ff-el-form-control,
  .frm-fluent-form .ff-btn-submit {
    transition: none;
  }

  .frm-fluent-form .ff-btn-submit:hover,
  .frm-fluent-form .ff-btn-submit:focus-visible {
    transform: none;
  }

}
