/* ============================================================
   Frank Motor Show look & feel para Pretix (Ticketrona)
   Pegar en: Configuración del evento → Apariencia / Display
              → "CSS personalizado" (Custom CSS)
   Referencia: https://frankmotorshow.com/
   Página objetivo:
   https://tickets.ticketrona.com/organizacion1/test-redsys-1/

   Grafito y rojo, titulares en Oswald cursiva y mayúsculas, tarjetas
   cuadradas con el filo rojo de las fotos de la web. Misma estructura
   que dice-pretix.css; la portada a dos columnas va aparte, en
   frankmotorshow-pretix-2col.css.
   ============================================================ */

/* La tipografía (Oswald, SIL OFL) va incrustada aquí mismo, en base64.
   NO se puede cargar de Google Fonts: la CSP de eventspro.ticketrona.com
   sólo admite fuentes propias o incrustadas (font-src 'self' data:) y un
   @import se bloquea en silencio. Es un único peso, 500, recortado al
   alfabeto latino (themes/fonts/oswald-500-latin.woff2), hecho con
   fontTools: varLib.instancer wght=500 + pyftsubset --flavor=woff2. */
@font-face {
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url(data:font/woff2;base64,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) format('woff2');
}

:root {
    --fm-bg:            #23232b;
    --fm-bg-deep:       #18181d;
    --fm-surface:       #2d3139;
    --fm-surface-2:     #1f2127;
    --fm-surface-hover: #343944;
    --fm-border:        rgba(255, 255, 255, 0.18);
    --fm-border-soft:   rgba(255, 255, 255, 0.08);
    --fm-text:          #ffffff;
    --fm-heading:       #efefef;
    --fm-text-muted:    rgba(255, 255, 255, 0.78);
    --fm-text-dim:      rgba(255, 255, 255, 0.5);
    --fm-red:           #ec0715;
    --fm-red-hover:     #ff2b38;
    --fm-red-soft:      rgba(236, 7, 21, 0.14);
    --fm-radius:        4px;
    --fm-radius-btn:    3px;
    --fm-font:          Helvetica, Arial, sans-serif;
    /* La web usa Anton, pero Anton sólo tiene un peso y en mayúsculas
       resulta demasiado cargada. Oswald es la misma letra condensada,
       más ligera; se incrusta un único peso, 500, para no engordar el
       CSS. La cursiva la sintetiza el navegador, igual que en la web. */
    --fm-display:       'Oswald', 'Arial Narrow', sans-serif;

    /* Miniatura del evento durante la compra. */
    --fm-logo-checkout: 160px;

    /* ---- Halo de la portada -------------------------------------
       La portada de frankmotorshow.com es una foto a todo ancho,
       oscurecida. Aquí se repite el arte del evento de fondo, ampliado
       y desenfocado, fundiéndose al grafito. Pretix sólo pinta la
       imagen una vez y el CSS no puede leer el src de un <img>, así que
       la URL va aquí a mano: es la misma imagen que has subido al
       evento (clic derecho sobre la portada → "Copiar dirección de la
       imagen").

           --fm-hero-image: url("https://tickets.…/logo.png");

       Si se deja en `none`, la portada mantiene un halo rojo tenue y el
       resto del tema no cambia. */
    --fm-hero-image:    none;
    --fm-hero-height:   720px;
}

/* ---------- Base ---------- */
html,
body {
    /* `clip` (y no `hidden`) recorta el halo ampliado sin crear un
       contenedor de scroll, que rompería las columnas pegajosas. */
    overflow-x: clip;
    background-color: var(--fm-bg) !important;
    color: var(--fm-text) !important;
    font-family: var(--fm-font) !important;
    font-weight: 400;
    -webkit-font-smoothing: antialiased;
}

/* Halo neutro: lo que se ve cuando no se ha puesto la imagen del
   evento en --fm-hero-image. Con imagen queda por debajo de ella. */
body {
    position: relative;
    background-image: radial-gradient(110% 55% at 50% 0%,
                                      rgba(236, 7, 21, 0.12) 0%,
                                      rgba(236, 7, 21, 0.04) 40%,
                                      transparent 72%) !important;
    background-repeat: no-repeat !important;
    background-attachment: scroll !important;
}

body::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: var(--fm-hero-height);
    z-index: 0;
    pointer-events: none;
    background-image: var(--fm-hero-image);
    background-size: cover;
    background-position: center top;
    background-repeat: no-repeat;
    opacity: 0.35;
    filter: blur(16px) saturate(1.1);
    /* la escala esconde el borde blando que deja el desenfoque */
    transform: scale(1.08);
    transform-origin: top center;
    -webkit-mask-image: linear-gradient(to bottom,
                        #000 0%, #000 35%,
                        rgba(0, 0, 0, 0.75) 55%,
                        rgba(0, 0, 0, 0.35) 75%,
                        transparent 100%);
            mask-image: linear-gradient(to bottom,
                        #000 0%, #000 35%,
                        rgba(0, 0, 0, 0.75) 55%,
                        rgba(0, 0, 0, 0.35) 75%,
                        transparent 100%);
}

a {
    color: var(--fm-text);
}

a:hover,
a:focus {
    color: var(--fm-red);
    text-decoration: none;
}

h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
    font-family: var(--fm-display);
    color: var(--fm-heading);
    font-weight: 500;
    letter-spacing: 0.02em;
}

h1, .h1 { font-size: 52px; line-height: 1; }
h2, .h2 { font-size: 30px; line-height: 1.1; }
h3, .h3 { font-size: 22px; line-height: 1.15; }
h4, .h4 { font-size: 18px; line-height: 1.2; }

p, li { color: var(--fm-text-muted) !important; }
strong, b { color: var(--fm-text); font-weight: 700; }

/* El foco de Pretix se pinta con outline en el color principal del
   evento; lo pasamos al rojo para no arrastrar el color del tema. */
.form-control:focus,
.btn:focus,
.btn:focus-visible,
a:focus-visible {
    outline: 2px solid var(--fm-red) !important;
    outline-offset: 1px;
}

