/* ============================================================
   perfil-price-card.css — tarjeta de precio/contratación del
   sidebar en el perfil de artista (contenido/perfil.html).
   Separado de style/quieromusicos.css el 19/07/2026 porque ese
   archivo ya venía creciendo mucho (~800 líneas) y este bloque
   por sí solo representaba más de la mitad. // By Claude

   Incluye: .qm-price-card (tarjeta completa: precio, formato/
   subTarifa, tarjetas "qué incluye", CTA, "añadir a propuesta",
   "¿necesitas ayuda?"), .qm-subtarifas-modal (modal "Elige el
   formato") y .qm-trust-modal (modal genérico de detalle para
   cada tarjeta de qm-price-card__trust — Calidad garantizada,
   Contratación segura, etc. — con modificador de color).

   Look premium tipo Apple/Airbnb/Stripe: mucho aire, bordes
   suaves, tipografía protagonista, sin degradados ni sombras
   pesadas. Tokens propios (--qm-*) escopados a .qm-price-card
   para no afectar el resto del sitio legacy.

   También incluye .qm-perfil-layout: el grid de 3 zonas (galería,
   sidebar, reseña) del layout general del perfil — ver comentario
   de esa sección para el detalle. // By Claude
   ============================================================ */

/* ============================================================
   qm-perfil-layout — CSS Grid Areas del layout del perfil de
   artista (galería de video / price card / reseña). Filosofía:
   el HTML describe el contenido, el CSS decide dónde vive cada
   bloque — no dependemos del orden del DOM para la composición
   visual. Los 3 bloques son hermanos directos dentro de este
   grid (contenido/perfil.html, .row.qm-perfil-layout):
     > .col-xl-8      (galería de video, #rp_plugin + miniaturas) → gallery
     > .col-xl-4      (.qm-price-card + compartir)                → sidebar
     > .col_izquierda (.resena_artista + brochure NIA + stats)    → description
   La galería de fotos (#galeriaArtista_wrap) NO es parte de este
   grid — sigue siendo una sección aparte, debajo, sin cambios.
   // By Claude ============================================================ */
.qm-perfil-layout {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) 360px;
    grid-template-areas:
        "gallery sidebar"
        "description sidebar";
    gap: 48px;
    align-items: start;
}
.qm-perfil-layout > .col-xl-8 {
    grid-area: gallery;
    width: auto;
    /* 100% (no "none"): así queda acotada al ancho del área del grid en vez
       de a un % relativo al ancho del .row viejo. Junto con min-width:0,
       evita que el carrusel de miniaturas (contenido intrínsecamente ancho)
       empuje el track del grid más allá de la pantalla. // By Claude */
    max-width: 100%;
    min-width: 0;
    flex: none;
}
.qm-perfil-layout > .col-xl-4 {
    grid-area: sidebar;
    width: auto;
    max-width: 100%;
    min-width: 0;
    flex: none;
    /* Sticky: el price card se queda visible mientras se hace scroll por la
       galería/reseña; abarca ambas filas del grid (misma área "sidebar" en
       las dos filas), así que puede quedarse fijo hasta agotar su columna. */
    position: sticky;
    top: 24px;
    align-self: start;
}
/* Nota: position:sticky crea su propio stacking context, lo que atrapaba los
   modales del qm-price-card (subtarifas, calidad, segura, logística,
   asesoría) por debajo de su propio .modal-backdrop. Probamos arreglarlo con
   z-index acá (fijo y luego con :has(.modal.show)), pero ambos tenían efectos
   secundarios. La solución real quedó en JS: esos modales se mueven a ser
   hijos directos de <body> al cargar la página (ver <script> después de
   .qm-price-card en perfil.html), fuera de este stacking context. // By Claude */
.qm-perfil-layout > .col_izquierda {
    grid-area: description;
    width: auto;
    max-width: 100%;
    min-width: 0;
    flex: none;
    margin: 0;
}

/* Tablet (≥768px): mismo comportamiento que desktop — galería arriba-izq,
   sidebar sticky a la derecha, reseña debajo de la galería. Solo se angosta
   un poco la columna del sidebar. // By Claude */
@media (max-width: 1199.98px) {
    .qm-perfil-layout {
        grid-template-columns: minmax(0, 1fr) 320px;
        gap: 32px;
    }
}

