All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.22.0 - 2026-08-25
- Dismissible announcement banner — a new
announcementtheme option renders a notice at the top of every page (HTML allowed, so you can include emphasis and a link to changelog notes). Readers dismiss it with a×; the dismissal persists inlocalStorageand is keyed to a hash of the message, so editing the text re-shows the banner for everyone who dismissed the previous one. An optionalannouncement_expiresISO date (YYYY-MM-DD) auto-hides the banner after that day — enforced client-side (so it disappears for visitors even without a rebuild) and at build time (an already-expired notice is omitted from the HTML). An invalid expiry date logs a warning and fails open. Two looks are available viaannouncement_style:bar(default) — a thin full-width strip that scrolls away below the toolbar — orcallout— a boxed in-column notice; both adapt to dark mode and RTL. The banner defaults to empty/off, so existing sites are unaffected. The renderer iterates a list of notices internally so per-page announcements can be added additively later (tracked in #403). translatorstheme option (#426) — a newtranslatorsoption, parallel toauthors, takes a list of{name, url}entries and renders them in the page header behind a visible label, so translated editions can credit the people who produced them. Authors keep the line directly under the page title and translators sit one row lower, right-aligned on the "Last changed" line and sharing its accent rule, so crediting them costs the header no extra vertical space; on narrow screens the two stack. The label defaults to "Translated by" and is overridable viatranslators_labelso each edition renders it in its own language; authors keep their current label-free rendering, and the matchingauthors_labeldefaults to empty, so a site that sets neither renders byte-identical HTML. Either list can also be overridden per page in MyST or notebook front matter, which is how a team-translated edition credits whoever produced each lecture: a page value replaces the project value rather than merging with it, an explicit empty list leaves the block out on that page, and an absent key inherits the project value. Only the documented list-of-mappings form counts as an override, becauseauthorsis shared ground — docutils treats it as a bibliographic field and nbformat defines it in the notebook schema — so a page already carrying one written for something else keeps the project credit instead of rendering it badly or losing the byline. Author links now carryrel="author"; translator links deliberately do not, and the two lines carry distinct classes so downstream CSS can tell them apart. Front matter is read from the source file rather than through Sphinx's document metadata, because docutils treatsauthorsas a bibliographic field and returns it in a shape that varies with thelanguagesetting — unworkable for a feature whose whole purpose is non-English editions. Part of the cross-theme attribution work tracked in QuantEcon/meta#360.
- A malformed
authorsvalue no longer renders one empty link per character —authorsgiven as a bare string (rather than the documented list of{name, url}entries) was iterated character by character, emitting an empty anchor for each. Bothauthorsandtranslatorsnow normalise a bare string, a list of strings, or a single mapping into the documented form, and drop entries with no usable name.
- Developer setup troubleshooting for stale
.nodeenv— documented thenodeenv-version-mismatcherror (an in-repo.nodeenv/left over from an older pinned Node.js version) and its fix (rm -rf .nodeenvthen rebuild), which otherwise blockstoxand editable installs locally. Also clarified thattoxkeeps the toolchain fully repo-local (.tox/,.nodeenv/,node_modules/are all git-ignored and regenerated), so nothing is installed into the base/global environment.
- Regenerated visual baselines are now re-checked in the same run (#358) — the snapshot workflow wrote new baselines and committed them with nothing checking that they were any good. Both jobs now re-run the suite without
--update-snapshotsagainst the same built site and report the outcome in the summary comment (it reports rather than gates — the commit still happens, so the images are always there to inspect). The re-run writes to its owntest-results-verify/directory, since Playwright clears its output directory on every run and would otherwise erase the regeneration images that thesnapshot-update-diffartifact carries. After/update-new-snapshotsthe comment deliberately does not attribute a failure to the snapshots just added — that job leaves existing baselines untouched, so the cause may be a baseline the PR legitimately invalidated. - The snapshot bot's commit can now trigger CI (#358) — commits pushed with
GITHUB_TOKENdon't raisepush/pull_requestevents, so regenerated baselines landed while the PR'svisualcheck still showed its old failure, and the author had to push an empty commit. The workflow now pushes with an optionalSNAPSHOT_BOT_TOKENsecret when one is set, falling back toGITHUB_TOKENotherwise; the summary comment says which happened and what to do next. Seedocs/developer/visual-testing.mdfor how to add the secret. /update-snapshotsnow reads the fixtures pin from the PR branch — GitHub always runs the default branch's copy of a workflow onissue_commentevents, soupdate-snapshots.ymlwas resolvingFIXTURES_SHAfrom main rather than from the PR under test. A PR that bumps the pin (because it needs a fixtures change to exercise a new feature) therefore regenerated against the old fixtures, produced byte-identical baselines, committed nothing — and still posted "✅ regenerated and committed", leaving the PR's visual job failing with no way to fix it. Both jobs now resolve the pin out of the checked-out branch'sci.yml, falling back to the workflow-level value. Both summary comments also report what actually happened (committed vs. unchanged, and which fixtures commit was built against) instead of unconditionally claiming success, and note that the bot'sGITHUB_TOKENcommit does not itself trigger CI./update-snapshotsis now restricted to trusted actors — both jobs check out the PR branch and execute its code (pip install .runs the PR's build backend) with acontents: writetoken, but had no author-association gate, so anyone able to comment on a PR could trigger that. Both now requireOWNER,MEMBER, orCOLLABORATOR.- CI Node bumped 20 → 24 — Node 20 reached end-of-life in April 2026, and the grouped npm updates in #400 raised engine floors (
sass-loader17 requires Node ≥22.11). Node 24 is the current active LTS (supported to April 2028). Applies toci.yml,docs.yml, andupdate-snapshots.yml;.nvmrcand the contributor docs (CONTRIBUTING.md,docs/developer/setup.md) move to Node 24 in step so local dev matches CI. - Stabilized flaky mobile-chrome visual tests on math-heavy pages — after the Playwright 1.57→1.60 (Chromium) bump in #400,
math/proofs/cross-referencesfull-page screenshots intermittently rendered ~60px shorter than baseline, failing Playwright's dimension check before pixel tolerances apply.waitForReadynow waits fordocument.fonts.readyand polls until the document height holds steady for 750ms, instead of a fixed 500ms sleep after MathJax typesetting. - Cleared open Dependabot security alerts via
npm audit fix—webpack-dev-server5.2.2→5.2.4 (GHSA-79cf-xcqc-c78w),shell-quote1.8.1→1.8.4 (GHSA-w7jw-789q-3m8p, critical),qs6.14.2→6.15.2 (GHSA-q8mj-m7cp-5q26),ws8.18.0→8.21.0 (GHSA-58qx-3vcg-4xpx). All transitive dev/build-time only; built theme assets unchanged. The remaininguuidalert (GHSA-w5hq-g745-h8pq) was dismissed as not exploitable —sockjsonly callsuuid.v4(), the advisory affectsv3/v5/v6with a caller-providedbuf. - Dependabot now watches npm — added an
npmecosystem entry todependabot.yml(monthly, grouped into a single PR) alongside the existinggithub-actionsconfig.
0.21.0 - 2026-06-05
- LHS sidebar / content overlap fixed at common laptop widths (#387, #388) — at viewports 1024–1499px (most laptops: 1280, 1366, 1440),
.qe-mainnow pushes content right via a:has(.qe-sidebar:not(.inactive))conditionalpadding-leftso the centered 900px content column no longer slides underneath the fixed sidebar. At viewports ≥1500px there's natural room for the sidebar as a left rail with content centered in the viewport (the established three-column look). Below 1024px the sidebar remains a drawer overlay (toggle to open). The pre-existingbox-shadow: ... 9999pxwhite halo workaround at ≤1340px is removed — it was masking the overlap; no longer needed now that the layout handles it. - Toolbar repositioned
sticky→fixed(#387, #388) — lets the LHS sidebar extend visually to the viewport top, anchoring it to the same top-left corner as the toolbar's toggle button. Content's toolbar clearance moves from.qe-mainto.qe-page(no visible change to content position). - Books built with this theme will see a small layout shift at 1024–1499px viewports on upgrade — content gets a left margin in that zone instead of overlapping the sidebar. Downstream sites should re-verify their snapshots / visual review.
- RHS "On this page" TOC truncated on long lectures (#387) —
.qe-page__toc .inner.stickynow has a bottom fade-mask hint and switches tooverflow-y: autowith a discreet scrollbar on:hover/:focus-within, so overflowing TOC entries are reachable.
- Split visual regression CI into
build/visual/previewjobs (#394) — the Netlify preview now deploys regardless of whether visual tests pass, since reviewers need the preview link to decide whether failing visual tests reflect intentional design changes (in which case they/update-snapshots) or genuine regressions. Previously the preview was a later step of a single job and got skipped on visual-test failure.visualandpreviewboth consume the fixtures build artifact produced bybuild; visual failure no longer blocks preview deploy. - Visual regression tests migrated to the
quantecon-book-theme-fixturesrepo (#390, #392) — replaces the oldlecture-python-programmingdependency (cloned + conda-built per run, ~3–5 min) with the curatedquantecon-book-theme-fixturesrepo (pip-built in ~30–60s, pinned to a fixed SHA so test input doesn't drift between PRs). Adds first-ever<dl>/ glossary coverage. #392 landed theupdate-snapshots.ymlhalf early so theissue_comment-triggered workflow onmainstayed consistent with the new fixture paths. - Cleared all open Dependabot security alerts (#385) —
npm audit fixplus major bumps of two build-timedevDependencies(css-minimizer-webpack-plugin7→8,sass) to clearserialize-javascriptadvisories. Transitive dev/build-time only; no runtime or shipped theme code changed. - Bump
actions/upload-pages-artifactfrom 4 to 5 (#382) - Bump
conda-incubator/setup-minicondafrom 3 to 4 (#383) - Bump
codecov/codecov-actionfrom 6.0.0 to 6.0.1 (#386) - Bump
actions/download-artifactfrom 7 to 8 (#395) - Bump
daun/playwright-report-summaryfrom 3 to 4 (#396)
0.20.3 - 2026-04-14
- h5 headings appearing larger than h4 (#381) —
h5had no dedicated CSS rule, so it inherited the browser default size and "PT Serif" (a visually larger serif font) whileh4used the more compact "Source Sans Pro" at1.2rem. Added explicith5styling (1rem, Source Sans Pro, weight 900) to restore the correct heading size hierarchy.
- Bump
actions/github-scriptfrom 8 to 9 (#380) - Bump
pypa/gh-action-pypi-publishfrom 1.13.0 to 1.14.0 (#379)
0.20.2 - 2026-04-06
- Emphasis color on "et al." in textual citations (#378) — the v0.20.1 fix only targeted
<em>inside<a class="reference">links. Withbibtex_reference_style: author_year, sphinxcontrib-bibtex places<em>et al.</em>as a sibling of the link, not a child. Addedspan:has(> a.reference) > emselector to handle this HTML structure across all theme variants.
0.20.1 - 2026-04-06
- Emphasis color applied to "et al." in citation links (#366) — added
a.reference emCSS overrides so<em>tags inside sphinxcontrib-bibtex citation reference links inherit color and font-weight from the parent anchor instead of the theme's emphasis styling. Applied across light, dark, and gruvbox color schemes.
- Relaxed
sphinxcontrib-bibtexupper bound (#366) — updated docs dependency from<=2.5.0to<3, allowing compatibility with the 2.6.x series (latest 2.6.5).
- Bump
codecov/codecov-actionfrom 5.5.2 to 6.0.0 (#377) - Bump
actions/deploy-pagesfrom 4 to 5 (#376)
0.20.0 - 2026-03-23
- Language switcher for multilingual site support (#374) — a globe icon dropdown in the bottom toolbar that enables users to switch between translated versions of a lecture site. Only renders when 2+ languages are configured via
html_theme_options. Includes keyboard navigation, click-outside-to-close, and dark mode support. - SEO hreflang tags (#374) — automatically injects
<link rel="alternate" hreflang="...">meta tags in<head>for all configured languages, improving search engine discovery of translated content. - Multilingual infrastructure documentation (#374) — new developer guide at
docs/developer/infrastructure.mdcovering three hosting options (GitHub Pages, subdomains, reverse proxy) for deploying translated lecture sites.
- Renamed
lecture-python-programming.mysttolecture-python-programming(#374) — updated all CI workflows, tox config, Playwright config, and documentation to reflect the renamed test repository.
0.19.0 - 2026-03-08
sticky_contentsnow defaults toTrue(#371) — the sticky right-hand table of contents with scroll spy is now enabled by default for all projects using the theme. To revert to the classic TOC, setsticky_contents: Falseinhtml_theme_options.- Increased CSS specificity for custom code highlighting (#373) — replaced
:where()wrappers withhtml body:not(.use-pygments-style)to ensure custom token colors are not overridden by pydata-sphinx-theme's Pygments rules whendata-themeis set.
data-themeattribute on<html>(#373) — sets the standarddata-theme="light"or"dark"attribute used by pydata-sphinx-theme, Furo, and sphinx-book-theme, fixing compatibility withmyst-nb1.4.0+ which uses this attribute for dark mode detection. Resolves dark code cell backgrounds appearing on light-themed sites for users with OS dark mode.inline_literal_boxtheme option (#373) — new boolean option (default:False) that controls whether inline code literals (code.literal) display with pydata-sphinx-theme's background box and border styling. Set toTrueto re-enable boxes.--qe-literal-colorCSS variable (#373) — inline code literal color integrated into the text color scheme system alongside emphasis, strong, and definition colors:- Seoul256:
#af5f5f(muted rust) /#d78787(soft rose) for dark mode - Gruvbox:
#9d0006(dark red) /#fb4934(bright red) for dark mode - None: inherits text color
- Overridable via
--qe-literal-colorin custom CSS
- Seoul256:
- Dark code cells with myst-nb 1.4+ (#373) — myst-nb 1.4.0 changed CSS dark mode detection to a space-toggle technique with
@media (prefers-color-scheme)fallback; since the theme only usedbody.dark-themeclass, myst-nb fell through to OS preference causing dark backgrounds on light sites. Fixed by settingdata-themeattribute.
- Bump
actions/upload-pages-artifactfrom 3 to 4 (#370) - Bump
actions/upload-artifactfrom 6 to 7 (#369)
0.18.0 - 2026-02-24
- Complete dark theme overhaul (#365) — rewrote the dark theme for a modern, consistent, and readable experience
- Replaced ad-hoc grays (
#222/#333/#444) with a cohesive navy-charcoal palette (#1a1a2ebackground,#252540surfaces,#d4d4e4text,#6cb6fflinks) - Images now use subtle opacity reduction instead of aggressive CSS inversion
- Replaced ad-hoc grays (
- CSS custom properties for dark theme (#365) — all 16 palette colors declared as overridable
--qe-dark-*custom properties; downstream projects can now customize colors without duplicating selectors
- Dark mode syntax highlighting (#365) — complete token colors for all ~40 Pygments syntax classes using a VS Code Dark+ inspired palette
- FOUC prevention (#365) — early inline script applies dark mode class before first paint, eliminating the flash of white on page load
- Dark mode documentation (#365) — new "Dark Mode" section in
configure.mdcovering palette, syntax highlighting, admonitions, image handling, and CSS customization with full reference table of all overridable custom properties - Dark mode coverage for unstyled elements (#365) — modals, admonitions (type-specific accents), homepage elements, collapse/toggle bars, tooltips, autodoc, footnotes, and non-QuantEcon project overrides
- Double logo in dark theme (#365) — when a dedicated dark logo is configured, both light and dark logos were shown; fixed
:only-childselector to check the<a>wrapper instead of the<img> - Page header unreadable in dark mode (#365) — title link, authors, "Last changed" button, and changelog dropdown used
#444text on dark backgrounds - Unreadable table text in dark mode (#365) — table rows used
#333text on dark backgrounds - Indistinguishable links in dark mode (#365) — all links were
#fff, same as body text - Inline code light border in dark mode (#365) — code spans retained light-theme borders
- Sidebar search white in dark mode (#365) — search input area remained white
- Toolbar border in dark mode (#365) — toolbar border remained light gray
- Syntax highlighting gaps (#365) — only 3 of ~40 token types had dark mode overrides
- Stderr warnings in dark mode (#365) — updated to use amber accents matching the new palette
0.17.1 - 2026-02-19
- Horizontal scrollbar on sticky TOC (#363) — added
overflow-x: hiddento the sticky "On this page" sidebar to prevent an unwanted horizontal scrollbar when long section titles wrap - npm security vulnerabilities (#364) — resolved 9 dependency vulnerabilities (5 high, 3 moderate, 1 low) via
npm audit fix, updating webpack, node-forge, qs, lodash, cross-spawn, ajv, and nanoid
0.17.0 - 2026-02-19
- Removed individual color options — the following
html_theme_optionshave been removed:emphasis_color,emphasis_color_dark,strong_color,strong_color_dark,definition_color,definition_color_dark. These are replaced by the newcolor_schemeoption (see Changed below). Projects using the old options should migrate to either the built-inseoul256scheme or acustom_color_scheme.cssfile.
- Sticky table of contents with scroll highlighting (#350, #133)
- New
sticky_contentsoption enables a fixed-position RHS TOC that tracks scroll position - Scroll spy highlights the currently visible section in the TOC
- Auto-expand subsections show the active hierarchy (configurable via
contents_autoexpand) - Copy section link: hover over any TOC entry to copy the full URL with anchor
- Back to top button appears after scrolling down 300px
- New
scrollspy.jsmodule withrequestAnimationFramethrottling - Full documentation in
docs/configure.md
- New
- CI:
/update-snapshotscommand (#362)- PR comment command to regenerate all Playwright visual baselines
- Text color scheme system (#360) — replaces individual color options with scheme-based approach
- New
color_schemetheme option (seoul256default,gruvbox,noneto disable) - Seoul256-inspired palette: dark teal (
#005f5f) for emphasis, dark amber (#875f00) for strong (light mode); medium-light teal (#5fafaf) and light amber-gold (#d7af5f) for dark mode - Gruvbox palette: earthy aqua (
#427b58) for emphasis, warm orange (#af3a03) for strong (light mode); light aqua (#8ec07c) and bright orange (#fe8019) for dark mode - Custom override via
custom_color_scheme.cssin project_static/(auto-detected) - New
_color-schemes.scssmodule for built-in scheme definitions
- New
- Math equation visual test stability (#361)
- Regenerated stale snapshots for consistent cross-environment rendering
- Increased tolerance with
maxDiffPixelRatio: 0.15for MathJax font variance
0.16.0 - 2026-02-06
- Customizable emphasis and bold text colors (#355, #356)
- Six new
html_theme_options:emphasis_color,emphasis_color_dark,strong_color,strong_color_dark,definition_color,definition_color_dark - Allows per-site color customization of italic (
<em>), bold (<strong>/<b>), and definition list (<dt>) elements - Supports light and dark mode independently
- CSS custom properties (
--qe-emphasis-color,--qe-strong-color,--qe-definition-color) with SCSS fallbacks - Server-side validation of color values to prevent CSS injection
- Comprehensive documentation in
docs/configure.mdwith examples
- Six new
- Math equation visual test stability (#357)
- Replaced fixed 1000ms timeout with
MathJax.startup.promisefor reliable math rendering detection - Captures paragraph container instead of tiny MathJax element to avoid dimension mismatches
- Replaced fixed 1000ms timeout with
- Update-snapshots workflow (#357)
- Added
continue-on-error: trueto handle missing snapshot exit codes gracefully
- Added
- Dependency updates (Dependabot)
- Bump codecov/codecov-action from 5.5.1 to 5.5.2 (#351)
- Bump actions/upload-artifact from 5 to 6 (#352)
0.15.1 - 2025-12-11
- Notebook launch URLs with
path_to_docs(#345)- Fixed bug where
path_to_docsprefix was incorrectly included in notebook URLs - When docs are in a subdirectory (e.g.,
lectures/) but notebooks are in a flat repo structure, launch buttons (Colab, JupyterHub, Binder) now generate correct URLs - Added comprehensive test coverage including backward compatibility tests
- Fixed bug where
- Visual regression test stability (#350)
- Fixed flaky MathJax visual regression test by using
maxDiffPixelsinstead ofmaxDiffPixelRatio - Handles minor rendering variations across different environments
- Fixed flaky MathJax visual regression test by using
- Dependency updates (Dependabot)
- Bump actions/github-script from 7 to 8 (#348)
- Bump actions/upload-artifact from 4 to 5 (#347)
- Bump actions/setup-node from 4 to 6 (#346)
0.15.0 - 2025-12-08
- Major refactoring and modernization (#335)
- Updated Node.js from 16.13.2 (EOL) to 18.18.0 LTS
- Modularized SCSS: Split 2038-line monolithic stylesheet into 11 focused modules
- Modularized JavaScript: Organized 565 lines into 8 feature-specific modules
- Updated npm dependencies: sass (1.94.2), sass-loader (16.0.6), css-loader (7.1.2), webpack (5.103.0), and more
- Updated Python dependencies: Added version constraints for pyyaml, docutils, beautifulsoup4
- Updated flake8 constraint from <3.8.0 to >=7.0.0
- Removed unused
clickdependency
- Performance optimizations (#335)
- Preconnect hints for CDN resources (unpkg.com, cdn.jsdelivr.net, fonts.googleapis.com)
- Reduces connection time by 100-300ms per CDN
- Security improvements (#335)
- Fixed 2 npm vulnerabilities (cross-spawn HIGH severity, nanoid MODERATE severity)
- Added SRI (Subresource Integrity) hashes to all CDN-loaded scripts
- Testing improvements (#335)
- New test infrastructure with conftest.py and shared fixtures
- Added test_module_structure.py with 10 new tests (13→23 total tests)
- Validates SCSS module structure, JavaScript module exports, layout template configuration
- Documentation improvements (#335)
- Comprehensive CONTRIBUTING.md with development guide
- New testing guide at docs/contributing/testing.md
- AI-assisted development guide at .github/copilot-instructions.md
- Added .editorconfig for consistent code formatting
- Added .nvmrc for Node.js version pinning
- Deprecation warnings (#335)
- Fixed deprecated
datetime.utcnow()→datetime.now(timezone.utc) - Fixed deprecated
datetime.utcfromtimestamp()→datetime.fromtimestamp(..., tz=timezone.utc) - All 19 deprecation warnings resolved
- Fixed deprecated
- Removed obsolete console polyfill for IE8/9 (#335)
- Reduces JavaScript bundle size from 8.91 KiB to 8.73 KiB
0.14.0 - 2025-12-01
- Visual regression testing with Playwright (#339)
- Automated screenshot comparison for theme styling
- Tests for code blocks, dark mode, math equations, headers, sidebars
- Desktop and mobile viewport coverage
- CI integration with GitHub Actions
- New
/update-new-snapshotsPR comment command (#340)- Automatically generates baseline snapshots for new visual tests
- Only creates missing snapshots (won't overwrite existing baselines)
- Documents workflow in tests/visual/README.md
- Removed italic formatting from f-string interpolation tokens (#324, #329)
- F-string placeholders like
{variable}now render in consistent monospace - Improves code readability by matching terminal/REPL output style
- F-string placeholders like
0.13.2 - 2025-11-25
- Updated Jupyter Book links to avoid redirects (#337)
- Footer "Powered by Jupyter Book" link now points directly to jupyterbook.org/v1/
- Eliminates redirect warnings in lecture linkcheckers
0.13.1 - 2025-11-25
- Colab launch button now correctly generates URLs for flat notebook repositories (#336)
- Added
nb_path_to_notebooksconfiguration option to specify notebook path independently frompath_to_docs - Defaults to empty string for flat repositories, fixing incorrect URL generation
- Added
0.13.0 - 2024-11-24
- Collapsible stderr warnings feature (#333)
- Automatically detects and wraps stderr output in notebook cells with a collapsible interface
- Displays a compact "⚠ Code warnings" button for cleaner presentation
- Improves readability when code produces verbose warnings from upstream packages
- Includes dark theme support and accessibility features (ARIA labels)
- Works seamlessly with myst-nb's
merge_streamsconfiguration option
0.12.0 - 2025-11-23
- Git-based metadata integration for lecture pages (#328, #331)
- Last modified timestamp displayed below authors
- Interactive changelog dropdown showing last 10 commits (configurable)
- Clickable commit hashes linking to GitHub commit pages
- Full commit history link for each document
- Configuration options:
last_modified_date_formatandchangelog_max_entries
- Improved lecture header layout (#328, #331)
- Removed redundant title display from page headers
- Increased lecture series heading font size by 44%
- Increased author names font size by 20%
- Repositioned metadata elements for better visual hierarchy
0.11.0 - 2025-11-20
- Color-based emphasis system for
<em>and<strong>tags (#327)<em>tags now render with distinctive color emphasis instead of italics<strong>tags render with both color emphasis and bold weight- New SCSS color variables for consistent emphasis styling
- Visual treatment of emphasized text now uses color rather than italics for improved readability
0.10.1 - 2024-XX-XX
- Customized toggle button text to display 'Show'/'Hide' instead of default text (#322)
0.10.0 - 2024-XX-XX
- Optional custom code style feature (#319)
- Users can now choose between custom QuantEcon syntax highlighting styles or Pygments built-in themes
- Configuration option
quantecon_book_theme_code_styleinconf.py
0.9.3 - 2024-XX-XX
- Collapse functionality bugs: CSS selectors, height parsing, and toggle bar creation (#300)
- Increased page max-width to accommodate 80-character code lines (#309)
0.9.2 - 2024-XX-XX
- Reference error in index.js (#311)
- Fixed coverage warnings in RTL functionality tests (#313)
0.9.1 - 2024-XX-XX
- Updated Jupyter Book footer link to reduce redirects (#303)
0.9.0 - 2024-XX-XX
- Initial stable release with core theme features