html {
  font-size: 14px;
}

@media (min-width: 768px) {
  html {
    font-size: 16px;
  }
}

/* ============================================================================
   Tema claro/oscuro. El atributo data-theme lo pone un script inline en el
   <head> de _Layout.cshtml (antes de que se pinte la página, para no hacer
   parpadear del claro al oscuro) y lo cambia wwwroot/js/theme.js cuando se usa
   el switch del navbar. Guardado en localStorage; si no hay preferencia
   guardada, se usa prefers-color-scheme del sistema operativo como default.
   Todo lo que cambia entre temas se define acá como variables — el resto del
   CSS del archivo las usa en vez de colores fijos.
   ============================================================================ */
:root {
    --sb-bg-body: #585858;
    --sb-bg-content: #EAEAEA;
    --sb-bg-card: #ffffff;
    --sb-text-card: #212529;
    --sb-text-muted-card: #6c757d;
    --sb-border-card: rgba(0, 0, 0, 0.08);
    --sb-shadow-card: rgba(0, 0, 0, 0.1);
    --sb-tag-bg: #ffffff;
    --sb-tag-text: #333333;
    --sb-tag-border: #aaaaaa;
    --sb-chord-bg: #6c757d;
    --sb-chord-text: #ffffff;
    --sb-link: #0d6efd;
    /* Multiplicador del tamaño de letra de la canción (1 = normal). Lo cambian
       los botones A-/A+ de la barra de acciones (wwwroot/js/tamano-letra.js) y
       queda guardado en localStorage por usuario, para todas las canciones. */
    --sb-letra-escala: 1;
}

:root[data-theme="dark"] {
    --sb-bg-body: #121212;
    --sb-bg-content: #1b1b1b;
    --sb-bg-card: #242424;
    --sb-text-card: #e9ecef;
    --sb-text-muted-card: #adb5bd;
    --sb-border-card: rgba(255, 255, 255, 0.1);
    --sb-shadow-card: rgba(0, 0, 0, 0.5);
    --sb-tag-bg: #2b2b2b;
    --sb-tag-text: #e9ecef;
    --sb-tag-border: #4a4a4a;
    --sb-chord-bg: #495057;
    --sb-chord-text: #ffffff;
    --sb-link: #8bb9fe;
}

/* Menú de tema en el navbar (Claro / Oscuro / Automático). */
#themeMenuButton {
    padding: 0.375rem 0.5rem;
    line-height: 1;
}

#themeMenuButton svg {
    width: 1.2rem;
    height: 1.2rem;
    vertical-align: middle;
}

#themeMenuButton::after {
    display: none; /* sin la flechita de Bootstrap: el ícono ya indica que es un menú */
}

/* Menú de usuario en el navbar: mismo criterio que #themeMenuButton, sin la
   flechita de Bootstrap. */
#userMenuButton {
    padding: 0.375rem 0.5rem;
    line-height: 1;
}

#userMenuButton svg {
    width: 1.2rem;
    height: 1.2rem;
    vertical-align: middle;
}

#userMenuButton::after {
    display: none;
}

/* Botón "Instalar app" del navbar (ver wwwroot/js/pwa-install.js): mismo criterio
   de tamaño que #themeMenuButton/#userMenuButton; arranca oculto con d-none en el
   propio HTML hasta que el script decide que corresponde mostrarlo. */
#pwaInstallButton {
    padding: 0.375rem 0.5rem;
    line-height: 1;
}

#pwaInstallButton svg {
    width: 1.2rem;
    height: 1.2rem;
    vertical-align: middle;
}

/* Ícono de lupa del navbar (ver wwwroot/js/barra-busqueda.js): mismo criterio de
   tamaño que los demás botones-ícono del navbar. Es un <button data-bs-toggle=
   "collapse">, no un dropdown, así que no le hace falta la regla ::after de los otros. */
#searchToggleButton {
    padding: 0.375rem 0.5rem;
    line-height: 1;
}