/* Mobile (<768px): una sola columna. Orden: galería → price card (CTA) →
   reseña — primero la acción, después la lectura larga. // By Claude */
@media (max-width: 767.98px) {
    .qm-perfil-layout {
        /* minmax(0, 1fr) y no 1fr a secas: un track "1fr" solo tiene mínimo
           implícito "auto" (= ancho del contenido), y como las 3 secciones
           comparten esta única columna en mobile, el contenido más ancho
           (ej. el carrusel de miniaturas de video) empujaba a las 3 fuera
           de la pantalla. Con minmax(0, ...) el track sí puede encogerse
           al 100% del viewport y cada sección maneja su propio overflow
           (el carrusel ya tiene su scroll horizontal propio). // By Claude */
        grid-template-columns: minmax(0, 1fr);
        grid-template-areas:
            "gallery"
            "sidebar"
            "description";
        gap: 24px;
    }
    .qm-perfil-layout > .col-xl-4 {
        position: static;
    }
}

/* Tokens (--qm-*) escopados a .qm-price-card Y a sus modales (subtarifas,
   trust). Los modales viven en el HTML dentro de .qm-price-card, pero un
   script los mueve a <body> al cargar la página (ver perfil.html, para
   evitar que el stacking context del sidebar sticky los tape) — como las
   custom properties se heredan por posición en el DOM, no por dónde estaban
   originalmente escritas, sin esto los modales se quedaban sin radio/
   padding/colores en cuanto dejaban de ser descendientes de .qm-price-card.
   // By Claude */
.qm-price-card,
.qm-subtarifas-modal,
.qm-trust-modal {
    --qm-radius-xl: 24px;
    --qm-radius-lg: 16px;
    --qm-space-8: 8px;
    --qm-space-12: 12px;
    --qm-space-16: 16px;
    --qm-space-24: 24px;
    --qm-space-32: 32px;
    --qm-space-40: 40px;
    --qm-color-ink: #16181d;
    --qm-color-muted: #767a82;
    --qm-color-line: rgba(22, 24, 29, .07);
    --qm-color-accent: #20b2a9;
    --qm-color-accent-dark: #178f88;
    /* Morado/lavanda tomado de la imagen de referencia — mismos tonos que .qm-badge-fav
       (bg:#ede7f6 / color:#6d28d9) para que quede consistente con el resto del sitio. */
    --qm-color-brand: #6d28d9;
    --qm-color-brand-dark: #5b21b6;
    --qm-color-brand-bg: #ede7f6;
    /* Azul y naranja: solo para los íconos de las tarjetas de qm-price-card__trust
       (coordinación logística / acompañamiento), no se usan en otro lado. // By Claude */
    --qm-color-blue: #2563eb;
    --qm-color-blue-bg: #e3edfd;
    --qm-color-orange: #ea580c;
    --qm-color-orange-bg: #fdece0;
    /* Verde vivo (distinto del teal de --qm-color-accent) para invitar a la acción:
       el check de la subtarifa elegida y el CTA "Ver más formatos" del botón. // By Claude */
    --qm-color-green: #16a34a;
}
.qm-price-card {
    background: #fff;
    border-radius: var(--qm-radius-xl);
    padding: var(--qm-space-32);
    box-shadow: 0 12px 40px rgba(0, 0, 0, .08);
    transition: box-shadow .2s ease;
}

.qm-price-card__price { margin-bottom: var(--qm-space-24); }
.qm-price-card__price-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    gap: var(--qm-space-8);
    margin-bottom: var(--qm-space-16);
}
.qm-price-card__price-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--qm-space-8);
    background: var(--qm-color-brand-bg);
    color: var(--qm-color-brand);
    font-size: 13px;
    font-weight: 600;
    padding: 6px 14px;
    border-radius: 20px;
}
.qm-price-card__price-badge i { font-size: 13px; }
.qm-price-card__price-badge--favorita {
    display: flex;
    margin-top: 0;
    margin-bottom: var(--qm-space-16);
}

