From 5d1ce7b6aba2e8c9aac57795226f3c584df830b7 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Fri, 27 Feb 2026 10:47:44 +0200 Subject: [PATCH 01/11] Enable copy button for shell sessions and consoles (#295) --- python_docs_theme/static/copybutton.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python_docs_theme/static/copybutton.js b/python_docs_theme/static/copybutton.js index e1ad458..f90eb1e 100644 --- a/python_docs_theme/static/copybutton.js +++ b/python_docs_theme/static/copybutton.js @@ -62,6 +62,12 @@ const loadCopyButton = () => { + ".highlight-python3 .highlight," + ".highlight-pycon .highlight," + ".highlight-pycon3 .highlight," + + ".highlight-bash .highlight," + + ".highlight-console .highlight," + + ".highlight-doscon .highlight," + + ".highlight-ps1con .highlight," + + ".highlight-sh .highlight," + + ".highlight-shell-session .highlight," + ".highlight-default .highlight" ) From d075da5fe4aa2c2aa28f8ef9e3065fe440fcab28 Mon Sep 17 00:00:00 2001 From: Lysandros Nikolaou Date: Fri, 27 Feb 2026 15:30:34 +0100 Subject: [PATCH 02/11] Add colors for thread safety annotations (#297) --- python_docs_theme/static/pydoctheme.css | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/python_docs_theme/static/pydoctheme.css b/python_docs_theme/static/pydoctheme.css index 8c0ddfc..a83030a 100644 --- a/python_docs_theme/static/pydoctheme.css +++ b/python_docs_theme/static/pydoctheme.css @@ -444,6 +444,26 @@ div.footer a:hover { color: #229; } +/* C API thread safety annotations */ +:root { + --threadsafety-incompatible: var(--bad-color); + --threadsafety-compatible: var(--middle-color); + --threadsafety-safe: var(--good-color); +} + +.threadsafety.threadsafety-incompatible { + color: var(--threadsafety-incompatible); +} + +.threadsafety.threadsafety-compatible { + color: var(--threadsafety-compatible); +} + +.threadsafety.threadsafety-safe { + color: var(--threadsafety-safe); +} + + dl > dt span ~ em, .sig { font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; From 6aea65762f1e1ee339cf96b837377a5f917338b3 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Fri, 27 Feb 2026 16:57:38 +0200 Subject: [PATCH 03/11] Prepare 2026.2 release (#298) --- CHANGELOG.md | 6 ++++++ CONTRIBUTING.md | 5 +++-- python_docs_theme/__init__.py | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 069a114..0c28c8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [2026.2](https://github.com/python/python-docs-theme/releases/tag/2026.2) + +* Style codeblock `:caption:` by @StanFromIreland in https://github.com/python/python-docs-theme/pull/288 +* Enable copy button for shell sessions and consoles by @hugovk in https://github.com/python/python-docs-theme/pull/295 +* Add colors for thread safety annotations by @lysnikolaou in https://github.com/python/python-docs-theme/pull/297 + ## [2025.12](https://github.com/python/python-docs-theme/releases/tag/2025.12) * Add support for green, red and yellow side borders for code examples by @hugovk in https://github.com/python/python-docs-theme/pull/285 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f26b902..4ca0f05 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,9 +7,10 @@ [GitHub Actions](https://github.com/python/python-docs-theme/actions) - Go to https://github.com/python/python-docs-theme/releases - Click "Draft a new release" -- Click "Choose a tag" +- Click "Tag: Select tag" - Type the next YYYY.MM version (no leading zero) and - select "**Create new tag: YYYY.MM** on publish" + select "Create new tag" +- Click "Create" for "YYYY.MM will be created on publish" - Leave the "Release title" blank (it will be autofilled) - Click "Generate release notes" and amend as required - Click "Publish release" diff --git a/python_docs_theme/__init__.py b/python_docs_theme/__init__.py index a6c8f18..026329b 100644 --- a/python_docs_theme/__init__.py +++ b/python_docs_theme/__init__.py @@ -11,7 +11,7 @@ from sphinx.application import Sphinx from sphinx.util.typing import ExtensionMetadata -__version__ = "2025.12" +__version__ = "2026.2" THEME_PATH = Path(__file__).resolve().parent LOCALE_DIR = THEME_PATH / "locale" From 6f83c8d47504e0cd79be5f27607622e8c63c97ce Mon Sep 17 00:00:00 2001 From: Lysandros Nikolaou Date: Thu, 12 Mar 2026 14:37:24 +0100 Subject: [PATCH 04/11] Add colors for new thread-safety levels (#299) --- python_docs_theme/static/pydoctheme.css | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/python_docs_theme/static/pydoctheme.css b/python_docs_theme/static/pydoctheme.css index a83030a..7167add 100644 --- a/python_docs_theme/static/pydoctheme.css +++ b/python_docs_theme/static/pydoctheme.css @@ -448,7 +448,9 @@ div.footer a:hover { :root { --threadsafety-incompatible: var(--bad-color); --threadsafety-compatible: var(--middle-color); - --threadsafety-safe: var(--good-color); + --threadsafety-distinct: var(--middle-color); + --threadsafety-shared: var(--good-color); + --threadsafety-atomic: var(--good-color); } .threadsafety.threadsafety-incompatible { @@ -459,8 +461,16 @@ div.footer a:hover { color: var(--threadsafety-compatible); } -.threadsafety.threadsafety-safe { - color: var(--threadsafety-safe); +.threadsafety.threadsafety-distinct { + color: var(--threadsafety-distinct); +} + +.threadsafety.threadsafety-shared { + color: var(--threadsafety-shared); +} + +.threadsafety.threadsafety-atomic { + color: var(--threadsafety-atomic); } From d71bc5c6f7a055719feeb629df1a7a6c39dd4c23 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:46:13 +0200 Subject: [PATCH 05/11] Prepare 2026.3 release (#300) --- CHANGELOG.md | 4 ++++ python_docs_theme/__init__.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c28c8f..8c34acb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [2026.3](https://github.com/python/python-docs-theme/releases/tag/2026.3) + +* Add colors for new thread-safety levels by @lysnikolaou in https://github.com/python/python-docs-theme/pull/299 + ## [2026.2](https://github.com/python/python-docs-theme/releases/tag/2026.2) * Style codeblock `:caption:` by @StanFromIreland in https://github.com/python/python-docs-theme/pull/288 diff --git a/python_docs_theme/__init__.py b/python_docs_theme/__init__.py index 026329b..e92b751 100644 --- a/python_docs_theme/__init__.py +++ b/python_docs_theme/__init__.py @@ -11,7 +11,7 @@ from sphinx.application import Sphinx from sphinx.util.typing import ExtensionMetadata -__version__ = "2026.2" +__version__ = "2026.3" THEME_PATH = Path(__file__).resolve().parent LOCALE_DIR = THEME_PATH / "locale" From 4047502dd7e7c49cb064fc11869e38f81bedf0fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 11:32:15 +0800 Subject: [PATCH 06/11] Bump the actions group with 3 updates (#301) Bumps the actions group with 3 updates: [j178/prek-action](https://github.com/j178/prek-action), [actions/download-artifact](https://github.com/actions/download-artifact) and [actions/upload-artifact](https://github.com/actions/upload-artifact). Updates `j178/prek-action` from 1 to 2 - [Release notes](https://github.com/j178/prek-action/releases) - [Commits](https://github.com/j178/prek-action/compare/v1...v2) Updates `actions/download-artifact` from 7 to 8 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v7...v8) Updates `actions/upload-artifact` from 6 to 7 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v6...v7) --- updated-dependencies: - dependency-name: j178/prek-action dependency-version: '2' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/lint.yml | 2 +- .github/workflows/pypi-package.yml | 2 +- .github/workflows/tests.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a8f03c1..2c301a8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,4 +16,4 @@ jobs: - uses: actions/checkout@v6 with: persist-credentials: false - - uses: j178/prek-action@v1 + - uses: j178/prek-action@v2 diff --git a/.github/workflows/pypi-package.yml b/.github/workflows/pypi-package.yml index d3f6617..2734399 100644 --- a/.github/workflows/pypi-package.yml +++ b/.github/workflows/pypi-package.yml @@ -49,7 +49,7 @@ jobs: steps: - name: Download packages built by build-and-inspect-python-package - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: Packages path: dist diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b0e3dbf..6a10a67 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -52,7 +52,7 @@ jobs: run: | cat ./logs/docsbuild.log - name: Upload - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: doc-html-${{ matrix.python-version }} path: www/ From 0672ed43041f46ab116b3f047b38084c123efad9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:23:01 +0300 Subject: [PATCH 07/11] [pre-commit.ci] pre-commit autoupdate (#302) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- .pre-commit-config.yaml | 16 ++++++++-------- pyproject.toml | 13 ++++--------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6ff7968..eb895c4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,12 +1,12 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.10 + rev: v0.15.9 hooks: - id: ruff-check args: [--exit-non-zero-on-fix] - repo: https://github.com/psf/black-pre-commit-mirror - rev: 25.12.0 + rev: 26.3.1 hooks: - id: black @@ -22,28 +22,28 @@ repos: - id: trailing-whitespace - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.36.0 + rev: 0.37.1 hooks: - id: check-dependabot - id: check-github-workflows - repo: https://github.com/rhysd/actionlint - rev: v1.7.10 + rev: v1.7.12 hooks: - id: actionlint - - repo: https://github.com/woodruffw/zizmor-pre-commit - rev: v1.19.0 + - repo: https://github.com/zizmorcore/zizmor-pre-commit + rev: v1.23.1 hooks: - id: zizmor - repo: https://github.com/tox-dev/pyproject-fmt - rev: v2.11.1 + rev: v2.21.0 hooks: - id: pyproject-fmt - repo: https://github.com/abravalheri/validate-pyproject - rev: v0.24.1 + rev: v0.25 hooks: - id: validate-pyproject diff --git a/pyproject.toml b/pyproject.toml index b8598f5..ef39594 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,26 +27,21 @@ classifiers = [ "Topic :: Software Development :: Documentation", ] dynamic = [ "version" ] - dependencies = [ "sphinx>=7.3", ] - +urls."Issue tracker" = "https://github.com/python/python-docs-theme/issues" urls.Code = "https://github.com/python/python-docs-theme" urls.Download = "https://pypi.org/project/python-docs-theme/" urls.Homepage = "https://github.com/python/python-docs-theme/" -urls."Issue tracker" = "https://github.com/python/python-docs-theme/issues" entry-points."sphinx.html_themes".python_docs_theme = "python_docs_theme" -[tool.flit.module] -name = "python_docs_theme" - -[tool.flit.sdist] -include = [ "python_docs_theme/" ] +[tool.flit] +module.name = "python_docs_theme" +sdist.include = [ "python_docs_theme/" ] [tool.ruff] fix = true - lint.select = [ "C4", # flake8-comprehensions "E", # pycodestyle errors From 9146048bfe40dbb4224ea159bb548909d3332b32 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 14 Apr 2026 11:03:12 +0100 Subject: [PATCH 08/11] Set line-height on field-list term Align text within field-list `dt` tags with the `p` tags within the corresponding `dd` tags. --- python_docs_theme/static/pydoctheme.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python_docs_theme/static/pydoctheme.css b/python_docs_theme/static/pydoctheme.css index 7167add..d866c34 100644 --- a/python_docs_theme/static/pydoctheme.css +++ b/python_docs_theme/static/pydoctheme.css @@ -223,6 +223,9 @@ div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { border: 0; padding: 0.3em 0; } +div.body dl.field-list > dt { + line-height: 1.6; +} div.body hr { border: 0; From 3cb59ffb3541938b8dabeb5f33b65031f26a8198 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Tue, 14 Apr 2026 14:13:32 +0100 Subject: [PATCH 09/11] Add Tamil translation (#304) --- .../ta/LC_MESSAGES/python-docs-theme.po | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 python_docs_theme/locale/ta/LC_MESSAGES/python-docs-theme.po diff --git a/python_docs_theme/locale/ta/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/ta/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..f309d5c --- /dev/null +++ b/python_docs_theme/locale/ta/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,129 @@ +# Translations template for python-docs-theme. +# Copyright (C) 2026 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# FIRST AUTHOR , 2026. +# +# Translators: +# Murugan Santhosh, 2026 +# +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2026.3\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n" +"POT-Creation-Date: 2026-04-06 02:43+0000\n" +"PO-Revision-Date: 2025-09-06 07:41+0000\n" +"Last-Translator: Murugan Santhosh, 2026\n" +"Language-Team: Tamil (https://app.transifex.com/python-doc/teams/5390/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.18.0\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: python_docs_theme/footerdonate.html:1 +msgid "The Python Software Foundation is a non-profit corporation." +msgstr "Python Software Foundation ஒரு இலாப நோக்கம் இல்லாத நிறுவனமாகும்." + +#: python_docs_theme/footerdonate.html:2 +msgid "Please donate." +msgstr "தயவுசெய்து நன்கொடை அளியுங்கள்." + +#: python_docs_theme/layout.html:6 +msgid "Navigation" +msgstr "வழிநடத்தல்" + +#: python_docs_theme/layout.html:51 python_docs_theme/layout.html:111 +msgid "Quick search" +msgstr "விரைவுத் தேடல்" + +#: python_docs_theme/layout.html:52 python_docs_theme/layout.html:112 +msgid "Go" +msgstr "செல்" + +#: python_docs_theme/layout.html:60 +msgid "Theme" +msgstr "தோற்றம்" + +#: python_docs_theme/layout.html:62 +msgid "Auto" +msgstr "தானியங்கி" + +#: python_docs_theme/layout.html:63 +msgid "Light" +msgstr "வெளிச்சமாக" + +#: python_docs_theme/layout.html:64 +msgid "Dark" +msgstr "இருண்டதாக" + +#: python_docs_theme/layout.html:96 +msgid "Menu" +msgstr "Menu" + +#: python_docs_theme/layout.html:142 +msgid "Copyright" +msgstr "காப்புரிமை" + +#: python_docs_theme/layout.html:147 +msgid "" +"This page is licensed under the Python Software Foundation License Version " +"2." +msgstr "" +"இந்தப் பக்கம் Python Software Foundation Licence, பதிப்பு 2-இன் கீழ் உரிமம் " +"பெற்றது." + +#: python_docs_theme/layout.html:149 +msgid "" +"Examples, recipes, and other code in the documentation are additionally " +"licensed under the Zero Clause BSD License." +msgstr "" +"ஆவணங்களில் உள்ள எடுத்துக்காட்டுகள், செய்முறைகள் மற்றும் பிற குறியீடுகள் " +"கூடுதலாக Zero Clause BSD Licence-இன் கீழ் உரிமம் பெறப்பட்டுள்ளன." + +#: python_docs_theme/layout.html:152 +#, python-format +msgid "" +"See History and License for more " +"information." +msgstr "" +"மேலும் தகவல்களுக்கு வரலாறு மற்றும் " +"உரிமத்தைப் பார்க்கவும்." + +#: python_docs_theme/layout.html:155 +#, python-format +msgid "Hosted on %(hosted_on)s." +msgstr "%(hosted_on)s-இல் வழங்கப்படுகிறது." + +#: python_docs_theme/layout.html:163 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "கடைசியாகப் புதுப்பிக்கப்பட்டது %(last_updated)s அன்று." + +#: python_docs_theme/layout.html:166 +#, python-format +msgid "Found a bug?" +msgstr "பிழையை கண்டீர்களா?" + +#: python_docs_theme/layout.html:170 +#, python-format +msgid "" +"Created using Sphinx " +"%(sphinx_version)s." +msgstr "" +"Sphinx பயன்படுத்தி " +"உருவாக்கப்பட்டது %(sphinx_version)s." + +#: python_docs_theme/static/copybutton.js:30 +#: python_docs_theme/static/copybutton.js:55 +msgid "Copy" +msgstr "Copy" + +#: python_docs_theme/static/copybutton.js:31 +msgid "Copy to clipboard" +msgstr "Copy to clipboard" + +#: python_docs_theme/static/copybutton.js:53 +msgid "Copied!" +msgstr "Copied!" From b8841091aa256498c6f6dffd1fd6d468c013b648 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 19 Apr 2026 14:17:58 +0100 Subject: [PATCH 10/11] Add styling for `soft-deprecated` class (#305) --- python_docs_theme/static/pydoctheme.css | 10 ++++++++++ python_docs_theme/static/pydoctheme_dark.css | 2 ++ 2 files changed, 12 insertions(+) diff --git a/python_docs_theme/static/pydoctheme.css b/python_docs_theme/static/pydoctheme.css index d866c34..aa9622d 100644 --- a/python_docs_theme/static/pydoctheme.css +++ b/python_docs_theme/static/pydoctheme.css @@ -789,10 +789,12 @@ div.genindex-jumpbox a { --versionadded: var(--good-color); --versionchanged: var(--middle-color); --deprecated: var(--bad-color); + --soft-deprecated: rgb(175, 0, 255); --versionadded-border: var(--good-border); --versionchanged-border: var(--middle-border); --deprecated-border: var(--bad-border); + --soft-deprecated-border: rgb(175, 0, 255); } div.versionadded, @@ -817,6 +819,10 @@ div.versionremoved { border-left-color: var(--deprecated-border); } +div.soft-deprecated { + border-left-color: var(--soft-deprecated-border); +} + div.versionadded .versionmodified { color: var(--versionadded); } @@ -831,6 +837,10 @@ div.versionremoved .versionmodified { color: var(--deprecated); } +div.soft-deprecated .versionmodified { + color: var(--soft-deprecated); +} + /* Hide header when printing */ @media print { div.mobile-nav { diff --git a/python_docs_theme/static/pydoctheme_dark.css b/python_docs_theme/static/pydoctheme_dark.css index 909a296..df91a2a 100644 --- a/python_docs_theme/static/pydoctheme_dark.css +++ b/python_docs_theme/static/pydoctheme_dark.css @@ -181,6 +181,8 @@ img.invert-in-dark-mode { --versionadded: var(--good-color); --versionchanged: var(--middle-color); --deprecated: var(--bad-color); + --soft-deprecated: rgb(206, 100, 255); + --soft-deprecated-border: rgb(206, 100, 255); } .copybutton { From 6da68a738f3358fa85edc2d769a1a6adf8d5b860 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 19 Apr 2026 19:27:25 +0100 Subject: [PATCH 11/11] Prepare 2026.4 release (#306) Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ python_docs_theme/__init__.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c34acb..35e50ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2026.4](https://github.com/python/python-docs-theme/releases/tag/2026.4) + +* Add styling for the `soft-deprecated` class by @StanFromIreland + in https://github.com/python/python-docs-theme/pull/305 +* Add Tamil translation in https://github.com/python/python-docs-theme/pull/304 +* Fix the vertical alignment of `:Editor:` by @pradyunsg in + https://github.com/python/python-docs-theme/pull/303 + ## [2026.3](https://github.com/python/python-docs-theme/releases/tag/2026.3) * Add colors for new thread-safety levels by @lysnikolaou in https://github.com/python/python-docs-theme/pull/299 diff --git a/python_docs_theme/__init__.py b/python_docs_theme/__init__.py index e92b751..6708b6d 100644 --- a/python_docs_theme/__init__.py +++ b/python_docs_theme/__init__.py @@ -11,7 +11,7 @@ from sphinx.application import Sphinx from sphinx.util.typing import ExtensionMetadata -__version__ = "2026.3" +__version__ = "2026.4" THEME_PATH = Path(__file__).resolve().parent LOCALE_DIR = THEME_PATH / "locale"