/* ---------- Contenedor principal ---------- */
.container.main-box {
    position: relative;
    z-index: 1;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding-top: 20px;
}

.page-header-links,
.page-header-links-outside {
    background: transparent !important;
    border: none !important;
}

/* ---------- Logo / portada del evento ---------- */
.page-header.pager-header-with-logo {
    background: transparent !important;
    border: none !important;
    padding: 0 !important;
    margin: 0 0 28px 0;
    text-align: center;
}

/* El filo rojo a la derecha de las fotos de frankmotorshow.com. */
.page-header.pager-header-with-logo .event-logo {
    display: block;
    margin: 0 auto;
    border-radius: 0;
    border-right: 4px solid var(--fm-red);
    max-width: 100%;
    height: auto;
    box-shadow: 0 18px 50px rgba(0, 0, 0, 0.45);
}

/* Durante la compra la imagen es sólo una referencia: si se deja a
   todo ancho, un arte cuadrado ocupa la pantalla entera y el
   formulario empieza fuera de la vista. Marca la página el
   <ol class="checkout-flow">, que Pretix pinta en todos los pasos. */
main#content:has(.checkout-flow) .page-header.pager-header-with-logo .event-logo {
    max-width: var(--fm-logo-checkout);
    border-right-width: 3px;
}

/* ---------- Título del evento ----------
   En las fechas de una serie de eventos Pretix no pinta
   h2.content-header sino h2.subevent-head, con el nombre de la fecha. */
h2.content-header,
h2.subevent-head {
    font-family: var(--fm-display);
    font-style: italic;
    font-size: 52px;
    font-weight: 500;
    line-height: 1;
    color: var(--fm-heading);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    padding-bottom: 0;
    margin-top: 28px;
    border-bottom: none;
}

/* Barra roja inclinada bajo el título, como las etiquetas de la web. */
h2.content-header::after,
h2.subevent-head::after {
    content: '';
    display: block;
    width: 72px;
    height: 5px;
    margin-top: 18px;
    background: var(--fm-red);
    transform: skewX(-20deg);
    transform-origin: left;
}

h2.content-header small {
    display: block;
    margin-top: 12px;
    font-family: var(--fm-display);
    color: var(--fm-red);
    font-size: 24px;
    font-weight: 500;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

h2.content-header small time {
    color: var(--fm-red);
}

/* ---------- Alertas (modo prueba) ---------- */
/* Pretix pinta el icono del aviso como una banda de color en ::before,
   pegada al borde izquierdo y a toda la altura. Sin reservarle sitio se
   come las primeras palabras del texto, sobre todo en móvil. */
.alert {
    position: relative;
    border-radius: var(--fm-radius);
    border: 1px solid var(--fm-border-soft);
    padding: 14px 18px 14px 68px;
    overflow: hidden;
}

.alert::before {
    width: 44px !important;
    border-radius: var(--fm-radius) 0 0 var(--fm-radius);
}

.alert-warning::before,
.alert-testmode::before,
.alert-info::before,
.alert-success::before,
.alert-danger::before {
    background-color: var(--fm-red) !important;
    color: #fff !important;
}

.alert-warning,
.alert-testmode {
    background: var(--fm-red-soft) !important;
    border-color: rgba(236, 7, 21, 0.45) !important;
    color: var(--fm-text-muted) !important;
}

.alert-warning strong,
.alert-testmode strong {
    color: var(--fm-text);
}

.alert-success,
.alert-info {
    background: var(--fm-surface) !important;
    border-color: var(--fm-border) !important;
    color: var(--fm-text) !important;
}

.alert-info {
    color: var(--fm-text-muted) !important;
}

.alert-danger {
    background: rgba(236, 7, 21, 0.2) !important;
    border-color: var(--fm-red) !important;
    color: #ffd0d3 !important;
}

/* ---------- Texto general ---------- */
main#content p,
main#content li {
    color: var(--fm-text-muted) !important;
    font-size: 16px;
    line-height: 1.55;
}

main#content strong {
    color: var(--fm-text);
}

.info-row p,
.info-row p strong {
    color: var(--fm-text) !important;
}

/* ---------- Fondos claros de Pretix ----------
   Pretix pinta en blanco (#fff / #f9f9f9 / #f5f5f5) las filas alternas,
   las tablas, los selectores de fecha y varios contenedores. Sobre el
   tema oscuro dejarían franjas blancas con texto blanco encima. */
.alternating-rows .row:nth-child(even),
.alternating-rows .row:nth-child(odd) {
    background-color: transparent !important;
}

.alternating-rows > .row:nth-child(even) {
    background-color: rgba(255, 255, 255, 0.04) !important;
}

.panel-subhead,
.panel-footer,
.cart-row-giftcard,
.profile-pre-select,
.profile-save-container,
.profile-select-container,
.form-order-change-main,
.tick,
pre {
    background: rgba(255, 255, 255, 0.05) !important;
    border-color: var(--fm-border-soft) !important;
    color: var(--fm-text-muted) !important;
}

.checkbox-group-legend > span {
    background: transparent !important;
    color: var(--fm-text) !important;
}

.dropdown-menu {
    background: var(--fm-surface-2) !important;
    border: 1px solid var(--fm-border) !important;
}

.dropdown-menu > li > a {
    color: var(--fm-text) !important;
}

.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
    background: var(--fm-red-soft) !important;
    color: var(--fm-text) !important;
}

.pager li > a,
.pager li > span,
.pagination > li > a,
.pagination > li > span {
    background: transparent !important;
    border-color: var(--fm-border) !important;
    color: var(--fm-text) !important;
}

/* ---------- Tarjetas de entradas (product-row) ---------- */
/* Pretix enmarca la categoría con bordes finos arriba y abajo: con
   tarjetas sobran y el de abajo queda suelto bajo la última entrada. */
section.item-category {
    margin-top: 36px;
    border: none !important;
    box-shadow: none !important;
}

article.product-row::after {
    border: none !important;
    box-shadow: none !important;
}