/* Gear (solo u_editor): ícono simple sin fondo/borde, con dropdown "Ver tarifa". // By Claude */
.qm-price-card__gear-wrap { flex-shrink: 0; margin-left: auto; }
.qm-price-card__gear.btn {
    border: none;
    background: transparent;
    color: var(--qm-color-muted);
    font-size: 16px;
    padding: 4px 6px;
    box-shadow: none;
}
.qm-price-card__gear.btn:hover,
.qm-price-card__gear.btn:focus {
    color: var(--qm-color-brand);
    box-shadow: none;
}
.qm-price-card__price-row {
    display: flex;
    align-items: baseline;
    gap: var(--qm-space-8);
}
.qm-price-card__price-value {
    font-size: 28px;
    font-weight: 700;
    line-height: 1;
    color: var(--qm-color-ink);
    letter-spacing: -.02em;
}
.qm-price-card__price-currency {
    display: block;
    font-size: 14px;
    font-weight: 400;
    color: var(--qm-color-muted);
    margin-top: -13px;
}

.qm-price-card__formacion {
    display: flex;
    align-items: center;
    gap: var(--qm-space-12);
    font-size: 15px;
    font-weight: 600;
    color: var(--qm-color-ink);
    margin-bottom: var(--qm-space-24);
}
.qm-price-card__formacion i {
    color: var(--qm-color-brand);
    font-size: 16px;
    flex-shrink: 0;
}

/* Botón disparador + modal de formaciones (subTarifas) — reemplaza
   .qm-price-card__formacion cuando hay más de una subTarifa para elegir.
   El botón abre #qmSubTarifasModal (data-toggle="modal"); cada subTarifa se
   muestra como mini-card con precio y descripción dentro del modal. // By Claude */
.qm-price-card__subtarifa-btn.btn {
    /* Columna en vez de fila: arriba los textos (formación/formato elegido),
       abajo el CTA "Ver más formatos", alineado a la derecha con align-self.
       Así el CTA siempre queda en la esquina inferior derecha del botón sin
       importar cuántas líneas tengan los textos de arriba. // By Claude */
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--qm-space-16);
    width: 100%;
    text-align: left;
    font-size: 15px;
    font-weight: 600;
    color: var(--qm-color-ink) !important;
    background: #fff !important;
    border: 1px solid var(--qm-color-line) !important;
    border-radius: var(--qm-radius-lg);
    padding: var(--qm-space-16) var(--qm-space-16);
    box-shadow: none !important;
    margin-bottom: var(--qm-space-24);
}
/* !important arriba/abajo porque bootstrap.css carga DESPUÉS de este archivo y su
   estado :active/:hover de .btn pisaba estos colores (quedaba texto blanco sobre
   fondo blanco al hacer hover). // By Claude */
.qm-price-card__subtarifa-btn.btn:hover,
.qm-price-card__subtarifa-btn.btn:focus,
.qm-price-card__subtarifa-btn.btn:active {
    color: var(--qm-color-ink) !important;
    background: #fff !important;
    border-color: var(--qm-color-brand) !important;
    box-shadow: none !important;
}
.qm-price-card__subtarifa-btn i { color: var(--qm-color-brand); flex-shrink: 0; margin-top: 2px; }
/* Check verde de la subtarifa elegida (antes era una nota musical morada) —
   más específico que la regla general de arriba para pisar el color brand. // By Claude */
.qm-price-card__subtarifa-btn .qm-price-card__subtarifa-check-icon {
    color: var(--qm-color-green);
    margin-top: 0;
}
/* CTA "Ver más formatos →": invita a tocar el botón — texto grande y verde
   oscuro + ícono de flecha en su propia burbuja verde clarito, igual a la
   referencia visual que compartió Solo. En la esquina inferior derecha
   (align-self:flex-end dentro del botón en columna). // By Claude */
.qm-price-card__subtarifa-btn-cta {
    align-self: flex-end;
    display: inline-flex;
    align-items: center;
    gap: var(--qm-space-12);
    color: #6d29d9;
    font-size: 17px;
    font-weight: 700;
}
.qm-price-card__subtarifa-btn-cta-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: #ede7f6;
    flex-shrink: 0;
}
.qm-price-card__subtarifa-btn-cta-icon i {
    color: #6d29d9;
    font-size: 15px;
    margin-top: 0;
}
/* Envuelve la formación (.qm-price-card__formacion, ícono fa-users) y el formato elegido
   (.qm-price-card__subtarifa-actual) apiladas dentro del botón. Al elegir otro formato en el
   modal, el JS solo actualiza el <span> de subtarifa-actual — la formación no se toca.
   gap generoso (antes 2px, se veía apretujado) para separar bien los 4 elementos
   del botón: formación, formato elegido, badge de favorita y el CTA. // By Claude */
