diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 7b1598129f..adcbd20e81 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -26,10 +26,10 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- - name: Set up Python 3.11
+ - name: Set up Python 3.13
uses: actions/setup-python@v5
with:
- python-version: 3.11
+ python-version: 3.13
- uses: actions/cache@v4
with:
path: ~/.cache/pip
diff --git a/doc/_themes/pretix_theme/layout.html b/doc/_themes/pretix_theme/layout.html
index b0fa5c1421..bca924e3bd 100644
--- a/doc/_themes/pretix_theme/layout.html
+++ b/doc/_themes/pretix_theme/layout.html
@@ -6,10 +6,14 @@
{%- else %}
{%- set titlesuffix = "" %}
{%- endif %}
+{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %}
+
+{# Build sphinx_version_info tuple from sphinx_version string in pure Jinja #}
+{%- set (_ver_major, _ver_minor) = (sphinx_version.split('.') | list)[:2] | map('int') -%}
+{%- set sphinx_version_info = (_ver_major, _ver_minor, -1) -%}
-
-
+= (7, 2) %} data-content_root="{{ content_root }}"{% endif %}>
{{ metatags }}
@@ -18,59 +22,50 @@
{{ title|striptags|e }}{{ titlesuffix }}
{% endblock %}
-
- {#- CSS #}
- {%- for css in css_files %}
- {%- if css|attr("rel") %}
-
+ {#- CSS #}
+ {%- for css_file in css_files %}
+ {%- if css_file|attr("filename") %}
+ {{ css_tag(css_file) }}
{%- else %}
-
+
{%- endif %}
- {%- endfor %}
+ {%- endfor %}
- {%- for cssfile in extra_css_files %}
-
- {%- endfor -%}
+ {#- FAVICON #}
+ {%- if favicon_url %}
+
+ {%- endif %}
- {#- FAVICON
- favicon_url is the only context var necessary since Sphinx 4.
- In Sphinx<4, we use favicon but need to prepend path info.
- #}
- {%- set _favicon_url = favicon_url | default(pathto('_static/' + (favicon or ""), 1)) %}
- {%- if favicon_url or favicon %}
-
- {%- endif %}
-
- {#- CANONICAL URL (deprecated) #}
- {%- if theme_canonical_url and not pageurl %}
+ {#- CANONICAL URL (deprecated) #}
+ {%- if theme_canonical_url and not pageurl %}
- {%- endif -%}
+ {%- endif -%}
- {#- CANONICAL URL #}
- {%- if pageurl %}
+ {#- CANONICAL URL #}
+ {%- if pageurl %}
- {%- endif -%}
+ {%- endif -%}
- {#- JAVASCRIPTS #}
- {%- block scripts %}
-
- {%- if not embedded %}
- {# XXX Sphinx 1.8.0 made this an external js-file, quick fix until we refactor the template to inherert more blocks directly from sphinx #}
- {%- for scriptfile in script_files %}
- {{ js_tag(scriptfile) }}
- {%- endfor %}
+ {#- JAVASCRIPTS #}
+ {%- block scripts %}
+ {%- if not embedded %}
+ {%- for scriptfile in script_files %}
+ {{ js_tag(scriptfile) }}
+ {%- endfor %}
+ {%- if READTHEDOCS or DEBUG %}
+
+ {%- endif %}
+
{#- OPENSEARCH #}
{%- if use_opensearch %}
{%- endif %}
- {%- endif %}
- {%- endblock %}
+ {%- endif %}
+ {%- endblock %}
{%- block linktags %}
{%- if hasdoc('about') %}
@@ -123,23 +118,23 @@
{% endblock %}
-
- {% block menu %}
- {#
- The singlehtml builder doesn't handle this toctree call when the
- toctree is empty. Skip building this for now.
- #}
- {% if 'singlehtml' not in builder %}
- {% set global_toc = toctree(maxdepth=theme_navigation_depth|int, collapse=theme_collapse_navigation, includehidden=True) %}
- {% endif %}
- {% if global_toc %}
- {{ global_toc }}
- {% else %}
+ {%- block navigation %}
+ {#- Translators: This is an ARIA section label for the main navigation menu -#}
+
+ {%- endif %}
+ {% include "breadcrumbs.html" %}
+
+ {%- block document %}
+
+ {% block body %}{% endblock %}
+
+ {%- if self.comments()|trim %}
+
+ {%- block comments %}{% endblock %}
+
+ {%- endif%}
+
+ {%- endblock %}
+ {% include "footer.html" %}
+
+ {%- endblock %}
-
-
{% include "versions.html" %}
- {% if not embedded %}
-
-
- {%- for scriptfile in script_files %}
-
- {%- endfor %}
-
- {% endif %}
-
{# RTD hosts this file, so just load on non RTD builds #}
{% if not READTHEDOCS %}
@@ -214,7 +198,7 @@
{% if theme_sticky_navigation %}
{% endif %}
diff --git a/doc/_themes/pretix_theme/layout_old.html b/doc/_themes/pretix_theme/layout_old.html
index 9f2d1999b6..4d14790dbd 100644
--- a/doc/_themes/pretix_theme/layout_old.html
+++ b/doc/_themes/pretix_theme/layout_old.html
@@ -1,136 +1,86 @@
-{#
- basic/layout.html
- ~~~~~~~~~~~~~~~~~
-
- Master layout template for Sphinx themes.
-
- :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
- :license: BSD, see LICENSE for details.
-#}
-{%- block doctype -%}
-
-{%- endblock %}
-{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %}
-{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
-{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
- (sidebars != []) %}
+{# TEMPLATE VAR SETTINGS #}
{%- set url_root = pathto('', 1) %}
-{# XXX necessary? #}
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
{%- if not embedded and docstitle %}
{%- set titlesuffix = " — "|safe + docstitle|e %}
{%- else %}
{%- set titlesuffix = "" %}
{%- endif %}
+{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %}
-{%- macro relbar() %}
-
-
{{ _('Navigation') }}
-
- {%- for rellink in rellinks %}
-
- {{ rellink[3] }}
- {%- if not loop.first %}{{ reldelim2 }}{% endif %}
+ {#- SIDE NAV, TOGGLES ON MOBILE #}
+
+
+
+
+ {#- MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
+ {#- Translators: This is an ARIA section label for the navigation menu that is visible when viewing the page on mobile devices -#}
+
+
+
+ {%- endif %}
+ {% include "breadcrumbs.html" %}
+
+ {%- block document %}
+
+ {% block body %}{% endblock %}
+
+ {%- if self.comments()|trim %}
+
+ {%- block comments %}{% endblock %}
+
+ {%- endif%}
+
+ {%- endblock %}
+ {% include "footer.html" %}
+
+ {%- endblock %}
+
+
+
+ {% include "versions.html" -%}
+
+
+
+ {#- Do not conflict with RTD insertion of analytics script #}
+ {%- if not READTHEDOCS %}
+ {%- if theme_analytics_id %}
+
+
+
-{%- block footer %}
-
-
asdf asdf asdf asdf 22
-{%- endblock %}
-
-
+ {%- endif %}
+ {%- block footer %} {% endblock %}
+
+
+
\ No newline at end of file
diff --git a/doc/api/deviceauth.rst b/doc/api/deviceauth.rst
index 99d9006b99..acf3d22a82 100644
--- a/doc/api/deviceauth.rst
+++ b/doc/api/deviceauth.rst
@@ -39,7 +39,7 @@ as well as the type of underlying hardware. Example:
"rsa_pubkey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqh…nswIDAQAB\n-----END PUBLIC KEY-----\n"
}
-The ``rsa_pubkey`` is optional any only required for certain fatures such as working with reusable
+The ``rsa_pubkey`` is optional any only required for certain features such as working with reusable
media and NFC cryptography.
Every initialization token can only be used once. On success, you will receive a response containing
diff --git a/doc/api/resources/item_program_times.rst b/doc/api/resources/item_program_times.rst
index eedf3be0aa..db8a6d3368 100644
--- a/doc/api/resources/item_program_times.rst
+++ b/doc/api/resources/item_program_times.rst
@@ -46,28 +46,28 @@ Endpoints
Vary: Accept
Content-Type: application/json
- {
- "count": 3,
- "next": null,
- "previous": null,
- "results": [
- {
- "id": 2,
- "start": "2025-08-14T22:00:00Z",
- "end": "2025-08-15T00:00:00Z"
- },
- {
- "id": 3,
- "start": "2025-08-12T22:00:00Z",
- "end": "2025-08-13T22:00:00Z"
- },
- {
- "id": 14,
- "start": "2025-08-15T22:00:00Z",
- "end": "2025-08-17T22:00:00Z"
- }
- ]
- }
+ {
+ "count": 3,
+ "next": null,
+ "previous": null,
+ "results": [
+ {
+ "id": 2,
+ "start": "2025-08-14T22:00:00Z",
+ "end": "2025-08-15T00:00:00Z"
+ },
+ {
+ "id": 3,
+ "start": "2025-08-12T22:00:00Z",
+ "end": "2025-08-13T22:00:00Z"
+ },
+ {
+ "id": 14,
+ "start": "2025-08-15T22:00:00Z",
+ "end": "2025-08-17T22:00:00Z"
+ }
+ ]
+ }
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
diff --git a/doc/requirements.rtd.txt b/doc/requirements.rtd.txt
index ca98fe9ab0..2905c9d091 100644
--- a/doc/requirements.rtd.txt
+++ b/doc/requirements.rtd.txt
@@ -1,9 +1,8 @@
-sphinx==7.4.*
-jinja2==3.1.*
-sphinx-rtd-theme
-sphinxcontrib-httpdomain
-sphinxcontrib-images
-sphinxcontrib-jquery
-sphinxcontrib-spelling==8.*
-sphinxemoji
+sphinx==9.1.*
+sphinx-rtd-theme~=3.1.0rc1
+sphinxcontrib-httpdomain~=1.8.1
+sphinxcontrib-images~=1.0.1
+sphinxcontrib-jquery~=4.1
+sphinxcontrib-spelling~=8.0.2
+sphinxemoji~=0.3.2
pyenchant==3.3.*
diff --git a/doc/requirements.txt b/doc/requirements.txt
index 5de0c0984f..249eed05bc 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,10 +1,9 @@
-e ../
-sphinx==7.4.*
-jinja2==3.1.*
-sphinx-rtd-theme
-sphinxcontrib-httpdomain
-sphinxcontrib-images
-sphinxcontrib-jquery
-sphinxcontrib-spelling==8.*
-sphinxemoji
+sphinx==9.1.*
+sphinx-rtd-theme~=3.1.0rc1
+sphinxcontrib-httpdomain~=1.8.1
+sphinxcontrib-images~=1.0.1
+sphinxcontrib-jquery~=4.1
+sphinxcontrib-spelling~=8.0.2
+sphinxemoji~=0.3.2
pyenchant==3.3.*