/* Cabecera de categoría: Anton cursiva con el filo rojo delante, como
   los titulares de sección de la web. */
section.item-category > h3 {
    font-family: var(--fm-display);
    font-style: italic;
    color: var(--fm-heading);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 26px;
    font-weight: 500;
    margin-bottom: 18px;
    padding-left: 14px;
    border-left: 5px solid var(--fm-red);
    opacity: 1;
}

article.product-row {
    background: var(--fm-surface) !important;
    border: none !important;
    border-left: 4px solid transparent !important;
    border-radius: 0;
    padding: 22px 26px !important;
    margin: 0 0 10px 0 !important;
    transition: border-color .15s ease, background .15s ease;
}

article.product-row:hover {
    border-left-color: var(--fm-red) !important;
    background: var(--fm-surface-hover) !important;
}

/* Pretix separa las filas con una línea gris clara en ::before; con
   tarjetas no hace falta y queda suelta sobre el grafito. */
article.product-row::before {
    display: none !important;
}

/* "1× en el carrito" junto al nombre: Pretix lo pinta en verde claro y
   hereda el Anton del nombre. */
article.product-row .textbubble-success {
    display: inline-block;
    margin-top: 6px;
    padding: 3px 9px;
    font-family: var(--fm-font);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--fm-text) !important;
    background: var(--fm-red-soft) !important;
    border: none !important;
    border-left: 3px solid var(--fm-red) !important;
    border-radius: 0;
}

article.product-row .product-description h4 {
    font-family: var(--fm-display);
    color: var(--fm-text);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    font-size: 21px;
    margin: 0 0 6px 0;
}

article.product-row .product-description {
    color: var(--fm-text-muted);
}

article.product-row .price {
    color: var(--fm-text);
    text-align: right;
}

article.product-row .price p {
    margin: 0;
    font-family: var(--fm-display);
    font-size: 24px;
    font-weight: 500;
    letter-spacing: 0.02em;
    color: var(--fm-text) !important;
}

article.product-row .price p small,
article.product-row .price small {
    font-family: var(--fm-font);
    font-size: 12px;
    color: var(--fm-text-dim) !important;
}

/* ---------- Selector de cantidad (-, input, +) ---------- */
.availability-box {
    text-align: right;
    display: flex;
    justify-content: flex-end;
    align-items: center;
}

.input-item-count-group {
    display: inline-flex;
    align-items: center;
    border: 1px solid var(--fm-border);
    border-radius: var(--fm-radius-btn);
    overflow: hidden;
    background: var(--fm-surface-2);
    max-width: 100%;
    flex-wrap: nowrap;
}

.input-item-count-group .btn,
.input-item-count-dec,
.input-item-count-inc {
    background: transparent !important;
    color: var(--fm-text) !important;
    border: none !important;
    border-radius: 0 !important;
    /* Pretix les pone un filo gris con box-shadow inset. */
    box-shadow: none !important;
    padding: 7px 11px !important;
    min-width: 34px;
    font-family: var(--fm-font);
    font-style: normal;
    font-weight: 700;
    font-size: 15px;
    line-height: 1;
    letter-spacing: 0;
    flex: 0 0 auto;
}

.input-item-count-group .btn:hover {
    background: var(--fm-red) !important;
    color: #fff !important;
}

.input-item-count {
    background: transparent !important;
    color: var(--fm-text) !important;
    border: none !important;
    border-left: 1px solid var(--fm-border) !important;
    border-right: 1px solid var(--fm-border) !important;
    box-shadow: none !important;
    text-align: center;
    width: 44px !important;
    min-width: 0;
    /* Este campo va dentro de la cápsula de -/+ y manda su alto, así que
       se queda fuera del mínimo de 44px del resto de campos. */
    min-height: 0;
    padding: 7px 0 !important;
    font-weight: 700;
    font-size: 15px;
    flex: 0 1 auto;
}

/* En desktop la columna .col-md-2 es muy estrecha; ampliamos un poco la
   columna de cantidad sacándolo de la columna de precio. */
@media (min-width: 992px) {
    article.product-row .col-md-8 { width: 58.333%; }
    article.product-row .col-md-2.price { width: 16.666%; }
    article.product-row .col-md-2.availability-box { width: 25%; }
}

/* ---------- Botones ----------
   En la web los botones secundarios son rectángulos grafito de 3px de
   radio en mayúsculas ("VER EVENTO"), que al pasar el ratón se
   oscurecen y el texto pasa a rojo. La llamada a la acción principal
   ("Comprar Entradas") va en Anton cursiva: aquí, además, en rojo. */
.btn {
    font-family: var(--fm-font);
    border-radius: var(--fm-radius-btn);
    font-weight: 400;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    padding: 11px 22px;
    font-size: 14px;
    transition: background .15s, color .15s, border-color .15s, transform .1s;
}

.btn-lg {
    padding: 15px 30px !important;
    font-size: 15px !important;
}

.btn:active {
    transform: translateY(1px);
}

.btn-primary,
.btn-primary:focus,
.btn-success,
#btn-add-to-cart {
    font-family: var(--fm-display);
    font-style: italic;
    font-size: 17px;
    font-weight: 500;
    letter-spacing: 0.08em;
    background: var(--fm-red) !important;
    border: 2px solid var(--fm-red) !important;
    color: #fff !important;
    box-shadow: 0 8px 22px rgba(236, 7, 21, 0.25);
}

.btn-primary.btn-lg,
.btn-success.btn-lg,
#btn-add-to-cart.btn-lg {
    font-size: 20px !important;
    padding: 13px 34px !important;
}

.btn-primary:hover,
.btn-success:hover,
#btn-add-to-cart:hover {
    background: var(--fm-red-hover) !important;
    border-color: var(--fm-red-hover) !important;
    color: #fff !important;
}

/* Los iconos van en rojo en todo el tema; dentro de un botón rojo
   desaparecerían. */
.btn-primary .fa,
.btn-success .fa,
#btn-add-to-cart .fa {
    color: inherit;
}

.btn-default {
    background: var(--fm-surface) !important;
    border: 1px solid var(--fm-border) !important;
    color: var(--fm-text) !important;
}

