/* ==================================================================
   ARCHIVO PRODITAE — guía completa del archivo
   ------------------------------------------------------------------
   ⚠️ POR QUÉ ESTA GUÍA ESTÁ ACÁ Y NO EN EL index.html:
   Bootstrap Studio edita tu CSS y tu JS como texto plano, así que
   los comentarios ahí sobreviven bien. Pero edita el HTML a través
   de su editor visual (trabaja con el DOM, no con el texto), y los
   comentarios HTML (<!-- así -->) se pierden cada vez que guardás
   ahí — ya pasó varias veces con la guía que vivía arriba de todo
   en index.html. Por eso, a partir de ahora, la documentación
   importante vive ACÁ (en el CSS) y en script.js, no en el HTML.
   Si necesitás anotar algo para vos misma, mejor un comentario acá
   o en el JS que uno en el HTML — es el que realmente va a seguir
   estando la próxima vez que abrís el proyecto.

   CARPETAS QUE HACEN FALTA AL LADO DE index.html:
     fonts/   → 5 archivos .woff2 (EB Garamond + Space Mono, locales)
     assets/  → favicon, botón 88×31, bootstrap (lo agregó Bootstrap
                Studio solo, no lo usa nada de tu diseño, es peso
                muerto pero no vale la pena pelearse con la
                herramienta por sacarlo)
     assets/img/ → tus fotos del hero y de la galería
     sfx/     → 5 archivos de audio (lista completa más abajo)
     fotos/   → fotos de la Galería (ver PHOTOS en script.js)

   ORDEN DE LAS CAJAS Y CÓMO FUNCIONA EL GRID DE 3 COLUMNAS:
   El layout usa CSS Grid: cada 3 <section class="panel ..."> seguidas
   dentro de <main> forman una fila, y esa fila se estira a la altura
   de la caja más alta de las tres (así es como se resolvió que
   quedaran "escalonadas"). El mismo truco de grid se repite ADENTRO
   del footer con la clase ".footer-trio", para el trío Oráculo/
   Ofrendas/Velas. El orden actual:
     Dentro de <main>:
       Fila 1: Sobre mí · Trabajemos · Mis redes
       Fila 2: ¿Invitame algo? (donaciones) · Botón de sitio · [vacío]
       Ancho completo: Galería (tiene grid-column:1/-1, por eso ocupa
                       las 3 columnas en vez de una sola)
     Dentro de <footer> (no es parte del grid de <main>, tiene el
     suyo propio con ".footer-trio"):
       Frase de firma
       Fila (".footer-trio"): Oráculo (tarot) · Ofrendas · Encendé
                               una vela
       Créditos · botón volver al índice
       Muro del Callejón (antes "Firmá el altar")
       Contador de visitas
   Si reordenás las <section> en el HTML (dentro de <main> o dentro
   de ".footer-trio"), el agrupamiento en filas cambia solo — no
   hace falta tocar nada acá en el CSS para eso.

   LISTAS "AL AZAR" (POOLS) — cuáles hay y dónde están:
   Estas cuatro cosas eligen una opción al azar cada vez que alguien
   carga la página, y las cuatro se editan agregando/sacando líneas
   de una lista en script.js — nunca hace falta tocar el HTML:
     WHISPER_GREETINGS  → el saludo arriba de tu foto
     HERO_PHOTOS        → la foto circular arriba de tu nombre
     MARQUEE_PHRASES    → el cartel con texto corriendo bajo "Mis redes"
     TAROT_DECK         → las cartas del oráculo (ya tenía esto)

   SONIDO (carpeta "sfx", 5 archivos — mientras no existan, la página
   funciona igual pero en silencio, no rompe nada):
     sfx/bed.mp3              ambiente de fondo, botón ♪ arriba a la derecha
     sfx/click.mp3            clic en cualquier parte de la página
     sfx/egg-hover.mp3        pasar el mouse por una ofrenda
     sfx/egg-click.mp3        clic en una ofrenda
     sfx/candle.mp3           encender UNA vela
     sfx/candles-complete.mp3 encender la vela número 5 (la última)

   GUESTBOOK / "MURO DEL CALLEJÓN": vive en el footer, usa Cusdis
   (gratis, de terceros). Para que funcione de verdad hace falta
   crear una cuenta en cusdis.com y poner tu App ID real en el HTML
   — buscá "TU-APP-ID-DE-CUSDIS". Es la ÚNICA parte de todo el sitio
   que depende de internet/un tercero para andar.

   COSAS CON LINKS TODAVÍA PLACEHOLDER (buscá el texto exacto en el
   HTML para encontrarlas y reemplazarlas):
     "TU-APP-ID-DE-CUSDIS"           → guestbook, ver arriba
     href="#" en el badge "AR"       → tu Cafecito/Mercado Pago
     href="#" en el badge "PAT"      → tu link de Patreon
     "5491122334455"                 → tu número real de WhatsApp
   ================================================================== */

/* ==================================================================
   FUENTES
   ------------------------------------------------------------------
   Antes esta página usaba 100% fuentes locales (sin depender de
   Google ni de internet). Para el rediseño "spin diary" se suman DOS
   fuentes nuevas — Rubik Bubbles (títulos burbuja) y Permanent Marker
   (etiquetas tipo diario/scrapbook) — que se cargan desde Google
   Fonts acá abajo con @import. Eso significa que, a partir de ahora,
   esta página SÍ necesita internet para verse completa: sin conexión,
   el texto igual se lee (el navegador cae a la fuente de respaldo
   'cursive'), pero pierde el look burbuja/marcador.

   Si en algún momento preferís volver a 100% offline: bajá los
   archivos .woff2 de Rubik Bubbles y Permanent Marker vos misma,
   metelos en /fonts, reemplazá este @import por dos @font-face como
   los de EB Garamond/Space Mono de abajo, y listo.

   EB Garamond y Space Mono siguen 100% locales, sin cambios — todavía
   necesitan una carpeta "fonts" AL LADO DE index.html (no al lado de
   este styles.css, que ahora vive un nivel más abajo, en /css/ —
   por eso los url() de acá abajo dicen '../fonts/...' y no
   'fonts/...'). Los 4 archivos que tiene que tener esa carpeta:
     fonts/eb-garamond-latin-400-normal.woff2
     fonts/eb-garamond-latin-400-italic.woff2
     fonts/eb-garamond-latin-500-italic.woff2
     fonts/space-mono-latin-400-normal.woff2
     fonts/space-mono-latin-700-normal.woff2

   NOTA: el archivo fonts/alex-brush-latin-400-normal.woff2 de la
   versión anterior ya NO se usa (el signature/section-title pasaron
   de script cursiva a Rubik Bubbles). Podés borrarlo de /fonts si
   querés, o dejarlo ahí sin problema — un archivo sin usar no rompe
   nada, solo ocupa lugar de más.

   Si en algún momento cambiás de fuente: para Rubik Bubbles/Permanent
   Marker, ajustá la URL del @import; para EB Garamond/Space Mono,
   conseguí los .woff2 nuevos y ajustá el @font-face correspondiente
   (y la variable --script/--body/--mono/--marker un poco más abajo). */
