diff --git a/docs/scripts/api-events.py b/docs/scripts/api-events.py
index 8e7007639..be3f1e0b0 100644
--- a/docs/scripts/api-events.py
+++ b/docs/scripts/api-events.py
@@ -60,7 +60,8 @@ def category(name: str, desc: str, hooks: list[type[hooks.Hook]]) -> None:
raise RuntimeError(f"Already documented: {hook}")
known.add(hook.name)
doc = inspect.getdoc(hook)
- print(f" def {hook.name}({', '.join(str(p) for p in ['self'] + params)}):")
+ print(f" @staticmethod")
+ print(f" def {hook.name}({', '.join(str(p) for p in params)}):")
print(textwrap.indent(f'"""\n{doc}\n"""', " "))
if params:
print(
diff --git a/docs/scripts/pdoc-template/custom.css b/docs/scripts/pdoc-template/custom.css
new file mode 100644
index 000000000..bae027af5
--- /dev/null
+++ b/docs/scripts/pdoc-template/custom.css
@@ -0,0 +1,18 @@
+.pdoc h1 {
+ margin-bottom: 1em;
+}
+
+{% if module and module.name == "events" %}
+
+.pdoc .class {
+ padding-left: 0;
+ --name: var(--text);
+ background: none;
+ font-size: 1.2em;
+}
+
+.pdoc .classattr {
+ margin-left: 0;
+}
+
+{% endif %}
diff --git a/docs/scripts/pdoc-template/frame.html.jinja2 b/docs/scripts/pdoc-template/frame.html.jinja2
index d7ef3ab4d..71ec15052 100644
--- a/docs/scripts/pdoc-template/frame.html.jinja2
+++ b/docs/scripts/pdoc-template/frame.html.jinja2
@@ -2,7 +2,7 @@
{% block style %}
-
+
{% endblock %}
{% endfilter %}
{% block content %}{% endblock %}
diff --git a/docs/scripts/pdoc-template/module.html.jinja2 b/docs/scripts/pdoc-template/module.html.jinja2
index 8cb53dbab..b78f260c8 100644
--- a/docs/scripts/pdoc-template/module.html.jinja2
+++ b/docs/scripts/pdoc-template/module.html.jinja2
@@ -14,6 +14,7 @@ To document all event hooks, we do a bit of hackery:
{% macro view_source_state(doc) %}{% endmacro %}
{% macro view_source_button(doc) %}{% endmacro %}
{% macro view_source_code(doc) %}{% endmacro %}
+ {% macro decorators(doc) %}{% endmacro %}
{% macro is_public(doc) %}
{% if doc.name != "__init__" %}
{{ default_is_public(doc) }}