.btn-default:hover,
.btn-default:focus {
    background: #303030 !important;
    border-color: var(--fm-red) !important;
    color: var(--fm-red) !important;
}

.btn-link {
    color: var(--fm-text-muted) !important;
}

.btn-link:hover {
    color: var(--fm-red) !important;
}

/* ---------- Inputs ---------- */
.form-control {
    background: var(--fm-surface-2) !important;
    border: 1px solid var(--fm-border) !important;
    color: var(--fm-text) !important;
    border-radius: var(--fm-radius-btn);
    box-shadow: none !important;
    padding: 12px 14px;
    font-size: 15px;
    /* Bootstrap fija `height: 34px` en los campos. Con este relleno un
       <select> (el prefijo de país del teléfono) recortaría la línea.
       La altura la marca el contenido. */
    height: auto;
    min-height: 44px;
}

.form-control:focus {
    border-color: var(--fm-red) !important;
    box-shadow: 0 0 0 3px rgba(236, 7, 21, 0.22) !important;
    background: var(--fm-surface-2) !important;
}

.form-control::placeholder {
    color: var(--fm-text-dim);
}

select.form-control,
textarea.form-control {
    background: var(--fm-surface-2) !important;
    color: var(--fm-text) !important;
}

select.form-control option {
    background: var(--fm-surface-2);
    color: var(--fm-text);
}

textarea.form-control {
    min-height: 88px;
}

/* Prefijo de un campo compuesto (el icono del vale de compra, por
   ejemplo). Bootstrap lo deja en gris claro. */
.input-group-addon {
    background: var(--fm-surface);
    border: 1px solid var(--fm-border);
    color: var(--fm-text-muted);
    border-radius: var(--fm-radius-btn) 0 0 var(--fm-radius-btn);
}