.qm-price-card__subtarifa-btn-textos {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--qm-space-12);
}
.qm-price-card__subtarifa-btn .qm-price-card__formacion {
    margin-bottom: 0;
}
/* Badge "Formato más solicitado" incrustado en el botón, después de la fila de
   subtarifa-actual. El gap del contenedor ya separa, así que se resetea el
   margin-bottom que tenía cuando vivía junto al precio (evita aire extra abajo
   del botón). // By Claude */
.qm-price-card__subtarifa-btn .qm-price-card__price-badge--favorita {
    margin-top: 0;
    margin-bottom: 0;
}
/* Fila del formato elegido (ícono + texto), mismo estilo que tenía antes de anidarse
   (hereda font-size/weight/color del botón .qm-price-card__subtarifa-btn.btn). // By Claude */
.qm-price-card__subtarifa-actual-row {
    display: flex;
    align-items: center;
    gap: var(--qm-space-12);
}
.qm-price-card__subtarifa-actual {
    flex: 1;
    overflow: visible;
    white-space: normal;
    word-break: break-word;
    line-height: 1.35;
    font-weight: normal;
}
/* Precio + COP del formato elegido, repetido dentro del botón (además del bloque
   grande de arriba) para que se vea sin necesidad de abrir el modal. Mismo estilo
   que .qm-price-card__subtarifa-card-precio (mini-cards del modal). // By Claude */
.qm-price-card__subtarifa-btn-precio {
    flex-shrink: 0;
    font-size: 15px;
    font-weight: 700;
    color: var(--qm-color-brand-dark);
    white-space: nowrap;
}
.qm-price-card__subtarifa-btn-precio small {
    font-size: 11px;
    font-weight: 400;
    color: var(--qm-color-muted);
    margin-left: var(--qm-space-8);
}
.qm-price-card__subtarifa-btn-arrow {
    font-size: 12px;
    color: var(--qm-color-muted) !important;
    margin-top: 2px;
}

/* Modal con las mini-cards de subTarifas // By Claude */
.qm-subtarifas-modal .modal-content {
    border-radius: var(--qm-radius-xl);
    border: none;
}
.qm-subtarifas-modal .modal-header {
    border-bottom: 1px solid var(--qm-color-line);
    padding: var(--qm-space-24);
}
.qm-subtarifas-modal .modal-title {
    font-size: 18px;
    font-weight: 700;
    color: var(--qm-color-ink);
}
.qm-subtarifas-modal .modal-body {
    padding: var(--qm-space-32);
    max-height: 65vh;
    overflow-y: auto;
}
/* Cada tarifa (título + grid) es su propio grupo. Cuando hay más de una tarifa
   distinta en el mismo modal (últimos 2 años), separarlas bien con harto aire
   + una línea divisoria, para que no se vean apeñuscadas una tras otra. // By Claude */
.qm-price-card__subtarifa-grupo + .qm-price-card__subtarifa-grupo {
    margin-top: var(--qm-space-40);
    padding-top: var(--qm-space-32);
    border-top: 1px solid var(--qm-color-line);
}
/* Encabezado del modal "Elige el formato": misma formación (ícono + texto) que
   .qm-price-card__formacion en el botón, un poco más grande para que se lea
   bien como título del grid de mini-cards. // By Claude */
.qm-price-card__formacion--modal {
    font-size: 17px;
    margin-bottom: var(--qm-space-24);
}
.qm-price-card__formacion--modal i {
    font-size: 18px;
}
.qm-price-card__subtarifa-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    gap: var(--qm-space-16);
}
.qm-price-card__subtarifa-card {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--qm-space-8);
    text-align: left;
    background: #fff;
    border: 1px solid var(--qm-color-line);
    border-radius: var(--qm-radius-lg);
    padding: var(--qm-space-16);
    cursor: pointer;
    transition: border-color .15s ease, background .15s ease;
}
.qm-price-card__subtarifa-card:hover,
.qm-price-card__subtarifa-card:focus {
    border-color: var(--qm-color-brand);
    background: var(--qm-color-brand-bg);
    outline: none;
}
.qm-price-card__subtarifa-card.active {
    border-color: var(--qm-color-brand);
    background: var(--qm-color-brand-bg);
    box-shadow: 0 0 0 1px var(--qm-color-brand) inset;
}
.qm-price-card__subtarifa-card-desc {
    font-size: 14px;
    font-weight: 600;
    color: var(--qm-color-ink);
}
.qm-price-card__subtarifa-card-precio {
    font-size: 18px;
    font-weight: 700;
    color: var(--qm-color-brand-dark);
}
.qm-price-card__subtarifa-card-precio small {
    font-size: 11px;
    font-weight: 400;
    color: var(--qm-color-muted);
    margin-left: var(--qm-space-8);
}
.qm-price-card__subtarifa-card-tag {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11px;
    font-weight: 600;
    color: var(--qm-color-brand-dark);
}
.qm-price-card__subtarifa-card-tag i { color: var(--qm-color-brand); }

