diff --git a/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.css b/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.css
index c98ab55100..49386d8d1d 100644
--- a/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.css
+++ b/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.css
@@ -257,7 +257,12 @@ details[class*="callout-"] li {
/* Dark mode support - Quarto-aligned dark theme */
/* Per-callout dark mode colors (--background-color, --text-color, border-color,
summary text, code text) are dynamically generated by foldbox.lua from YAML.
- Only structural dark mode rules remain here. */
+ Only structural dark mode rules remain here.
+ Both selectors are required:
+ - @media covers OS-level dark preference
+ - body.quarto-dark covers Quarto's manual toggle button */
+
+/* OS-level dark preference */
@media (prefers-color-scheme: dark) {
/* Base foldbox dark styling */
@@ -283,4 +288,26 @@ details[class*="callout-"] li {
details.fbx-question>summary::after {
background-color: var(--text-color);
}
+}
+
+/* Quarto manual toggle button - body.quarto-dark */
+body.quarto-dark details.fbx-default,
+body.quarto-dark details.fbx-answer,
+body.quarto-dark details.fbx-question {
+ --text-color: #e6e6e6;
+ border-color: #454d55;
+}
+
+body.quarto-dark details.fbx-default>div,
+body.quarto-dark details.fbx-answer>div,
+body.quarto-dark details.fbx-question>div,
+body.quarto-dark details[class*="callout-"]>div {
+ background-color: var(--bs-dark, #212529);
+ color: #e6e6e6;
+}
+
+body.quarto-dark details.fbx-default>summary::after,
+body.quarto-dark details.fbx-answer>summary::after,
+body.quarto-dark details.fbx-question>summary::after {
+ background-color: var(--text-color);
}
\ No newline at end of file
diff --git a/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.lua b/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.lua
index 82cf96120f..2bec0af489 100644
--- a/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.lua
+++ b/book/quarto/_extensions/mlsysbook-ext/custom-numbered-blocks/style/foldbox.lua
@@ -166,37 +166,47 @@ insertPreamble = function(doc, classDefs, fmt)
return(result)
end
- -- Generate dark mode CSS overrides from YAML colors
- -- This covers BOTH @media (prefers-color-scheme: dark) AND manual toggle
+ -- Generate dark mode CSS overrides from YAML colors.
+ -- Emits two parallel rule-sets so dark styling works regardless of how dark
+ -- mode is activated:
+ -- 1. @media (prefers-color-scheme: dark) -- OS-level system preference
+ -- 2. body.quarto-dark selector -- Quarto's manual toggle button
local generateDarkModeCSS = function ()
local darkCSS = {}
if classDefs == nil then return "" end
- -- 1. @media query block for system-level dark mode (detected by OS)
- table.insert(darkCSS, "\n")
+
+ -- 1. OS-level dark mode via @media query
+ table.insert(darkCSS, "\n")
return pandoc.utils.stringify(darkCSS)
end