.input-group .form-control:not(:first-child) {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

.input-group .form-control:not(:last-child) {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

input[type="checkbox"],
input[type="radio"] {
    accent-color: var(--fm-red);
}

/* ---------- Bloque "Si ya ha pedido una entrada" ---------- */
aside.front-page {
    background: var(--fm-surface) !important;
    border: none;
    border-top: 3px solid var(--fm-red);
    border-radius: 0;
    padding: 26px;
    margin-top: 40px;
}

aside.front-page h2,
aside.front-page h3,
aside.front-page .h3 {
    font-family: var(--fm-display);
    font-style: italic;
    color: var(--fm-heading);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 22px;
    margin-top: 0;
}

aside.front-page p {
    color: var(--fm-text-muted) !important;
}

/* ---------- Lista de fechas ("Ver otra fecha") ----------
   En una serie de eventos, cada fecha es un article.row con nombre,
   día y hora, disponibilidad y botón. */
.event-list > article.row {
    margin: 0;
    padding: 12px 0;
    border: none !important;
    border-top: 1px solid var(--fm-border-soft) !important;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
}

.event-list > article.row:first-child {
    border-top: none !important;
}

/* Pretix separa las filas con una línea gris clara, como en las
   entradas. */
.event-list > article.row::before,
.event-list > article.row::after {
    display: none !important;
}

.event-list > article.row h3 {
    margin: 0;
    font-size: 18px;
}

.event-list > article.row h3 a {
    color: var(--fm-text);
    text-decoration: none;
}

.event-list > article.row h3 a:hover {
    color: var(--fm-red);
}

.event-list > article.row p {
    margin: 0;
    font-size: 14px !important;
}

/* En la columna de la portada a dos columnas el reparto de Bootstrap
   (4/3/3/2) deja el botón en unos 85px y "ENTRADAS" no cabe: se le da
   algo más de sitio a costa del nombre. */
@media (min-width: 992px) {
    .event-list > article.row > .col-md-4 { width: 34%; }
    .event-list > article.row > .col-md-3 { width: 24%; }
    .event-list > article.row > .col-md-2 { width: 18%; }
}

.event-list .textbubble-success {
    color: var(--fm-text) !important;
    background: var(--fm-red-soft) !important;
    border: none !important;
    border-left: 3px solid var(--fm-red) !important;
    border-radius: 0;
    padding: 2px 8px;
}

/* El icono del ticket haría saltar "ENTRADAS" a una segunda línea en
   una columna tan estrecha; el botón ya se entiende sin él. */
.event-list .btn-block {
    font-size: 15px !important;
    letter-spacing: 0.04em;
    padding: 8px 6px !important;
    white-space: nowrap;
}

.event-list .btn-block .fa {
    display: none;
}

/* ---------- Footer ---------- */
footer {
    margin-top: 60px;
    padding-top: 24px;
    border-top: 1px solid var(--fm-border-soft);
    color: var(--fm-text-dim);
}

footer nav ul {
    list-style: none;
    padding: 0;
    text-align: center;
}

footer nav ul li {
    display: inline-block;
    margin: 0 12px;
}

footer p,
footer li {
    color: var(--fm-text-dim) !important;
}

footer a {
    color: var(--fm-text-dim) !important;
    font-size: 13px;
}

footer a:hover {
    color: var(--fm-red) !important;
}

/* ---------- Modales ---------- */
.modal-card,
.modal-content {
    background: var(--fm-surface) !important;
    color: var(--fm-text) !important;
    border-radius: var(--fm-radius) !important;
    border: none !important;
    border-top: 3px solid var(--fm-red) !important;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.7) !important;
}

.modal-card-icon .fa {
    color: var(--fm-red);
}

.modal-card-title,
.modal-card-content h2,
.modal-card-content h3 {
    color: var(--fm-heading);
}

.modal-card-description,
.modal-card-content p {
    color: var(--fm-text-muted) !important;
}

.fa,
.info-row-icon {
    color: var(--fm-red);
}

/* ============================================================
   CHECKOUT (questions / payment / confirm)
   ============================================================ */

/* ---------- Wizard ---------- */
.checkout-flow {
    display: flex;
    justify-content: space-between;
    list-style: none;
    padding: 0;
    margin: 24px 0 36px 0;
    position: relative;
}

.checkout-step {
    position: relative;
    z-index: 1;
    flex: 1;
    text-align: center;
    color: var(--fm-text-dim);
}

.checkout-step-icon {
    width: 36px !important;
    height: 36px !important;
    line-height: 32px !important;
    border-radius: 50% !important;
    background: var(--fm-bg) !important;
    border: 2px solid var(--fm-border) !important;
    color: var(--fm-text-dim) !important;
    margin: 0 auto 8px auto;
    display: inline-block;
    text-align: center;
    font-size: 14px;
}

.checkout-step.step-current .checkout-step-icon,
.checkout-step.step-done .checkout-step-icon {
    background: var(--fm-red) !important;
    border-color: var(--fm-red) !important;
    color: #fff !important;
}

.checkout-step.step-current .checkout-step-icon .fa,
.checkout-step.step-done .checkout-step-icon .fa {
    color: #fff;
}

/* Pretix une los pasos con dos barras teñidas con el color principal
   del evento. Las adelgazamos y las pasamos al rojo. */
.checkout-step::before,
.checkout-step::after {
    height: 2px !important;
    top: 18px !important;
    background: var(--fm-border-soft) !important;
}

.checkout-step.step-done::before,
.checkout-step.step-done::after,
.checkout-step.step-current::before {
    background: var(--fm-red) !important;
}

.checkout-step-label {
    color: var(--fm-text-dim) !important;
    font-size: 11px;
    line-height: 1.3;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.checkout-step.step-current .checkout-step-label,
.checkout-step.step-done .checkout-step-label {
    color: var(--fm-text) !important;
    font-weight: 700;
}

/* ---------- Paneles ---------- */
.panel,
.panel-default {
    background: var(--fm-surface) !important;
    border: none !important;
    border-radius: var(--fm-radius) !important;
    box-shadow: none !important;
    color: var(--fm-text);
    margin-bottom: 16px;
    overflow: hidden;
}

.panel-heading,
summary.panel-heading {
    background: rgba(0, 0, 0, 0.18) !important;
    border-bottom: 1px solid var(--fm-border-soft) !important;
    border-left: 4px solid var(--fm-red) !important;
    color: var(--fm-text) !important;
    padding: 15px 20px 15px 16px !important;
    cursor: pointer;
    list-style: none;
}

/* Pretix ya dibuja su propio chevron en summary.panel-heading: sólo se
   esconde el marcador nativo del navegador. */
summary.panel-heading::-webkit-details-marker {
    display: none;
}

.panel-title,
.panel-heading h2,
.panel-heading h3,
.panel-heading h4 {
    font-family: var(--fm-display);
    font-style: italic;
    color: var(--fm-heading);
    font-size: 19px;
    font-weight: 500;
    margin: 0;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    /* A la izquierda, no repartidos: en los métodos de pago el radio y
       el nombre son hijos del título y con space-between el nombre se
       iba al otro extremo. Lo que va a la derecha (temporizador del
       carrito, "Modificar") se empuja con margin-left: auto. */
    display: flex;
    justify-content: flex-start;
    align-items: center;
    gap: 10px;
}

/* El carrito sí va repartido: título a la izquierda y temporizador a
   la derecha. En el checkout el temporizador no es hijo directo del
   título, así que un margin-left: auto no bastaría. */
details.cart .panel-title {
    justify-content: space-between;
}

.panel-title .fa,
.panel-title i {
    color: var(--fm-red);
    margin-right: 8px;
}

/* El enlace "Modificar" de los resúmenes de cada paso. */
.panel-title a,
.panel-title .h6 {
    font-family: var(--fm-font);
    font-style: normal;
    font-size: 12px;
    font-weight: 400;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--fm-text-dim) !important;
    margin-left: auto;
}

.panel-title a:hover {
    color: var(--fm-red) !important;
}

.panel-title a .fa {
    margin-right: 4px;
    color: inherit;
}

.panel-body {
    background: transparent !important;
    color: var(--fm-text) !important;
    padding: 20px !important;
}

/* ---------- Carrito ---------- */
details.panel.cart {
    background: var(--fm-surface) !important;
}

#cart-deadline-short {
    color: var(--fm-red);
    font-variant-numeric: tabular-nums;
    font-weight: 700;
}

#cart-deadline {
    color: var(--fm-text-dim);
    font-size: 13px;
    margin: 12px 0 6px 0;
}

#cart-extend-form.text-muted {
    color: var(--fm-text-dim) !important;
}

.inline-dialog {
    background: var(--fm-surface) !important;
    color: var(--fm-text) !important;
    border: 1px solid var(--fm-border-soft) !important;
    border-radius: var(--fm-radius) !important;
}

.cart-row {
    color: var(--fm-text);
    padding: 10px 0;
    border-bottom: 1px solid var(--fm-border-soft);
}

.cart-row.total {
    border-top: 1px solid var(--fm-border);
    border-bottom: none;
    margin-top: 8px;
    padding-top: 14px;
    font-size: 16px;
}

.cart-row.total strong {
    font-family: var(--fm-display);
    font-size: 20px;
    font-weight: 500;
    letter-spacing: 0.03em;
}

.cart-row .product strong,
.cart-row .totalprice strong,
.cart-row .singleprice {
    color: var(--fm-text);
}

.cart-row .text-muted {
    color: var(--fm-text-dim) !important;
}

/* Cantidad de una línea del carrito: quitar/poner una entrada con el
   número en medio. Heredarían el relleno de `.btn` y el "+" se caería a
   la línea de abajo. Aquí van como iconos. */
.cart-row .count {
    white-space: nowrap;
}

.cart-row .count form {
    display: inline-block;
}

.cart-row .count .btn {
    padding: 4px 8px;
    min-width: 0;
    letter-spacing: 0;
    font-size: 14px;
    vertical-align: middle;
}

#cart-foldable-container,
.sneak-peek-content {
    background: transparent !important;
}

/* Pretix recorta la vista previa del carrito con una máscara que
   termina en blanco: sobre fondo oscuro deja una franja blanca. */