.qm-price-card__divider {
    height: 1px;
    background: var(--qm-color-line);
    border: none;
    margin: var(--qm-space-24) 0;
}

/* Tarjetas "qué incluye" (antes era una simple lista con check + texto).
   Cada item: ícono circular de color + título con check + descripción breve.
   Referencia de diseño aportada por el usuario. // By Claude */
.qm-price-card__trust {
    list-style: none;
    margin: 0 0 var(--qm-space-24);
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--qm-space-12);
}
.qm-price-card__trust-item {
    display: flex;
    align-items: flex-start;
    gap: var(--qm-space-12);
    padding: var(--qm-space-12);
    border: 1px solid var(--qm-color-line);
    border-radius: var(--qm-radius-lg);
}
.qm-price-card__trust-icon {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
}
.qm-price-card__trust-item--purple .qm-price-card__trust-icon { background: var(--qm-color-brand-bg); color: var(--qm-color-brand); }
.qm-price-card__trust-item--green .qm-price-card__trust-icon { background: rgba(32, 178, 169, .12); color: var(--qm-color-accent-dark); }
.qm-price-card__trust-item--blue .qm-price-card__trust-icon { background: var(--qm-color-blue-bg); color: var(--qm-color-blue); }
.qm-price-card__trust-item--orange .qm-price-card__trust-icon { background: var(--qm-color-orange-bg); color: var(--qm-color-orange); }
.qm-price-card__trust-body {
    flex: 1;
    min-width: 0;
    padding-top: 2px;
}
.qm-price-card__trust-title {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: var(--qm-color-ink);
    margin-bottom: 2px;
}
.qm-price-card__trust-desc {
    font-size: 13px;
    line-height: 1.45;
    color: var(--qm-color-muted);
    margin: 0;
}
/* Único card clickeable de la lista (abre #qmCalidadModal). // By Claude */
.qm-price-card__trust-item--clickable {
    cursor: pointer;
    transition: border-color .15s ease, background .15s ease;
}
.qm-price-card__trust-item--clickable:hover,
.qm-price-card__trust-item--clickable:focus {
    border-color: var(--qm-color-brand);
    background: var(--qm-color-brand-bg);
    outline: none;
}
.qm-price-card__trust-chevron {
    flex-shrink: 0;
    align-self: center;
    color: var(--qm-color-muted);
    font-size: 13px;
}

/* ============================================================
   qm-trust-modal — modal genérico de detalle para cada tarjeta de
   qm-price-card__trust (Calidad garantizada, Contratación segura,
   y los que falten: Coordinación logística, Acompañamiento).
   Antes era .qm-calidad-modal (un solo modal); se generalizó el
   19/07/2026 al agregar el segundo modal (Contratación segura)
   para no duplicar ~170 líneas de CSS casi idénticas por modal.
   El color se decide con un modificador: qm-trust-modal--purple,
   --green, --blue, --orange (mismos 4 colores de qm-price-card__trust-item).
   Reusa los tokens --qm-* de .qm-price-card, pero el modal se
   inyecta al final del body por Bootstrap así que los
   redeclaramos acá también. // By Claude
   ============================================================ */
.qm-trust-modal .modal-content {
    --qm-radius-xl: 24px;
    --qm-radius-lg: 16px;
    --qm-space-8: 8px;
    --qm-space-12: 12px;
    --qm-space-16: 16px;
    --qm-space-24: 24px;
    --qm-color-ink: #16181d;
    --qm-color-muted: #767a82;
    --qm-color-line: rgba(22, 24, 29, .07);
    --qm-color-accent: #20b2a9;
    --qm-color-accent-dark: #178f88;
    --qm-color-brand: #6d28d9;
    --qm-color-brand-dark: #5b21b6;
    --qm-color-brand-bg: #ede7f6;
    --qm-color-blue: #2563eb;
    --qm-color-blue-bg: #e3edfd;
    --qm-color-orange: #ea580c;
    --qm-color-orange-bg: #fdece0;
    border-radius: var(--qm-radius-xl);
    border: none;
    /* Para que el fondo del header no se salga de las esquinas redondeadas. // By Claude */
    overflow: hidden;
}
/* Color del modal: ícono del header, checklist, banner y timeline toman el
   color de la variante. Por defecto (sin modificador) cae en morado. // By Claude */
