/**
 * Roxty Builder — Frontend CSS v1.0.0
 * Estilos base para páginas construidas con el builder.
 */

/* ── Tipografía global (Global Settings) ─────────────────────────────────── */
/* Las CSS vars --rxty-font-body/--rxty-font-heading ya se inyectan en wp_head
   (class-rxty-builder-global-settings.php), pero nada las consumía: la
   tipografía elegida en Global Settings no se veía en el sitio publicado. */
.rxty-builder-page {
  font-family: var(--rxty-font-body, inherit);
  font-size: var(--rxty-font-size-base, inherit);
}
.rxty-builder-page h1, .rxty-builder-page h2, .rxty-builder-page h3,
.rxty-builder-page h4, .rxty-builder-page h5, .rxty-builder-page h6,
.rxty-builder-page .rxty-heading {
  font-family: var(--rxty-font-heading, var(--rxty-font-body, inherit));
  font-weight: var(--rxty-font-heading-weight, 700);
}

/* ── Layout: secciones y containers ──────────────────────────────────────── */
.rxty-builder-page { width:100%; }

.rxty-section {
  position:relative;
  width:100%;
  box-sizing:border-box;
}

.rxty-container {
  max-width:1200px;
  margin-left:auto;
  margin-right:auto;
  padding-left:1.5rem;
  padding-right:1.5rem;
  width:100%;
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap;
  gap:20px;
  align-items:flex-start;
}

.rxty-container-full {
  width:100%;
  padding-left:0;
  padding-right:0;
  max-width:none;
}

.rxty-container-el {
  position:relative;
  box-sizing:border-box;
  min-height:1px;
}

/* ── Video background ────────────────────────────────────────────────────── */
.rxty-video-bg {
  position:absolute;
  inset:0;
  overflow:hidden;
  z-index:0;
  pointer-events:none;
}
.rxty-video-bg video,
.rxty-video-bg iframe {
  position:absolute;
  top:50%;
  left:50%;
  min-width:100%;
  min-height:100%;
  width:auto;
  height:auto;
  transform:translate(-50%,-50%);
  object-fit:cover;
  border:none;
}
/* Ensure section content sits above the video */
.rxty-section > .rxty-container,
.rxty-section > .rxty-container-full {
  position:relative;
  z-index:1;
}