#searchToggleButton svg {
    width: 1.2rem;
    height: 1.2rem;
    vertical-align: middle;
}

/* Marca la opción de tema actualmente elegida (theme.js le agrega/quita
   "active" según localStorage, no según el tema realmente aplicado — así se
   ve marcado "Automático" aunque el sistema esté en oscuro). */
.js-tema-opcion.active::before {
    content: "\2713\0020";
}

.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
  box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
}

html {
  position: relative;
  min-height: 100%;
}

/* Portado de SongBook/Content/Site.css (proyecto WebForms original). El original
   traía "padding-top: 30px" porque su navbar era "fixed-top" (position:fixed,
   sacado del flujo normal) — ese padding compensaba el espacio que el navbar
   fijo le "robaba" al contenido. Acá el navbar (_Layout.cshtml) NO es fixed,
   fluye normal arriba del todo, así que ese padding sólo dejaba una franja
   vacía del fondo gris oscuro por encima del navbar. Se quita. */
/* "Sticky footer" con flexbox: el body ocupa como mínimo toda la altura de la
   pantalla, <main> crece para llenar el espacio sobrante (empujando al footer),
   y si la página no tiene suficiente contenido el footer igual queda pegado
   abajo del todo en vez de quedar "flotando" a media pantalla. */
body {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    background-color: var(--sb-bg-body);
    color: var(--sb-text-card);
    margin-bottom: 0;
    transition: background-color var(--dur-normal, 200ms) ease, color var(--dur-normal, 200ms) ease;
    /* iPhone con notch/Dynamic Island en horizontal: sin esto el contenido
       queda por debajo del recorte de la pantalla en los bordes. En
       dispositivos sin notch, env(...) resuelve a 0 y no cambia nada.
       Requiere viewport-fit=cover en el <meta viewport> (ver _Layout.cshtml). */
    padding-left: env(safe-area-inset-left, 0);
    padding-right: env(safe-area-inset-right, 0);
}

/* Evita que iOS Safari haga zoom automático al enfocar un campo de texto: lo
   hace en cualquier input con font-size menor a 16px, y en celular la fuente
   base del sitio es 14px (ver "html { font-size: 14px }" arriba). Sólo se
   sube el tamaño de los campos de formulario, no el de todo el texto. */
@media (max-width: 767.98px) {
    .form-control,
    .form-select {
        font-size: 16px;
    }
}

main {
    flex: 1 0 auto;
    display: flex;
    flex-direction: column;
}

footer {
    flex-shrink: 0;
}

/* Fondo gris claro para el área de contenido, entre el navbar/jumbotron y el footer */
.medio {
    flex: 1 0 auto;
    padding-top: 20px;
    padding-bottom: 20px;
    background-color: var(--sb-bg-content);
}

/* Páginas sin menú ni pie de página (ver ViewData["OcultarChrome"] en _Layout.cshtml,
   p.ej. Login): el mismo gris claro de .medio, para que no se note el fondo
   oscuro del body en las esquinas si el contenido no llena la pantalla. */
body.sin-chrome {
    background-color: var(--sb-bg-content);
}

.jumbotron {
    padding: 40px 25px;
    margin-bottom: 0;
    background-image: url(../images/piano-1166656_1280.jpg);
    background-position: 0% 35%;
    background-size: cover;
    background-repeat: no-repeat;
    color: white;
    text-shadow: black 0.1em 0.1em 0.2em;
    border-radius: 0;
}

@media (min-width: 768px) {
    .jumbotron {
        padding: 100px 25px;
    }
}

.footer {
    padding-top: 10px;
    background-color: #343A40;
    color: #9d9d9d;
}

.footer h4 {
    color: #f8f9fa;
}

.footer a {
    color: #9d9d9d;
}

.footer a:hover {
    color: #ffffff;
    text-decoration: none;
}

.footer .list-group-item {
    background-color: transparent;
    border: none;
    padding: 0.25rem 0;
}

