[hidden]{display:none!important}
/* breadcrumbs v1.0 */
/* RSJ · breadcrumbs (migas de pan) · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. Ficha v0.4. Texto 14 en text-muted, la página actual
   en ink; separador «/» decorativo. Si no cabe en móvil, pasa a la línea siguiente. El JSON-LD BreadcrumbList lo genera el servidor. */
.m-migas{padding-block:var(--s-16);font-size:var(--fs-aux)}
.m-migas ol{display:flex;flex-wrap:wrap;gap:var(--s-8);margin:0;padding:0;list-style:none}
.m-migas li{display:flex;gap:var(--s-8);color:var(--color-text-muted)}
.m-migas li+li::before{content:"/";color:var(--color-border-strong)}
.m-migas a{display:inline-flex;align-items:center;min-height:var(--h-touch-min);margin-block:calc(-1*var(--s-12));color:var(--color-text-muted)}
.m-migas a:hover{color:var(--color-ink)}
.m-migas [aria-current]{color:var(--color-ink);font-weight:var(--fw-medium)}

/* galeria v1.0 */
/* RSJ · galeria · v1.0 (validado por Miguel el 08/10/2026, con vídeo). Biblioteca de módulos. Ficha v0.4: imagen principal cuadrada (480 px; libro §6) con borde y
   --radius-md, fondo blanco y contain; miniaturas de 64 px (antes 72, fuera de escala) que cambian la principal. En móvil, miniaturas
   debajo en fila; desde 1024, en columna a la izquierda. La seleccionada con borde de 2 px brand-600. */
.m-galeria{display:grid;gap:var(--s-12)}
.m-galeria__principal{margin:0;aspect-ratio:1;overflow:hidden;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.m-galeria__principal img{width:100%;height:100%;object-fit:contain}
.m-galeria__minis{display:flex;flex-wrap:wrap;gap:var(--s-8)}
.m-galeria__mini{flex:none;width:var(--s-64);height:var(--s-64);padding:0;overflow:hidden;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface)}
.m-galeria__mini[aria-pressed=true]{border:2px solid var(--color-brand-600)}
.m-galeria__mini img{width:100%;height:100%;object-fit:cover}
@media (min-width:1024px){.m-galeria{grid-template-columns:var(--s-64) minmax(0,1fr);gap:var(--s-16)}.m-galeria__minis{flex-direction:column;order:-1}}
/* rc2 · Vídeo (Miguel, 08/10/2026): la miniatura enseña un fotograma (póster) con el icono de play; en la principal, el póster con un
   botón grande de play; al pulsarlo, el vídeo se carga y se reproduce ahí mismo, con sus controles. No se descarga nada del vídeo
   hasta que se pulsa play (preload="none"). */
.m-galeria__mini,.m-galeria__reproducir{position:relative}
.m-galeria__icoplay{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}
.m-galeria__icoplay span{display:grid;place-items:center;width:var(--s-24);height:var(--s-24);border-radius:50%;background:var(--color-ink);color:var(--color-surface);opacity:.85}
.m-galeria__icoplay svg{width:12px;height:12px;margin-left:2px}
.m-galeria__reproducir{display:block;width:100%;height:100%;padding:0;border:0;background:none;cursor:pointer}
.m-galeria__reproducir img{width:100%;height:100%;object-fit:contain}
.m-galeria__reproducir .m-galeria__icoplay span{width:var(--s-80);height:var(--s-80)}
.m-galeria__reproducir .m-galeria__icoplay svg{width:var(--s-32);height:var(--s-32);margin-left:4px}
.m-galeria__reproducir:hover .m-galeria__icoplay span{opacity:1}
.m-galeria__reproducir:focus-visible{outline-offset:-4px}
.m-galeria__principal video{width:100%;height:100%;object-fit:contain;background:var(--color-surface)}
.m-galeria__principal iframe{display:block;width:100%;height:100%;border:0;background:var(--color-ink)} /* + YouTube (página, 26/10/2026) */

/* info-producto v1.0 */
/* RSJ · info-producto · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. Ficha v0.4 ajustada al libro: antetítulo de campaña en brand-600,
   h1, entradilla, precio por unidad en --fs-price-lead (36/38; antes un cálculo suelto) en verde, «por rosa · IVA incluido» y envase. */