.qm-trust-modal { --qm-trust-color: var(--qm-color-brand); --qm-trust-color-bg: var(--qm-color-brand-bg); }
.qm-trust-modal--purple { --qm-trust-color: var(--qm-color-brand); --qm-trust-color-bg: var(--qm-color-brand-bg); }
.qm-trust-modal--green  { --qm-trust-color: var(--qm-color-accent-dark); --qm-trust-color-bg: rgba(32, 178, 169, .12); }
.qm-trust-modal--blue   { --qm-trust-color: var(--qm-color-blue); --qm-trust-color-bg: var(--qm-color-blue-bg); }
.qm-trust-modal--orange { --qm-trust-color: var(--qm-color-orange); --qm-trust-color-bg: var(--qm-color-orange-bg); }

.qm-trust-modal__header {
    display: flex;
    align-items: flex-start;
    gap: var(--qm-space-16);
    background: #fcfafe;
    border-bottom: 1px solid #f2f0f8;
    padding: var(--qm-space-24);
}
.qm-trust-modal__header-icon {
    flex-shrink: 0;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    background: var(--qm-trust-color-bg);
    color: var(--qm-trust-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
}
.qm-trust-modal__header-text { flex: 1; min-width: 0; }
.qm-trust-modal__header .modal-title {
    font-size: 20px;
    font-weight: 700;
    color: var(--qm-color-ink);
}
.qm-trust-modal__subtitle {
    font-size: 14px;
    color: var(--qm-color-muted);
    margin: 2px 0 0;
}
.qm-trust-modal__subtitle strong { color: var(--qm-color-ink); }
.qm-trust-modal .modal-body { padding: var(--qm-space-24); }

.qm-trust-modal__intro {
    display: flex;
    align-items: center;
    gap: var(--qm-space-24);
}
/* Ilustraciones: images/iconos/perfil-*.png. Si todavía no hay imagen para una
   variante, cae en un ícono de FontAwesome grande sobre círculo de color
   (ver .qm-trust-modal__illustration-fallback). // By Claude */
.qm-trust-modal__illustration {
    flex-shrink: 0;
    width: 140px;
}
.qm-trust-modal__illustration img {
    display: block;
    width: 100%;
    height: auto;
}
.qm-trust-modal__illustration-fallback {
    width: 140px;
    height: 132px;
    border-radius: 50%;
    background: var(--qm-trust-color-bg);
    color: var(--qm-trust-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 48px;
    margin: 0 auto;
}
.qm-trust-modal__intro-text { flex: 1; min-width: 0; }
.qm-trust-modal__intro-text > p {
    font-size: 15px;
    line-height: 1.5;
    color: var(--qm-color-ink);
    margin-bottom: var(--qm-space-16);
}
.qm-trust-modal__intro-text > p strong { color: var(--qm-trust-color); font-weight: 600; }
.qm-trust-modal__criterios {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--qm-space-12) var(--qm-space-16);
}
.qm-trust-modal__criterios span {
    display: flex;
    align-items: center;
    gap: var(--qm-space-8);
    font-size: 14px;
    color: var(--qm-color-ink);
}
.qm-trust-modal__criterios i { color: var(--qm-trust-color); flex-shrink: 0; }

/* Grilla de "features" (usada en Coordinación logística): a diferencia de
   __criterios (un solo check + texto en línea), cada item trae ícono +
   título + descripción — más detalle por criterio. // By Claude */
.qm-trust-modal__features {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--qm-space-16);
}
.qm-trust-modal__feature {
    display: flex;
    align-items: flex-start;
    gap: var(--qm-space-12);
}
.qm-trust-modal__feature-icon {
    flex-shrink: 0;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--qm-trust-color-bg);
    color: var(--qm-trust-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
}
.qm-trust-modal__feature-title {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: var(--qm-color-ink);
    margin-bottom: 2px;
}
.qm-trust-modal__feature-desc {
    font-size: 13px;
    line-height: 1.4;
    color: var(--qm-color-muted);
    margin: 0;
}