/* Portado de SongBook/Content/Post.css (proyecto WebForms original) */
.post {
    background-color: var(--sb-bg-card);
    color: var(--sb-text-card);
    padding: 1rem 1.25rem;
    border-radius: 6px;
    box-shadow: 0 4px 8px 0 var(--sb-shadow-card);
    margin-bottom: 1.5rem;
}

.post-header {
    margin-bottom: 10px;
    padding-bottom: 5px;
    border-bottom: 1px solid var(--sb-border-card);
}

.post-title {
    font-size: 18px;
    font-weight: bold;
}

.post-body.text {
    color: var(--sb-text-card);
    min-height: 3rem;
}

.post-info {
    font-size: 13px;
    color: var(--sb-text-muted-card);
}

/* Ícono de video en la tarjeta de canción (Inicio y Buscar): sólo aparece si
   la canción tiene algo en Sample (portado del proyecto original, que mostraba
   un ícono de YouTube en esa misma tarjeta). Es sólo un indicador visual, no
   un enlace (no abre nada al hacer clic) — para ver el video hay que entrar a
   la canción. No es el logo de YouTube en sí (para no usar esa marca): un
   ícono de "play" genérico, en negro. */
.post-video-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 1.75rem;
    height: 1.75rem;
    margin-left: 0.5rem;
    border-radius: 6px;
    background-color: #000;
    color: #fff;
    cursor: default;
}

.post-video-badge svg {
    width: 1rem;
    height: 1rem;
}

/* Portado de SongBook/Content/Site.css (proyecto WebForms original): nube de
   notas/tonos con la cantidad de canciones en cada una (ver Control/TagCloud.ascx). */
#tagscloud {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

#tagscloud a {
    position: relative;
    display: inline-block;
    height: 28px;
    line-height: 28px;
    padding: 0 2.2em 0 1em;
    background-color: var(--sb-tag-bg);
    border: 1px solid var(--sb-tag-border);
    border-radius: 3px;
    white-space: nowrap;
    color: var(--sb-tag-text);
    font-size: 13px;
    text-decoration: none;
    transition: background-color var(--dur-fast) var(--ease-out-apple),
                border-color var(--dur-fast) var(--ease-out-apple),
                color var(--dur-fast) var(--ease-out-apple);
}

#tagscloud a span {
    position: absolute;
    top: 3px;
    right: 3px;
    width: 22px;
    height: 22px;
    line-height: 22px;
    background-color: #3498db;
    border-radius: 100%;
    color: #fff;
    font-size: 12px;
    text-align: center;
    transition: background-color var(--dur-fast) var(--ease-out-apple),
                color var(--dur-fast) var(--ease-out-apple);
}

#tagscloud a:hover {
    background-color: #3498db;
    border-color: #3498db;
    color: #fff;
}

#tagscloud a:hover span {
    background-color: #fff;
    color: #3498db;
}

/* ============================================================================
   Pulido de interacción (inspirado en la skill "apple-design" de emilkowalski/skill:
   https://github.com/emilkowalski/skill). Esa skill está pensada para apps nativas
   con gestos/springs, así que no aplica tal cual a un sitio server-rendered — se
   adaptan solo las ideas que sí tienen sentido acá:
     - Curvas y duraciones consistentes en vez de "ease" genérico por defecto.
     - Feedback instantáneo al presionar (sin esperar a soltar el click).
     - Tipografía con tracking más ajustado en títulos grandes.
     - Respeta prefers-reduced-motion (nadie debería recibir movimiento que no pidió).
   ============================================================================ */
:root {
    --ease-out-apple: cubic-bezier(0.25, 0.1, 0.25, 1);
    --dur-fast: 120ms;
    --dur-normal: 200ms;
}

h1, h2, .post-title {
    letter-spacing: -0.01em;
}

.post {
    transition: transform var(--dur-normal) var(--ease-out-apple),
                box-shadow var(--dur-normal) var(--ease-out-apple);
}

.post:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 20px 0 rgba(0,0,0,0.12);
}

