/* ============================================================
   GARABATO · Animated background bands
   Todas las líneas están en movimiento — las "estáticas"
   flotan con amplitud notoria + rotan suave; las "moving"
   recorren el path con stroke-dashoffset.
   ============================================================ */

.gbg {
  position: relative;
  width: 100%;
  overflow: hidden;
  isolation: isolate;
}
.gbg svg {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  display: block;
}
.gbg__content {
  position: relative; z-index: 2;
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  padding: 24px 48px;
}

/* ── Trazos gruesos ───────────────────────────────────
   Las líneas gruesas también RECORREN el path con stroke-
   dashoffset (igual que las finas), pero con dashes muy
   largos para que se vea como un trazo continuo viajando,
   no como guiones. Sumadas al float + sway de las capas. */
.gbg-static {
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  /* Trazo casi continuo (1100 visible / 320 gap) que viaja
     lentamente — la línea entera parece moverse */
  stroke-dasharray: 1100 320;
  animation: gbgTravelSlow 18s linear infinite;
}
.gbg-static--alt   { animation-duration: 22s; animation-direction: reverse; stroke-dasharray: 1300 260; }
.gbg-static--alt-2 { animation-duration: 26s; stroke-dasharray: 900 380; }

/* ── Trazos finos: pasan rápido y se van ─────────────── */
.gbg-moving {
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  /* dashes cortos que entran y salen */
  stroke-dasharray: 180 1400;
  animation: gbgZoom 6s cubic-bezier(0.5, 0, 0.4, 1) infinite;
}
.gbg-moving--two   { animation-duration: 8s; animation-delay: -1.5s; stroke-dasharray: 140 1500; }
.gbg-moving--three { animation-duration: 10s; animation-direction: reverse; stroke-dasharray: 120 1600; animation-delay: -3s; }

/* ── Capas: flotan + rotan suavemente ────────────────── */
.gbg-layer {
  animation: gbgFloat 12s ease-in-out infinite alternate;
  transform-origin: 50% 50%;
  transform-box: fill-box;
  will-change: transform;
}
.gbg-layer--two   { animation-duration: 16s; animation-delay: -2.5s; animation-name: gbgFloatB; }
.gbg-layer--three { animation-duration: 20s; animation-delay: -5s;   animation-name: gbgSway;   }

@keyframes gbgMove {
  /* legacy alias — remapped to gbgZoom timing */
  from { stroke-dashoffset: 0; }
  to   { stroke-dashoffset: -1420; }
}
@keyframes gbgZoom {
  /* dash arranca fuera, recorre, se va */
  0%   { stroke-dashoffset: 0; }
  100% { stroke-dashoffset: -1580; }
}
@keyframes gbgTravelSlow {
  /* trazo grueso que viaja lento como río */
  from { stroke-dashoffset: 0; }
  to   { stroke-dashoffset: -1420; }
}
@keyframes gbgDrift {
  from { stroke-dashoffset: 0; }
  to   { stroke-dashoffset: -1660; }
}
@keyframes gbgFloat {
  0%   { transform: translate3d(-28px, 14px, 0) rotate(-1.5deg); }
  100% { transform: translate3d( 28px,-14px, 0) rotate( 1.5deg); }
}
@keyframes gbgFloatB {
  0%   { transform: translate3d( 22px, 10px, 0) rotate( 1.2deg) scale(1.01); }
  100% { transform: translate3d(-22px,-10px, 0) rotate(-1.2deg) scale(0.99); }
}
@keyframes gbgSway {
  0%   { transform: translate3d(-12px,  18px, 0) rotate(-0.8deg); }
  50%  { transform: translate3d( 14px, -10px, 0) rotate( 1.0deg); }
  100% { transform: translate3d(-12px,  18px, 0) rotate(-0.8deg); }
}

/* ── Variantes ───────────────────────────────────────── */
.gbg--band .gbg__content { padding: 16px 32px; }

/* Minimal: pocas líneas, opacidad un toque más baja, ideal
   para meter como acento dentro de secciones existentes
   sin robarle protagonismo al contenido. */
.gbg--minimal { opacity: 0.85; }
.gbg--minimal .gbg-layer { animation-duration: 18s; }

/* Cuando se usa como fondo absoluto detrás de contenido */
.gbg--absolute {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
}

@media (prefers-reduced-motion: reduce) {
  .gbg-static, .gbg-moving, .gbg-layer, .gbg-line__path { animation: none; }
}

/* ============================================================
   GarabatoCTA — bloque call-to-action con fondo animado
   ============================================================ */
.gbg-cta { position: relative; }
.gbg-cta--clean {
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  padding: 64px 24px;
}
.gbg-cta__bg { width: 100%; }
.gbg-cta__inner {
  position: relative;
  z-index: 1;
  max-width: 880px;
  width: 100%;
  text-align: center;
  display: flex; flex-direction: column;
  align-items: center; gap: 24px;
  padding: 48px 32px;
}
.gbg-cta__eyebrow { letter-spacing: 0.12em; }
.gbg-cta__title   { margin: 0; line-height: 0.95; }
.gbg-cta__subtitle { margin: 0; max-width: 620px; }
.gbg-cta__actions {
  display: flex; flex-wrap: wrap; gap: 16px; justify-content: center;
  margin-top: 16px;
}
.gbg-cta__btn {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 18px 32px;
  border-radius: 999px;
  font-family: var(--font-display);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: -0.01em;
  text-decoration: none;
  border: 2px solid transparent;
  transition: transform .2s ease, box-shadow .2s ease;
  cursor: pointer;
}
.gbg-cta__btn:hover { transform: translateY(-2px); }
.gbg-cta__btn--primary {
  background: var(--brand-yellow);
  color: var(--ink-900);
  box-shadow: 0 0 0 3px rgba(0,0,0,0.08);
}
.gbg-cta__btn--primary:hover { box-shadow: 0 8px 20px rgba(0,0,0,0.18); }
.gbg-cta__btn--secondary {
  background: transparent;
  border-color: currentColor;
}
.gbg-cta__btn--secondary:hover { background: rgba(255,255,255,0.12); }

/* ============================================================
   GarabatoLine — divisor inline animado
   ============================================================ */
.gbg-line {
  position: relative;
  width: 100%;
  overflow: hidden;
  pointer-events: none;
}
.gbg-line svg {
  width: 100%; height: 100%;
  display: block;
}
.gbg-line__path {
  stroke-linecap: round;
  stroke-dasharray: 600 1800;
  animation: gbgLineRun 8s linear infinite;
}
@keyframes gbgLineRun {
  from { stroke-dashoffset: 0; }
  to   { stroke-dashoffset: -2400; }
}
