[{"id":35904,"web_url":"https://patchwork.libcamera.org/comment/35904/","msgid":"<175821574517.17312.2628552780837615900@localhost>","date":"2025-09-18T17:15:45","subject":"Re: [PATCH v3 04/10] Documentation: Use the sphinx book theme","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/people/184/","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"content":"Hi Laurent,\n\nQuoting Laurent Pinchart (2025-09-17 22:17:35)\n> From: Stefan Klug <stefan.klug@ideasonboard.com>\n> \n> Our current theme doesn't handle many of the rst features (namely notes,\n> proper code highlighting, font formatting). The sphinx book theme\n> provides a unobtrusive design which makes the documentation way more fun\n> to read. The branding is minimal. The libcamera logo is included and\n> theme colors are set to the libcamera blue.\n> \n> To get meson/sphinx to successfully compile the docs the package\n> \"python3-sphinx-book-theme\" needs to be installed (at least on debian\n> based systems).\n> \n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Stefan Klug <stefan.klug@ideasonboard.com> \n\nBest regards,\nStefan\n\n> ---\n> Changes since v1:\n> \n> - Add SPDX license header to custom.css\n> - Update .reuse/dep5\n> - Fix typo in commit message\n> - Replace double with single quotes in conf.py.in\n> - Rename logo-and-text.svg to libcamera-logo-text.svg\n> ---\n>  .reuse/dep5                                   |   5 +-\n>  Documentation/conf.py.in                      |  19 +-\n>  Documentation/meson.build                     |   2 +-\n>  Documentation/theme/footer.html               |  14 -\n>  Documentation/theme/layout.html               | 109 -------\n>  Documentation/theme/search.html               |  63 ----\n>  Documentation/theme/static/css/theme.css      | 295 ------------------\n>  Documentation/theme/static/custom.css         |   5 +\n>  .../theme/static/libcamera-logo-text.svg      | 223 +++++++++++++\n>  Documentation/theme/static/search.png         | Bin 482 -> 0 bytes\n>  Documentation/theme/theme.conf                |   7 -\n>  README.rst                                    |   4 +-\n>  12 files changed, 248 insertions(+), 498 deletions(-)\n>  delete mode 100644 Documentation/theme/footer.html\n>  delete mode 100644 Documentation/theme/layout.html\n>  delete mode 100644 Documentation/theme/search.html\n>  delete mode 100644 Documentation/theme/static/css/theme.css\n>  create mode 100644 Documentation/theme/static/custom.css\n>  create mode 100644 Documentation/theme/static/libcamera-logo-text.svg\n>  delete mode 100644 Documentation/theme/static/search.png\n>  delete mode 100644 Documentation/theme/theme.conf\n> \n> diff --git a/.reuse/dep5 b/.reuse/dep5\n> index c5ef5e01b0f9..9cdb56e81ae3 100644\n> --- a/.reuse/dep5\n> +++ b/.reuse/dep5\n> @@ -6,13 +6,10 @@ Source: https://git.libcamera.org/libcamera/libcamera.git/\n>  Files: Documentation/binning.svg\n>         Documentation/camera-sensor-model.rst\n>         Documentation/sensor_model.svg\n> +       Documentation/theme/static/libcamera-logo-text.svg\n>  Copyright: Copyright 2023 Ideas On Board Oy\n>  License: CC-BY-SA-4.0\n>  \n> -Files: Documentation/theme/static/search.png\n> -Copyright: 2022 Fonticons, Inc.\n> -License: CC-BY-4.0\n> -\n>  Files: src/ipa/rpi/vc4/data/*.json\n>         utils/raspberrypi/ctt/ctt_config_example.json\n>         utils/raspberrypi/ctt/ctt_ref.pgm\n> diff --git a/Documentation/conf.py.in b/Documentation/conf.py.in\n> index 097e579b575b..34fa3956f49e 100644\n> --- a/Documentation/conf.py.in\n> +++ b/Documentation/conf.py.in\n> @@ -88,8 +88,16 @@ doxylink = {\n>  # The theme to use for HTML and HTML Help pages.  See the documentation for\n>  # a list of builtin themes.\n>  #\n> -html_theme = 'theme'\n> -html_theme_path = ['@THEME_DIR@']\n> +html_theme = 'sphinx_book_theme'\n> +html_theme_path = []\n> +\n> +html_logo = '@CURRENT_SRCDIR@/theme/static/libcamera-logo-text.svg'\n> +\n> +html_context = {\n> +    # Set the default mode, so that syntax highlighting works without\n> +    # javascript.\n> +    'default_mode': 'light'\n> +}\n>  \n>  # Theme options are theme-specific and customize the look and feel of a theme\n>  # further.  For a list of options available for each theme, see the\n> @@ -100,7 +108,7 @@ html_theme_path = ['@THEME_DIR@']\n>  # Add any paths that contain custom static files (such as style sheets) here,\n>  # relative to this directory. They are copied after the builtin static files,\n>  # so a file named \"default.css\" will overwrite the builtin \"default.css\".\n> -html_static_path = []\n> +html_static_path = ['@CURRENT_SRCDIR@/theme/static']\n>  \n>  # Custom sidebar templates, must be a dictionary that maps document names\n>  # to template names.\n> @@ -111,3 +119,8 @@ html_static_path = []\n>  # 'searchbox.html']``.\n>  #\n>  # html_sidebars = {}\n> +\n> +html_css_files = [\n> +    'custom.css',\n> +]\n> +\n> diff --git a/Documentation/meson.build b/Documentation/meson.build\n> index a8d4afc01dd1..f73407432fff 100644\n> --- a/Documentation/meson.build\n> +++ b/Documentation/meson.build\n> @@ -142,7 +142,7 @@ if sphinx.found()\n>      sphinx_conf = configure_file(input : 'conf.py.in',\n>                                   output : 'conf.py',\n>                                   configuration : {\n> -                                    'THEME_DIR': meson.current_source_dir(),\n> +                                    'CURRENT_SRCDIR': meson.current_source_dir(),\n>                                      'TOP_BUILDDIR': meson.project_build_root(),\n>                                   })\n>  \n> diff --git a/Documentation/theme/footer.html b/Documentation/theme/footer.html\n> deleted file mode 100644\n> index 12939e8b7c12..000000000000\n> --- a/Documentation/theme/footer.html\n> +++ /dev/null\n> @@ -1,14 +0,0 @@\n> -{#\n> -SPDX-License-Identifier: CC-BY-SA-4.0\n> -#}\n> -<footer>\n> -  <div id=\"signature\">\n> -    {%- if show_copyright %}\n> -      {%- if hasdoc('copyright') %}\n> -        {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href=\"{{ path }}\">Copyright</a> {{ copyright }}.{% endtrans %}\n> -      {%- else %}\n> -        {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}\n> -      {%- endif %}\n> -    {%- endif %}\n> -  </div>\n> -</footer>\n> diff --git a/Documentation/theme/layout.html b/Documentation/theme/layout.html\n> deleted file mode 100644\n> index 4fffefab62eb..000000000000\n> --- a/Documentation/theme/layout.html\n> +++ /dev/null\n> @@ -1,109 +0,0 @@\n> -{#\n> -SPDX-License-Identifier: CC-BY-SA-4.0\n> -#}\n> -{# TEMPLATE VAR SETTINGS #}\n> -{%- set url_root = pathto('', 1) %}\n> -{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}\n> -{%- if not embedded and docstitle %}\n> -  {%- set titlesuffix = \" &mdash; \"|safe + docstitle|e %}\n> -{%- else %}\n> -  {%- set titlesuffix = \"\" %}\n> -{%- endif %}\n> -<!DOCTYPE html>\n> -<head>\n> -  <meta charset=\"utf-8\">\n> -  {{ metatags }}\n> -  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n> -  {% block htmltitle %}\n> -  <title>{{ title|striptags|e }}{{ titlesuffix }}</title>\n> -  {% endblock %}\n> -\n> -  {# FAVICON #}\n> -  {% if favicon %}\n> -    <link rel=\"shortcut icon\" href=\"{{ pathto('_static/' + favicon, 1) }}\"/>\n> -  {% endif %}\n> -\n> -  {# CSS #}\n> -\n> -  {# OPENSEARCH #}\n> -  {% if not embedded %}\n> -    {% if use_opensearch %}\n> -      <link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}\" href=\"{{ pathto('_static/opensearch.xml', 1) }}\"/>\n> -    {% endif %}\n> -\n> -  {% endif %}\n> -\n> -  {% for cssfile in css_files %}\n> -    <link rel=\"stylesheet\" href=\"{{ pathto(cssfile, 1) }}\" type=\"text/css\" />\n> -  {% endfor %}\n> -\n> -  {% for cssfile in extra_css_files %}\n> -    <link rel=\"stylesheet\" href=\"{{ pathto(cssfile, 1) }}\" type=\"text/css\" />\n> -  {% endfor %}\n> -\n> -  {%- block linktags %}\n> -    {%- if hasdoc('about') %}\n> -        <link rel=\"author\" title=\"{{ _('About these documents') }}\"\n> -              href=\"{{ pathto('about') }}\"/>\n> -    {%- endif %}\n> -    {%- if hasdoc('genindex') %}\n> -        <link rel=\"index\" title=\"{{ _('Index') }}\"\n> -              href=\"{{ pathto('genindex') }}\"/>\n> -    {%- endif %}\n> -    {%- if hasdoc('search') %}\n> -        <link rel=\"search\" title=\"{{ _('Search') }}\" href=\"{{ pathto('search') }}\"/>\n> -    {%- endif %}\n> -    {%- if hasdoc('copyright') %}\n> -        <link rel=\"copyright\" title=\"{{ _('Copyright') }}\" href=\"{{ pathto('copyright') }}\"/>\n> -    {%- endif %}\n> -    <link rel=\"top\" title=\"{{ docstitle|e }}\" href=\"{{ pathto('index') }}\"/>\n> -    {%- if parents %}\n> -        <link rel=\"up\" title=\"{{ parents[-1].title|striptags|e }}\" href=\"{{ parents[-1].link|e }}\"/>\n> -    {%- endif %}\n> -    {%- if next %}\n> -        <link rel=\"next\" title=\"{{ next.title|striptags|e }}\" href=\"{{ next.link|e }}\"/>\n> -    {%- endif %}\n> -    {%- if prev %}\n> -        <link rel=\"prev\" title=\"{{ prev.title|striptags|e }}\" href=\"{{ prev.link|e }}\"/>\n> -    {%- endif %}\n> -  {%- endblock %}\n> -  {%- block extrahead %} {% endblock %}\n> -\n> -</head>\n> -\n> -<body role=\"document\">\n> -  <header>\n> -    <div id=\"navbar\">\n> -      <div class=\"navbar-brand\">\n> -        <div class=\"navbar-logo\">   _\n> -+-/ \\-+\n> -| (o) |\n> -+-----+</div>\n> -        <div class=\"navbar-name\"><span class=\"text-light\">lib</span>camera</div>\n> -      </div>\n> -\n> -      <div class=\"navbar\">\n> -        {{ toctree(maxdepth=1) }}\n> -        <div class=\"searchbox\" role=\"search\">\n> -          <form class=\"search\" action=\"{{ pathto('search') }}\" method=\"get\">\n> -            <input type=\"text\" name=\"q\" />\n> -           <input type=\"submit\" value=\"Go\" />\n> -            <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n> -            <input type=\"hidden\" name=\"area\" value=\"default\" />\n> -          </form>\n> -        </div>\n> -      </div>\n> -\n> -    </div>\n> -  </header>\n> -\n> -  <div id=\"content\">\n> -    {# PAGE CONTENT #}\n> -    <div class=\"block\">\n> -      {% block body %}{% endblock %}\n> -    </div>\n> -  </div>\n> -\n> -  {% include \"footer.html\" %}\n> -</body>\n> -</html>\n> diff --git a/Documentation/theme/search.html b/Documentation/theme/search.html\n> deleted file mode 100644\n> index 00c2af93a1b3..000000000000\n> --- a/Documentation/theme/search.html\n> +++ /dev/null\n> @@ -1,63 +0,0 @@\n> -{#\n> -SPDX-License-Identifier: CC-BY-SA-4.0\n> -#}\n> -{#\n> -    basic/search.html\n> -    ~~~~~~~~~~~~~~~~~\n> -\n> -    Template for the search page.\n> -\n> -    :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.\n> -    :license: BSD, see LICENSE for details.\n> -#}\n> -{%- extends \"layout.html\" %}\n> -{% block extrahead %}\n> -  <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"{{ pathto('', 1) }}\" src=\"{{ pathto('_static/documentation_options.js', 1) }}\"></script>\n> -  {%- for scriptfile in script_files %}\n> -  <script type=\"text/javascript\" src=\"{{ pathto(scriptfile, 1) }}\"></script>\n> -  {%- endfor %}\n> -  <script type=\"text/javascript\" src=\"_static/searchtools.js\"></script>\n> -  <script type=\"text/javascript\">\n> -    jQuery(function() { Search.loadIndex(\"{{ pathto('searchindex.js', 1) }}\"); });\n> -  </script>\n> -  {# this is used when loading the search index using $.ajax fails,\n> -     such as on Chrome for documents on localhost #}\n> -  <script type=\"text/javascript\" id=\"searchindexloader\"></script>\n> -{% endblock %}\n> -{% block body %}\n> -  <h1 id=\"search-documentation\">{{ _('Search') }}</h1>\n> -  <div id=\"fallback\" class=\"admonition warning\">\n> -  <script type=\"text/javascript\">$('#fallback').hide();</script>\n> -  <p>\n> -    Please activate JavaScript to enable the search functionality.\n> -  </p>\n> -  </div>\n> -  <p>\n> -    From here you can search these documents. Enter your search\n> -    words into the box below and click \"search\". Note that the search\n> -    function will automatically search for all of the words. Pages\n> -    containing fewer words won't appear in the result list.\n> -  </p>\n> -  <form action=\"\" method=\"get\">\n> -    <input type=\"text\" name=\"q\" value=\"\" />\n> -    <input type=\"submit\" value=\"{{ _('search') }}\" />\n> -    <span id=\"search-progress\" style=\"padding-left: 10px\"></span>\n> -  </form>\n> -  {% if search_performed %}\n> -    <h2>{{ _('Search Results') }}</h2>\n> -    {% if not search_results %}\n> -      <p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\\'ve selected enough categories.') }}</p>\n> -    {% endif %}\n> -  {% endif %}\n> -  <div id=\"search-results\">\n> -  {% if search_results %}\n> -    <ul>\n> -    {% for href, caption, context in search_results %}\n> -      <li><a href=\"{{ pathto(item.href) }}\">{{ caption }}</a>\n> -        <div class=\"context\">{{ context|e }}</div>\n> -      </li>\n> -    {% endfor %}\n> -    </ul>\n> -  {% endif %}\n> -  </div>\n> -{% endblock %}\n> diff --git a/Documentation/theme/static/css/theme.css b/Documentation/theme/static/css/theme.css\n> deleted file mode 100644\n> index a6d43195c018..000000000000\n> --- a/Documentation/theme/static/css/theme.css\n> +++ /dev/null\n> @@ -1,295 +0,0 @@\n> -/* SPDX-License-Identifier: CC-BY-SA-4.0 */\n> -\n> -html {\n> -       background-image: linear-gradient(to bottom right, #4895e1, #56c3ae);\n> -       background-size: cover;\n> -       background-repeat: no-repeat;\n> -       min-height: 100vh;\n> -}\n> -\n> -body {\n> -       color: rgb(0, 0, 0, 0.65);\n> -       font-family: Arial, sans-serif;\n> -       margin: 0px;\n> -}\n> -\n> -a {\n> -       color: unset;\n> -       font-weight: bold;\n> -       text-decoration: underline dotted;\n> -}\n> -\n> -a.headerlink {\n> -       color: rgba(0, 0, 0, 0.2);\n> -       font-size: 70%;\n> -       padding-left: 5px;\n> -       visibility: hidden;\n> -}\n> -\n> -a.toc-backref {\n> -       text-decoration: none;\n> -}\n> -\n> -h1:hover a.headerlink,\n> -h2:hover a.headerlink,\n> -h3:hover a.headerlink,\n> -h4:hover a.headerlink,\n> -h5:hover a.headerlink,\n> -h6:hover a.headerlink {\n> -       visibility: visible;\n> -}\n> -\n> -dt {\n> -       font-weight: bold;\n> -}\n> -\n> -.text-light {\n> -       color: rgba(255, 255, 255, 0.3);\n> -}\n> -\n> -div#navbar {\n> -       margin-top: 0px;\n> -}\n> -\n> -div.navbar-brand {\n> -       color: rgb(255, 255, 255, 1.0);\n> -       float: left;\n> -       font-size: 36px;\n> -       margin: 0px 24px 24px 24px;\n> -}\n> -\n> -div.navbar-logo {\n> -       float: left;\n> -       font-family: monospace;\n> -       font-size: 18px;\n> -       font-weight: bold;\n> -       white-space: pre;\n> -}\n> -\n> -div.navbar-name {\n> -       float: left;\n> -       color: rgb(255, 255, 255, 1.0);\n> -       font-size: 34px;\n> -       margin-top: 31px;\n> -       margin-left: 10px;\n> -       padding-top: 1px;\n> -}\n> -\n> -div.navbar {\n> -       float: right;\n> -}\n> -\n> -div.navbar p.caption {\n> -       height: 0px;\n> -       margin: 0px;\n> -       visibility: hidden;\n> -}\n> -\n> -div.navbar ul {\n> -       float: left;\n> -       font-size: 24px;\n> -       list-style: none;\n> -       margin-top: 42px;\n> -       margin-right: 20px;\n> -       padding-left: 0px;\n> -}\n> -\n> -div.navbar a {\n> -       font-weight: normal;\n> -       text-decoration: none;\n> -}\n> -\n> -div.navbar li {\n> -       float: left;\n> -       margin-left: 20px;\n> -       margin-right: 20px;\n> -       position: relative;\n> -}\n> -\n> -div.navbar li a {\n> -       color: rgb(255, 255, 255, 0.5);\n> -       position: relative;\n> -}\n> -\n> -div.navbar li a:before {\n> -       content: \"\";\n> -       position: absolute;\n> -       width: 100%;\n> -       height: 2px;\n> -       bottom: 0;\n> -       left: 0;\n> -       background-color: rgb(255, 255, 255, 0.5);\n> -       visibility: hidden;\n> -       transform: scaleX(0);\n> -       transition: all 0.3s ease-in-out 0s;\n> -}\n> -\n> -div.navbar li a:hover {\n> -       color: rgb(255, 255, 255, 1.0);\n> -}\n> -\n> -div.navbar li a:hover:before {\n> -       visibility: visible;\n> -       transform: scaleX(1);\n> -}\n> -\n> -div.navbar li.current a {\n> -       color: rgb(255, 255, 255, 1.0);\n> -}\n> -\n> -div.navbar li.current a:before {\n> -       visibility: visible;\n> -       transform: unset;\n> -       transition: unset;\n> -}\n> -\n> -div.navbar div.searchbox {\n> -       background-color: white;\n> -       float: right;\n> -       margin-right: 50px;\n> -       margin-top: 42px;\n> -}\n> -\n> -div.navbar input[type=text] {\n> -       border-width: 0;\n> -       height: 2em;\n> -       margin-left: 10px;\n> -       margin-right: 5px;\n> -}\n> -\n> -div.navbar input[type=submit] {\n> -       background-color: white;\n> -       background-image: url(../search.png);\n> -       background-repeat: no-repeat;\n> -       border-width: 0;\n> -       color: rgba(0, 0, 0, 0);\n> -       margin-right: 2px;\n> -       width: 20px;\n> -}\n> -\n> -div#frontpage {\n> -       clear: both;\n> -       padding-top: 50px;\n> -       margin-left: auto;\n> -       margin-right: auto;\n> -       width: 75%;\n> -       display: flex;\n> -       justify-content: space-between;\n> -}\n> -\n> -div#frontpage > div.block {\n> -       background-color: white;\n> -       border-radius: 5px;\n> -       box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 40px 0 rgba(0, 0, 0, 0.19);\n> -       color: rgb(0, 0, 0, 0.5);\n> -       font-size: 20px;\n> -       margin-bottom: 40px;\n> -       margin-right: 20px;\n> -       margin-left: 20px;\n> -       padding: 20px 60px 20px 60px;\n> -       text-align: center;\n> -       width: 50%;\n> -}\n> -\n> -div#frontpage > div.block h1 {\n> -       font-size: 64px;\n> -       padding-left: 20%;\n> -       padding-right: 20%;\n> -       text-align: center;\n> -       text-shadow: 4px 4px 5px;\n> -}\n> -\n> -div#content {\n> -       background-color: white;\n> -       clear: both;\n> -       padding-top: 50px;\n> -       padding-bottom: 50px;\n> -       margin-left: 0px;\n> -       margin-right: 0px;\n> -}\n> -\n> -div#content > div.block {\n> -       font-size: 16px;\n> -       margin-right: 0px;\n> -       margin-left: 0px;\n> -       max-width: 1280px;\n> -       padding: 0px 60px 0px 60px;\n> -       text-align: justify;\n> -}\n> -\n> -div#content > div.block h1 {\n> -       font-size: 40px;\n> -       margin-top: 0px;\n> -       text-align: left;\n> -}\n> -\n> -div#content > div.block > div.section {\n> -       max-width: 800px;\n> -}\n> -\n> -div.local.topic {\n> -       float: right;\n> -       background-color: #fcfcff;\n> -       border: 1px dotted #4896e0;\n> -       margin-left: 20px;\n> -       margin-right: 0px;\n> -       max-width: 15em;\n> -       padding: 10px 20px 10px 10px;\n> -       text-align: left;\n> -}\n> -\n> -div.local.topic ul {\n> -       padding-left: 20px;\n> -       margin-bottom: 5px;\n> -}\n> -\n> -div.local.topic > ul:before {\n> -       content: \"Contents\";\n> -       display: block;\n> -       font-weight: bold;\n> -       margin-bottom: 10px;\n> -}\n> -\n> -div.local.topic a {\n> -       font-weight: normal;\n> -       padding-left: 10px;\n> -       text-decoration: none;\n> -}\n> -\n> -div.highlight-shell > div.highlight > pre,\n> -pre.console {\n> -       background-color: #fcfcff;\n> -       border: 1px dotted #4896e0;\n> -       margin-left: 0em;\n> -       padding: 10px;\n> -       text-align: left;\n> -}\n> -\n> -div.highlight-default > div.highlight > pre,\n> -pre.diagram {\n> -       background-color: #fcfcff;\n> -       border: 1px dotted #4896e0;\n> -       font-size: 12px;\n> -       margin-left: 0em;\n> -       padding: 10px;\n> -       text-align: left;\n> -       width: 47em;\n> -}\n> -\n> -div#signature {\n> -       color: rgb(255, 255, 255, 0.5);\n> -       margin: 20px;\n> -       float: right;\n> -       font-size: 12px;\n> -}\n> -\n> -#licensing div.toctree-wrapper {\n> -       height: 0px;\n> -       margin: 0px;\n> -       padding: 0px;\n> -       visibility: hidden;\n> -}\n> -\n> -.documentation-nav {\n> -       display: none;\n> -}\n> diff --git a/Documentation/theme/static/custom.css b/Documentation/theme/static/custom.css\n> new file mode 100644\n> index 000000000000..0be62294490a\n> --- /dev/null\n> +++ b/Documentation/theme/static/custom.css\n> @@ -0,0 +1,5 @@\n> +/* SPDX-License-Identifier: CC-BY-SA-4.0 */\n> +/* Hide the documentation nav. It is only used on the website. */\n> +.documentation-nav {\n> +       display: none;\n> +}\n> diff --git a/Documentation/theme/static/libcamera-logo-text.svg b/Documentation/theme/static/libcamera-logo-text.svg\n> new file mode 100644\n> index 000000000000..e623e3219a90\n> --- /dev/null\n> +++ b/Documentation/theme/static/libcamera-logo-text.svg\n> @@ -0,0 +1,223 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"76.987656mm\"\n> +   height=\"27.246868mm\"\n> +   viewBox=\"0 0 76.987653 27.246868\"\n> +   version=\"1.1\"\n> +   id=\"svg885\"\n> +   inkscape:version=\"1.2.2 (b0a8486541, 2022-12-01)\"\n> +   sodipodi:docname=\"libcamera-logo-text.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\"\n> +   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n> +   xmlns:cc=\"http://creativecommons.org/ns#\"\n> +   xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n> +  <defs\n> +     id=\"defs879\">\n> +    <linearGradient\n> +       inkscape:collect=\"always\"\n> +       id=\"libcamera-gradient\">\n> +      <stop\n> +         style=\"stop-color:#4a9cd8;stop-opacity:1;\"\n> +         offset=\"0\"\n> +         id=\"stop837\" />\n> +      <stop\n> +         style=\"stop-color:#4da5ce;stop-opacity:1;\"\n> +         offset=\"1\"\n> +         id=\"stop839\" />\n> +    </linearGradient>\n> +    <linearGradient\n> +       inkscape:collect=\"always\"\n> +       xlink:href=\"#libcamera-gradient\"\n> +       id=\"linearGradient843\"\n> +       x1=\"36.235832\"\n> +       y1=\"124.7846\"\n> +       x2=\"169.38322\"\n> +       y2=\"124.7846\"\n> +       gradientUnits=\"userSpaceOnUse\"\n> +       gradientTransform=\"matrix(0.5782953,0,0,0.34895428,44.509503,81.842882)\" />\n> +  </defs>\n> +  <sodipodi:namedview\n> +     id=\"base\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pageshadow=\"2\"\n> +     inkscape:zoom=\"2.8\"\n> +     inkscape:cx=\"101.07143\"\n> +     inkscape:cy=\"113.03571\"\n> +     inkscape:document-units=\"mm\"\n> +     inkscape:current-layer=\"layer2\"\n> +     showgrid=\"false\"\n> +     inkscape:window-width=\"2560\"\n> +     inkscape:window-height=\"1531\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"0\"\n> +     inkscape:window-maximized=\"1\"\n> +     fit-margin-top=\"0\"\n> +     fit-margin-left=\"0\"\n> +     fit-margin-right=\"0\"\n> +     fit-margin-bottom=\"0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\" />\n> +  <metadata\n> +     id=\"metadata882\">\n> +    <rdf:RDF>\n> +      <cc:Work\n> +         rdf:about=\"\">\n> +        <dc:format>image/svg+xml</dc:format>\n> +        <dc:type\n> +           rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n> +        <dc:title />\n> +      </cc:Work>\n> +    </rdf:RDF>\n> +  </metadata>\n> +  <g\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer2\"\n> +     inkscape:label=\"background\"\n> +     transform=\"translate(-65.469925,-111.76357)\">\n> +    <rect\n> +       style=\"opacity:1;fill:url(#linearGradient843);fill-opacity:1;stroke:#1a1a1a;stroke-width:0.0377345;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers\"\n> +       id=\"rect824\"\n> +       width=\"76.949921\"\n> +       height=\"27.209133\"\n> +       x=\"65.488792\"\n> +       y=\"111.78244\" />\n> +  </g>\n> +  <g\n> +     inkscape:label=\"LogoLayer\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\"\n> +     transform=\"translate(-65.469925,-111.76357)\">\n> +    <g\n> +       aria-label=\"   _ +-/ \\-+ | (o) | +-----+\"\n> +       style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583\"\n> +       id=\"text1432\">\n> +      <path\n> +         d=\"m 85.263307,117.54782 v 0.39275 h -2.548682 v -0.39275 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path928\" />\n> +      <path\n> +         d=\"m 76.587868,119.76991 v 0.88884 h 0.888834 v 0.49196 h -0.888834 v 0.89296 h -0.489893 v -0.89296 h -0.892969 v -0.49196 h 0.892969 v -0.88884 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path930\" />\n> +      <path\n> +         d=\"m 78.239446,120.71456 h 1.304313 v 0.60151 h -1.304313 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path932\" />\n> +      <path\n> +         d=\"m 82.024228,119.14773 h 0.45682 l -1.624707,3.47885 h -0.45682 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path934\" />\n> +      <path\n> +         d=\"m 85.953704,119.14773 1.624707,3.47885 h -0.460954 l -1.624707,-3.47885 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path936\" />\n> +      <path\n> +         d=\"m 88.434172,120.71456 h 1.304313 v 0.60151 h -1.304313 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path938\" />\n> +      <path\n> +         d=\"m 91.879957,119.76991 v 0.88884 h 0.888835 v 0.49196 h -0.888835 v 0.89296 h -0.489892 v -0.89296 h -0.892969 v -0.49196 h 0.892969 v -0.88884 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path940\" />\n> +      <path\n> +         d=\"m 76.575465,124.29057 v 4.23333 h -0.469222 v -4.23333 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path942\" />\n> +      <path\n> +         d=\"m 82.075904,124.3133 q -0.272851,0.49403 -0.405143,0.95705 -0.132291,0.46302 -0.132291,0.92604 0,0.45889 0.132291,0.92604 0.132292,0.46509 0.405143,0.96119 h -0.471289 q -0.328662,-0.4775 -0.487825,-0.94052 -0.159163,-0.46508 -0.159163,-0.94671 0,-0.47956 0.159163,-0.94464 0.16123,-0.46716 0.487825,-0.93845 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path944\" />\n> +      <path\n> +         d=\"m 83.987933,125.64655 q -0.217041,0 -0.341065,0.19224 -0.124023,0.19017 -0.124023,0.53123 0,0.34107 0.124023,0.53331 0.124024,0.19016 0.341065,0.19016 0.219108,0 0.343131,-0.19016 0.124024,-0.19224 0.124024,-0.53331 0,-0.34106 -0.124024,-0.53123 -0.124023,-0.19224 -0.343131,-0.19224 z m -1.070736,0.72347 q 0,-0.56017 0.289388,-0.88676 0.291455,-0.32866 0.781348,-0.32866 0.491959,0 0.781347,0.32866 0.291455,0.32659 0.291455,0.88676 0,0.56018 -0.291455,0.88884 -0.289388,0.32659 -0.781347,0.32659 -0.489893,0 -0.781348,-0.32659 -0.289388,-0.32866 -0.289388,-0.88884 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path946\" />\n> +      <path\n> +         d=\"m 85.902027,124.3133 h 0.471289 q 0.326595,0.47129 0.485759,0.93845 0.16123,0.46508 0.16123,0.94464 0,0.48163 -0.159163,0.94671 -0.159164,0.46302 -0.487826,0.94052 h -0.471289 q 0.272852,-0.4961 0.405143,-0.96119 0.132292,-0.46715 0.132292,-0.92604 0,-0.46302 -0.132292,-0.92604 -0.132291,-0.46302 -0.405143,-0.95705 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path948\" />\n> +      <path\n> +         d=\"m 91.867555,124.29057 v 4.23333 h -0.469222 v -4.23333 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path950\" />\n> +      <path\n> +         d=\"m 76.587868,130.35324 v 0.88884 h 0.888834 v 0.49196 h -0.888834 v 0.89297 h -0.489893 v -0.89297 h -0.892969 v -0.49196 h 0.892969 v -0.88884 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path952\" />\n> +      <path\n> +         d=\"m 78.239446,131.29789 h 1.304313 v 0.60151 h -1.304313 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path954\" />\n> +      <path\n> +         d=\"m 80.788128,131.29789 h 1.304313 v 0.60151 h -1.304313 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path956\" />\n> +      <path\n> +         d=\"m 83.33681,131.29789 h 1.304313 v 0.60151 H 83.33681 Z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path958\" />\n> +      <path\n> +         d=\"m 85.885491,131.29789 h 1.304313 v 0.60151 h -1.304313 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path960\" />\n> +      <path\n> +         d=\"m 88.434172,131.29789 h 1.304313 v 0.60151 h -1.304313 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path962\" />\n> +      <path\n> +         d=\"m 91.879957,130.35324 v 0.88884 h 0.888835 v 0.49196 h -0.888835 v 0.89297 h -0.489892 v -0.89297 h -0.892969 v -0.49196 h 0.892969 v -0.88884 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:monospace;-inkscape-font-specification:'monospace, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:0.264583\"\n> +         id=\"path964\" />\n> +    </g>\n> +    <g\n> +       aria-label=\"libcamera\"\n> +       style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1.25;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583\"\n> +       id=\"text1442\">\n> +      <path\n> +         d=\"m 97.705568,129.92384 q -0.626534,0 -0.948267,-0.36407 -0.313267,-0.37253 -0.313267,-1.07526 v -4.60587 h 0.6858 v 4.55507 q 0,0.90593 0.719667,0.90593 0.211667,0 0.381,-0.0508 l -0.01693,0.57573 q -0.262467,0.0593 -0.508,0.0593 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:0.352941\"\n> +         id=\"path909\" />\n> +      <path\n> +         d=\"m 98.865497,124.70837 v -0.77046 h 0.846666 v 0.77046 z m 0.08467,5.13927 v -4.1148 h 0.685799 v 4.1148 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:0.352941\"\n> +         id=\"path911\" />\n> +      <path\n> +         d=\"m 102.99722,129.92384 q -0.49107,0 -0.8636,-0.22013 -0.36407,-0.22014 -0.55034,-0.60114 v 0.74507 h -0.66886 v -5.969 h 0.6858 v 2.5654 q 0.1778,-0.36407 0.55033,-0.57573 0.37253,-0.21167 0.84667,-0.21167 0.55033,0 0.95673,0.26247 0.41487,0.254 0.635,0.7366 0.2286,0.47413 0.2286,1.13453 0,0.65193 -0.2286,1.13453 -0.22013,0.47414 -0.635,0.7366 -0.4064,0.26247 -0.95673,0.26247 z m -0.14394,-0.55033 q 0.57574,0 0.92287,-0.4064 0.34713,-0.41487 0.34713,-1.17687 0,-0.77047 -0.34713,-1.17687 -0.34713,-0.4064 -0.92287,-0.4064 -0.57573,0 -0.92286,0.4064 -0.34714,0.4064 -0.34714,1.17687 0,0.762 0.34714,1.17687 0.34713,0.4064 0.92286,0.4064 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:0.352941\"\n> +         id=\"path913\" />\n> +      <path\n> +         d=\"m 107.5946,129.92384 q -0.61806,0 -1.0668,-0.26247 -0.44873,-0.27093 -0.69426,-0.75353 -0.23707,-0.49107 -0.23707,-1.143 0,-0.98213 0.5334,-1.54093 0.5334,-0.56727 1.46473,-0.56727 0.381,0 0.75354,0.13547 0.37253,0.13546 0.61806,0.381 l -0.23706,0.49953 q -0.24554,-0.23707 -0.54187,-0.34713 -0.28787,-0.11007 -0.55033,-0.11007 -0.64347,0 -0.9906,0.4064 -0.34714,0.39793 -0.34714,1.15147 0,0.7366 0.34714,1.1684 0.34713,0.42333 0.9906,0.42333 0.26246,0 0.55033,-0.11007 0.29633,-0.11006 0.54187,-0.3556 l 0.23706,0.49954 q -0.24553,0.24553 -0.62653,0.38946 -0.37253,0.13547 -0.74507,0.13547 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff\"\n> +         id=\"path915\" />\n> +      <path\n> +         d=\"m 111.03205,129.92384 q -0.42333,0 -0.762,-0.16087 -0.3302,-0.16933 -0.52493,-0.4572 -0.19474,-0.28786 -0.19474,-0.64346 0,-0.44874 0.2286,-0.7112 0.23707,-0.26247 0.77047,-0.37254 0.54187,-0.11853 1.4732,-0.11853 h 0.27093 v -0.26247 q 0,-0.52493 -0.22013,-0.75353 -0.21167,-0.23707 -0.6858,-0.23707 -0.37253,0 -0.71967,0.11007 -0.34713,0.1016 -0.7112,0.33867 l -0.23706,-0.49954 q 0.32173,-0.2286 0.77893,-0.36406 0.46567,-0.13547 0.889,-0.13547 0.79587,0 1.17687,0.38947 0.38946,0.38946 0.38946,1.21073 v 2.5908 h -0.64346 v -0.7112 q -0.16087,0.36407 -0.49954,0.57573 -0.3302,0.21167 -0.77893,0.21167 z m 0.11007,-0.51647 q 0.508,0 0.82973,-0.34713 0.32173,-0.3556 0.32173,-0.89747 v -0.254 h -0.26246 q -0.6858,0 -1.08374,0.0677 -0.38946,0.0593 -0.55033,0.22013 -0.1524,0.1524 -0.1524,0.42333 0,0.34714 0.23707,0.56727 0.24553,0.22013 0.6604,0.22013 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff\"\n> +         id=\"path917\" />\n> +      <path\n> +         d=\"m 114.24091,129.84764 v -4.1148 h 0.66886 v 0.69427 q 0.18627,-0.37254 0.51647,-0.56727 0.3302,-0.2032 0.77047,-0.2032 0.9652,0 1.23613,0.8382 0.18627,-0.38947 0.55033,-0.6096 0.36407,-0.2286 0.8382,-0.2286 1.3716,0 1.3716,1.6256 v 2.5654 h -0.6858 v -2.53153 q 0,-0.56727 -0.2032,-0.82974 -0.19473,-0.27093 -0.65193,-0.27093 -0.49953,0 -0.79587,0.3556 -0.29633,0.3556 -0.29633,0.94827 v 2.32833 h -0.6858 v -2.53153 q 0,-0.56727 -0.2032,-0.82974 -0.19473,-0.27093 -0.65193,-0.27093 -0.508,0 -0.80434,0.3556 -0.28786,0.3556 -0.28786,0.94827 v 2.32833 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff\"\n> +         id=\"path919\" />\n> +      <path\n> +         d=\"m 123.32563,129.92384 q -0.97367,0 -1.54093,-0.56727 -0.56727,-0.57573 -0.56727,-1.55786 0,-0.635 0.254,-1.1176 0.254,-0.49107 0.69427,-0.75354 0.44873,-0.27093 1.03293,-0.27093 0.8382,0 1.31233,0.54187 0.47414,0.5334 0.47414,1.4732 v 0.26246 h -3.0988 q 0.0339,0.70274 0.4064,1.07527 0.37253,0.36407 1.03293,0.36407 0.37253,0 0.7112,-0.11007 0.33867,-0.11853 0.64347,-0.381 l 0.23706,0.4826 q -0.2794,0.26247 -0.7112,0.41487 -0.4318,0.14393 -0.88053,0.14393 z m -0.11007,-3.7592 q -0.5842,0 -0.92286,0.36407 -0.33867,0.36406 -0.39794,0.95673 h 2.49767 q -0.0254,-0.62653 -0.3302,-0.97367 -0.29633,-0.34713 -0.84667,-0.34713 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff\"\n> +         id=\"path921\" />\n> +      <path\n> +         d=\"m 125.97569,129.84764 v -4.1148 h 0.66887 v 0.7366 q 0.3302,-0.74507 1.35467,-0.82127 l 0.24553,-0.0254 0.0508,0.59267 -0.4318,0.0508 q -0.5842,0.0508 -0.889,0.37253 -0.3048,0.31327 -0.3048,0.8636 v 2.34527 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff\"\n> +         id=\"path923\" />\n> +      <path\n> +         d=\"m 130.25982,129.92384 q -0.42334,0 -0.762,-0.16087 -0.3302,-0.16933 -0.52494,-0.4572 -0.19473,-0.28786 -0.19473,-0.64346 0,-0.44874 0.2286,-0.7112 0.23707,-0.26247 0.77047,-0.37254 0.54186,-0.11853 1.4732,-0.11853 h 0.27093 v -0.26247 q 0,-0.52493 -0.22013,-0.75353 -0.21167,-0.23707 -0.6858,-0.23707 -0.37254,0 -0.71967,0.11007 -0.34713,0.1016 -0.7112,0.33867 l -0.23707,-0.49954 q 0.32174,-0.2286 0.77894,-0.36406 0.46566,-0.13547 0.889,-0.13547 0.79586,0 1.17686,0.38947 0.38947,0.38946 0.38947,1.21073 v 2.5908 h -0.64347 v -0.7112 q -0.16086,0.36407 -0.49953,0.57573 -0.3302,0.21167 -0.77893,0.21167 z m 0.11006,-0.51647 q 0.508,0 0.82974,-0.34713 0.32173,-0.3556 0.32173,-0.89747 v -0.254 h -0.26247 q -0.6858,0 -1.08373,0.0677 -0.38947,0.0593 -0.55033,0.22013 -0.1524,0.1524 -0.1524,0.42333 0,0.34714 0.23706,0.56727 0.24554,0.22013 0.6604,0.22013 z\"\n> +         style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Nunito Sans';-inkscape-font-specification:'Nunito Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff\"\n> +         id=\"path925\" />\n> +    </g>\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/theme/static/search.png b/Documentation/theme/static/search.png\n> deleted file mode 100644\n> index a93c40eb08106554488deaed910aba0f5aef5ec5..0000000000000000000000000000000000000000\n> GIT binary patch\n> literal 0\n> HcmV?d00001\n> \n> literal 482\n> zcmV<80UiE{P)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00009a7bBm000ie\n> z000ie0hKEb8vp<Slu1NER49>S{Qv(y11W$BjsN}6-{)Vx|M`d06c#vZ@BJ4Ihb|v`\n> z{Q4gQ11Af!uc~y5qrR#TFPa8Mh?6FtzL~%Ctf7Qpw2q<#567){pJ$)D^X1p?EfEg3\n> za$+bt{{R1f{K;#k=A~KNPW}D&?>`KD`0>kj!7kC>HSfRw{Eq|}{{R0UwEB?Fj4jBj\n> zA>iq!ZyasQJC9yP7Gz>zU^w*fRiw586C)#<bESAW9Tmh6KYooKN}qoImf+#Q8YU7v\n> zoF9JtLf4=mz<u-WC#)K-zxk-Z&yB7jNJDnvrTZU${zg-M;^~_cPv3@W$)Rf~w$Nl|\n> zWb|2a;MLb3aEbFT-iNL^%+1QID8PfP0U8e%UcUEQzW>wD-<~Q`l02L@-hA47{{;&Z\n> z)31O31UcCD$2#ka3!-RXU|{(0<Ja`FxA)wC@!`iWMFE}wbr~Z`A=?GJ-~IR{%Ef*#\n> z&Q(){4@Co3aOU|t=f!(I{rV%x!*M9iRYiywJ@KId6G@@%QBFLpEYH9E$l89Iunm|1\n> Y03N>L+`-G70ssI207*qoM6N<$g81y{PXGV_\n> \n> diff --git a/Documentation/theme/theme.conf b/Documentation/theme/theme.conf\n> deleted file mode 100644\n> index f2ab39c33c5b..000000000000\n> --- a/Documentation/theme/theme.conf\n> +++ /dev/null\n> @@ -1,7 +0,0 @@\n> -# SPDX-License-Identifier: CC-BY-SA-4.0\n> -\n> -[theme]\n> -inherit = basic\n> -stylesheet = css/theme.css\n> -\n> -[options]\n> diff --git a/README.rst b/README.rst\n> index 7c8bc6db6712..56b2e0956e36 100644\n> --- a/README.rst\n> +++ b/README.rst\n> @@ -67,8 +67,8 @@ for device hotplug enumeration: [optional]\n>          libudev-dev\n>  \n>  for documentation: [optional]\n> -        doxygen graphviz python3-sphinx python3-sphinxcontrib.doxylink (>= 1.6.1)\n> -        texlive-latex-extra\n> +        doxygen graphviz python3-sphinx python3-sphinx-book-theme\n> +        python3-sphinxcontrib.doxylink (>= 1.6.1) texlive-latex-extra\n>  \n>  for gstreamer: [optional]\n>          libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev\n> -- \n> Regards,\n> \n> Laurent Pinchart\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id D956FC328C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Sep 2025 17:15:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C15506936F;\n\tThu, 18 Sep 2025 19:15:49 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2920362C3B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Sep 2025 19:15:48 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:ace3:d2c2:5eff:9cc5])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 4A248842;\n\tThu, 18 Sep 2025 19:14:28 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"CoV+2+z1\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1758215668;\n\tbh=0B3t/BRFRJY4UtaXEBHlpXFyz7OZ+zd0hf/iuyrmpEo=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=CoV+2+z1tuRATGIY0WbcLAxbRjrejYdFpdcC4UoCaaoGl9UxITeO/ssnz48Nznd7g\n\tmyn/EIVa0W/JA6mfank6yEVgDh6378xamSr0fgBxpkVntzBEvG9c2hsRXjfDkl2e9r\n\tIRNRXpUIXfbPYcVRo+9fz5ieMJkAWhblzq7Ra8Dc=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250917201742.16406-5-laurent.pinchart@ideasonboard.com>","References":"<20250917201742.16406-1-laurent.pinchart@ideasonboard.com>\n\t<20250917201742.16406-5-laurent.pinchart@ideasonboard.com>","Subject":"Re: [PATCH v3 04/10] Documentation: Use the sphinx book theme","From":"Stefan Klug <stefan.klug@ideasonboard.com>","Cc":"","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Thu, 18 Sep 2025 19:15:45 +0200","Message-ID":"<175821574517.17312.2628552780837615900@localhost>","User-Agent":"alot/0.12.dev8+g2c003385c862.d20250602","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]