.sneak-peek-container .sneak-peek-content,
.sneak-peek-content {
    -webkit-mask-image: none !important;
    mask-image: none !important;
}

.sneak-peek-content::before,
.sneak-peek-content::after,
.sneak-peek-container::before,
.sneak-peek-container::after {
    background: transparent !important;
    background-image: none !important;
    display: none !important;
    content: none !important;
}

.sneak-peek-container:not(.details-open) .sneak-peek-content {
    -webkit-mask-image: linear-gradient(to bottom, #000 50%, transparent 100%) !important;
            mask-image: linear-gradient(to bottom, #000 50%, transparent 100%) !important;
}

/* El botón "Mostrar carrito completo" va en absoluto sobre la vista
   previa del carrito: necesita fondo propio o se le transparentan las
   filas por debajo. El degradado arranca en el mismo color del panel
   con alfa 0 —si cambias --fm-surface, cámbialo también aquí— para que
   no aparezca un velo gris. */
.sneak-peek-trigger {
    margin: 0;
    padding: 28px 20px 12px;
    border-top: none;
    background: linear-gradient(to bottom,
                rgba(45, 49, 57, 0) 0%,
                var(--fm-surface) 55%) !important;
}

.sneak-peek-trigger .btn-default {
    width: 100%;
}

/* ---------- Formularios ---------- */
.form-horizontal .control-label,
.control-label,
label {
    color: var(--fm-text) !important;
    font-weight: 700;
    letter-spacing: 0;
    font-size: 14px;
}

/* El <i> del "obligatorio" es display:inline de serie: al partirse en
   dos líneas, la etiqueta se monta sobre el campo. Inclinada como las
   etiquetas rojas de la web. */
.label-required {
    display: inline-block !important;
    width: auto !important;
    vertical-align: middle;
    color: #fff !important;
    background: var(--fm-red);
    font-style: normal;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    margin-left: 8px;
    letter-spacing: 0.08em;
    border-radius: 0;
    padding: 2px 8px;
    transform: skewX(-12deg);
}

.form-group {
    margin-bottom: 20px;
}

.form-group.has-error .form-control {
    border-color: var(--fm-red) !important;
    box-shadow: 0 0 0 3px rgba(236, 7, 21, 0.25) !important;
}

.form-group.has-error .control-label,
.form-group.has-error .help-block {
    color: #ff7a82 !important;
}

.help-block {
    color: var(--fm-text-dim) !important;
    font-size: 12px;
    margin-top: 6px;
}

.help-block p {
    margin: 0;
    color: var(--fm-text-dim) !important;
    font-size: 12px !important;
}

/* ---------- list-group / método de pago ---------- */
.list-group {
    background: transparent !important;
    border-radius: 0 0 var(--fm-radius) var(--fm-radius);
    margin: 0;
    padding: 0;
}

.list-group-item {
    background: transparent !important;
    border: none !important;
    border-top: 1px solid var(--fm-border-soft) !important;
    color: var(--fm-text) !important;
    padding: 16px 20px;
}

.list-group-item:first-child {
    border-top: none !important;
}

.list-group-item h4,
.list-group-item h5 {
    color: var(--fm-heading);
}

.list-group-item p,
.list-group-item .text-center {
    color: var(--fm-text-muted) !important;
}

/* ---------- Botonera del checkout ---------- */
/* Pretix la pinta con `flex-direction: row-reverse` y sin permitir
   saltos de línea: cuando los botones no caben —el carrito de la
   portada con "Vaciar carrito" y "Canjear vale de compra" a la vez— el
   desbordamiento se va hacia la IZQUIERDA y el botón se sale del
   panel. `wrap-reverse` baja los secundarios y deja el principal abajo
   a la derecha. */
.checkout-button-row {
    margin-top: 28px;
    padding-top: 24px;
    border-top: 1px solid var(--fm-border-soft);
    flex-wrap: wrap-reverse;
    align-items: center;
    gap: 12px;
}

.checkout-button-secondary {
    flex-wrap: wrap;
}

.checkout-button-row p {
    margin: 0;
}

/* ---------- Tablas ----------
   Pretix fuerza background-color:#fff!important en td/th del detalle
   del pedido, así que aquí hace falta !important sí o sí. */
table,
.table {
    color: var(--fm-text) !important;
    background: transparent !important;
}

table th,
.table th,
.table > thead > tr > th {
    background-color: transparent !important;
    color: var(--fm-text) !important;
    border-bottom: 1px solid var(--fm-border) !important;
}

table td,
.table td,
.table > tbody > tr > td {
    background-color: transparent !important;
    border-top: 1px solid var(--fm-border-soft) !important;
    color: var(--fm-text-muted) !important;
}

.table-striped > tbody > tr:nth-of-type(odd),
.table-striped > tbody > tr:nth-of-type(odd) > td,
.table-hover > tbody > tr:hover,
.table-hover > tbody > tr:hover > td,
.table > tbody > tr.active > td,
.table > tbody > tr > td.active {
    background-color: rgba(255, 255, 255, 0.04) !important;
}

/* ---------- Plano de butacas (pretix-seating) ----------
   El plano se pinta dentro de un shadow DOM: sólo se puede estilar el
   elemento anfitrión desde el CSS personalizado. */
#seating-plan-area,
.seating-wrapper {
    background: transparent !important;
}

pretix-seating-checkout-button {
    background: var(--fm-surface-2) !important;
    color: var(--fm-text) !important;
    border-radius: var(--fm-radius) !important;
}

/* ---------- Otros ajustes finos ---------- */
hr {
    border-top-color: var(--fm-border-soft);
}

.text-muted {
    color: var(--fm-text-dim) !important;
}

::selection {
    background: var(--fm-red);
    color: #fff;
}

/* ---------- Móvil ---------- */
@media (max-width: 767px) {
    h2.content-header,
    h2.subevent-head {
        font-size: 38px;
    }

    h2.content-header small {
        font-size: 20px;
    }

    section.item-category > h3 {
        font-size: 22px;
    }

    article.product-row {
        padding: 18px 18px !important;
    }
}
/* ============================================================
   Frank Motor Show — complemento: portada a DOS COLUMNAS

   El mismo reparto que dice-pretix-2col.css:

   Izquierda : imagen del evento, pegajosa al hacer scroll.
   Derecha   : título y fecha, debajo la ubicación y los horarios
               (bloques .info-row), el carrito si hay algo dentro, las
               entradas con su botón de compra y, al final, la
               descripción.

   Se pega DESPUÉS de frankmotorshow-pretix.css, en el mismo campo
   "CSS personalizado" del evento. Es independiente: si se quita, el
   tema sigue funcionando con la portada de una columna.

   Sólo actúa en escritorio (≥992px), sólo en la página de entradas
   (usa :has() para detectar que hay productos) y sólo si el evento NO
   tiene plano de butacas: el plano necesita el ancho completo. En
   navegadores sin :has() no se aplica nada y se ve la portada normal.
   ============================================================ */

@media (min-width: 992px) {

    main#content:has(article.product-row):not(:has(.panel-seating)) {
        display: grid;
        /* imagen : contenido — sube el primer valor para dar más
           sitio a la imagen, o el segundo para el contenido */
        grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
        column-gap: 48px;
        row-gap: 0;
        align-items: start;
    }

    /* Columna izquierda por defecto (ahí sólo queda la imagen). */
    main#content:has(article.product-row):not(:has(.panel-seating)) > * {
        grid-column: 1;
        min-width: 0;
    }

    /* La columna derecha va por filas fijas:

           1  título y fecha (h2.subevent-head en las fechas de una serie)
           2  ubicación / fecha y hora (bloques .info-row)
           3  "Ver otra fecha", en las series de eventos
           4  carrito, si hay algo dentro
           5  entradas y botón de compra
           6  párrafo suelto de Pretix (gastos de gestión, etc.)
           7  descripción del evento

       Las filas que no existen en un evento concreto se quedan a cero:
       `row-gap` es 0 y el espaciado lo ponen los márgenes de cada
       bloque. */
    main#content:has(article.product-row):not(:has(.panel-seating)) > h2.content-header,
    main#content:has(article.product-row):not(:has(.panel-seating)) > h2.subevent-head {
        grid-column: 2;
        grid-row: 1;
        text-align: left;
        margin: 0 0 28px 0;
        font-size: 44px;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > div:has(> .info-row) {
        grid-column: 2;
        grid-row: 2;
        margin: 0 0 32px 0;
    }

    /* "Ver otra fecha": el otro <details> hijo de main, además del
       carrito. Sin sitio propio caía a la columna de la imagen. */
    main#content:has(article.product-row):not(:has(.panel-seating)) > details.panel:not(.cart) {
        grid-column: 2;
        grid-row: 3;
        margin: 0 0 24px 0;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > details.cart {
        grid-column: 2;
        grid-row: 4;
        margin: 0 0 24px 0;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > form {
        grid-column: 2;
        grid-row: 5;
        margin: 0;
    }

    /* Párrafo suelto que Pretix añade tras las entradas (los gastos de
       gestión, por ejemplo). */
    main#content:has(article.product-row):not(:has(.panel-seating)) > p {
        grid-column: 2;
        grid-row: 6;
        margin: 20px 0 0 0;
    }

    /* La descripción baja por debajo del botón de compra. Es el <div>
       hijo de main con párrafos propios: el de la ubicación los lleva
       dentro de .info-row, y el aviso de modo de pruebas es .alert. */
    main#content:has(article.product-row):not(:has(.panel-seating)) > div:has(> p):not(.alert):not(:has(.info-row)) {
        grid-column: 2;
        grid-row: 7;
        margin: 40px 0 0 0;
    }

    /* La imagen abarca todas las filas de la columna derecha y acompaña
       al scroll hasta llegar a los bloques finales. Quien se pega es el
       <div> de dentro: Chromium no frena un `position: sticky` en el
       borde de su celda de la retícula, así que la cabecera se estira
       (`align-self: stretch`) hasta el final de sus 51 filas y le hace
       de tope. */
    main#content:has(article.product-row):not(:has(.panel-seating)) > .page-header.pager-header-with-logo {
        grid-row: 1 / span 51;
        align-self: stretch;
        margin: 0 0 24px 0;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > .page-header.pager-header-with-logo > div:not(.clearfix) {
        position: sticky;
        top: 24px;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > .page-header .event-logo {
        width: 100%;
        max-width: 100%;
        height: auto;
    }
    /* Los bloques finales ocupan todo el ancho, cada uno en su fila:
       compartiendo fila se montarían uno encima del otro en los eventos
       que tienen "Canjear vale de compra" y "Si ya ha pedido una
       entrada" a la vez. */
    main#content:has(article.product-row):not(:has(.panel-seating)) > aside.front-page {
        grid-column: 1 / -1;
        margin-top: 40px;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > aside.front-page:nth-of-type(1) {
        grid-row: 52;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > aside.front-page:nth-of-type(2) {
        grid-row: 53;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > aside.front-page:nth-of-type(3) {
        grid-row: 54;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > footer {
        grid-column: 1 / -1;
        grid-row: 55;
    }

    /* Fecha, hora y recinto, separados por líneas finas. */
    main#content:has(article.product-row):not(:has(.panel-seating)) .info-row {
        border-top: 1px solid var(--fm-border-soft);
        padding: 12px 0;
        margin: 0;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) .info-row:last-child {
        border-bottom: 1px solid var(--fm-border-soft);
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) section.item-category > h3 {
        text-align: left;
    }

    /* La columna es más estrecha: se reparten nombre, precio y cantidad. */
    main#content:has(article.product-row):not(:has(.panel-seating)) article.product-row .col-md-8 {
        width: 50%;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) article.product-row .col-md-2.price {
        width: 22%;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) article.product-row .col-md-2.availability-box {
        width: 28%;
    }

    /* El botón de compra ocupa toda la columna: en su tercio de
       Bootstrap el texto parte en dos líneas. */
    main#content:has(article.product-row):not(:has(.panel-seating)) .front-page .col-md-4.col-md-offset-8 {
        width: 100%;
        margin-left: 0;
    }

    /* ---------- Eventos SIN h2.content-header ----------
       Con logo grande, Pretix mete el nombre y las fechas en un
       <h1 class="sr-only"> dentro de la cabecera. Se desmonta la
       cabecera (display:contents) para llevar el título a la derecha y
       dejar la imagen a la izquierda. */
    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header.pager-header-with-logo,
    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header.pager-header-with-logo > div:not(.clearfix) {
        display: contents;
    }

    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header .clearfix {
        display: none;
    }

    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header h1 {
        grid-column: 2;
        grid-row: 1;
        position: static;
        width: auto;
        height: auto;
        overflow: visible;
        clip: auto;
        clip-path: none;
        white-space: normal;
        margin: 0 0 28px 0;
        padding: 0;
        text-align: left;
        font-family: var(--fm-display);
        font-style: italic;
        font-size: 44px;
        font-weight: 500;
        line-height: 1;
        letter-spacing: 0.03em;
        text-transform: uppercase;
        color: var(--fm-heading);
    }

    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header h1 small,
    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header h1 small time {
        display: block;
        margin-top: 12px;
        font-size: 24px;
        letter-spacing: 0.04em;
        color: var(--fm-red);
    }

    /* Con la cabecera desmontada, el tope de la imagen lo hace el
       enlace que la envuelve; si no hay enlace, se pega la imagen. */
    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header > div > a {
        grid-column: 1;
        grid-row: 1 / span 51;
        align-self: stretch;
        display: block;
        margin-bottom: 24px;
    }

    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header > div > a > .event-logo {
        position: sticky;
        top: 24px;
    }

    main#content:not(:has(h2.content-header)):has(article.product-row):not(:has(.panel-seating)) > .page-header > div > .event-logo {
        grid-column: 1;
        grid-row: 1 / span 51;
        align-self: start;
        position: sticky;
        top: 24px;
        display: block;
        margin-bottom: 24px;
    }
}