@import url('https://fonts.googleapis.com/css2?family=Rubik+Bubbles&family=Permanent+Marker&display=swap');

@font-face {
  font-family: 'EB Garamond';
  src: url('../fonts/eb-garamond-latin-400-normal.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'EB Garamond';
  src: url('../fonts/eb-garamond-latin-400-italic.woff2') format('woff2');
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: 'EB Garamond';
  src: url('../fonts/eb-garamond-latin-500-italic.woff2') format('woff2');
  font-weight: 500;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: 'Space Mono';
  src: url('../fonts/space-mono-latin-400-normal.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Space Mono';
  src: url('../fonts/space-mono-latin-700-normal.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ==================================================================
   1. PALETA Y TIPOGRAFÍAS
   Cambiá estos valores y se actualiza TODA la página, porque el resto
   del CSS usa estas variables en vez de colores/fuentes sueltos.
   ------------------------------------------------------------------
   --magenta / --violet / --cyan   : los tres acentos de color originales
   --bubblegum / --grape           : NUEVOS acentos rosa clarito / uva,
                                      para stickers, tape y detalles Y2K
   --candle                        : el cálido de la vela / intimidad
   --text / --text-muted           : texto principal y secundario
   --script                        : título grande (ahora Rubik Bubbles,
                                      antes Alex Brush — ver "FUENTES"
                                      un poco más arriba)
   --body                          : párrafos de lectura (EB Garamond,
                                      sin cambios)
   --mono                          : contador, tags, cajitas de código
                                      (Space Mono, sin cambios)
   --marker                        : NUEVO, para las etiquetas "//" tipo
                                      diario/scrapbook (Permanent Marker)
   ================================================================== */

:root {
  --void: #0b0a12;
  --void-2: #151220;
  --panel: rgba(20,16,29,0.9);
  --panel-border: rgba(255,255,255,0.09);
  --magenta: #ff2f92;
  --violet: #8b5cf6;
  --cyan: #2fe0d0;
  --candle: #ffb37a;
  --text: #ede9f5;
  --text-muted: #9d93b0;
  --bubblegum: #ff9ed8;
  --grape: #b968ff;
  --script: 'Rubik Bubbles', cursive;
  --body: 'EB Garamond', serif;
  --mono: 'Space Mono', monospace;
  --marker: 'Permanent Marker', cursive;
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
}

body {
  margin: 0;
  min-height: 100vh;
  background: var(--void);
  color: var(--text);
  font-family: var(--body);
  overflow-x: hidden;
  position: relative;
}

/* ==================================================================
   2. ATMÓSFERA — fondo, grano, viñeta, brasas flotantes, luz de cursor
   Todo esto es puramente decorativo y "pointer-events:none", así que
   nunca va a bloquear clics en el contenido real. Podés borrar
   cualquiera de estas capas sin romper nada más.
   ================================================================== */

/* fondo con manchas de color en movimiento lento (reemplaza al video
   de fondo que tenías en Wix — si más adelante querés un <video> real
   de fondo, este div .atmosphere es el que reemplazarías) */

.atmosphere {
  position: fixed;
  inset: 0;
  z-index: -2;
  background: radial-gradient(ellipse 55% 40% at 50% 8%, rgba(255,179,122,0.10), transparent 60%), radial-gradient(ellipse 60% 40% at 20% 15%, rgba(255,47,146,0.18), transparent 60%), radial-gradient(ellipse 55% 45% at 85% 25%, rgba(47,224,208,0.14), transparent 60%), radial-gradient(ellipse 70% 50% at 50% 90%, rgba(139,92,246,0.18), transparent 60%), linear-gradient(180deg, var(--void) 0%, var(--void-2) 50%, var(--void) 100%);
  background-size: 200% 200%;
  animation: drift 26s ease-in-out infinite alternate;
}

/* textura de grano de película vieja, muy sutil */

.grain {
  position: fixed;
  inset: 0;
  z-index: -1;
  opacity: .05;
  pointer-events: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* viñeta que "respira" muy lento: oscurece los bordes de la pantalla
   para que la atención quede en el centro, como si te iluminara una
   sola vela. Si lo sentís muy oscuro, bajá el 0.55 de abajo. */

.vignette {
  position: fixed;
  inset: 0;
  z-index: 3;
  pointer-events: none;
  background: radial-gradient(ellipse at center, transparent 40%, rgba(0,0,0,0.55) 100%);
  animation: vignetteBreathe 8s ease-in-out infinite;
}

/* brasas/luciérnagas que suben flotando por delante de todo. La
   cantidad se define en el JS (buscá "spawnEmbers"). */

.ember-layer {
  position: fixed;
  inset: 0;
  z-index: 5;
  pointer-events: none;
  overflow: hidden;
}

.ember {
  position: absolute;
  bottom: -10px;
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: var(--candle);
  box-shadow: 0 0 6px var(--candle);
  opacity: 0;
  animation: emberRise linear infinite;
}

/* luz cálida que sigue al cursor, como si sostuvieras una vela.
   Se desactiva sola en celular/tablet y si el usuario pidió menos
   animaciones (ver JS). */

.cursor-glow {
  position: fixed;
  top: 0;
  left: 0;
  width: 260px;
  height: 260px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,179,122,0.12), transparent 70%);
  pointer-events: none;
  z-index: 4;
  transform: translate(-50%,-50%);
  will-change: left, top;
}

@keyframes drift {
  0% {
    background-position: 0% 0%;
  }
  100% {
    background-position: 100% 40%;
  }
}

@keyframes vignetteBreathe {
  0%, 100% {
    opacity: .85;
  }
  50% {
    opacity: 1;
  }
}

@keyframes emberRise {
  0% {
    transform: translate(0,0);
    opacity: 0;
  }
  10% {
    opacity: .85;
  }
  90% {
    opacity: .4;
  }
  100% {
    transform: translate(var(--drift,0px), -110vh);
    opacity: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .atmosphere {
    animation: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .vignette {
    animation: none;
    opacity: .85;
  }
}

@media (prefers-reduced-motion: reduce) {
  .ember {
    display: none;
  }
}

/* ---------- layout general: masonry de 3 columnas ----------
   3 columnas es ahora el estado por defecto — ya no algo que solo
   aparece en pantallas grandes. La única excepción es celulares
   angostos (ver el media query de abajo, <640px): ahí SÍ hace falta
   bajar a 1 columna, no por gusto sino porque hay elementos de ancho
   fijo (la carta de tarot mide 190px, por ejemplo) que directamente
   no entran en una columna de celular si la partimos en 3. Fuera de
   ese caso puntual, siempre son 3.

   Si en algún momento querés ajustar en qué ancho salta a 1 columna,
   el número a tocar es el "640px" del media query de abajo. */
/* ---------- layout general: grid de 3 columnas, filas parejas ----------
   Esto cambió de técnica: antes era CSS multi-column (column-count),
   que hace que cada columna se llene de arriba a abajo POR SU CUENTA
   — por eso quedaba esa "escalera" con cajas de distinta altura
   terminando en cualquier lado. CSS Grid en cambio arma FILAS reales:
   agarra 3 paneles seguidos del HTML, los pone lado a lado, y estira
   todos a la altura del más alto de esa fila (es el comportamiento
   por defecto de grid, "align-items:stretch" — no hace falta pedirlo
   a propósito). Resultado: todas las cajas de una misma fila quedan
   parejas, tal como pediste.

   Como ahora el orden del HTML importa para saber qué cae en la
   misma fila: cada 3 paneles seguidos forman una fila. Si el número
   total de paneles no es múltiplo de 3, la última fila simplemente
   queda con menos cajas (no se estira sola para llenar el hueco,
   pero tampoco rompe nada).

   Para que la Galería ocupe las 3 columnas en vez de una sola, tiene
   su propia regla más abajo (".panel.gallery"). Si en algún momento
   querés que otro panel también sea ancho completo, el mismo truco
   (grid-column: 1 / -1) sirve para cualquiera. */
.content-column {
  max-width: min(1500px, 94vw);
  margin: 0 auto;
  padding: 0 20px 90px;
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 26px;
}
@media (max-width: 640px) {
  .content-column {
    /* mismo motivo de siempre: elementos de ancho fijo (la carta de
       tarot, por ejemplo) no entran en una columna angosta de
       celular partida en 3. */
    grid-template-columns: 1fr;
  }
}
.panel.gallery {
  grid-column: 1 / -1;
}

/* las líneas onduladas que antes separaban una sección de la
   siguiente (el "<svg class="flourish">" que se repite en el HTML)
   dejan de tener sentido con las tarjetas en columnas — quedaban
   como una rayita suelta cortando el flujo de una sola columna al
   azar. Cada .panel ya se lee solo como tarjeta (tiene su propio
   borde y fondo), así que directamente se ocultan acá en vez de
   sacarlas una por una del HTML — si en algún momento las querés de
   vuelta, borrar esta regla alcanza. */
.flourish {
  display: none;
}

.panel {
  background: var(--panel);
  border: 1px solid var(--panel-border);
  border-radius: 6px;
  padding: 30px 30px;
  position: relative;
  opacity: 0;
  transform: translateY(18px);
  transition: opacity .7s ease, transform .7s ease;
  /* con CSS Grid ya no hace falta el truco de inline-block +
     break-inside que usaba multi-column — un panel simplemente ES
     una celda del grid, nunca se puede partir a la mitad. Tampoco
     hace falta margin-bottom: el espacio entre cajas ahora lo pone
     "gap" en .content-column. */
}

.panel.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* los párrafos de texto corrido (bio, notas, descripciones) NO se
   estiran hasta el borde del panel — un renglón de texto de 400-500px
   ya es cómodo de leer de por sí, pero esto sigue actuando como techo
   de seguridad por si algún panel queda muy ancho en pantallas raras.
   El resto del panel (grillas de fotos, filas de íconos, ofrendas)
   SÍ usa todo el ancho disponible; esta regla solo afecta a <p> que
   cuelgan directo de un .panel. */

.panel > p {
  max-width: 66ch;
}

/* pasa de Space Mono todo-mayúsculas a Permanent Marker (ver
   variable --marker, sección 1) — look "diario/scrapbook" en vez de
   "terminal". Si preferís el look anterior, volvé font-family a
   var(--mono) y descomentá text-transform:uppercase. */

.eyebrow {
  font-family: var(--marker);
  font-size: 15px;
  letter-spacing: .02em;
  /*text-transform: uppercase;*/
  color: var(--cyan);
  margin: 0 0 6px;
}

h2.section-title {
  font-family: var(--script);
  font-size: 34px;
  font-weight: 400;
  color: var(--magenta);
  margin: 0 0 18px;
  text-shadow: 0 0 18px rgba(255,47,146,0.35);
}

p {
  font-size: 17px;
  line-height: 1.8;
  color: var(--text);
  font-style: italic;
  margin: 0 0 14px;
}

p.placeholder-note {
  font-family: var(--mono);
  font-style: normal;
  font-size: 12px;
  color: var(--text-muted);
  letter-spacing: .02em;
}

/* ==================================================================
   3. HERO — retrato circular con brillo de vela + firma + saludo
   ================================================================== */

.hero {
  text-align: center;
  padding: 90px 20px 30px;
  position: relative;
}

/* el saludo que se escribe solo al cargar la página (efecto máquina
   de escribir). El texto se define en el JS, variable whisperText. */

.whisper {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: .12em;
  color: var(--text-muted);
  text-align: center;
  min-height: 16px;
  margin-bottom: 10px;
  border-right: 1px solid transparent;
}

.whisper.typing {
  border-right-color: var(--text-muted);
  animation: blink 1s step-end infinite;
}

@keyframes blink {
  50% {
    border-color: transparent;
  }
}

.shrine-frame {
  position: relative;
  width: 188px;
  height: 188px;
  margin: 0 auto 22px;
  cursor: pointer; /* única pista de que se puede tocar — ver "SECRETO DEL RETRATO" en el JS */
}

/* el "brillo de vela": dos capas parpadeando fuera de sincro para que
   se sienta orgánico y no una animación perfecta y robótica */

.shrine-frame::before, .shrine-frame::after {
  content: '';
  position: absolute;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,179,122,0.55), transparent 65%);
  filter: blur(20px);
}

.shrine-frame::before {
  inset: -40px;
  animation: flicker-a 2.6s ease-in-out infinite;
}

.shrine-frame::after {
  inset: -55px;
  filter: blur(28px);
  animation: flicker-b 3.7s ease-in-out infinite;
}

@keyframes flicker-a {
  0% {
    opacity: .5;
    transform: scale(.97);
  }
  30% {
    opacity: .85;
    transform: scale(1.03);
  }
  55% {
    opacity: .55;
    transform: scale(.99);
  }
  78% {
    opacity: .8;
    transform: scale(1.02);
  }
  100% {
    opacity: .6;
    transform: scale(1);
  }
}

@keyframes flicker-b {
  0% {
    opacity: .32;
    transform: scale(1);
  }
  40% {
    opacity: .55;
    transform: scale(1.04);
  }
  70% {
    opacity: .38;
    transform: scale(.98);
  }
  100% {
    opacity: .5;
    transform: scale(1.02);
  }
}

@media (prefers-reduced-motion: reduce) {
  .shrine-frame::before, .shrine-frame::after {
    animation: none;
    opacity: .5;
  }
}

/* REEMPLAZAR FOTO: cambiá el contenido de .photo-slot por
   <img src="tu-foto.jpg" alt="tu nombre" style="width:100%;height:100%;
   object-fit:cover;border-radius:50%;"> y listo. */

.photo-slot {
  position: relative;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  border: 2px solid rgba(255,255,255,0.18);
  background: var(--void-2);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 6px;
  z-index: 1;
  overflow: hidden;
}

.photo-slot span {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: .08em;
  color: var(--text-muted);
  text-align: center;
  padding: 0 20px;
}

/* la foto de acá adentro puede ser cualquier tamaño/proporción — con
   esto siempre queda recortada y centrada llenando el círculo entero,
   así que no hace falta ajustar nada a mano cada vez que agregás una
   foto nueva al pool (ver HERO_PHOTOS en el JS). */
.photo-slot img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* bajado de 56px fijo a un clamp(): Rubik Bubbles es una fuente
   mucho más "ancha" que la Alex Brush script de antes, y un nombre
   largo a 56px se desbordaba o se partía feo en pantallas chicas.
   clamp(mínimo, preferido, máximo) hace que se achique solo en
   mobile sin necesitar otro número aparte en la media query de abajo. */

h1.signature {
  font-family: var(--script);
  font-size: clamp(26px, 6vw, 40px);
  font-weight: 400;
  line-height: 1.25;
  margin: 8px 0 2px;
  color: #fff;
  text-shadow: 0 0 22px rgba(139,92,246,0.45);
}

.alias {
  font-family: var(--mono);
  font-size: 13px;
  color: var(--text-muted);
  letter-spacing: .1em;
  margin-bottom: 18px;
}

.tag-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: center;
  margin-top: 16px;
}

.tag-pill {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--violet);
  background: rgba(139,92,246,0.12);
  border: 1px solid rgba(139,92,246,0.4);
  border-radius: 999px;
  padding: 6px 14px;
}

/* Botón de ambiente sonoro (el equivalente a "los labios" de tu home).
   Es puramente visual: no reproduce audio real todavía. Para conectar
   tu SFX real, mirá el comentario en la sección de JS "SFX TOGGLE". */

.sfx-toggle {
  position: fixed;
  top: 18px;
  right: 18px;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--panel-border);
  background: var(--panel);
  color: var(--text-muted);
  cursor: pointer;
  z-index: 10;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: color .3s, border-color .3s, box-shadow .3s;
}