/* ── Botones ─────────────────────────────────────────────────────────────── */
.rxty-btn { display:inline-flex;align-items:center;gap:.4rem;padding:.7rem 1.5rem;border-radius:8px;font-weight:500;font-size:.9375rem;text-decoration:none;transition:background .2s,color .2s,transform .15s,border-color .2s;border:1.5px solid transparent;cursor:pointer;white-space:nowrap;line-height:1; }
.rxty-btn--primary { background:#EB1B1B;color:#fff;border-color:#EB1B1B; }
.rxty-btn--primary:hover { background:#c91414;border-color:#c91414;color:#fff;transform:translateY(-2px); }
.rxty-btn--outline { background:transparent;color:inherit;border-color:currentColor; }
.rxty-btn--outline:hover { opacity:.75;transform:translateY(-2px); }
.rxty-btn--ghost { background:transparent;border-color:transparent;color:#EB1B1B; }
.rxty-btn--ghost:hover { text-decoration:underline; }

/* ── Imagen ──────────────────────────────────────────────────────────────── */
.rxty-image-widget { display:block; }
.rxty-image-widget img.rxty-img { display:block;max-width:100%;height:auto; }
.rxty-image-caption { font-size:.875rem;color:rgba(0,0,0,.55);margin-top:.5rem;text-align:center; }

/* ── Heading / Text ──────────────────────────────────────────────────────── */
.rxty-heading { margin:0 0 1rem;line-height:1.2; }
.rxty-text-widget p { margin:0 0 1em; } .rxty-text-widget p:last-child { margin-bottom:0; }

/* ── Tabs ────────────────────────────────────────────────────────────────── */
.rxty-tabs__nav { display:flex;border-bottom:2px solid #e5e5e5;flex-wrap:wrap; }
.rxty-tabs__btn { background:none;border:none;padding:.625rem 1.25rem;font-size:.9rem;font-weight:500;color:#666;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .2s; }
.rxty-tabs__btn:hover { color:#333; }
.rxty-tabs__btn.is-active { color:#EB1B1B;border-bottom-color:#EB1B1B; }
.rxty-tabs__panel { display:none;padding:1.25rem 0; }
.rxty-tabs__panel.is-active { display:block; }

/* ── Accordion ───────────────────────────────────────────────────────────── */
.rxty-accordion { display:flex;flex-direction:column;gap:4px; }
.rxty-accordion__btn { width:100%;display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;background:#f8f8f8;border:1px solid #e5e5e5;border-radius:6px;font-weight:500;font-size:.9375rem;cursor:pointer;text-align:left;transition:background .2s,color .2s; }
.rxty-accordion__item.is-open .rxty-accordion__btn { background:#EB1B1B;color:#fff;border-color:#EB1B1B;border-radius:6px 6px 0 0; }
.rxty-accordion__icon { transition:transform .3s;flex-shrink:0; }
.rxty-accordion__item.is-open .rxty-accordion__icon { transform:rotate(180deg); }
.rxty-accordion__panel { padding:.75rem 1rem;border:1px solid #e5e5e5;border-top:none;border-radius:0 0 6px 6px;display:none; }
.rxty-accordion__item.is-open .rxty-accordion__panel { display:block; }

/* ── Toggle ──────────────────────────────────────────────────────────────── */
.rxty-toggle__icon { transition:transform .3s;flex-shrink:0; }
.rxty-toggle.is-open .rxty-toggle__icon { transform:rotate(180deg); }

/* ── Alert ───────────────────────────────────────────────────────────────── */
.rxty-alert { padding:.875rem 1.125rem;border-radius:6px;position:relative;border-left:4px solid; }
.rxty-alert--info    { background:#eff6ff;border-color:#3b82f6;color:#1e40af; }
.rxty-alert--success { background:#f0fdf4;border-color:#10b981;color:#065f46; }
.rxty-alert--warning { background:#fffbeb;border-color:#f59e0b;color:#92400e; }
.rxty-alert--error   { background:#fef2f2;border-color:#ef4444;color:#991b1b; }
.rxty-alert__title   { display:block;font-weight:700;margin-bottom:.25rem; }
.rxty-alert__close   { position:absolute;top:.625rem;right:.875rem;background:none;border:none;cursor:pointer;font-size:1.25rem;line-height:1;opacity:.6; }
.rxty-alert__close:hover { opacity:1; }

/* ── Counter ─────────────────────────────────────────────────────────────── */
.rxty-counter__number { display:block; }

/* ── Progress Bar ────────────────────────────────────────────────────────── */
.rxty-progress__bar { will-change:width; }

/* ── Testimonial ─────────────────────────────────────────────────────────── */
.rxty-testimonial--card { padding:1.5rem;background:#fff;border-radius:8px;box-shadow:0 2px 16px rgba(0,0,0,.08); }
.rxty-testimonial--bordered { padding:1.5rem;border-left:4px solid #EB1B1B; }
.rxty-testimonial__stars { color:#f59e0b;font-size:1.125rem;margin-bottom:.75rem; }
.rxty-testimonial__text { font-style:italic;color:#555;margin:0 0 1rem;font-size:.9375rem;line-height:1.7; }
.rxty-testimonial__author { display:flex;align-items:center;gap:.75rem; }
.rxty-testimonial__avatar { width:44px;height:44px;border-radius:50%;object-fit:cover; }
.rxty-testimonial__name { display:block;font-weight:600;font-size:.9rem; }
.rxty-testimonial__role { font-size:.8rem;color:#888; }

/* ── Tabs interactivas JS ────────────────────────────────────────────────── */
/* Accordion / Toggle JS (mínimo) está en frontend.js */

/* ── Theme Builder Canvas ────────────────────────────────────────────────── */
body.rxty-theme-canvas { margin:0;padding:0; }

/* Locations: header, content, footer */
.rxty-site-header { position:relative;z-index:100; }
.rxty-site-content { position:relative; }
.rxty-site-footer  { position:relative; }

/* Fallback loop styles (canvas fallback cuando no hay template de contenido) */
.rxty-fallback-content { width:100%;max-width:1200px;margin:0 auto;padding:2rem 1.5rem; }

/* ── Page Layout: Full Width ("Estructura de página") ───────────────────────
   Header/footer siguen siendo los del tema; este wrapper solo se asegura de
   no heredar ningún max-width/padding boxed que el page.php del tema le
   pondría normalmente al contenido. */
.rxty-page-layout-fullwidth { width:100%;max-width:none;margin:0;padding:0; }
.rxty-posts-grid .rxty-post-card a { color:inherit; }
.rxty-wp-pagination { margin-top:2rem;display:flex;justify-content:center; }

/* Theme Builder preview indicator (solo en admin con query var) */
body.rxty-theme-preview-mode::before {
  content:'Roxty Builder — Vista previa del Theme Builder';
  display:block;
  background:#EB1B1B;color:#fff;
  text-align:center;padding:.35rem;font-size:.8rem;font-weight:500;
  position:fixed;top:0;left:0;right:0;z-index:9999;
}

/* ── Slider / Carousel ───────────────────────────────────────────────────── */

.rxty-slider {
  position: relative;
  overflow: hidden;
  width: 100%;
  height: var(--slider-height, 500px);
  background: #111;
  user-select: none;
  -webkit-user-select: none;
}

.rxty-slider__track {
  position: relative;
  width: 100%;
  height: 100%;
}

/* ── Slides (shared) ─── */
.rxty-slide {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
}

.rxty-slide__overlay {
  position: absolute;
  inset: 0;
}

.rxty-slide__content {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 2rem 3.5rem;
  z-index: 1;
}
.rxty-slide__content--center { align-items: center; text-align: center; }
.rxty-slide__content--left   { align-items: flex-start; text-align: left; }
.rxty-slide__content--right  { align-items: flex-end; text-align: right; }

.rxty-slide__title {
  margin: 0 0 .625rem;
  font-size: clamp(1.5rem, 4vw, 3rem);
  font-weight: 700;
  line-height: 1.15;
  text-shadow: 0 2px 8px rgba(0,0,0,.35);
}

.rxty-slide__subtitle {
  margin: 0 0 1.25rem;
  font-size: clamp(.9rem, 2vw, 1.25rem);
  line-height: 1.6;
  text-shadow: 0 1px 4px rgba(0,0,0,.25);
  max-width: 600px;
}
.rxty-slide__content--center .rxty-slide__subtitle { margin-left: auto; margin-right: auto; }

.rxty-slide__btn {
  display: inline-block;
  padding: .65rem 1.75rem;
  border-radius: 6px;
  font-size: .9375rem;
  font-weight: 600;
  text-decoration: none;
  transition: opacity .2s, transform .15s;
  cursor: pointer;
  color: var(--btn-color, #fff);
}
.rxty-slide__btn:hover { opacity: .85; transform: translateY(-2px); }

.rxty-slide__btn--outline {
  border: 2px solid var(--btn-color, #fff);
  background: transparent;
}
.rxty-slide__btn--filled {
  background: var(--btn-color, #fff);
  border: 2px solid var(--btn-color, #fff);
  color: #111;
}

/* ── Slide transition ─── */
.rxty-slider--slide .rxty-slide {
  transition: transform .55s cubic-bezier(.25,.46,.45,.94);
}

/* ── Fade transition ─── */
.rxty-slider--fade .rxty-slide {
  opacity: 0;
  transition: opacity .55s ease;
  z-index: 0;
}
.rxty-slider--fade .rxty-slide.is-active {
  opacity: 1;
  z-index: 1;
}

/* ── Arrows ─── */
.rxty-slider__arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 10;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 2px solid rgba(255,255,255,.35);
  background: rgba(0,0,0,.3);
  color: var(--arrow-color, #fff);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background .2s, border-color .2s, opacity .2s;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.rxty-slider__arrow svg { width: 20px; height: 20px; }
.rxty-slider__arrow:hover { background: rgba(0,0,0,.55); border-color: rgba(255,255,255,.7); }
.rxty-slider__arrow:disabled { opacity: .25; pointer-events: none; }
.rxty-slider__arrow--prev { left: 1rem; }
.rxty-slider__arrow--next { right: 1rem; }

/* ── Dots ─── */
.rxty-slider__dots {
  position: absolute;
  bottom: 1rem;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10;
  display: flex;
  gap: 6px;
  align-items: center;
}
.rxty-slider__dot {
  width: 8px;
  height: 8px;
  border-radius: 4px;
  border: none;
  background: rgba(255,255,255,.45);
  cursor: pointer;
  padding: 0;
  transition: width .25s, background .25s;
}
.rxty-slider__dot.is-active {
  width: 20px;
  background: var(--arrow-color, #fff);
}

/* ── Empty state ─── */
.rxty-slider-empty {
  padding: 2rem;
  text-align: center;
  color: #888;
  font-size: .875rem;
  border: 2px dashed #ddd;
  border-radius: 6px;
}

/* ── Phase 7: Roxty FX — Entrance Animations ───────────────────────────── */

.rxty-fx-wrap { display:contents; } /* el wrapper no altera el layout */

.rxty-fx {
  --fx-duration: 600ms;
  --fx-delay:    0ms;
  --fx-easing:   ease-out;
}

/* Estados iniciales (antes de animar) */
.rxty-fx--fade-in    { opacity:0; }
.rxty-fx--fade-up    { opacity:0; transform:translateY(30px); }
.rxty-fx--fade-down  { opacity:0; transform:translateY(-30px); }
.rxty-fx--fade-left  { opacity:0; transform:translateX(30px); }
.rxty-fx--fade-right { opacity:0; transform:translateX(-30px); }
.rxty-fx--zoom-in    { opacity:0; transform:scale(.85); }
.rxty-fx--zoom-out   { opacity:0; transform:scale(1.15); }
.rxty-fx--bounce     { opacity:0; transform:translateY(-24px); }
.rxty-fx--flip-x     { opacity:0; transform:perspective(800px) rotateX(90deg); }
.rxty-fx--flip-y     { opacity:0; transform:perspective(800px) rotateY(90deg); }
.rxty-fx--rotate-in  { opacity:0; transform:rotate(-12deg) scale(.9); }

/* Clase activa: arranca la animación */
.rxty-fx.rxty-fx-animate {
  animation-fill-mode: both;
  animation-duration:        var(--fx-duration);
  animation-delay:           var(--fx-delay);
  animation-timing-function: var(--fx-easing);
}

.rxty-fx--fade-in.rxty-fx-animate    { animation-name: rxtyFadeIn; }
.rxty-fx--fade-up.rxty-fx-animate    { animation-name: rxtyFadeUp; }
.rxty-fx--fade-down.rxty-fx-animate  { animation-name: rxtyFadeDown; }
.rxty-fx--fade-left.rxty-fx-animate  { animation-name: rxtyFadeLeft; }
.rxty-fx--fade-right.rxty-fx-animate { animation-name: rxtyFadeRight; }
.rxty-fx--zoom-in.rxty-fx-animate    { animation-name: rxtyZoomIn; }
.rxty-fx--zoom-out.rxty-fx-animate   { animation-name: rxtyZoomOut; }
.rxty-fx--bounce.rxty-fx-animate     { animation-name: rxtyBounce; }
.rxty-fx--flip-x.rxty-fx-animate     { animation-name: rxtyFlipX; }
.rxty-fx--flip-y.rxty-fx-animate     { animation-name: rxtyFlipY; }
.rxty-fx--rotate-in.rxty-fx-animate  { animation-name: rxtyRotateIn; }

/* Keyframes */
@keyframes rxtyFadeIn    { from{opacity:0}                                                  to{opacity:1} }
@keyframes rxtyFadeUp    { from{opacity:0;transform:translateY(30px)}                       to{opacity:1;transform:none} }
@keyframes rxtyFadeDown  { from{opacity:0;transform:translateY(-30px)}                      to{opacity:1;transform:none} }
@keyframes rxtyFadeLeft  { from{opacity:0;transform:translateX(30px)}                       to{opacity:1;transform:none} }
@keyframes rxtyFadeRight { from{opacity:0;transform:translateX(-30px)}                      to{opacity:1;transform:none} }
@keyframes rxtyZoomIn    { from{opacity:0;transform:scale(.85)}                             to{opacity:1;transform:none} }
@keyframes rxtyZoomOut   { from{opacity:0;transform:scale(1.15)}                            to{opacity:1;transform:none} }
@keyframes rxtyBounce    { 0%{opacity:0;transform:translateY(-24px)} 55%{transform:translateY(6px)} 75%{transform:translateY(-3px)} 100%{opacity:1;transform:none} }
@keyframes rxtyFlipX     { from{opacity:0;transform:perspective(800px) rotateX(90deg)}      to{opacity:1;transform:none} }
@keyframes rxtyFlipY     { from{opacity:0;transform:perspective(800px) rotateY(90deg)}      to{opacity:1;transform:none} }
@keyframes rxtyRotateIn  { from{opacity:0;transform:rotate(-12deg) scale(.9)}               to{opacity:1;transform:none} }

/* Paralaje: will-change para hardware acceleration */
[data-rxty-parallax] { will-change:transform; }

/* ════════════════════════════════════════════════════════════════════════════
   Roxty Builder — Contact Form (Feature 6)
   ════════════════════════════════════════════════════════════════════════════ */

/* ── Variables por defecto (se pueden sobreescribir por widget inline style) */
.rxty-form-wrap {
  --rxty-form-label-color:   #374151;
  --rxty-form-input-bg:      #ffffff;
  --rxty-form-input-border:  #d1d5db;
  --rxty-form-input-radius:  6px;
  --rxty-form-input-padding: .65rem 1rem;
  --rxty-form-submit-bg:     #EB1B1B;
  --rxty-form-submit-color:  #ffffff;
  --rxty-form-submit-radius: 8px;
  --rxty-form-submit-justify: flex-start;
  --rxty-form-submit-width:  auto;
}

/* ── Grid de campos (2 columnas: full/half/third) */
.rxty-form__fields {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 1rem;
}

.rxty-form__group--full  { grid-column: span 3; }
.rxty-form__group--half  { grid-column: span 1; /* 1.5 → usa span 1 de 2 en 2-col */ }
.rxty-form__group--third { grid-column: span 1; }

/* Para que half funcione bien con 3 cols: full=3, half=1.5 → span 1 (2 cols) */
/* Mejor: usar 6 cols y mapear full=6, half=3, third=2 */
.rxty-form__fields {
  grid-template-columns: repeat(6, 1fr);
}
.rxty-form__group--full  { grid-column: span 6; }
.rxty-form__group--half  { grid-column: span 3; }
.rxty-form__group--third { grid-column: span 2; }

/* ── Etiquetas */
.rxty-form__label {
  display: block;
  font-size: .875rem;
  font-weight: 500;
  margin-bottom: .375rem;
  color: var(--rxty-form-label-color);
}
.rxty-form__label--group { margin-bottom: .5rem; }
.rxty-form__required { color: #ef4444; margin-left: .2em; }

/* ── Inputs, textarea, select */
.rxty-form__field {
  display: block;
  width: 100%;
  padding: var(--rxty-form-input-padding);
  background: var(--rxty-form-input-bg);
  border: 1.5px solid var(--rxty-form-input-border);
  border-radius: var(--rxty-form-input-radius);
  font-size: .9375rem;
  color: inherit;
  font-family: inherit;
  line-height: 1.5;
  transition: border-color .15s, box-shadow .15s;
  outline: none;
  -webkit-appearance: none;
  appearance: none;
}

.rxty-form__field:focus {
  border-color: #EB1B1B;
  box-shadow: 0 0 0 3px rgba(235,27,27,.15);
}

.rxty-form__field.is-invalid {
  border-color: #ef4444;
  box-shadow: 0 0 0 3px rgba(239,68,68,.12);
}

textarea.rxty-form__field {
  resize: vertical;
  min-height: 100px;
}

select.rxty-form__field {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236b7280' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right .875rem center;
  padding-right: 2.5rem;
  cursor: pointer;
}

/* ── Opciones (radio / checkbox) */
.rxty-form__options {
  display: flex;
  flex-direction: column;
  gap: .5rem;
}

.rxty-form__option {
  display: flex;
  align-items: center;
  gap: .5rem;
  cursor: pointer;
  font-size: .9375rem;
}

.rxty-form__option input[type="radio"],
.rxty-form__option input[type="checkbox"] {
  width: 16px;
  height: 16px;
  accent-color: #EB1B1B;
  cursor: pointer;
  flex-shrink: 0;
}

/* ── Error de campo */
.rxty-form__error {
  display: block;
  font-size: .8rem;
  color: #ef4444;
  margin-top: .25rem;
  min-height: 1em;
}

/* ── Footer (botón) */
.rxty-form__footer {
  margin-top: 1.25rem;
  display: flex;
  justify-content: var(--rxty-form-submit-justify);
}

.rxty-form__submit {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  width: var(--rxty-form-submit-width);
  justify-content: center;
  padding: .7rem 1.75rem;
  background: var(--rxty-form-submit-bg);
  color: var(--rxty-form-submit-color);
  border: none;
  border-radius: var(--rxty-form-submit-radius);
  font-size: .9375rem;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  transition: opacity .2s, transform .15s;
}

.rxty-form__submit:hover:not(:disabled) { opacity: .88; transform: translateY(-1px); }
.rxty-form__submit:active:not(:disabled) { transform: translateY(0); }
.rxty-form__submit:disabled { opacity: .6; cursor: default; }

/* Loader en el botón (puntos pulsantes) */
.rxty-form__submit-loader {
  display: none;
  width: 18px;
  height: 18px;
  border: 2.5px solid rgba(255,255,255,.3);
  border-top-color: #fff;
  border-radius: 50%;
  animation: rxty-spin .6s linear infinite;
}
.rxty-form__submit.is-loading .rxty-form__submit-text { opacity: .7; }
.rxty-form__submit.is-loading .rxty-form__submit-loader { display: block; }

@keyframes rxty-spin { to { transform: rotate(360deg); } }

/* ── Mensaje de estado (success / error) */
.rxty-form__message {
  margin-top: 1rem;
  font-size: .9375rem;
  border-radius: 6px;
  padding: .75rem 1rem;
  display: none;
}
.rxty-form__message:not(:empty) { display: block; }

.rxty-form__message--success {
  background: #dcfce7;
  color: #166534;
  border: 1px solid #bbf7d0;
}
.rxty-form__message--error {
  background: #fef2f2;
  color: #991b1b;
  border: 1px solid #fecaca;
}

/* ── Responsive: en móvil, half y third pasan a full */
@media (max-width: 640px) {
  .rxty-form__group--half,
  .rxty-form__group--third {
    grid-column: span 6;
  }
}

/* ── Honeypot (always hidden) */
.rxty-form__honeypot {
  display: none !important;
  position: absolute;
  left: -9999px;
}

/* ══════════════════════════════════════════════════════════════════════════
   Sprint 10 — Multi-step form progress indicators
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Progress container */
.rxty-form-progress {
  margin-bottom: 1.5rem;
}

/* ── Progress style: BAR */
.rxty-form-progress--bar .rxty-form-progress__bar {
  height: 6px;
  background: #e5e7eb;
  border-radius: 99px;
  overflow: hidden;
  margin-bottom: .75rem;
}
.rxty-form-progress--bar .rxty-form-progress__bar-fill {
  height: 100%;
  background: #EB1B1B;
  border-radius: 99px;
  transition: width .4s cubic-bezier(.4, 0, .2, 1);
}
.rxty-form-progress--bar .rxty-form-progress__bar-labels {
  display: flex;
  justify-content: space-between;
}
.rxty-form-progress--bar .rxty-form-progress__bar-label {
  font-size: .78rem;
  color: #9ca3af;
  transition: color .25s;
}
.rxty-form-progress--bar .rxty-form-progress__bar-label.is-active {
  color: #EB1B1B;
  font-weight: 600;
}
.rxty-form-progress--bar .rxty-form-progress__bar-label.is-done {
  color: #6b7280;
}

/* ── Progress style: DOTS */
.rxty-form-progress--dots .rxty-form-progress__dots {
  display: flex;
  align-items: center;
  gap: .625rem;
  justify-content: center;
}
.rxty-form-progress--dots .rxty-form-progress__dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #e5e7eb;
  transition: background .25s, transform .2s;
}
.rxty-form-progress--dots .rxty-form-progress__dot.is-active {
  background: #EB1B1B;
  opacity: .45;
}
.rxty-form-progress--dots .rxty-form-progress__dot.is-current {
  background: #EB1B1B;
  opacity: 1;
  transform: scale(1.4);
}

/* ── Progress style: NUMBERS */
.rxty-form-progress--numbers .rxty-form-progress__steps {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0;
}
.rxty-form-progress--numbers .rxty-form-progress__step-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .3rem;
}
.rxty-form-progress--numbers .rxty-form-progress__step-num {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: #e5e7eb;
  color: #6b7280;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: .8125rem;
  font-weight: 700;
  transition: background .25s, color .25s;
}
.rxty-form-progress--numbers .rxty-form-progress__step-item.is-active .rxty-form-progress__step-num {
  background: #EB1B1B;
  color: #fff;
}
.rxty-form-progress--numbers .rxty-form-progress__step-item.is-done .rxty-form-progress__step-num {
  background: #fca5a5;
  color: #7f1d1d;
}
.rxty-form-progress--numbers .rxty-form-progress__step-lbl {
  font-size: .72rem;
  color: #9ca3af;
  white-space: nowrap;
  transition: color .25s;
}
.rxty-form-progress--numbers .rxty-form-progress__step-item.is-active .rxty-form-progress__step-lbl {
  color: #EB1B1B;
  font-weight: 600;
}
.rxty-form-progress--numbers .rxty-form-progress__step-item.is-done .rxty-form-progress__step-lbl {
  color: #6b7280;
}
.rxty-form-progress--numbers .rxty-form-progress__step-connector {
  flex: 1;
  min-width: 32px;
  height: 2px;
  background: #e5e7eb;
  margin-bottom: 1.1rem; /* align with circles */
}

/* ── Multi-step: step containers */
.rxty-form-step {
  display: none;
}
.rxty-form-step.is-active {
  display: block;
  animation: rxty-step-in .22s ease;
}
@keyframes rxty-step-in {
  from { opacity: 0; transform: translateX(12px); }
  to   { opacity: 1; transform: translateX(0); }
}

/* ── Multi-step footer (Back / Next / Submit) */
.rxty-form__footer--multistep {
  margin-top: 1.25rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .75rem;
}
.rxty-form__footer--multistep .rxty-form__submit {
  margin-left: auto;
}

.rxty-form__back-btn,
.rxty-form__next-btn {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .65rem 1.25rem;
  border: 1.5px solid #d1d5db;
  border-radius: 8px;
  background: transparent;
  color: #374151;
  font-size: .9375rem;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  transition: background .15s, border-color .15s, color .15s;
}
.rxty-form__back-btn:hover {
  background: #f3f4f6;
  border-color: #9ca3af;
}
.rxty-form__next-btn {
  border-color: #EB1B1B;
  color: #EB1B1B;
  margin-left: auto;
}
.rxty-form__next-btn:hover {
  background: #EB1B1B;
  color: #fff;
}

/* ── Responsive mobile multi-step */
@media (max-width: 640px) {
  .rxty-form-progress--numbers .rxty-form-progress__step-connector {
    min-width: 16px;
  }
  .rxty-form__footer--multistep {
    flex-wrap: wrap;
  }
  .rxty-form__next-btn,
  .rxty-form__back-btn {
    width: 100%;
    justify-content: center;
  }
}

/* ── Icon Widget ─────────────────────────────────────────────────────────── */
.rxty-icon-widget {
  display: block;
  line-height: 1;
}
.rxty-icon-widget .rxty-icon-wrap {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: opacity .2s, transform .2s;
}
.rxty-icon-widget .rxty-icon-link {
  display: inline-block;
  text-decoration: none;
}
.rxty-icon-widget .rxty-icon-link:hover .rxty-icon-wrap {
  opacity: .85;
  transform: scale(1.08);
}
.rxty-icon-widget .material-icons {
  line-height: 1;
  vertical-align: middle;
}

/* ── Image Box Widget ────────────────────────────────────────────────────── */
.rxty-image-box {
  display: flex;
  flex-direction: column;
}
.rxty-image-box__img,
.rxty-image-box__img-link img {
  width: 100%;
  display: block;
  object-fit: cover;
}
.rxty-image-box__img-link {
  display: block;
  overflow: hidden;
}
.rxty-image-box__img-link img {
  transition: transform .35s ease;
}
.rxty-image-box__img-link:hover img {
  transform: scale(1.04);
}
.rxty-image-box__title {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 700;
  line-height: 1.3;
}
.rxty-image-box__title a {
  color: inherit;
  text-decoration: none;
}
.rxty-image-box__title a:hover {
  opacity: .8;
}
.rxty-image-box__description {
  font-size: .9375rem;
  line-height: 1.6;
  color: #555;
}
.rxty-image-box__placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
}

/* ── Text Widget — Drop Cap ──────────────────────────────────────────────── */
.rxty-text-drop-cap > p:first-child::first-letter,
.rxty-text-drop-cap::first-letter {
  float: left;
  font-size: var(--rxty-dc-size, 3em);
  line-height: .8;
  font-weight: 700;
  color: var(--rxty-dc-color, currentColor);
  margin: .06em .12em 0 0;
}

/* ── Text Widget — CSS Multi-Column ─────────────────────────────────────── */
.rxty-text-columns {
  column-fill: balance;
}
.rxty-text-columns p,
.rxty-text-columns li {
  break-inside: avoid;
}

/* ── Text Widget — Blockquote ───────────────────────────────────────────── */
.rxty-text-widget blockquote {
  border-left: 4px solid currentColor;
  margin: .75em 0;
  padding: .5em 1em;
  opacity: .8;
  font-style: italic;
}

/* ── Text Widget — Headings tipeados vía WYSIWYG (H1-H6) ─────────────────
   Sin esto, un heading escrito a mano en el editor de texto no toma el
   type-scale real del Builder (--rxty-type-h1..h6, definido en Global
   Settings) y cae en el tamaño plano del navegador. Mismos fallbacks que
   usa el widget Heading dedicado, para que ambos luzcan consistentes. */
.rxty-text-widget h1 { font-size: var(--rxty-type-h1, 2.25em); line-height: 1.2; margin: 0 0 .6em; }
.rxty-text-widget h2 { font-size: var(--rxty-type-h2, 1.75em); line-height: 1.2; margin: 0 0 .6em; }
.rxty-text-widget h3 { font-size: var(--rxty-type-h3, 1.5em);  line-height: 1.25; margin: 0 0 .6em; }
.rxty-text-widget h4 { font-size: var(--rxty-type-h4, 1.25em); line-height: 1.3; margin: 0 0 .5em; }
.rxty-text-widget h5 { font-size: var(--rxty-type-h5, 1.1em);  line-height: 1.35; margin: 0 0 .5em; }
.rxty-text-widget h6 { font-size: var(--rxty-type-h6, 1em);    line-height: 1.4; margin: 0 0 .5em; }
.rxty-text-widget h1:last-child, .rxty-text-widget h2:last-child, .rxty-text-widget h3:last-child,
.rxty-text-widget h4:last-child, .rxty-text-widget h5:last-child, .rxty-text-widget h6:last-child {
  margin-bottom: 0;
}

/* ── Countdown Widget ───────────────────────────────────────────────────── */
.rxty-countdown-widget { width: 100%; }
.rxty-countdown-inner  { display: flex; flex-wrap: wrap; }
.rxty-countdown-block  { min-width: 60px; }
.rxty-countdown-number { display: block; font-variant-numeric: tabular-nums; }
.rxty-countdown-label  { display: block; text-transform: uppercase; letter-spacing: .06em; }

/* ── Image Gallery Widget ───────────────────────────────────────────────── */
.rxty-gallery-widget { width: 100%; }
.rxty-gallery-item:hover .rxty-gallery-overlay { opacity: 1 !important; }
.rxty-gallery-item:hover .rxty-gallery-img { transform: scale(1.04); }
.rxty-gallery-caption { color: #555; }
.rxty-gallery-placeholder {
  padding: 2rem; text-align: center; color: #aaa;
  font-size: .875rem; background: #f8f8f8; border-radius: 4px;
}

/* Lightbox overlay */
.rxty-lightbox-overlay {
  position: fixed; inset: 0; z-index: 99999;
  background: rgba(0,0,0,.92);
  display: flex; align-items: center; justify-content: center;
  cursor: zoom-out; animation: rxty-lb-in .2s ease;
}
.rxty-lightbox-overlay img {
  max-width: 90vw; max-height: 90vh;
  object-fit: contain; border-radius: 4px;
  cursor: default; box-shadow: 0 8px 64px rgba(0,0,0,.6);
}
.rxty-lightbox-close {
  position: fixed; top: 1rem; right: 1.25rem;
  color: #fff; font-size: 2rem; line-height: 1; cursor: pointer; z-index: 100000;
  opacity: .8; transition: opacity .15s;
}
.rxty-lightbox-close:hover { opacity: 1; }
.rxty-lightbox-prev,
.rxty-lightbox-next {
  position: fixed; top: 50%; transform: translateY(-50%);
  color: #fff; font-size: 2.5rem; line-height: 1; cursor: pointer; z-index: 100000;
  opacity: .7; transition: opacity .15s; user-select: none; padding: .5rem;
}
.rxty-lightbox-prev { left: 1rem; }
.rxty-lightbox-next { right: 1rem; }
.rxty-lightbox-prev:hover,
.rxty-lightbox-next:hover { opacity: 1; }
@keyframes rxty-lb-in { from { opacity: 0; } to { opacity: 1; } }

/* ── Call to Action Widget ──────────────────────────────────────────────── */
.rxty-cta-widget { overflow: hidden; }
.rxty-cta-cover-bg { position: relative; }
.rxty-cta-btn { transition: opacity .2s; }
.rxty-cta-btn:hover { opacity: .85; }

/* ── Price Table Widget ─────────────────────────────────────────────────── */
.rxty-price-table { height: 100%; }
.rxty-price-featured { transform: scale(1.03); z-index: 1; }
.rxty-pt-btn:hover { opacity: .88; }

/* ── Google Maps Widget ─────────────────────────────────────────────────── */
.rxty-map-widget { width: 100%; }
.rxty-map-widget iframe { display: block; }

/* ── Flip Box Widget ────────────────────────────────────────────────────── */
.rxty-flip-box { cursor: pointer; }
.rxty-flip-box:hover .rxty-flip-inner {
  transform: rotateY(180deg);
}
.rxty-flip-box[data-flip-dir="x"]:hover .rxty-flip-inner {
  transform: rotateX(180deg);
}
.rxty-flip-btn:hover { opacity: .88; }

/* ── Nav Menu Widget ────────────────────────────────────────────────────── */
.rxty-nav-menu {
  display: flex;
  align-items: center;
  position: relative;
}
.rxty-nav-menu--horizontal .rxty-nav-menu__list {
  display: flex;
  flex-wrap: wrap;
  gap: 1.25rem;
  list-style: none;
  margin: 0;
  padding: 0;
}
.rxty-nav-menu--vertical .rxty-nav-menu__list {
  display: flex;
  flex-direction: column;
  gap: .25rem;
  list-style: none;
  margin: 0;
  padding: 0;
}
.rxty-nav-menu--align-center.rxty-nav-menu--horizontal { justify-content: center; }
.rxty-nav-menu--align-right.rxty-nav-menu--horizontal  { justify-content: flex-end; }
.rxty-nav-menu--align-stretch.rxty-nav-menu--horizontal .rxty-nav-menu__list { flex: 1; }
.rxty-nav-menu--align-stretch.rxty-nav-menu--horizontal .rxty-nav-menu__list > .menu-item { flex: 1; text-align: center; }

.rxty-nav-menu__list a {
  text-decoration: none;
  color: inherit;
  display: block;
  white-space: nowrap;
}
.rxty-nav-menu__list > .menu-item { position: relative; }

/* Dropdown / sub-menu */
.rxty-nav-menu__list .sub-menu {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  min-width: 200px;
  list-style: none;
  margin: .25rem 0 0;
  padding: .5rem 0;
  z-index: 100;
  background: #fff;
}
.rxty-nav-menu--vertical .rxty-nav-menu__list .sub-menu {
  top: 0;
  left: 100%;
  margin: 0 0 0 .25rem;
}
.rxty-nav-menu__list .menu-item:hover > .sub-menu,
.rxty-nav-menu__list .menu-item:focus-within > .sub-menu {
  display: block;
}
.rxty-nav-menu__list .sub-menu a {
  padding: .45rem 1.1rem;
  font-size: .875rem;
}
.rxty-nav-menu__list .sub-menu a:hover { background: rgba(0,0,0,.04); }

/* Hamburger */
.rxty-nav-hamburger {
  display: none;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 38px;
  height: 38px;
  background: transparent;
  border: none;
  cursor: pointer;
  padding: 6px;
  border-radius: 4px;
  margin-left: auto;
}
.rxty-nav-hamburger span {
  display: block;
  height: 2px;
  background: currentColor;
  border-radius: 2px;
  transition: transform .25s, opacity .2s;
}
.rxty-nav-hamburger.is-active span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.rxty-nav-hamburger.is-active span:nth-child(2) { opacity: 0; }
.rxty-nav-hamburger.is-active span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* Hamburger breakpoints */
@media (max-width: 767px) {
  .rxty-nav-menu--hamburger-mobile .rxty-nav-hamburger { display: flex; }
  .rxty-nav-menu--hamburger-mobile .rxty-nav-menu__list { display: none; flex-direction: column; width: 100%; gap: 0; position: absolute; top: 100%; left: 0; right: 0; background: #fff; z-index: 99; box-shadow: 0 8px 24px rgba(0,0,0,.12); border-radius: 0 0 8px 8px; padding: .5rem 0; }
  .rxty-nav-menu--hamburger-mobile .rxty-nav-menu__list.is-open { display: flex; }
  .rxty-nav-menu--hamburger-mobile .rxty-nav-menu__list a { padding: .65rem 1.25rem; }
  .rxty-nav-menu--hamburger-mobile { flex-wrap: wrap; }
}
@media (max-width: 1024px) {
  .rxty-nav-menu--hamburger-tablet .rxty-nav-hamburger { display: flex; }
  .rxty-nav-menu--hamburger-tablet .rxty-nav-menu__list { display: none; flex-direction: column; width: 100%; gap: 0; position: absolute; top: 100%; left: 0; right: 0; background: #fff; z-index: 99; box-shadow: 0 8px 24px rgba(0,0,0,.12); border-radius: 0 0 8px 8px; padding: .5rem 0; }
  .rxty-nav-menu--hamburger-tablet .rxty-nav-menu__list.is-open { display: flex; }
  .rxty-nav-menu--hamburger-tablet .rxty-nav-menu__list a { padding: .65rem 1.25rem; }
  .rxty-nav-menu--hamburger-tablet { flex-wrap: wrap; }
}

.rxty-nav-menu__placeholder { color: #aaa; font-size: .875rem; padding: .5rem; margin: 0; }

/* ── Popup Widget ───────────────────────────────────────────────────────── */
html.rxty-popup-open { overflow: hidden; }

.rxty-popup-overlay {
  display: flex;
  align-items: center;
  justify-content: center;
  position: fixed;
  inset: 0;
  z-index: 99999;
  pointer-events: none;
  opacity: 0;
  transition: opacity var(--rxty-popup-duration, .3s) ease;
  padding: 24px;
}
.rxty-popup-overlay.is-open {
  pointer-events: auto;
  opacity: 1;
}

.rxty-popup-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0,0,0,.55);
}

/* ── Popup box ── */
.rxty-popup {
  position: relative;
  z-index: 1;
  width: 92%;
  max-height: 90vh;
  overflow-y: auto;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 24px 64px rgba(0,0,0,.22);
  animation-duration: var(--rxty-popup-duration, .3s);
  animation-timing-function: ease;
  animation-fill-mode: both;
}

/* ── Entrance / Exit animations ──────────────────────────────────────────
   Entrada y salida son clases y @keyframes INDEPENDIENTES (a diferencia de
   la versión anterior, que solo interpolaba un transition entre 2 estados
   y por lo tanto la salida era forzosamente el espejo de la entrada). JS
   (initPopups en frontend.js) decide qué clase poner según
   data-entrance-animation / data-exit-animation, permitiendo mezclar p.ej.
   entrada "zoom" con salida "fade" — igual que Elementor Pro. */
@keyframes rxtyPopupFadeIn        { from { opacity: 0; } to { opacity: 1; } }
@keyframes rxtyPopupFadeOut       { from { opacity: 1; } to { opacity: 0; } }
@keyframes rxtyPopupSlideUpIn     { from { opacity: 0; transform: translateY(48px); }  to { opacity: 1; transform: translateY(0); } }
@keyframes rxtyPopupSlideUpOut    { from { opacity: 1; transform: translateY(0); }      to { opacity: 0; transform: translateY(48px); } }
@keyframes rxtyPopupSlideDownIn   { from { opacity: 0; transform: translateY(-48px); } to { opacity: 1; transform: translateY(0); } }
@keyframes rxtyPopupSlideDownOut  { from { opacity: 1; transform: translateY(0); }      to { opacity: 0; transform: translateY(-48px); } }
/* slide-left/slide-right entran desde FUERA de la pantalla (100%), a
   diferencia de slide-up/down que solo dan un empujoncito de 48px — esto
   es lo que hace falta para que un panel tipo barra lateral (edge_to_edge)
   se sienta como el off-canvas de antes, no como un modal con animación. */
@keyframes rxtyPopupSlideLeftIn   { from { opacity: 0; transform: translateX(-100%); } to { opacity: 1; transform: translateX(0); } }
@keyframes rxtyPopupSlideLeftOut  { from { opacity: 1; transform: translateX(0); }      to { opacity: 0; transform: translateX(-100%); } }
@keyframes rxtyPopupSlideRightIn  { from { opacity: 0; transform: translateX(100%); }  to { opacity: 1; transform: translateX(0); } }
@keyframes rxtyPopupSlideRightOut { from { opacity: 1; transform: translateX(0); }      to { opacity: 0; transform: translateX(100%); } }
@keyframes rxtyPopupZoomIn        { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: scale(1); } }
@keyframes rxtyPopupZoomOut       { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(.9); } }
@keyframes rxtyPopupFlipIn        { from { opacity: 0; transform: perspective(600px) rotateX(-12deg); } to { opacity: 1; transform: perspective(600px) rotateX(0deg); } }
@keyframes rxtyPopupFlipOut       { from { opacity: 1; transform: perspective(600px) rotateX(0deg); }   to { opacity: 0; transform: perspective(600px) rotateX(-12deg); } }

.rxty-popup--enter-fade        { animation-name: rxtyPopupFadeIn; }
.rxty-popup--enter-slide-up    { animation-name: rxtyPopupSlideUpIn; }
.rxty-popup--enter-slide-down  { animation-name: rxtyPopupSlideDownIn; }
.rxty-popup--enter-slide-left  { animation-name: rxtyPopupSlideLeftIn; }
.rxty-popup--enter-slide-right { animation-name: rxtyPopupSlideRightIn; }
.rxty-popup--enter-zoom        { animation-name: rxtyPopupZoomIn; }
.rxty-popup--enter-flip        { animation-name: rxtyPopupFlipIn; }

.rxty-popup--exit-fade         { animation-name: rxtyPopupFadeOut; }
.rxty-popup--exit-slide-up     { animation-name: rxtyPopupSlideUpOut; }
.rxty-popup--exit-slide-down   { animation-name: rxtyPopupSlideDownOut; }
.rxty-popup--exit-slide-left   { animation-name: rxtyPopupSlideLeftOut; }
.rxty-popup--exit-slide-right  { animation-name: rxtyPopupSlideRightOut; }
.rxty-popup--exit-zoom         { animation-name: rxtyPopupZoomOut; }
.rxty-popup--exit-flip         { animation-name: rxtyPopupFlipOut; }

/* ── Close button ── */
.rxty-popup__close {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 10;
  background: rgba(0,0,0,.06);
  border: none;
  border-radius: 50%;
  width: 34px;
  height: 34px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: #555;
  transition: background .2s, color .2s;
}
.rxty-popup__close:hover { background: rgba(0,0,0,.14); color: #111; }

.rxty-popup__content { padding: 2rem; }

/* ── Popup Trigger button ── */
.rxty-popup-trigger { display: block; }
.rxty-popup-trigger__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  border: none;
  font-family: inherit;
  font-size: 1rem;
  font-weight: 500;
  transition: background-color .2s, opacity .2s;
  padding: .65rem 1.5rem;
}
.rxty-popup-trigger__btn:hover { opacity: .88; }
.rxty-popup-trigger__btn--empty { cursor: default; opacity: .5; }

/* ── Query Loop Widget ──────────────────────────────────────────────────── */
.rxty-query-loop { width: 100%; }
.rxty-ql-grid { display: grid; }
.rxty-ql-grid--list { display: flex; }
.rxty-ql-card { display: flex; flex-direction: column; overflow: hidden; transition: transform .2s, box-shadow .2s; }
.rxty-ql-card:hover { transform: translateY(-2px); }
.rxty-ql-img-wrap { overflow: hidden; flex-shrink: 0; background: #f0f0f0; }
.rxty-ql-img-wrap img { width: 100%; height: 100%; display: block; transition: transform .35s; }
.rxty-ql-card:hover .rxty-ql-img-wrap img { transform: scale(1.04); }
.rxty-ql-img-placeholder { width: 100%; height: 100%; background: linear-gradient(135deg,#f5f5f5,#e8e8e8); }
.rxty-ql-body { padding: 1.25rem; display: flex; flex-direction: column; flex: 1; }
.rxty-ql-category { display: inline-block; font-size: .7rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; border: 1.5px solid; padding: 2px 8px; border-radius: 20px; margin-bottom: .5rem; }
.rxty-ql-title { margin: 0 0 .5rem; font-size: 1.05rem; font-weight: 700; line-height: 1.3; }
.rxty-ql-title a { text-decoration: none; color: inherit; }
.rxty-ql-title a:hover { text-decoration: underline; }
.rxty-ql-excerpt { font-size: .875rem; line-height: 1.6; margin: 0 0 .75rem; flex: 1; }
.rxty-ql-meta { display: flex; align-items: center; gap: .875rem; font-size: .78rem; margin-bottom: .75rem; }
.rxty-ql-meta .rxty-ql-date::before { content: '📅 '; }
.rxty-ql-meta .rxty-ql-author::before { content: '👤 '; }
.rxty-ql-btn { display: inline-flex; align-items: center; justify-content: center; padding: .5rem 1.25rem; text-decoration: none; font-size: .875rem; font-weight: 600; transition: opacity .2s; align-self: flex-start; }
.rxty-ql-btn:hover { opacity: .85; }
.rxty-ql-empty { color: #aaa; font-size: .875rem; padding: 2rem; text-align: center; }

/* ── Table Widget ───────────────────────────────────────────────────────── */
.rxty-table-container { width: 100%; }
.rxty-table-wrap { overflow: hidden; }
.rxty-table { width: 100%; border-collapse: collapse; }
.rxty-table th { white-space: nowrap; }
.rxty-table td, .rxty-table th { vertical-align: top; }
.rxty-table tbody tr:last-child td { border-bottom: none; }

/* ── Timeline Widget ────────────────────────────────────────────────────── */
.rxty-timeline { width: 100%; }
.rxty-timeline-line {
  position: relative;
  padding-left: 3.5rem;
}
.rxty-timeline-line::before {
  content: '';
  position: absolute;
  left: 1.35rem;
  top: .5rem;
  bottom: .5rem;
  width: 2px;
  background: #e5e5e5;
}
.rxty-timeline-item {
  position: relative;
  margin-bottom: 1.5rem;
  display: flex;
  align-items: flex-start;
  gap: 0;
}
.rxty-timeline-item:last-child { margin-bottom: 0; }
.rxty-timeline-dot {
  position: absolute;
  left: -3.15rem;
  top: 0;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  z-index: 1;
  font-size: 1rem;
  line-height: 1;
}
.rxty-timeline-card {
  flex: 1;
  padding: 1rem 1.25rem;
}
.rxty-timeline-date { font-size: .78rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; display: block; margin-bottom: .25rem; }
.rxty-timeline-title { font-size: 1rem; font-weight: 700; margin: 0 0 .375rem; }
.rxty-timeline-content { font-size: .875rem; line-height: 1.6; }

/* Alternate layout */
.rxty-timeline--alternate .rxty-timeline-line { padding-left: 0; }
.rxty-timeline--alternate .rxty-timeline-line::before { left: 50%; transform: translateX(-50%); }
.rxty-timeline--alternate .rxty-timeline-item { justify-content: flex-end; padding-right: calc(50% + 2rem); }
.rxty-timeline--alternate .rxty-timeline-item--right { justify-content: flex-start; padding-right: 0; padding-left: calc(50% + 2rem); }
.rxty-timeline--alternate .rxty-timeline-dot { left: auto; right: calc(-50% + -1.15rem - 1.5rem); }
.rxty-timeline--alternate .rxty-timeline-item--right .rxty-timeline-dot { right: auto; left: calc(-50% + -1.15rem - 1.5rem); }
@media (max-width: 640px) {
  .rxty-timeline--alternate .rxty-timeline-line { padding-left: 3.5rem; }
  .rxty-timeline--alternate .rxty-timeline-line::before { left: 1.35rem; transform: none; }
  .rxty-timeline--alternate .rxty-timeline-item,
  .rxty-timeline--alternate .rxty-timeline-item--right { justify-content: flex-end; padding-right: 0; padding-left: 0; }
  .rxty-timeline--alternate .rxty-timeline-dot,
  .rxty-timeline--alternate .rxty-timeline-item--right .rxty-timeline-dot { left: -3.15rem; right: auto; }
}

/* ── Hotspot Widget ─────────────────────────────────────────────────────── */
.rxty-hotspot-widget { width: 100%; }
.rxty-hotspot-wrapper { position: relative; display: inline-block; width: 100%; }
.rxty-hotspot-img { width: 100%; height: auto; display: block; }
.rxty-hotspot-img--placeholder { width: 100%; padding-bottom: 60%; background: linear-gradient(135deg,#e8eef4,#d5dfe8); border-radius: inherit; }
.rxty-hotspot-item { position: absolute; transform: translate(-50%,-50%); z-index: 2; }
.rxty-hotspot-pin {
  border: none;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-weight: 700;
  line-height: 1;
  position: relative;
  z-index: 2;
  transition: transform .2s;
}
.rxty-hotspot-pin:hover { transform: scale(1.15); }
/* Pulse ring */
.rxty-hotspot-pin--pulse::before {
  content: '';
  position: absolute;
  inset: -4px;
  border-radius: 50%;
  animation: rxtyHotspotPulse 2s ease infinite;
  pointer-events: none;
}
@keyframes rxtyHotspotPulse {
  0%   { transform: scale(1); opacity: .6; }
  70%  { transform: scale(1.6); opacity: 0; }
  100% { transform: scale(1); opacity: 0; }
}
.rxty-hotspot-tooltip {
  position: absolute;
  bottom: calc(100% + .5rem);
  left: 50%;
  transform: translateX(-50%);
  padding: .75rem 1rem;
  min-width: 160px;
  pointer-events: none;
  opacity: 0;
  transition: opacity .2s, transform .2s;
  transform: translateX(-50%) translateY(4px);
  z-index: 10;
  white-space: normal;
}
.rxty-hotspot-tooltip.is-visible {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
  pointer-events: auto;
}
.rxty-hs-tt-title { display: block; font-weight: 700; font-size: .875rem; margin-bottom: .25rem; }
.rxty-hs-tt-content { font-size: .8rem; line-height: 1.5; }

/* ── Lottie Widget ──────────────────────────────────────────────────────── */
.rxty-lottie { width: 100%; }
.rxty-lottie lottie-player { display: inline-block; }
.rxty-lottie-placeholder {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  background: rgba(235,27,27,.04);
  border: 1.5px dashed rgba(235,27,27,.25);
  border-radius: 12px;
  color: rgba(235,27,27,.5);
  font-size: .8rem;
}
.rxty-lottie-placeholder p { margin: 0; text-align: center; padding: 0 1rem; }

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 4 — Query Loop AJAX Pagination
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-ql-load-more-wrap {
  text-align: center;
  padding: 1.5rem 0 .5rem;
}
.rxty-ql-load-more {
  display: inline-block;
  padding: .65rem 2rem;
  background: var(--rxty-color-primary, #EB1B1B);
  color: #fff;
  border: none;
  border-radius: 8px;
  font-size: .9rem;
  font-weight: 600;
  cursor: pointer;
  transition: background .2s, opacity .2s;
}
.rxty-ql-load-more:hover { background: #c91414; }
.rxty-ql-load-more:disabled { opacity: .55; cursor: wait; }

.rxty-ql-pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: .5rem;
  padding: 1.25rem 0 .5rem;
}
.rxty-ql-page-btn {
  width: 36px; height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1.5px solid #ddd;
  border-radius: 6px;
  background: transparent;
  font-size: .85rem;
  cursor: pointer;
  transition: all .2s;
  color: inherit;
}
.rxty-ql-page-btn:hover {
  border-color: var(--rxty-color-primary, #EB1B1B);
  color: var(--rxty-color-primary, #EB1B1B);
}
.rxty-ql-page-btn.is-active {
  background: var(--rxty-color-primary, #EB1B1B);
  border-color: var(--rxty-color-primary, #EB1B1B);
  color: #fff;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 4 — Scroll Snap (parent wrapper must set scroll-snap-type)
   ══════════════════════════════════════════════════════════════════════════ */

/* When a section has _scroll_snap set on its children, the parent section
   auto-gets scroll-snap-type via the class below, added by the frontend JS */
.rxty-scroll-snap-container {
  scroll-snap-type: y mandatory;
  overflow-y: scroll;
  height: 100vh;
}
.rxty-scroll-snap-container--x {
  scroll-snap-type: x mandatory;
  overflow-x: scroll;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 4 — Custom Cursor
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-custom-cursor-active { cursor: none !important; }
.rxty-custom-cursor-active * { cursor: none !important; }

.rxty-cursor-dot,
.rxty-cursor-ring {
  position: fixed;
  top: 0; left: 0;
  pointer-events: none;
  z-index: 999999;
  border-radius: 50%;
  will-change: transform;
}

.rxty-cursor-dot {
  width: 6px; height: 6px;
  background: #EB1B1B;
  transform: translate(-50%, -50%);
  transition: width .15s, height .15s, background .15s;
}

.rxty-cursor-ring {
  width: 32px; height: 32px;
  border: 2px solid #EB1B1B;
  background: transparent;
  opacity: .5;
  transition: width .2s, height .2s, border-color .2s, opacity .2s;
}
.rxty-cursor-ring.is-hovered {
  width: 48px; height: 48px;
  opacity: .8;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 4 — Text Split Animations
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-split-char,
.rxty-split-word,
.rxty-split-line {
  display: inline-block;
  opacity: 0; /* initial state — Web Animations API fills forwards */
}
/* Words need gap between them */
.rxty-split-word { margin-right: .25em; }
/* Lines go full width */
.rxty-split-line  { display: block; }

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 5 — Before / After Image
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-ba {
  position: relative;
  overflow: hidden;
  user-select: none;
  touch-action: none;
  cursor: col-resize;
}
.rxty-ba.is-vertical { cursor: row-resize; }

.rxty-ba__before,
.rxty-ba__after {
  position: absolute;
  inset: 0;
  overflow: hidden;
}
.rxty-ba__before { z-index: 1; }
.rxty-ba__after  { z-index: 2; }

.rxty-ba__before img,
.rxty-ba__after  img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  pointer-events: none;
}

/* Divider line + handle */
.rxty-ba__divider {
  position: absolute;
  top: 0;
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: col-resize;
}
/* Horizontal (default) */
.rxty-ba:not(.is-vertical) .rxty-ba__divider {
  width: 2px;
  height: 100%;
  transform: translateX(-50%);
}
/* Vertical */
.rxty-ba.is-vertical .rxty-ba__divider {
  width: 100%;
  height: 2px;
  top: auto;
  left: 0;
  transform: translateY(-50%);
  cursor: row-resize;
}

.rxty-ba__handle {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 2px 12px rgba(0,0,0,.35);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  position: relative;
  z-index: 4;
}
.rxty-ba__handle::before,
.rxty-ba__handle::after {
  content: '';
  display: block;
  width: 0;
  height: 0;
}
/* Default arrows via SVG background — JS inserts inline SVG arrows */

/* Labels */
.rxty-ba__label {
  position: absolute;
  top: 12px;
  padding: 4px 10px;
  border-radius: 4px;
  font-size: 12px;
  font-weight: 600;
  color: #fff;
  pointer-events: none;
  z-index: 5;
  text-shadow: 0 1px 3px rgba(0,0,0,.4);
}
.rxty-ba__label--before { left: 12px; }
.rxty-ba__label--after  { right: 12px; }

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 5 — Mega Menu
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-mega-panel {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 9999;
  background: #fff;
  box-shadow: 0 8px 32px rgba(0,0,0,.12);
  border-top: 3px solid var(--rxty-color-primary, #EB1B1B);
  padding: 28px 32px;
  display: flex;
  gap: 32px;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity .22s ease, transform .22s ease;
  pointer-events: none;
}
.rxty-mega-panel[hidden] {
  display: none;  /* hidden attr overrides display */
}
.rxty-mega-panel.is-open {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
/* Remove hidden so transition plays — JS sets is-open before removing hidden */
.rxty-mega-panel.is-opening {
  display: flex;
}

.rxty-mega-col {
  flex: 1;
  min-width: 0;
}
.rxty-mega-col__title {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--rxty-color-text-light, #6b7280);
  margin-bottom: 12px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(0,0,0,.08);
}
.rxty-mega-col__links {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.rxty-mega-col__links a {
  display: block;
  font-size: 14px;
  color: var(--rxty-color-text, #1f2937);
  text-decoration: none;
  padding: 4px 0;
  transition: color .15s, padding-left .15s;
}
.rxty-mega-col__links a:hover {
  color: var(--rxty-color-primary, #EB1B1B);
  padding-left: 6px;
}

/* Trigger items need position for panel positioning */
.rxty-nav-menu--has-mega {
  position: relative;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 5 — Filter Bar
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-filter-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 12px;
  align-items: center;
  padding: 12px 0;
}
.rxty-filter-bar.align-center { justify-content: center; }
.rxty-filter-bar.align-right  { justify-content: flex-end; }

/* Button style */
.rxty-fb-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 16px;
  border: 1px solid rgba(0,0,0,.18);
  border-radius: 6px;
  background: transparent;
  font-size: 13px;
  font-family: inherit;
  cursor: pointer;
  transition: background .15s, border-color .15s, color .15s;
  color: var(--rxty-color-text, #1f2937);
}
.rxty-fb-btn:hover,
.rxty-fb-btn.is-active {
  background: var(--rxty-color-primary, #EB1B1B);
  border-color: var(--rxty-color-primary, #EB1B1B);
  color: #fff;
}

/* Select style */
.rxty-fb-select {
  padding: 7px 32px 7px 12px;
  border: 1px solid rgba(0,0,0,.18);
  border-radius: 6px;
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%236b7280'/%3E%3C/svg%3E") no-repeat right 10px center;
  appearance: none;
  -webkit-appearance: none;
  font-size: 13px;
  font-family: inherit;
  cursor: pointer;
  color: var(--rxty-color-text, #1f2937);
}

/* Checkboxes */
.rxty-fb-checks {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 12px;
}
.rxty-fb-check-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  cursor: pointer;
  color: var(--rxty-color-text, #1f2937);
}

/* Search input */
.rxty-fb-search {
  padding: 7px 12px 7px 34px;
  border: 1px solid rgba(0,0,0,.18);
  border-radius: 6px;
  font-size: 13px;
  font-family: inherit;
  min-width: 180px;
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.35-4.35'/%3E%3C/svg%3E") no-repeat left 10px center;
  color: var(--rxty-color-text, #1f2937);
}

/* Sort select */
.rxty-fb-sort {
  padding: 7px 32px 7px 12px;
  border: 1px solid rgba(0,0,0,.18);
  border-radius: 6px;
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%236b7280'/%3E%3C/svg%3E") no-repeat right 10px center;
  appearance: none;
  -webkit-appearance: none;
  font-size: 13px;
  font-family: inherit;
  cursor: pointer;
  color: var(--rxty-color-text, #1f2937);
}

/* Loading state for Query Loop */
.rxty-ql-loading {
  position: relative;
  pointer-events: none;
}
.rxty-ql-loading::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(255,255,255,.6);
  display: flex;
  align-items: center;
  justify-content: center;
  backdrop-filter: blur(2px);
  border-radius: inherit;
  z-index: 10;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 5 — Scroll Snap container helper
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-scroll-snap-container {
  overflow-y: auto;
  scroll-snap-type: y mandatory;
}
.rxty-scroll-snap-container--x {
  overflow-x: auto;
  scroll-snap-type: x mandatory;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 6-A — Background Video
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-bg-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  z-index: 0;
  pointer-events: none;
}
.rxty-bg-video__overlay {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}
/* Ensure all direct children of a section with bg-video sit above it */
[data-rxty-bg-video-url] {
  position: relative;
  overflow: hidden;
}
[data-rxty-bg-video-url] > *:not(.rxty-bg-video):not(.rxty-bg-video__overlay) {
  position: relative;
  z-index: 2;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 6-A — Shape Dividers
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-shape-divider {
  position: absolute;
  left: 0;
  width: 100%;
  overflow: hidden;
  line-height: 0;
  pointer-events: none;
  z-index: 3;
}
.rxty-shape-divider--top {
  top: 0;
}
.rxty-shape-divider--bottom {
  bottom: 0;
}
.rxty-shape-divider__inner {
  display: block;
  width: 100%;
  height: 100%;
}
.rxty-shape-divider__inner svg {
  display: block;
  width: 100%;
  height: 100%;
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 6-D — Testimonial Carousel
   ══════════════════════════════════════════════════════════════════════════ */

/* Custom properties with fallbacks */
.rxty-tc {
  --rxty-tc-card-bg:       #fff;
  --rxty-tc-card-bc:       transparent;
  --rxty-tc-card-br:       12px;
  --rxty-tc-card-p:        2rem;
  --rxty-tc-card-shadow:   0 4px 24px rgba(0,0,0,.08);
  --rxty-tc-text:          inherit;
  --rxty-tc-name:          inherit;
  --rxty-tc-role:          #888;
  --rxty-tc-star:          #f59e0b;
  --rxty-tc-dot:           #ddd;
  --rxty-tc-dot-active:    currentColor;
  --rxty-tc-arrow-color:   currentColor;
  --rxty-tc-arrow-bg:      #fff;
  position: relative;
  overflow: hidden;
}

/* Track */
.rxty-tc__track {
  display: flex;
  overflow: hidden;
  position: relative;
}

.rxty-tc--slide .rxty-tc__track {
  align-items: stretch;
}

.rxty-tc--fade .rxty-tc__track {
  overflow: visible;
}

/* Items */
.rxty-tc__item {
  width: 100%;
  box-sizing: border-box;
  padding: 0 4px;
}

/* Card */
.rxty-tc__card {
  background:    var(--rxty-tc-card-bg);
  border:        1px solid var(--rxty-tc-card-bc);
  border-radius: var(--rxty-tc-card-br);
  padding:       var(--rxty-tc-card-p);
  box-shadow:    var(--rxty-tc-card-shadow);
  display:       flex;
  flex-direction: column;
  gap:           1rem;
  height:        100%;
  box-sizing:    border-box;
}

/* Stars */
.rxty-tc__stars {
  color:       var(--rxty-tc-star);
  font-size:   1.125rem;
  letter-spacing: .1em;
  line-height: 1;
}

/* Quote */
.rxty-tc__text {
  color:       var(--rxty-tc-text);
  font-size:   1rem;
  line-height: 1.7;
  margin:      0;
  padding:     0;
  border:      none;
  font-style:  italic;
  flex-grow:   1;
}

/* Author row */
.rxty-tc__author {
  display:     flex;
  align-items: center;
  gap:         .875rem;
  margin-top:  auto;
}

/* Avatar */
.rxty-tc__avatar {
  width:         48px;
  height:        48px;
  border-radius: 50%;
  object-fit:    cover;
  flex-shrink:   0;
}

.rxty-tc__avatar--placeholder {
  display:         flex;
  align-items:     center;
  justify-content: center;
  background:      var(--rxty-tc-dot-active, #EB1B1B);
  color:           #fff;
  font-weight:     700;
  font-size:       1.125rem;
  border-radius:   50%;
}

/* Author info */
.rxty-tc__author-info {
  display:        flex;
  flex-direction: column;
  gap:            .2rem;
}

.rxty-tc__name {
  font-weight: 700;
  color:       var(--rxty-tc-name);
  font-size:   .9375rem;
  display:     block;
}

.rxty-tc__role {
  font-size: .8125rem;
  color:     var(--rxty-tc-role);
  display:   block;
}

/* Arrows */
.rxty-tc__arrow {
  position:        absolute;
  top:             50%;
  transform:       translateY(-50%);
  z-index:         10;
  display:         flex;
  align-items:     center;
  justify-content: center;
  width:           44px;
  height:          44px;
  border-radius:   50%;
  background:      var(--rxty-tc-arrow-bg);
  color:           var(--rxty-tc-arrow-color);
  border:          1px solid rgba(0,0,0,.1);
  box-shadow:      0 2px 8px rgba(0,0,0,.12);
  cursor:          pointer;
  padding:         0;
  transition:      background .2s, opacity .2s, transform .2s;
}

.rxty-tc__arrow:hover {
  transform: translateY(-50%) scale(1.08);
}

.rxty-tc__arrow:disabled {
  opacity: .3;
  cursor:  default;
}

.rxty-tc__arrow--prev {
  left: -22px;
}

.rxty-tc__arrow--next {
  right: -22px;
}

/* Dots */
.rxty-tc__dots {
  display:         flex;
  justify-content: center;
  align-items:     center;
  gap:             8px;
  margin-top:      1.5rem;
}

.rxty-tc__dot {
  width:         10px;
  height:        10px;
  border-radius: 50%;
  background:    var(--rxty-tc-dot);
  border:        none;
  padding:       0;
  cursor:        pointer;
  transition:    background .25s, transform .25s, width .25s;
}

/* ══════════════════════════════════════════════════════════════════════════
   Sticky Elements
   ══════════════════════════════════════════════════════════════════════════ */

.rxty-is-sticky { box-shadow: 0 2px 16px rgba(0,0,0,.12); }

/* ── Sprint A — Layout elements ────────────────────────────────────────── */
.rxty-column {
  box-sizing: border-box;
  min-width: 0; /* prevent overflow in flex */
}
.rxty-column > * { box-sizing: border-box; }

.rxty-div {
  box-sizing: border-box;
}

.rxty-inner-section {
  box-sizing: border-box;
  width: 100%;
}

/* Responsive: stack columns below tablet */
@media (max-width: 767px) {
  .rxty-column {
    flex: 0 0 100% !important;
    width: 100% !important;
    max-width: 100% !important;
  }
}

/* ── Form extras (Gravity Forms parity) ───────────────────────────────── */
.rxty-form__section-break { padding:.5rem 0 .25rem; border-bottom:1px solid #e5e7eb; margin-bottom:1rem; }
.rxty-form__section-title { margin:0 0 .25rem; font-size:1rem; font-weight:600; }
.rxty-form__section-desc  { margin:0; font-size:.875rem; color:#6b7280; }
.rxty-form__rating { display:flex; flex-direction:row-reverse; justify-content:flex-end; gap:.25rem; }
.rxty-form__rating input { display:none; }
.rxty-form__rating label { font-size:1.75rem; color:#d1d5db; cursor:pointer; transition:color .15s; }
.rxty-form__rating input:checked ~ label { color:#f59e0b; }
.rxty-form__signature-wrap { border:1px solid #d1d5db; border-radius:.5rem; overflow:hidden; background:#fafafa; }
.rxty-form__signature-canvas { display:block; cursor:crosshair; touch-action:none; }
.rxty-form__signature-clear { display:block; width:100%; padding:.35rem; background:#f3f4f6; border:none; border-top:1px solid #e5e7eb; font-size:.75rem; color:#6b7280; cursor:pointer; }
.rxty-form__signature-clear:hover { background:#e5e7eb; }
.rxty-form__calc-wrap { display:flex; align-items:center; gap:.5rem; }
.rxty-form__calc { background:#f9fafb !important; font-weight:600; }
.rxty-form__calc-prefix,.rxty-form__calc-suffix { font-weight:600; color:#374151; }
.rxty-form__consent { align-items:flex-start !important; }
.rxty-form__consent input { margin-top:.2rem; flex-shrink:0; }
.rxty-form__closed-notice { padding:1rem 1.25rem; background:#fef3c7; border:1px solid #fcd34d; border-radius:.5rem; color:#92400e; font-size:.9rem; }

.rxty-tc__dot.is-active {
  background: var(--rxty-tc-dot-active);
  width:      26px;
  border-radius: 5px;
  transform:  none;
}

/* Responsive: hide arrows on very small screens */
@media (max-width: 480px) {
  .rxty-tc__arrow--prev { left: -4px; }
  .rxty-tc__arrow--next { right: -4px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   SPRINT 6-D — WooCommerce Widgets
   ══════════════════════════════════════════════════════════════════════════ */

/* ── General WC notice ───────────────────────────────────────────────────── */
.rxty-woo-empty,
.rxty-woo-notice {
  padding: 1rem 1.5rem;
  background: #fff8ed;
  border: 1px solid #f59e0b;
  border-radius: 6px;
  color: #92400e;
  font-size: .875rem;
}

/* ── WC Product Grid ─────────────────────────────────────────────────────── */
.rxty-wpg {
  --rxty-wpg-cols:        3;
  --rxty-wpg-gap:         1.5rem;
  --rxty-wpg-card-bg:     #fff;
  --rxty-wpg-card-bc:     #f0f0f0;
  --rxty-wpg-card-br:     10px;
  --rxty-wpg-card-shadow: 0 2px 12px rgba(0,0,0,.07);
  --rxty-wpg-title:       inherit;
  --rxty-wpg-price:       #e84040;
  --rxty-wpg-btn-bg:      #EB1B1B;
  --rxty-wpg-btn-color:   #fff;
  --rxty-wpg-btn-radius:  6px;
}

.rxty-wpg__grid {
  display:               grid;
  grid-template-columns: repeat( var(--rxty-wpg-cols), 1fr );
  gap:                   var(--rxty-wpg-gap);
}

.rxty-wpg__card {
  background:    var(--rxty-wpg-card-bg);
  border:        1px solid var(--rxty-wpg-card-bc);
  border-radius: var(--rxty-wpg-card-br);
  overflow:      hidden;
  box-shadow:    var(--rxty-wpg-card-shadow);
  display:       flex;
  flex-direction: column;
  transition:    transform .2s, box-shadow .2s;
}

.rxty-wpg__card:hover {
  transform:  translateY(-3px);
  box-shadow: 0 8px 28px rgba(0,0,0,.12);
}

.rxty-wpg__img-wrap {
  display:  block;
  overflow: hidden;
  position: relative;
  aspect-ratio: 1 / 1;
}

.rxty-wpg__img {
  width:       100%;
  height:      100%;
  object-fit:  cover;
  transition:  transform .3s;
}

.rxty-wpg__card:hover .rxty-wpg__img {
  transform: scale(1.04);
}

.rxty-wpg__img-placeholder {
  width:   100%;
  aspect-ratio: 1 / 1;
}

.rxty-wpg__badge {
  position:      absolute;
  top:           .625rem;
  left:          .625rem;
  padding:       .2rem .5rem;
  border-radius: 4px;
  font-size:     .7rem;
  font-weight:   700;
  line-height:   1;
  z-index:       1;
}

.rxty-wpg__badge--sale {
  background: #e84040;
  color:      #fff;
}

.rxty-wpg__badge--new {
  background: #22c55e;
  color:      #fff;
}

.rxty-wpg__body {
  padding:       .875rem 1rem 1rem;
  display:       flex;
  flex-direction: column;
  flex-grow:     1;
  gap:           .375rem;
}

.rxty-wpg__rating .star-rating {
  font-size: .75rem;
}

.rxty-wpg__title {
  margin:      0;
  font-size:   .9375rem;
  font-weight: 600;
  line-height: 1.35;
  color:       var(--rxty-wpg-title);
}

.rxty-wpg__title a {
  color:           inherit;
  text-decoration: none;
}

.rxty-wpg__title a:hover {
  text-decoration: underline;
}

.rxty-wpg__price {
  color:       var(--rxty-wpg-price);
  font-weight: 700;
  font-size:   1.0625rem;
  margin-top:  auto;
}

.rxty-wpg__price del {
  color:     #aaa;
  font-size: .85em;
}

.rxty-wpg__actions {
  margin-top: .5rem;
}

.rxty-wpg__btn-cart {
  display:         block;
  width:           100%;
  padding:         .55rem 1rem;
  background:      var(--rxty-wpg-btn-bg);
  color:           var(--rxty-wpg-btn-color) !important;
  border-radius:   var(--rxty-wpg-btn-radius);
  font-size:       .875rem;
  font-weight:     600;
  text-align:      center;
  text-decoration: none;
  border:          none;
  cursor:          pointer;
  transition:      opacity .2s;
}

.rxty-wpg__btn-cart:hover {
  opacity: .87;
}

@media (max-width: 768px) {
  .rxty-wpg__grid {
    grid-template-columns: repeat( min( var(--rxty-wpg-cols), 2 ), 1fr );
  }
}

@media (max-width: 480px) {
  .rxty-wpg__grid {
    grid-template-columns: 1fr;
  }
}

/* ── WC Add to Cart ──────────────────────────────────────────────────────── */
.rxty-watc {
  --rxty-watc-bg:      #EB1B1B;
  --rxty-watc-color:   #fff;
  --rxty-watc-padding: .75rem 1.75rem;
  --rxty-watc-radius:  8px;
  --rxty-watc-fsize:   1rem;
  --rxty-watc-align:   flex-start;
  display:         flex;
  justify-content: var(--rxty-watc-align);
}

.rxty-watc__btn {
  display:         inline-block;
  padding:         var(--rxty-watc-padding) !important;
  background:      var(--rxty-watc-bg) !important;
  color:           var(--rxty-watc-color) !important;
  border-radius:   var(--rxty-watc-radius) !important;
  font-size:       var(--rxty-watc-fsize);
  font-weight:     600;
  text-decoration: none;
  border:          none;
  cursor:          pointer;
  transition:      opacity .2s;
}

.rxty-watc__btn:hover { opacity: .88; }

.rxty-watc__form {
  display: flex;
  flex-direction: column;
  gap: .625rem;
}

.rxty-watc__qty-wrap {
  display:     flex;
  align-items: center;
  gap:         .625rem;
}

.rxty-watc__qty {
  width:         64px;
  padding:       .5rem .625rem;
  border:        1px solid #ddd;
  border-radius: 6px;
  font-size:     1rem;
  text-align:    center;
}

.rxty-watc__out-of-stock {
  display:       inline-block;
  padding:       .4rem 1rem;
  background:    #f3f4f6;
  color:         #9ca3af;
  border-radius: 6px;
  font-size:     .875rem;
}

/* ── WC Price ────────────────────────────────────────────────────────────── */
.rxty-wprc {
  --rxty-wprc-price:         inherit;
  --rxty-wprc-sale:          #e84040;
  --rxty-wprc-regular:       #999;
  --rxty-wprc-fsize:         2rem;
  --rxty-wprc-regular-fsize: 1.25rem;
  --rxty-wprc-badge-bg:      #e84040;
  --rxty-wprc-badge-color:   #fff;
  --rxty-wprc-badge-radius:  6px;
  --rxty-wprc-align:         flex-start;
  display:         flex;
  flex-direction:  column;
  align-items:     var(--rxty-wprc-align);
  gap:             .5rem;
}

.rxty-wprc__price {
  color:     var(--rxty-wprc-price);
  font-size: var(--rxty-wprc-fsize);
}

.rxty-wprc__price .woocommerce-Price-amount {
  font-weight: 800;
  color:       var(--rxty-wprc-sale);
}

.rxty-wprc__price del .woocommerce-Price-amount {
  font-weight: 500;
  font-size:   var(--rxty-wprc-regular-fsize);
  color:       var(--rxty-wprc-regular);
}

.rxty-wprc__badge {
  display:       inline-block;
  padding:       .2rem .625rem;
  background:    var(--rxty-wprc-badge-bg);
  color:         var(--rxty-wprc-badge-color);
  border-radius: var(--rxty-wprc-badge-radius);
  font-size:     .8rem;
  font-weight:   700;
}

/* ============================================================
   Sprint 6-E — Accessibility & Core Web Vitals
   ============================================================ */

/* 1. Focus-visible token */
:root { --rxty-focus-color: #4d90fe; }

/* 2. Global :focus-visible for interactive Roxty elements */
.rxty-section:focus-visible,
.rxty-container:focus-visible,
.rxty-widget-wrap:focus-visible,
.rxty-btn:focus-visible,
.rxty-nav-link:focus-visible,
.rxty-accordion__header:focus-visible,
.rxty-tabs__tab:focus-visible,
.rxty-flip-box:focus-visible,
.rxty-slider__arrow:focus-visible,
.rxty-tc__arrow:focus-visible,
.rxty-hotspot__pin:focus-visible {
  outline: 3px solid var(--rxty-focus-color);
  outline-offset: 2px;
  border-radius: 2px;
}

/* 3. Remove focus ring for mouse users (only show for keyboard) */
.rxty-section:focus:not(:focus-visible),
.rxty-btn:focus:not(:focus-visible),
.rxty-nav-link:focus:not(:focus-visible),
.rxty-accordion__header:focus:not(:focus-visible),
.rxty-tabs__tab:focus:not(:focus-visible) {
  outline: none;
}

/* 4. Reduced motion support — disable decorative transitions */
@media (prefers-reduced-motion: reduce) {
  .rxty-section,
  .rxty-container,
  .rxty-widget-wrap,
  .rxty-bg-video,
  .rxty-slider,
  .rxty-tc,
  .rxty-fx-entrance,
  [data-rxty-text-split] span {
    animation-duration:   0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration:  0.01ms !important;
  }
}

/* 5. Aspect-ratio helper for images with explicit width/height (CLS) */
.rxty-img[width][height] {
  aspect-ratio: attr(width) / attr(height);
}