/* ============================================================
   PORTADA EN MÓVIL — el mismo orden, en una sola columna

   Debajo de 992px no hay dos columnas, pero se repite el orden de
   escritorio para no tener que bajar toda la descripción antes de
   llegar a comprar.
   ============================================================ */

@media (max-width: 991px) {

    main#content:has(article.product-row):not(:has(.panel-seating)) {
        display: grid;
        grid-template-columns: minmax(0, 1fr);
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > h2.content-header,
    main#content:has(article.product-row):not(:has(.panel-seating)) > h2.subevent-head {
        order: 1;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > div:has(> .info-row) {
        order: 2;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > details.panel:not(.cart) {
        order: 3;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > details.cart {
        order: 4;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > form {
        order: 5;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > p {
        order: 6;
        margin-top: 16px;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > div:has(> p):not(.alert):not(:has(.info-row)) {
        order: 7;
        margin-top: 40px;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > aside.front-page {
        order: 8;
    }

    main#content:has(article.product-row):not(:has(.panel-seating)) > footer {
        order: 9;
    }
}

/* ============================================================
   PORTADA DE UNA SERIE DE EVENTOS — dos columnas

   La página principal de una serie (/organizador/evento/) no tiene
   entradas: lista las fechas en un panel ("Elija la fecha…"). Imagen
   a la izquierda y, a su lado, todo lo demás en el orden en que lo
   pinta Pretix (título, ubicación, lista de fechas, descripción).

   Aquí NO se usa la retícula: con tan poco contenido, Chromium le
   reserva a la imagen más alto del que ocupa en las filas que abarca y
   quedaba un hueco grande antes de "Si ya ha pedido una entrada". Con
   la imagen flotando, los bloques finales bajan por debajo de lo que
   sea más largo —imagen o lista— y nunca se montan. La imagen no es
   pegajosa: en una página tan corta no hace falta.

   Sólo con la vista de lista (.event-list): el calendario necesita el
   ancho completo y se queda a una columna. En móvil no hace falta
   nada: el orden de Pretix ya es el bueno.
   ============================================================ */

@media (min-width: 992px) {

    main#content:has(> .panel .event-list):not(:has(article.product-row)) {
        display: flow-root;
    }

    /* Un tercio del ancho, como el 4fr / 8fr de la portada con
       entradas. */
    main#content:has(> .panel .event-list):not(:has(article.product-row)) > .page-header.pager-header-with-logo {
        float: left;
        width: calc((100% - 48px) / 3);
        margin: 0 48px 24px 0;
    }

    main#content:has(> .panel .event-list):not(:has(article.product-row)) > .page-header .event-logo {
        width: 100%;
        max-width: 100%;
        height: auto;
    }

    /* flow-root hace que cada bloque se estreche junto a la imagen en
       vez de pasarle por debajo (y, a diferencia de overflow:hidden, no
       recorta sombras). */
    main#content:has(> .panel .event-list):not(:has(article.product-row)) > :not(.page-header):not(aside):not(footer):not(script) {
        display: flow-root;
    }

    main#content:has(> .panel .event-list):not(:has(article.product-row)) > h2.content-header {
        text-align: left;
        margin: 0 0 28px 0;
        font-size: 44px;
    }

    main#content:has(> .panel .event-list):not(:has(article.product-row)) .info-row {
        border-top: 1px solid var(--fm-border-soft);
        padding: 12px 0;
        margin: 0;
    }

    main#content:has(> .panel .event-list):not(:has(article.product-row)) .info-row:last-child {
        border-bottom: 1px solid var(--fm-border-soft);
    }

    /* Bloques finales y pie, a todo ancho por debajo de la imagen. */
    main#content:has(> .panel .event-list):not(:has(article.product-row)) > aside.front-page,
    main#content:has(> .panel .event-list):not(:has(article.product-row)) > footer {
        clear: both;
    }

    main#content:has(> .panel .event-list):not(:has(article.product-row)) > aside.front-page {
        margin-top: 40px;
    }
}