.particle-host {
  position: relative;
  isolation: isolate;
}

.clientes:not(.is-sphere) .particle-host,
.servicios:not(.servicios--pinned) .particle-host {
  padding-bottom: 64px;
}

.section-particles {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  pointer-events: none;
  border-radius: inherit;
}

.section-particles__dot {
  position: absolute;
  width: var(--particle-size);
  height: var(--particle-size);
  border-radius: 50%;
  background: var(--ink, #222);
  opacity: 0.25;
}

.particle-controls {
  position: absolute;
  right: max(20px, 4vw);
  bottom: 12px;
  z-index: 3;
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: calc(100% - 40px);
  padding: 5px 10px;
  border: 1px solid var(--line, #ccc);
  border-radius: 6px;
  background: var(--paper, #f5f3ed);
  color: var(--ink, #222);
  font-size: 12px;
  line-height: 1.2;
}

.particle-controls input {
  width: clamp(60px, 10vw, 120px);
  min-width: 0;
  height: 32px;
  accent-color: var(--ink, #222);
  cursor: pointer;
}

.particle-controls output {
  min-width: 3ch;
  font-variant-numeric: tabular-nums;
  text-align: right;
}

.particle-controls button {
  min-height: 32px;
  padding: 0 5px;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  cursor: pointer;
}

.particle-controls :focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 3px;
}

.particle-controls button:disabled { cursor: default; }

.particle-controls .sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

@media (max-width: 520px) {
  /* 12px, no 11: piso de texto de la corrección #8 del spec. El harness no
     lo pescaba solo (label/button envuelven su texto visible en .sr-only,
     que el probe excluye por "sin hijos"; output mide "60", 2 caracteres,
     bajo el mínimo de 3 del probe) — I3 de la revisión final, medido en
     vivo con el computed font-size de los tres nodos. */
  .particle-controls { gap: 6px; right: 20px; font-size: 12px; }
}

@media (max-width: 1023px) {
  /*
   * Sin pin, el panel cae al final de un bloque alto en vez de en la esquina
   * de una pantalla fija: pegado a la derecha sobre espacio vacío se lee
   * despegado de la sección que controla. Centrado queda como lo que es, un
   * pie de sección. Sigue siendo absolute — el host ya le reserva el hueco
   * con su padding-bottom (líneas 6-8).
   */
  .particle-controls {
    right: auto;
    left: 50%;
    transform: translateX(-50%);
  }
  /* Últimos objetivos táctiles bajo 44px del sitio: el input estaba en 32
     y el button en 32 (min-height). */
  .particle-controls input { height: 44px; }
  .particle-controls button { min-height: 44px; padding: 0 12px; }

  /*
   * El panel creció de ~42px a 56px de alto al subir sus controles a 44px,
   * y los 64px de padding-bottom de arriba (línea 8) se calcularon para el
   * panel viejo: con bottom:12px + 56px de panel hacían falta 68px, no 64,
   * así que el panel tapaba 4px del borde inferior del contenido (medido
   * por CDP en Clientes y Servicios a 390px). Sube a 80px con margen.
   */
  .clientes:not(.is-sphere) .particle-host,
  .servicios:not(.servicios--pinned) .particle-host {
    padding-bottom: 80px;
  }
}
