/* Tema visual de CiberStudy (variables CSS, estilo shadcn/ui). La app fuerza
   siempre <html class="dark">, así que en la práctica solo se usa el bloque
   .dark — el de :root queda como base/fallback. No tocar los valores sin
   avisar: son el tema elegido a propósito, no un placeholder. */

:root {
  --card: #1c1c1c;
  --ring: hsl(0 85% 45%);
  --input: hsl(0 0% 20%);
  --muted: #292929;
  --accent: #a71b1b;
  --border: hsl(0 14% 20%);
  --radius: 4px;
  --chart-1: hsl(345,100%,35%);
  --chart-2: hsl(173,58%,39%);
  --chart-3: hsl(43 74% 66%);
  --chart-4: hsl(27,87%,67%);
  --chart-5: hsl(12,76%,61%);
  --popover: hsl(0,0%,100%);
  --primary: #c81e1e;
  --sidebar: hsl(45,20%,98%);
  --spacing: 0.25rem;
  --font-mono: "JetBrains Mono", monospace;
  --font-sans: "Lexend", sans-serif;
  --secondary: #d4af35;
  --background: #121212;
  --font-serif: "Adamina", serif;
  --foreground: #f5f5f5;
  --destructive: hsl(0,84%,60%);
  --shadow-blur: 10px;
  --shadow-color: hsl(345,100%,15%);
  --sidebar-ring: hsl(345,100%,35%);
  --shadow-spread: 0px;
  --letter-spacing: 0;
  --shadow-opacity: 0.05;
  --sidebar-accent: hsl(45,30%,93%);
  --sidebar-border: hsl(45,10%,90%);
  --card-foreground: #f5f5f5;
  --shadow-offset-x: 0px;
  --shadow-offset-y: 2px;
  --sidebar-primary: hsl(345,100%,35%);
  --muted-foreground: #b0b0b0;
  --accent-foreground: #ffffff;
  --popover-foreground: hsl(345,100%,15%);
  --primary-foreground: #ffffff;
  --sidebar-foreground: hsl(345,100%,15%);
  --secondary-foreground: #1a1a1a;
  --destructive-foreground: hsl(0,0%,98%);
  --sidebar-accent-foreground: hsl(345,100%,35%);
  --sidebar-primary-foreground: hsl(0,0%,100%);
}

.dark {
  --card: hsl(0,0%,12%);
  --ring: hsl(345,100%,45%);
  --input: hsl(0,0%,20%);
  --muted: hsl(0,0%,15%);
  --accent: hsl(345,100%,20%);
  --border: hsl(0,0%,20%);
  --radius: 4px;
  --chart-1: hsl(345,100%,45%);
  --chart-2: hsl(173,58%,50%);
  --chart-3: hsl(43,74%,75%);
  --chart-4: hsl(27,87%,75%);
  --chart-5: hsl(12,76%,70%);
  --popover: hsl(0,0%,10%);
  --primary: hsl(345,100%,45%);
  --sidebar: hsl(0,0%,8%);
  --spacing: 0.25rem;
  --font-mono: "JetBrains Mono", monospace;
  --font-sans: "Poppins", sans-serif;
  --secondary: hsl(0,0%,20%);
  --background: hsl(0,0%,10%);
  --font-serif: "Playfair Display", serif;
  --foreground: hsl(0,0%,98%);
  --destructive: hsl(0,62%,40%);
  --shadow-blur: 25px;
  --shadow-color: hsl(0,0%,0%);
  --sidebar-ring: hsl(345,100%,45%);
  --shadow-spread: 0px;
  --letter-spacing: 0;
  --shadow-opacity: 0.5;
  --sidebar-accent: hsl(345,100%,15%);
  --sidebar-border: hsl(0,0%,15%);
  --card-foreground: hsl(0,0%,98%);
  --shadow-offset-x: 0px;
  --shadow-offset-y: 10px;
  --sidebar-primary: hsl(345,100%,45%);
  --muted-foreground: hsl(0,0%,65%);
  --accent-foreground: hsl(0,0%,98%);
  --popover-foreground: hsl(0,0%,98%);
  --primary-foreground: hsl(0,0%,100%);
  --sidebar-foreground: hsl(0,0%,98%);
  --secondary-foreground: hsl(0,0%,98%);
  --destructive-foreground: hsl(0,0%,98%);
  --sidebar-accent-foreground: hsl(0,0%,98%);
  --sidebar-primary-foreground: hsl(0,0%,100%);
}

body {
  letter-spacing: var(--letter-spacing);
  overflow-x: hidden;
  padding-bottom: 5rem;
}

main,
article,
section,
form,
fieldset {
  min-width: 0;
}

img,
svg,
canvas,
video {
  max-width: 100%;
}

pre,
code {
  overflow-wrap: anywhere;
}

.menu-movil > summary::-webkit-details-marker {
  display: none;
}

@media (max-width: 767px) {
  .app-shell {
    padding-bottom: calc(5.5rem + env(safe-area-inset-bottom));
    padding-left: max(0.75rem, env(safe-area-inset-left));
    padding-right: max(0.75rem, env(safe-area-inset-right));
    padding-top: max(0.75rem, env(safe-area-inset-top));
  }

  #pomodoro-widget {
    bottom: max(0.75rem, env(safe-area-inset-bottom));
    right: max(0.75rem, env(safe-area-inset-right));
  }

  input:not([type="checkbox"]):not([type="radio"]),
  select,
  textarea {
    font-size: 16px !important;
  }

  button,
  input[type="submit"],
  summary {
    min-height: 44px;
  }
}