.sfx-toggle.active {
  color: var(--magenta);
  border-color: var(--magenta);
  box-shadow: 0 0 16px rgba(255,47,146,0.45);
}

.sfx-icon {
  display: flex;
  gap: 2px;
  align-items: flex-end;
  height: 14px;
}

.sfx-icon i {
  width: 2px;
  background: currentColor;
  height: 4px;
  border-radius: 1px;
  display: block;
}

.sfx-toggle.active .sfx-icon i {
  animation: eq .8s ease-in-out infinite;
}

.sfx-toggle.active .sfx-icon i:nth-child(2) {
  animation-delay: .2s;
}

.sfx-toggle.active .sfx-icon i:nth-child(3) {
  animation-delay: .4s;
}

@keyframes eq {
  0%, 100% {
    height: 4px;
  }
  50% {
    height: 12px;
  }
}

/* Pestaña fija para volver al índice del sitio (Archivo Proditae /
   Archivo Amenepop). Ver el comentario largo junto al <a> en el
   HTML sobre la ruta "../index.html" — es importante porque esta
   página y el índice real del sitio se llaman las dos "index.html". */

.index-tab {
  position: fixed;
  top: 18px;
  left: 18px;
  z-index: 10;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--text-muted);
  text-decoration: none;
  background: var(--panel);
  border: 1px solid var(--panel-border);
  border-radius: 4px;
  padding: 9px 14px;
  transition: color .3s, border-color .3s, box-shadow .3s;
}