.btn {
    transition: transform var(--dur-fast) var(--ease-out-apple),
                box-shadow var(--dur-fast) var(--ease-out-apple),
                background-color var(--dur-fast) var(--ease-out-apple);
}

/* Feedback inmediato al presionar, no sólo al soltar. */
.btn:active {
    transform: scale(0.97);
}

.post-title a {
    transition: color var(--dur-fast) var(--ease-out-apple);
}

/*
 * Página: Login / Register (portado de SongBook/Content/Site.css, tema AdminLTE
 * del proyecto original: caja blanca centrada, angosta, sobre el fondo gris de
 * .medio, con logo grande arriba y los inputs con un ícono a la derecha).
 */
.login-logo,
.register-logo {
    font-size: 35px;
    text-align: center;
    margin-bottom: 25px;
    font-weight: 300;
}

.login-logo a,
.register-logo a {
    color: var(--sb-text-card);
    text-decoration: none;
}

.login-box,
.register-box {
    width: 360px;
    max-width: 100%;
    margin: 7vh auto;
}

.login-box-body,
.register-box-body {
    background: var(--sb-bg-card);
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 2px 6px var(--sb-shadow-card);
    color: var(--sb-text-muted-card);
}

.login-box-msg,
.register-box-msg {
    margin: 0;
    text-align: center;
    padding: 0 20px 20px 20px;
}

/* Reemplaza el "has-feedback" de Bootstrap 3 del proyecto original (ya no existe
   en Bootstrap 5): el ícono se dibuja con un <svg> propio, posicionado encima
   del input, y se le deja espacio al texto con padding-right. */
.login-box-body .has-feedback {
    position: relative;
}

.login-box-body .has-feedback .form-control {
    padding-right: 2.25rem;
}

.login-box-body .form-control-feedback {
    position: absolute;
    top: 0;
    right: 0.75rem;
    height: calc(1.5em + 0.75rem + 2px);
    display: flex;
    align-items: center;
    color: #999;
    pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
    .post, .btn, .post-title a {
        transition: none;
    }
    .post:hover, .btn:active {
        transform: none;
    }
}

/* ============================================================================
   Barra de acciones fija (vista de canción, sólo celular — ver Detalle.cshtml
   y la clase d-md-none). Junta Transponer / tamaño de letra / Imprimir /
   Editar en la franja inferior de la pantalla, donde cae el pulgar en un
   celular grande, en vez de arriba del todo.
   ============================================================================ */
.song-actionbar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1030;
    display: flex;
    align-items: stretch;
    background-color: var(--sb-bg-card);
    border-top: 1px solid var(--sb-border-card);
    box-shadow: 0 -2px 10px var(--sb-shadow-card);
    /* env(safe-area-inset-*): en iPhone con home indicator, evita que quede
       tapada o pegada al borde curvo/gesto del sistema. */
    padding-left: env(safe-area-inset-left, 0);
    padding-right: env(safe-area-inset-right, 0);
    padding-bottom: env(safe-area-inset-bottom, 0);
}

.song-actionbar .btn {
    flex: 1 1 0;
    /* Por defecto un flex item no se achica más allá del ancho de su propio
       contenido + padding ("min-width: auto") — esta barra llegó a tener 10
       botones (letra -/+, transponer, escenario, letra, Nashville, imprimir,
       compartir, editar), lo que alcanzaba a ser más ancho que la pantalla en
       un celular angosto, y como la barra es position:fixed con left:0/right:0
       (ancho fijo = el de la pantalla), lo que no entraba quedaba literalmente
       fuera de la pantalla — los últimos botones quedaban inalcanzables. Las
       4 acciones menos frecuentes ahora viven en el menú "Más" (ver
       .dropdown más abajo), pero se deja min-width:0 igual como resguardo
       general para cualquier barra apretada. */
    min-width: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 48px;
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--sb-text-card);
    background: transparent;
    border: none;
    border-radius: 0;
}