/* Sin esto, los navegadores pueden pintar inputs/selects con su esquema de
   color nativo (claro) por defecto, aunque el resto de la página sea
   oscura — el texto escrito queda sin contraste sobre el fondo oscuro del
   campo. Con color-scheme el propio navegador ajusta caret, autofill y el
   desplegable de los <select> al tema oscuro. */
.dark {
  color-scheme: dark;
}

/* Los modificadores de opacidad de Tailwind (bg-primary/10, border-primary/40...)
   no generan CSS fiable sobre colores personalizados que son variables CSS
   sueltas (no triples RGB/HSL descompuestos, como espera Tailwind para eso) —
   en la práctica el fondo se quedaba sin pintar y el input se veía con el
   blanco nativo del navegador, con el texto claro encima = invisible. Estas
   clases hacen la mezcla con color-mix() directamente en CSS, que sí es
   fiable en cualquier navegador moderno. */
.aviso {
  border: 1px solid color-mix(in srgb, var(--primary) 40%, transparent);
  background-color: color-mix(in srgb, var(--primary) 10%, transparent);
}

.borde-atencion {
  border-color: color-mix(in srgb, var(--primary) 60%, transparent) !important;
}

.contenido-generado u {
  text-decoration-color: var(--primary);
  text-decoration-thickness: 2px;
  text-underline-offset: 3px;
}

.podcast-estado {
  color: var(--muted-foreground);
}

.podcast-estado[aria-pressed="true"] {
  color: #34d399;
  background-color: color-mix(in srgb, #34d399 10%, transparent);
}

.titulo-con-mascota {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.65rem;
}

.mascota-titulo {
  position: relative;
  display: inline-block;
  width: 3.6rem;
  height: 3.3rem;
  flex: 0 0 auto;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
}

.mascota-titulo img,
.mascota-anuncio-imagen,
.mascota-aviso-imagen {
  image-rendering: pixelated;
  mix-blend-mode: screen;
}

.mascota-titulo img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  animation: mascota-flotar 3s ease-in-out infinite;
  transition: filter 160ms ease, transform 160ms ease;
}

.mascota-titulo:hover img,
.mascota-titulo:focus-visible img {
  filter: drop-shadow(0 0 0.45rem color-mix(in srgb, var(--primary) 70%, transparent));
  transform: translateY(-2px) rotate(-2deg);
}

.mascota-titulo:focus-visible {
  outline: 2px solid var(--ring);
  outline-offset: 3px;
}

.mascota-titulo-icono {
  position: absolute;
  right: -0.15rem;
  bottom: 0.15rem;
  display: grid;
  width: 1.55rem;
  height: 1.55rem;
  place-items: center;
  border: 1px solid color-mix(in srgb, var(--primary) 75%, white);
  border-radius: 50%;
  background: var(--primary);
  color: var(--primary-foreground);
  box-shadow: 0 0 0.6rem color-mix(in srgb, var(--primary) 55%, transparent);
  animation: mascota-icono-pulso 2.4s ease-in-out infinite;
}

.mascota-titulo-icono svg {
  width: 0.9rem;
  height: 0.9rem;
}

.aviso-con-mascota {
  position: relative;
  min-height: 4.25rem;
  padding-left: 4.75rem !important;
}

.mascota-aviso-imagen {
  position: absolute;
  bottom: 0.15rem;
  left: 0.55rem;
  width: 3.6rem;
  height: 3.6rem;
  object-fit: contain;
  animation: mascota-asomar 420ms ease-out both;
}

#mascota-anuncio {
  animation: mascota-anuncio-entrada 220ms ease-out both;
}

#mascota-anuncio.mascota-anuncio-salida {
  animation: mascota-anuncio-salida 180ms ease-in both;
}

@keyframes mascota-flotar {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-3px); }
}

@keyframes mascota-icono-pulso {
  0%, 100% { box-shadow: 0 0 0.35rem color-mix(in srgb, var(--primary) 45%, transparent); }
  50% { box-shadow: 0 0 0.85rem color-mix(in srgb, var(--primary) 75%, transparent); }
}

@keyframes mascota-asomar {
  from { opacity: 0; transform: translateY(0.75rem); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes mascota-anuncio-entrada {
  from { opacity: 0; transform: translateY(0.75rem); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes mascota-anuncio-salida {
  from { opacity: 1; transform: translateY(0); }
  to { opacity: 0; transform: translateY(0.4rem); }
}

@media (prefers-reduced-motion: reduce) {
  .mascota-titulo img,
  .mascota-titulo-icono,
  .mascota-aviso-imagen,
  #mascota-anuncio,
  #mascota-anuncio.mascota-anuncio-salida {
    animation: none;
  }
}

.red-conocimiento {
  height: clamp(30rem, 68vh, 46rem);
  min-height: 30rem;
}

@media (max-width: 767px) {
  .red-conocimiento {
    height: 62vh;
    min-height: 26rem;
  }
}