.index-tab:hover {
  color: var(--cyan);
  border-color: var(--cyan);
  box-shadow: 0 0 14px rgba(47,224,208,0.4);
}

/* ==================================================================
   4. CURSOR PERSONALIZADO
   Reemplaza el cursor normal del sistema por una chispita ✦ que
   sigue al mouse, más una ondita de luz cada vez que hacés clic.
   Se activa solo por JS (mirá "CURSOR PERSONALIZADO" en el script):
   si por lo que sea el JS no corre, el cursor normal se queda tal
   cual — nunca desaparece del todo.
   ------------------------------------------------------------------
   Para cambiar la forma: reemplazá el <path> de #cursorDot en el
   HTML por cualquier otro dibujo SVG. Para cambiar el color: tocá
   fill/filter de .cursor-dot .cursor-shape acá abajo.
   ================================================================== */

html.custom-cursor-on, html.custom-cursor-on * {
  cursor: none !important;
}

.cursor-dot {
  position: fixed;
  top: 0;
  left: 0;
  width: 22px;
  height: 22px;
  pointer-events: none;
  z-index: 9999;
  transform: translate(-50%,-50%);
  transition: width .2s ease, height .2s ease;
  will-change: left, top;
}

.cursor-dot svg {
  width: 100%;
  height: 100%;
  display: block;
}

