diff --git a/docs/README.md b/docs/README.md index b1090bd9..db2716e8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -33,10 +33,51 @@ Example: that is not visually indented ``` -## Read the Docs theme skin +## HTML theme -The HTML output keeps the existing `basicstrap` Sphinx theme, then applies the -ZoiteChat main-site skin from `_static/css/zoitechat-docs.css`. +The `zoitechat` theme inherits Sphinx's built-in `basic` theme. It uses the +same compact layout, blue navigation, and system fonts as zoitechat.org. +Appearance starts in System mode on each page. Light and Dark are available +for the current page; no cookies or browser storage are used. -Brand navigation links are set in `conf.py` through `html_context`, and the -header logo uses `_static/zoitechat-logo.svg`. +The theme's templates are in `_theme/zoitechat/`. Its readable CSS and +JavaScript are in `_static/css/zoitechat-docs.css` and +`_static/js/zoitechat-docs.js`. No minification, JavaScript package manager, +external fonts, or CDN assets are required. + +Navigation URLs, including `zoite_atlas_url`, are configured through +`html_context` in `conf.py`. The logo +is `_static/zoitechat-logo.svg`. Standard Sphinx search, indexes, source +links, anchors, translations, and previous/next links remain available. +The HTML output also works as locally installed documentation; project-site +links only access the network when clicked. + +Build from the repository root: + +```sh +sphinx-build -b html docs docs/_build/html +``` + +Use a clean output directory when switching themes, so stale Basicstrap +assets from an earlier build are not included in a package. + +## Debian packaging + +The active theme does not use the bundled Basicstrap, Bootstrap, jQuery, +jQuery Cookie, Font Awesome, or icon fonts. Its font stack includes DejaVu +Sans and DejaVu Sans Mono; no font files are bundled by the theme. + +Packagers may exclude `docs/_theme/basicstrap/` from the source package. +The default theme continues to build without that directory. No pre-minified +third-party assets need to be added or rebuilt for this theme. + +Build with the distribution's `python3-sphinx`. After installing the HTML +into the package staging directory, use `dh_sphinxdoc` (or `dh --with +sphinxdoc`) to replace Sphinx's standard JavaScript files with system +symlinks. Include `${sphinxdoc:Depends}` in the package dependencies and +`${sphinxdoc:Built-Using}` where required for generated assets. The custom +`zoitechat-docs.js` remains a small, readable project source file. + +A built-in theme is still selectable with `-D html_theme=classic` if a +packager needs a different layout. The old RST content has existing build +diagnostics; changing the theme does not suppress or alter them. diff --git a/docs/_static/css/zoitechat-docs.css b/docs/_static/css/zoitechat-docs.css index d6350ccb..b6b1abb9 100644 --- a/docs/_static/css/zoitechat-docs.css +++ b/docs/_static/css/zoitechat-docs.css @@ -1,2430 +1,804 @@ -/* ZoiteChat site skin: editorial GTK/IRC manual, no glass cards, no AI-gradient house style. */ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* Keep the docs close to the desktop client and the main project's website. */ :root { color-scheme: light; - --paper: #eee5d3; - --paper-warm: #f8f1e4; - --paper-cool: #e3e8df; - --ink: #17130e; - --ink-soft: #3f382e; - --muted: #665d50; - --quiet: #877b6b; - --rule: #17130e; - --rule-soft: rgba(23, 19, 14, 0.18); - --rule-mid: rgba(23, 19, 14, 0.34); - --panel: #fff8ea; - --panel-alt: #ded3bd; - --panel-dark: #211b16; - --accent: #b93f18; - --accent-dark: #7c260e; - --accent-soft: rgba(185, 63, 24, 0.11); - --green: #285f4f; - --blue: #234a68; - --warning: #a66a00; - --success: #27634a; - --shadow: 8px 8px 0 rgba(23, 19, 14, 0.88); - --shadow-soft: 0 18px 40px rgba(23, 19, 14, 0.12); - --radius: 0; - --radius-sm: 0; - --shell: 1180px; - --font-body: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - --font-mono: "IBM Plex Mono", "JetBrains Mono", "Cascadia Code", "SFMono-Regular", Consolas, monospace; - --font-display: Georgia, "Times New Roman", serif; + --page: #ffffff; + --panel: #f1f2f3; + --text: #25282c; + --muted: #58616b; + --line: #bdc3c9; + --soft-line: #dce0e4; + --blue: #215a9e; + --link: #174f92; + --selection: #e6effa; + --code: #f2f4f6; + --comment: #58616b; + --string: #236741; + --number: #7842ab; + --font: system-ui, -apple-system, "Segoe UI", "DejaVu Sans", sans-serif; + --mono: Consolas, "DejaVu Sans Mono", "Liberation Mono", monospace; } -*, -*::before, -*::after { +html[data-theme="dark"] { + color-scheme: dark; + --page: #191c1f; + --panel: #25292d; + --text: #eef0f2; + --muted: #b2bbc4; + --line: #50575e; + --soft-line: #353c43; + --blue: #2865a8; + --link: #8dc0ff; + --selection: #233951; + --code: #111518; + --comment: #b2bbc4; + --string: #92d5ab; + --number: #dfacff; +} + +@media (prefers-color-scheme: dark) { + :root:not([data-theme]) { + color-scheme: dark; + --page: #191c1f; + --panel: #25292d; + --text: #eef0f2; + --muted: #b2bbc4; + --line: #50575e; + --soft-line: #353c43; + --blue: #2865a8; + --link: #8dc0ff; + --selection: #233951; + --code: #111518; + --comment: #b2bbc4; + --string: #92d5ab; + --number: #dfacff; + } +} + +* { box-sizing: border-box; } html { - scroll-behavior: smooth; - background: var(--paper); + scroll-padding-top: 16px; } body { - min-height: 100vh; margin: 0; - color: var(--ink); - font-family: var(--font-body); - line-height: 1.58; - background: - linear-gradient(90deg, rgba(23, 19, 14, 0.05) 1px, transparent 1px) 0 0 / 68px 68px, - linear-gradient(180deg, rgba(23, 19, 14, 0.04) 1px, transparent 1px) 0 0 / 68px 68px, - radial-gradient(circle at 11% 18%, rgba(185, 63, 24, 0.16), transparent 22rem), - radial-gradient(circle at 86% 4%, rgba(40, 95, 79, 0.14), transparent 26rem), - linear-gradient(180deg, #f4ecdc 0%, #e8ddc9 58%, #efe6d5 100%); + padding: 0; + background: var(--page); + color: var(--text); + font: 14px/1.7 var(--font); } -body::before { - position: fixed; - inset: 0; - z-index: -1; - pointer-events: none; - content: ""; - background: - repeating-linear-gradient(90deg, transparent 0 17px, rgba(23, 19, 14, 0.035) 17px 18px), - repeating-linear-gradient(0deg, transparent 0 5px, rgba(255, 255, 255, 0.26) 5px 6px); - mix-blend-mode: multiply; +a, +a:visited { + color: var(--link); + text-underline-offset: 3px; } -img { - display: block; - max-width: 100%; -} - -a { - color: inherit; - text-decoration: none; -} - -::selection { - background: var(--accent); - color: #fff8ea; -} - -button, -input, -textarea, -select { - font: inherit; +a:hover { + text-decoration: underline; } :focus-visible { - outline: 3px solid var(--accent); + outline: 3px solid var(--link); outline-offset: 3px; } -.skip-link { - position: absolute; - top: -10rem; - left: 1rem; - z-index: 3000; - padding: 0.8rem 1rem; - border: 2px solid var(--rule); - background: var(--panel); - color: var(--ink); - font-weight: 900; - box-shadow: 4px 4px 0 var(--rule); -} - -.skip-link:focus { - top: 1rem; -} - -.shell { - width: min(calc(100% - 2rem), var(--shell)); - margin-inline: auto; -} - -.narrow { - max-width: 760px; -} - -.sr-only { - position: absolute; - inline-size: 1px; - block-size: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - white-space: nowrap; - border: 0; - clip-path: inset(50%); -} - [hidden] { display: none !important; } -/* Header: more package-manager toolbar than SaaS navbar. */ +button, +input, +select { + font: inherit; +} + +button, +summary, +select { + touch-action: manipulation; +} + +button, +summary { + cursor: pointer; +} + +img { + max-width: 100%; + height: auto; +} + +h1, +h2, +h3, +h4 { + color: var(--text); + font-family: var(--font); + font-weight: 600; + line-height: 1.35; +} + +h1 { + margin: 0 0 20px; + font-size: 28px; + letter-spacing: -0.5px; +} + +h2 { + margin: 28px 0 12px; + font-size: 21px; +} + +h3 { + margin: 22px 0 10px; + font-size: 17px; +} + +h4 { + font-size: 15px; +} + +p { + margin: 0 0 15px; +} + +input, +select, +button { + min-height: 34px; + border: 1px solid var(--line); + border-radius: 2px; + padding: 6px 9px; + background: var(--page); + color: var(--text); +} + +input[type="submit"], +button { + background: var(--panel); +} + +input[type="submit"]:hover, +button:hover { + background: var(--selection); +} + +.skip-link { + position: absolute; + top: -100px; + left: 15px; + z-index: 10; + padding: 10px; + background: var(--page); +} + +.skip-link:focus { + top: 10px; +} + +.site-header, +.docs-layout, +.site-footer { + width: min(1200px, calc(100% - 48px)); + margin-inline: auto; +} + .site-header { - position: sticky; - top: 0; - z-index: 2000; - border-bottom: 3px solid var(--rule); - background: rgba(238, 229, 211, 0.94); - -webkit-backdrop-filter: blur(8px); - backdrop-filter: blur(8px); + padding-top: 32px; } -.site-header::before { - display: block; - block-size: 0.55rem; - content: ""; - border-bottom: 2px solid var(--rule); - background: - repeating-linear-gradient(90deg, var(--rule) 0 0.7rem, transparent 0.7rem 1.2rem), - var(--accent); -} - -.nav-shell { - min-height: 76px; +.topbar { display: flex; align-items: center; justify-content: space-between; - gap: 1.4rem; + gap: 20px; + padding-bottom: 16px; } .brand { - display: inline-grid; - grid-template-columns: 3.25rem auto; + display: flex; align-items: center; - gap: 0.75rem; - min-width: max-content; + gap: 12px; + color: var(--text) !important; + text-decoration: none; } -.brand-logo, -.footer-logo { - inline-size: 3rem; - block-size: auto; - padding: 0.18rem; - border: 2px solid var(--rule); - background: var(--paper-warm); - box-shadow: 4px 4px 0 var(--rule); -} - -.brand-text, -.footer-brand { - position: relative; - display: inline-block; - color: var(--ink); - font-family: var(--font-mono); - font-size: 1.05rem; - font-weight: 900; - letter-spacing: -0.04em; - line-height: 1; - text-transform: lowercase; -} - -.brand-text::after, -.footer-brand::after { +.brand img { display: block; - width: 100%; - height: 0.38rem; - margin-top: 0.22rem; - content: ""; - background: repeating-linear-gradient(90deg, var(--accent) 0 0.9rem, transparent 0.9rem 1.25rem); + width: 38px; + height: 42px; +} + +.brand strong { + font-size: 28px; + font-weight: 650; + letter-spacing: -0.8px; +} + +.appearance { + display: flex; + align-items: center; + gap: 10px; + color: var(--muted); + font-size: 11px; +} + +.appearance select { + min-height: 30px; + padding: 3px 7px; + font-size: 12px; } .site-nav { display: flex; - align-items: center; - justify-content: flex-end; - gap: 0; flex-wrap: wrap; - border-left: 2px solid var(--rule); - font-family: var(--font-mono); - font-size: 0.84rem; + align-items: stretch; + border: 1px solid var(--line); + background: var(--panel); } -.site-nav a { - min-height: 2.65rem; - display: inline-flex; +.site-nav > a, +.support-menu > summary { + display: flex; align-items: center; - padding: 0.48rem 0.72rem; - border-block: 2px solid transparent; - border-right: 2px solid var(--rule); - color: var(--ink); - font-weight: 800; - background: rgba(255, 248, 234, 0.44); + min-height: 36px; + padding: 6px 15px; + color: var(--text); + font-size: 13px; + text-decoration: none; } -.site-nav a::before { - margin-right: 0.28rem; - color: var(--accent); - content: "//"; - font-weight: 900; +.site-nav > a:hover, +.support-menu > summary:hover { + background: var(--selection); + color: var(--link); } -.site-nav a[aria-current="page"] { - border-block-color: var(--rule); - background: var(--panel-dark); - color: var(--paper-warm); - box-shadow: inset 0 -0.3rem 0 var(--accent); +.site-nav > a.selected { + background: var(--blue); + color: #ffffff; } -.site-nav a[aria-current="page"]::before { - color: #d19b25; -} - -.site-nav a:hover, -.site-nav a:focus-visible { - border-block-color: var(--rule); - background: var(--panel-dark); - color: var(--paper-warm); - outline: none; -} - -.nav-menu { +.support-menu { position: relative; } -.nav-menu summary { - min-height: 2.65rem; - display: inline-flex; - align-items: center; - padding: 0.48rem 0.72rem; - border-block: 2px solid transparent; - border-right: 2px solid var(--rule); - color: var(--ink); - font-weight: 800; - cursor: pointer; +.support-menu > summary { list-style: none; - background: rgba(255, 248, 234, 0.44); } -.nav-menu summary::-webkit-details-marker { +.support-menu > summary::after { + content: "⌄"; + margin-left: 8px; +} + +.support-menu > summary::-webkit-details-marker { display: none; } -.nav-menu summary::before { - margin-right: 0.28rem; - color: var(--accent); - content: "//"; - font-weight: 900; -} - -.nav-menu summary::after { - margin-left: 0.42rem; - color: var(--quiet); - content: "▾"; - font-size: 0.74rem; -} - -.nav-menu[open] summary, -.nav-menu summary:hover, -.nav-menu summary:focus-visible { - border-block-color: var(--rule); - background: var(--panel-dark); - color: var(--paper-warm); - outline: none; -} - -.nav-menu[open] summary::after { - color: var(--paper-warm); - content: "▴"; -} - -.nav-menu-panel { - position: absolute; - top: calc(100% + 0.45rem); - right: 0; - z-index: 2100; - width: min(19rem, calc(100vw - 2rem)); - border: 2px solid var(--rule); - background: var(--panel); - box-shadow: 6px 6px 0 var(--rule); -} - -.site-nav .nav-menu-panel a { - min-height: auto; - display: block; - padding: 0.85rem 0.95rem; - border: 0; - border-bottom: 2px solid var(--rule); - background: var(--panel); -} - -.site-nav .nav-menu-panel a:last-child { - border-bottom: 0; -} - -.site-nav .nav-menu-panel a::before { - content: none; -} - -.nav-menu-panel strong, -.nav-menu-panel span { - display: block; -} - -.nav-menu-panel strong { - color: var(--ink); - font-size: 0.9rem; -} - -.nav-menu-panel span { - margin-top: 0.2rem; - color: var(--quiet); - font-size: 0.76rem; - line-height: 1.35; -} - -.site-nav .nav-menu-panel a:hover, -.site-nav .nav-menu-panel a:focus-visible { - background: var(--panel-dark); -} - -.site-nav .nav-menu-panel a:hover strong, -.site-nav .nav-menu-panel a:focus-visible strong, -.site-nav .nav-menu-panel a:hover span, -.site-nav .nav-menu-panel a:focus-visible span { - color: var(--paper-warm); -} - -/* Shared type */ -.eyebrow, -.pill-label, -.release-kind, -.mini-badge, -.release-meta, -.addon-path, -.addon-meta-row, -.footer-meta { - font-family: var(--font-mono); -} - -.eyebrow { - display: inline-flex; - align-items: center; - gap: 0.45rem; - padding: 0.34rem 0.58rem; - border: 2px solid var(--rule); - background: var(--panel-dark); - color: var(--paper-warm); - font-size: 0.75rem; - font-weight: 900; - letter-spacing: 0.045em; - line-height: 1.35; - text-transform: uppercase; - box-shadow: 4px 4px 0 var(--accent); -} - -.eyebrow::before { - color: #d19b25; - content: "◼"; - font-size: 0.68rem; -} - -.section-heading h2, -.hero-copy h1, -.download-hero h1 { - margin: 0.85rem 0 1rem; - max-width: 13ch; - font-family: var(--font-display); - font-size: clamp(2.45rem, 7.2vw, 6.8rem); - font-weight: 900; - line-height: 0.88; - letter-spacing: -0.075em; - text-wrap: balance; -} - -.section-heading p, -.hero-text, -.release-description, -.docs-card p, -.footer-copy, -.empty-state, -.notice, -.addon-disclaimer, -.addon-description, -.download-panel p, -.feature-card p, -.support-note { - color: var(--muted); -} - -.section { - position: relative; - padding: clamp(4rem, 8vw, 7rem) 0; -} - -.section::before { - position: absolute; - inset: 0 auto auto 0; - width: min(18vw, 12rem); - height: 2px; - content: ""; - background: var(--rule); -} - -.section-alt { - border-block: 3px solid var(--rule); - background: - repeating-linear-gradient(-45deg, rgba(23, 19, 14, 0.04) 0 0.55rem, transparent 0.55rem 1.1rem), - rgba(222, 211, 189, 0.58); -} - -.section-heading { - max-width: 850px; - margin-bottom: 2.2rem; -} - -.section-heading p { - max-width: 54ch; - font-size: 1.03rem; -} - -/* Hero */ -.hero-section { - position: relative; - padding: clamp(4.4rem, 8vw, 7.5rem) 0 4.4rem; -} - -.hero-section::after { - position: absolute; - inset: auto 0 0; - height: 3px; - content: ""; - background: var(--rule); -} - -.hero-grid { - display: grid; - grid-template-columns: minmax(0, 0.88fr) minmax(420px, 1.12fr); - gap: clamp(2rem, 5vw, 4.3rem); - align-items: center; -} - -.hero-copy { - position: relative; - padding: clamp(1rem, 3vw, 1.8rem) 0 clamp(1rem, 2vw, 1.4rem) clamp(1rem, 3vw, 1.6rem); -} - -.hero-copy::before { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 0.72rem; - content: ""; - border: 2px solid var(--rule); - background: repeating-linear-gradient(0deg, var(--accent) 0 0.75rem, var(--paper-warm) 0.75rem 1.45rem); -} - -.hero-copy h1 { - max-width: 11ch; -} - -.hero-text { - max-width: 58ch; - font-size: 1.08rem; - font-weight: 600; -} - -.hero-actions, -.inline-actions, -.release-actions, -.addon-actions { - display: flex; - flex-wrap: wrap; - gap: 0.75rem; - margin-top: 1.45rem; -} - -.button { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - min-height: 3.05rem; - padding: 0.78rem 1rem; - border: 2px solid var(--rule); - background: var(--panel); - color: var(--ink); - font-family: var(--font-mono); - font-size: 0.92rem; - font-weight: 900; - line-height: 1.18; - box-shadow: 4px 4px 0 var(--rule); - touch-action: manipulation; - transition: transform 0.12s ease, background-color 0.12s ease, color 0.12s ease, box-shadow 0.12s ease; -} - -.button::after { - margin-left: 0.62rem; - content: "→"; - font-weight: 900; -} - -.button:hover, -.button:focus-visible { - transform: translate(2px, 2px); - box-shadow: 1px 1px 0 var(--rule); - outline: none; -} - -.button:active { - transform: translate(3px, 3px); - box-shadow: none; -} - -.button-primary { - background: var(--accent); - color: #fff8ea; -} - -.button-secondary { - background: var(--green); - color: #fff8ea; -} - -.button-tertiary { - background: transparent; - color: var(--ink); -} - -.button-tertiary:hover, -.button-tertiary:focus-visible { - background: var(--ink); - color: var(--paper-warm); -} - -.button-compact { - min-height: 2.55rem; - padding: 0.58rem 0.82rem; - font-size: 0.84rem; -} - -.release-pills { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 0.8rem; - margin-top: 1.8rem; -} - -.pill-card, -.feature-card, -.release-card, -.docs-card, -.download-panel, -.addon-card { - position: relative; - border: 2px solid var(--rule); - background: var(--panel); - box-shadow: var(--shadow); -} - -.pill-card::after, -.feature-card::after, -.docs-card::after, -.download-panel::after, -.addon-card::after { +.support-links { position: absolute; right: 0; - bottom: 0; - width: 1.15rem; - height: 1.15rem; - content: ""; - border-top: 2px solid var(--rule); - border-left: 2px solid var(--rule); - background: linear-gradient(135deg, transparent 50%, rgba(23, 19, 14, 0.16) 50%); + top: 100%; + z-index: 5; + min-width: 235px; + padding: 5px; + border: 1px solid var(--line); + background: var(--page); } -.pill-card { - display: grid; - gap: 0.12rem; - padding: 0.9rem 1rem; -} - -.pill-card:nth-child(2) { - background: var(--paper-cool); -} - -.pill-label, -.release-kind { - color: var(--accent-dark); - font-size: 0.74rem; - font-weight: 900; - letter-spacing: 0.07em; - line-height: 1.35; - text-transform: uppercase; -} - -.pill-card strong { - color: var(--ink); - font-family: var(--font-mono); - font-size: 1.08rem; -} - -.pill-card span:last-child { - color: var(--muted); - font-size: 0.9rem; - font-weight: 650; -} - -.hero-shot { - position: relative; - width: 100%; - justify-self: end; - padding-top: 2.45rem; - border: 3px solid var(--rule); - background: var(--panel-dark); - box-shadow: 16px 16px 0 var(--rule); - transform: rotate(0.45deg); -} - -.hero-shot::before { - position: absolute; - inset: 0 0 auto; - height: 2.45rem; - display: flex; - align-items: center; - padding-inline: 1rem; - border-bottom: 2px solid var(--rule); - color: var(--panel); - content: "window: zoitechat / channel-view / gtk3"; - font-family: var(--font-mono); - font-size: 0.76rem; - font-weight: 850; - letter-spacing: 0.01em; - background: - repeating-linear-gradient(90deg, rgba(255, 248, 234, 0.12) 0 0.65rem, transparent 0.65rem 1.2rem), - var(--panel-dark); -} - -.hero-shot::after { - position: absolute; - right: 0.82rem; - top: 0.82rem; - width: 0.58rem; - height: 0.58rem; - content: ""; - border: 2px solid var(--paper-warm); - background: var(--accent); - box-shadow: -1.05rem 0 0 var(--green), -2.1rem 0 0 #d19b25; -} - -.screenshot { - width: 100%; - height: auto; - aspect-ratio: 1121 / 646; - object-fit: contain; - border: 0; - background: #e7e9ec; -} - -.shot-badge, -.floating-download { - position: absolute; - z-index: 2; - padding: 0.72rem 0.95rem; - border: 2px solid var(--rule); - background: var(--panel); - color: var(--ink); - font-weight: 900; - box-shadow: 5px 5px 0 var(--rule); -} - -.shot-badge { - top: 0.8rem; - right: 0.8rem; -} - -.floating-download { - left: 1rem; - top: 1rem; - background: var(--accent); - color: var(--panel); -} - -/* Content cards */ -.feature-grid, -.release-grid, -.docs-grid, -.footer-grid, -.addon-grid { - display: grid; - gap: 1.1rem; -} - -.feature-grid { - grid-template-columns: 1.15fr 0.95fr 1fr; - counter-reset: feature-card; -} - -.feature-card, -.docs-card, -.release-card, -.download-panel, -.addon-card { - padding: clamp(1.15rem, 2vw, 1.6rem); -} - -.feature-card { - counter-increment: feature-card; -} - -.feature-card:nth-child(2) { - margin-top: 1.4rem; - background: var(--paper-cool); -} - -.feature-card:nth-child(3) { - margin-top: -0.55rem; - background: #f6ebcf; -} - -.feature-card::before { - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 2.2rem; - height: 2.2rem; - margin-bottom: 0.95rem; - border: 2px solid var(--rule); - background: var(--panel-dark); - color: var(--paper-warm); - content: counter(feature-card, decimal-leading-zero); - font-family: var(--font-mono); - font-weight: 900; - box-shadow: 3px 3px 0 var(--accent); -} - -.feature-card h3, -.release-card h3, -.download-panel h2, -.docs-card h2, -.addon-card-top h2, -.addon-card-top h3, -.package-card h2 { - margin: 0.35rem 0 0.75rem; - font-family: var(--font-mono); - font-size: clamp(1.18rem, 1.9vw, 1.48rem); - line-height: 1.12; - letter-spacing: -0.045em; -} - -.feature-card p, -.release-card p, -.download-panel p, -.docs-card p, -.addon-card p { - margin: 0; -} - -.release-grid { - grid-template-columns: repeat(auto-fit, minmax(min(100%, 30rem), 1fr)); -} - -.docs-grid { - grid-template-columns: repeat(2, minmax(0, 1fr)); -} - -.release-card-top, -.download-panel-head { - margin-bottom: 1rem; -} - -.release-meta, -.addon-path, -.addon-meta-row { - color: var(--quiet); - font-size: 0.88rem; -} - -.release-meta { - margin-top: 0.25rem; -} - -.dot-sep { - margin-inline: 0.45rem; - color: var(--accent); - font-weight: 900; -} - -.release-description { - min-height: 4.6rem; -} - -.support-note { - margin-top: 1rem; - font-size: 0.95rem; -} - -.notice, -.empty-state, -.addon-disclaimer { - max-width: 860px; - padding: 1rem 1.1rem; - border: 2px solid var(--rule); - background: var(--panel); - box-shadow: 5px 5px 0 var(--rule); -} - -.notice { - margin-top: 1.2rem; - border-color: var(--warning); - background: #fff1c9; -} - -.empty-state { - margin-top: 1rem; - border-style: dashed; -} - -.addon-disclaimer { - margin-top: 1.25rem; - background: var(--paper-cool); -} - -.download-hero, -.addon-hero { - position: relative; - padding: clamp(4rem, 8vw, 6.8rem) 0 1.4rem; -} - -.download-hero::after, -.addon-hero::after { - position: absolute; - right: 0; - bottom: -1px; - width: min(34rem, 64vw); - height: 3px; - content: ""; - background: var(--rule); -} - -.download-hero h1 { - max-width: 15ch; -} - -.download-panel:nth-child(2) { - background: var(--paper-cool); -} - -.download-panel ul, -.docs-card ul { - margin: 0.75rem 0 1.4rem; - padding-left: 1.35rem; - color: var(--muted); -} - -.download-panel li + li, -.docs-card li + li { - margin-top: 0.35rem; -} - -.download-panel h3, -.docs-card h3 { - margin: 1.65rem 0 0.5rem; - color: var(--ink); - font-family: var(--font-mono); - font-size: 1.03rem; - letter-spacing: -0.02em; -} - -.download-panel a:not(.button), -.docs-card a:not(.button) { - color: var(--accent-dark); - font-weight: 800; - border-bottom: 2px solid rgba(185, 63, 24, 0.34); -} - -.download-panel a:not(.button):hover, -.download-panel a:not(.button):focus-visible, -.docs-card a:not(.button):hover, -.docs-card a:not(.button):focus-visible { - color: var(--ink); - border-color: var(--rule); - outline: none; -} - -.asset-list-wrapper { - margin-top: 1.35rem; - overflow-x: auto; - border: 2px solid var(--rule); - background: var(--panel); -} - -.asset-table { - width: 100%; - min-width: 430px; - border-collapse: collapse; - font-family: var(--font-mono); - font-size: 0.86rem; -} - -.previous-versions-table .asset-table { - min-width: 720px; -} - -.asset-table th, -.asset-table td { - padding: 0.82rem 0.75rem; - text-align: left; - border-bottom: 2px solid var(--rule-soft); -} - -.asset-table tr:last-child td { - border-bottom: 0; -} - -.asset-table th { - color: var(--panel); - font-weight: 900; - text-transform: uppercase; - letter-spacing: 0.05em; - background: var(--panel-dark); -} - -.asset-table td { - color: var(--ink-soft); - background: rgba(255, 248, 234, 0.54); -} - -.asset-table tbody tr:nth-child(even) td { - background: rgba(222, 211, 189, 0.38); -} - -.asset-table a { - color: var(--accent-dark); - font-weight: 900; -} - -.asset-table a:hover, -.asset-table a:focus-visible { - color: var(--ink); - outline: none; -} - -.package-card { - max-width: 820px; - background: #f7edce; -} - -/* Addons */ -.addon-hero code { - padding: 0.1rem 0.32rem; - border: 2px solid var(--rule-soft); - background: var(--panel); - color: var(--accent-dark); - font-family: var(--font-mono); - font-size: 0.94em; -} - -.addons-toolbar { - display: grid; - grid-template-columns: minmax(280px, 1fr) auto; - align-items: center; - gap: 1rem; - margin-bottom: 1.45rem; - padding: 0.8rem; - border: 3px solid var(--rule); - background: - linear-gradient(90deg, var(--panel-dark) 0 0.85rem, transparent 0.85rem), - var(--panel-alt); - box-shadow: 7px 7px 0 var(--rule); -} - -.search-field { +.support-links a { display: block; + padding: 10px 12px; + text-decoration: none; } -.search-field input { - width: 100%; - min-height: 3.15rem; - padding: 0.82rem 1rem; - border: 2px solid var(--rule); - background: var(--panel); - color: var(--ink); - font-family: var(--font-mono); - font-weight: 750; - box-shadow: inset 3px 3px 0 rgba(23, 19, 14, 0.08); +.support-links a:hover { + background: var(--selection); } -.search-field input::placeholder { - color: var(--quiet); +.support-links small { + display: block; + color: var(--muted); + font-size: 11px; } -.search-field input:focus-visible { - outline: 3px solid var(--accent); - outline-offset: 2px; -} - -.addons-toolbar-meta { +.docs-location { display: flex; - align-items: center; - justify-content: flex-end; - gap: 0.75rem; - flex-wrap: wrap; - color: var(--ink-soft); - font-weight: 750; + justify-content: space-between; + align-items: start; + gap: 20px; + margin-top: 12px; + color: var(--muted); + font-size: 11px; } -.addons-toolbar-meta strong { - color: var(--ink); -} - -.addon-grid, -.addon-grid-compact { - grid-template-columns: repeat(3, minmax(0, 1fr)); - counter-reset: addon-card; -} - -.addon-card { - display: flex; - min-height: 100%; - flex-direction: column; - gap: 1rem; - counter-increment: addon-card; -} - -.addon-card:nth-child(3n + 2) { - background: var(--paper-cool); -} - -.addon-card:nth-child(3n + 3) { - background: #f6ebcf; -} - -.addon-card::before { - position: absolute; - top: 0.9rem; - right: 1rem; - color: rgba(23, 19, 14, 0.32); - content: "pkg/" counter(addon-card, decimal-leading-zero); - font-family: var(--font-mono); - font-size: 0.76rem; - font-weight: 900; - letter-spacing: 0.07em; - text-transform: uppercase; -} - -.addon-card-top h2, -.addon-card-top h3 { - padding-right: 3.7rem; -} - -.addon-badges { - display: flex; - flex-wrap: wrap; - gap: 0.45rem; - margin-bottom: 0.65rem; -} - -.mini-badge { - display: inline-flex; - align-items: center; - min-height: 1.72rem; - padding: 0.18rem 0.5rem; - border: 2px solid var(--rule); - background: var(--accent); - color: var(--panel); - font-size: 0.7rem; - font-weight: 900; - letter-spacing: 0.055em; - text-transform: uppercase; -} - -.mini-badge-muted { - background: var(--panel); - color: var(--ink); -} - -.addon-path { - margin: 0.2rem 0 0; +.docs-location nav { + min-width: 0; overflow-wrap: anywhere; } -.addon-description { - flex: 0 0 auto; +.docs-location nav > span { + margin-inline: 5px; } -.addon-meta-row { - margin-top: auto; +.docs-version { + flex-shrink: 0; + font-family: var(--mono); } -.addon-actions { - gap: 0.55rem; -} - -.addon-actions .button { - min-height: 2.62rem; - padding: 0.58rem 0.78rem; - font-size: 0.84rem; -} - -.section-cta { - margin-top: 1.5rem; -} - -/* Footer */ -.site-footer { - position: relative; - padding: 2.5rem 0 3.1rem; - border-top: 3px solid var(--rule); - background: - repeating-linear-gradient(90deg, rgba(255, 248, 234, 0.06) 0 0.65rem, transparent 0.65rem 1.2rem), - var(--panel-dark); - color: var(--paper-warm); -} - -.site-footer::before { - position: absolute; - inset: 0 0 auto; - height: 0.55rem; - content: ""; - border-bottom: 2px solid var(--rule); - background: repeating-linear-gradient(90deg, var(--accent) 0 1rem, var(--panel-dark) 1rem 1.45rem); -} - -.footer-grid { - grid-template-columns: 1.35fr 0.75fr 0.9fr; +.docs-layout { + display: grid; + grid-template-columns: 240px minmax(0, 1fr); align-items: start; + gap: 36px; + padding-block: 26px 30px; } -.footer-brand-wrap { - display: inline-flex; - align-items: center; - gap: 0.75rem; - margin-bottom: 0.7rem; +.docs-layout.no-sidebar { + display: block; } -.footer-logo { - inline-size: 2.6rem; +.docs-sidebar { + position: sticky; + top: 16px; + max-height: calc(100vh - 32px); + overflow: auto; + padding-right: 15px; + border-right: 1px solid var(--soft-line); + font-size: 13px; +} + +.docs-navigation > summary { + margin-bottom: 14px; + padding: 5px 0; + color: var(--text); + font-weight: 600; +} + +.docs-sidebar h2, +.docs-sidebar h3 { + margin: 20px 0 8px; + padding-bottom: 5px; + border-bottom: 1px solid var(--line); + font-size: 14px; + letter-spacing: 0; +} + +.docs-sidebar ul { + margin: 0; + padding-left: 17px; + list-style: none; +} + +.docs-sidebar nav > ul { + padding-left: 0; +} + +.docs-sidebar li { + margin: 5px 0; + line-height: 1.55; +} + +.docs-sidebar li.current > a, +.docs-sidebar a.current { + font-weight: 600; +} + +.docs-sidebar .current > a { + text-decoration-thickness: 2px; +} + +.docs-search > label { + display: block; + margin-bottom: 5px; + color: var(--muted); + font-size: 11px; +} + +.search-inputs { + display: flex; + align-items: stretch; + gap: 5px; +} + +.search-inputs input { + width: 100%; + min-width: 0; + font-size: 12px; +} + +.search-inputs button { + flex-shrink: 0; + padding-inline: 7px; + font-size: 11px; +} + +.docs-content { + min-width: 0; + overflow-wrap: break-word; +} + +.docs-content > :first-child, +.docs-content > section:first-child > :first-child { + margin-top: 0; +} + +.docs-content li { + margin-bottom: 5px; +} + +.docs-content dl { + margin-bottom: 20px; +} + +.docs-content dt { + margin-top: 14px; + color: var(--text); +} + +.docs-content dd { + margin-left: 24px; +} + +.docs-content code, +.docs-content pre, +.docs-content kbd { + font-family: var(--mono); + font-size: 0.9em; +} + +.docs-content code.literal { + padding: 1px 4px; + border: 1px solid var(--soft-line); + background: var(--code); +} + +.docs-content pre { + margin: 0; + white-space: pre; + line-height: 1.7; +} + +.docs-content .highlight, +.docs-content .literal-block { + max-width: 100%; + margin: 16px 0; + padding: 14px; + overflow-x: auto; + border: 1px solid var(--line); + background: var(--code); + color: var(--text); +} + +.highlight pre { + background: transparent; +} + +.highlight span { + color: var(--text) !important; +} + +.highlight .k, +.highlight .kc, +.highlight .kd, +.highlight .kn, +.highlight .kp, +.highlight .kr, +.highlight .kt, +.highlight .o, +.highlight .ow, +.highlight .nb, +.highlight .nf { + color: var(--link) !important; +} + +.highlight .c, +.highlight .c1, +.highlight .cm, +.highlight .cp, +.highlight .cs, +.highlight .sd { + color: var(--comment) !important; +} + +.highlight .s, +.highlight .s1, +.highlight .s2, +.highlight .sa, +.highlight .sb, +.highlight .sc, +.highlight .se, +.highlight .sh, +.highlight .si, +.highlight .sr, +.highlight .ss { + color: var(--string) !important; +} + +.highlight .m, +.highlight .mb, +.highlight .mf, +.highlight .mh, +.highlight .mi, +.highlight .mo, +.highlight .il { + color: var(--number) !important; +} + +table.docutils, +table.indextable, +table.genindextable { + width: 100%; + margin: 16px 0; + border-collapse: collapse; + font-size: 13px; +} + +table.docutils th, +table.docutils td { + padding: 9px 12px; + border: 1px solid var(--line); + text-align: left; + vertical-align: top; +} + +table.docutils th { background: var(--panel); } -.footer-brand { - color: var(--paper-warm); +table.docutils tbody tr:nth-child(even) { + background: var(--panel); } -.footer-copy { - max-width: 58ch; - margin: 0; - color: rgba(255, 248, 234, 0.78); +table.genindextable td, +table.indextable td { + vertical-align: top; } -.footer-links { - display: grid; - gap: 0.48rem; - font-family: var(--font-mono); - font-size: 0.9rem; +.docs-content .admonition, +.docs-content .topic, +.docs-content .sidebar { + float: none; + width: auto; + margin: 18px 0; + padding: 12px 16px; + border: 1px solid var(--soft-line); + border-left: 3px solid var(--blue); + background: var(--panel); + color: var(--text); } -.footer-links a, -.footer-meta { - color: rgba(255, 248, 234, 0.82); +.docs-content .admonition-title, +.docs-content .topic-title, +.docs-content .sidebar-title { + margin-bottom: 6px; + font-size: 14px; + font-weight: 600; } -.footer-links a { - width: fit-content; - border-bottom: 1px solid transparent; +.docs-content .admonition > :last-child, +.docs-content .topic > :last-child { + margin-bottom: 0; } -.footer-links a::before { - color: #d19b25; - content: "↳ "; +.docs-content img, +.docs-content .figure { + max-width: 100%; } -.footer-links a:hover, -.footer-links a:focus-visible { - color: #fff8ea; - border-bottom-color: currentColor; - outline: none; +.docs-content img { + height: auto; } -.footer-meta { - display: grid; - gap: 0.45rem; - font-family: var(--font-mono); - font-size: 0.82rem; +.docs-content .figure { + margin-inline: 0; } -@media (max-width: 1120px) { - .hero-grid, - .feature-grid, - .docs-grid, - .footer-grid { - grid-template-columns: 1fr; - } - - .feature-card:nth-child(2), - .feature-card:nth-child(3) { - margin-top: 0; - } - - .hero-copy h1, - .section-heading h2, - .download-hero h1 { - max-width: none; - } - - .hero-shot { - justify-self: stretch; - } - - .addon-grid, - .addon-grid-compact { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } -} - -@media (max-width: 760px) { - .shell { - width: min(calc(100% - 1.1rem), var(--shell)); - } - - .nav-shell { - min-height: auto; - padding-block: 0.9rem; - align-items: stretch; - flex-direction: column; - } - - .brand { - grid-template-columns: 3rem auto; - } - - .site-nav { - justify-content: flex-start; - border-left: 0; - } - - .site-nav a, - .nav-menu summary { - min-height: 2.35rem; - padding: 0.42rem 0.48rem; - border-left: 2px solid var(--rule); - font-size: 0.78rem; - } - - .nav-menu-panel { - right: auto; - left: 0; - } - - .hero-copy { - padding-left: 1rem; - } - - .hero-copy::before { - width: 0.45rem; - } - - .hero-section, - .download-hero, - .addon-hero { - padding-top: 3rem; - } - - .section-heading h2, - .hero-copy h1, - .download-hero h1 { - font-size: clamp(2.35rem, 15vw, 4rem); - letter-spacing: -0.06em; - } - - .hero-actions, - .release-actions, - .inline-actions, - .addon-actions { - flex-direction: column; - align-items: stretch; - } - - .button { - width: 100%; - } - - .release-pills, - .addon-grid, - .addon-grid-compact, - .addons-toolbar { - grid-template-columns: 1fr; - } - - .addons-toolbar-meta { - justify-content: flex-start; - } - - .hero-shot { - padding-top: 2rem; - box-shadow: 8px 8px 0 var(--rule); - transform: none; - } - - .hero-shot::before { - height: 2rem; - padding-inline: 0.65rem; - font-size: 0.62rem; - } - - .hero-shot::after { - top: 0.64rem; - right: 0.62rem; - transform: scale(0.78); - transform-origin: top right; - } - - .shot-badge, - .floating-download { - position: static; - display: inline-flex; - margin-bottom: 0.9rem; - } - - .pill-card, - .feature-card, - .docs-card, - .download-panel, - .addon-card { - box-shadow: 6px 6px 0 var(--rule); - } -} - -@media (prefers-reduced-motion: reduce) { - *, - *::before, - *::after { - scroll-behavior: auto !important; - transition-duration: 0.01ms !important; - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - } -} - -/* Automatic dark appearance, matching the main ZoiteChat site palette. */ -@media (prefers-color-scheme: dark) { - :root { - color-scheme: dark; - --paper: #161514; - --paper-warm: #f4ead9; - --paper-cool: #1c2522; - --ink: #f2eadb; - --ink-soft: #ddd2c1; - --muted: #bdb19f; - --quiet: #928777; - --rule: #080706; - --rule-soft: rgba(242, 234, 219, 0.16); - --rule-mid: rgba(242, 234, 219, 0.3); - --panel: #211e1a; - --panel-alt: #2b261f; - --panel-dark: #0b0c0c; - --accent: #c34720; - --accent-dark: #ff966d; - --accent-soft: rgba(195, 71, 32, 0.17); - --green: #367662; - --blue: #386b8d; - --warning: #9b6508; - --success: #43856a; - --shadow: 8px 8px 0 rgba(0, 0, 0, 0.82); - --shadow-soft: 0 18px 40px rgba(0, 0, 0, 0.36); - } - - html { - background: var(--paper); - } - - body { - background: - linear-gradient(90deg, rgba(242, 234, 219, 0.025) 1px, transparent 1px) 0 0 / 68px 68px, - linear-gradient(180deg, rgba(242, 234, 219, 0.022) 1px, transparent 1px) 0 0 / 68px 68px, - radial-gradient(circle at 11% 18%, rgba(195, 71, 32, 0.15), transparent 24rem), - radial-gradient(circle at 86% 4%, rgba(54, 118, 98, 0.16), transparent 28rem), - linear-gradient(180deg, #181715 0%, #111311 58%, #191714 100%); - } - - body::before { - background: - repeating-linear-gradient(90deg, transparent 0 17px, rgba(242, 234, 219, 0.025) 17px 18px), - repeating-linear-gradient(0deg, transparent 0 5px, rgba(255, 255, 255, 0.025) 5px 6px); - mix-blend-mode: screen; - } - - .site-header { - background: rgba(22, 21, 20, 0.94); - } - - .site-nav a, - .nav-menu summary { - background: rgba(39, 35, 30, 0.52); - } - - .eyebrow::before, - .footer-links a::before { - color: #e0aa3c; - } -} - -/* Sphinx/Read the Docs bridge: aggressively map documentation onto the main ZoiteChat site skin. */ -html { - font-size: 16px !important; -} - -body { - min-height: 100vh !important; - margin: 0 !important; - padding: 0 !important; - color: var(--ink) !important; - font-family: var(--font-body) !important; - font-size: 16px !important; - line-height: 1.58 !important; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; -} - -body, -body p, -body li, -body dd, -body td, -body th, -body input, -body button, -body select, -body textarea { - font-family: var(--font-body) !important; -} - -body a { - text-decoration: none !important; -} - -#navbar-top.site-header { - position: sticky !important; - top: 0 !important; - z-index: 2000 !important; - min-height: auto !important; - margin: 0 !important; - border: 0 !important; - border-bottom: 3px solid var(--rule) !important; - border-radius: 0 !important; - background: rgba(238, 229, 211, 0.94) !important; - box-shadow: none !important; - background-image: none !important; -} - -#navbar-top.site-header::before { - display: block !important; - block-size: 0.55rem !important; - content: "" !important; - border-bottom: 2px solid var(--rule) !important; - background: - repeating-linear-gradient(90deg, var(--rule) 0 0.7rem, transparent 0.7rem 1.2rem), - var(--accent) !important; -} - -#navbar-top .nav-shell { - width: min(calc(100% - 2rem), var(--shell)) !important; - min-height: 76px !important; - display: flex !important; - align-items: center !important; - justify-content: space-between !important; - gap: 1.4rem !important; - margin-inline: auto !important; - padding: 0 !important; -} - -#navbar-top .brand { - display: inline-grid !important; - grid-template-columns: 3.25rem auto !important; - align-items: center !important; - gap: 0.75rem !important; - min-width: max-content !important; - height: auto !important; - padding: 0 !important; - color: var(--ink) !important; - text-shadow: none !important; -} - -#navbar-top .brand-logo { - inline-size: 3rem !important; - block-size: auto !important; - max-width: none !important; - padding: 0.18rem !important; - border: 2px solid var(--rule) !important; - background: var(--paper-warm) !important; - box-shadow: 4px 4px 0 var(--rule) !important; -} - -#navbar-top .brand-text { - color: var(--ink) !important; - font-family: var(--font-mono) !important; - font-size: 1.05rem !important; - font-weight: 900 !important; - letter-spacing: -0.04em !important; - line-height: 1 !important; - text-transform: lowercase !important; -} - -#navbar-top .site-nav { - display: flex !important; - align-items: center !important; - justify-content: flex-end !important; - gap: 0 !important; - flex-wrap: wrap !important; - margin: 0 !important; - border-left: 2px solid var(--rule) !important; - font-family: var(--font-mono) !important; - font-size: 0.84rem !important; -} - -#navbar-top .site-nav a, -#navbar-top .site-nav summary { - min-height: 2.65rem !important; - display: inline-flex !important; - align-items: center !important; - padding: 0.48rem 0.72rem !important; - border: 0 !important; - border-block: 2px solid transparent !important; - border-right: 2px solid var(--rule) !important; - background: rgba(255, 248, 234, 0.44) !important; - color: var(--ink) !important; - font-family: var(--font-mono) !important; - font-size: 0.84rem !important; - font-weight: 800 !important; - line-height: 1.18 !important; - text-shadow: none !important; -} - -#navbar-top .site-nav a::before, -#navbar-top .site-nav summary::before { - margin-right: 0.28rem !important; - color: var(--accent) !important; - content: "//" !important; - font-weight: 900 !important; -} - -#navbar-top .site-nav a[aria-current="page"] { - border-block-color: var(--rule) !important; - background: var(--panel-dark) !important; - color: var(--paper-warm) !important; - box-shadow: inset 0 -0.3rem 0 var(--accent) !important; -} - -#navbar-top .site-nav a[aria-current="page"]::before { - color: #d19b25 !important; -} - -#navbar-top .site-nav a:hover, -#navbar-top .site-nav a:focus-visible, -#navbar-top .site-nav summary:hover, -#navbar-top .site-nav summary:focus-visible, -#navbar-top .nav-menu[open] summary { - border-block-color: var(--rule) !important; - background: var(--panel-dark) !important; - color: var(--paper-warm) !important; - outline: none !important; -} - -#navbar-top .nav-menu-panel a { - display: block !important; - min-height: auto !important; - padding: 0.85rem 0.95rem !important; - border: 0 !important; - border-bottom: 2px solid var(--rule) !important; - background: var(--panel) !important; -} - -#navbar-top .nav-menu-panel a::before { - content: none !important; -} - -#navbar-top .nav-menu-panel a:hover, -#navbar-top .nav-menu-panel a:focus-visible { - background: var(--panel-dark) !important; -} - -body > .container, -body > .container-fluid, -.docs-shell { - width: min(calc(100% - 2rem), var(--shell)) !important; - max-width: none !important; - margin: 0 auto !important; - padding: clamp(2rem, 5vw, 4rem) 0 0 !important; -} - -.docs-shell > .docs-main-row { - display: grid !important; - grid-template-columns: clamp(14.5rem, 20vw, 18rem) minmax(0, 1fr) !important; - gap: 1.1rem !important; - align-items: start !important; - width: 100% !important; - margin: 0 !important; -} - -.docs-shell > .footer-relbar { - display: block !important; - width: 100% !important; - margin: 0 !important; -} - -.docs-shell > .docs-main-row > #sidebar-wrapper, -.docs-shell > .docs-main-row > #content-wrapper, -#sidebar-wrapper, -#content-wrapper, -.row-fluid > #sidebar-wrapper[class*="span"], -.row-fluid > #content-wrapper[class*="span"] { - float: none !important; - display: block !important; - width: 100% !important; - max-width: none !important; - min-width: 0 !important; - min-height: 0 !important; - margin: 0 !important; - padding: 0 !important; - box-sizing: border-box !important; -} - -#sidebar-wrapper { - grid-column: 1 !important; -} - -#content-wrapper { - grid-column: 2 !important; -} - -.document, -.sidebar, -#navbar-related, -footer.site-footer-lite { - position: relative !important; - border: 2px solid var(--rule) !important; - border-radius: 0 !important; - background: var(--panel) !important; - color: var(--ink) !important; - box-shadow: var(--shadow) !important; - box-sizing: border-box !important; -} - -.document::after, -.sidebar::after, -#navbar-related::after { - position: absolute !important; - right: 0 !important; - bottom: 0 !important; - width: 1.15rem !important; - height: 1.15rem !important; - content: "" !important; - border-top: 2px solid var(--rule) !important; - border-left: 2px solid var(--rule) !important; - background: linear-gradient(135deg, transparent 50%, rgba(23, 19, 14, 0.16) 50%) !important; -} - -.document { - width: 100% !important; - min-width: 0 !important; - margin: 0 0 2rem !important; -} - -.document .body, -.bodywrapper, -.documentwrapper { - float: none !important; - width: auto !important; - min-width: 0 !important; - max-width: none !important; - margin: 0 !important; - background: transparent !important; -} - -.document .body { - overflow-wrap: break-word !important; - padding: clamp(1.15rem, 2vw, 1.6rem) !important; - color: var(--ink) !important; - font-size: 1rem !important; - line-height: 1.58 !important; -} - -.document .body section:first-child > h1:first-child, -.document .body > h1:first-child { - margin: 0.35rem 0 1rem !important; - max-width: 13ch !important; - padding: 0 !important; - border: 0 !important; - color: var(--ink) !important; - font-family: var(--font-display) !important; - font-size: clamp(2.45rem, 7.2vw, 6.8rem) !important; - font-weight: 900 !important; - line-height: 0.88 !important; - letter-spacing: -0.075em !important; - text-wrap: balance !important; -} - -.document .body h1, -.document .body h2 { - margin: 2.45rem 0 1rem !important; - max-width: 13ch !important; - padding: 0 !important; - border: 0 !important; - color: var(--ink) !important; - font-family: var(--font-display) !important; - font-size: clamp(2.45rem, 7.2vw, 6.8rem) !important; - font-weight: 900 !important; - line-height: 0.88 !important; - letter-spacing: -0.075em !important; - text-wrap: balance !important; -} - -.document .body h3, -.document .body h4, -.document .body h5, -.document .body h6, -.document .body .topic-title, -.document .body dt { - margin: 1.65rem 0 0.5rem !important; - color: var(--ink) !important; - font-family: var(--font-mono) !important; - font-size: clamp(1.18rem, 1.9vw, 1.48rem) !important; - font-weight: 900 !important; - line-height: 1.12 !important; - letter-spacing: -0.045em !important; -} - -.document .body p, -.document .body li, -.document .body dd, -.document .body blockquote, -.document .body .line-block { - color: var(--muted) !important; - font-size: 1rem !important; - line-height: 1.58 !important; -} - -.document .body p { - max-width: 78ch; - margin: 0 0 1rem !important; -} - -.document .body strong, -.document .body b, -.document .body dt, -.document .body th { - color: var(--ink) !important; - font-weight: 900 !important; -} - -.document .body a, -.sidebar a, -#navbar-related a, -ul.search a { - color: var(--accent-dark) !important; - font-weight: 800 !important; - border-bottom: 2px solid rgba(185, 63, 24, 0.34) !important; - text-decoration: none !important; -} - -.document .body a:hover, -.document .body a:focus-visible, -.sidebar a:hover, -.sidebar a:focus-visible, -#navbar-related a:hover, -#navbar-related a:focus-visible, -ul.search a:hover, -ul.search a:focus-visible { - color: var(--ink) !important; - border-color: var(--rule) !important; - outline: none !important; -} - -.headerlink { - margin-left: 0.45rem !important; - border: 0 !important; - color: var(--quiet) !important; - font-family: var(--font-mono) !important; - font-size: 0.72em !important; - opacity: 0.65 !important; -} - -.document .body ul, -.document .body ol { - max-width: 78ch; - margin: 0.75rem 0 1.4rem !important; - padding-left: 1.35rem !important; -} - -.document .body li + li { - margin-top: 0.35rem !important; -} - -.document .body .toctree-wrapper > ul, -.document .body ul.search, -.document .body .contents ul { - display: grid !important; - gap: 0.85rem !important; - margin: 1.2rem 0 1.4rem !important; - padding: 0 !important; - list-style: none !important; -} - -.document .body .toctree-wrapper > ul > li, -.document .body ul.search > li, -.document .body .topic, -.document .body .contents { - position: relative !important; - margin: 0 !important; - padding: 0.95rem 1rem !important; - border: 2px solid var(--rule) !important; - background: var(--panel) !important; - box-shadow: 4px 4px 0 var(--rule) !important; -} - -.document .body .toctree-wrapper > ul > li:nth-child(even), -.document .body ul.search > li:nth-child(even) { - background: var(--paper-cool) !important; -} - -.document .body .toctree-wrapper > ul > li > a, -.document .body ul.search > li > a { - color: var(--ink) !important; - border: 0 !important; - font-family: var(--font-mono) !important; - font-size: clamp(1.18rem, 1.9vw, 1.48rem) !important; - font-weight: 900 !important; - line-height: 1.12 !important; - letter-spacing: -0.045em !important; -} - -.document .body .toctree-wrapper > ul > li > a::before { - display: inline-grid !important; - place-items: center !important; - min-width: 2.2rem !important; - height: 2.2rem !important; - margin-right: 0.62rem !important; - border: 2px solid var(--rule) !important; - background: var(--panel-dark) !important; - color: var(--paper-warm) !important; - content: "§" !important; - font-family: var(--font-mono) !important; - font-size: 1rem !important; - font-weight: 900 !important; - box-shadow: 3px 3px 0 var(--accent) !important; - vertical-align: middle !important; -} - -.document .body .toctree-wrapper ul ul { - display: block !important; - margin: 0.75rem 0 0 !important; - padding-left: 1.35rem !important; - list-style: disc !important; -} - -.document .body .toctree-wrapper ul ul li { - list-style: disc !important; -} - -.document .body .toctree-wrapper ul ul a { - color: var(--accent-dark) !important; - border-bottom: 2px solid rgba(185, 63, 24, 0.34) !important; - font-family: var(--font-body) !important; - font-size: 1rem !important; - letter-spacing: 0 !important; -} - -.document .body code, -.document .body tt, -.document .body kbd, -.document .body samp { - padding: 0.12rem 0.28rem !important; - border: 1px solid var(--rule-soft) !important; - border-radius: 0 !important; - background: var(--paper-cool) !important; - color: var(--accent-dark) !important; - font-family: var(--font-mono) !important; - font-size: 0.92em !important; - text-shadow: none !important; -} - -.document .body pre, -.document .body .highlight, -.document .body div[class^="highlight-"] { - overflow: auto !important; - border: 2px solid var(--rule) !important; - border-radius: 0 !important; - background: var(--panel-dark) !important; - color: var(--paper-warm) !important; - font-family: var(--font-mono) !important; - box-shadow: 4px 4px 0 var(--rule) !important; -} - -.document .body pre { - margin: 1rem 0 1.25rem !important; - padding: 1rem !important; - background: transparent !important; - color: inherit !important; - font-size: 0.9rem !important; - line-height: 1.5 !important; -} - -.document .body table, -.document .body table.docutils, -.document .body .longtable { - width: 100% !important; - margin: 1.25rem 0 !important; - border: 2px solid var(--rule) !important; - border-collapse: collapse !important; - background: var(--panel) !important; - color: var(--ink) !important; - font-family: var(--font-mono) !important; - font-size: 0.86rem !important; -} - -.document .body table th, -.document .body table.docutils th, -.document .body table td, -.document .body table.docutils td { - padding: 0.72rem 0.8rem !important; - border: 1px solid var(--rule-soft) !important; - color: var(--ink) !important; - vertical-align: top !important; -} - -.document .body table th, -.document .body table.docutils th { - background: var(--panel-dark) !important; - color: var(--paper-warm) !important; - font-weight: 900 !important; - letter-spacing: 0.03em !important; - text-transform: uppercase !important; -} - -.document .body table tbody tr:hover td, -.document .body table tbody tr:focus-within td { - background: var(--accent-soft) !important; -} - -.admonition, -.note, -.warning, -.danger, -.caution, -.important, -.tip, -.hint, -.seealso { - max-width: 860px !important; - margin: 1.25rem 0 !important; - padding: 1rem 1.1rem !important; - border: 2px solid var(--rule) !important; - border-radius: 0 !important; - background: var(--panel) !important; - color: var(--muted) !important; - box-shadow: 5px 5px 0 var(--rule) !important; -} - -.warning, -.caution, -.danger { - border-color: var(--warning) !important; - background: #fff1c9 !important; -} - -.admonition .admonition-title, -.note .admonition-title, -.warning .admonition-title, -.danger .admonition-title, -.caution .admonition-title, -.important .admonition-title, -.tip .admonition-title, -.hint .admonition-title, -.seealso .admonition-title { - display: inline-flex !important; - align-items: center !important; - gap: 0.45rem !important; - margin: 0 0 0.8rem !important; - padding: 0.34rem 0.58rem !important; - border: 2px solid var(--rule) !important; - background: var(--panel-dark) !important; - color: var(--paper-warm) !important; - font-family: var(--font-mono) !important; - font-size: 0.75rem !important; - font-weight: 900 !important; - letter-spacing: 0.045em !important; - line-height: 1.35 !important; - text-transform: uppercase !important; - box-shadow: 4px 4px 0 var(--accent) !important; -} - -.sidebar { - position: sticky !important; - top: 6.4rem !important; - width: 100% !important; - max-width: none !important; - max-height: calc(100vh - 7.3rem) !important; - overflow: auto !important; - padding: clamp(1rem, 1.7vw, 1.35rem) !important; -} - -.sidebar h3, -.sidebar h4, -.sidebar p.caption, -.sidebar .caption-text, -#navbar-related .nav > li:first-child > a { - margin: 0.8rem 0 0.45rem !important; - color: var(--accent-dark) !important; - font-family: var(--font-mono) !important; - font-size: 0.78rem !important; - font-weight: 900 !important; - letter-spacing: 0.06em !important; - text-transform: uppercase !important; -} - -.sidebar ul, -.sidebar li { - margin-left: 0 !important; - padding-left: 0 !important; - list-style: none !important; -} - -.sidebar a { - display: block !important; - padding: 0.32rem 0.42rem !important; - border: 0 !important; - border-left: 3px solid transparent !important; - color: var(--ink-soft) !important; - font-size: 0.92rem !important; - font-weight: 700 !important; - line-height: 1.35 !important; -} - -.sidebar a:hover, -.sidebar a:focus-visible, -.sidebar li.current > a, -.sidebar a.current { - border-left-color: var(--accent) !important; - background: var(--accent-soft) !important; - color: var(--ink) !important; -} - -input[type="text"], -input[type="search"], -.search-query, -.form-control, -textarea, -select { - min-height: 2.65rem !important; - border: 2px solid var(--rule) !important; - border-radius: 0 !important; - background: var(--paper-warm) !important; - color: var(--ink) !important; - font-family: var(--font-mono) !important; - font-weight: 750 !important; - box-shadow: inset 3px 3px 0 rgba(23, 19, 14, 0.08) !important; -} - -.btn, -button, -input[type="submit"], -.button-like { - position: relative !important; - display: inline-flex !important; - align-items: center !important; - justify-content: center !important; - min-height: 3.05rem !important; - padding: 0.78rem 1rem !important; - border: 2px solid var(--rule) !important; - border-radius: 0 !important; - background: var(--green) !important; - color: #fff8ea !important; - font-family: var(--font-mono) !important; - font-size: 0.92rem !important; - font-weight: 900 !important; - line-height: 1.18 !important; - text-shadow: none !important; - box-shadow: 4px 4px 0 var(--rule) !important; - touch-action: manipulation; -} - -.btn:hover, -.btn:focus-visible, -button:hover, -button:focus-visible, -input[type="submit"]:hover, -input[type="submit"]:focus-visible { - transform: translate(2px, 2px) !important; - background: var(--panel-dark) !important; - color: var(--paper-warm) !important; - box-shadow: 1px 1px 0 var(--rule) !important; - outline: none !important; -} - -.btn:active, -button:active, -input[type="submit"]:active { - transform: translate(3px, 3px) !important; - box-shadow: none !important; -} - -#navbar-related { - min-height: auto !important; - margin: 1rem 0 1.5rem !important; - padding: 0.55rem 0.7rem !important; -} - -#navbar-related .navbar-inner, -#navbar-related .nav, -#navbar-related .navbar-nav { - display: flex !important; - flex-wrap: wrap !important; - gap: 0.55rem !important; - align-items: center !important; - margin: 0 !important; - padding: 0 !important; - background: transparent !important; - border: 0 !important; - box-shadow: none !important; -} - -#navbar-related li { - list-style: none !important; -} - -#navbar-related a { - display: inline-flex !important; - min-height: 2.35rem !important; - align-items: center !important; - padding: 0.42rem 0.6rem !important; - border: 2px solid var(--rule) !important; - background: var(--panel) !important; - color: var(--ink) !important; - font-family: var(--font-mono) !important; - font-size: 0.82rem !important; - font-weight: 900 !important; - box-shadow: 3px 3px 0 var(--rule) !important; +.docs-content .caption { + color: var(--muted); + font-size: 12px; } -.site-footer { - margin-top: 2.5rem !important; +a.headerlink { + padding-left: 6px; + color: var(--muted); + font-size: 0.8em; + text-decoration: none; + visibility: hidden; } -footer:not(.site-footer) { - margin: 0 0 2.5rem !important; - padding: 1rem !important; - border-radius: 0 !important; - color: var(--muted) !important; - font-family: var(--font-mono) !important; - font-size: 0.82rem !important; +h1:hover > .headerlink, +h2:hover > .headerlink, +h3:hover > .headerlink, +h4:hover > .headerlink, +dt:hover > .headerlink, +a.headerlink:focus-visible { + visibility: visible; } .highlighted { - padding: 0.05rem 0.16rem !important; - background: rgba(185, 63, 24, 0.22) !important; - color: var(--ink) !important; - font-weight: 800 !important; + background: var(--selection); + color: var(--text); } -.breadcrumb, -.breadcrumbs, -.navbar-default, -.navbar-inner, -.well, -.panel, -.alert { - border-radius: 0 !important; - background-image: none !important; - box-shadow: none !important; +.page-relations { + display: flex; + justify-content: space-between; + gap: 24px; + margin-top: 32px; + padding-top: 16px; + border-top: 1px solid var(--line); + font-size: 13px; } -@media (max-width: 900px) { - .docs-shell > .docs-main-row { - grid-template-columns: 1fr !important; +.page-relations > div { + max-width: 46%; +} + +.page-relations > div:last-child { + margin-left: auto; + text-align: right; +} + +.page-relations small { + display: block; + color: var(--muted); + font-size: 11px; +} + +.site-footer { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 12px 20px; + padding: 17px 0 28px; + border-top: 1px solid var(--line); + color: var(--muted); + font-size: 11px; +} + +.site-footer nav { + display: flex; + flex-wrap: wrap; + gap: 5px 16px; +} + +@media (max-width: 1000px) { + .docs-layout { + grid-template-columns: 220px minmax(0, 1fr); + gap: 26px; } - #content-wrapper { - grid-column: 1 !important; - order: 1 !important; - } - - #sidebar-wrapper { - grid-column: 1 !important; - order: 2 !important; - } - - .sidebar { - position: relative !important; - top: auto !important; - max-height: none !important; + .site-nav > a, + .support-menu > summary { + padding-inline: 10px; } } @media (max-width: 760px) { - body > .container, - body > .container-fluid, - .docs-shell { - width: min(calc(100% - 1.1rem), var(--shell)) !important; - padding-top: 2rem !important; + .site-header, + .docs-layout, + .site-footer { + width: calc(100% - 30px); } - #navbar-top .nav-shell { - min-height: auto !important; - padding-block: 0.9rem !important; - align-items: stretch !important; - flex-direction: column !important; + .site-header { + padding-top: 18px; } - #navbar-top .brand { - grid-template-columns: 3rem auto !important; + .brand strong { + font-size: 25px; } - #navbar-top .site-nav { - justify-content: flex-start !important; - border-left: 0 !important; + .brand img { + width: 32px; + height: 36px; } - #navbar-top .site-nav a, - #navbar-top .site-nav summary { - min-height: 2.35rem !important; - padding: 0.42rem 0.48rem !important; - border-left: 2px solid var(--rule) !important; - font-size: 0.78rem !important; + .appearance > span { + display: none; } - #navbar-top .nav-menu-panel { - right: auto !important; - left: 0 !important; + .site-nav > a, + .support-menu > summary { + min-height: 38px; + padding: 7px 9px; + font-size: 12px; } - .document, - .sidebar, - #navbar-related { - box-shadow: 6px 6px 0 var(--rule) !important; + .docs-layout { + display: block; + padding-top: 18px; } - .document .body section:first-child > h1:first-child, - .document .body > h1:first-child, - .document .body h1, - .document .body h2 { - max-width: none !important; - font-size: clamp(2.35rem, 15vw, 4rem) !important; - letter-spacing: -0.06em !important; + .docs-sidebar { + position: static; + max-height: none; + margin-bottom: 23px; + padding: 0; + border: 0; + } + + .docs-navigation { + padding: 7px 12px; + border: 1px solid var(--line); + background: var(--panel); + } + + .docs-navigation > summary { + margin: 0; + } + + .sidebar-content { + padding-top: 12px; + } + + .docs-sidebar ul { + margin-bottom: 12px; + } + + .docs-sidebar .sidebar-content { + max-height: 60vh; + overflow: auto; + } + + h1 { + font-size: 26px; + } + + .docs-version { + font-size: 10px; + } + + .support-links { + right: 0; + min-width: 210px; + } + + .docs-content table { + display: block; + max-width: 100%; + overflow-x: auto; } } -/* Documentation heading scale - Keep the ZoiteChat visual language, but stop normal docs titles from using - the oversized marketing hero scale. */ -.document .body section:first-child > h1:first-child, -.document .body > h1:first-child { - max-width: 24ch !important; - margin: 0.15rem 0 1rem !important; - font-family: var(--font-display) !important; - font-size: clamp(2.05rem, 4.8vw, 3.35rem) !important; - font-weight: 900 !important; - line-height: 0.96 !important; - letter-spacing: -0.058em !important; - text-wrap: balance !important; -} - -.document .body h1:not(:first-child) { - max-width: 28ch !important; - margin: 2.15rem 0 0.85rem !important; - font-family: var(--font-display) !important; - font-size: clamp(1.8rem, 3.8vw, 2.65rem) !important; - font-weight: 900 !important; - line-height: 1 !important; - letter-spacing: -0.052em !important; - text-wrap: balance !important; -} - -.document .body h2 { - max-width: 34ch !important; - margin: 2rem 0 0.75rem !important; - font-family: var(--font-mono) !important; - font-size: clamp(1.25rem, 2.2vw, 1.72rem) !important; - font-weight: 900 !important; - line-height: 1.08 !important; - letter-spacing: -0.045em !important; - text-transform: none !important; - text-wrap: balance !important; -} - -.document .body h3, -.document .body h4, -.document .body h5, -.document .body h6, -.document .body .topic-title, -.document .body dt { - max-width: 44ch !important; - margin: 1.45rem 0 0.45rem !important; - font-family: var(--font-mono) !important; - font-size: clamp(1.02rem, 1.45vw, 1.22rem) !important; - font-weight: 900 !important; - line-height: 1.16 !important; - letter-spacing: -0.035em !important; -} - -@media (max-width: 760px) { - .document .body section:first-child > h1:first-child, - .document .body > h1:first-child { - max-width: none !important; - font-size: clamp(1.85rem, 10vw, 2.65rem) !important; - line-height: 1 !important; - letter-spacing: -0.055em !important; +@media print { + .site-header, + .docs-sidebar, + .site-footer, + .page-relations, + a.headerlink { + display: none; } - .document .body h1:not(:first-child) { - max-width: none !important; - font-size: clamp(1.55rem, 8vw, 2.15rem) !important; + .docs-layout, + .docs-layout.no-sidebar { + display: block; + width: 100%; + padding: 0; } - .document .body h2 { - max-width: none !important; - font-size: clamp(1.18rem, 5.4vw, 1.48rem) !important; - letter-spacing: -0.04em !important; + .docs-content, + .docs-content * { + color: #000000 !important; + background: #ffffff !important; } - .document .body h3, - .document .body h4, - .document .body h5, - .document .body h6, - .document .body .topic-title, - .document .body dt { - max-width: none !important; - font-size: 1rem !important; - } -} - -/* Index/toctree section headings - Pages such as index.rst can contain multiple top-level reStructuredText - headings. Sphinx emits those as h1, but visually they are documentation - section labels, not marketing/page hero titles. */ -.document .body h1:not(:first-child), -.document .body section:not(:first-child) > h1:first-child, -.document .body div.section:not(:first-child) > h1:first-child { - max-width: 34ch !important; - margin: 2rem 0 0.75rem !important; - font-family: var(--font-mono) !important; - font-size: clamp(1.25rem, 2.2vw, 1.72rem) !important; - font-weight: 900 !important; - line-height: 1.08 !important; - letter-spacing: -0.045em !important; - text-transform: none !important; - text-wrap: balance !important; -} - -@media (max-width: 760px) { - .document .body h1:not(:first-child), - .document .body section:not(:first-child) > h1:first-child, - .document .body div.section:not(:first-child) > h1:first-child { - max-width: none !important; - font-size: clamp(1.18rem, 5.4vw, 1.48rem) !important; - letter-spacing: -0.04em !important; - } -} - -/* Keep basicstrap's stronger overrides readable with the main site's dark palette. */ -@media (prefers-color-scheme: dark) { - #navbar-top.site-header { - background: rgba(22, 21, 20, 0.94) !important; - } - - #navbar-top .site-nav a, - #navbar-top .site-nav summary { - background: rgba(39, 35, 30, 0.52) !important; - } - - .document::after, - .sidebar::after, - #navbar-related::after { - background: linear-gradient(135deg, transparent 50%, rgba(242, 234, 219, 0.09) 50%) !important; - } - - input[type="text"], - input[type="search"], - .search-query, - .form-control, - textarea, - select { - background: var(--panel) !important; - box-shadow: inset 3px 3px 0 rgba(0, 0, 0, 0.32) !important; - } - - .warning, - .caution, - .danger { - background: #3a2e19 !important; + .docs-content .highlight, + .docs-content .literal-block { + overflow: visible; + } + + .docs-content pre { + white-space: pre-wrap; + } + + .docs-content .highlight span { + color: #000000 !important; } } diff --git a/docs/_static/js/zoitechat-docs.js b/docs/_static/js/zoitechat-docs.js new file mode 100644 index 00000000..cf4ba81d --- /dev/null +++ b/docs/_static/js/zoitechat-docs.js @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +(() => { + 'use strict'; + + const initialise = () => { + const picker = document.getElementById('theme-picker'); + const preference = window.matchMedia('(prefers-color-scheme: dark)'); + + if (picker instanceof HTMLSelectElement) { + const applyTheme = () => { + const dark = picker.value === 'dark' + || (picker.value === 'system' && preference.matches); + document.documentElement.dataset.theme = dark ? 'dark' : 'light'; + document.querySelectorAll('meta[name="theme-color"]').forEach((meta) => { + meta.setAttribute('content', dark ? '#111416' : '#ffffff'); + }); + }; + + // Follow the OS on every visit, including browser back/forward navigation. + const resetTheme = () => { + picker.value = 'system'; + applyTheme(); + }; + picker.addEventListener('change', applyTheme); + preference.addEventListener('change', applyTheme); + window.addEventListener('pageshow', resetTheme); + resetTheme(); + } + + const navigation = document.getElementById('docs-navigation'); + const compact = window.matchMedia('(max-width: 760px)'); + if (navigation instanceof HTMLDetailsElement) { + const fitNavigation = () => { navigation.open = !compact.matches; }; + compact.addEventListener('change', fitNavigation); + fitNavigation(); + } + }; + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initialise, { once: true }); + } else { + initialise(); + } +})(); diff --git a/docs/_theme/zoitechat/globaltoc.html b/docs/_theme/zoitechat/globaltoc.html new file mode 100644 index 00000000..96458d02 --- /dev/null +++ b/docs/_theme/zoitechat/globaltoc.html @@ -0,0 +1,5 @@ +{# SPDX-License-Identifier: GPL-2.0-or-later #} + diff --git a/docs/_theme/zoitechat/layout.html b/docs/_theme/zoitechat/layout.html new file mode 100644 index 00000000..e8fe1b61 --- /dev/null +++ b/docs/_theme/zoitechat/layout.html @@ -0,0 +1,102 @@ +{# SPDX-License-Identifier: GPL-2.0-or-later #} +{% extends "basic/layout.html" %} +{% set docs_root = root_doc|default(master_doc) %} + +{% block extrahead %} + {{ super() }} + + +{% endblock %} + +{% block body_tag %}
{% endblock %} + +{% block header %} + {{ _('Skip to content') }} +