.qm-trust-modal__divider {
    height: 1px;
    background: var(--qm-color-line);
    border: none;
    margin: var(--qm-space-24) 0;
}

/* Fila de estadísticas reales (usada en Calidad garantizada: presentaciones /
   calificación / opiniones de ESTE artista). // By Claude */
.qm-trust-modal__stats {
    display: flex;
    align-items: center;
    border: 1px solid var(--qm-color-line);
    border-radius: var(--qm-radius-lg);
    padding: var(--qm-space-16);
}
.qm-trust-modal__stat {
    flex: 1;
    display: flex;
    align-items: center;
    gap: var(--qm-space-12);
    min-width: 0;
}
.qm-trust-modal__stat-sep {
    width: 1px;
    align-self: stretch;
    background: var(--qm-color-line);
    margin: 0 var(--qm-space-16);
}
.qm-trust-modal__stat-icon {
    flex-shrink: 0;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--qm-trust-color-bg);
    color: var(--qm-trust-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
}
.qm-trust-modal__stat-value {
    display: block;
    font-size: 20px;
    font-weight: 700;
    color: var(--qm-color-ink);
    line-height: 1.2;
}
.qm-trust-modal__stat-label {
    display: block;
    font-size: 12px;
    color: var(--qm-color-muted);
    line-height: 1.3;
}

/* Línea de tiempo horizontal (usada en Contratación segura: Solicitud →
   Confirmación → Producción → Evento → Cierre). Cada paso: ícono circular +
   título + descripción, conectados por una línea punteada con chevron. // By Claude */
.qm-trust-modal__timeline {
    display: flex;
    align-items: flex-start;
    border: 1px solid var(--qm-color-line);
    border-radius: var(--qm-radius-lg);
    padding: var(--qm-space-24) var(--qm-space-16);
}
.qm-trust-modal__timeline-step {
    flex: 1;
    min-width: 0;
    text-align: center;
    padding: 0 4px;
}
.qm-trust-modal__timeline-icon {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: var(--qm-trust-color-bg);
    color: var(--qm-trust-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    margin: 0 auto var(--qm-space-8);
}
.qm-trust-modal__timeline-titulo {
    display: block;
    font-size: 13px;
    font-weight: 700;
    color: var(--qm-color-ink);
    margin-bottom: 2px;
}
.qm-trust-modal__timeline-desc {
    display: block;
    font-size: 11.5px;
    line-height: 1.35;
    color: var(--qm-color-muted);
}
.qm-trust-modal__timeline-conector {
    flex-shrink: 0;
    width: 32px;
    align-self: flex-start;
    margin-top: 22px;
    height: 1px;
    border-top: 1px dashed var(--qm-color-line);
    position: relative;
}
.qm-trust-modal__timeline-conector i {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: #fff;
    color: var(--qm-color-muted);
    font-size: 9px;
}

.qm-trust-modal__banner {
    display: flex;
    align-items: center;
    gap: var(--qm-space-12);
    background: var(--qm-trust-color-bg);
    border-radius: var(--qm-radius-lg);
    padding: var(--qm-space-16);
    margin-top: var(--qm-space-24);
}
.qm-trust-modal__banner i {
    flex-shrink: 0;
    color: var(--qm-trust-color);
    font-size: 18px;
}
.qm-trust-modal__banner p {
    margin: 0;
    font-size: 14px;
    color: var(--qm-color-ink);
}

@media (max-width: 575.98px) {
    .qm-trust-modal__intro { flex-direction: column; }
    .qm-trust-modal__illustration { width: 100px; margin: 0 auto; }
    .qm-trust-modal__illustration-fallback { width: 100px; height: 94px; font-size: 36px; }
    .qm-trust-modal__criterios { grid-template-columns: 1fr; }
    .qm-trust-modal__features { grid-template-columns: 1fr; }
    .qm-trust-modal__stats { flex-direction: column; align-items: stretch; gap: var(--qm-space-16); }
    .qm-trust-modal__stat-sep { display: none; }
    .qm-trust-modal__timeline { flex-direction: column; gap: var(--qm-space-16); padding: var(--qm-space-16); }
    .qm-trust-modal__timeline-step { text-align: left; display: flex; align-items: center; gap: var(--qm-space-12); }
    .qm-trust-modal__timeline-icon { margin: 0; flex-shrink: 0; }
    .qm-trust-modal__timeline-conector { display: none; }
}

.qm-price-card__cta.btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--qm-space-8);
    width: 100%;
    height: 56px;
    border-radius: var(--qm-radius-lg);
    background: var(--qm-color-brand);
    border: none;
    color: #fff !important;
    font-size: 16px;
    font-weight: 600;
    text-decoration: none;
    transition: transform .15s ease, background-color .15s ease, box-shadow .15s ease;
    box-shadow: 0 6px 16px rgba(109, 40, 217, .28);
}
.qm-price-card__cta.btn i { font-size: 15px; }
.qm-price-card__cta.btn:hover,
.qm-price-card__cta.btn:focus {
    background: var(--qm-color-brand-dark);
    color: #fff !important;
    transform: translateY(-2px);
    text-decoration: none;
    box-shadow: 0 10px 20px rgba(109, 40, 217, .32);
}
.qm-price-card__cta.btn:focus-visible {
    outline: 2px solid var(--qm-color-brand-dark);
    outline-offset: 2px;
}
.qm-price-card__cta.btn:active {
    transform: translateY(0);
}