.cursor-dot .cursor-shape {
  fill: var(--magenta);
  filter: drop-shadow(0 0 6px var(--magenta));
  transition: fill .2s ease, filter .2s ease;
}

.cursor-dot.hovering {
  width: 32px;
  height: 32px;
}

.cursor-dot.hovering .cursor-shape {
  fill: var(--cyan);
  filter: drop-shadow(0 0 9px var(--cyan));
}

/* la ondita cálida que se expande en el punto exacto del clic */

.click-ripple {
  position: fixed;
  top: 0;
  left: 0;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 1px solid var(--candle);
  pointer-events: none;
  z-index: 9998;
  transform: translate(-50%,-50%) scale(1);
  opacity: .9;
  animation: rippleOut .5s ease-out forwards;
}

@keyframes rippleOut {
  to {
    transform: translate(-50%,-50%) scale(4.5);
    opacity: 0;
  }
}

/* que las ofrendas se vean clickeables incluso antes de que el
   cursor personalizado termine de cargar */

.egg-slot, .corner-egg {
  cursor: pointer;
}

/* ---------- separadores ornamentales ---------- */

/* subido de 220px a 320px para que no se vean como una rayita
   perdida ahora que los paneles de arriba/abajo son más anchos */

.flourish {
  display: block;
  width: 320px;
  height: 26px;
  margin: 34px auto;
  color: rgba(237,233,245,0.35);
}

/* ==================================================================
   5. SOBRE MÍ — bio + datos rápidos
   ================================================================== */

ul.quick-facts {
  list-style: none;
  margin: 18px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
  gap: 14px 22px;
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text-muted);
}

ul.quick-facts li b {
  color: var(--cyan);
  display: block;
  font-size: 10px;
  letter-spacing: .1em;
  text-transform: uppercase;
  margin-bottom: 2px;
}

/* ==================================================================
   6. GALERÍA — fotos estilo polaroid
   Esta sección ahora se arma sola por JS a partir de una lista de
   fotos (buscá "PHOTOS =" en el script, sección GALERÍA). No hace
   falta tocar este HTML/CSS para agregar fotos nuevas.
   ================================================================== */

/* antes esto envolvía en filas nuevas hacia abajo sin límite (por
   eso hacía falta el botón "cargar más"). Ahora son SIEMPRE 2 filas
   fijas, y si hay más fotos de las que entran en el ancho de
   pantalla, aparece scroll horizontal solo — no hay límite de
   cuántas fotos puede haber en PHOTOS (ver script.js), todas se
   renderizan de una, simplemente las que no entran quedan "afuera"
   hasta que scrolleás.
   grid-auto-columns es el ancho fijo de cada foto — si querés
   fotos más grandes/chicas, ese es el número a tocar. */
.polaroid-grid {
  display: grid;
  grid-auto-flow: column;
  grid-template-rows: repeat(2, auto);
  grid-auto-columns: 160px;
  gap: 26px 20px;
  margin-top: 8px;
  overflow-x: auto;
  overflow-y: hidden;
  padding-bottom: 16px;
  scrollbar-color: var(--magenta) var(--void-2);
}
.polaroid-grid::-webkit-scrollbar {
  height: 8px;
}
.polaroid-grid::-webkit-scrollbar-track {
  background: var(--void-2);
  border-radius: 4px;
}
.polaroid-grid::-webkit-scrollbar-thumb {
  background: var(--magenta);
  border-radius: 4px;
}
.polaroid-grid::-webkit-scrollbar-thumb:hover {
  background: var(--violet);
}

.polaroid {
  background: #f2f0ea;
  padding: 10px 10px 30px;
  border-radius: 2px;
  box-shadow: 0 10px 24px rgba(0,0,0,0.45);
  transition: transform .35s ease, box-shadow .35s ease;
  transform: rotate(var(--rot, 0deg));
}

.polaroid:hover, .polaroid:focus-visible {
  transform: rotate(0deg) scale(1.05);
  box-shadow: 0 16px 34px rgba(255,47,146,0.25);
  z-index: 2;
  outline: none;
}

.polaroid .frame {
  aspect-ratio: 1/1;
  background: repeating-linear-gradient(135deg, #1c1a24, #1c1a24 8px, #221f2c 8px, #221f2c 16px);
  border: 1px dashed rgba(255,255,255,0.25);
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  overflow: hidden;
  position: relative;
}

.polaroid .frame img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* si el archivo de la foto todavía no existe (ruta rota), el <img>
   se oculta solo y queda el fondo a rayitas con este aviso en vez de
   un ícono de imagen rota feo */

.frame.img-missing img {
  display: none;
}

.frame.img-missing::after {
  content: 'falta esta foto';
  font-family: var(--mono);
  font-size: 10px;
  color: rgba(237,233,245,0.55);
  padding: 0 10px;
}

.polaroid figcaption {
  font-family: var(--mono);
  font-size: 10px;
  color: #3a3542;
  text-align: center;
  margin-top: 10px;
  letter-spacing: .03em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* estilo de botón genérico reutilizable — mismo lenguaje visual que
   la pestaña de índice / el link del footer. Lo usan varios botones
   sueltos por el sitio (copiar código, otra carta, apagar velas);
   ya NO lo usa la galería (que ahora es scroll horizontal, sin
   botón de "cargar más"). */

.load-more-btn {
  display: block;
  margin: 24px auto 0;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--text-muted);
  background: transparent;
  border: 1px solid var(--panel-border);
  border-radius: 4px;
  padding: 10px 22px;
  cursor: pointer;
  transition: color .3s, border-color .3s, box-shadow .3s;
}

.load-more-btn:hover {
  color: var(--magenta);
  border-color: var(--magenta);
  box-shadow: 0 0 14px rgba(255,47,146,0.3);
}

.load-more-btn[hidden] {
  display: none;
}

/* ---------- lightbox: vista ampliada al hacer clic en una foto ----------
   max-width de la imagen queda en 500px a propósito: tus fotos son
   nativas de 500×500px, así que mostrarlas más grandes que eso solo
   las volvería borrosas (estás agrandando más allá de su resolución
   real). Si en algún momento subís fotos más grandes, buscá
   "min(500px, 90vw)" acá abajo y subí ese número. */

.lightbox {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(5,4,8,0.92);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 14px;
  opacity: 0;
  pointer-events: none;
  transition: opacity .3s ease;
  padding: 20px;
}

.lightbox.open {
  opacity: 1;
  pointer-events: auto;
}

.lightbox-img {
  max-width: min(500px, 90vw);
  max-height: 70vh;
  width: auto;
  height: auto;
  border: 1px solid var(--panel-border);
  box-shadow: 0 20px 60px rgba(0,0,0,0.6);
  background: #f2f0ea;
}

.lightbox-caption {
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text-muted);
  text-align: center;
  max-width: 80vw;
}

