Fix: fondo negro en modales del widget de pretalx#217
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumen
Reemplaza el hack de inyección de estilos en el shadow DOM del widget de
pretalx-schedulepor una única declaración CSS (color-scheme: light) en el host. Resuelve el fondo negro que aparecía en los modales internos (filter bottom sheet y diálogo de detalle de sesión) cuando el navegador está en dark mode.Problema
Al cargar la página
/programa, los modales internos del widget de Pretalx se veían con fondo negro y texto casi ilegible — incluso con el hack previo, el modal de detalle de sesión ("Taller Django Girls", etc.) seguía mostrándose en negro.Causa raíz
pretalx-schedulerenderiza sus modales (SessionModal,FilterBottomSheet) con un<dialog>nativo sinbackground-colordeclarado.Canvas, que es negro en dark mode.<script is:inline>conMutationObserverque inyectaba un<style>dentro del shadow root) solo atacaba#filter-bottom-sheet-dialogcon un selector hardcoded — frágil y silenciosamente incompleto para el modal de detalle.pretalx-scheduleno expone::part(), ni slots, ni variables CSS para el fondo de modales. La única palanca real de theming "externa" es el set de custom properties--pretalx-clr-*que ya se venían usando para el color de marca.Solución
color-schemees una propiedad CSS heredable que cruza la frontera del shadow DOM sin necesidad de JavaScript. Aplicada al host<pretalx-schedule>, fuerza al navegador a usar los UA defaults del esquema light (Canvas blanco, CanvasText negro,::backdropsemi-transparente estándar) en todo el subárbol, incluidos los<dialog>internos.Y se elimina el bloque
<script is:inline>completo desrc/pages/[lang]/programa.astro(la funcióninjectPretalxDialogStyles, elMutationObserverobservandodocument.bodyconsubtree: true, el listener decustomElements.whenDefinedy el deastro:page-load).Por qué es mejor que el hack anterior
MutationObserverconsubtree: trueque observaba todo eldocument.body(anti-patrón de performance, se disparaba en cada mutación del DOM).Verificación
Probado en browser con dark mode activo:
pnpm astro checkyprettier --checkpasan sin erroresTrabajo futuro (opcional)
Abrir issue en pretalx/pretalx pidiendo que
SessionModal.vueyFilterBottomSheet.vueexpongan--pretalx-clr-modal-bg,--pretalx-clr-modal-texty--pretalx-clr-backdropen:hostpara que los consumidores podamos tematizar los modales sin depender de UA color-scheme. Sería un cambio de ~5 líneas en el source del componente.