.m-info{display:grid;gap:var(--s-16)}
.m-info__cab{display:grid;gap:var(--s-8)}
.m-info__eyebrow{color:var(--color-brand-600)}
.m-info__lead{font-size:var(--fs-body);color:var(--color-ink)}
.m-info__precio{display:grid;gap:var(--s-4);padding-block:var(--s-16);border-block:1px solid var(--color-border)}
.m-info__precio p:first-child{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--s-8)}
.m-info__precio strong{font-size:var(--fs-price-lead);font-weight:var(--fw-bold);line-height:1.1;color:var(--color-action);font-variant-numeric:tabular-nums}
/* Precios por volumen (página, 26/10/2026: tramos del servidor en la ficha) */
.m-info__volumen{margin:0;font-size:var(--fs-aux);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-info__precio .m-info__volumen span{white-space:nowrap;color:inherit;font-weight:inherit}
.m-cantidad__tramo{margin:var(--s-8) 0 0;font-size:var(--fs-badge);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-cantidad__tramo:empty{display:none}
.m-info__precio span,.m-info__envase{font-size:var(--fs-aux);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-info__tramo{font-size:var(--fs-aux);font-weight:var(--fw-medium);color:var(--color-action)}

/* selector-cantidad v1.1 */
/* RSJ · selector-cantidad · v1.1 (validado por Miguel el 09/10/2026; v1.0 el 08/10). v1.1: unidades primero, cajas debajo. rc2 (Miguel): bloque más bajo y cifras más grandes; «Cajas» en la misma línea. Biblioteca de módulos. M-B4: un solo módulo con dos aspectos. «Compacto» (ficha):
   botones de 44 px y campo, borde border-strong (como el carrito v1.3). «Juego»: botones redondos de 48 px y cifra de 36 px (el de la
   calculadora). Debajo, «= N rosas» y el subtotal con y sin IVA. Lanza «input» en el campo para que la calculadora y la línea de
   recaudación se enteren. Importes: los da el motor de carrito (tramos); en la biblioteca, precio fijo de ejemplo. */
.m-cantidad{display:grid;gap:var(--s-8)}
.m-cantidad__lbl{font-size:var(--fs-aux);font-weight:var(--fw-semibold)}
.m-cantidad__fila{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-12)}
.m-cantidad[data-aspecto=compacto] .m-cantidad__lbl{margin-right:var(--s-4)}
.m-cantidad__step{display:inline-flex;align-items:stretch;overflow:hidden;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm)}
.m-cantidad__step button{width:var(--h-touch-min);min-height:var(--h-touch-min);padding:0;border:0;background:var(--color-surface-soft);font-size:var(--fs-h2);font-weight:var(--fw-semibold);line-height:1}
.m-cantidad__step button:hover{background:var(--color-action-soft)}
.m-cantidad__step button:disabled{opacity:.4;cursor:not-allowed}
.m-cantidad__step input{width:80px;padding:0;border:0;border-inline:1px solid var(--color-border-strong);background:var(--color-surface);text-align:center;font-size:var(--fs-h3);font-weight:var(--fw-bold);font-variant-numeric:tabular-nums;appearance:textfield;-moz-appearance:textfield}
.m-cantidad__step input::-webkit-inner-spin-button,.m-cantidad__step input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.m-cantidad__uds{font-size:var(--fs-body);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-cantidad__uds b{color:var(--color-ink)}
.m-cantidad__sub{display:grid;gap:0;margin:0}
.m-cantidad__sub div{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-16)}
.m-cantidad__sub dt{font-weight:var(--fw-semibold)}
.m-cantidad__sub dt small{font-size:var(--fs-badge);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-cantidad__sub dd{margin:0;font-variant-numeric:tabular-nums}
.m-cantidad__sub div:first-child dd{font-size:var(--fs-h3);font-weight:var(--fw-bold)}
.m-cantidad__sub div+div{font-size:var(--fs-aux);color:var(--color-text-muted)}
/* Aspecto «juego» */
.m-cantidad[data-aspecto=juego] .m-cantidad__step{gap:var(--s-12);align-items:center;overflow:visible;border:0}
.m-cantidad[data-aspecto=juego] .m-cantidad__step button{width:var(--h-btn);min-height:var(--h-btn);border:2px solid var(--color-action);border-radius:50%;background:var(--color-surface);color:var(--color-action);font-size:var(--fs-h2);font-weight:var(--fw-bold)}
.m-cantidad[data-aspecto=juego] .m-cantidad__step button:hover{background:var(--color-action-soft)}
.m-cantidad[data-aspecto=juego] .m-cantidad__step input{width:88px;border:0;border-bottom:2px solid var(--color-border-strong);font-size:36px;font-weight:var(--fw-bold)}
.m-cantidad[data-aspecto=juego] .m-cantidad__step input:focus{border-bottom-color:var(--color-action);outline:0}
.m-cantidad__cajas{font-size:var(--fs-aux);font-weight:var(--fw-medium);color:var(--color-text-muted)}

/* add-to-cart v1.0 */
/* RSJ · add-to-cart · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. El botón grande de la ficha (libro §8.2: --h-btn-lg, --fs-cta, a todo
   el ancho; el único grande de la página), la disponibilidad debajo (aviso-stock) y el enlace a presupuesto. Estados del libro:
   «Añadiendo…» y «Añadida al carrito» (2 s); agotado y fuera de temporada. */
.m-comprar{display:grid;gap:var(--s-12)}
.m-comprar__alt{margin:0;font-size:var(--fs-aux);text-align:center}
.m-comprar__off{margin:0;padding:var(--s-12) var(--s-16);border-radius:var(--radius-sm);background:var(--color-surface-soft);font-size:var(--fs-aux)}

/* aviso-stock v1.0 */
/* RSJ · aviso-stock (B02) · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. «Disponibilidad» y nivel a 12 px en text-muted;
   barra de 6 px con el color del nivel (tokens --color-avail-*); frase corta a 12 px. Nunca solo color. Sin JS. */
.m-stock__top{display:flex;justify-content:space-between;gap:var(--s-8);margin:0 0 var(--s-4);font-size:var(--fs-badge);line-height:1.4;color:var(--color-text-muted)}
.m-stock__pista{height:6px;border:1px solid var(--color-border);border-radius:var(--radius-pill);background:var(--color-surface-soft);overflow:hidden}
.m-stock__pista span{display:block;height:100%;border-radius:inherit}
.m-stock[data-nivel="5"] .m-stock__pista span{width:100%;background:var(--color-avail-5)}
.m-stock[data-nivel="4"] .m-stock__pista span{width:80%;background:var(--color-avail-4)}
.m-stock[data-nivel="3"] .m-stock__pista span{width:60%;background:var(--color-avail-3)}
.m-stock[data-nivel="2"] .m-stock__pista span{width:40%;background:var(--color-avail-2)}
.m-stock[data-nivel="1"] .m-stock__pista span{width:15%;background:var(--color-avail-1)}
.m-stock[data-nivel="0"] .m-stock__pista{border-color:var(--color-avail-out)}
.m-stock[data-nivel="0"] .m-stock__pista span{width:0}
.m-stock__frase{margin:var(--s-4) 0 0;font-size:var(--fs-badge);line-height:1.4;color:var(--color-text-muted)}

/* linea-recaudacion v1.0 */
/* RSJ · linea-recaudacion · v1.0 (validada por Miguel el 08/10/2026). Biblioteca de módulos. B01 §5b: «Con este pedido puedes recaudar X €
   (estimado vendiendo a 4 €/rosa)». Variante ficha (bajo el subtotal, fondo verde suave). En el carrito lateral ya va
   dentro del componente (.mc-earn), con el mismo cálculo.
   Icono a la izquierda centrado en vertical y texto centrado en todo el bloque, en todos los tamaños (Miguel, 08/10/2026). Cálculo: rosas × precio sugerido − lo pagado, en euros enteros. */
.m-recauda{display:grid;grid-template-columns:var(--icon-sm) minmax(0,1fr) var(--icon-sm);gap:var(--s-8);align-items:center;text-align:center;margin:0;padding:var(--s-8) var(--s-12);border-radius:var(--radius-sm);background:var(--color-action-soft);font-size:var(--fs-aux);font-weight:var(--fw-medium);color:var(--color-ink);text-wrap:balance}
.m-recauda svg{width:var(--icon-sm);height:var(--icon-sm);color:var(--color-action)}
.m-recauda::after{content:""} /* columna vacía a la derecha: el texto queda centrado en todo el bloque */
.m-recauda[hidden]{display:none}
.m-recauda output{font-size:var(--fs-body);font-weight:var(--fw-bold);color:var(--color-action);font-variant-numeric:tabular-nums}
.m-recauda small{font-size:var(--fs-badge);color:var(--color-text-muted)}

/* bloque-entrega v1.1 */
/* RSJ · bloque-entrega · v1.1 (validado por Miguel el 08/10/2026). Biblioteca de módulos. Un objeto de datos, tres presentaciones:
   tarjetas (home), lista (ficha) y línea (carrito). Iconos de Lucide (sustituyen a los provisionales, H22). Sin el camión
   ilustrado (H25, provisional): cuando exista, entra como mascota-seccion. Sin JS. */
.m-entrega__tarjetas{display:grid;gap:var(--s-12);margin:var(--s-24) 0 0;padding:0;list-style:none}
.m-entrega__t{display:flex;gap:var(--s-16);align-items:flex-start;padding:var(--s-16) var(--s-16);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.m-entrega__ico{display:grid;place-items:center;flex:none;width:var(--s-48);height:var(--s-48);border-radius:var(--radius-md);background:var(--color-brand-100);color:var(--color-brand-600)}
.m-entrega__ico svg{width:var(--icon-md);height:var(--icon-md)}
.m-entrega__k{font-size:var(--fs-aux);font-weight:var(--fw-semibold);color:var(--color-text-muted)}
.m-entrega__v{font-size:var(--fs-body);font-weight:var(--fw-semibold);color:var(--color-ink)}
.m-entrega__notas{display:grid;gap:var(--s-12);margin-top:var(--s-24)}
.m-entrega__lista{display:grid;grid-template-columns:max-content 1fr;gap:var(--s-8) var(--s-16);margin:var(--s-12) 0 0;font-size:var(--fs-aux)}
.m-entrega__lista dt{font-weight:var(--fw-semibold);color:var(--color-text-muted)}
.m-entrega__lista dd{margin:0;color:var(--color-ink)}
.m-entrega[data-variante=lista]{padding:var(--s-16);border-radius:var(--radius-md);background:var(--color-surface-soft)}
.m-entrega[data-variante=lista] h2{font-size:var(--fs-h3)}
.m-entrega__linea{display:flex;gap:var(--s-8);align-items:center;margin:0;font-size:var(--fs-badge);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-entrega__linea svg{width:var(--icon-sm);height:var(--icon-sm);flex:none;color:var(--color-action)}
@media (min-width:768px){.m-entrega__tarjetas{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-16)}}
@media (min-width:1024px){.m-entrega__tarjetas{grid-template-columns:repeat(3,minmax(0,1fr))}.m-entrega__t{padding:var(--s-24)}}
/* v1.1 · Variante «desplegable» para la ficha (Miguel, 08/10/2026): pequeña y cerrada; se abre al pulsar y se cierra al pulsar fuera
   o con Escape. Usa <details>: sin JS se abre y cierra igual; el JS solo añade el cierre al pulsar fuera. */
.m-entrega[data-variante=desplegable]{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface)}
.m-entrega[data-variante=desplegable] summary{display:flex;align-items:center;gap:var(--s-8);min-height:var(--h-touch-min);padding:var(--s-8) var(--s-12);font-size:var(--fs-aux);list-style:none;cursor:pointer}
.m-entrega[data-variante=desplegable] summary::-webkit-details-marker{display:none}
.m-entrega[data-variante=desplegable] summary>svg:first-child{width:var(--icon-sm);height:var(--icon-sm);flex:none;color:var(--color-action)}
.m-entrega__res{flex:1;min-width:0}
.m-entrega__res b{font-weight:var(--fw-semibold)}
.m-entrega__res span{color:var(--color-text-muted)}
.m-entrega__flecha{width:var(--icon-sm);height:var(--icon-sm);flex:none;color:var(--color-text-muted);transition:transform var(--dur-fast) var(--ease)}
.m-entrega[data-variante=desplegable][open] .m-entrega__flecha{transform:rotate(180deg)}
.m-entrega[data-variante=desplegable] .m-entrega__lista{margin:0;padding:0 var(--s-12) var(--s-12);font-size:var(--fs-badge)}
@media (prefers-reduced-motion:reduce){.m-entrega__flecha{transition:none}}

/* calculadora v1.2 */
/* RSJ · calculadora (B01) · v1.2 (validado por Miguel el 09/10/2026). v1.2: cantidad en unidades, cajas debajo; campo de 112 px. Biblioteca de módulos. Estilo «juego» (D13 de la home; aspecto que se
   pide al libro) con los ajustes del libro: tarjeta con --radius-md (antes 20), dos columnas desde 1024 (antes 900),
   botón de presupuesto sin sombra, colores solo de tokens. Modos: data-modo="multiple" (home), "unitaria" (ficha) y "resumida" (v1.1, portada de campaña). */
.m-calc{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--s-24) var(--s-16);background:var(--color-surface)}
.m-calc__grid{display:grid;gap:var(--s-24);align-items:start}
.m-calc__in{display:grid;gap:var(--s-24);text-align:center;min-width:0}
.m-calc__lbl{display:block;font-size:var(--fs-body);font-weight:var(--fw-bold);margin-bottom:var(--s-8)}
.m-calc__hint{margin-top:var(--s-8);font-size:var(--fs-aux);color:var(--color-text-muted)}
.m-calc__money{display:flex;align-items:baseline;justify-content:center;gap:var(--s-4);max-width:300px;margin:0 auto;padding:var(--s-8) var(--s-16);border:2px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface);transition:border-color var(--dur-fast) var(--ease)}
.m-calc__money:focus-within{border-color:var(--color-action)}
.m-calc__money input{width:100%;min-width:0;border:0;outline:0;background:none;text-align:center;font-size:48px;font-weight:var(--fw-bold);line-height:1.15;color:var(--color-action);font-variant-numeric:tabular-nums}
.m-calc__money input::placeholder,.m-calc__val input::placeholder{color:var(--color-border-strong)}
.m-calc__money span{font-size:var(--s-32);font-weight:var(--fw-bold);color:var(--color-action)}
.m-calc__linea{display:grid;gap:var(--s-16);padding:var(--s-16);border:1px dashed var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface-soft)}
.m-calc[data-modo=unitaria] .m-calc__linea{border:0;padding:0;background:none}
.m-calc__linea select{width:100%;min-height:var(--h-touch-min);padding:var(--s-8) var(--s-12);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-surface);font-weight:var(--fw-semibold)}
.m-calc__fila{display:grid;gap:var(--s-16)}
.m-calc__step{display:flex;align-items:center;justify-content:center;gap:var(--s-12)}
.m-calc__step>button{width:var(--h-btn);height:var(--h-btn);flex:none;border-radius:50%;border:2px solid var(--color-action);background:var(--color-surface);color:var(--color-action);font-size:var(--fs-h2);font-weight:var(--fw-bold);line-height:1}
.m-calc__step>button:hover{background:var(--color-action-soft)}
.m-calc__val{display:flex;align-items:baseline;justify-content:center;gap:2px;min-width:96px}
.m-calc__val input{width:112px;border:0;border-bottom:2px solid var(--color-border-strong);outline:0;background:none;text-align:center;font-size:36px;font-weight:var(--fw-bold);color:var(--color-ink);font-variant-numeric:tabular-nums}
.m-calc__val input:focus{border-bottom-color:var(--color-action)}
.m-calc__val span{font-size:var(--fs-h3);font-weight:var(--fw-bold)}
.m-calc__pie{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:var(--s-4) var(--s-16);font-size:var(--fs-aux);color:var(--color-text-muted)}
.m-calc__pie b{color:var(--color-ink)}
.m-calc__link{min-height:var(--h-touch-min);padding:0 var(--s-4);border:0;background:none;color:var(--color-action);font-size:var(--fs-aux);font-weight:var(--fw-semibold);text-decoration:underline}
.m-calc__mas{justify-self:center;font-size:var(--fs-body)}
.m-calc__out{display:grid;gap:var(--s-16);padding:var(--s-24);border-radius:var(--radius-md);background:var(--color-action-soft);text-align:center;min-width:0}
.m-calc__k{font-size:var(--fs-aux);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.04em;color:var(--color-action)}
.m-calc__big{display:block;margin-top:calc(-1*var(--s-8));font-size:52px;font-weight:var(--fw-bold);line-height:1.1;color:var(--color-action);font-variant-numeric:tabular-nums}
.m-calc__big.is-neutro{font-size:var(--fs-h3);color:var(--color-ink)}
.m-calc__obj{display:grid;gap:var(--s-8);padding:var(--s-12) var(--s-16);border-radius:var(--radius-sm);background:var(--color-surface);font-size:var(--fs-aux);line-height:1.5}
.m-calc__barra{display:block;height:var(--s-8);border-radius:var(--radius-pill);background:var(--color-surface-soft);box-shadow:inset 0 0 0 1px var(--color-border);overflow:hidden}
.m-calc__barra>span{display:block;height:100%;width:0;border-radius:inherit;background:var(--color-action);transition:width var(--dur-base) var(--ease)}
.m-calc__obj .btn{min-height:var(--h-touch-min);padding:var(--s-4) var(--s-16);font-size:var(--fs-aux);margin:var(--s-4) auto 0}
.m-calc__ok{color:var(--color-action);font-weight:var(--fw-bold)}
.m-calc__casillas{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-8);margin:0}
.m-calc__casillas>div{padding:var(--s-8);border-radius:var(--radius-sm);background:var(--color-surface)}
.m-calc__casillas dt{font-size:var(--fs-badge);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-calc__casillas dd{margin:0;font-size:var(--fs-body);font-weight:var(--fw-bold);font-variant-numeric:tabular-nums}
.m-calc__eq{display:grid;gap:var(--s-4);font-size:var(--fs-aux);line-height:1.5;text-align:left}
.m-calc__botones{display:grid;gap:var(--s-8)}
.m-calc__email-hint,.m-calc__nota{font-size:var(--fs-badge);color:var(--color-text-muted);line-height:1.4}
@media (prefers-reduced-motion:reduce){.m-calc__barra>span{transition:none}}
@media (min-width:768px){.m-calc__fila{grid-template-columns:1fr 1fr}}
@media (min-width:1024px){.m-calc{padding:var(--s-48)}.m-calc__grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--s-48)}}
@media (max-width:767px){
 .m-calc{border:0;border-radius:0;padding:var(--s-8) 0;background:none}
 .m-calc__out{padding:var(--s-16);margin-inline:calc(-1*var(--gutter));border-radius:0}
 .m-calc__big,.m-calc__money input{font-size:44px}
}
.m-calc__head{display:grid;gap:var(--s-8);max-width:760px;margin-bottom:var(--s-24)}
.m-calc[data-modo=unitaria] .m-calc__head{max-width:640px;margin-inline:auto;text-align:center}
.m-calc__eyebrow{color:var(--color-brand-600)}
.m-calc__head p:last-child{color:var(--color-text-muted)}
.m-calc__lineas{display:grid;gap:var(--s-16)}
.m-calc [hidden]{display:none!important}