.lightbox-close, .lightbox-prev, .lightbox-next {
  position: fixed;
  background: var(--panel);
  border: 1px solid var(--panel-border);
  color: var(--text-muted);
  border-radius: 50%;
  width: 42px;
  height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  cursor: pointer;
  transition: color .3s, border-color .3s;
}

.lightbox-close:hover, .lightbox-prev:hover, .lightbox-next:hover {
  color: var(--magenta);
  border-color: var(--magenta);
}

.lightbox-close {
  top: 18px;
  right: 18px;
}

.lightbox-prev {
  left: 18px;
  top: 50%;
  transform: translateY(-50%);
}

.lightbox-next {
  right: 18px;
  top: 50%;
  transform: translateY(-50%);
}

@media (max-width:600px) {
  .lightbox-prev {
    left: 8px;
  }
}

@media (max-width:600px) {
  .lightbox-next {
    right: 8px;
  }
}

/* ==================================================================
   7. TAROT — carta con frases al azar (buscá "TAROT" en el JS
   para la lista de frases: var TAROT_DECK)
   ================================================================== */

.tarot-wrap {
  display: flex;
  justify-content: center;
  margin-top: 10px;
  perspective: 1200px;
}

.tarot-card {
  /* antes era 150x230 — funcionaba con --script en Alex Brush (una
     cursiva finita). Ahora --script es Rubik Bubbles (una fuente
     "burbuja" mucho más ancha por letra), así que a los nombres
     largos ("La Rueda de la Fortuna") no les entraba ni de cerca.
     Agrandé la carta y achiqué el nombre en .tarot-name de acá abajo
     en vez de solo una de las dos cosas, para que quede prolijo y no
     al límite. */
  width: 190px;
  height: 260px;
  cursor: pointer;
}

.tarot-inner {
  position: relative;
  width: 100%;
  height: 100%;
  transition: transform .6s cubic-bezier(.2,.8,.2,1);
  transform-style: preserve-3d;
}

.tarot-card.flipped .tarot-inner {
  transform: rotateY(180deg);
}

.tarot-face {
  position: absolute;
  inset: 0;
  backface-visibility: hidden;
  border-radius: 8px;
  border: 1px solid var(--panel-border);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  padding: 16px;
  text-align: center;
  gap: 10px;
}

.tarot-back {
  background: linear-gradient(135deg, var(--void-2), #201a30);
}

.tarot-back-glyph {
  width: 38px;
  height: 38px;
  fill: var(--violet);
  filter: drop-shadow(0 0 10px var(--violet));
}

.tarot-front {
  background: var(--panel);
  transform: rotateY(180deg);
}

.tarot-name {
  font-family: var(--script);
  font-size: 19px;
  line-height: 1.25;
  font-weight: 400;
  color: var(--magenta);
  margin: 0;
  overflow-wrap: break-word;
}

.tarot-msg {
  font-family: var(--body);
  font-style: italic;
  font-size: 13px;
  color: var(--text);
  line-height: 1.5;
  margin: 0;
}

/* el botón "otra carta": antes usaba el atributo "hidden" (display:
   none) y recién aparecía después del primer clic. El problema es
   que en un layout de columnas (ver .content-column, sección de
   layout general), cuando la altura de UNA tarjeta cambia después de
   cargar la página, el navegador reacomoda TODA la columna — por eso
   las demás cajas saltaban de lugar apenas tocabas el tarot.
   La solución es reservarle el espacio desde el principio con
   visibility (que sigue ocupando su lugar, solo que invisible) en
   vez de display (que no ocupa nada). Así la altura de la tarjeta de
   tarot es SIEMPRE la misma, tocada o no, y nada más se mueve. */
#tarotRedraw {
  visibility: hidden;
}
#tarotRedraw.is-shown {
  visibility: visible;
}

/* ==================================================================
   8. REDES — botones a redes sociales
   ================================================================== */

.icon-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 20px 28px;
  margin-top: 10px;
}

.icon-badge {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  width: 76px;
}

.icon-badge .circle {
  width: 54px;
  height: 54px;
  border-radius: 50%;
  border: 1px solid var(--panel-border);
  background: var(--void-2);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 700;
  color: var(--text);
  transition: box-shadow .3s, border-color .3s, transform .3s, color .3s;
}