/* El menú "Más" (Nashville/Imprimir/Compartir/Editar, ver Cancion/Detalle.cshtml)
   ocupa el mismo espacio que un botón más de la barra — el <button> de adentro
   ya hereda el estilo de arriba por el selector ".song-actionbar .btn" (aplica
   sin importar la profundidad), sólo hace falta que el <div class="dropdown">
   que lo envuelve participe del flex igual que sus hermanos. */
.song-actionbar .dropdown {
    flex: 1 1 0;
    min-width: 0;
    display: flex;
}

.song-actionbar .dropdown .btn {
    width: 100%;
}

/* No lleva la clase "dropdown-toggle" de Bootstrap (que agrega una flechita
   ::after) — alcanza con "data-bs-toggle=dropdown" para que funcione el menú,
   y el propio ícono de "⋮" ya cumple el rol visual de esa flechita. */

.song-actionbar .btn:active {
    background-color: var(--sb-bg-content);
}

.song-actionbar .btn svg {
    width: 1.25rem;
    height: 1.25rem;
}

/* En celulares angostos, el padding por defecto de Bootstrap (0.75rem a los
   lados) ya ocupa la mayor parte del espacio disponible entre 10 botones —
   se achica acá para que además del min-width:0 de arriba, quede aire real
   para el ícono, no sólo el mínimo indispensable. */
@media (max-width: 480px) {
    .song-actionbar .btn,
    .stage-bar .btn {
        padding-left: 0.3rem;
        padding-right: 0.3rem;
        font-size: 1rem;
    }

    .song-actionbar .btn svg {
        width: 1.1rem;
        height: 1.1rem;
    }
}

/* Paginación (Bootstrap ".pagination" — ver Areas/Admin/Views/Canciones/Index.cshtml):
   por defecto es un solo renglón sin flex-wrap. Con "Anterior"/"Siguiente" +
   hasta 7 números + "..." de cada lado, en celular se desborda del ancho de
   pantalla igual que las barras de botones de arriba. row-gap (no gap: los
   .page-link ya usan margin-left negativo para pegarse unos con otros
   horizontalmente en la MISMA fila; con "gap" ese pegado se perdería incluso
   sin wrap) da un respiro vertical sólo entre renglones cuando sí hace falta
   bajar de línea. */
.pagination {
    flex-wrap: wrap;
    row-gap: 0.5rem;
}

/* Deja espacio abajo para que la barra fija no tape las últimas líneas de la
   letra — sólo hace falta en el mismo breakpoint en el que la barra es
   visible (ver "d-md-none" en Detalle.cshtml, que Bootstrap corta en 768px). */
@media (max-width: 767.98px) {
    .pb-song-actionbar {
        padding-bottom: calc(3.75rem + env(safe-area-inset-bottom, 0));
    }
}

/* ============================================================================
   Modo escenario (ver wwwroot/js/stage-mode.js). Independiente del switch de
   tema claro/oscuro del navbar: siempre fuerza fondo negro y oculta el
   "chrome" del sitio (igual espíritu que @media print, pero en pantalla),
   para aprovechar toda la pantalla y no distraer con luz de fondo clara
   mientras alguien toca/canta en un lugar oscuro.
   ============================================================================ */
body.modo-escenario header,
body.modo-escenario footer,
body.modo-escenario .jumbotron,
body.modo-escenario .song-actionbar,
/* Antes esta barra vivía adentro del <header> de la canción, así que ya
   quedaba oculta junto con el título al ocultar "header" de arriba. Al
   sacarla del header (ver Views/Cancion/Detalle.cshtml y su comentario sobre
   la barra pegajosa) quedó afuera de esa regla y quedaba visible flotando
   en modo escenario — se agrega acá explícitamente. */
body.modo-escenario .barra-acciones-cancion {
    display: none !important;
}

