Theme compilation fails when a theme declares `$body-bg` or `$body-color` as `null`

Abierto Apto para principiantes
#15,304 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
sass, scss
Área
build-system

Línea de trabajo

Empieza con src/resources/formats/html/bootstrap/_bootstrap-variables.scss en las dos comprobaciones enlazadas en el issue y compáralas con la comprobación de null existente para pre-color. Reproduce el problema con los ejemplos proporcionados custom.scss e index.qmd usando quarto render index.qmd. Se considera terminado cuando los temas que declaran $body-bg o $body-color como null se renderizan con los valores de respaldo documentados.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bootstrap bug themes
I have:
  • searched the issue tracker for similar issues
  • installed the latest version of Quarto CLI
  • formatted my issue following the Bug Reports guide
Bug description

Quarto's Bootstrap variables test variable-exists(body-bg) and variable-exists(body-color) to decide whether a theme has set them.
variable-exists() is true for a variable that holds null, so a theme that declares $body-bg: null !default; makes $body-contrast-bg null, and compilation stops.

The pre-color check a few lines above already handles this case with variable-exists(pre-color) and $pre-color != null:

A null declaration at the root is what Dart Sass itself recommends.
A theme that sets $body-bg only under some condition has to declare it first, or use !global inside the @if, which Dart Sass flags as deprecated:

DEPRECATION WARNING [new-global]: As of Dart Sass 2.0.0, !global assignments won't be able to declare new variables.

Recommendation: add `$body-bg: null` at the stylesheet root.

Following that advice breaks the render, so the theme is stuck with the deprecation.
I also tried $primary: null !default;, and that one renders.

Steps to reproduce

custom.scss:

/*-- scss:defaults --*/
$body-bg: null !default;

index.qmd:

---
title: "Null body-bg"
format:
  html:
    theme: [default, custom.scss]
---

Hello.

Run quarto render index.qmd.
Replace $body-bg with $body-color for the second error.

Actual behavior

With $body-bg: null !default;:

ERROR: Theme file compilation failed:

Error: $color: null is not a color.
    ╷
827 │   $red: _linear-channel-value(quarto-color.red($color));
    │                               ^^^^^^^^^^^^^^^^^^^^^^^^
    ╵
  ... 827:31   luminance()
  ... 837:13   quarto-contrast()
  ... 854:19   tone()
  ... 508:7    theme-contrast()

With $body-color: null !default; and the default theme:

Error: $color1: null is not a color.
Expected behavior

A null value counts as "not set", as it already does for $pre-color.
Quarto falls back to $white and $gray-900, and the document renders.

Your environment
  • IDE: none, command line.
  • OS: macOS 27.2.
Quarto check output

Reproduced with a development build of main at 089ba530b.
The two lines above are the same at the v1.11.9 tag.

Quarto 99.9.9
[✓] Checking environment information...
      Quarto cache location: /Users/mcanouil/Library/Caches/quarto
      Project: none found (single-file mode)
[✓] Checking versions of quarto binary dependencies...
      Pandoc version 3.10.0: OK
      Dart Sass version 1.107.1: OK
      Deno version 2.9.8: OK
      Typst version 0.15.1: OK
[✓] Checking versions of quarto dependencies......OK
[✓] Checking Quarto installation......OK
      Version: 99.9.9
      commit: 089ba530b3ed4ec156a355d41b6b7de2db3e44ea
      Path: /Users/mcanouil/Projects/quarto-dev/quarto-cli/package/dist/bin
[✓] Checking tools....................OK
      TinyTeX: v2026.07
      Chrome Headless Shell: (not installed)
      VeraPDF: (not installed)
[✓] Checking LaTeX....................OK
      Using: TinyTex
      Path: /Users/mcanouil/Library/TinyTeX/bin/universal-darwin
      Version: 2026
[✓] Checking Chrome Headless....................OK
      Using: Chrome from QUARTO_CHROMIUM
      Path: /Applications/Brave Browser.app/Contents/MacOS/Brave Browser
[✓] Checking basic markdown render....OK
Lenguaje dominante
JavaScript
Estrellas
6.1k
Forks
478
Merge medio
17 h 53 min
PR fusionados (30 d)
135

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de quarto-dev/quarto-cli

Todos los issues de quarto-dev/quarto-cli

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.