.icon-badge span.label {
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.icon-badge:hover .circle {
  transform: translateY(-4px);
  color: #fff;
  border-color: var(--accent, var(--magenta));
  box-shadow: 0 0 18px var(--accent, var(--magenta));
}

/* ==================================================================
   9. BOTÓN 88×31 — botón de sitio estilo webring viejo
   ================================================================== */

.button88-img {
  display: block;
  margin: 16px auto 0;
  image-rendering: pixelated;
  box-shadow: 0 6px 16px rgba(0,0,0,0.4);
  border-radius: 2px;
}

.code-copy-wrap {
  display: flex;
  flex-direction: column;
  gap: 10px;
  align-items: center;
  margin-top: 6px;
}

.code-copy-box {
  width: 100%;
  max-width: 420px;
  background: #050506;
  border: 1px solid var(--panel-border);
  border-radius: 4px;
  color: var(--cyan);
  font-family: var(--mono);
  font-size: 11px;
  padding: 10px;
  resize: none;
}

/* ==================================================================
   10. OFRENDAS — easter eggs / clip arts escondidos
   Son casilleros vacíos, pensados para tus gifs sueltos (como los
   que tenías desparramados al pie de tu home). Cada .egg-slot es un
   casillero. Para agregar más, copiá y pegá un bloque .egg-slot
   entero (en el HTML) y cambiá la rotación con --r si querés.
   Para poner contenido real: reemplazá el glifo de adentro por
   <img src="tu-gif.gif" style="width:100%;height:100%;object-fit:contain;">
   ================================================================== */

.offerings-tray {
  display: flex;
  flex-wrap: wrap;
  gap: 22px;
  justify-content: center;
  margin-top: 14px;
}

.egg-slot {
  width: 52px;
  height: 52px;
  border: 1px dashed rgba(255,255,255,0.3);
  border-radius: 8px;
  background: rgba(255,255,255,0.03);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  color: var(--text-muted);
  transform: rotate(var(--r,0deg));
  transition: transform .3s, border-color .3s, color .3s;
  cursor: default;
}

.egg-slot:hover {
  transform: rotate(0deg) scale(1.12);
  border-color: var(--candle);
  color: var(--candle);
}

/* casilleros pequeños "pegados" a la esquina de algunos paneles,
   como stickers. Necesitan que el .panel tenga position:relative
   (ya lo tiene, mirá más arriba en este CSS). Para sacarlos, borrá
   el <div class="corner-egg"> correspondiente en el HTML. */

.corner-egg {
  position: absolute;
  width: 38px;
  height: 38px;
  border: 1px dashed rgba(255,255,255,0.3);
  border-radius: 8px;
  background: rgba(0,0,0,0.25);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  color: var(--text-muted);
  transform: rotate(var(--r,-8deg));
  z-index: 3;
}

/* tooltip que sigue al mouse mientras pasás por una ofrenda, y texto
   que "sube como humo" cuando le hacés clic — ambos muestran la
   frase del atributo data-msg de cada .egg-slot/.corner-egg (ver
   sección OFRENDAS: SONIDO Y TACTO en el JS) */

.offering-tooltip {
  position: fixed;
  z-index: 9997;
  pointer-events: none;
  background: var(--panel);
  border: 1px solid var(--panel-border);
  border-radius: 4px;
  padding: 6px 10px;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--text);
  max-width: 220px;
  text-align: center;
  opacity: 0;
  transform: translate(-50%,-130%);
  transition: opacity .2s ease;
}

.offering-tooltip.visible {
  opacity: 1;
}

.floating-whisper {
  position: fixed;
  z-index: 9997;
  pointer-events: none;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--candle);
  text-shadow: 0 0 8px rgba(255,179,122,0.6);
  transform: translate(-50%,-50%);
  white-space: nowrap;
  animation: whisperRise 2.2s ease-out forwards;
}

@keyframes whisperRise {
  0% {
    opacity: 0;
    transform: translate(-50%,-50%) translateY(0);
  }
  15% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    transform: translate(-50%,-50%) translateY(-70px);
  }
}

/* ==================================================================
   11. VELAS — velas que los visitantes pueden encender
   ================================================================== */

.candle-row {
  display: flex;
  justify-content: center;
  gap: 18px;
  margin-top: 18px;
  flex-wrap: wrap;
}

.candle {
  position: relative;
  width: 34px;
  height: 70px;
  cursor: pointer;
}

.candle-body {
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 20px;
  height: 46px;
  background: linear-gradient(180deg,#3a3542,#231f2c);
  border-radius: 3px 3px 1px 1px;
  border: 1px solid rgba(255,255,255,0.08);
}

.candle-wick {
  position: absolute;
  bottom: 46px;
  left: 50%;
  transform: translateX(-50%);
  width: 2px;
  height: 8px;
  background: #0b0a12;
}

.candle-flame {
  position: absolute;
  bottom: 52px;
  left: 50%;
  width: 14px;
  height: 20px;
  transform: translateX(-50%) scale(0);
  opacity: 0;
  transition: transform .4s ease, opacity .4s ease;
  background: radial-gradient(circle at 50% 70%, #fff2c4, var(--candle) 55%, transparent 75%);
  border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
}

.candle.lit .candle-flame {
  transform: translateX(-50%) scale(1);
  opacity: 1;
  animation: flicker-a 2.4s ease-in-out infinite;
}

.candle-msg {
  min-height: 16px;
  text-align: center;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--candle);
  margin-top: 14px;
}

/* ==================================================================
   12. CONTADOR — visitas estilo web retro
   Ver comentario largo en la sección de JS "CONTADOR DE VISITAS"
   sobre cómo funciona y sus límites (guarda en el navegador, no es
   un contador global compartido a menos que le agregues un backend).
   ================================================================== */

.counter-wrap {
  text-align: center;
  padding: 14px 0 6px;
  margin-top: 22px;
}

.counter-label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 10px;
}

.counter-display {
  display: inline-flex;
  gap: 4px;
  background: #050506;
  border: 1px solid rgba(255,47,146,0.35);
  border-radius: 4px;
  padding: 10px 16px;
}

.counter-display span {
  font-family: var(--mono);
  font-size: 22px;
  font-weight: 700;
  color: var(--magenta);
  text-shadow: 0 0 10px rgba(255,47,146,0.7);
}

.counter-sub {
  font-family: var(--mono);
  font-size: 10px;
  color: var(--text-muted);
  margin-top: 8px;
}

/* ==================================================================
   13. FOOTER
   ================================================================== */

footer {
  text-align: center;
  padding: 50px 20px 80px;
  position: relative;
}

footer .motto {
  font-family: var(--script);
  font-size: 26px;
  color: var(--text);
  margin-bottom: 18px;
}

/* misma técnica de grid que .content-column (ver sección de layout
   general, arriba de todo): 3 columnas, filas parejas. Va acá el
   trío Oráculo/Ofrendas/Velas, que ahora vive en el footer en vez
   del cuerpo principal. text-align vuelve a la izquierda adentro
   (el footer entero es centrado, pero el contenido de estos paneles
   se lee mejor alineado a la izquierda, igual que arriba). */
.footer-trio {
  max-width: min(1500px, 94vw);
  margin: 40px auto;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 26px;
  text-align: left;
}
@media (max-width: 640px) {
  .footer-trio {
    grid-template-columns: 1fr;
  }
}

footer .credits {
  font-family: var(--mono);
  font-size: 10px;
  color: var(--text-muted);
  letter-spacing: .04em;
  line-height: 1.9;
}

footer .credits a {
  color: var(--cyan);
  text-decoration: none;
}

footer .back-link {
  display: inline-block;
  margin-top: 18px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--text-muted);
  text-decoration: none;
  border: 1px solid var(--panel-border);
  border-radius: 4px;
  padding: 9px 16px;
  transition: color .3s, border-color .3s;
}

footer .back-link:hover {
  color: var(--cyan);
  border-color: var(--cyan);
}