/* Con la pantalla dedicada sólo a la letra, tampoco tiene sentido mostrar la
   nube de Notas, los botones Anterior/Siguiente ni el iframe de la muestra
   (Sample): distraen y ocupan espacio que en modo escenario se quiere sólo
   para la letra/acordes. Ver la clase "oculta-en-escenario" en Detalle.cshtml. */
body.modo-escenario .oculta-en-escenario {
    display: none !important;
}

body.modo-escenario,
body.modo-escenario .medio {
    background-color: #000 !important;
}

/* Texto en blanco por defecto para todo lo que quede visible dentro de
   .medio (además de Cancion/Detalle.cshtml, ahora también Listas/Detalle.cshtml
   usa modo escenario) — sin esto, un texto oscuro (el normal del sitio en tema
   claro) quedaría ilegible sobre el fondo negro de arriba. Las reglas más
   específicas de acá abajo (.song-lyrics, etc.) pisan a ésta donde hace falta
   un tratamiento distinto. */
body.modo-escenario .medio {
    color: #fff !important;
}

body.modo-escenario .text-muted {
    color: rgba(255, 255, 255, 0.65) !important;
}

/* Views/Listas/Detalle.cshtml en modo escenario: las tarjetas de Bootstrap
   (fondo claro, o el gris de tarjeta del tema oscuro) no combinan con el
   negro de fondo de arriba — se hacen transparentes para que se vea el mismo
   negro por detrás, con un borde apenas visible para separar cada canción. */
body.modo-escenario .list-group-item {
    background-color: transparent !important;
    border-color: rgba(255, 255, 255, 0.15) !important;
}

body.modo-escenario .song-lyrics {
    background-color: #000 !important;
    color: #fff !important;
    box-shadow: none !important;
}

body.modo-escenario .chordline .chord {
    background-color: #4a4a4a !important;
    color: #fff !important;
}

/* Deja espacio abajo para la barra flotante de autoscroll/velocidad/salir. */
body.modo-escenario .pb-song-actionbar {
    padding-bottom: calc(3.75rem + env(safe-area-inset-bottom, 0));
}

.stage-bar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1040;
    display: flex;
    align-items: stretch;
    background-color: rgba(20, 20, 20, 0.95);
    border-top: 1px solid rgba(255, 255, 255, 0.15);
    padding-left: env(safe-area-inset-left, 0);
    padding-right: env(safe-area-inset-right, 0);
    padding-bottom: env(safe-area-inset-bottom, 0);
}

.stage-bar .btn {
    flex: 1 1 0;
    /* Mismo motivo que .song-actionbar .btn más arriba: sin esto, en un
       celular angosto esta barra (position:fixed, ancho = pantalla) no puede
       achicar sus botones lo suficiente y el último ("Salir", la X) queda
       fuera de la pantalla — justo el botón para salir del modo escenario. */
    min-width: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 48px;
    font-size: 1.2rem;
    font-weight: 600;
    color: #fff;
    background: transparent;
    border: none;
    border-radius: 0;
}

.stage-bar .btn:active {
    background-color: rgba(255, 255, 255, 0.12);
}

.stage-bar-salir {
    flex-grow: 0.6;
    color: #ff8a8a !important;
}

/* ============================================================================
   Tema oscuro: ajustes puntuales a componentes de Bootstrap que no se pueden
   resolver sólo con las variables de arriba (usan sus propios colores fijos
   por defecto). El navbar y el footer ya son oscuros en ambos temas (clases
   "bg-dark"/".footer" de Bootstrap), así que no hace falta tocarlos.
   ============================================================================ */
:root[data-theme="dark"] {
    color-scheme: dark;
}

:root[data-theme="dark"] a {
    color: var(--sb-link);
}

:root[data-theme="dark"] .form-control,
:root[data-theme="dark"] .form-select {
    background-color: #2b2b2b;
    color: var(--sb-text-card);
    border-color: #4a4a4a;
}

:root[data-theme="dark"] .form-control:focus,
:root[data-theme="dark"] .form-select:focus {
    background-color: #2b2b2b;
    color: var(--sb-text-card);
}