/* v1.1 · modo «resumida»: un producto, cajas y precio de venta, resultado y «Añadir»; sin objetivo, equilibrio ni email */
.m-calc[data-modo=resumida] .m-calc__linea{border:0;padding:0;background:none}
.m-calc[data-modo=resumida] .m-calc__casillas{grid-template-columns:1fr 1fr}

/* beneficios v1.0 */
/* RSJ · beneficios · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. Ficha v0.4 («Por qué elegir rosas montadas»), con el mismo aspecto
   que confianza-logistica validado (icono Lucide en cuadro de 48 px brand-100, 24 px hasta el texto), para no tener dos dibujos
   distintos de «icono + título + texto» en la misma ficha. 1 / 2 / 3 columnas. Sin JS. */
.m-beneficios__lista{display:grid;gap:var(--s-24);margin:var(--s-24) 0 0;padding:0;list-style:none}
.m-beneficios__item{display:flex;gap:var(--s-24);align-items:flex-start}
.m-beneficios__ico{display:grid;place-items:center;flex:none;width:var(--s-48);height:var(--s-48);border-radius:var(--radius-md);background:var(--color-brand-100);color:var(--color-brand-600)}
.m-beneficios__ico svg{width:var(--icon-md);height:var(--icon-md)}
.m-beneficios__item h3{font-size:var(--fs-body)}
.m-beneficios__item p{margin-top:var(--s-4);font-size:var(--fs-aux);color:var(--color-text-muted)}
@media (min-width:768px){.m-beneficios__lista{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:1024px){.m-beneficios__lista{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* confianza-logistica v1.0 */
/* RSJ · confianza-logistica · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. Un solo módulo para la franja de la home y el bloque
   de la ficha (M-B3). Icono Lucide de 24 px en cuadro de 48 px brand-100 con --radius-md (libro §5 y §8.8). Sin JS. */
.m-confianza__lista{display:grid;gap:var(--s-24);margin:0;padding:0;list-style:none}
.m-confianza__item{display:flex;gap:var(--s-24);align-items:flex-start}
.m-confianza__ico{display:grid;place-items:center;flex:none;width:var(--s-48);height:var(--s-48);border-radius:var(--radius-md);background:var(--color-brand-100);color:var(--color-brand-600)}
.m-confianza__ico svg{width:var(--icon-md);height:var(--icon-md)}
.m-confianza__t{display:block;font-size:var(--fs-body);font-weight:var(--fw-semibold);line-height:var(--lh-h3)}
.m-confianza__d{display:block;margin-top:var(--s-4);font-size:var(--fs-aux);color:var(--color-text-muted)}
.m-confianza[data-variante=franja]{padding-block:var(--s-32);background:var(--color-surface-soft)}
.m-confianza[data-variante=bloque] h2{margin-bottom:var(--s-24)}
@media (min-width:768px){.m-confianza__lista{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:1024px){.m-confianza[data-variante=franja] .m-confianza__lista{grid-template-columns:repeat(4,minmax(0,1fr))}.m-confianza[data-variante=bloque] .m-confianza__lista{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* cta v1.0 */
/* RSJ · cta (pedidos grandes y entidades) · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. Caja con título, texto y botón secundario.
   El enlace es un dato (PDC-MOD1: /presupuesto/ recomendado). Sin JS. */
.m-cta{display:grid;gap:var(--s-16);align-items:center;padding:var(--s-24);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.m-cta p{max-width:60ch;margin-top:var(--s-8);color:var(--color-text-muted)}
@media (min-width:768px){.m-cta{grid-template-columns:1fr auto;padding:var(--s-32)}}

/* faqs v1.0 */
/* RSJ · faqs (B03, + acordeón) · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. <details>/<summary> nativos: sin JS, accesibles y
   todo el texto en el HTML (bueno para buscadores). Home v0.12: punto de marca a la izquierda, chevron-down de Lucide a la derecha,
   abierta con fondo surface-soft y filete de marca. Animación de 150 ms solo donde el navegador sabe animar la altura. */
.m-faqs{border-top:1px solid var(--color-border)}
.m-faqs__p{border-bottom:1px solid var(--color-border)}
.m-faqs__p summary{position:relative;min-height:var(--h-touch-min);padding:var(--s-16) var(--s-48) var(--s-16) var(--s-32);font-weight:var(--fw-semibold);list-style:none;cursor:pointer}
.m-faqs__p summary::-webkit-details-marker{display:none}
.m-faqs__p summary::before{content:"";position:absolute;left:var(--s-12);top:calc(var(--s-16) + .6em);width:var(--s-8);height:var(--s-8);border-radius:50%;background:var(--color-brand-600)}
.m-faqs__p summary svg{position:absolute;right:var(--s-12);top:calc(var(--s-16) + .1em);width:var(--icon-sm);height:var(--icon-sm);color:var(--color-brand-600);transition:transform 150ms var(--ease)}
.m-faqs__p[open]{background:var(--color-surface-soft);box-shadow:inset 3px 0 0 var(--color-brand-600)}
.m-faqs__p[open] summary svg{transform:rotate(180deg)}
.m-faqs__r{padding:0 var(--s-48) var(--s-16) var(--s-32)}
.m-faqs__r p{max-width:75ch}
@supports (interpolate-size:allow-keywords){.m-faqs{interpolate-size:allow-keywords}.m-faqs__p::details-content{block-size:0;overflow:hidden;transition:block-size 150ms var(--ease),content-visibility 150ms allow-discrete}.m-faqs__p[open]::details-content{block-size:auto}}
@media (prefers-reduced-motion:reduce){.m-faqs__p summary svg{transition:none}.m-faqs__p::details-content{transition:none}}

/* resenas v1.0 */
/* RSJ · resenas (carrusel) · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. D20 y D21: scroll-snap nativo; avanza solo si está a la
   vista y la pestaña activa; espera = 2 s + palabras ÷ 180 ppm de la reseña más larga visible (mínimo 6 s); pausa obligatoria;
   para con ratón, toque o foco; sin avance con «reducir movimiento» (excepción al libro §10 que se pide al libro). Ajustes: tarjetas
   con --radius-md (antes 20). Estrellas #F2B400 / #E3E7E3: se piden al libro como tokens. NO se publica sin reseñas reales. */
.m-resenas{--m-estrella:#F2B400;--m-estrella-off:#E3E7E3}
.m-resenas__cab{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--s-16);margin-bottom:var(--s-24)}
.m-resenas__ctl{display:flex;gap:var(--s-8)}
.m-resenas__btn{display:grid;place-items:center;width:var(--h-touch-min);height:var(--h-touch-min);border:1px solid var(--color-border-strong);border-radius:50%;background:var(--color-surface);color:var(--color-ink)}
.m-resenas__btn:hover{border-color:var(--color-ink)}
.m-resenas__btn svg{width:var(--icon-sm);height:var(--icon-sm)}
.m-resenas__btn .i-play{display:none}
.m-resenas__btn[aria-pressed=true] .i-play{display:block}
.m-resenas__btn[aria-pressed=true] .i-pause{display:none}
.m-resenas__pista{overflow-x:auto;margin-inline:calc(-1*var(--gutter));padding:var(--s-4) var(--gutter) var(--s-8);scroll-padding-inline:var(--gutter);scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none}
.m-resenas__pista::-webkit-scrollbar{display:none}
.m-resenas__pista:focus-visible{outline:2px solid var(--color-action);outline-offset:-2px}
.m-resenas__lista{display:grid;grid-auto-flow:column;grid-auto-columns:86%;gap:var(--s-16);margin:0;padding:0;list-style:none}
.m-resenas__t{position:relative;display:flex;flex-direction:column;gap:var(--s-16);padding:var(--s-24);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);scroll-snap-align:start}
.m-resenas__t::before{content:"\201C";position:absolute;top:var(--s-4);right:var(--s-24);font-size:72px;font-weight:var(--fw-bold);line-height:1;color:var(--color-brand-100)}
.m-resenas__estrellas{display:flex;gap:2px}
.m-resenas__estrellas svg{width:18px;height:18px;fill:var(--m-estrella-off);stroke:none}
.m-resenas__estrellas svg.on{fill:var(--m-estrella)}
.m-resenas__t blockquote{flex:1;margin:0}
.m-resenas__t blockquote p{line-height:1.55}
.m-resenas__t footer{display:flex;gap:var(--s-12);align-items:center;padding-top:var(--s-12);border-top:1px solid var(--color-border)}
.m-resenas__av{display:grid;place-items:center;flex:none;width:40px;height:40px;border-radius:50%;background:var(--color-brand-100);color:var(--color-brand-700);font-size:var(--fs-aux);font-weight:var(--fw-bold)}
.m-resenas__t footer b{display:block;font-size:var(--fs-aux)}
.m-resenas__t footer span span{display:block;font-size:var(--fs-badge);line-height:1.4;color:var(--color-text-muted)}
.m-resenas__t .m-resenas__compra{color:var(--color-action);font-weight:var(--fw-semibold)}
@media (min-width:768px){.m-resenas__lista{grid-auto-columns:calc((100% - var(--s-16))/2)}}
@media (min-width:1024px){.m-resenas__lista{grid-auto-columns:calc((100% - 2*var(--s-24))/3);gap:var(--s-24)}.m-resenas__pista{margin-inline:0;padding-inline:0;scroll-padding-inline:0}}
@media (prefers-reduced-motion:reduce){.m-resenas__pista{scroll-behavior:auto}}

/* barra-fija-movil v1.1 */
/* RSJ · barra-fija-movil · v1.1 (validado por Miguel el 14/10/2026; v1.0 el 08/10). v1.1: la variante ficha sigue al selector y añade al carrito. Biblioteca de módulos. Solo por debajo de 768 px; capa --z-sticky.
   Variantes: data-variante="ficha" (añadir con total) y "home" (aparece solo con algo en el carrito: clase is-on). */
.m-barra{position:fixed;z-index:var(--z-sticky);left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:space-between;gap:var(--s-12);padding:var(--s-12) var(--gutter) calc(var(--s-12) + env(safe-area-inset-bottom,0px));background:var(--color-surface);border-top:1px solid var(--color-border);box-shadow:var(--shadow-sm);transition:transform var(--dur-base) var(--ease)}
.m-barra[data-variante=home]:not(.is-on){transform:translateY(110%);visibility:hidden}
.m-barra__dato{display:grid;line-height:1.3;min-width:0}
.m-barra__total{font-size:var(--fs-h3);font-weight:var(--fw-bold);font-variant-numeric:tabular-nums}
.m-barra__det{font-size:var(--fs-aux);font-weight:var(--fw-medium);color:var(--color-text-muted)}
.m-barra .btn{flex:none}
@media (min-width:768px){.m-barra{display:none}}
.m-barra__det{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* carrito-lateral v1.6 */
/* =====================================================================
   RSJ · carrito-lateral (minicart) · v1.6 (validado por Miguel el 15/10/2026; «Producto añadido» en success, sin WhatsApp al pie) · Biblioteca de módulos.
   Cambios frente a v1.2 (libro v0.9): pantalla completa por debajo de 768 px (antes 640); capas, velo y sombra con
   tokens (--z-overlay, --z-drawer, --overlay, --shadow-lg); duraciones --dur-base; selector de cajas y «Seguir
   comprando» a 44 px; tamaños solo de la escala del libro; iconos de Lucide; botón principal de 48 px (el grande
   de 56 es solo el de la ficha, libro §8.2)
   Depende de los tokens del libro de estilo (base de la ficha v0.2):
   --color-*, --font-ui, --radius-*, --s-*, --fs-*, y de las clases
   comunes .btn, .btn-primary, .btn-secondary, .btn-block, .num,
   .visually-hidden y .tbd-tag. En demo/index.html van copiados.
   Todas las clases propias empiezan por .mc- para no chocar con nada.
   ===================================================================== */

/* Variables propias del módulo */
.mc{--drawer-w:480px}
body.mc-lock{overflow:hidden}
.mc [hidden]{display:none!important}
.mc-scrim{position:fixed;inset:0;z-index:var(--z-overlay);background:var(--overlay);opacity:0;visibility:hidden;transition:opacity var(--dur-base) var(--ease),visibility 0s var(--dur-base)}
.mc-scrim.is-open{opacity:1;visibility:visible;transition:opacity var(--dur-base) var(--ease)}
.mc{position:fixed;top:0;right:0;bottom:0;z-index:var(--z-drawer);width:min(var(--drawer-w),100%);
  display:flex;flex-direction:column;background:var(--color-surface);
  border-radius:var(--radius-lg) 0 0 var(--radius-lg);box-shadow:var(--shadow-lg);
  transform:translateX(100%);visibility:hidden;transition:transform var(--dur-base) var(--ease),visibility 0s var(--dur-base)}
.mc.is-open{transform:none;visibility:visible;transition:transform var(--dur-base) var(--ease)}

/* Cabecera fija */
.mc-head{flex:none;display:flex;align-items:center;gap:var(--s-12);padding:var(--s-16) var(--s-16) var(--s-12) var(--s-24)}
.mc-head h2{font-size:var(--fs-h3);line-height:1.2;font-weight:700}
.mc-head h2:focus{outline:none}
.mc-head .count{font-size:var(--fs-aux);font-weight:500;color:var(--color-text-muted)}
.mc-close{margin-left:auto;flex:none;width:var(--h-touch-min);height:var(--h-touch-min);display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);background:none}
.mc-close:hover{background:var(--color-surface-soft)}
.mc-close svg{width:var(--icon-md);height:var(--icon-md)}

/* Aviso de producto añadido (fijo, compacto) */
.mc-added{flex:none;display:flex;align-items:center;gap:var(--s-12);margin:0 var(--s-16) var(--s-12);padding:var(--s-12) var(--s-16);border-radius:var(--radius-md);background:var(--color-success-soft);color:var(--color-success)} /* v1.6: siempre verde, también con tema */
.mc-added svg{width:var(--icon-md);height:var(--icon-md);flex:none}
.mc-added b{display:block;font-size:var(--fs-body);font-weight:700;line-height:1.3}
.mc-added span{display:block;font-size:var(--fs-aux);font-weight:500;color:var(--color-ink)}

/* Lista: ÚNICA zona con scroll */
.mc-list{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
  border-block:1px solid var(--color-border);padding-inline:var(--s-16) var(--s-16)}
/* Scroll de la lista: fino y discreto, sobre fondo blanco */
.mc-list{background:var(--color-surface);scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}
.mc-list::-webkit-scrollbar{width:6px}
.mc-list::-webkit-scrollbar-track{background:transparent}
.mc-list::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}
.mc-list::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}
.mc-list::-webkit-scrollbar-button{display:none;height:0}
.mc-line{display:grid;grid-template-columns:var(--s-64) minmax(0,1fr) var(--h-touch-min);grid-template-areas:"img info del" "buy buy buy" "save save save";gap:var(--s-12);padding-block:var(--s-16);border-bottom:1px solid var(--color-border)}
.mc-line:last-child{border-bottom:0}
.mc-line.is-new{animation:flash 1.6s ease-out}
@media (prefers-reduced-motion:reduce){.mc-line.is-new{animation:none}}
@keyframes flash{from{background:var(--color-action-soft)}to{background:transparent}}
.mc-img{grid-area:img;width:var(--s-64);height:var(--s-64);border:1px solid var(--color-border);border-radius:var(--radius-sm);overflow:hidden;background:var(--color-surface)}
.mc-img img{width:100%;height:100%;object-fit:cover}
.mc-info{grid-area:info;display:flex;flex-direction:column;gap:2px;min-width:0}
.mc-name{font-size:var(--fs-aux);font-weight:700;line-height:1.35}
.mc-var{font-size:var(--fs-badge);font-weight:500;color:var(--color-text-muted)}
.mc-units{font-size:var(--fs-badge);font-weight:600;color:var(--color-ink)}
.mc-del{grid-area:del;width:var(--h-touch-min);height:var(--h-touch-min);display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);background:none;color:var(--color-text-muted)}
.mc-del:hover{background:var(--color-brand-100);color:var(--color-error)}
.mc-del svg{width:var(--icon-sm);height:var(--icon-sm)}
.mc-buy{grid-area:buy;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:end;gap:var(--s-12)}
.mc-lbl{display:block;font-size:var(--fs-badge);font-weight:500;color:var(--color-text-muted);margin-bottom:2px}
.mc-price s{font-size:var(--fs-badge);color:var(--color-text-muted);margin-right:var(--s-4)}
.mc-price b{font-size:var(--fs-body);font-weight:700;color:var(--color-action)}
.mc-price .per{font-size:var(--fs-badge);font-weight:500;color:var(--color-text-muted)}
.mc .stepper{display:inline-flex;align-items:stretch;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);overflow:hidden}
.mc .stepper button{width:var(--h-touch-min);min-height:var(--h-touch-min);border:0;background:var(--color-surface-soft);font-size:var(--fs-h3);font-weight:600;line-height:1}
.mc .stepper button:hover{background:var(--color-action-soft)}
.mc .stepper button:disabled{opacity:.4;cursor:not-allowed;background:var(--color-surface-soft)}
.mc .stepper input{width:var(--s-64);border:0;border-inline:1px solid var(--color-border-strong);text-align:center;font-weight:600;font-variant-numeric:tabular-nums;-moz-appearance:textfield;appearance:textfield;background:var(--color-surface)}
.mc .stepper input::-webkit-inner-spin-button,.mc .stepper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.mc-qty{text-align:center}
.mc-sub{text-align:right}
.mc-sub output{font-size:var(--fs-body);font-weight:700}
.mc-save{grid-area:save;margin-top:-4px;font-size:var(--fs-badge);font-weight:500;color:var(--color-text-muted)}
.mc-save b{color:var(--color-action);font-weight:700}

.mc-empty{padding:var(--s-48) var(--s-16);text-align:center;display:grid;gap:var(--s-12);justify-items:center;color:var(--color-text-muted)}
.mc-ship-inlist{display:none!important}

/* Pie fijo */
.mc-foot{flex:none;display:grid;gap:var(--s-12);padding:var(--s-16) var(--s-16) calc(var(--s-16) + env(safe-area-inset-bottom,0px))}
.mc-ship{display:flex;gap:var(--s-8);align-items:center;font-size:var(--fs-badge);font-weight:500;color:var(--color-text-muted)}
.mc-ship svg{width:var(--icon-sm);height:var(--icon-sm);flex:none;color:var(--color-action)}
.mc-savings{display:flex;align-items:center;gap:var(--s-12);padding:var(--s-12) var(--s-16);border-radius:var(--radius-md);background:var(--color-action-soft)}
.mc-savings svg{width:var(--s-32);height:var(--s-32);flex:none;color:var(--color-action)}
.mc-savings span{font-size:var(--fs-aux);font-weight:500}
.mc-savings output{margin-left:auto;font-size:var(--fs-h3);font-weight:700;color:var(--color-action)}
.mc-totals{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:var(--s-16);row-gap:var(--s-8)}
.mc-total-lbl b{font-weight:700}
.mc-total-lbl small{font-size:var(--fs-badge);font-weight:500;color:var(--color-text-muted)}
.mc-total-lbl .net{font-size:var(--fs-aux);font-weight:500;color:var(--color-text-muted)}
.mc-total-val{font-size:var(--fs-price);font-weight:700;line-height:1.15;text-align:right}
/* Recaudación estimada: bajo el botón principal, centrada */
.mc-earn{display:block;text-wrap:balance;padding-block:var(--s-4);text-align:center;font-size:var(--fs-aux);font-weight:500;line-height:1.35;color:var(--color-ink)}
.mc-earn svg{display:inline-block;width:var(--icon-sm);height:var(--icon-sm);margin-right:var(--s-8);vertical-align:-4px;color:var(--color-action)}
.mc-earn output{font-size:var(--fs-body);font-weight:700;color:var(--color-action)}
.mc-earn small{font-size:var(--fs-badge);font-weight:500;white-space:nowrap}
.mc-earn-short{display:none}
.mc-ctas{display:grid;gap:var(--s-8)}
.mc-ctas .btn-primary{min-height:var(--h-btn)}

/* Aviso de deshacer */
.mc-toast{position:absolute;left:var(--s-16);right:var(--s-16);bottom:calc(100% + var(--s-8));display:flex;align-items:center;gap:var(--s-8);padding:var(--s-4) var(--s-4) var(--s-4) var(--s-16);border-radius:var(--radius-sm);background:var(--color-ink);color:var(--color-surface);box-shadow:var(--shadow-sm);font-size:var(--fs-aux);font-weight:500}
.mc-toast button{margin-left:auto;border:0;background:none;color:var(--color-surface);font-weight:600;text-decoration:underline;text-underline-offset:3px;min-height:var(--h-touch-min);padding:0 var(--s-8)}
.mc-toast button:focus-visible{outline-color:var(--color-surface);outline-offset:-2px}
.mc-foot{position:relative} /* para colocar el aviso de «deshacer» */


/* ===== Pantallas bajas (p. ej. iPhone SE con la barra del navegador): se compacta lo fijo para que la lista no quede en nada ===== */
@media (max-height:740px){
  .mc-added span{display:none}
  .mc-ship{display:none}
  .mc-ship-inlist{display:flex!important;margin-block:var(--s-8) var(--s-16)}
  .mc-savings{padding:var(--s-8) var(--s-12)}
  .mc-savings svg{display:none}
  .mc-savings output{font-size:var(--fs-body)}
  .mc-total-val{font-size:var(--fs-h3)}
  .mc-ctas .btn-secondary{min-height:var(--h-touch-min);border-color:transparent;text-decoration:underline}
}

/* ===== Móvil: 100 % de ancho y alto; solo la lista hace scroll ===== */
@media (max-width:767px){
  .mc-price s{display:block;margin-right:0}
  .mc{width:100%;border-radius:0;box-shadow:none}
  .mc-head{padding:var(--s-12) var(--s-8) var(--s-8) var(--s-16)}
  .mc-added{margin:0 var(--s-12) var(--s-8);padding:var(--s-8) var(--s-12)}
  .mc-added svg{width:var(--icon-sm);height:var(--icon-sm)}
  .mc-added span{font-size:var(--fs-badge)}
  .mc-list{padding-inline:var(--s-12)}
  .mc-line{grid-template-columns:var(--s-64) minmax(0,1fr) var(--h-touch-min);gap:var(--s-8) var(--s-12);padding-block:var(--s-12)}
  .mc-img{width:var(--s-64);height:var(--s-64)}
  .mc-foot{gap:var(--s-8);padding:var(--s-12) var(--s-12) calc(var(--s-12) + env(safe-area-inset-bottom,0px))}
  .mc-savings{padding:var(--s-8) var(--s-12)}
  .mc-savings svg{width:var(--icon-md);height:var(--icon-md)}
  .mc-savings output{font-size:var(--fs-body)}
  .mc-ctas .btn-secondary{min-height:var(--h-touch-min);padding-block:var(--s-8)}
  .mc-savings span{font-size:var(--fs-badge);line-height:1.3}
  .mc-earn-long{display:none}
  .mc-earn-short{display:inline}
}

/* aviso-flotante v1.0 */
/* RSJ · aviso-flotante · v1.0 (validado por Miguel el 08/10/2026). Biblioteca de módulos. Libro §8.6: fondo ink, texto blanco 14,
   4 s (6 s con acción), se pausa con ratón o foco, se puede cerrar, role=status, por encima del carrito (--z-toast).
   Abajo y centrado en móvil; abajo a la derecha desde 1024. Requiere tokens.css y base.css y aviso.js. */
.m-aviso{position:fixed;z-index:var(--z-toast);left:50%;bottom:calc(var(--s-16) + env(safe-area-inset-bottom,0px));transform:translate(-50%,var(--s-8));width:max-content;max-width:calc(100% - 2*var(--gutter));display:flex;align-items:center;gap:var(--s-8);padding:var(--s-4) var(--s-4) var(--s-4) var(--s-16);border-radius:var(--radius-sm);background:var(--color-ink);color:var(--color-surface);box-shadow:var(--shadow-sm);font-size:var(--fs-aux);line-height:1.4;opacity:0;visibility:hidden;transition:opacity var(--dur-base) var(--ease),transform var(--dur-base) var(--ease),visibility var(--dur-base)}
.m-aviso.is-on{opacity:1;visibility:visible;transform:translate(-50%,0)}
.m-aviso__txt{padding-block:var(--s-8)}
.m-aviso__accion{min-height:var(--h-touch-min);padding:0 var(--s-8);border:0;background:none;color:var(--color-surface);font-weight:var(--fw-semibold);text-decoration:underline;text-underline-offset:3px}
.m-aviso__cerrar{display:grid;place-items:center;width:var(--h-touch-min);height:var(--h-touch-min);border:0;border-radius:var(--radius-sm);background:none;color:var(--color-surface)}
.m-aviso__cerrar svg{width:var(--icon-sm);height:var(--icon-sm)}
.m-aviso button:focus-visible{outline-color:var(--color-surface);outline-offset:-2px}
@media (min-width:1024px){.m-aviso{left:auto;right:var(--s-24);bottom:var(--s-24);transform:translateY(var(--s-8))}.m-aviso.is-on{transform:none}}

/* composición de la plantilla ficha-producto (no es módulo) */
.demo-compra{display:grid;gap:var(--s-24)}.demo-compra__col{display:grid;gap:var(--s-12);align-content:start}@media (min-width:1024px){.demo-compra{grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:var(--s-48);align-items:start}}.demo-compra{padding-top:var(--s-16)}.demo-compra__izq{display:grid;gap:var(--s-12);align-content:start;min-width:0}

/* PROPUESTA selector-variante 1.0 y caracteristicas 1.0 (NO viene de la biblioteca): src/propuestas.css del paquete web_ficha_producto_v0.9.1, tal cual */
/* PROPUESTAS de módulo de la ficha v0.9 (aprobadas en diseño por Miguel el 20/10/2026). NO son de la biblioteca: el «Gestor de módulos» las programa como selector-variante 1.0 y caracteristicas 1.0. Hasta entonces, este fichero es la referencia. */

/* ===== PROPUESTA (no es de la biblioteca): selector-variante (1.1 desde el 29/10/2026) y tarjeta «Características» desplegable =====
   Muestra de la ficha v0.9 para Miguel. Si se aprueba, la programa el «Gestor de módulos» como módulos propios. */
.v09-var{display:grid;gap:var(--s-8)}
.v09-var__tit{margin:0;font-size:var(--fs-aux);font-weight:var(--fw-semibold);color:var(--color-ink)}
.v09-var__aux{margin:0;font-size:var(--fs-badge);color:var(--color-text-muted)}
/* selector-variante 1.1 (Miguel, 29/10/2026): cuadrícula de tarjetas con la imagen de cada variante, 5 por fila desde 768 px y 2 en móvil */
.v09-var__lista{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-8);margin:0;padding:0;list-style:none}
@media (min-width:768px){.v09-var__lista{grid-template-columns:repeat(5,minmax(0,1fr))}}
.v09-var__lista>li{display:flex}
.v09-var__op{position:relative;display:flex;flex-direction:column;align-items:stretch;gap:var(--s-8);width:100%;padding:var(--s-8);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-ink);font-weight:var(--fw-medium);text-decoration:none;transition:border-color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}
.v09-var__op:hover{border-color:var(--color-action)}
.v09-var__op[aria-current="true"]{border:2px solid var(--color-action);background:var(--color-action-soft);padding:calc(var(--s-8) - 1px);font-weight:var(--fw-semibold)}
.v09-var__img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;border-radius:var(--radius-sm)}
/* el título: 12 px (--fs-badge, también en móvil), siempre entero (Miguel, 29/10/2026: sin límite de líneas) */
.v09-var__op span{font-size:var(--fs-badge);line-height:1.3;overflow-wrap:anywhere}
.v09-var__op small{margin-top:auto;font-size:var(--fs-aux);font-weight:var(--fw-semibold);color:var(--color-ink);white-space:nowrap}
.v09-var__op svg{display:none;position:absolute;top:calc(var(--s-8) + 4px);right:calc(var(--s-8) + 4px);width:22px;height:22px;padding:4px;border-radius:50%;background:var(--color-action);color:#fff}
.v09-var__op[aria-current="true"] svg{display:block}
.v09-var__op:focus-visible{outline:2px solid var(--color-action);outline-offset:2px}
/* composición: la tarjeta va pegada a la calculadora (24 px), sin el hueco de sección entre las dos */
.v09-car-sec{padding-block:var(--s-48) 0}.v09-car-sec+.sec{padding-top:var(--s-24)}
.v09-car{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);padding:var(--s-24)}
.v09-car h2{margin:0 0 var(--s-12);font-size:var(--fs-h3);line-height:var(--lh-h3)}
.v09-car__txt{position:relative;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--color-ink);max-width:80ch}
.v09-car__txt p,.v09-car__txt ul{margin:0 0 var(--s-12)}
.v09-car__txt ul{padding-left:1.2em}
.v09-car__nota{color:var(--color-text-muted);font-size:var(--fs-aux)}
.v09-car:not(.is-open) .v09-car__txt{max-height:calc(var(--lh-body) * 3em);overflow:hidden}
.v09-car:not(.is-open) .v09-car__txt::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1.6em;background:linear-gradient(rgba(255,255,255,0),var(--color-surface))}
.v09-car__btn{display:inline-flex;align-items:center;gap:var(--s-8);min-height:var(--h-touch-min);margin-top:var(--s-8);padding:0;border:0;background:none;color:var(--color-action);font:inherit;font-size:var(--fs-aux);font-weight:var(--fw-semibold);cursor:pointer}
.v09-car__btn svg{width:18px;height:18px;transition:transform var(--dur-base) var(--ease)}
.v09-car.is-open .v09-car__btn svg{transform:rotate(180deg)}
.v09-car__btn:focus-visible{outline:2px solid var(--color-action);outline-offset:2px;border-radius:var(--radius-sm)}
@media (max-width:767px){.v09-car{padding:var(--s-16)}}