/* el clamp() de h1.signature ya se encarga de achicarse solo acá,
     así que esta media query no necesita pisarlo con un valor fijo. */

@media (max-width:480px) {
  .panel {
    padding: 26px 20px;
  }
}

@media (max-width:480px) {
  .cursor-glow {
    display: none;
  }
}

/* no tiene sentido en pantallas táctiles */

@media (max-width:480px) {
  .marquee-wrap {
    font-size: 11px;
  }
}

/* ==================================================================
   14. EXTRAS Y2K / SCENE — todo lo nuevo del rediseño "spin diary"
   vive acá abajo, aparte, para no mezclarse con las 13 secciones de
   arriba (que siguen intactas). Si en algún momento querés volver
   para atrás y sacar SOLO lo nuevo, podés borrar esta sección
   entera de acá hasta el final del archivo — nada de arriba depende
   de esto.
   ------------------------------------------------------------------
   Incluye: franja de cuadraditos (checker), cartel tipo blinkie con
   texto corriendo (marquee), stickers sueltos en el hero, y cinta de
   washi tape en las esquinas de las polaroids de la galería.
   ================================================================== */

/* ---------- franja de corazones (antes era un checkerboard) ----------
   Van dos franjas: una arriba de todo (antes del hero) y otra abajo
   de todo (después del footer). Es un SVG chiquito con 2 corazones
   (uno negro, uno rosa/magenta — el mismo #ff2f92 que ya se usa en
   el resto del sitio) repetido en mosaico con background-repeat, no
   son elementos HTML sueltos.
   Para cambiar el color rosa: buscá "%23ff2f92" acá abajo (el %23 es
   el "#" de un color hex, pero codificado porque estamos adentro de
   una URL) y reemplazalo por el hex que quieras, SIN el "#".
   Para sacar la franja entera: borrá los <div class="checker-strip">
   del HTML (buscá "checker-strip"), no hace falta tocar nada acá. */

.checker-strip {
  height: 24px;
  width: 100%;
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='56'%20height='24'%20viewBox='0%200%2056%2024'%3E%3Cpath%20fill='%23000000'%20d='M12,21.35l-1.45-1.32C5.4,15.36,2,12.28,2,8.5C2,5.42,4.42,3,7.5,3c1.74,0,3.41,0.81,4.5,2.09C13.09,3.81,14.76,3,16.5,3C19.58,3,22,5.42,22,8.5c0,3.78-3.4,6.86-8.55,11.54L12,21.35z'/%3E%3Cpath%20fill='%23ff2f92'%20d='M12,21.35l-1.45-1.32C5.4,15.36,2,12.28,2,8.5C2,5.42,4.42,3,7.5,3c1.74,0,3.41,0.81,4.5,2.09C13.09,3.81,14.76,3,16.5,3C19.58,3,22,5.42,22,8.5c0,3.78-3.4,6.86-8.55,11.54L12,21.35z'%20transform='translate(28,0)'/%3E%3C/svg%3E");
  background-repeat: repeat-x;
  background-size: 56px 24px;
  position: relative;
  z-index: 6;
}

/* ---------- blinkie / marquee: cartel con texto corriendo ----------
   Igual concepto que en tu "spin diary": una tira de texto que se
   desliza sola, como los banners de MySpace/Neocities/Fotolog de
   época. El texto se define en el HTML (buscá "marquee-wrap"), así
   que para cambiar la frase no hace falta tocar este CSS. */

.marquee-wrap {
  max-width: min(1140px, 90vw);
  margin: 18px auto 0;
  overflow: hidden;
  white-space: nowrap;
  border-top: 1px dashed var(--grape);
  border-bottom: 1px dashed var(--grape);
  padding: 7px 0;
}

.marquee {
  display: inline-block;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: .04em;
  color: var(--text);
  padding-left: 100%;
  animation: marqueeScroll 24s linear infinite;
}

@keyframes marqueeScroll {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-100%);
  }
}

@media (prefers-reduced-motion: reduce) {
  .marquee {
    animation: none;
    padding-left: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .marquee-wrap {
    white-space: normal;
    overflow: visible;
    text-align: center;
  }
}

/* ---------- stickers sueltos cerca del hero ----------
   Glifos decorativos posicionados a mano alrededor del retrato, como
   los stickers/clip-arts pegoteados en un perfil viejo. Son
   pointer-events:none (no se pueden clickear, no estorban). Para
   sacar alguno, borrá el <span class="sticker sX"> correspondiente
   en el HTML. Para agregar uno nuevo: copiá un bloque sX de acá
   abajo con otra letra/número y usalo en el HTML. */

.hero {
  overflow: visible;
}

.sticker {
  position: absolute;
  pointer-events: none;
  font-size: 22px;
  opacity: .85;
  filter: drop-shadow(0 0 6px rgba(255,47,146,0.7));
  z-index: 2;
}

.sticker.s1 {
  top: 6px;
  left: 8%;
  color: var(--bubblegum);
  transform: rotate(-16deg);
}

.sticker.s2 {
  top: 70px;
  left: 2%;
  color: var(--grape);
  transform: rotate(10deg);
  font-size: 16px;
}

.sticker.s3 {
  top: 6px;
  right: 8%;
  color: var(--magenta);
  transform: rotate(14deg);
}

.sticker.s4 {
  top: 70px;
  right: 2%;
  color: var(--bubblegum);
  transform: rotate(-12deg);
  font-size: 16px;
}

@media (max-width:600px) {
  .sticker {
    display: none;
  }
}

/* en mobile molestan más de lo que suman */

/* ---------- washi tape en las esquinas de las polaroids ----------
   Se suma a la regla .polaroid que ya existe en la sección 6 (GALERÍA)
   más arriba — no la reemplaza, la extiende. position:relative acá
   es necesario para que la cinta (::before/::after) se pueda anclar
   a la esquina de CADA polaroid en vez de a la página entera. */

.polaroid {
  position: relative;
}

.polaroid::before, .polaroid::after {
  content: '';
  position: absolute;
  width: 26px;
  height: 11px;
  background-image: repeating-linear-gradient(90deg, #000 0 4px, #f2f0ea 4px 8px);
  opacity: .9;
  z-index: 3;
  pointer-events: none;
}

.polaroid::before {
  top: -6px;
  left: -6px;
  transform: rotate(-10deg);
}

.polaroid::after {
  bottom: 22px;
  right: -6px;
  transform: rotate(96deg);
}