:root[data-theme="dark"] .form-control::placeholder {
    color: #8a8a8a;
}

:root[data-theme="dark"] .form-text {
    color: var(--sb-text-muted-card);
}

:root[data-theme="dark"] .table {
    color: var(--sb-text-card);
    border-color: var(--sb-border-card);
}

:root[data-theme="dark"] .table > :not(caption) > * > * {
    background-color: transparent;
    color: var(--sb-text-card);
    border-bottom-color: var(--sb-border-card);
}

:root[data-theme="dark"] .list-group-item {
    background-color: var(--sb-bg-card);
    color: var(--sb-text-card);
    border-color: var(--sb-border-card);
}

:root[data-theme="dark"] .alert-info {
    background-color: #1f3a4a;
    border-color: #2c5570;
    color: #cfe8f7;
}

:root[data-theme="dark"] .page-link {
    background-color: var(--sb-bg-card);
    border-color: var(--sb-border-card);
    color: var(--sb-link);
}

:root[data-theme="dark"] .page-item.active .page-link {
    background-color: var(--sb-link);
    border-color: var(--sb-link);
    color: #121212;
}

:root[data-theme="dark"] .page-item.disabled .page-link {
    background-color: var(--sb-bg-content);
    color: var(--sb-text-muted-card);
}

:root[data-theme="dark"] .text-muted {
    color: var(--sb-text-muted-card) !important;
}

:root[data-theme="dark"] .card {
    background-color: var(--sb-bg-card);
    color: var(--sb-text-card);
    border-color: var(--sb-border-card);
}

:root[data-theme="dark"] .dropdown-menu {
    background-color: var(--sb-bg-card);
    color: var(--sb-text-card);
    border-color: var(--sb-border-card);
}

:root[data-theme="dark"] .dropdown-item {
    color: var(--sb-text-card);
}

:root[data-theme="dark"] .dropdown-item:hover,
:root[data-theme="dark"] .dropdown-item:focus {
    background-color: var(--sb-bg-content);
    color: var(--sb-text-card);
}

:root[data-theme="dark"] .dropdown-header {
    color: var(--sb-text-muted-card);
}

/* Menú de usuario del navbar (ver _Layout.cshtml): el correo/nombre puede ser
   largo, así que se corta con "..." en vez de agrandar el menú de más. */
#userMenuButton + .dropdown-menu .dropdown-header {
    max-width: 260px;
}

/*
 * Impresión (portado del espíritu de SongBook/Content/Print.css del proyecto
 * original, que ocultaba el sidebar/header/footer de AdminLTE al imprimir).
 * Bootstrap ya trae utilidades ".d-print-none" que se usan en las vistas para
 * ocultar botones puntuales (transponer, editar, etc.); acá se oculta el
 * "chrome" del sitio entero (menú, pie de página, fondo gris) para que al
 * imprimir o "Guardar como PDF" desde el navegador sólo salga el contenido.
 */
@media print {
    /* "body > header/footer" (no sólo "header"/"footer" a secas): Detalle.cshtml
       tiene su propio <header> anidado adentro de <article> para el título de
       la canción (ver Views/Cancion/Detalle.cshtml) — con el selector de tag
       suelto, ese header también quedaba oculto al imprimir y desaparecía el
       título junto con el navbar real. Acotarlo a los hijos directos de <body>
       (el navbar y el footer del sitio, ver _Layout.cshtml) deja el header de
       la canción intacto. */
    body > header,
    body > footer,
    .jumbotron {
        display: none !important;
    }

    /* Al imprimir siempre se ve en "claro" — sin importar el tema oscuro que
       esté activo en pantalla, papel/PDF con fondo blanco y texto negro. */
    body, .medio, .song-lyrics {
        background: #fff !important;
        color: #000 !important;
    }

    .medio {
        padding: 0 !important;
    }

    .song-lyrics {
        box-shadow: none !important;
        padding: 0 !important;
    }
}