/* «Más información» (guía y vídeo con formato y pestañas; encargo v29 §6, 30/10/2026; v3_bloqueInfo y ficha.js) */
.sj-info{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);padding:var(--s-24) var(--s-32)}
.sj-info h2{margin:0 0 var(--s-16);font-size:var(--fs-h3);line-height:var(--lh-h3)}
.sj-info__tabs{display:flex;gap:var(--s-8);margin:0 0 var(--s-24);border-bottom:1px solid var(--color-border)}
.sj-info__tab{min-height:44px;padding:0 var(--s-16);margin-bottom:-1px;border:0;border-bottom:3px solid transparent;background:none;color:var(--color-text-muted);font:inherit;font-weight:var(--fw-semibold);cursor:pointer}
.sj-info__tab[aria-selected="true"]{color:var(--color-ink);border-bottom-color:var(--color-action)}
.sj-info__tab:focus-visible,.sj-info__panel:focus-visible,.sj-info__mas:focus-visible,.sj-info__play:focus-visible{outline:2px solid var(--color-action);outline-offset:2px;border-radius:var(--radius-sm)}
.sj-txt{max-width:72ch;line-height:1.65;color:var(--color-ink)}
.sj-txt>:first-child{margin-top:0}
.sj-txt p{margin:0 0 var(--s-16)}
.sj-txt h3{margin:var(--s-32) 0 var(--s-12);font-size:var(--fs-h3);line-height:var(--lh-h3)}
.sj-txt ul{margin:0 0 var(--s-16);padding:0;list-style:none}
.sj-txt ul:not(.sj-txt__chips) li{position:relative;margin:0 0 var(--s-8);padding-left:1.6em}
.sj-txt ul:not(.sj-txt__chips) li::before{content:"";position:absolute;left:.2em;top:.55em;width:.7em;height:.7em;border-radius:50%;background:var(--color-action-soft);border:1px solid var(--color-action)}
.sj-txt__chips{display:flex;flex-wrap:wrap;gap:var(--s-8)}
.sj-txt__chips li{padding:var(--s-4) var(--s-12);border-radius:var(--radius-pill);background:var(--color-action-soft);font-size:var(--fs-aux);line-height:1.4}
.sj-info__guia{position:relative}
.sj-info__guia:not(.is-open):not(.sj-info__guia--entera) .sj-txt{max-height:420px;overflow:hidden;position:relative}
.sj-info__guia:not(.is-open):not(.sj-info__guia--entera) .sj-txt::after{content:"";position:absolute;left:0;right:0;bottom:0;height:4em;background:linear-gradient(rgba(255,255,255,0),var(--color-surface))}
.sj-info__mas{display:inline-flex;align-items:center;gap:var(--s-8);min-height:var(--h-touch-min);margin-top:var(--s-8);padding:0;border:0;background:none;color:var(--color-action);font:inherit;font-weight:var(--fw-semibold);cursor:pointer}
.sj-info__mas[hidden]{display:none}
.sj-info__mas svg{width:18px;height:18px;transition:transform var(--dur-base) var(--ease)}
.sj-info__guia.is-open .sj-info__mas svg{transform:rotate(180deg)}
.sj-info__vid{display:grid;gap:var(--s-24)}
.sj-info__player{position:relative;aspect-ratio:16/9;border-radius:var(--radius-md);overflow:hidden;background:var(--color-border)}
.sj-info__player iframe,.sj-info__play{position:absolute;inset:0;width:100%;height:100%;border:0}
.sj-info__play{padding:0;background:none;cursor:pointer}
.sj-info__play img{width:100%;height:100%;object-fit:cover;display:block}
.sj-info__ico{position:absolute;left:50%;top:50%;width:68px;height:48px;margin:-24px 0 0 -34px;border-radius:12px;background:rgba(0,0,0,.72);color:#fff;display:flex;align-items:center;justify-content:center}
.sj-info__ico svg{width:24px;height:24px}
.sj-info__play:hover .sj-info__ico{background:var(--color-action)}
@media (min-width:1024px){.sj-info__vid--dos{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start}.sj-info__vid--dos .sj-info__video{position:sticky;top:calc(var(--header-h,64px) + var(--s-16))}}
@media (max-width:767px){.sj-info{padding:var(--s-16)}.sj-info__tab{padding:0 var(--s-12)}}