.qm-price-card__hint {
    text-align: center;
    font-size: 13px;
    line-height: 1.5;
    color: var(--qm-color-muted);
    margin: var(--qm-space-12) 0 0;
}

/* "¿Necesitas ayuda?" — footer decorativo (sin acción real conectada todavía;
   ver nota en el resumen final si se quiere enlazar a WhatsApp/qChat). // By Claude */
.qm-price-card__ayuda {
    display: flex;
    align-items: center;
    gap: var(--qm-space-12);
    background: var(--qm-color-brand-bg);
    border-radius: var(--qm-radius-lg);
    padding: var(--qm-space-16);
    text-decoration: none !important;
    transition: background-color .15s ease;
}
.qm-price-card__ayuda:hover,
.qm-price-card__ayuda:focus {
    background: #e2d9f7;
    text-decoration: none !important;
}
.qm-price-card__ayuda i {
    color: var(--qm-color-brand);
    font-size: 20px;
    flex-shrink: 0;
}
.qm-price-card__ayuda-titulo {
    display: block;
    font-size: 14px;
    font-weight: 600;
    color: var(--qm-color-ink);
}
.qm-price-card__ayuda-link {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--qm-color-brand);
    margin-top: 2px;
}
.qm-price-card__ayuda-link i { color: var(--qm-color-brand); font-size: 11px; margin-left: 4px; }

/* "Añadir a mi propuesta" (check_seleccionado / boton_agregar / button-agregar):
   markup y clases son generados por PHP y usados por aaideo/funciones_carrito*.js
   (agregarAlCarrito) — no se tocan ni el HTML ni los nombres de clase, solo se
   sobre-escribe su estilo dentro de la tarjeta para que se vea como una acción
   discreta en vez del botón circular legacy. // By Claude */
.qm-price-card .check_seleccionado {
    width: 100%;
    display: flex;
    align-items: center;
    gap: var(--qm-space-12);
    text-align: left;
    padding-top: 0;
    font-size: 14px;
    font-weight: 500;
    color: var(--qm-color-ink);
}
.qm-price-card .check_seleccionado span {
    cursor: pointer;
    transition: color .15s ease;
}
.qm-price-card .check_seleccionado span:hover { color: var(--qm-color-accent-dark); }
.qm-price-card .check_seleccionado .agregado { color: var(--qm-color-accent); }
.qm-price-card .boton_agregar {
    order: -1;
    float: none;
    margin: 0;
}
.qm-price-card .button-agregar,
.qm-price-card .button-quitar {
    width: 28px;
    height: 28px;
    margin: 0;
    padding: 0;
    border: none;
    background: rgba(32, 178, 169, .1) !important;
    color: var(--qm-color-accent) !important;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    transition: background-color .15s ease, transform .15s ease;
}
.qm-price-card .button-agregar:hover,
.qm-price-card .button-quitar:hover {
    background: rgba(32, 178, 169, .18) !important;
    transform: scale(1.06);
}

@media (max-width: 575.98px) {
    .qm-price-card { padding: var(--qm-space-24); }
}
