/*
 * shared.css — Thruver
 * Estilos base compartidos por todas las páginas.
 * Cada página importa este archivo y añade sus propios estilos específicos.
 */

/* ── GOOGLE FONTS ─────────────────────────────────────── */
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;0,9..40,800;0,9..40,900;1,9..40,400&family=DM+Mono:wght@400;500;600&display=swap');

/* ── RESET ────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}

/* ── HTML / BODY BASE ─────────────────────────────────── */
html{
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
}
body{
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}

/* ── ELEMENTOS BASE ───────────────────────────────────── */
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}

/* ── ANIMACIONES COMUNES ──────────────────────────────── */

/* fade simple */
@keyframes fadeIn{
  from{opacity:0}
  to{opacity:1}
}

/* fade con desplazamiento vertical hacia arriba */
@keyframes fadeUp{
  from{opacity:0;transform:translateY(12px)}
  to{opacity:1;transform:translateY(0)}
}

/* slide desde abajo (modales, drawers) */
@keyframes slideUp{
  from{opacity:0;transform:translateY(14px)}
  to{opacity:1;transform:translateY(0)}
}

/* slide desde arriba (tooltips, dropdowns) */
@keyframes slideIn{
  from{opacity:0;transform:translateY(-5px)}
  to{opacity:1;transform:translateY(0)}
}

/* parpadeo suave (status indicators) */
@keyframes pulse{
  0%,100%{opacity:1}
  50%{opacity:0.35}
}

/* parpadeo binario (cursores, live indicators) */
@keyframes blink{
  0%,49%{opacity:1}
  50%,100%{opacity:0.25}
}

/* toast / notificación */
@keyframes toastIn{
  from{opacity:0;transform:translateY(10px)}
  to{opacity:1;transform:translateY(0)}
}

/* rotación continua (spinners) */
@keyframes spin{
  to{transform:rotate(360deg)}
}
