From 12933d1ff3319ec1df486e60565d918237a69844 Mon Sep 17 00:00:00 2001 From: Gleb Gorelov Date: Mon, 5 Oct 2026 12:33:43 +0400 Subject: [PATCH 1/3] Port the UI restyle to the Russian docs Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 2 + .github/workflows/ui-check.yml | 30 + AGENTS.md | 16 + CONTRIBUTING.md | 8 + antora-playbook.ci.yml | 3 +- antora-playbook.yml | 3 +- .../modules/bpm/pages/bpmn/bpmn-events.adoc | 2 +- .../bpm/pages/bpmn/bpmn-service-task.adoc | 2 +- .../modules/bpm/pages/bpmn/transactions.adoc | 4 +- content/modules/bpm/pages/dmn-1-3.adoc | 2 +- .../modules/bpm/pages/process-artifacts.adoc | 2 +- .../flow-ui/pages/views/view-events.adoc | 2 +- content/supplemental/css/dropdown-menu.css | 294 +- content/supplemental/css/overrides.css | 142 - content/supplemental/css/search.css | 273 +- content/supplemental/css/site.css | 4013 +++++++++++++++++ content/supplemental/css/tokens.css | 382 ++ .../font/LICENSE-jetbrains-mono.txt | 93 + content/supplemental/font/LICENSE-roboto.txt | 93 + .../jetbrains-mono-cyrillic-400-italic.woff2 | Bin 0 -> 5876 bytes .../jetbrains-mono-cyrillic-400-normal.woff2 | Bin 0 -> 5328 bytes .../jetbrains-mono-latin-400-italic.woff2 | Bin 0 -> 22228 bytes .../jetbrains-mono-latin-400-normal.woff2 | Bin 0 -> 21168 bytes .../jetbrains-mono-latin-ext-400-italic.woff2 | Bin 0 -> 7972 bytes .../jetbrains-mono-latin-ext-400-normal.woff2 | Bin 0 -> 7336 bytes .../font/roboto-cyrillic-400-italic.woff2 | Bin 0 -> 13000 bytes .../font/roboto-cyrillic-wght-normal.woff2 | Bin 0 -> 23664 bytes .../font/roboto-latin-400-italic.woff2 | Bin 0 -> 23672 bytes .../font/roboto-latin-ext-400-italic.woff2 | Bin 0 -> 16068 bytes .../font/roboto-latin-ext-wght-normal.woff2 | Bin 0 -> 29392 bytes .../font/roboto-latin-wght-normal.woff2 | Bin 0 -> 43136 bytes content/supplemental/img/git-icon.svg | 3 - .../img/jmix-ai-assistant-icon.svg | 15 - .../supplemental/img/jmix-docs-en-icon.svg | 5 - content/supplemental/img/jmix-icon.svg | 14 - content/supplemental/img/warning-icon.svg | 5 - content/supplemental/js/a11y.js | 67 + content/supplemental/js/code-toolbox.js | 78 + content/supplemental/js/dropdown-menu.js | 26 +- content/supplemental/js/theme-menu.js | 146 + .../supplemental/partials/footer-content.hbs | 7 + .../supplemental/partials/footer-scripts.hbs | 15 +- content/supplemental/partials/head-meta.hbs | 5 +- .../supplemental/partials/head-scripts.hbs | 3 + content/supplemental/partials/head-styles.hbs | 106 +- .../supplemental/partials/header-content.hbs | 99 +- content/supplemental/partials/main.hbs | 14 + content/supplemental/partials/nav-explore.hbs | 7 +- content/supplemental/partials/nav-toggle.hbs | 4 + content/supplemental/partials/nav-tree.hbs | 24 + content/supplemental/partials/toolbar.hbs | 12 + tools/check-css.mjs | 151 + tools/check-css.test.mjs | 51 + tools/lib/playwright.mjs | 46 + tools/ui-audit.mjs | 1027 +++++ ui/README.md | 16 + ui/ui-bundle.zip | Bin 0 -> 306537 bytes 57 files changed, 6743 insertions(+), 569 deletions(-) create mode 100644 .github/workflows/ui-check.yml delete mode 100644 content/supplemental/css/overrides.css create mode 100644 content/supplemental/css/site.css create mode 100644 content/supplemental/css/tokens.css create mode 100644 content/supplemental/font/LICENSE-jetbrains-mono.txt create mode 100644 content/supplemental/font/LICENSE-roboto.txt create mode 100644 content/supplemental/font/jetbrains-mono-cyrillic-400-italic.woff2 create mode 100644 content/supplemental/font/jetbrains-mono-cyrillic-400-normal.woff2 create mode 100644 content/supplemental/font/jetbrains-mono-latin-400-italic.woff2 create mode 100644 content/supplemental/font/jetbrains-mono-latin-400-normal.woff2 create mode 100644 content/supplemental/font/jetbrains-mono-latin-ext-400-italic.woff2 create mode 100644 content/supplemental/font/jetbrains-mono-latin-ext-400-normal.woff2 create mode 100644 content/supplemental/font/roboto-cyrillic-400-italic.woff2 create mode 100644 content/supplemental/font/roboto-cyrillic-wght-normal.woff2 create mode 100644 content/supplemental/font/roboto-latin-400-italic.woff2 create mode 100644 content/supplemental/font/roboto-latin-ext-400-italic.woff2 create mode 100644 content/supplemental/font/roboto-latin-ext-wght-normal.woff2 create mode 100644 content/supplemental/font/roboto-latin-wght-normal.woff2 delete mode 100644 content/supplemental/img/git-icon.svg delete mode 100644 content/supplemental/img/jmix-ai-assistant-icon.svg delete mode 100644 content/supplemental/img/jmix-docs-en-icon.svg delete mode 100644 content/supplemental/img/jmix-icon.svg delete mode 100644 content/supplemental/img/warning-icon.svg create mode 100644 content/supplemental/js/a11y.js create mode 100644 content/supplemental/js/code-toolbox.js create mode 100644 content/supplemental/js/theme-menu.js create mode 100644 content/supplemental/partials/footer-content.hbs create mode 100644 content/supplemental/partials/main.hbs create mode 100644 content/supplemental/partials/nav-toggle.hbs create mode 100644 content/supplemental/partials/nav-tree.hbs create mode 100644 content/supplemental/partials/toolbar.hbs create mode 100644 tools/check-css.mjs create mode 100644 tools/check-css.test.mjs create mode 100644 tools/lib/playwright.mjs create mode 100644 tools/ui-audit.mjs create mode 100644 ui/README.md create mode 100644 ui/ui-bundle.zip diff --git a/.gitattributes b/.gitattributes index a1ea7241..c2c9dae6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,3 +5,5 @@ *.svg binary *.webp binary *.pdf binary +*.zip binary +*.woff2 binary diff --git a/.github/workflows/ui-check.yml b/.github/workflows/ui-check.yml new file mode 100644 index 00000000..779cf17e --- /dev/null +++ b/.github/workflows/ui-check.yml @@ -0,0 +1,30 @@ +name: UI check + +on: + pull_request: + paths: + - 'content/supplemental/**' + - 'tools/check-css.mjs' + - 'tools/check-css.test.mjs' + - '.github/workflows/ui-check.yml' + +permissions: + contents: read + +jobs: + check: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: '24' + + - name: Test the stylesheet check + run: node --test tools/check-css.test.mjs + + - name: Check the stylesheets + run: node tools/check-css.mjs diff --git a/AGENTS.md b/AGENTS.md index 2c5f3c3d..900b300b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -117,6 +117,22 @@ Do not translate: Always keep AsciiDoc formatting. +A diagram drawn with dark lines on a transparent background disappears in the dark theme. Give its image macro `role=light-background`, as in `image::transactions/transactions-1.png[,500,role=light-background]`, which puts a white plate behind it. Screenshots have their own background and need no role. + +## UI: styles, tokens and the pinned bundle + +The site uses the Antora default UI bundle pinned in `ui/ui-bundle.zip`. `ui/README.md` says which revision it is and how to update it. The styles are ours and live in `content/supplemental/css/`: + +- `tokens.css` holds the design tokens in three tiers: palette, semantic roles, components. The dark theme is the `:root[data-theme="dark"]` block at the end of the file, inside `@media screen` so print stays light. It sets the tier 2 colors and shadow, and the tier 3 colors that must differ in the dark theme (header logo, code, admonitions). No other stylesheet has a rule under `data-theme="dark"`. The only custom properties declared elsewhere are the `--adm-*` aliases in the Admonitions section of `site.css`. +- `site.css` replaces the bundle stylesheet. Part 1 is the upstream `src/css` of the bundle's revision; change it only to port upstream changes, and override it in part 2 otherwise. Part 2 holds the Jmix styles, one section per component. A section that needs forced colors rules keeps them in its own `@media (forced-colors: active)` block. +- `search.css` and `dropdown-menu.css` style the search and the two header menus (version and color theme). +- `content/supplemental/js/` holds the scripts that add to the bundle's `site.js`: `a11y.js` (ARIA state, copy button names, the skip link and keyboard access to search results), `code-toolbox.js` (starts a code block below the copy toolbox when the toolbox would cover its first line), `dropdown-menu.js` (the version menu) and `theme-menu.js` (the color theme menu). +- The color theme is the `data-theme` attribute (`light` or `dark`) on ``, and `data-theme-preference` holds the reader's choice (`system`, `light` or `dark`). Only `light` and `dark` are saved, in `localStorage` under `jmix-docs-theme`; choosing System removes the key. An inline script at the start of `content/supplemental/partials/head-styles.hbs` sets both attributes and adds a `color-scheme` meta element before the stylesheets load, so the page never shows the wrong theme; keep it before the stylesheet links. `theme-menu.js` changes them later. The DocsBot chat widget that Google Tag Manager adds draws itself for a light page, so `site.css` keeps its host, `#docsbotai-root`, at `color-scheme: light`. + +Outside `tokens.css`, write colors as `var(--…)`. Keywords such as `transparent`, `currentColor` and `inherit`, `color-mix()` over keywords and tokens, and the CSS system colors in forced colors blocks are the only exceptions. `node tools/check-css.mjs` rejects other color literals and reports custom properties that are used but never declared. It also makes sure the dark block sets every `--color-*` and `--shadow-*` token of the light block, and only tokens that the light block declares. CI runs it, with its tests (`node --test tools/check-css.test.mjs`), on pull requests that change `content/supplemental/` or the check. + +After a UI change, build the site and run `node tools/ui-audit.mjs`. It checks keyboard focus, contrast and the expected styles in both themes, the skip link, accessible names, keyboard access to search results, fonts, forced colors mode, and the color theme: that it is set before the first stylesheet, and how the theme menu behaves. It needs Playwright with Chromium, which is not a dependency of this repository. Run `npx playwright@latest install chromium` once. The built pages load the production analytics container, so check them only through the audit or a Playwright script that blocks external hosts. Do not open them in a browser pane, because it does not block the container. + ## Conventions - In multi-locale examples use German (`de`) as the secondary locale. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1cb2c941..0a74db23 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -180,6 +180,14 @@ pngquant --quality=65-85 --strip --force --ext .png path/to/screenshot.png Typical reduction for UI screenshots: 70-80% size, no visible quality loss. +### Images in the dark theme + +Screenshots keep their own light background in the dark theme, but a diagram drawn with dark lines on a transparent background disappears. Add `role=light-background` to the image macro of such a diagram, for example `image::transactions/transactions-1.png[,500,role=light-background]`, or export it with a white background. Check new pages in both themes by choosing Light and Dark in the theme menu in the header. + +## Changing the UI + +UI styles live in `content/supplemental/css/`. Use the custom properties from `tokens.css` for colors; `node tools/check-css.mjs` rejects color literals in the other files. A new `--color-*` or `--shadow-*` token needs a value in the dark block of `tokens.css` too; the check reports it when it is missing. Build the site and run `node tools/ui-audit.mjs` before you open a pull request; it needs Playwright with Chromium (`npx playwright@latest install chromium`). The default UI bundle is pinned; see `ui/README.md` before you replace it. + ## Repository history This repository was created in May 2026 with a fresh history; previous history (including pre-cleanup image revisions) is preserved in the archived repo at [TBD: link to old repo]. Refer there for `git blame` and commit history older than the initial commit. diff --git a/antora-playbook.ci.yml b/antora-playbook.ci.yml index e03b444a..e8abfdf2 100644 --- a/antora-playbook.ci.yml +++ b/antora-playbook.ci.yml @@ -78,8 +78,7 @@ content: start_path: doc ui: bundle: - url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable - snapshot: true + url: ./ui/ui-bundle.zip supplemental_files: ./content/supplemental asciidoc: extensions: diff --git a/antora-playbook.yml b/antora-playbook.yml index 273dbe76..9b608aa5 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -60,8 +60,7 @@ content: start_path: doc ui: bundle: - url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable - snapshot: true + url: ./ui/ui-bundle.zip supplemental_files: ./content/supplemental asciidoc: extensions: diff --git a/content/modules/bpm/pages/bpmn/bpmn-events.adoc b/content/modules/bpm/pages/bpmn/bpmn-events.adoc index 22408e12..658ba618 100644 --- a/content/modules/bpm/pages/bpmn/bpmn-events.adoc +++ b/content/modules/bpm/pages/bpmn/bpmn-events.adoc @@ -344,7 +344,7 @@ image::bpmn-events/end-event-not-mandatory.png[,250] Don’t try to bring all flows to the single end event – it only makes your diagram messy. -image::bpmn-events/end-events-examples.png[,500] +image::bpmn-events/end-events-examples.png[,500,role=light-background] Multiple end events allow to analyze how processes ended. diff --git a/content/modules/bpm/pages/bpmn/bpmn-service-task.adoc b/content/modules/bpm/pages/bpmn/bpmn-service-task.adoc index b34a9269..fd7c2225 100644 --- a/content/modules/bpm/pages/bpmn/bpmn-service-task.adoc +++ b/content/modules/bpm/pages/bpmn/bpmn-service-task.adoc @@ -221,7 +221,7 @@ If more than one service tasks within a process refer to the same Java Delegate for each will be created a separate instance. All process instances share the corresponding class instance for the task. -image::bpmn-service-task/java-delegate-instantiating.png[,600] +image::bpmn-service-task/java-delegate-instantiating.png[,600,role=light-background] This means that the class must not use any member variables and must be thread-safe, as it can be executed simultaneously from different threads. This also may affect xref:field-injections[Fields injection]. diff --git a/content/modules/bpm/pages/bpmn/transactions.adoc b/content/modules/bpm/pages/bpmn/transactions.adoc index 9ecfa5db..80e69e7a 100644 --- a/content/modules/bpm/pages/bpmn/transactions.adoc +++ b/content/modules/bpm/pages/bpmn/transactions.adoc @@ -12,7 +12,7 @@ the engine performs a depth-first search through the process graph and will return once it has reached <> on every branch of execution. This is illustrated in the following picture: -image::transactions/transactions-1.png[,500] +image::transactions/transactions-1.png[,500,role=light-background] We see a segment of a BPMN process with a user task, a service task and a timer event. Completing the user task and validating the address is part of the same unit of work, @@ -52,7 +52,7 @@ in order to be able to scope logical units of work. This is where *asynchronous continuations* come into play. Consider the following process (fragment): -image::bpm:/transactions/transactions-2.png[,800] +image::bpm:/transactions/transactions-2.png[,800,role=light-background] In the next case, we are completing the user task, generating an invoice and then sending that invoice to the customer. This time the generation of the invoice is not part of the same unit of work, diff --git a/content/modules/bpm/pages/dmn-1-3.adoc b/content/modules/bpm/pages/dmn-1-3.adoc index 743407d9..16b0873b 100644 --- a/content/modules/bpm/pages/dmn-1-3.adoc +++ b/content/modules/bpm/pages/dmn-1-3.adoc @@ -97,7 +97,7 @@ image::dmn/add-input.png[,900] Бизнес-правило — это одно или несколько логических условий, основанных на входных параметрах, соединенных логическим оператором 'AND'. -image::dmn/business-rule-full.png[,900] +image::dmn/business-rule-full.png[,900,role=light-background] Например, color == "red" AND size > 10. diff --git a/content/modules/bpm/pages/process-artifacts.adoc b/content/modules/bpm/pages/process-artifacts.adoc index e8b98723..6255d121 100644 --- a/content/modules/bpm/pages/process-artifacts.adoc +++ b/content/modules/bpm/pages/process-artifacts.adoc @@ -16,7 +16,7 @@ Наконец, экземпляр процесса может быть преобразован в xref:bpm:history.adoc#historic-process-instances[исторический экземпляр процесса] или удалён. -image::modeling-and-execution/process-artifacts.png[,900] +image::modeling-and-execution/process-artifacts.png[,900,role=light-background] Ниже приведено детальное описание артефактов процесса. diff --git a/content/modules/flow-ui/pages/views/view-events.adoc b/content/modules/flow-ui/pages/views/view-events.adoc index ba42d599..796b3ae5 100644 --- a/content/modules/flow-ui/pages/views/view-events.adoc +++ b/content/modules/flow-ui/pages/views/view-events.adoc @@ -208,7 +208,7 @@ image::views/close-standard-view.svg[align="center"] На следующей диаграмме показан процесс открытия xref:views/view-classes.adoc#standard-detail-view[экрана деталей]: -image::views/open-detail-view.svg[align="center"] +image::views/open-detail-view.svg[align="center",role=light-background] [[closing-entity-detail-view]] === Закрытие экрана деталей сущности diff --git a/content/supplemental/css/dropdown-menu.css b/content/supplemental/css/dropdown-menu.css index 2446b5b9..d31339b3 100644 --- a/content/supplemental/css/dropdown-menu.css +++ b/content/supplemental/css/dropdown-menu.css @@ -1,93 +1,245 @@ -/* Same as for `.navbar-brand .navbar-item:first-child` */ +/* Header menus: the version menu (js/dropdown-menu.js) and the color theme menu (js/theme-menu.js). */ + .navbar-item-dropdown { - align-self: center; - padding: 0; - font-size: 1rem; - line-height: 1; + align-self: center; + padding: 0; + font-size: 1rem; + line-height: 1; } -@media screen and (max-width: 420px) { - .navbar-item-dropdown { - font-size: .75rem; - } - - .version-dropdown-icon { - width: 0.5rem; - height: 0.5rem; - } - - .version-dropdown-menu { - padding: 0.5rem 0; - margin: 0.25rem 0; - } - - .version-dropdown-item { - padding: 0.2rem .75rem; - } +.version-dropdown-toggle { + position: relative; + display: flex; + gap: 0.4rem; + align-items: center; + padding: 0.35rem 0.55rem 0.35rem 0.65rem; + border: 0; + border-radius: var(--radius-md); + background: var(--color-accent-tint); + color: var(--color-accent); + font: inherit; + font-size: 0.8rem; + font-weight: 600; + line-height: inherit; } -@media screen and (max-width: 340px) { - .navbar-item.navbar-item-dropdown { - display: none; - } +.version-dropdown-toggle:hover { + background: var(--color-accent-line); } -.version-dropdown-toggle { - color: inherit; - background: transparent; - border: none; - outline: none; - line-height: inherit; - padding: 0; - position: relative; - display: flex; - align-items: center; +.version-dropdown-icon { + width: 0.6rem; + height: 0.6rem; + color: inherit; } .version-dropdown-toggle.opened .version-dropdown-icon { - transform: rotate(180deg); + transform: rotate(180deg); } -.version-dropdown-icon { - color: inherit; - width: 0.75rem; - height: 0.75rem; - margin-left: 0.5rem; - transition: all .1s ease-in; +@media (prefers-reduced-motion: no-preference) { + .version-dropdown-icon { + transition: transform 0.1s ease-in; + } } -.version-dropdown-menu { - position: absolute; - z-index: 1000; - display: none; - padding: 0.75rem 0; - margin: 0.5rem 0; - text-align: left; - list-style: none; - background-color: #FFFFFF; - background-clip: padding-box; - border: 1px solid #E1E1E1; - border-radius: 0.25rem; +/* the panel of both menus */ +.version-dropdown-menu, +.theme-menu-list { + position: absolute; + z-index: 1000; + display: none; + min-width: 10rem; + margin: 0.5rem 0 0; + padding: 0.375rem; + border: 1px solid var(--color-line); + border-radius: var(--radius-lg); + background-color: var(--color-surface); + box-shadow: var(--shadow-menu); + list-style: none; + text-align: left; } -.version-dropdown-menu.opened { - display: block; +.version-dropdown-menu.opened, +.theme-menu-list.opened { + display: block; } .version-dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1rem; - clear: both; - font-weight: 400; - color: #424242; - text-align: inherit; - text-decoration: none; - white-space: nowrap; - background-color: transparent; - border: 0; + display: block; + padding: 0.45rem 0.625rem; + border-radius: 5px; + color: var(--color-text); + font-size: 0.8rem; + font-weight: 400; + text-decoration: none; + white-space: nowrap; } .version-dropdown-item:hover { - text-decoration: underline; -} \ No newline at end of file + background: var(--color-surface-hover); + text-decoration: none; +} + +/* the theme menu: a header icon button, then a hairline before the header links */ +.theme-menu { + position: relative; + display: flex; + align-items: center; +} + +/* a border, so forced colors keep it */ +.theme-menu::after { + content: ""; + height: 1.25rem; + margin: 0 0.25rem 0 0.5rem; + border-left: 1px solid var(--color-line); +} + +/* the attributes come from the inline theme script; without JavaScript the menu could not work */ +:root:not([data-theme]) .theme-menu { + display: none; +} + +.theme-menu-toggle { + padding: 0; + border: 0; + background: transparent; + font: inherit; + cursor: pointer; +} + +.theme-menu-toggle[aria-expanded="true"] { + background: var(--navbar_hover-background); +} + +/* the icon shows the chosen mode; data-theme-preference is set before the header is painted */ +.theme-menu-toggle::before { + content: ""; + width: 1.25rem; + height: 1.25rem; + background-color: currentColor; + mask: var(--icon-sun-moon) center / contain no-repeat; +} + +:root[data-theme-preference="light"] .theme-menu-toggle::before { + mask-image: var(--icon-sun); +} + +:root[data-theme-preference="dark"] .theme-menu-toggle::before { + mask-image: var(--icon-moon); +} + +.theme-menu-list { + top: 100%; + left: 0; +} + +.theme-menu-item { + display: flex; + gap: 0.625rem; + align-items: center; + width: 100%; + padding: 0.45rem 0.625rem; + border: 0; + border-radius: var(--radius-md); + background: transparent; + color: var(--color-text); + font: inherit; + font-size: 0.8rem; + line-height: 1.2; + text-align: left; + white-space: nowrap; + cursor: pointer; +} + +/* After a click the script focuses the checked item. With :focus it would stay highlighted next to the hovered one, + so the rule uses :focus-visible. */ +.theme-menu-item:hover, +.theme-menu-item:focus-visible { + background: var(--color-surface-hover); +} + +/* the items fill the panel, where a ring outside the box would touch the neighbors: it goes inside */ +.theme-menu-item:focus-visible { + outline-offset: -2px; +} + +.theme-menu-item::before, +.theme-menu-item::after { + content: ""; + flex: none; + width: 1rem; + height: 1rem; + background-color: var(--color-text-muted); + mask: var(--icon-sun-moon) center / contain no-repeat; +} + +.theme-menu-item[data-theme-option="light"]::before { + mask-image: var(--icon-sun); +} + +.theme-menu-item[data-theme-option="dark"]::before { + mask-image: var(--icon-moon); +} + +.theme-menu-item::after { + margin-left: auto; + mask-image: var(--icon-check); + visibility: hidden; +} + +.theme-menu-item[aria-checked="true"] { + color: var(--color-accent); + font-weight: 600; +} + +.theme-menu-item[aria-checked="true"]::before, +.theme-menu-item[aria-checked="true"]::after { + background-color: var(--color-accent); +} + +.theme-menu-item[aria-checked="true"]::after { + visibility: visible; +} + +@media screen and (max-width: 420px) { + .navbar-item-dropdown { + font-size: 0.75rem; + } + + .version-dropdown-menu { + margin: 0.25rem 0; + padding: 0.25rem; + } +} + +@media screen and (max-width: 340px) { + .navbar-item.navbar-item-dropdown { + display: none; + } +} + +@media (forced-colors: active) { + .version-dropdown-toggle { + border: 1px solid ButtonText; + } + + .version-dropdown-menu, + .theme-menu-list { + border-color: CanvasText; + } + + /* mask icons carry meaning: they opt out and take a system color */ + .theme-menu-toggle::before, + .theme-menu-item::before, + .theme-menu-item[aria-checked="true"]::before { + forced-color-adjust: none; + background-color: ButtonText; + } + + .theme-menu-item[aria-checked="true"]::after { + forced-color-adjust: none; + background-color: Highlight; + } +} diff --git a/content/supplemental/css/overrides.css b/content/supplemental/css/overrides.css deleted file mode 100644 index 89ac05b4..00000000 --- a/content/supplemental/css/overrides.css +++ /dev/null @@ -1,142 +0,0 @@ -/* This file contains CSS rules that override the rules defined by Antora Default UI */ - -.doc { - hyphens: none; -} - -a.live-demo-btn { - background-color: #fdcb6e; - text-decoration: none; - padding: 8px 20px; - color: #32346b; - border-radius: 6px; - font-weight: bold; - margin-left: 20px; - margin-bottom: 10px; -} - -a.live-demo-btn:hover { - background-color: #ffd588; -} - -a.live-demo-btn:active, a.live-demo-btn:focus { - outline: none; -} - -.jmix-ui-live-demo-container { - float: right; - padding: 1px; -} - -.doc h1, .doc h2, .doc h3, .doc h4, .doc h5, .doc h6 { - color: #342a98; -} - -.doc .paragraph.since { - margin-top: 0.5rem; -} - -.doc .paragraph.since p { - display: inline-block; - margin: 0; - padding: 0.15em 0.55em; - border-radius: 6px; - background: #eeecff; - color: #625ba5; - font-size: 0.75rem; - font-weight: 500; - letter-spacing: normal; - line-height: 1.4; - white-space: nowrap; -} - -.doc pre.highlight code { - font-size: 0.8rem; -} - -nav.navbar { - background: #17124B; -} - -a, .doc a, .doc a:hover { - color: #342a98; -} - -.doc .admonitionblock.addon-component td.icon i { - background-color: #342a98; - color: #fff; -} - -.doc .admonitionblock.addon-component td.icon i::after { - content: "Установите дополнение"; -} - -.doc .admonitionblock.addon-component + .jmix-ui-live-demo-container { - margin-top: 0.5rem; -} - -a.vaadin-docs-btn { - background-color: #2486f9; - text-decoration: none; - padding: 6px 15px; - color: #fdfdfd; - border-radius: 6px; - font-weight: bold; - font-size: smaller; - margin-left: 20px; - margin-bottom: 10px; -} - -a.vaadin-docs-btn:hover { - background-color: #3890f8; - color: #fdfdfd; -} - -a.vaadin-docs-btn:active, a.vaadin-docs-btn:focus { - outline: none; -} - -a.mdn-docs-btn { - background-color: #575757; - text-decoration: none; - padding: 6px 15px; - color: #f8f8f9; - border-radius: 6px; - font-weight: bold; - font-size: smaller; - margin-left: 20px; - margin-bottom: 10px; -} - -a.mdn-docs-btn:hover { - background-color: #727272; - color: #f8f8f9; -} - -a.mdn-docs-btn:active, a.mdn-docs-btn:focus { - outline: none; -} - -a.echarts-docs-btn { - background-color: #B03A5B; - text-decoration: none; - padding: 6px 15px; - color: #fdfdfd; - border-radius: 6px; - font-weight: bold; - font-size: smaller; - margin-left: 20px; - margin-bottom: 10px; -} - -a.echarts-docs-btn:hover { - background-color: #B03A5B; - color: #fdfdfd; -} - -a.echarts-docs-btn:active, a.echarts-docs-btn:focus { - outline: none; -} - -nav.pagination span.prev::before { content: "Назад" !important; } -nav.pagination span.next::before { content: "Вперед" !important; } diff --git a/content/supplemental/css/search.css b/content/supplemental/css/search.css index dc229fa6..b16a00cd 100644 --- a/content/supplemental/css/search.css +++ b/content/supplemental/css/search.css @@ -1,83 +1,101 @@ -.navbar-brand .navbar-item + .navbar-item { - flex-grow: 1; - justify-content: flex-end; -} +/* Search field in the header and the Lunr search results (@jmix-framework/lunr-extension). */ -.navbar-brand .vertical-line { - margin: .5rem 1rem; - border-left: 1px solid #FFF; +.search-field { + position: relative; + display: inline-flex; + align-items: center; } -@media screen and (min-width: 1024px) { - .navbar-brand { - flex-grow: 1; - } - - .navbar-menu { - flex-grow: 0; - } +.search-field::before { + content: ""; + position: absolute; + left: 0.65rem; + width: 0.9rem; + height: 0.9rem; + background-color: var(--color-text-muted); + mask: var(--icon-search) center / contain no-repeat; + pointer-events: none; } #search-input { - color: #333; - font-family: inherit; - font-size: 0.95rem; - width: 150px; - border: 1px solid #dbdbdb; - border-radius: 0.1em; + width: 18rem; + height: 2.25rem; + padding: 0 2.1rem; + border: 1px solid var(--color-control-border); + border-radius: var(--radius-lg); + background: var(--color-surface-subtle); + color: var(--color-text); + font: inherit; + font-size: 0.8rem; line-height: 1.5; - padding: 0 0.25em; } -@media screen and (max-width: 1023px) { +#search-input::placeholder { + color: var(--color-text-muted); + opacity: 1; +} + +#search-input:hover { + background: var(--color-surface-hover); +} + +#search-input:focus { + border-color: var(--color-accent); + background: var(--color-surface); +} + +.search-kbd { + position: absolute; + right: 0.55rem; + padding: 0 0.35rem; + border: 1px solid var(--color-line-strong); + border-radius: var(--radius-sm); + color: var(--color-text-muted); + font: 400 0.68rem/1.35 var(--monospace-font-family); + pointer-events: none; +} + +#search-input:focus + .search-kbd { + display: none; +} + +@media screen and (max-width: 1023.5px) { + .search-field, #search-input { - margin-left: 4px; - margin-right: 4px; width: 100%; } - .topbar-nav .navbar-end { - display: flex; - justify-content: center; - } - - div.header-btn, .navbar-menu { - background-color: #17124b; + #search-input { + /* 16px or more, or iOS Safari zooms in when the field gets focus (the old inline style did this) */ + font-size: 1rem; } - .header-btn { - justify-content: center; - flex-direction: row; - flex-wrap: wrap; - margin-left: 20px; + .search-kbd { + /* the / shortcut is meant for keyboards, so the hint stays on wide screens */ + display: none; } } .search-result-dropdown-menu { position: absolute; z-index: 100; - display: block; + top: 100%; right: 0; left: inherit; - top: 100%; - border-radius: 4px; - margin: 6px 0 0; - padding: 0; - text-align: left; + display: block; + min-width: 500px; + max-width: 600px; height: auto; - background: transparent; + margin: 0.5rem 0 0; + padding: 0; border: none; - max-width: 600px; - min-width: 500px; - box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1); + border-radius: var(--radius-lg); + background: transparent; + box-shadow: var(--shadow-menu); + text-align: left; } @media screen and (max-width: 768px) { - .navbar-brand .navbar-item + .navbar-item { - padding-left: 0; - padding-right: 0; - } - .search-result-dropdown-menu { min-width: calc(100vw - 3.75rem); } @@ -85,149 +103,86 @@ .search-result-dataset { position: relative; - border: 1px solid #d9d9d9; - background: #fff; - border-radius: 4px; overflow: auto; - padding: 0 8px 8px; max-height: calc(100vh - 5.25rem); - color: #333; + padding: 0.25rem 0.75rem 0.75rem; + border: 1px solid var(--color-line); + border-radius: var(--radius-lg); + background: var(--color-surface); + color: var(--color-text); +} + +.search-result-component-header { + padding: 0.5rem 0 0.25rem; + color: var(--color-text-muted); + font-size: 0.75rem; + font-weight: 500; } .search-result-highlight { - color: #174d8c; - background: rgba(143, 187, 237, 0.1); - padding: .1em .05em; + padding: 0.1em 0.05em; + background: var(--color-accent-tint); + color: var(--color-accent); + font-weight: 600; } .search-result-item { display: flex; + margin: 0.5rem 0; font-size: 1rem; - margin-bottom: 0.5rem; - margin-top: 0.5rem; } .search-result-document-title { + position: relative; width: 33%; - border-right: 1px solid #ddd; - color: #a4a7ae; - font-size: 0.8rem; padding: 0.25rem 0.5rem 0.25rem 0; + border-right: 1px solid var(--color-line); + color: var(--color-text-muted); + font-size: 0.8rem; text-align: right; - position: relative; - word-wrap: break-word; + overflow-wrap: break-word; } .search-result-document-hit { flex: 1; + color: var(--color-text); font-size: 0.75em; - color: #02060c; - font-weight: 700; + font-weight: 400; } .search-result-document-hit > a { - color: inherit; display: block; - padding: 0.5rem 0 0.5rem 1rem; margin-bottom: 0.25rem; + padding: 0.5rem 0 0.5rem 1rem; + border-radius: var(--radius-md); + color: inherit; } .search-result-document-hit > a:hover { - background-color: rgba(69, 142, 225, 0.05); -} - -.header-btn { - display: flex; - margin-right: 20px; - text-align: center; -} - -.header-link, .header-purple-link { - display: inline-block; - padding: 12px 30px; - margin-top: 11px; - margin-bottom: 11px; - font-weight: 600; - font-size: 14px; - border-radius: 6px; + background: var(--color-surface-hover); text-decoration: none; - outline: none; - cursor: pointer; -} - -.header-link { - color: #17124b; - background: #fdb42b; -} - -.header-purple-link { - padding: 10px 30px; - color: white; - background-color: #17124b; -} - -.header-link:hover, .header-purple-link:hover { - text-decoration: underline; -} - -.navbar-brand .navbar-item:first-child { - font-size: 1rem; } -@media screen and (max-width: 420px) { - .navbar-brand .navbar-item:first-child { - font-size: .75rem; +@media screen and (max-width: 1023.5px) { + /* the menu panel scrolls on small screens and would clip the results: let them hang over the page below it */ + .navbar-menu { + overflow: visible; } -} -@media screen and (max-width: 340px) { - .navbar-brand .vertical-line { - display: none; + /* the panel starts lower here, below the field in the open menu, so it gets less height */ + .search-result-dataset { + max-height: calc(100vh - 8rem); } } -a.jmix-link, a.jmix-docs-en-link, a.git-link, a.ai-assistant-link { - font-size: 0; - padding-left: 2px; - padding-right: 10px; -} - -:is(a.ai-assistant-link, a.jmix-docs-en-link, a.git-link, a.jmix-link) img { - margin-left: 0; -} - -:is(a.ai-assistant-link, a.jmix-docs-en-link, a.git-link, a.jmix-link):hover img { - transform: scale(1.07); -} - -.ai-assistant-link, .jmix-docs-en-link, .git-link, .jmix-link { - margin-right: 4px; -} - -div.header-btn a img { - height: 1.25rem; - vertical-align: text-bottom; - margin-left: 8px; - height: 1.25rem; - display: flex; -} - -a.ai-assistant-link { - margin-right: 4px; -} - -a.ai-assistant-link img { - content: url("../img/jmix-ai-assistant-icon.svg"); -} - -a.git-link img { - content: url("../img/git-icon.svg"); -} +@media (forced-colors: active) { + #search-input, + .search-result-dataset { + border-color: CanvasText; + } -a.jmix-docs-en-link img { - content: url("../img/jmix-docs-en-icon.svg"); + .search-field::before { + forced-color-adjust: none; + background-color: GrayText; + } } - -a.jmix-link img { - content: url("../img/jmix-icon.svg"); -} \ No newline at end of file diff --git a/content/supplemental/css/site.css b/content/supplemental/css/site.css new file mode 100644 index 00000000..23bb5c11 --- /dev/null +++ b/content/supplemental/css/site.css @@ -0,0 +1,4013 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL + * was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Stylesheet of the Jmix docs UI. It replaces css/site.css of the Antora default UI bundle (ui/ui-bundle.zip). + * + * Part 1 is src/css of antora-ui-default at revision 0e38223a, the revision of the bundle, concatenated in the + * order of its site.css; vars.css lives in tokens.css. Part 1 has three kinds of edits: the bundle typeface + * sections are replaced by the Typefaces section of part 2, the focus outline resets are removed, and color + * literals are replaced with tokens. ui/README.md describes how to port upstream changes. Part 2 holds the Jmix + * styles and overrides part 1 where the design differs. Colors come only from tokens.css + * (node tools/check-css.mjs). + */ + +/* ==== Part 1: Antora default UI ==== */ + +/* ---- upstream: typeface-roboto.css ---- */ + +/* replaced by part 2, "Typefaces" */ + +/* ---- upstream: typeface-roboto-mono.css ---- */ + +/* replaced by part 2, "Typefaces" */ + +/* ---- upstream: base.css ---- */ + +*, +*::before, +*::after { + box-sizing: inherit; +} + +html { + box-sizing: border-box; + font-size: var(--body-font-size); + height: 100%; + scroll-behavior: smooth; +} + +@media screen and (min-width: 1024px) { + html { + font-size: var(--body-font-size--desktop); + } +} + +body { + background: var(--body-background); + color: var(--body-font-color); + font-family: var(--body-font-family); + line-height: var(--body-line-height); + margin: 0; + tab-size: 4; + word-wrap: anywhere; /* aka overflow-wrap; used when hyphens are disabled or aren't sufficient */ +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:active { + background-color: none; +} + +code, +kbd, +pre { + font-family: var(--monospace-font-family); +} + +b, +dt, +strong, +th { + font-weight: var(--body-font-weight-bold); +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +em em { /* stylelint-disable-line */ + font-style: normal; +} + +strong strong { /* stylelint-disable-line */ + font-weight: normal; +} + +button { + cursor: pointer; + font-family: inherit; + font-size: 1em; + line-height: var(--body-line-height); + margin: 0; +} + +button::-moz-focus-inner { + border: none; + padding: 0; +} + +summary { + cursor: pointer; + -webkit-tap-highlight-color: transparent; +} + +table { + border-collapse: collapse; + word-wrap: normal; /* table widths aren't computed as expected when word-wrap is enabled */ +} + +object[type="image/svg+xml"]:not([width]) { + width: fit-content; +} + +.hide, +.is-hidden { + display: none !important; +} + +::placeholder { + opacity: 0.5; +} + +@media (pointer: fine) { + @supports (scrollbar-width: thin) { + html { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-track-color); + } + + body * { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-color) transparent; + } + } + + html::-webkit-scrollbar { + background-color: var(--scrollbar-track-color); + height: 12px; + width: 12px; + } + + body ::-webkit-scrollbar { + height: 6px; + width: 6px; + } + + ::-webkit-scrollbar-thumb { + background-clip: padding-box; + background-color: var(--scrollbar-thumb-color); + border: 3px solid transparent; + border-radius: 12px; + } + + body ::-webkit-scrollbar-thumb { + border-width: 1.75px; + border-radius: 6px; + } + + ::-webkit-scrollbar-thumb:hover { + background-color: var(--scrollbar_hover-thumb-color); + } +} + +/* ---- upstream: body.css ---- */ + +@media screen and (min-width: 1024px) { + .body { + display: flex; + } +} + +/* ---- upstream: nav.css ---- */ + +@media screen and (max-width: 1023.5px) { + html.is-clipped--nav { + overflow-y: hidden; + } +} + +.nav-container { + position: fixed; + top: var(--navbar-height); + left: 0; + width: 100%; + font-size: calc(17 / var(--rem-base) * 1rem); + z-index: var(--z-index-nav); + visibility: hidden; +} + +@media screen and (min-width: 769px) { + .nav-container { + width: var(--nav-width); + } +} + +@media screen and (min-width: 1024px) { + .nav-container { + font-size: calc(15.5 / var(--rem-base) * 1rem); + flex: none; + position: static; + top: 0; + visibility: visible; + } +} + +.nav-container.is-active { + visibility: visible; +} + +.nav { + background: var(--nav-background); + position: relative; + top: var(--toolbar-height); + height: var(--nav-height); +} + +@media screen and (min-width: 769px) { + .nav { + box-shadow: 0.5px 0 3px var(--nav-border-color); + } +} + +@media screen and (min-width: 1024px) { + .nav { + top: var(--navbar-height); + box-shadow: none; + position: sticky; + height: var(--nav-height--desktop); + } +} + +.nav a { + color: inherit; +} + +.nav .panels { + display: flex; + flex-direction: column; + height: inherit; +} + +.nav-panel-menu { + overflow-y: scroll; + overscroll-behavior: none; + height: var(--nav-panel-menu-height); +} + +.nav-panel-menu:only-child { + height: 100%; +} + +.nav-panel-menu:not(.is-active) .nav-menu { + opacity: 0.75; +} + +.nav-panel-menu:not(.is-active)::after { + content: ""; + background: var(--color-overlay); + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.nav-menu { + min-height: 100%; + padding: 0.5rem 0.75rem; + line-height: var(--nav-line-height); + position: relative; +} + +.nav-menu-toggle { + background: transparent url(../img/octicons-16.svg#view-unfold) no-repeat center / 100% 100%; + border: none; + float: right; + height: 1em; + margin-right: -0.5rem; + opacity: 0.75; + padding: 0; + position: sticky; + top: calc((var(--nav-line-height) - 1 + 0.5) * 1rem); + visibility: hidden; + width: 1em; +} + +.nav-menu-toggle.is-active { + background-image: url(../img/octicons-16.svg#view-fold); +} + +.nav-panel-menu.is-active:hover .nav-menu-toggle { + visibility: visible; +} + +.nav-menu h3.title { + color: var(--nav-heading-font-color); + font-size: inherit; + font-weight: var(--body-font-weight-bold); + margin: 0; + padding: 0.25em 0 0.125em; +} + +.nav-list { + list-style: none; + margin: 0 0 0 0.75rem; + padding: 0; +} + +.nav-menu > .nav-list + .nav-list { + margin-top: 0.5rem; +} + +.nav-item { + margin-top: 0.5em; +} + +/* adds some breathing room below a nested list */ +.nav-item-toggle ~ .nav-list { + padding-bottom: 0.125rem; +} + +/* matches list without a title */ +.nav-item[data-depth="0"] > .nav-list:first-child { + display: block; + margin: 0; +} + +.nav-item:not(.is-active) > .nav-list { + display: none; +} + +.nav-item-toggle { + background: transparent url(../img/caret.svg) no-repeat center / 50%; + border: none; + line-height: inherit; + padding: 0; + position: absolute; + height: calc(var(--nav-line-height) * 1em); + width: calc(var(--nav-line-height) * 1em); + margin-top: -0.05em; + margin-left: calc(var(--nav-line-height) * -1em); +} + +.nav-item.is-active > .nav-item-toggle { + transform: rotate(90deg); +} + +.is-current-page > .nav-link, +.is-current-page > .nav-text { + font-weight: var(--body-font-weight-bold); +} + +.nav-panel-explore { + background: var(--nav-background); + display: flex; + flex-direction: column; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.nav-panel-explore:not(:first-child) { + top: auto; + max-height: var(--nav-panel-explore-height); +} + +.nav-panel-explore .context { + font-size: calc(15 / var(--rem-base) * 1rem); + flex-shrink: 0; + color: var(--nav-muted-color); + box-shadow: 0 -1px 0 var(--nav-panel-divider-color); + padding: 0 0.5rem; + display: flex; + align-items: center; + justify-content: space-between; + line-height: 1; + height: var(--drawer-height); +} + +.nav-panel-explore:not(:first-child) .context { + cursor: pointer; +} + +.nav-panel-explore .context .version { + display: flex; + align-items: inherit; +} + +.nav-panel-explore .context .version::after { + content: ""; + background: url(../img/chevron.svg) no-repeat center right / auto 100%; + width: 1.25em; + height: 0.75em; +} + +.nav-panel-explore .components { + line-height: var(--nav-line-height); + flex-grow: 1; + box-shadow: inset 0 1px 5px var(--nav-panel-divider-color); + background: var(--nav-secondary-background); + padding: 0.75rem 0.75rem 0 0.75rem; + margin: 0; + overflow-y: scroll; + overscroll-behavior: none; + max-height: 100%; + display: block; +} + +.nav-panel-explore:not(.is-active) .components { + display: none; +} + +.nav-panel-explore .component { + display: block; +} + +.nav-panel-explore .component + .component { + margin-top: 0.75rem; +} + +.nav-panel-explore .component:last-child { + margin-bottom: 0.75rem; +} + +.nav-panel-explore .component .title { + font-weight: var(--body-font-weight-bold); + text-indent: 0.375rem hanging; +} + +.nav-panel-explore .versions { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin: -0.125rem -0.375rem 0 0.375rem; + line-height: 1; + list-style: none; +} + +.nav-panel-explore .component .version { + margin: 0.375rem 0.375rem 0 0; +} + +.nav-panel-explore .component .version a { + background: var(--nav-border-color); + border-radius: 0.25rem; + white-space: nowrap; + padding: 0.25em 0.5em; + display: inherit; + opacity: 0.75; +} + +.nav-panel-explore .component .is-current a { + background: var(--nav-heading-font-color); + color: var(--nav-secondary-background); + font-weight: var(--body-font-weight-bold); + opacity: 1; +} + +/* ---- upstream: main.css ---- */ + +body.-toc aside.toc.sidebar { + display: none; +} + +@media screen and (max-width: 1023.5px) { + aside.toc.sidebar { + display: none; + } + + main > .content { + overflow-x: auto; + } +} + +@media screen and (min-width: 1024px) { + main { + flex: auto; + min-width: 0; /* min-width: 0 required for flexbox to constrain overflowing elements */ + } + + main > .content { + display: flex; + } + + aside.toc.embedded { + display: none; + } + + aside.toc.sidebar { + flex: 0 0 var(--toc-width); + order: 1; + } +} + +@media screen and (min-width: 1216px) { + aside.toc.sidebar { + flex-basis: var(--toc-width--widescreen); + } +} + +/* ---- upstream: toolbar.css ---- */ + +.toolbar { + color: var(--toolbar-font-color); + align-items: center; + background-color: var(--toolbar-background); + box-shadow: 0 1px 0 var(--toolbar-border-color); + display: flex; + font-size: calc(15 / var(--rem-base) * 1rem); + height: var(--toolbar-height); + justify-content: flex-start; + position: sticky; + top: var(--navbar-height); + z-index: var(--z-index-toolbar); +} + +.toolbar a { + color: inherit; +} + +.nav-toggle { + background: url(../img/menu.svg) no-repeat 50% 47.5%; + background-size: 49%; + border: none; + line-height: inherit; + padding: 0; + height: var(--toolbar-height); + width: var(--toolbar-height); + margin-right: -0.25rem; +} + +@media screen and (min-width: 1024px) { + .nav-toggle { + display: none; + } +} + +.nav-toggle.is-active { + background-image: url(../img/back.svg); + background-size: 41.5%; +} + +.home-link { + display: block; + background: url(../img/home-o.svg) no-repeat center; + height: calc(var(--toolbar-height) / 2); + width: calc(var(--toolbar-height) / 2); + margin: calc(var(--toolbar-height) / 4); +} + +.home-link:hover, +.home-link.is-current { + background-image: url(../img/home.svg); +} + +.edit-this-page { + display: none; + padding-right: 0.5rem; +} + +@media screen and (min-width: 1024px) { + .edit-this-page { + display: block; + } +} + +.toolbar .edit-this-page a { + color: var(--toolbar-muted-color); +} + +/* ---- upstream: breadcrumbs.css ---- */ + +.breadcrumbs { + display: none; + flex: 1 1; + padding: 0 0.5rem 0 0.75rem; + line-height: 1.25; +} + +@media screen and (min-width: 1024px) { + .breadcrumbs { + display: block; + } +} + +a + .breadcrumbs { + padding-left: 0.05rem; +} + +.breadcrumbs ul { + display: flex; + flex-wrap: wrap; + margin: 0; + padding: 0; + list-style: none; +} + +.breadcrumbs li { + display: inline; + margin: 0; +} + +.breadcrumbs li::after { + content: "/"; + padding: 0 0.5rem; +} + +.breadcrumbs li:last-of-type::after { + content: none; +} + +/* ---- upstream: page-versions.css ---- */ + +.page-versions { + margin: 0 0.2rem 0 auto; + position: relative; + line-height: 1; +} + +@media screen and (min-width: 1024px) { + .page-versions { + margin-right: 0.7rem; + } +} + +.page-versions .version-menu-toggle { + color: inherit; + background: url(../img/chevron.svg) no-repeat; + background-position: right 0.5rem top 50%; + background-size: auto 0.75em; + border: none; + line-height: inherit; + padding: 0.5rem 1.5rem 0.5rem 0.5rem; + position: relative; + z-index: var(--z-index-page-version-menu); +} + +.page-versions .version-menu { + display: flex; + min-width: 100%; + flex-direction: column; + align-items: flex-end; + background: linear-gradient(to bottom, var(--page-version-menu-background) 0%, var(--page-version-menu-background) 100%) no-repeat; + padding: 1.375rem 1.5rem 0.5rem 0.5rem; + position: absolute; + top: 0; + right: 0; + white-space: nowrap; +} + +.page-versions:not(.is-active) .version-menu { + display: none; +} + +.page-versions .version { + display: block; + padding-top: 0.5rem; +} + +.page-versions .version.is-current { + display: none; +} + +.page-versions .version.is-missing { + color: var(--page-version-missing-font-color); + font-style: italic; + text-decoration: none; +} + +/* ---- upstream: toc.css ---- */ + +.toc-menu { + color: var(--toc-font-color); +} + +.toc.sidebar .toc-menu { + margin-right: 0.75rem; + position: sticky; + top: var(--toc-top); +} + +.toc .toc-menu h3 { + color: var(--toc-heading-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + font-weight: var(--body-font-weight-bold); + line-height: 1.3; + margin: 0 -0.5px; + padding-bottom: 0.25rem; +} + +.toc.sidebar .toc-menu h3 { + display: flex; + flex-direction: column; + height: 2.5rem; + justify-content: flex-end; +} + +.toc .toc-menu ul { + font-size: calc(15 / var(--rem-base) * 1rem); + line-height: var(--toc-line-height); + list-style: none; + margin: 0; + padding: 0; +} + +.toc.sidebar .toc-menu ul { + max-height: var(--toc-height); + overflow-y: auto; + overscroll-behavior: none; +} + +@supports (scrollbar-width: none) { + .toc.sidebar .toc-menu ul { + scrollbar-width: none; + } +} + +.toc .toc-menu ul::-webkit-scrollbar { + width: 0; + height: 0; +} + +@media screen and (min-width: 1024px) { + .toc .toc-menu h3 { + font-size: calc(15 / var(--rem-base) * 1rem); + } + + .toc .toc-menu ul { + font-size: calc(13.5 / var(--rem-base) * 1rem); + } +} + +.toc .toc-menu li { + margin: 0; +} + +.toc .toc-menu li[data-level="2"] a { + padding-left: 1.25rem; +} + +.toc .toc-menu li[data-level="3"] a { + padding-left: 2rem; +} + +.toc .toc-menu a { + color: inherit; + border-left: 2px solid var(--toc-border-color); + display: inline-block; + padding: 0.25rem 0 0.25rem 0.5rem; + text-decoration: none; +} + +.sidebar.toc .toc-menu a { + display: block; +} + +.toc .toc-menu a:hover { + color: var(--link-font-color); +} + +.toc .toc-menu a.is-active { + border-left-color: var(--link-font-color); + color: var(--doc-font-color); +} + +.sidebar.toc .toc-menu a:focus { + background: var(--panel-background); +} + +/* ---- upstream: doc.css ---- */ + +.doc { + color: var(--doc-font-color); + font-size: var(--doc-font-size); + hyphens: auto; + line-height: var(--doc-line-height); + margin: var(--doc-margin); + max-width: var(--doc-max-width); + padding: 0 1rem 4rem; +} + +@media screen and (min-width: 1024px) { + .doc { + flex: auto; + font-size: var(--doc-font-size--desktop); + margin: var(--doc-margin--desktop); + max-width: var(--doc-max-width--desktop); + min-width: 0; + } +} + +.doc h1, +.doc h2, +.doc h3, +.doc h4, +.doc h5, +.doc h6 { + color: var(--heading-font-color); + font-weight: var(--heading-font-weight); + hyphens: none; + line-height: 1.3; + margin: 1rem 0 0; +} + +.doc > h1.page:first-child { + font-size: calc(36 / var(--rem-base) * 1rem); + margin: 1.5rem 0; +} + +@media screen and (min-width: 769px) { + .doc > h1.page:first-child { + margin-top: 2.5rem; + } +} + +.doc > h1.page:first-child + aside.toc.embedded { + margin-top: -0.5rem; +} + +.doc > h2#name + .sectionbody { + margin-top: 1rem; +} + +#preamble + .sect1, +.doc .sect1 + .sect1 { + margin-top: 2rem; +} + +.doc h1.sect0 { + background: var(--abstract-background); + font-size: 1.8em; + margin: 1.5rem -1rem 0; + padding: 0.5rem 1rem; +} + +.doc h2:not(.discrete) { + border-bottom: 1px solid var(--section-divider-color); + margin-left: -1rem; + margin-right: -1rem; + padding: 0.4rem 1rem 0.1rem; +} + +.doc h3:not(.discrete), +.doc h4:not(.discrete) { + font-weight: var(--alt-heading-font-weight); +} + +.doc h1 .anchor, +.doc h2 .anchor, +.doc h3 .anchor, +.doc h4 .anchor, +.doc h5 .anchor, +.doc h6 .anchor { + position: absolute; + text-decoration: none; + width: 1.75ex; + margin-left: -1.5ex; + visibility: hidden; + font-size: 0.8em; + font-weight: normal; + padding-top: 0.05em; +} + +.doc h1 .anchor::before, +.doc h2 .anchor::before, +.doc h3 .anchor::before, +.doc h4 .anchor::before, +.doc h5 .anchor::before, +.doc h6 .anchor::before { + content: "\00a7"; +} + +.doc h1:hover .anchor, +.doc h2:hover .anchor, +.doc h3:hover .anchor, +.doc h4:hover .anchor, +.doc h5:hover .anchor, +.doc h6:hover .anchor { + visibility: visible; +} + +.doc p, +.doc dl { + margin: 0; +} + +.doc a { + color: var(--link-font-color); +} + +.doc a:hover { + color: var(--link_hover-font-color); +} + +.doc a.bare { + hyphens: none; +} + +.doc a.unresolved { + color: var(--link_unresolved-font-color); +} + +.doc i.fa { + hyphens: none; + font-style: normal; +} + +.doc p code, +.doc thead code, +.doc .colist > table code { + color: var(--code-font-color); + background: var(--code-background); + border-radius: 0.25em; + font-size: 0.95em; + padding: 0.125em 0.25em; +} + +.doc code, +.doc pre { + hyphens: none; +} + +.doc pre { + font-size: calc(16 / var(--rem-base) * 1rem); + line-height: 1.5; + margin: 0; +} + +.doc blockquote { + margin: 0; +} + +.doc .paragraph.lead > p { + font-size: calc(19.5 / var(--rem-base) * 1rem); +} + +.doc .right { + float: right; +} + +.doc .left { + float: left; +} + +.doc .float-gap.right { + margin: 0 1rem 1rem 0; +} + +.doc .float-gap.left { + margin: 0 0 1rem 1rem; +} + +.doc .float-group::after { + content: ""; + display: table; + clear: both; +} + +.doc .text-left { + text-align: left; +} + +.doc .text-center { + text-align: center; +} + +.doc .text-right { + text-align: right; +} + +.doc .text-justify { + text-align: justify; +} + +.doc .stretch { + width: 100%; +} + +.doc .big { + font-size: larger; +} + +.doc .small { + font-size: smaller; +} + +.doc .underline { + text-decoration: underline; +} + +.doc .line-through { + text-decoration: line-through; +} + +.doc .paragraph, +.doc .dlist, +.doc .hdlist, +.doc .olist, +.doc .ulist, +.doc .exampleblock, +.doc .imageblock, +.doc .listingblock, +.doc .literalblock, +.doc .tabs, +.doc .sidebarblock, +.doc .verseblock, +.doc .videoblock, +.doc .quoteblock, +.doc .partintro, +.doc details, +.doc hr { + margin: 1rem 0 0; +} + +.doc > table.tableblock, +.doc > table.tableblock + *, +.doc .tablecontainer, +.doc .tablecontainer + *, +.doc :not(.tablecontainer) > table.tableblock, +.doc :not(.tablecontainer) > table.tableblock + * { + margin-top: 1.5rem; +} + +.doc table.tableblock { + font-size: calc(15 / var(--rem-base) * 1rem); +} + +.doc p.tableblock + p.tableblock { + margin-top: 0.5rem; +} + +.doc table.tableblock pre { + font-size: inherit; +} + +.doc td.tableblock > .content { + word-wrap: anywhere; /* aka overflow-wrap; used when hyphens are disabled or aren't sufficient */ +} + +.doc td.tableblock > .content > :first-child { + margin-top: 0; +} + +.doc table.tableblock th, +.doc table.tableblock td { + padding: 0.5rem; +} + +.doc table.tableblock, +.doc table.tableblock > * > tr > * { + border: 0 solid var(--table-border-color); +} + +.doc table.grid-all > * > tr > * { + border-width: 1px; +} + +.doc table.grid-cols > * > tr > * { + border-width: 0 1px; +} + +.doc table.grid-rows > * > tr > * { + border-width: 1px 0; +} + +.doc table.grid-all > thead th, +.doc table.grid-rows > thead th { + border-bottom-width: 2.5px; +} + +.doc table.frame-all { + border-width: 1px; +} + +.doc table.frame-ends { + border-width: 1px 0; +} + +.doc table.frame-sides { + border-width: 0 1px; +} + +.doc table.frame-none > colgroup + * > :first-child > *, +.doc table.frame-sides > colgroup + * > :first-child > * { + border-top-width: 0; +} + +/* NOTE let the grid win in case of frame-none */ +.doc table.frame-sides > :last-child > :last-child > * { + border-bottom-width: 0; +} + +.doc table.frame-none > * > tr > :first-child, +.doc table.frame-ends > * > tr > :first-child { + border-left-width: 0; +} + +.doc table.frame-none > * > tr > :last-child, +.doc table.frame-ends > * > tr > :last-child { + border-right-width: 0; +} + +.doc table.stripes-all > tbody > tr, +.doc table.stripes-odd > tbody > tr:nth-of-type(odd), +.doc table.stripes-even > tbody > tr:nth-of-type(even), +.doc table.stripes-hover > tbody > tr:hover { + background: var(--table-stripe-background); +} + +.doc table.tableblock > tfoot { + background: var(--table-footer-background); +} + +.doc .halign-left { + text-align: left; +} + +.doc .halign-right { + text-align: right; +} + +.doc .halign-center { + text-align: center; +} + +.doc .valign-top { + vertical-align: top; +} + +.doc .valign-bottom { + vertical-align: bottom; +} + +.doc .valign-middle { + vertical-align: middle; +} + +.doc .admonitionblock { + margin: 1.4rem 0 0; +} + +.doc .admonitionblock p, +.doc .admonitionblock td.content { + font-size: calc(16 / var(--rem-base) * 1rem); +} + +.doc .admonitionblock td.content > :not(.title):first-child, +.doc .admonitionblock td.content > .title + * { + margin-top: 0; +} + +.doc .admonitionblock td.content pre { + font-size: calc(15 / var(--rem-base) * 1rem); +} + +.doc .admonitionblock > table { + table-layout: fixed; + position: relative; + width: 100%; +} + +.doc .admonitionblock td.content { + padding: 1rem 1rem 0.75rem; + background: var(--admonition-background); + width: 100%; + word-wrap: anywhere; +} + +.doc .admonitionblock td.icon { + font-size: calc(15 / var(--rem-base) * 1rem); + left: 0; + line-height: 1; + padding: 0; + position: absolute; + top: 0; + transform: translate(-0.5rem, -50%); +} + +.doc .admonitionblock td.icon i { + align-items: center; + border-radius: 0.45rem; + display: inline-flex; + filter: initial; + height: 1.25rem; + padding: 0 0.5rem; + vertical-align: initial; + width: fit-content; +} + +.doc .admonitionblock td.icon i::after { + content: attr(title); + font-weight: var(--admonition-label-font-weight); + font-style: normal; + text-transform: uppercase; +} + +.doc .admonitionblock td.icon i.icon-caution { + background-color: var(--caution-color); + color: var(--caution-on-color); +} + +.doc .admonitionblock td.icon i.icon-important { + background-color: var(--important-color); + color: var(--important-on-color); +} + +.doc .admonitionblock td.icon i.icon-note { + background-color: var(--note-color); + color: var(--note-on-color); +} + +.doc .admonitionblock td.icon i.icon-tip { + background-color: var(--tip-color); + color: var(--tip-on-color); +} + +.doc .admonitionblock td.icon i.icon-warning { + background-color: var(--warning-color); + color: var(--warning-on-color); +} + +.doc .imageblock, +.doc .videoblock { + display: flex; + flex-direction: column; + align-items: center; +} + +.doc .imageblock .content { + align-self: stretch; + text-align: center; +} + +.doc .imageblock.text-left, +.doc .videoblock.text-left { + align-items: flex-start; +} + +.doc .imageblock.text-left .content { + text-align: left; +} + +.doc .imageblock.text-right, +.doc .videoblock.text-right { + align-items: flex-end; +} + +.doc .imageblock.text-right .content { + text-align: right; +} + +.doc .imageblock img, +.doc .imageblock object, +.doc .imageblock svg, +.doc .image > img, +.doc .image > object, +.doc .image > svg { + display: inline-block; + height: auto; + max-width: 100%; + vertical-align: middle; +} + +.doc .image:not(.left):not(.right) > img { + margin-top: -0.2em; +} + +.doc .videoblock iframe, +.doc .videoblock video { + max-width: 100%; + vertical-align: middle; +} + +#preamble .abstract blockquote { + background: var(--abstract-background); + border-left: 5px solid var(--abstract-border-color); + color: var(--abstract-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + padding: 0.75em 1em; +} + +.doc .quoteblock, +.doc .verseblock { + background: var(--quote-background); + border-left: 5px solid var(--quote-border-color); + color: var(--quote-font-color); +} + +.doc .quoteblock { + padding: 0.25rem 2rem 1.25rem; +} + +.doc .quoteblock .attribution { + color: var(--quote-attribution-font-color); + font-size: calc(15 / var(--rem-base) * 1rem); + margin-top: 0.75rem; +} + +.doc .quoteblock blockquote { + margin-top: 1rem; +} + +.doc .quoteblock .paragraph { + font-style: italic; +} + +.doc .quoteblock cite { + padding-left: 1em; +} + +.doc .verseblock { + font-size: 1.15em; + padding: 1rem 2rem; +} + +.doc .verseblock pre { + font-family: inherit; + font-size: inherit; +} + +.doc ol, +.doc ul { + margin: 0; + padding: 0 0 0 2rem; +} + +.doc ul.checklist, +.doc ul.none, +.doc ol.none, +.doc ul.no-bullet, +.doc ol.unnumbered, +.doc ul.unstyled, +.doc ol.unstyled { + list-style-type: none; +} + +.doc ul.no-bullet, +.doc ol.unnumbered { + padding-left: 1.25rem; +} + +.doc ul.unstyled, +.doc ol.unstyled { + padding-left: 0; +} + +.doc ul.circle { + list-style-type: circle; +} + +.doc ul.disc { + list-style-type: disc; +} + +.doc ul.square { + list-style-type: square; +} + +.doc ul.circle ul:not([class]), +.doc ul.disc ul:not([class]), +.doc ul.square ul:not([class]) { + list-style: inherit; +} + +.doc ol.arabic { + list-style-type: decimal; +} + +.doc ol.decimal { + list-style-type: decimal-leading-zero; +} + +.doc ol.loweralpha { + list-style-type: lower-alpha; +} + +.doc ol.upperalpha { + list-style-type: upper-alpha; +} + +.doc ol.lowerroman { + list-style-type: lower-roman; +} + +.doc ol.upperroman { + list-style-type: upper-roman; +} + +.doc ol.lowergreek { + list-style-type: lower-greek; +} + +.doc ul.checklist { + padding-left: 1rem; +} + +.doc ul.checklist p > i.fa-check-square-o:first-child, +.doc ul.checklist p > i.fa-square-o:first-child { + display: inline-flex; + justify-content: center; + width: 1em; +} + +.doc ul.checklist i.fa-check-square-o::before { + content: "\2713"; +} + +.doc ul.checklist i.fa-square-o::before { + content: "\274f"; +} + +.doc .dlist .dlist, +.doc .dlist .olist, +.doc .dlist .ulist, +.doc .olist .dlist, +.doc .olist .olist, +.doc .olist .ulist, +.doc .ulist .dlist, +.doc .ulist .olist, +.doc .ulist .ulist { + margin-top: 0.5rem; +} + +.doc .olist li + li, +.doc .ulist li + li { + margin-top: 0.5rem; +} + +.doc .ulist .listingblock, +.doc .olist .listingblock, +.doc .admonitionblock .listingblock { + padding: 0; +} + +.doc .admonitionblock .title, +.doc .exampleblock .title, +.doc .imageblock .title, +.doc .literalblock .title, +.doc .listingblock .title, +.doc .openblock .title, +.doc .videoblock .title, +.doc table.tableblock caption { + color: var(--caption-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + font-style: var(--caption-font-style); + font-weight: var(--caption-font-weight); + hyphens: none; + letter-spacing: 0.01em; + padding-bottom: 0.075rem; +} + +.doc table.tableblock caption { + text-align: left; +} + +.doc .olist .title, +.doc .ulist .title { + font-style: var(--caption-font-style); + font-weight: var(--caption-font-weight); + margin-bottom: 0.25rem; +} + +.doc .imageblock .title, +.doc .videoblock .title { + margin-top: 0.5rem; + padding-bottom: 0; +} + +.doc details { + margin-left: 1rem; +} + +.doc details > summary { + display: block; + position: relative; + line-height: var(--doc-line-height); + margin-bottom: 0.5rem; +} + +.doc details > summary::-webkit-details-marker { + display: none; +} + +.doc details > summary::before { + content: ""; + border: solid transparent; + border-left-color: currentColor; + border-width: 0.3em 0 0.3em 0.5em; + position: absolute; + top: calc((var(--doc-line-height) * 0.5 - 0.3) * 1em); + left: -1rem; + transform: translateX(15%); +} + +.doc details[open] > summary::before { + border-color: currentColor transparent transparent; + border-width: 0.5rem 0.3rem 0; + transform: translateY(15%); +} + +.doc details > summary::after { + content: ""; + width: 1rem; + height: 1em; + position: absolute; + top: calc((var(--doc-line-height) * 0.5 - 0.5) * 1em); + left: -1rem; +} + +.doc details.result { + margin-top: 0.25rem; +} + +.doc details.result > summary { + color: var(--caption-font-color); + font-style: italic; + margin-bottom: 0; +} + +.doc details.result > .content { + margin-left: -1rem; +} + +.doc .exampleblock > .content, +.doc details.result > .content { + background: var(--example-background); + border: 0.25rem solid var(--example-border-color); + border-radius: 0.5rem; + padding: 0.75rem; +} + +.doc .exampleblock > .content::after, +.doc details.result > .content::after { + content: ""; + display: table; + clear: both; +} + +.doc .exampleblock > .content > :first-child, +.doc details > .content > :first-child { + margin-top: 0; +} + +.doc .sidebarblock { + background: var(--sidebar-background); + border-radius: 0.75rem; + padding: 0.75rem 1.5rem; +} + +.doc .sidebarblock > .content > .title { + font-size: calc(22.5 / var(--rem-base) * 1rem); + font-weight: var(--alt-heading-font-weight); + line-height: 1.3; + margin-bottom: 0.5rem; + text-align: center; +} + +.doc .sidebarblock > .content > .title + *, +.doc .sidebarblock > .content > :not(.title):first-child { + margin-top: 0; +} + +/* NEEDS REVIEW prevent pre in table from causing article to exceed bounds */ +.doc table.tableblock pre, +.doc .listingblock.wrap pre { + white-space: pre-wrap; +} + +.doc pre.highlight > code, +.doc .listingblock pre:not(.highlight), +.doc .literalblock pre { + background: var(--pre-background); + box-shadow: inset 0 0 1.75px var(--pre-border-color); + display: block; + overflow-x: auto; + padding: 0.875em; +} + +.doc .listingblock > .content { + position: relative; +} + +.doc .source-toolbox { + display: flex; + visibility: hidden; + position: absolute; + top: 0.25rem; + right: 0.5rem; + color: var(--pre-annotation-font-color); + font-family: var(--body-font-family); + font-size: calc(13 / var(--rem-base) * 1rem); + line-height: 1; + user-select: none; + white-space: nowrap; + z-index: 1; +} + +.doc .listingblock:hover .source-toolbox { + visibility: visible; +} + +.doc .source-toolbox .source-lang { + text-transform: uppercase; + letter-spacing: 0.075em; +} + +.doc .source-toolbox > :not(:last-child)::after { + content: "|"; + letter-spacing: 0; + padding: 0 1ch; +} + +.doc .source-toolbox .copy-button { + display: flex; + flex-direction: column; + align-items: center; + background: none; + border: none; + color: inherit; + padding: 0; + font-size: inherit; + line-height: inherit; + width: 1em; + height: 1em; +} + +.doc .source-toolbox .copy-icon { + flex: none; + width: inherit; + height: inherit; +} + +.doc .source-toolbox img.copy-icon { + filter: invert(50.2%); +} + +.doc .source-toolbox svg.copy-icon { + fill: currentColor; +} + +.doc .source-toolbox .copy-toast { + flex: none; + position: relative; + display: inline-flex; + justify-content: center; + margin-top: 1em; + background-color: var(--doc-font-color); + border-radius: 0.25em; + padding: 0.5em; + color: var(--color-text-on-accent); + cursor: auto; + opacity: 0; + transition: opacity 0.5s ease 0.5s; +} + +.doc .source-toolbox .copy-toast::after { + content: ""; + position: absolute; + top: 0; + width: 1em; + height: 1em; + border: 0.55em solid transparent; + border-left-color: var(--doc-font-color); + transform: rotate(-90deg) translateX(50%) translateY(50%); + transform-origin: left; +} + +.doc .source-toolbox .copy-button.clicked .copy-toast { + opacity: 1; + transition: none; +} + +.doc .language-console .hljs-meta { + user-select: none; +} + +.doc .dlist dt { + font-style: italic; +} + +.doc .dlist dd { + margin: 0 0 0 1.5rem; +} + +.doc .dlist dd + dt, +.doc .dlist dd > p:first-child { + margin-top: 0.5rem; +} + +.doc td.hdlist1, +.doc td.hdlist2 { + padding: 0.5rem 0 0; + vertical-align: top; +} + +.doc tr:first-child > .hdlist1, +.doc tr:first-child > .hdlist2 { + padding-top: 0; +} + +.doc td.hdlist1 { + font-weight: var(--body-font-weight-bold); + padding-right: 0.25rem; +} + +.doc td.hdlist2 { + padding-left: 0.25rem; +} + +.doc .colist { + font-size: calc(16 / var(--rem-base) * 1rem); + margin: 0.25rem 0 -0.25rem; +} + +.doc .colist > table > tr > :first-child, +.doc .colist > table > tbody > tr > :first-child { + padding: 0.25em 0.5rem 0; + vertical-align: top; +} + +.doc .colist > table > tr > :last-child, +.doc .colist > table > tbody > tr > :last-child { + padding: 0.25rem 0; +} + +.doc .conum[data-value] { + border: 1px solid currentColor; + border-radius: 100%; + display: inline-block; + font-family: var(--body-font-family); + font-size: calc(13.5 / var(--rem-base) * 1rem); + font-style: normal; + line-height: 1.2; + text-align: center; + width: 1.25em; + height: 1.25em; + letter-spacing: -0.25ex; + text-indent: -0.25ex; +} + +.doc .conum[data-value]::after { + content: attr(data-value); +} + +.doc .conum[data-value] + b { + display: none; +} + +.doc hr { + border: solid var(--section-divider-color); + border-width: 2px 0 0; + height: 0; +} + +.doc b.button { + white-space: nowrap; /* effectively ignores hyphens setting */ +} + +.doc b.button::before { + content: "["; + padding-right: 0.25em; +} + +.doc b.button::after { + content: "]"; + padding-left: 0.25em; +} + +.doc kbd { + display: inline-block; + font-size: calc(12 / var(--rem-base) * 1rem); + background: var(--kbd-background); + border: 1px solid var(--kbd-border-color); + border-radius: 0.25em; + box-shadow: 0 1px 0 var(--kbd-border-color), 0 0 0 0.1em var(--body-background) inset; + padding: 0.25em 0.5em; + vertical-align: text-bottom; + white-space: nowrap; /* effectively ignores hyphens setting */ +} + +.doc kbd, +.doc .keyseq { + line-height: 1; +} + +.doc .keyseq { + font-size: calc(16 / var(--rem-base) * 1rem); +} + +.doc .keyseq kbd { + margin: 0 0.125em; +} + +.doc .keyseq kbd:first-child { + margin-left: 0; +} + +.doc .keyseq kbd:last-child { + margin-right: 0; +} + +.doc .menuseq, +.doc .path { + hyphens: none; +} + +.doc .menuseq i.caret::before { + content: "\203a"; + font-size: 1.1em; + font-weight: var(--body-font-weight-bold); + line-height: calc(1 / 1.1); +} + +.doc :not(pre).nowrap { + white-space: nowrap; +} + +.doc .nobreak { + hyphens: none; + word-wrap: normal; +} + +.doc :not(pre).pre-wrap { + white-space: pre-wrap; +} + +#footnotes { + font-size: 0.85em; + line-height: 1.5; + margin: 2rem -0.5rem 0; +} + +.doc td.tableblock > .content #footnotes { + margin: 2rem 0 0; +} + +#footnotes hr { + border-top-width: 1px; + margin-top: 0; + width: 20%; +} + +#footnotes .footnote { + margin: 0.5em 0 0 1em; +} + +#footnotes .footnote + .footnote { + margin-top: 0.25em; +} + +#footnotes .footnote > a:first-of-type { + display: inline-block; + margin-left: -2em; + text-align: right; + width: 1.5em; +} + +/* ---- upstream: pagination.css ---- */ + +nav.pagination { + display: flex; + border-top: 1px solid var(--toolbar-border-color); + line-height: 1; + margin: 2rem -1rem -1rem; + padding: 0.75rem 1rem 0; +} + +nav.pagination span { + display: flex; + flex: 50%; + flex-direction: column; +} + +nav.pagination .prev { + padding-right: 0.5rem; +} + +nav.pagination .next { + margin-left: auto; + padding-left: 0.5rem; + text-align: right; +} + +nav.pagination span::before { + color: var(--toolbar-muted-color); + font-size: 0.75em; + padding-bottom: 0.1em; +} + +nav.pagination .prev::before { + content: "Prev"; +} + +nav.pagination .next::before { + content: "Next"; +} + +nav.pagination a { + font-weight: var(--body-font-weight-bold); + line-height: 1.3; + position: relative; +} + +nav.pagination a::before, +nav.pagination a::after { + color: var(--toolbar-muted-color); + font-weight: normal; + font-size: 1.5em; + line-height: 0.75; + position: absolute; + top: 0; + width: 1rem; +} + +nav.pagination .prev a::before { + content: "\2039"; + transform: translateX(-100%); +} + +nav.pagination .next a::after { + content: "\203a"; +} + +/* ---- upstream: header.css ---- */ + +@media screen and (max-width: 1023.5px) { + html.is-clipped--navbar { + overflow-y: hidden; + } +} + +body { + padding-top: var(--navbar-height); +} + +.navbar { + background: var(--navbar-background); + color: var(--navbar-font-color); + font-size: calc(16 / var(--rem-base) * 1rem); + height: var(--navbar-height); + position: fixed; + top: 0; + width: 100%; + z-index: var(--z-index-navbar); +} + +.navbar a { + text-decoration: none; +} + +.navbar-brand { + display: flex; + flex: auto; + padding-left: 1rem; +} + +.navbar-brand .navbar-item { + color: var(--navbar-font-color); +} + +.navbar-brand .navbar-item:first-child { + align-self: center; + padding: 0; + font-size: calc(22 / var(--rem-base) * 1rem); + flex-wrap: wrap; + line-height: 1; +} + +.navbar-brand .navbar-item:first-child a { + color: inherit; + word-wrap: normal; +} + +.navbar-brand .navbar-item:first-child :not(:last-child) { + padding-right: 0.375rem; +} + +.navbar-brand .navbar-item.search { + flex: auto; + justify-content: flex-end; +} + +#search-input { + color: var(--color-text); + font-family: inherit; + font-size: 0.95rem; + width: 150px; + border: 1px solid var(--color-control-border); + border-radius: 0.1em; + line-height: 1.5; + padding: 0 0.25em; +} + +#search-input:disabled { + background-color: var(--color-surface-hover); + /* disable cursor */ + cursor: not-allowed; + pointer-events: all !important; +} + +#search-input:disabled::placeholder { + color: var(--color-text-muted); +} + +.navbar-burger { + background: none; + border: none; + line-height: 1; + position: relative; + width: 3rem; + padding: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-left: auto; + min-width: 0; +} + +.navbar-burger span { + background-color: var(--navbar-font-color); + height: 1.5px; + width: 1rem; +} + +.navbar-burger:not(.is-active) span { + transition: transform ease-out 0.25s, opacity 0s 0.25s, margin-top ease-out 0.25s 0.25s; +} + +.navbar-burger span + span { + margin-top: 0.25rem; +} + +.navbar-burger.is-active span + span { + margin-top: -1.5px; +} + +.navbar-burger.is-active span:nth-child(1) { + transform: rotate(45deg); +} + +.navbar-burger.is-active span:nth-child(2) { + opacity: 0; +} + +.navbar-burger.is-active span:nth-child(3) { + transform: rotate(-45deg); +} + +.navbar-item, +.navbar-link { + color: var(--navbar-menu-font-color); + display: block; + line-height: var(--doc-line-height); + padding: 0.5rem 1rem; +} + +.navbar-item.has-dropdown { + padding: 0; +} + +.navbar-item .icon { + width: 1.25rem; + height: 1.25rem; + display: block; +} + +.navbar-item .icon img, +.navbar-item .icon svg { + fill: currentColor; + width: inherit; + height: inherit; +} + +.navbar-link { + padding-right: 2.5em; +} + +.navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.navbar-dropdown .navbar-item.has-label { + display: flex; + justify-content: space-between; +} + +.navbar-dropdown .navbar-item small { + color: var(--toolbar-muted-color); + font-size: calc(12 / var(--rem-base) * 1rem); +} + +.navbar-divider { + background-color: var(--navbar-menu-border-color); + border: none; + height: 1px; + margin: 0.25rem 0; +} + +.navbar .button { + display: inline-flex; + align-items: center; + background: var(--navbar-button-background); + border: 1px solid var(--navbar-button-border-color); + border-radius: 0.15rem; + height: 1.75rem; + color: var(--navbar-button-font-color); + padding: 0 0.75em; + white-space: nowrap; +} + +@media screen and (max-width: 768.5px) { + .navbar-brand .navbar-item.search { + padding-left: 0; + padding-right: 0; + } +} + +@media screen and (min-width: 769px) { + .navbar-brand .navbar-item.search { + padding-right: 0; + margin-right: 0.5rem; + } + + #search-input { + width: 200px; + } +} + +@media screen and (max-width: 1023.5px) { + .navbar-brand { + height: inherit; + } + + .navbar-brand .navbar-item { + align-items: center; + display: flex; + } + + .navbar-menu { + background: var(--navbar-menu-background); + box-shadow: var(--shadow-menu); + max-height: var(--body-min-height); + overflow-y: auto; + overscroll-behavior: none; + padding: 0.5rem 0; + } + + .navbar-menu:not(.is-active) { + display: none; + } + + .navbar-menu a.navbar-item:hover, + .navbar-menu .navbar-link:hover { + background: var(--navbar-menu_hover-background); + } +} + +@media screen and (min-width: 1024px) { + .navbar-burger { + display: none; + } + + .navbar, + .navbar-menu, + .navbar-end { + display: flex; + } + + .navbar-item, + .navbar-link { + display: flex; + position: relative; + flex: none; + } + + .navbar-item:not(.has-dropdown), + .navbar-link { + align-items: center; + } + + .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; + } + + .navbar-link::after { + border-width: 0 0 1px 1px; + border-style: solid; + content: ""; + display: block; + height: 0.5em; + pointer-events: none; + position: absolute; + transform: rotate(-45deg); + width: 0.5em; + margin-top: -0.375em; + right: 1.125em; + top: 50%; + } + + .navbar-end > .navbar-item, + .navbar-end .navbar-link { + color: var(--navbar-font-color); + } + + .navbar-end > a.navbar-item:hover, + .navbar-end .navbar-link:hover, + .navbar-end .navbar-item.has-dropdown:hover .navbar-link { + background: var(--navbar_hover-background); + color: var(--navbar-font-color); + } + + .navbar-end .navbar-link::after { + border-color: currentColor; + } + + .navbar-dropdown { + background: var(--navbar-menu-background); + border: 1px solid var(--navbar-menu-border-color); + border-top: none; + border-radius: 0 0 0.25rem 0.25rem; + display: none; + top: 100%; + left: 0; + min-width: 100%; + position: absolute; + } + + .navbar-dropdown .navbar-item { + padding: 0.5rem 3rem 0.5rem 1rem; + white-space: nowrap; + } + + .navbar-dropdown .navbar-item small { + position: relative; + right: -2rem; + } + + .navbar-dropdown .navbar-item:last-child { + border-radius: inherit; + } + + .navbar-dropdown.is-right { + left: auto; + right: 0; + } + + .navbar-dropdown a.navbar-item:hover { + background: var(--navbar-menu_hover-background); + } +} + +/* ---- upstream: footer.css ---- */ + +footer.footer { + background-color: var(--footer-background); + color: var(--footer-font-color); + font-size: calc(15 / var(--rem-base) * 1rem); + line-height: var(--footer-line-height); + padding: 1.5rem; +} + +.footer p { + margin: 0.5rem 0; +} + +.footer a { + color: var(--footer-link-font-color); +} + +/* ---- upstream: highlight.css ---- */ + +/*! Adapted from the GitHub style by Vasily Polovnyov */ +.hljs-comment, +.hljs-quote { + color: var(--syntax-comment); + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-subst { + color: var(--syntax-keyword); + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-number, +.hljs-literal, +.hljs-variable, +.hljs-template-variable, +.hljs-tag .hljs-attr { + color: var(--syntax-number); +} + +.hljs-string, +.hljs-doctag { + color: var(--syntax-string); +} + +.hljs-title, +.hljs-section, +.hljs-selector-id { + color: var(--syntax-function); + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-subst { + font-weight: normal; +} + +.hljs-type, +.hljs-class .hljs-title { + color: var(--code-block-text); + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-tag, +.hljs-name, +.hljs-attribute { + color: var(--syntax-keyword); + font-weight: normal; +} + +.hljs-regexp, +.hljs-link { + color: var(--syntax-string); +} + +.hljs-symbol, +.hljs-bullet { + color: var(--syntax-number); +} + +.hljs-built_in, +.hljs-builtin-name { + color: var(--code-block-text); +} + +.hljs-meta { + color: var(--syntax-annotation); + font-weight: var(--monospace-font-weight-bold); +} + +.hljs-deletion { + background: var(--syntax-removed); +} + +.hljs-addition { + background: var(--syntax-added); +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: var(--monospace-font-weight-bold); +} + +/* ---- upstream: print.css ---- */ + +@page { + margin: 0.5in; +} + +@media print { + .hide-for-print { + display: none !important; + } + + html { + font-size: var(--body-font-size--print); + } + + a { + color: inherit !important; + text-decoration: underline; + } + + a.bare, + a[href^="#"], + a[href^="mailto:"] { + text-decoration: none; + } + + tr, + img, + object, + svg { + page-break-inside: avoid; + } + + thead { + display: table-header-group; + } + + pre { + hyphens: none; + white-space: pre-wrap; + } + + body { + padding-top: 2rem; + } + + .navbar { + background: none; + color: inherit; + position: absolute; + } + + .navbar * { + color: inherit !important; + } + + .navbar > :not(.navbar-brand), + .nav-container, + .toolbar, + aside.toc, + nav.pagination { + display: none; + } + + .doc { + color: inherit; + margin: auto; + max-width: none; + padding-bottom: 2rem; + } + + .doc .admonitionblock td.icon { + color-adjust: exact; + } + + .doc .listingblock code[data-lang]::before { + display: block; + } + + footer.footer { + background: none; + border-top: 1px solid var(--panel-border-color); + color: var(--quote-attribution-font-color); + padding: 0.25rem 0.5rem 0; + } + + .footer * { + color: inherit; + } +} + +/* ==== Part 2: Jmix ==== */ + +/* ---- Typefaces ---- */ +/* Fontsource 5.3.0, OFL-1.1 (font/LICENSE-*.txt). Upright Roboto is one variable file per subset for all weights; + the italic is a static 400 file. */ + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(../font/roboto-latin-wght-normal.woff2) format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(../font/roboto-latin-ext-wght-normal.woff2) format("woff2"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(../font/roboto-cyrillic-wght-normal.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(../font/roboto-latin-400-italic.woff2) format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(../font/roboto-latin-ext-400-italic.woff2) format("woff2"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(../font/roboto-cyrillic-400-italic.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(../font/jetbrains-mono-latin-400-normal.woff2) format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(../font/jetbrains-mono-latin-ext-400-normal.woff2) format("woff2"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(../font/jetbrains-mono-cyrillic-400-normal.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(../font/jetbrains-mono-latin-400-italic.woff2) format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(../font/jetbrains-mono-latin-ext-400-italic.woff2) format("woff2"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url(../font/jetbrains-mono-cyrillic-400-italic.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* ---- Event banner: #jmix-banner.jmix-banner, a .navbar-item inside .navbar-brand after the version dropdown, shown by its event script with an inline style ---- */ + +/* the .navbar-brand prefix ties these rules with part 1's .navbar-brand .navbar-item rules, so source order decides */ + +.navbar-brand .jmix-banner { + display: none; + flex: 1 1 auto; + align-items: center; + align-self: center; + justify-content: center; + min-width: 0; + min-height: 1.8rem; + height: auto; + margin-left: 1rem; + padding: 0.2rem 0.5rem 0.2rem 1rem; + border: 1px solid var(--banner-border); + border-radius: var(--radius-sm); + background-color: var(--banner-background); + color: var(--banner-text); + font-size: 0.85rem; +} + +.navbar-brand .jmix-banner-content { + flex: 1 1 auto; + min-width: 0; + line-height: 1.2; + text-align: center; + white-space: normal; +} + +/* a brand-color dot before the text draws the eye in place of a solid fill; a pseudo-element, so the event markup stays as it is */ +.navbar-brand .jmix-banner-content::before { + content: ""; + display: inline-block; + width: 0.45rem; + height: 0.45rem; + margin-right: 0.5rem; + border-radius: 50%; + background-color: var(--banner-marker); + vertical-align: 0.08em; +} + +.navbar-brand .jmix-banner-link, +.navbar-brand .jmix-banner-link:visited { + color: var(--banner-link); + text-decoration: underline; +} + +.navbar-brand .jmix-banner-link:hover { + color: var(--color-link-hover); +} + +.navbar-brand .jmix-banner-close-button { + display: inline-flex; + align-items: center; + justify-content: center; + flex: none; + width: 1.5rem; + height: 1.5rem; + margin-left: 0.5rem; + padding: 0; + border: none; + border-radius: var(--radius-sm); + background: none; + color: var(--banner-close); + font-size: 1.2rem; + line-height: 1; + cursor: pointer; +} + +.navbar-brand .jmix-banner-close-button:hover { + background-color: var(--banner-border); + color: var(--banner-text); +} + +@media screen and (max-width: 1400px) { + .navbar-brand .jmix-banner { + font-size: 0.8rem; + } +} + +@media screen and (max-width: 1250px) { + .navbar-brand .jmix-banner { + padding: 0.2rem 0.25rem 0.2rem 0.5rem; + font-size: 0.72rem; + } + + .navbar-brand .jmix-banner-close-button { + margin-left: 0.25rem; + font-size: 1rem; + } +} + +@media screen and (max-width: 1150px) { + .navbar-brand .jmix-banner { + font-size: 0.65rem; + } +} + +@media screen and (max-width: 1080px) { + .navbar-brand .jmix-banner { + /* event scripts show the banner with an inline style; only !important hides it on narrow screens */ + display: none !important; + } +} + +/* ---- Content additions: roles and buttons used by the pages ---- */ + +.doc { + hyphens: none; +} + +.jmix-ui-live-demo-container { + float: right; + padding: 1px; +} + +.doc .paragraph.since { + margin-top: 0.5rem; +} + +.doc .paragraph.since p { + display: inline-block; + margin: 0; + padding: 0.15em 0.65em; + border-radius: 999px; + background: var(--color-accent-tint); + color: var(--color-accent); + font-size: 0.75rem; + font-weight: 500; + letter-spacing: normal; + line-height: 1.4; + white-space: nowrap; +} + +.doc .admonitionblock.addon-component + .jmix-ui-live-demo-container { + margin-top: 0.5rem; +} + +a.live-demo-btn, +a.vaadin-docs-btn, +a.mdn-docs-btn, +a.echarts-docs-btn { + margin-left: 20px; + margin-bottom: 10px; + border-radius: var(--radius-md); + font-weight: bold; + text-decoration: none; +} + +a.live-demo-btn { + padding: 8px 20px; + background-color: var(--live-demo-background); + color: var(--live-demo-text); +} + +a.live-demo-btn:hover { + background-color: var(--live-demo-background-hover); + color: var(--live-demo-text); +} + +a.vaadin-docs-btn, +a.mdn-docs-btn, +a.echarts-docs-btn { + padding: 6px 15px; + font-size: smaller; +} + +a.vaadin-docs-btn { + background-color: var(--vaadin-docs-background); + color: var(--vaadin-docs-text); +} + +a.vaadin-docs-btn:hover { + background-color: var(--vaadin-docs-background-hover); + color: var(--vaadin-docs-text); +} + +a.mdn-docs-btn { + background-color: var(--mdn-docs-background); + color: var(--mdn-docs-text); +} + +a.mdn-docs-btn:hover { + background-color: var(--mdn-docs-background-hover); + color: var(--mdn-docs-text); +} + +a.echarts-docs-btn, +a.echarts-docs-btn:hover { + background-color: var(--echarts-docs-background); + color: var(--echarts-docs-text); +} + +@media (forced-colors: active) { + /* their fill is what shows them as buttons and as a pill */ + a.live-demo-btn, + a.vaadin-docs-btn, + a.mdn-docs-btn, + a.echarts-docs-btn { + border: 1px solid LinkText; + } + + .doc .paragraph.since p { + border: 1px solid CanvasText; + } +} + +/* ---- Header ---- */ + +.navbar { + border-bottom: 1px solid var(--color-line); +} + +.navbar-brand .navbar-item:first-child { + font-size: 1rem; + font-weight: 600; + letter-spacing: -0.005em; +} + +.navbar-logo-center { + fill: var(--header-logo-center); +} + +.navbar-brand .vertical-line { + margin: 0.95rem 0.875rem; + border-left: 1px solid var(--color-line); +} + +@media screen and (min-width: 1024px) { + .navbar-brand { + flex-grow: 1; + } + + .navbar-menu { + flex-grow: 0; + } +} + +.header-btn { + display: flex; + gap: 0.25rem; + align-items: center; + margin-right: 0.75rem; +} + +.header-icon-link { + display: grid; + place-items: center; + width: 2.25rem; + height: 2.25rem; + border-radius: var(--radius-lg); + color: var(--header-text); +} + +.header-icon-link:hover { + background: var(--navbar_hover-background); +} + +.header-icon-link svg { + width: auto; + height: 1.25rem; + fill: currentColor; + /* keeps the AI Assistant mask intact; the forced colors block below then names the icon color itself */ + forced-color-adjust: none; +} + +@media screen and (max-width: 1023.5px) { + .header-btn { + flex-wrap: wrap; + justify-content: center; + margin: 0.5rem 0; + } +} + +@media screen and (max-width: 420px) { + .navbar-brand .navbar-item:first-child { + font-size: 0.75rem; + } +} + +@media screen and (max-width: 340px) { + .navbar-brand .vertical-line { + display: none; + } +} + +@media (forced-colors: active) { + /* with forced-color-adjust: none the icon inherits the author color of its link, not the forced one */ + .header-icon-link svg { + color: LinkText; + } + + /* the navy center of the logo would vanish on a dark Canvas */ + .navbar-logo-center { + fill: CanvasText; + } + + /* upstream draws the burger's lines with background-color, which forced colors removes */ + .navbar-burger span { + forced-color-adjust: none; + background-color: ButtonText; + } +} + +/* ---- Accessibility ---- */ + +/* the ring needs room when the browser scrolls a focused element into view (scroll-margin), and + the fixed header and the sticky toolbar cover the top of the window (scroll-padding-top); + site.js scrolls its own fragment jumps with scrollTo, which ignores both */ +:focus-visible { + outline: 2px solid var(--color-focus); + outline-offset: 2px; + scroll-margin: 6px; +} + +html { + scroll-padding-top: calc(var(--navbar-height) + var(--toolbar-height) + 1rem); +} + +/* these fill a scrolling list or touch the window edge, where a ring outside the box is cut off: it goes inside */ +.navbar-burger:focus-visible, +.nav-toggle:focus-visible, +.nav-item-toggle:focus-visible, +.nav-panel-explore .context:focus-visible, +.sidebar.toc .toc-menu a:focus-visible { + outline-offset: -2px; +} + +#main-content:focus { + /* the skip link target is a region, not a control */ + outline: none; +} + +.skip-link { + position: fixed; + z-index: 100; + top: 0.5rem; + left: 0.75rem; + padding: 0.5rem 0.875rem; + border: 1px solid var(--color-line); + border-radius: var(--radius-md); + background: var(--color-surface); + box-shadow: var(--shadow-menu); + color: var(--color-heading); + font-weight: 600; + text-decoration: none; + translate: 0 -200%; +} + +.skip-link:focus-visible { + translate: 0 0; +} + +/* the copy button is visible and reachable by keyboard, not only on hover */ +.doc .source-toolbox { + visibility: visible; +} + +.doc .source-toolbox .copy-icon { + display: none; +} + +.doc .source-toolbox .copy-button::before { + content: ""; + flex: none; + width: 1em; + height: 1em; + background-color: currentColor; + mask: var(--icon-copy) center / contain no-repeat; +} + +/* the explore panel toggle is a button now */ +.nav-panel-explore .context { + width: 100%; + border: 0; + background: transparent; + font: inherit; + text-align: left; +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } +} + +@media (forced-colors: active) { + .doc .source-toolbox .copy-button::before { + forced-color-adjust: none; + background-color: ButtonText; + } +} + +/* ---- Navigation ---- */ + +@media screen and (min-width: 1024px) { + .nav { + border-right: 1px solid var(--color-line); + } +} + +.nav-menu { + padding: 1rem 0.75rem 3rem 1.25rem; +} + +.nav-menu h3.title { + padding: 0 0.5rem 0.375rem; + color: var(--color-heading); + font-size: 0.8rem; + font-weight: 600; +} + +.nav-menu h3.title a:hover { + text-decoration: none; +} + +.nav-item { + margin-top: 1px; +} + +.nav-list { + margin-left: 0.875rem; +} + +.nav-menu > .nav-list { + margin-left: 0.25rem; +} + +/* .nav prefix: upstream .nav a { color: inherit } is (0,1,1) */ +.nav .nav-link, +.nav .nav-text { + display: block; + padding: 0.3rem 0.5rem; + border-radius: var(--radius-md); + color: var(--color-text-nav); +} + +.nav-link:hover { + background: var(--color-surface-hover); + color: var(--color-heading); + text-decoration: none; +} + +.is-current-page > .nav-link { + background: var(--color-accent-tint); + color: var(--color-accent); + font-weight: 600; +} + +.nav-item-toggle { + width: 24px; + height: 24px; + margin: 3px 0 0 -24px; + border-radius: 5px; + background: none; +} + +.nav-item-toggle::before { + content: ""; + display: block; + width: 100%; + height: 100%; + background-color: var(--color-text-muted); + mask: var(--icon-chevron) center / 14px no-repeat; +} + +.nav-item-toggle:hover { + background: var(--color-surface-hover); +} + +/* "expand all" at the top of the menu. Upstream hides it with visibility until the menu is + hovered, which also takes it out of the tab order; here opacity hides it, and visibility + follows the nav, which part 1 hides while it is closed below 1024px. The .nav-menu prefix + beats upstream .nav-menu-toggle.is-active (0,2,0), which sets a background image. */ +.nav-menu .nav-menu-toggle { + width: 24px; + height: 24px; + margin: -2px -0.25rem 0 0.5rem; + border-radius: 5px; + background: none; + visibility: inherit; + opacity: 0; +} + +.nav-menu .nav-menu-toggle::before { + content: ""; + display: block; + width: 100%; + height: 100%; + background-color: var(--color-text-muted); + mask: var(--icon-unfold) center / 16px no-repeat; +} + +.nav-menu .nav-menu-toggle.is-active::before { + mask-image: var(--icon-fold); +} + +.nav-panel-menu.is-active:hover .nav-menu-toggle, +.nav-menu .nav-menu-toggle:focus-visible { + opacity: 1; +} + +.nav-menu .nav-menu-toggle:hover { + background: var(--color-surface-hover); +} + +/* no hover on touch screens: an invisible button would still take taps */ +@media (hover: none) { + .nav-menu .nav-menu-toggle { + opacity: 1; + } +} + +/* explore panel: component and version switcher at the bottom of the nav */ + +/* font-size and line-height again: the button reset in Accessibility (font: inherit) clears part 1's */ +.nav-panel-explore .context { + padding: 0 0.75rem 0 1rem; + border-top: 1px solid var(--color-line); + box-shadow: none; + background: var(--color-surface); + color: var(--color-text-muted); + font-size: 0.8rem; + line-height: 1; + cursor: pointer; +} + +.nav-panel-explore .context:hover { + background: var(--color-surface-hover); + color: var(--color-heading); +} + +.nav-panel-explore .context .title { + color: var(--color-heading); + font-weight: 500; +} + +.nav-panel-explore .context .version::after { + width: 1rem; + height: 1rem; + background: currentColor; + mask: var(--icon-chevron) center / 12px no-repeat; + rotate: -90deg; +} + +.nav-panel-explore.is-active .context .version::after { + rotate: 90deg; +} + +.nav-panel-explore .components { + padding: 0.875rem 1rem 0; + border-top: 1px solid var(--color-line); + box-shadow: none; + background: var(--color-surface-subtle); +} + +.nav-panel-explore .component .title { + color: var(--color-heading); + font-weight: 600; + text-decoration: none; +} + +.nav-panel-explore .versions { + gap: 0.375rem; + margin: 0.5rem 0 0; +} + +.nav-panel-explore .component .version { + margin: 0; +} + +.nav-panel-explore .component .version a { + padding: 0.3em 0.7em; + border: 1px solid var(--color-line-strong); + border-radius: var(--radius-md); + background: var(--color-surface); + color: var(--color-text); + font-size: 0.78rem; + font-weight: 500; + opacity: 1; +} + +.nav-panel-explore .component .version a:hover { + border-color: var(--color-accent); + color: var(--color-accent); + text-decoration: none; +} + +.nav-panel-explore .component .is-current a { + border-color: var(--color-accent); + background: var(--color-accent); + color: var(--color-text-on-accent); +} + +.nav-panel-explore .component .is-current a:hover { + border-color: var(--color-accent); + color: var(--color-text-on-accent); +} + +@media (prefers-reduced-motion: no-preference) { + .nav-item-toggle { + transition: transform 0.15s; + } + + .nav-panel-explore .context .version::after { + transition: rotate 0.15s; + } +} + +@media (forced-colors: active) { + .nav-item-toggle::before, + .nav-menu .nav-menu-toggle::before, + .nav-panel-explore .context .version::after { + forced-color-adjust: none; + background-color: ButtonText; + } + + .is-current-page > .nav-link, + .nav-panel-explore .component .is-current a { + border: 1px solid Highlight; + } + + /* the version pills have a border already; the nav link gives the border's 1px back */ + .is-current-page > .nav-link { + padding: calc(0.3rem - 1px) calc(0.5rem - 1px); + } +} + +/* ---- Toolbar ---- */ + +.toolbar { + border-bottom: 1px solid var(--color-line); + box-shadow: none; + font-size: 0.8rem; +} + +/* the border takes 1px from the content box and the nav toggle (shown below 1024px) is as tall as the + toolbar: it would overflow and slide 0.5px under the fixed header, which covers part of its focus ring */ +.nav-toggle { + height: 100%; +} + +/* the toolbar's nav toggle below 1024px: mask icons instead of upstream's dark menu.svg and + back.svg, so the icon follows the text color and forced colors */ +.nav-toggle, +.nav-toggle.is-active { + background: none; + color: var(--color-text-muted); +} + +.nav-toggle:hover { + color: var(--color-heading); +} + +.nav-toggle::before { + content: ""; + display: block; + width: 1.25rem; + height: 1.25rem; + margin: 0 auto; + background-color: currentColor; + mask: var(--icon-menu) center / contain no-repeat; +} + +.nav-toggle.is-active::before { + mask-image: var(--icon-back); +} + +.home-link, +.home-link.is-current, +.home-link:hover { + display: grid; + place-items: center; + width: 1.75rem; + height: 1.75rem; + margin: 0 0 0 1rem; + border-radius: var(--radius-md); + background: none; +} + +.home-link::before { + content: ""; + width: 1rem; + height: 1rem; + background-color: currentColor; + mask: var(--icon-home) center / contain no-repeat; +} + +.home-link:hover { + background: var(--color-surface-hover); + color: var(--color-heading); +} + +/* .toolbar prefix: upstream a + .breadcrumbs is (0,1,1) */ +.toolbar .breadcrumbs { + padding-left: 0.375rem; +} + +.breadcrumbs li::after { + color: var(--color-line-strong); +} + +.breadcrumbs li:last-of-type { + color: var(--color-text); +} + +.breadcrumbs a:hover { + color: var(--color-heading); +} + +.toolbar .edit-this-page { + padding-right: 1rem; +} + +.toolbar .edit-this-page a { + display: inline-flex; + gap: 0.375rem; + align-items: center; + color: var(--color-text-muted); +} + +.toolbar .edit-this-page a::before { + content: ""; + width: 0.875rem; + height: 0.875rem; + background-color: currentColor; + mask: var(--icon-edit) center / contain no-repeat; +} + +.toolbar .edit-this-page a:hover { + color: var(--color-heading); + text-decoration: none; +} + +@media (forced-colors: active) { + .home-link::before, + .toolbar .edit-this-page a::before { + forced-color-adjust: none; + background-color: LinkText; + } + + .nav-toggle::before { + forced-color-adjust: none; + background-color: ButtonText; + } +} + +/* ---- Table of contents ---- */ + +.toc .toc-menu h3 { + font-weight: 600; +} + +@media screen and (min-width: 1024px) { + .toc .toc-menu h3, + .toc .toc-menu ul { + font-size: 0.78rem; + } +} + +.toc .toc-menu a { + padding: 0.3rem 0 0.3rem 0.75rem; + border-left-width: 1px; + overflow-wrap: break-word; +} + +.toc .toc-menu li[data-level="2"] a { + padding-left: 1.5rem; +} + +.toc .toc-menu li[data-level="3"] a { + padding-left: 2.25rem; +} + +.toc .toc-menu a:hover { + color: var(--color-heading); +} + +.toc .toc-menu a.is-active { + margin-left: -0.5px; + border-left: 2px solid var(--color-accent); + color: var(--color-accent); + font-weight: 500; +} + +@media (forced-colors: active) { + .toc .toc-menu a.is-active { + border-left-color: Highlight; + } +} + +/* ---- Article ---- */ + +.doc p { + text-wrap: pretty; +} + +.doc :is(h1, h2, h3, h4, h5, h6) { + letter-spacing: -0.01em; + text-wrap: balance; +} + +.doc > h1.page:first-child { + margin: 2.25rem 0 1.25rem; + font-size: 2.125rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; +} + +.doc h2:not(.discrete) { + margin: 0; + padding: 0; + border-bottom: 0; + font-size: 1.5rem; + line-height: 1.3; +} + +#preamble + .sect1, +.doc .sect1 + .sect1 { + margin-top: 3rem; +} + +/* the TOC is embedded after the h1 below 1024px; from 1024px up it is hidden, and + would still match it */ +@media screen and (max-width: 1023.5px) { + .doc > aside.toc.embedded + .sect1 { + margin-top: 3rem; + } +} + +.doc h3 { + font-size: 1.1875rem; +} + +.doc .sect2 { + margin-top: 2rem; +} + +.doc h4 { + font-size: 1rem; +} + +.doc :is(h1, h2, h3, h4, h5, h6) .anchor { + color: var(--color-text-muted); + font-weight: 400; +} + +.doc :is(h1, h2, h3, h4, h5, h6) .anchor::before { + content: "#"; +} + +/* links in running text do not rely on color alone */ +.doc a:not(.anchor, [class$="-btn"]) { + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.2em; + text-decoration-color: color-mix(in oklab, currentColor 35%, transparent); +} + +.doc a:not(.anchor, [class$="-btn"]):hover { + text-decoration-color: currentColor; +} + +.doc :is(h1, h2, h3, h4, h5, h6) a:not(.anchor), +.doc .toc a { + text-decoration: none; +} + +/* part 1 fills only p, thead and colist code; this covers code in dt, summary and block titles too */ +.doc :not(pre) > code, +.doc .colist > table code { + padding: 0.1em 0.35em; + border: 1px solid var(--color-line); + border-radius: var(--radius-sm); + background: var(--code-background); + color: var(--code-font-color); + font-size: 0.86em; +} + +.doc :is(h1, h2, h3, h4, h5, h6) code { + padding: 0; + border: 0; + background: none; + color: inherit; +} + +@media (forced-colors: active) { + .doc :not(pre) > code, + .doc .colist > table code { + border-color: GrayText; + } +} + +/* ---- Code blocks ---- */ + +.doc pre { + line-height: 1.6; +} + +/* JetBrains Mono ships programming ligatures; IntelliJ IDEA keeps them off by default, and readers copy this code */ +.doc pre, +.doc code { + font-variant-ligatures: none; +} + +.doc .listingblock pre:not(.highlight), +.doc .literalblock pre, +.doc pre.highlight > code { + padding: 0.9rem 1.125rem; + border: 1px solid var(--color-line); + border-radius: var(--radius-lg); + box-shadow: none; + color: var(--code-block-text); + font-size: 0.78rem; +} + +/* upstream sets the size of a pre in an admonition (.doc .admonitionblock td.content pre, 15px, (0,3,2)) and in a table + cell (.doc table.tableblock pre, inherit, (0,2,2)): the first beats both plain members of the shared rule, the + second only .doc .literalblock pre (0,2,1) */ +.doc :is(.admonitionblock td.content, table.tableblock) :is(.listingblock pre:not(.highlight), .literalblock pre) { + font-size: 0.78rem; +} + +/* most block titles are file names, so a titled block reads as an editor tab */ +.doc .listingblock > .title { + position: relative; + z-index: 1; + top: 1px; + display: inline-block; + margin: 0; + padding: 0.4rem 0.8rem 0.35rem; + border: 1px solid var(--color-line); + border-bottom: 0; + border-radius: var(--radius-lg) var(--radius-lg) 0 0; + background: var(--code-block-background); + color: var(--color-text); + font-size: 0.75rem; + font-style: normal; + font-weight: 500; + letter-spacing: 0; +} + +.doc .listingblock > .title + .content :is(pre.highlight > code, pre:not(.highlight)) { + border-top-left-radius: 0; +} + +.doc .source-toolbox { + top: 0.45rem; + right: 0.5rem; + gap: 0.25rem; + align-items: center; + color: var(--color-text-muted); + font: 400 0.7rem/1 var(--monospace-font-family); +} + +.doc .source-toolbox .source-lang { + letter-spacing: 0; + text-transform: none; +} + +.doc .source-toolbox > :not(:last-child)::after { + content: none; +} + +.doc .source-toolbox .copy-button { + justify-content: center; + width: 1.75rem; + height: 1.75rem; + border-radius: var(--radius-md); + font-size: 1rem; +} + +.doc .source-toolbox .copy-button::before { + width: 0.9rem; + height: 0.9rem; +} + +.doc .source-toolbox .copy-button:hover { + background: var(--color-surface-hover); + color: var(--color-heading); +} + +.doc .source-toolbox .copy-toast { + position: absolute; + top: 100%; + margin-top: 0.375rem; + background: var(--color-heading); + color: var(--color-text-on-accent); + font: 400 0.7rem/1 var(--body-font-family); +} + +.doc .source-toolbox .copy-toast::after { + border-left-color: var(--color-heading); +} + +/* code-toolbox.js marks blocks whose first line would run under the always-visible toolbox: + their code starts below it */ +@media screen { + .doc pre.highlight.first-line-under-toolbox > code { + padding-top: 2.3rem; + } +} + +@media print { + /* a copy button means nothing on paper, and the toolbox would cover printed code */ + .doc .source-toolbox { + display: none; + } +} + +.doc .conum[data-value] { + width: 1.35em; + height: 1.35em; + border: 0; + border-radius: 50%; + background: var(--color-heading); + color: var(--color-text-on-accent); + font: 600 0.68rem/1.35em var(--body-font-family); + letter-spacing: 0; + text-indent: 0; + vertical-align: 0.1em; +} + +.doc pre .conum[data-value] { + font-size: 0.62rem; +} + +.doc .colist { + margin-top: 0.5rem; +} + +.doc .colist > table > tbody > tr > :first-child { + padding-top: 0.3em; +} + +/* syntax colors: highlight.js 10.7.2 classes */ +.doc :is(.hljs-keyword, .hljs-literal, .hljs-selector-tag, .hljs-section) { + color: var(--syntax-keyword); + font-weight: 400; +} + +/* XML and HTML tags: like keywords in IntelliJ's light scheme, yellow in its dark one */ +.doc :is(.hljs-tag, .hljs-name) { + color: var(--syntax-tag); + font-weight: 400; +} + +.doc :is(.hljs-string, .hljs-regexp, .hljs-link) { + color: var(--syntax-string); +} + +.doc :is(.hljs-number, .hljs-symbol, .hljs-bullet) { + color: var(--syntax-number); +} + +.doc :is(.hljs-comment, .hljs-quote) { + color: var(--syntax-comment); + font-style: italic; +} + +.doc .hljs-doctag { + color: var(--syntax-comment); + font-weight: 600; +} + +.doc .hljs-meta { + color: var(--syntax-annotation); + font-weight: 400; +} + +/* the XML prolog and DOCTYPE take the tag color, so a whole XML block stays in one tag color */ +.doc .language-xml .hljs-meta { + color: var(--syntax-tag); +} + +.doc :is(.hljs-title, .hljs-selector-class, .hljs-selector-id) { + color: var(--syntax-function); + font-weight: 400; +} + +/* the class title selector gives every member of this list a higher specificity than .hljs-title above */ +.doc :is(.hljs-class .hljs-title, .hljs-type, .hljs-params, .hljs-built_in, .hljs-builtin-name, .hljs-subst) { + color: var(--code-block-text); + font-weight: 400; +} + +.doc :is(.hljs-variable, .hljs-template-variable) { + color: var(--syntax-field); +} + +.doc .hljs-attr { + color: var(--syntax-attribute); +} + +.doc :is(.language-json, .language-yaml) .hljs-attr { + color: var(--syntax-field); +} + +.doc .language-properties .hljs-attr, +.doc .hljs-attribute { + color: var(--syntax-property-key); +} + +.doc .hljs-addition { + background: var(--syntax-added); +} + +.doc .hljs-deletion { + background: var(--syntax-removed); +} + +.doc .hljs-strong { + font-weight: 600; +} + +.doc .hljs-emphasis { + font-style: italic; +} + +@media (forced-colors: active) { + .doc .conum[data-value] { + border: 1px solid CanvasText; + } + + .doc .listingblock > .title { + border-color: CanvasText; + } +} + +/* ---- Admonitions ---- */ + +.doc .admonitionblock.note { + --adm-color: var(--note-color); + --adm-background: var(--note-background); + --adm-border: var(--note-border-color); + --adm-accent: var(--note-accent); + --adm-icon: var(--icon-note); +} + +.doc .admonitionblock.tip { + --adm-color: var(--tip-color); + --adm-background: var(--tip-background); + --adm-border: var(--tip-border-color); + --adm-accent: var(--tip-accent); + --adm-icon: var(--icon-tip); +} + +.doc .admonitionblock.warning { + --adm-color: var(--warning-color); + --adm-background: var(--warning-background); + --adm-border: var(--warning-border-color); + --adm-accent: var(--warning-accent); + --adm-icon: var(--icon-warning); +} + +.doc .admonitionblock.important { + --adm-color: var(--important-color); + --adm-background: var(--important-background); + --adm-border: var(--important-border-color); + --adm-accent: var(--important-accent); + --adm-icon: var(--icon-important); +} + +.doc .admonitionblock.caution { + --adm-color: var(--caution-color); + --adm-background: var(--caution-background); + --adm-border: var(--caution-border-color); + --adm-accent: var(--caution-accent); + --adm-icon: var(--icon-caution); +} + +/* the add-on role sits on top of NOTE ("admonitionblock note addon-component"), so it comes last */ +.doc .admonitionblock.addon-component { + --adm-color: var(--addon-color); + --adm-background: var(--addon-background); + --adm-border: var(--addon-border-color); + --adm-accent: var(--addon-accent); + --adm-icon: var(--icon-addon); +} + +.doc .admonitionblock { + margin-top: 1.5rem; +} + +.doc .admonitionblock > table, +.doc .admonitionblock > table > tbody, +.doc .admonitionblock > table > tbody > tr { + display: block; +} + +.doc .admonitionblock > table { + padding: 0.75rem 1.125rem 0.875rem 1rem; + border: 1px solid var(--adm-border); + border-left: 4px solid var(--adm-accent); + border-radius: var(--radius-lg); + background: var(--adm-background); +} + +.doc .admonitionblock td.icon { + position: static; + display: block; + padding: 0 0 0.3rem; + transform: none; + font-size: 0.8rem; +} + +/* i.fa matches the specificity of the upstream per-type pill rules (.doc .admonitionblock td.icon i.icon-note) */ +.doc .admonitionblock td.icon i.fa { + gap: 0.4rem; + height: auto; + padding: 0; + border-radius: 0; + background: none; + color: var(--adm-color); +} + +.doc .admonitionblock td.icon i.fa::before { + content: ""; + width: 1.05rem; + height: 1.05rem; + background-color: currentColor; + mask: var(--adm-icon) center / contain no-repeat; +} + +.doc .admonitionblock td.icon i.fa::after { + letter-spacing: 0; + text-transform: none; +} + +.doc .admonitionblock.addon-component td.icon i.fa::after { + content: "Установите дополнение"; +} + +.doc .admonitionblock td.content { + display: block; + padding: 0; + background: none; + font-size: 0.9rem; +} + +.doc .admonitionblock td.content p { + font-size: inherit; +} + +/* the rule above is more specific than the badge rule, so a "Since" badge in an admonition would grow to the content size */ +.doc .admonitionblock td.content .paragraph.since p { + font-size: 0.75rem; +} + +@media (forced-colors: active) { + .doc .admonitionblock td.icon i.fa::before { + forced-color-adjust: none; + background-color: CanvasText; + } +} + +/* ---- Images ---- */ + +/* role="light-background": a diagram drawn with dark lines on a transparent background keeps a light plate, + which the dark theme needs; screenshots bring their own background and stay as they are */ +.doc :is(.imageblock, .image).light-background img { + border-radius: var(--radius-sm); + background-color: var(--image-plate-background); +} + +@media (forced-colors: active) { + /* a dark forced colors palette would replace the plate with Canvas */ + .doc :is(.imageblock, .image).light-background img { + forced-color-adjust: none; + } +} + +/* ---- Tables and other blocks ---- */ + +/* the line colors come from tokens; the authors' grid and frame options keep their effect */ +.doc table.tableblock td, +.doc table.tableblock th { + padding: 0.55rem 0.75rem; +} + +.doc table.tableblock > thead > tr > th { + background: var(--color-surface-subtle); + color: var(--color-heading); + font-weight: 600; +} + +.doc table.grid-all > thead th, +.doc table.grid-rows > thead th { + border-bottom-width: 1px; + border-bottom-color: var(--color-line-strong); +} + +.doc td.hdlist1 { + color: var(--color-heading); +} + +.doc .sidebarblock { + border: 1px solid var(--color-line); + border-radius: var(--radius-lg); +} + +.doc .exampleblock > .content { + border: 1px solid var(--color-line); + border-radius: var(--radius-lg); +} + +.doc details > summary { + color: var(--color-heading); + font-weight: 500; +} + +.doc kbd { + box-shadow: 0 1px 0 var(--color-line-strong); + font-size: 0.72rem; +} + +.doc .quoteblock, +.doc .verseblock { + border-left-width: 3px; +} + +@media (forced-colors: active) { + .doc .sidebarblock, + .doc .exampleblock > .content { + border-color: CanvasText; + } +} + +/* ---- End of page ---- */ + +nav.pagination { + gap: 1rem; + margin: 3rem 0 0; + padding: 0; + border-top: 0; +} + +nav.pagination :is(.prev, .next)::before { + content: none; +} + +nav.pagination .prev, +nav.pagination .next { + padding: 0; +} + +nav.pagination span { + /* half the row minus half the gap: upstream flex: 50% lets a lone card grow to the full row */ + flex: 0 0 calc(50% - 0.5rem); +} + +/* the span is a column flex box and the link keeps its content height: grow it, so both cards are as tall as the taller title */ +nav.pagination span > a { + flex-grow: 1; +} + +/* .doc prefix: the pagination sits inside article.doc, and the running-text underline in Article, + .doc a:not(.anchor, [class$="-btn"]), is (0,2,1) */ +.doc nav.pagination a { + display: block; + padding: 0.75rem 1rem 0.875rem; + border: 1px solid var(--color-line); + border-radius: var(--radius-lg); + color: var(--color-heading); + font-weight: 600; + line-height: 1.35; + text-decoration: none; +} + +.doc nav.pagination a:hover { + border-color: var(--color-accent); + background: var(--color-accent-tint); + color: var(--color-accent); + text-decoration: none; +} + +nav.pagination .prev a::before, +nav.pagination .next a::before { + position: static; + display: block; + width: auto; + padding-bottom: 0.25rem; + transform: none; + color: var(--color-text-muted); + font-size: 0.75rem; + font-weight: 400; + line-height: 1.3; +} + +nav.pagination .prev a::before { + content: "Назад"; +} + +nav.pagination .next a::before { + content: "Вперед"; +} + +nav.pagination .next a::after { + content: none; +} + +@media screen { + footer.footer { + padding: 1.25rem 2rem; + border-top: 1px solid var(--color-line); + font-size: 0.75rem; + } + + .footer p { + margin: 0.25rem 0; + } +} + +@media (forced-colors: active) { + .doc nav.pagination a { + border-color: LinkText; + } +} + +/* ---- Chat widget ---- */ + +/* The DocsBot chat widget, injected by Google Tag Manager, mounts into #docsbotai-root and draws itself for a light + page. color-scheme is inherited, so without this the dark theme would turn the parts it leaves to the browser + (fields, placeholders, scrollbars) dark inside its light panel. */ +#docsbotai-root { + color-scheme: light; +} diff --git a/content/supplemental/css/tokens.css b/content/supplemental/css/tokens.css new file mode 100644 index 00000000..18ded7c5 --- /dev/null +++ b/content/supplemental/css/tokens.css @@ -0,0 +1,382 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL + * was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Custom properties of the docs UI. Started from src/css/vars.css of antora-ui-default at revision 0e38223a; + * tier 3 keeps the upstream names, so part 1 of site.css reads them unchanged. + * + * Tier 1: palette. Tier 2: semantic roles. Tier 3: components. + * Outside this file colors are written only as var(--…) (node tools/check-css.mjs). + * The dark theme is the block at the end of this file (screen only). It sets the tier 2 colors and shadow, and + * the tier 3 colors that must differ in the dark theme; node tools/check-css.mjs checks that it sets every + * --color-* and --shadow-* token. + */ + +:root { + color-scheme: light; + + /* ---- Tier 1: palette ---- */ + + /* brand book */ + --jmix-space: #17124b; + --jmix-fiesta: #fc1264; + --jmix-sun: #fdb42b; + --jmix-sky: #25cde3; + --jmix-grace: #22d685; + + /* accent violet: 700 is the current docs violet, 500 the jmix.io link color, the other steps are derived; + 950, 900 and 300 serve the dark theme */ + --jmix-violet-950: #2b2650; + --jmix-violet-900: #3a3470; + --jmix-violet-800: #261d7d; + --jmix-violet-700: #342a98; + --jmix-violet-500: #7b6dff; + --jmix-violet-300: #a99bff; + --jmix-violet-200: #d3cdf8; + --jmix-violet-50: #f0eeff; + + --gray-900: #2a2c33; + --gray-700: #3a3d46; + --gray-600: #5c606b; + --gray-500: #8a8f99; + --gray-300: #cfd3da; + --gray-200: #e4e6eb; + --gray-100: #eff1f4; + --gray-50: #f6f7f9; + --white: #fff; + --black: #000; + + /* "Ink": the dark theme's grays, with a slight violet cast; derived */ + --ink-950: #17171d; + --ink-900: #1f1f27; + --ink-850: #272730; + --ink-800: #2e2e39; + --ink-700: #3f3f4c; + --ink-500: #6e6e80; + --ink-400: #9e9eb1; + --ink-300: #c6c6d2; + --ink-200: #d8d8e2; + --ink-50: #f2f1f9; + + /* ---- Tier 2: semantic roles ---- */ + + --color-text: var(--gray-900); + --color-heading: var(--jmix-space); + --color-text-nav: var(--gray-700); + --color-text-muted: var(--gray-600); + --color-text-on-accent: var(--white); + --color-link: var(--jmix-violet-700); + --color-link-hover: var(--jmix-violet-800); + --color-accent: var(--jmix-violet-700); + --color-accent-tint: var(--jmix-violet-50); + --color-accent-line: var(--jmix-violet-200); + --color-focus: var(--jmix-violet-700); + --color-surface: var(--white); + --color-surface-subtle: var(--gray-50); + --color-surface-hover: var(--gray-100); + --color-line: var(--gray-200); + --color-line-strong: var(--gray-300); + --color-control-border: var(--gray-500); + --color-overlay: color-mix(in srgb, var(--jmix-space) 30%, transparent); + --shadow-menu: 0 10px 28px color-mix(in srgb, var(--jmix-space) 14%, transparent), 0 2px 6px color-mix(in srgb, var(--jmix-space) 8%, transparent); + + --radius-lg: 8px; + --radius-md: 6px; + --radius-sm: 4px; + + /* ---- Tier 3: components ---- */ + + /* header */ + --header-background: var(--color-surface); + --header-text: var(--color-heading); + --header-logo-center: var(--jmix-space); + + /* code blocks and syntax colors, IntelliJ IDEA Light-like; comment and annotation darkened to 4.5:1 */ + --code-block-background: #f7f8fa; + --code-block-text: #080808; + --inline-code-text: #1f2128; + --syntax-keyword: #0033b3; + --syntax-string: #067d17; + --syntax-number: #1750eb; + --syntax-comment: #6f6f6f; + --syntax-annotation: #7a6a0a; + --syntax-function: #00627a; + --syntax-field: #871094; + --syntax-attribute: #174ad4; + --syntax-property-key: #083080; + /* XML and HTML tags: IntelliJ's light scheme draws them like keywords, its dark scheme in yellow */ + --syntax-tag: #0033b3; + --syntax-added: #e6f4ea; + --syntax-removed: #fce8e6; + + /* admonitions: label and icon, background, border, left edge */ + --note-color: #0a6874; + --note-background: #effbfd; + --note-border-color: #c9eff5; + --note-accent: var(--jmix-sky); + --tip-color: #0d7348; + --tip-background: #effcf5; + --tip-border-color: #c6f0dc; + --tip-accent: var(--jmix-grace); + --warning-color: #8a5300; + --warning-background: #fff8e6; + --warning-border-color: #fbe3ae; + --warning-accent: var(--jmix-sun); + --important-color: #b4104a; + --important-background: #fff1f6; + --important-border-color: #fbcadb; + --important-accent: var(--jmix-fiesta); + --caution-color: #4b3fb8; + --caution-background: #f4f2ff; + --caution-border-color: #dad5fb; + --caution-accent: var(--jmix-violet-500); + --addon-color: var(--jmix-space); + --addon-background: #f4f2ff; + --addon-border-color: #dad5fb; + --addon-accent: var(--jmix-space); + /* upstream names: text of the upstream label pill */ + --caution-on-color: var(--color-text-on-accent); + --important-on-color: var(--color-text-on-accent); + --note-on-color: var(--color-text-on-accent); + --tip-on-color: var(--color-text-on-accent); + --warning-on-color: var(--color-text-on-accent); + + /* event banner and content buttons */ + --banner-background: var(--color-accent-tint); + --banner-border: var(--color-accent-line); + --banner-text: var(--color-text); + --banner-link: var(--color-link); + --banner-close: var(--color-text-muted); + --banner-marker: var(--jmix-fiesta); + --live-demo-background: #fdcb6e; + --live-demo-background-hover: #ffd588; + --live-demo-text: #32346b; + --vaadin-docs-background: #2486f9; + --vaadin-docs-background-hover: #3890f8; + --vaadin-docs-text: #fdfdfd; + --mdn-docs-background: #575757; + --mdn-docs-background-hover: #727272; + --mdn-docs-text: #f8f8f9; + --echarts-docs-background: #b03a5b; + --echarts-docs-text: #fdfdfd; + + /* images: the plate of the light-background role, for diagrams drawn with dark lines on transparency; + white in both themes, so it shows only on the dark one */ + --image-plate-background: var(--white); + + /* mask icons; data URIs because mask images from files are blocked on file:// pages */ + --icon-chevron: url("data:image/svg+xml,"); + --icon-home: url("data:image/svg+xml,"); + --icon-edit: url("data:image/svg+xml,"); + --icon-search: url("data:image/svg+xml,"); + --icon-copy: url("data:image/svg+xml,"); + --icon-note: url("data:image/svg+xml,"); + --icon-tip: url("data:image/svg+xml,"); + --icon-warning: url("data:image/svg+xml,"); + --icon-important: url("data:image/svg+xml,"); + --icon-caution: url("data:image/svg+xml,"); + --icon-addon: url("data:image/svg+xml,"); + --icon-unfold: url("data:image/svg+xml,"); + --icon-fold: url("data:image/svg+xml,"); + --icon-menu: url("data:image/svg+xml,"); + --icon-back: url("data:image/svg+xml,"); + /* sun-moon: Lucide icon (https://lucide.dev/icons/sun-moon), ISC License. + Copyright (c) 2026 Lucide Icons and Contributors + Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby + granted, provided that the above copyright notice and this permission notice appear in all copies. */ + --icon-sun-moon: url("data:image/svg+xml,"); + --icon-sun: url("data:image/svg+xml,"); + --icon-moon: url("data:image/svg+xml,"); + --icon-check: url("data:image/svg+xml,"); + --icon-thumb-up: url("data:image/svg+xml,"); + + /* upstream: fonts */ + --rem-base: 18; /* used to compute rem value from desired pixel value (e.g., calc(18 / var(--rem-base) * 1rem) = 18px) */ + --body-font-size: 1.0625em; /* 17px */ + --body-font-size--desktop: 1.125em; /* 18px */ + --body-font-size--print: 0.9375em; /* 15px */ + --body-line-height: 1.15; + --body-font-color: var(--color-text); + --body-font-family: "Roboto", system-ui, sans-serif; + --body-font-weight-bold: 600; + --monospace-font-family: "JetBrains Mono", ui-monospace, monospace; + --monospace-font-weight-bold: 600; + /* upstream: base */ + --body-background: var(--color-surface); + --panel-background: var(--color-surface-subtle); + --panel-border-color: var(--color-line); + --scrollbar-track-color: var(--color-surface-subtle); + --scrollbar-thumb-color: var(--color-line-strong); + --scrollbar_hover-thumb-color: var(--color-control-border); + /* upstream: navbar */ + --navbar-background: var(--header-background); + --navbar-font-color: var(--header-text); + --navbar_hover-background: var(--color-surface-hover); + --navbar-button-background: var(--color-surface); + --navbar-button-border-color: var(--color-line); + --navbar-button-font-color: var(--color-text); + --navbar-menu-border-color: var(--color-line); + --navbar-menu-background: var(--color-surface); + --navbar-menu-font-color: var(--color-text); + --navbar-menu_hover-background: var(--color-surface-hover); + /* upstream: nav */ + --nav-background: var(--color-surface); + --nav-border-color: var(--color-line); + --nav-line-height: 1.4; + --nav-heading-font-color: var(--color-heading); + --nav-muted-color: var(--color-text-muted); + --nav-panel-divider-color: var(--color-line); + --nav-secondary-background: var(--color-surface-subtle); + /* upstream: toolbar */ + --toolbar-background: var(--color-surface); + --toolbar-border-color: var(--color-line); + --toolbar-font-color: var(--color-text-muted); + --toolbar-muted-color: var(--color-text-muted); + --page-version-menu-background: var(--color-surface-subtle); + --page-version-missing-font-color: var(--color-text-muted); + /* upstream: doc */ + --doc-font-color: var(--color-text); + --doc-font-size: inherit; + --doc-font-size--desktop: calc(17 / var(--rem-base) * 1rem); + --doc-line-height: 1.65; + --doc-margin: 0 auto; + --doc-margin--desktop: 0 2rem; + --heading-font-color: var(--color-heading); + --heading-font-weight: 650; + --alt-heading-font-weight: 650; + --section-divider-color: var(--color-line); + --link-font-color: var(--color-link); + --link_hover-font-color: var(--color-link-hover); + --link_unresolved-font-color: var(--important-color); + --abstract-background: var(--color-surface-subtle); + --abstract-font-color: var(--color-text); + --abstract-border-color: var(--color-line); + --admonition-background: var(--color-surface-subtle); + --admonition-label-font-weight: 650; + --caption-font-color: var(--color-text-muted); + --caption-font-style: normal; + --caption-font-weight: 500; + --code-background: var(--color-surface-subtle); + --code-font-color: var(--inline-code-text); + --example-background: var(--color-surface); + --example-border-color: var(--color-line); + --kbd-background: var(--color-surface); + --kbd-border-color: var(--color-line-strong); + --pre-background: var(--code-block-background); + --pre-border-color: var(--color-line); + --pre-annotation-font-color: var(--color-text-muted); + --quote-background: var(--color-surface-subtle); + --quote-border-color: var(--color-line-strong); + --quote-font-color: var(--color-text-muted); + --quote-attribution-font-color: var(--color-text-muted); + --sidebar-background: var(--color-surface-subtle); + --table-border-color: var(--color-line); + --table-stripe-background: var(--color-surface-subtle); + --table-footer-background: linear-gradient(to bottom, var(--color-surface-subtle) 0%, var(--color-surface) 100%); + /* upstream: toc */ + --toc-font-color: var(--color-text-muted); + --toc-heading-font-color: var(--color-heading); + --toc-border-color: var(--color-line); + --toc-line-height: 1.35; + /* upstream: footer */ + --footer-line-height: var(--doc-line-height); + --footer-background: var(--color-surface); + --footer-font-color: var(--color-text-muted); + --footer-link-font-color: var(--color-text-muted); + /* upstream: dimensions and positioning; the toolbar height and the wide TOC width differ from upstream */ + --navbar-height: calc(63 / var(--rem-base) * 1rem); + --toolbar-height: calc(49.5 / var(--rem-base) * 1rem); + --drawer-height: var(--toolbar-height); + --body-top: var(--navbar-height); + --body-min-height: calc(100vh - var(--body-top)); + --nav-height: calc(var(--body-min-height) - var(--toolbar-height)); + --nav-height--desktop: var(--body-min-height); + --nav-panel-menu-height: calc(100% - var(--drawer-height)); + --nav-panel-explore-height: calc(50% + var(--drawer-height)); + --nav-width: calc(270 / var(--rem-base) * 1rem); + --toc-top: calc(var(--body-top) + var(--toolbar-height)); + --toc-height: calc(100vh - var(--toc-top) - 2.5rem); + --toc-width: calc(162 / var(--rem-base) * 1rem); + --toc-width--widescreen: calc(252 / var(--rem-base) * 1rem); + --doc-max-width: calc(720 / var(--rem-base) * 1rem); + --doc-max-width--desktop: calc(828 / var(--rem-base) * 1rem); + /* upstream: stacking */ + --z-index-nav: 1; + --z-index-toolbar: 2; + --z-index-page-version-menu: 3; + --z-index-navbar: 4; +} + +/* ---- Dark theme ---- */ +/* data-theme on comes from the inline script in partials/head-styles.hbs and from js/theme-menu.js. + Screen only, so print keeps the light values. Text colors reach 4.5:1 and the focus ring 3:1 on every surface + (a comment inside a diff line is the known exception). tools/ui-audit.mjs checks a sample of pairs in both + themes. */ +@media screen { + :root[data-theme="dark"] { + color-scheme: dark; + + /* tier 2 */ + --color-text: var(--ink-200); + --color-heading: var(--ink-50); + --color-text-nav: var(--ink-300); + --color-text-muted: var(--ink-400); + --color-text-on-accent: var(--jmix-space); + --color-link: var(--jmix-violet-300); + --color-link-hover: var(--jmix-violet-200); + --color-accent: var(--jmix-violet-300); + --color-accent-tint: var(--jmix-violet-950); + --color-accent-line: var(--jmix-violet-900); + --color-focus: var(--jmix-violet-300); + --color-surface: var(--ink-950); + --color-surface-subtle: var(--ink-900); + --color-surface-hover: var(--ink-850); + --color-line: var(--ink-800); + --color-line-strong: var(--ink-700); + --color-control-border: var(--ink-500); + --color-overlay: color-mix(in srgb, var(--black) 55%, transparent); + --shadow-menu: 0 10px 28px color-mix(in srgb, var(--black) 45%, transparent), 0 2px 6px color-mix(in srgb, var(--black) 30%, transparent); + + /* tier 3: header */ + --header-logo-center: var(--ink-50); + + /* tier 3: code, IntelliJ IDEA Dark (New UI); the comment is lightened from #7a7e85 (4.0:1) to 4.75:1 */ + --code-block-background: #1e1f22; + --code-block-text: #bcbec4; + --inline-code-text: #e2e2ea; + --syntax-keyword: #cf8e6d; + --syntax-string: #6aab73; + --syntax-number: #2aacb8; + --syntax-comment: #868a91; + --syntax-annotation: #b3ae60; + --syntax-function: #56a8f5; + --syntax-field: #c77dbb; + --syntax-attribute: #bababa; + --syntax-property-key: #cf8e6d; + --syntax-tag: #d5b778; + --syntax-added: #294436; + --syntax-removed: #4a2a2e; + + /* tier 3: admonitions; backgrounds are the edge hue at 9% over the surface, borders at 24%; the brand edges stay */ + --note-color: #6bdcea; + --note-background: #18272f; + --note-border-color: #1a434d; + --tip-color: #5ee0a5; + --tip-background: #182826; + --tip-border-color: #1a4536; + --warning-color: #f9c45e; + --warning-background: #2c251e; + --warning-border-color: #4e3d20; + --important-color: #ff86ab; + --important-background: #2c1723; + --important-border-color: #4e162e; + --caution-color: #b9afff; + --caution-background: #201f31; + --caution-border-color: #2f2c53; + --addon-color: #ddd8ff; + --addon-background: #201f31; + --addon-border-color: #2f2c53; + /* Space would vanish on the dark surface */ + --addon-accent: var(--jmix-violet-300); + } +} diff --git a/content/supplemental/font/LICENSE-jetbrains-mono.txt b/content/supplemental/font/LICENSE-jetbrains-mono.txt new file mode 100644 index 00000000..8f7ed671 --- /dev/null +++ b/content/supplemental/font/LICENSE-jetbrains-mono.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/content/supplemental/font/LICENSE-roboto.txt b/content/supplemental/font/LICENSE-roboto.txt new file mode 100644 index 00000000..e96f4bc8 --- /dev/null +++ b/content/supplemental/font/LICENSE-roboto.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Roboto Project Authors (https://github.com/googlefonts/roboto-classic) Roboto-Italic[wdth,wght].ttf: Copyright 2011 The Roboto Project Authors (https://github.com/googlefonts/roboto-classic) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/content/supplemental/font/jetbrains-mono-cyrillic-400-italic.woff2 b/content/supplemental/font/jetbrains-mono-cyrillic-400-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ad54a035651fc697d6bca3f988a0b875845f1adc GIT binary patch literal 5876 zcmVr2nxYevsnv*3IG8%0we>31Oy-jgk%Sa2Mh-r z04P;PhK&P&XyW)rBvG77_WyMPH-<>@O0!Gmyh+c4%0Y`gMDp&!! z4t0^gjQ#zJ?Ny1`}FP4<`BIJZn5+5SjHpLsd%ZPCGE^wSzE|JrL!gmC;och z>YOq90Fcb?0MIu7sT=+N-Fp9T=PunB^gJRWwN@zy<}E`)#Hl)Hcb%N&OCOU;tY}sc z#)d55`5|O?EroZ5I*~EuxPD-M)0&-RuG4Zy>keFf zp2K1sMos45Y-aK|?DiM3*F!6zhf=$(5`+u2s?uF4%_1ZZqY%RKF#g9}-LZeDboJ0i zZQK6r7>CO1CZU*yY#~xIk3^%yiY;;8LrqD=(v--y*|bIyOSW}3<86*(j2ocX6wmRx z_PTol0swP<AMPF4k#F}+gtVEe|m8#WJ(b2)-C^RRhR&5v_K_OvbF)^LGj2e|P z(YK*-?JTc<0Qh9oIP+zT4@A%1#0ZG+06>Y_dbdONzMck80g?UvFU&%G4pU<4db!(H zQ}6ZSOc~OHIX+l8eA;leL*hn`Vogsv)1F`^6LyYsJ{z(>`e~vVymN4^vWCy9RjN`; zd2d(;N3o!Z*Sv<>3yU#k79 #RLw3T#gDz1Z>;&o=vT8o1N^nSF#Ry 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 literal 0 HcmV?d00001 diff --git a/content/supplemental/font/jetbrains-mono-latin-400-italic.woff2 b/content/supplemental/font/jetbrains-mono-latin-400-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3d3c5d77ef4a435884c544b04b00e8fd78cb22f5 GIT binary patch literal 22228 zcmV)FK)=6tPew8T0RR9109Moh5C8xG0Org909J4S0RR9100000000000000000000 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 T=ND-DucNQ`tADQ-AuI&|D5jKI literal 0 HcmV?d00001 diff --git a/content/supplemental/font/jetbrains-mono-latin-ext-400-italic.woff2 b/content/supplemental/font/jetbrains-mono-latin-ext-400-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c88b32dd94bade3437ea9e445c8d0d5f69a77684 GIT binary patch literal 7972 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 literal 0 HcmV?d00001 diff --git a/content/supplemental/font/jetbrains-mono-latin-ext-400-normal.woff2 b/content/supplemental/font/jetbrains-mono-latin-ext-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9d97c9b797658435b1e504d4ffc250f8bbbd6c1e GIT binary patch literal 7336 zcmV;Z99QFaPew8T0RR91034_Q5C8xG08V@W031aC0RR9100000000000000000000 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 K0BRWTKMMd=4{#R% literal 0 HcmV?d00001 diff --git a/content/supplemental/font/roboto-cyrillic-wght-normal.woff2 b/content/supplemental/font/roboto-cyrillic-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9722525aa8089af866d4b1454d90d043378051d7 GIT binary patch literal 23664 zcmV)3K+C^(Pew8T0RR9109KS)+VQiCG~U_Vn-K~#ZGCoTYjHVA=!37-Zpeh~}`;3U)^3xXT~ zFzY}8HUcCAgfs*o1&LM%APj|08ycQ9c+Q}Aw*xcfre=l;woSWO&kZ;Dw5p_$fnei6 z44!tM{QqB*8!{AEfVx&ck|Bq};fjiao^VW5cYzavt7bRw>2QpgXtuY2u|rrE*3?m^ zDCijXWR{=};)HB?j$;ESd4d^tInlG7Hj@Gi-t^<*FFlo;zDI|+`UfKOQP#lZTRe-r z?bpji(_DI!o$8uee1X^mG4vN~I_0@)5g51dQFC5BBAr$BBuOJ_G)fTxk`N$3h$Ny! zFfke@ylleQzF+U2ce57|U@wj&?>ga#HzaIhya6X1j!ifQ*l1_`i*X13H$&`|41w>G+!dxY~$()Pp9m|`p^lmOLa_fui|MTDJccwEz?L3GZtjO=} zEx-USl}dUb50QW0|F7zendEb zMQ#_l{OWXyk$_kTs6>m3w%E0BY|PSemit2k zNWEX$UhhnJPURT|RQ;bAad&V;w^JOr8U&887H`aD=l`s2pM_ z$|mHZEnFG?-@j=e9=3JCJK|5ZmfQvOmr!eg1s^!zFx5nY|NqzZYyW-wTV}8zDn&=r zKvn;_36eQ^1o4ZgRHki1$D%4({NGZO&g@EVX?8m56`(6D9bFLJ`SWLYidJ6lS*K>n zHGcg?x+>}F`s91km9)~Klu{}{!FfD)ECuBS1ppR8LjdT#Kmr+T(5mU||Av|_Ur2BW z%dD2T3`T$hm!dxQaPLsfVVlrRb{VCC&wIqaJ8Nw=T32L zpX-jVadiG~=>Qb;2ZzJOKaPSAKn{rYV>GsBs@k@WXm%qxF?aEIH)k9+44Uf5p_v5L^(#UH~`dX|Z_OOT)kr}{XUv&fkfExus0BGT6i9Gjwo(!bi z)9rJClm~oPCrEkJ*xmwC5CCAht)KVoBlr1Qz2QCT= zp}`zyolvIdPFtLS|Nr~KPva8bMy&BFM!3-UV&J{3*AU1WIYX9HDdl*!XGNaOCv!e` z=SaFzo4l+|ODdAWpY(k1?+xABPxQGy(>M2?>)C4Wx-RHd-KPt%CoSLlTUArGnKs(m zTXR!4QKPi-W-K=B=okwwdZQvvMkuz&K(vG|SWy+$Pz44PR$X^izwdnG6L_nh6wzo% z=o$cGUIV~e?v(YQHh7De3nCE>!P(dwiz>@ouCXvhV|S}xBqrwB4#|R?h5A|4ITSD# zGC1iX{5n1F=LRo{j~MTdZh%tg&pQT9CH_zMzhHj}wBJ5m}>|eoTMRO-nXc4tD4uvxlsYDQPe)Z(p5!by`GSLJ*{@FCz(4Il? zrpG4B218O(!+xV;>xWa!<^Jxh^Zi@^LT9l$wmqr15;teI#5YT-GpDz<)6EM5GjH3h zBLVK+#$~bz7?BWjml@$445Yy8y?B!K=+lf{Lb)uoL1}BD+_l*13;53a&!myOFXV~k z83w>>-onL+B!w+AF_xfB>@GnQzoR!U6s_+Hh3HIm8#N&@+GpSSwovZEF3Ztk^NC?% zE4nSP9xIoCx1pg1dhLw@NI=c|YqqA?Q*ldzp_>UvCkjzdJi>dT9#iP^ah5p%F>S~~ zR>3S2`8h z5#APCT!$FdMXmW2KqigWOCmR#uO>vDpEr%!P%Fup&by5;C`9y5%6+Zh%Nkg4V+R5f z3Jx1cB@F~fvM4aeSpe!>AJ|)*mLe1Hd&@Cg*hc;R&x$Q}DFF9(D<3Mvp%<>^eWDl4 zc9WvB3(2|Rc-zb&yf*TbhUItHZnp2z*PlRbE0*+B0G(U=<%$UCN5G#unqAcq2%=Fp z-G3k-*c8AOOBG!Yiu3`@-?WDSmpwIvITt&h-Bu!i%?_&T`V!@@N-j@gb|q7ctwH|X zyo^=?@qL<=ligu${2zOhUqQBep!jT%Is3)O+0$QSdsv#uoyP*YRtPDCId?(NzrNjT zoRQ8;gvR+@UUm{%ePaK%U$^`1wf0Z_x;E7QE~f%F0GOo5zFS~=OQWZ$mrP#xBeBaG z!F8P!=o^0sY4=gi92xd8fJfP1?F9R!ZL{xSdGpt;4{!ir(qs3tkEZWy{8;~FtO9U_ z*Q@;p*!_z=(~3R@)a_KJYd*`Nc`U`QSNhuiZ9fg*M}?xjvu*Dez;JIvh-Om1n93IY zc}MNXZKm|>bG|Tr2QhtF6BS)KxlwmCxsR*_z+VFZcqdT!Fw_Ck`ATKs76+k8ImOE0z)MK^DSKG`|6RnC4>>t=aqqywd95e@;-&kt1KfC!s& zAr`NQwZ%L(*wTeJ$a?@^HrvTJ^4kby$q^_)>0tx!yU9PV=1PYyCbm z#=tNS?2rwLs7XQpytnqup4Y}270ulGnj*gM4N?X%{9L|VkCQ~}q6kIp(i5d&3CSP` zhZqj(^F|OCf@wRH^?L3B0@(y@$>)t0BUYSv30#t~uyOGBreE>}L40PX_#FAnPW-Gt z3Q<-r09d3u^XbK{s`58M{GnH2ri#jczx%t05Osg!MS=BO8|7T-US}Cs*)qOf0( z+{Fcw5_0$nq9d+Qv|Y+S*$p$Cbve^9WL&1xdHwZ-UPkETD0)X17f?zkC) zPq_4&V3buDjeMC*a)|=ah^I;JDmgF5h9!)aaZ@0Yp}{e)x4B#;18~pdd`f9kiAyQQ zr$4A7fMo(Tf-oO34tHVzkO3-M7H^Eruj4x@?;Gz1BHFlTgj~~2tJF(Y`8ow4!(-!R53IZTZ zYo-zWSV^jj8|UWYTki}D>u;5>)wns>web&DB~U8qlN~W?gIF%!Tz6h<9@lk1_*Mo@X+|+ry9F+0Or_NN(Sw~A}Wbga>oo( zNmII5nMk&BfP4xm(>uU>^%AQFXc#s%Ka~rM2UW*Xtz7;_*cvIzA(C}e;FELNNQHE= zp98s2DF!NSTEJ$9S2&=M>Cx6@M4%2e4ffx7yz zRUx({dl<|6X0PkvE|ng7=%L4Y2>Ph(jvVqSq)ZE(_RXa7);p;8IxX{~h6bAQ$`?Sb zk!p@kM&tYr+h7DsZ(r;su&HTR&jtZVT>$=2eaMv|th z0GhRu7p^-dy&G^=F}xu?=X(Z@g&eGZj$0r7^wUqj_0I|DrJsKK>8IcN-APNmdDD@8 z>vunD9O$?H@;^Oh3jk|J5&{AVG5bXfne>ot7knHrp?GTgQg2`HFZC>x=lyhWpby)- z@S#=mq-%NsFa%j}i6O$swC#;G_-0T;D|?sa-;fx9+*e z-3rzLVoQt)1sS)=T@NehtRZ)f<78ukS1+=J3^Tf^2lI9~Uk5iXG00(8D* zIzm}}-u=JLXb0|fT555Ko13p?(_%@}4zzCf0B@hnsTyK!*m+o6kV263CQCF{ccC*h zp_ad1`np`SN&eRQ7*z(CJVVT7^xKN<$!k(JYrL$%8W|NF8<|Z02Utx1AwX@ zy56$9-j9U(%+~s{UZ^i^uCEMLyq>i>6hdv5Xigpg7y#5-y<{wE+qXMv4)W*7^JVj@ z0caZ$L&M*qvtZN&9(rv-p>bCht@?Fo-^G!29?o6V|rt? zalcdq&*Rm0G_!c<(9Gdf#~qFp*-CbI_Eh$|uWOd^;W2W@qh%xWTG{@mWIK!gTKm`W ze=i?jGT!@7|39byJDG_8?*kyL8&g+jtesjqXOmj%Yk8gQ|NirPN8$rJCw3wM`JRCR zXpjCB_|Lr3Koj;Not~5A5?Rh;nZfBrx0%C6jf-<_^}xzH>vAhj#e9S(Kw!+ua_jg9ZV*E!8L_}V^);#NEsKc6OOi;V0BTleWMwHhYX*8Z97 z_XDMTW?lLPthCN2cKF75H{-DPOlh@6r|#T_J(Dy2$;a!LH#XFJ>S}8~T-M*$ySAS0 zuFejBdz;VO>S=MioXt%RyUl7bn~Vm%u2HK|tCS52xlAe+2?cx}m&0Z;83l-F@_i=U zU4DzBK7QJt+0!acQ5=KWJSxAUZ`gLnz)bxy8GCxZRr&!{ z42BSVUTy!J_fH$4TI-0B%@++w)4$d&jxr#9DT_guw*6-hc_kf=AUeWPTPDD?`U?rD zk;a`#c<}bT?@Iww&NG^hElb~Cl>$h*FT&HUBWYKvZIC|7tH6Zw=4;M~sv3c+5B$!+ zI1q#Pwazmf(Ql7GSAaTC1Yx*yBHEo}olR5UnQ+iBf>W+e-se{Jkl~}UU1=o(y-DNe zndHjPbB*LxAh!QJFJB3gzVO7St;rFHvaebMN;qMuV~eqJ?92*Ayva^)r-q&6<@ouG z&};|frVAlP603T%EE6e-G21auSu99o4DszWuvV>c0|X)8;cJ+{JMZ*phPx>@?dC{I z+7g~tUt`Pv2oNIt5SSuIGW%@gFJ|BDD@_*WpFPqHn(d4~_Yl~Yn=IU@eZztg8%K?N zOCZIz8Z+r9uP?LGsuP)X9NG?MKnz20EO^7G2vrou;Le49G#KmOz&{%YfQ^uF-})JR zTDMN`)R=Od8WT1+4KxU^3|AYW2Gs0!xgDsoVCGf3{Y>|YqHGSZdWNdD4njf4B7hB7 z3u+QFQ=TnI<(m?bU>+m z5llZh-`tBwN$?m_-%m4RHg;pR&NFM+YWv-F|1-}d z>k#D5s)DJz_P|pyGc~}GdSdk{m?6L%*J0DJm0mQW$pwCbbLj<-)R^f;gR|afq3h<6 zXDhApB}Kz{N)n|ek)Ac(LAG{QU<%wh2{E}~^G=6_8WaRfZbkFUW#<*${x~*(nN?nfmbh=ku^!xD&F8voCDn^+lp7Y?0lS(w16M$(!ENOj$K?qlX4>yEA$`yFLMC1=D0k7KF>YWR`4PQ-B3BINQvIjaCRs66}Ui z;zDZ#NYa`4tIBhqG~!br8D8}(}9*7qEk&#fxwVTC*BEKu_~GDYl>i{wh8$LLQa@hnky z$y4_<$EbQP*0P;!V<=fW66TzqH!tzov5CC|0l=Ip2f1K~?m-4N0Os^?iAM^RBMgA_ zyrUZaN&o}B_CUhb6G55dh6$;pnos;`spo~DhpAXP3)3XdJB*U6rH)J*hfCT8k4>R39$^ zP|n@}xMEFtt5DFB8N77b`=LHaJ9j$OVdk;$w4c_oMO+dyQ6J*I90ryr9R|T_tKjC- z|DEQJh?up7^u6x?KAoON>W3VhG< zl%VbP|L0T)hKpN}EdT(l1^{Sh02cwh4`4q5fL;Nhdja}(YrrKuc0)u%8K?ZV{$g0h z1j0VQb0Zua93E0g7*i`ctQUc`WWTh-4Sq~&z9l@II)c|-GQGD%eWJ=+joTht2;Q%D z`M=9Kaw$Yv)|@*&Tsg*F=E_o(#f2^x&T*c3j%vs`-^+Nzc~f$(I5q|zL}oliwq#dU zO)c{=m77mla)*vLy$#=MRhAX6nqpXE!tI@TcY-?OlRwzSC0e6u4L!(`bT2B|4(N?iDiV-nkTJY{1^RGZ#K9wU4>M$!gxR?y zd~XG5bUQ4Gq?6VDwa1L+?a)h`$dQN{s`%4DL_LRQY!;wd6_3tq=tJGVT1RN2RW;}= zJ>j#L3M(L|Y(Ud)r4<*aX)a zo<31B3YFHQsj0Cuu3J`cH7Cxl$1n*vBrgFBP-;b-f*!CyJ-?3s2P%eTVhe~Nd*k{* zp$8WMia6ks2l_F>E5DtklR!<&pdZ;|YLFmu0bD0hfy_)&@h1M>`f7NJ?Wz|i8U~r# z?PggT`|^qwRdk7L1wGjB1Q;-2a&aZUL8Xc(gD{?u)wE@*e?!DUH9D2Z_08oM4QQ0t z-#A1|dC`X;38@=v+MgtvbpKIT$z?@qnKX z+2Ck$$X^)8A_h4S&c&&7{h#U~C09P9EsMP#xng3_AhQR5GuX>eG^dom_1vNL`nKhW)kb+O5N=Nb@?Zy5wGIzt$^dy;4o!<%TbK_j-N*QX6K z^T`{J289E;Q~{k0B`*(1Ac;{SJAd*SMQ)ny9$kzQd~#_%H5Q*3$f4l>%NDg+3IQc$~WC<=PWc1L8HP zVGyf63#Y93f(4)G)1s{5i|MzIre8aHDR*^vcfq;vaoCxzswEMy(xW8J81)xq=H@YpJxIWJjt1*$aI8`g>4^hWhgx^1HJ#)vLZdDAhu zldjh7qFW|0H{+HGW3yx4ElkRwgi8r*5qXui?+<(E& z39;62BkB=8dgaZ#?|)*eGCnEw_K#ai%zkj>&|z5ahVt+Nih|ZzF;4n((On$9{K2MXL?mqZqOdnvT2ahFV^C6UdA)p?$+IH`$|j=Krrlbr zY&j-Z?^HL?MhBH=P@Y15ocBC$WDEVOuV|G2`q+-A*qZhyh0g7mC7-n5fF~+~iJovb z=*dl3uDx)dsfb@RF0po0^Gp*$G}WWbaq17%AQCJD!Xn}E43ry>+lDIMio?62*XIxx zFPceHeGEOEy50ub^slkU`qSzvVYr8=ejL6ZRosWi^~GtTll-)sgL}_OyuS02p}n-5 z{%+ijp}l7%KHoXrDPGu;B+lK=bGMQBJRgbc&f6|d66Lx279ZIlm%8Hr+30w4Ga%_j zKwf?N%eaJ&%A3u54vMYzS(nb>q?851sMW`F_RlTn*NMb+TFk;_*-PbQvHq4l zl+ad(LstMPiOC^RqJ%^}S@L>dzvywbQ%}eOnZt4D`7fILUfts$9qaWi*7m{nEBu8F zKEhe2XAkeBxyb!7T}YTYD!L!;E1~94W~I4wRzCZe&K5N_^x&(3lf!RKE^H_JEB3yA z^7zNSgQ4X>D<(a5E7E4FhgG^RjG$*1FRirnB!74bd2`J)^2Zvz-nY5Zh@JJdiHfQk zvbV&)yn5ohr$ReJ$;Gehb`4RN2SD3Hk&vyDsgVhr=O{w zT|1l6K{2a~8fzSVpl0vIzDDxFe&2cW2DHc~cG2lX|0wH4%5J29BQ`H}U<_leZC&q- zaU_==&d?{@V*KkF2j5ltuN}j@^Cjo(TcM^_x;Kjm^;M|CG|DsEa@P%iTWh^mvxeSb`Tjz`go)xHskOYQ74}GF|$YTj`2!g zMb}Hnqe+bP!|M#c6tI2a<4^P)&pac@w=F)`d!l86NOZI4G~c%RR@nqe*uq+F1gGP(eZ}(Ry2#zDr;q%+=~^ACfDySVXFFWFrR?;Pjfk_Hl%ib3PXmZ-?x5=K z$cXCR+@aPO=mLgPQ{MG^N8W!RaL(2EQoxKoZ1)}@ntmBM>(X5dm~e+}-u+WfngvkS z1$_5XRYUVJ;M3ZU`Reezk9&o$_lK8ncSJ#%K^%CX9r8wO5F z+IT*GO)ue?pZI)kOhZ835e~-uenP)3*kDbjdl-6HLUQm{(0pO*+@ogS)nNlAgn$^~ z(zV~39xv5HZMxvaAI9KvNRKn0w;bX1FXe{hA(MP*lZ~@$7q8d2O{CdYa?!cF5fLH} z=u~}W{MM~P&h9AdQq+#YhadMIpSY(Fo)Z0)2;SD8`@(PPho1jxVBkUedf#QpV+6Kv9duT;appDW3<8Uf z37TqrHsTPXK1v?5o9Eb4{=tT0+MsrU5jTAKw8t6GkMd+a^YFvw%Kd-KsaGPmfg-GdUzH24Sbrnh`pK_dqT61!?)(4 zSs0Ad%RerBIBbueTB%&q%OFN(uhgzDB zY9sfH)(|BaU)G7pF4EpDgoPb%3x2nv3*=wOC7HMHPMbbRx_Uol{%maZS6`p>9KA(Y zAe2v=QqtxhBwd9aBM`po7<LW;elmRG)DZry%~->TbN zU>D%q`IQ)>k+Zoloqof(C&$c0JL-A0T^{L7v94)_Ik?}yP(f^H!LbGQGOVzSSjIMG z@h@b{auAq=MZ#i2oPB|CAt~pmYJo5a7HaB|+s(IN#|YcL>KKE05co*K^v3Cvikf9D zrmkPpm2m+Z5J=p4EW%OW{Bj{Rr73DxgaQ8dZxvpDIwOZLl<{f&Y5X*Sd^U?IPQ{ zMw7gKKp(OMeBZE3Ue>*y_u4vcu6uv&D1l)Y&$I=7WnnylpE5?U>Z=&F{PYhNj5ABF z9Fbw95&S7LiS;lbw=LqJ@@EMP^FPlo5(W>%+&^BoEtpz!+g|G3KL*=<$bneS&_$*7 z?B?2qS~bpN$8uTy_I5YiOC(>0HYS0yhjXIKuo}RNpSN|$uA*_eqqR&4@pJoE}`Ugh_ z&J$a33?1o|vGdqfi_7=CylWrvMR$>#^kUcklX7qO6}v0!IYpzm++;e}MWcI=n;At+ zY;$I$$KpYyI9n)O zxsOV1O`BvMX4=%S-pQuM))N+D1?dr?#I=3R(UINQq+0y?^iR{qgY?lea?L(H6VqeU z?!%a0{YD&%6YHuA8&D;MWj;ns&&8iUa_J!GU}6q20wZDVg#8$J;8+v7&50Pf@iw6M zM*8cW;lCbO{C6>7ECli%tVvWRxLxw)dEu%F%Zn#qah-P;@1Coj>bw(rB*ohu+p`{+ z?b4Z`yr~&2$&9_Tv3S~ZS}vWQzhx%oX+&sZtpHuhM00JvMu2ge5YrQFBj8=H=Ek?Q zEbb4D^?GxYaN*4Gm75>PRHPq<{gbV_6V7_V`D77BjC_1!O-w5$L%<`CSKHE^i01^o z*1CXPPTw)oe6FVT*r$D+H+@SI`oK1p+df95G}V{paU|p+oGQ6D>x{g;xoTXlV(u8T zF5=s)FII*;x?}DoZgsPTK7?dgw^Xw1sgG~GClLc99|+^>aA(mG?g@p5;{;Q!xW_kc zBMW1hsFiT{!=8ta5ayl8Wn^fr-V?oERhk323%QDp*a-3!cs!vuYLpNgpcMSoJB%e% zymN9ZH_0nu6nFu_5ZNEM2rZyeO&yBYX7q`V0!C1S8PeJ z8KCPT`TSJG`O7-k+y2NU$qN9zIKl->-O)`&l+ar%kPMK!NBa5R4Nj<>;?1keS6{?KN?EpPAuGNIQv2%}^ zS?7wHTMwN%zP3t@dlgyKE)rU%CW!DA?tOTk$+?s!iV&=GR52O^RROyB(;{6?7R%)# zUCix6FrBGeHhbH2XNPQW$Iee+h;4fW9?3RaNu`lHq?y?T6k$XFt9C=+N@P_caLB%%b>BAn{9#}f#9w? z)|&4vVi>4VAUs-zf3669CL>o}F#jL3uWy+IX#$p|dvZtyr{{*a5`zy;!Vb zDXD3x6U8M><(a4|3#MotF71_ng>O`AU%+Isu++p?@&p*(|E;>tq`xaQsh}$VR)~JW ziEnr7A1)Kjtfvct2Cl%wVTv3IX!927%0?|jyuQ)Sa)a-QHR-^T=#w{Olc~NXYKyc`y5bPcD*F$)7VXq%Iq{cL@ha(zl z6*(8~-ir1PsyKhTuY(i=Q2NKrprn;nL(CzK*l4mb`lwfE_BX3~nfSIINC*x5=u)};{GOBf14tmOjB1r(x z1V{0q>#8j*(;#|11jwb!dQn7ahfXgR6F3i~SV~q-ef)SnAMe=+r3Wrf(gG@2AlFezF4t?cuAY4 z*Dg-ku#n+qgtFp24mK`wDnh~{AA*^>iW(+D!Q|H$e6BSCa1s-`3aNpiI5_0oQ-;)} zHGo25>f32TlY|s_SU=S_m#_K2h3D$NQ8GvQ4dL zW4?c$gVS;0#K}LFqh+2hF-lWs=R6{f{|PwVWl9F8PtR}ted1e^kf(3doqzs!f}*t^ z_z`C!v+XaObvo3!XLFNUemgplh7D-!>1|Hz4K1iFW5Okm+wl>G}Bj7aI<0I18VkB-`X9xq>`JJ|aKU82S)>fqqVZWZCRX z_A}S;r}_WlW$}tQLK@d_hPUH$cn&|pA7m;Yk^d;WdQ_cL|LJJ`oXO41JYYVxoxR$= zZa=U;IjOtNor_%bT$Hy2r#lx#-RvA*6)!Sb((qw3qU+gR?2qi3E~a~z_(spL#33n* z-7fj7cX#Ou8T36D|Fv8${~+PSz>1+}MXaJA@v!37fHnXn4a3w*KjoLo1IiPFp~2K3 zKUg1HJ6x*rQU$7_RWp(clIJEbNM4#;t6Htvpz2iZQ5{zOGK3Bvt#-q+;j`dX@c+VV z)N9lm)t{*ks80+>hKXT$^^hi&0;*CIKma5lAOX^t*ZNLG`IU_nx6xA3UUEHt{PznTAnMgZ7Tvdgni=YKbhfg}29ap#6UF;tE!PggOPky~his2TQ;38N zE^)G0j&eR_Kv98%9_1iTPNxltyjHpaTh%2hr;^w+pUp91F*X;9`D&gI?F!OH7V9k6 zokcYyqXELMLJ6?0`Tk814TS;!HG5Y%3j~OqQaBU|`fMw?5OZ!VNTDMs6MCgm?WZKO z=MwUCSjltPhB{>{33LidTgw4+Uf_9zZ1lg{g@fRQ8lU)~iu8Th4A0~_2f^yiUbu9T^}-rqT%vFdEe-2THq zs5Kh`CYWqw0hVy=z{?)E_AA3f`&IH^E4zaI-@a=&YF&dLsZ5 zRw)|T5NaR$(r`EZr=%uPn9UnE%DbCGs0Q#55+h73APv0fB)Wr? z0}-mnRSQ3vMOfBHuM#0s+4XfG0;|Jf%C02H4?ox*f?@b#^u+YJvbLXVrbw9K_qg$Y z1GP^N@Be1%fLB+0R%mFS?Lr=ygy<0U$PHpXs#qb43G#tGJy(7^H0C_dYP~*1r_5~w z&RGp;CqQYaF;E$~+IO0)oi$k80?>nS z9YvLxiWADe*3%9Y6I4YE2-w)CWa?TJbsVDWsC~OAgA-Y6EvF*l0yI4AW|4r1X3Lm2 zDj;HA9KT}GsBq2q`!ShL9X?sDXk**CX^LFykleL@ zw%Ie?%quViVF+`bYWp&`OBh8>Jz|7q=(L9Vqn* zuzA$~t`t^0-$dD3&{FV$PFUr zWg~^}ZrGSH$PUu)zx-J1HUNpiS!T?)g#rMH;0N=wfovuC+gkyy&rhuz8 z>AnCP)Z;_bUQAah>U4h0fP8%y$45)HMWSKIVZYYN(%VTa3gx5u?^sYjov8eY`c6}4 zYZfbp^!bDz&C8OC8>2za5?OGb9z_lk<7Anm6rm4($Vt`A5RUrOAUvlSbxjB}l(MbU zOUH{o6-U_|0zqD{=2Syq5()~v(@_X>gbddOJCP1Gf`uvJ&pen ziI`9yJ?zQr57c-eEA)i51_u9dF8dPMr9`nRj^hf$3pJ+n@1wS$RxWXpf5L}Rt~szW zcgYo;^8YqO8l_CMID~K#AD4ImvvbbQsBtY+sOGY?Z=$?@3FEpKS-kvF+WSis3+mX` zYFzn6D;5=-Z@y970e*%kn4qQy5MiB;5l)OwQ7Zq?-BBEqBDYi~7J2@0ZkLJt@r-KD z(bMHz1|b^cy1VptSC=E&tFM}?vYm?Pd0o_~MP2JJP{jETvj*0qS_-8pI8h5FI)+ju z^z*|aY9P#AA?9fZTUhEWcbAAc-)WJFz!*(On`ok?RgPc+7!>Z;Kbw5A^q#2OL!?VK|k}7SCA${IR08Ntld?wR% zXjU%+b4%GF;8trlkF2PZPlD>rIoNcH;3dpAk3Dg>EVlF6M68=6B@|N2y4lQ=yMeZ)4OmIlB&5 zNA-lN1Sm&hjSRhxWi>hsVZw10?|-=nGE1@c3zg9|T}@OOhS%^K@#5L~3Z_~J313g* zbJ;}D%+!JS%|Uf2rC|mB3Ob_L#o^hIviWY+@MP)ELU1v)A&WTZl@KO-G@u9k;Q@a z98JGCcuJ~VtpUq5#z`u^%Ot&bYj73~`Aq%uuMBuj6O-9U&>xPGdA=CYVR)@ju_6;H zcd&&}V70zMQT{?rCY0tGLVcQ>$>eII!7##Dl|}tK`})5fw|{4Xx}$J`0^-8p3kME@ zR~D5-;%{X9aw!F5cg43>Kk)HS3&8J6aDL#6lt9EFP7$9rAinvYiQr<%iBzFJ*xO|F z9~2v@TN@H!DS~J4NHu9t#_IRoozX2-MR^gps{kWC@eq5lub%?K^83w7Vlg%%CLqKj za#$0HOm5ue9GC+{2&Z@gR5-by!eFLQiDTi4yV2x4dAs1X2@i!Q)hM0h`X|(h=M03$S7aHtbPaG*i{5MNR2dt^9b&9GHoswlfB+w4d3kP zo$e1aAO}9MSO?BGl==*@j?n4^y7r1LL_1E-rsCwu%R@3xyy`jlboen6jIv2tiCWZr z7RN!kTDwfNxSq4n>0+)?!U?zsX692Nm|pynk@T1si}&p5ZcJi9L3bXVwr25_(vlG@xUC@0 zkCm%$rZ|0;9N17!A9vj8>za-BT|1m2Ux2qH+S=;6cX^m-96#-JNwyvdalI`lD_NX-A1 z0wHU})4LCwU9&xmQQqL7f>l+8hm04#QK*YrNQEO9KdF3z!qjSo;^SR{oX2EFfj}Ir zZ)p*?0af?|-%So2c0}aiRa~I54eQfW3o0Jl!N?I%BNjHJ8M$UE8#s9#nm5Y)dCb4w zYcYwdeWkJyt=yMHqS3Gsdt%2<$E(8?2JH3x!&RwXVuwjlJ4WCvMEs4y zM1c-o;%oCd^;{Bs@EzucC??v?QjSS4;j~1%H&#fQg=FM=T>hY8b5nG*yZ8c$!#>Fn zhLbmF-VBn<6H4(S@jGEKf$Y<0_Iaq+5K|;8>orqZ%PG3q##E|TK>0xIz>h00{y6?- zULC=Jfvs7wSy|^DD^ei`xujx!*{?%a+yp;5uITLa@g#v1RGQvV(6CybN&Cs+(WcIfSr#ZxST|JRHO0H1^9ojZF;WwN7R;8Wj6u*O^dnZzAN^JAU_FPXxGYx62XO ziD^S8S}U4Ers`me_l4N8BDBGtL~_Hr=%D3u-unCE(5-HF^z%STlZL$FHeY(^0MjN! zH4HbKLF3|+)?Ign7(VF~hnF|TK*{_hw@6E?bZFDs2*FpHk>-gql1Bo@}>~-QBVVW zSbz3e9`C5X8yYxY!{zSgrRh#ME)g;>ov=+=EM=YKDeojQ%Cp5F$zg*#ZrEVYo4l#q z`=RP+oO;JW&tsBWMyM~Lr~8-W+Uf?VpZ#Z^S08%l8P|>-jdwOk zSR`jejQb_KC+M~AEP?xA3H}l<4CxI)7bE3+GD*mhuWtUM_M#i;SAck;f)T zrMJGT5lxUto}FC>wXrQsH0sww!t}+d4}vYrRYY;1!5W7sg#YF{?%-P3zr~}X)|MHw zb!!2}|HlM$T8a-$rT~jP`gj8v&&}d;rNCThB#0TxZ>7pe1ruc*@~d&f^05z2gAt|A6W+^xkdv}G^m zdHMk91y@s(YHn%BOM@1>IZ02l01`Sdev?Z!hM-IB5osPa3;9%0#f-k3)_A9EFNtT}0M9Z2Y@3lF6-k!pQIoC%7FOwsx>F_TJ` zqeFbPGQz!JZ2(D;QcA5zdVBV(Ww$|H$UNygYR$1KKYLP0i^)ZWaq_EKQ_w2hiB`Gu32i^KE2Z!b`biOxlLYpE}dp5&X12robLlO(qu9^ zzP=g;T3tkE8tYOSu0JrVG~8xRhUGLL6jlo;0;rb(!g8!Z^FF<%$h9NIoN}?0styxg z{T~%X6r{duD5cf|WI6Fux)e(}6(FpU2v5q$oftnRH%`WqVX;)MO68Ir@@&1hwY6xe zmU7PPP!c4JiSECe6JsDBXS8PhZLfj))a#1i-aK*gNxbz?e<-}M6WZLa4K^$w`p&%K zV3&@!e?iRX{KVz&V{EaU?vuiW?k^Vk|}3HYmt zm9(~Nb})W4FdnEp)pOX*oZk)|PIQ2PP7F|qgJwzQR7wFnTL?qv0KcZi6N$w6X6SnL zM>0>KNhY&`e2@LTlst64k@pQJd6)n$1eJJ|GY!G=)pJhHA4?p$x`{r7XT&xDVebr2 z(Or7qH^l?`PH+rCo7=a|G8w=~g1bcH)~ClZp}{RZdsb#-yNb;E?8+@}$(CpDiDTT4 zxkVHKYVd_GXE{r}c9g#}keis+mz8~@39ow=^0E2tedFuabrBW%7j1w+v)+l`00v@C z<>>|ZRP_zxym-X(?zz`3xOfF`R1)|5Je0HzP!k&bAUJ{ptxesbVn+#j`d)pR(b zg>F}LMz2swU)mg&YZcTl=+bGYU6N(jFL@9JvfAXnN2WEH9K4w7N~O|QQO6;)(U$9U zDW-5MX~AhF$C;r1q-B!C#+(rE*AjBx8@n$-(gO|cUlEy@WEK+T%oJ;TC&s|TCu7+X(J|Lbc zzql0ft9ML07;!146eEG3x2P7PiU0m|?6x==K|VoDit)yN0S>MVzKugxiA!ipMri( zYp-vBINa3SP@hx%E^jzfh^}6dJ0(46+vMC^X1L`GtVerwkIxSHQ#_ya&syXh&eJxF zd_S5|V?P^Ci(|>k=W3IkM3i6)!AR#emO-giTKr z1{|MxdBqpv$J-OX=oE@?1(Bl}AvgEu*~qxKSOsUOw~XV;LhpQQC?Zitiw}F51|o5B zeO+2Cn}}`~yA-W`O%#TV9C3m-(Sar6M00dw*~8YL%)k(Ppc=zy?57~9UQEZ6hF5^U zffF0Ob=ckQ+JQZLp`+AgX9b$H#N@O%%XO&6BG8t!Z>9b8? zR(rnWob>TrYYs;fHMN!`{U4XrA>s65V1RQ_&?$Igf!>~>)XSq>Ow*5L(~+W-x&;2=cx zjtISmWi-8@Z5^%3WXd7(c0S^ZjfR* z-baPOpcPiDF=(LfE^R*Whhq(Ef_(jiG01e*iUV9ghqOOQ`qn>AiXUkL(S2;c4|Wv3 zE&!JhEIa@Co0zs`mFs@zaYNF_^f3gA?|qtv41I@fz&{C}L0h)k-5qrdRQA-Mu`4mH z8U*b}0A-7qhNedWAgR7Q6LNWpGJ}nl@En6H5k-|+C1=Ot^Rv}fyEk1o5_Br1 zqK%~@DC#BXLg0BpVs}J#2{K>iTz7&goJ>Xoqw;W;1+@|lB%357sm?$shKvSNLV?!A zt29mfc1pM{YFp{RVrlM{qs*Xzf)`m0G{}LwqdwEHJzGXy|6a`FXNCWyQL#FV!sV{S zR3OJXBP|LcpR{ni4nCCG})vySxj<2#m(#fsw`4qPn|N1a53V0Q~IXSVu=VbgZM}+S~iC z?2LWTR4Uud8p1%xx3R_V(t9qc2YRIO%HT2VZRx zUkSWI0VF;+*w!`-!d~Nj zfr0q7SbW3}zI3We@^Y1yo|N09ts?8`OVXp>4UZEM?L<-0mPJN#ZIVR&;pS9O6*=-v zQ6S>jp>qX8O6)g}=3K#{vO^Zk#Vh^Xdq7WeI6exN2-R%vRmyW(q$!*FL2l_neNfFz zNBC^07JGS}aDWkFrKz!+Rz}O}FpjQd#80#k;0rn3`~Ekcvb1cUO{mtM1Ca|FHH$JTTvS$M{pswEDFpu2UCTl%{?4S_q89@kOWA)i$ckFeaKxFw7%RJtyiz}o zMmwQ6qxey{@y`dv^GBa`F|DbL27i<>@}`*3pRshPqrnJr$jj@H=Ns=X`~+Iky0Y{A zG;C}vuOXp3D~g3^#;|m{Lz_dr4i8siw=ad`$uq{y_Ds(dKMKy-AgB?e z=L0n1J(BEhLNK^d-Ty~E$6?@rmEqWazVSzH(oPs*6F@6 zzv8*aYSD`7s+{r3XN>3L(N0;>xltqSW=r4^;TN;oG*ED>2q0nR?{7H9<5~S+0sCde;qzw6IeH zRr*@VJ#^ja9aNCIH`1yg{U4x3wHaHTYz&yDhh!Pv*p{5WlW9$?_UEyG6&Dk0_ffF2 z+u3wr%Ba<-$y8H9?`h4TW8$>MwblF@|19dHtFlk2ItV!f*%N z#}@GS$X4@w9$Xdy@mqB0bn1r|8las#OTP;|I#vK4I;5(@kGjxr2^c0kZvHp>SVsqi zOy_nBwweYz7X6EwvfxcOr0+Z*z5M^D&b{xZLxK`8N;W6xvbA7R!*)r1=adV`>6{IH&k}gb5#d0-6r^#1#w)@8!P3E69!11A?2ZU0BJmfp!|z8@{8sdIzTmJStd{eSUr z+*?jEjT2P1@Fan!lL>h2y1~Ql&!=S*R{AJDUsc0Umq}hRYv2)4 zr}H7527T~(|v8w3yO58ArN?s{sK&1|)3_*5lU)5_#L zhrdWLRvm6(L6k1o1yKvB_Lyc$&Y%Bs^0;CcumpVdRbjiri-k3jC+cZ)a6n8BKit*S zoXYK_fq0x>F~6&&R7EGUt1P3NQjAwY; zfH|s>tQaC3+!5{~&aFaf$OH6|0E`hnFp`R6M1?`}4}KO6b@*-e{r$K>UO5>a|5F$1 z@&~uZlo3_YhYvSIQ&Nk&W{Hq+Oq9iI(aO6C-&i{0GBR`>U=Zc$#1r^k^zSG-GFpnxo z9y-3>_qc@)60-i=+}74tz2cR!-^<9k#a?9h3hn{p{p$GR0e@KjyKY^yo(&8;Ip*cl0-raPMV2ytSmuBh44RaNy}4=K|>29k?AofA;JW z3Yrbjw*kGl%@zbNcjlhPv;ZIgc)#>BP5f;ArrN(tYgPaNaQsg(V*r4^-;t01_xNtC z<1bVIcrX9}2yh-|xWa@IED zz4!;aMNXgXP9tFQ@!00{IA`w!5IA1eyV}jM>a=$TB#drdV4lEP8mL**?mU!N?cdUk;!)ou6@4!elE8R@FM@QE>n70K_Z;E8i z%#bZ9<>EQEF{~qJy%?+8^areCz)N|hno@JjZraSlTJjGeGjdlc*R+6TPR4SJvaBk) zD!0#D{N`V?{8TmVD=p^xE-fp9$3~95`Jo1=9BPIN#&StP)y@hFt{bFKIpoB-U_)?X z&-@qX!7K3}o12)6I}?cD%_CoK?kt#rhbmx3d~W%FYGQWGAalJun=AY7b)v)}1Ol+y zY-^-g1H%fj5n#XA;y6ov*ICs1pa8PF|vOS$bqXZ z{{n4Lq#T?>vOR~|L0lx9!Vx0)=pd3x;~G`t0yt?bBAP)iF%+D{GEzA%?EwmTm{w{3 z3nht*k(raLGjz$m-c;SVSR_||zEi}?t?6gUDV94wH|uOYvU6w;a!pi=IXtvrPn*S6 z%>-;dZpsapEq&`q8}iZT8`U3ehNFgV3UQ3Vnxf2TV5O6{35%`T5QGRxg&&zLT3+wA=DTYMBn+Be8FnRJU3CYW8Q2(wN*@IW6fztVI@n~){W=&fne_0t%wu?uy7T5Nw zCQ+`RNvRi=aWj^Ohr~I~T4}niJL&6bGA{<#m1!$`P9fZNK-2fJAl>!Su^-6$NZS+A z`!22LSLl8z==va?9}&^9ueJ0s(f-)cb_?OV57T=fwO+6BTu3da4(>B+u9I+{C`9v_ zjA+^p)3M03FVbwQX`Rt56Jeg7VVdkPCQF7iM4u(;@*a&ba@qjVcvJ0Wn#yrX_qZ}^ zDvUhjItL-sD1=n%Adzrl`3#ZbgldRDNPJ$5;PG1H@^%hafL(Dc24ND3L42T7ne{Yk zG;q{$kGheg3=ndfC$VPFuC@k?AmE}z<2Q*aybzW6ECe36En(0URFv0JSt$p_MOi5y z9?6nhfXKz9!nGnL7LmO=Y<|ud9FmD7B9K+diCQG15E)63^h8Kn;#yh^JWW$$6Vo&; z4peJd0VgGD&hA;#P)SKlC|eR+9$o%8cGHr9&5})3soI06$WAECe70 zglGpK424b`B&7%N+z7q9Ta{8k_|m_E?P|vDfNpJN$B&{$P)`45|Nkc?7cv%{|8Q*6 z%&H1vcSb0b77a{vH$rYvBP$W_@j7s$+3Pqlu;v_sBnx-ZL4)t!dI?kI^28~}OT6${ z)O1~WBEm|#xiNa;H3o!p&wF4;kc672Jym2?Z-}0V+3c&iAwOJ1iXoAu@}p|vs!r%z z*rk5PpeEOItDr9CAACrxTE&T-Txer9?%O~A=jQ{asiz952&O5bu)ePL>bCXxK_}h1 zNeE;~e3%c!c=1l>suzhK+YOr_%Sn zw0-6sqHQ$`7>!jIUbJ0jw!DyRCuN z@lK07>#3ArDHS*%og^ZiKSt#5105|4ZGm@FQthB>3^oT^yCO&zOUu6<0HCGVim^2i z87kdFB{YUkg%$|W#G3ow-J6&4lj>5IT#*fyD8|NbLaXAXZ{mxc($-|oG3?A=GOo~X z=YGNrQ^-|YRnIqb#O$?tZt>3|p<$YFMx~(6v^f>x;DT9EV^w&)Zh*GgIV(49bnPO| zg)1VZj))LR0i9wLHb&t#R93ov7V5ITR~de4e%rl}fjz2|Oc-m({+~L<{TI`CN%oJT z=yHuTbj>r-SCZf#+x=&|&EU=)vB;)Hy{T1wKkuI}!0_A%{9q&udxpL6v~(QXhYYy| z<^giO`vK4o$H)J(>1BoLP9H?Kdepeo*Q)8aGxy7`F5_DVctEmMO8NsM!DZQDl zy{NFQI0^|qJiu0f2@!GaeB5cp9ZB|Ro$iI~d^+c_K4fSECKDD?LLpOU!pxvK_y2EG zzxF-JFm_NuEyo}A0gKAXA`}%h&CGpo=FNLgBaKFOG9w2B0m=C=l9PWdg*@8itQ?>v zBFWAVu)RoJ{%)(D+Y-3lEve{=ZJH%ooi_78XA6X7dGb7bEuG!xZXKm7)&)nrw+k5$G$OF6Y%hXMB^m zXfjGcr4~8qtTjX$D;)&}un-V}@TLnSh%M7w`>!y-zyjO{v58ntw+5htNeF%yLh(iF ztN69{*~=9Eg{m56s*sJcA+jQ0h=S?m%75;+jIDo0d67&TWPp>`KXMsUi$y!P-|l=b z3JM4cLOgZn_8=J7{9#_e?D$9kv`T=6H^Cx;4uW2S)dcGZ`j1Tx8s@06?|P%H2uGcO zy^RQRCmA4D#R6&7000Dpoe_TpTguMEtte4ECKO~ zOB|9PV>FRR7B+Ke>tR=THC7e@>w7EA$LBC19eDpsB{gjJj(6eJ(H$x+LdC#{qciz~WF!U{f}G5Fxu)|X}< zO_-E*y7^HKnydqol8E>boT%-3mP;`f00#>nxmpuFn4qA=ny#@LsIF=$@juiD63`-X zX+U|rj#pLaxs@lml6$esjacMT;j1t$QA|TlrYZ`-S5Bp+FcQfLIx*f48OW}q4HT=b z1|q=u5Qy?-1Kt{B0XerZfJyTj$hSQV7hRP{&2__=u7$*cb+7Ai8CRz3jtSm6S4vnqukzGga-q+gSYI`Ur1&V>YLn*E zEmU2IhKrRBK~=*D$vn~A2PUUCma$_jnl7cqMqlieWJwr7V(Wo32?DQnMn<#v|Vt!ng-ZUtA?Gxy; ze;K(63|?%AYr#bDzJ=R^bgmAv?Rp*c&@ks?3_LpRq@GLj)fVbo0sGPEOYXYj=iqf^ zGYF@*9pLQLJnJcMzNG#%xH25Oq2ES7Thq-3M0YoPZRq%2YU*bBGmvtEhT@7wNah$g zmHCsD>c>{(-m8FFcR74)70P+ujPxDklNMFj&oL5lo8yAuG^vBit0Re6a$b<$hEb2+ zj|847qxYa|p1nKF`?~m7r<~Du-t2lV3u6>jDWS)p;XDppJo0|WqFmUibhN>+4k7|B zlH}Nd0+CQ6O3{Z5^k4vg9UZ^bmSNVJ71N7=rl-p7&PVfv*LRS4X7%`a*vNKSN#P*# z)3<|hjKlPs3$T}6?BIMGt+CufvrRR@XhWT4bu0R$6)b0o+J{4%7l}gbo8=W#H7~M8 z)HlCOhe)auL8ZbeODRfFltSbu4>=|2k1UnT$c{1Q?LK{QbN0iRTtPPH2nnOl=+$Ql z8QJp+vV@Mui#W_EW1jmEagTSwSI7B~kk*5A>g&h;O&ix*^cb zV!`LWrEG-MQfd2&j!IQ$?=I@N4&`{d;3BH@L^2ZNqYEOq5eVcPU8r4ch-tHWR9!{ z(qCp&Zag?*WJ%Q7>XAzM>dlezSc-%djw+Btyz;$fWy)rfvWjSG4Y9>)b8}4=F3|V} zj{G7j$&=}(wUu|Cp`F;3bH~m#08UXbCsw{EAS^gzB!5|2tX*z>uR{cO zY53TIkXi@8DGkFeV0w~n z>E|hK3l}g->AIggqur*=v8Yat5QK zp#dx`5CsTM0#tk>5D@Gk*h{eAfY?Pn83@AV>^P)rxcYK9KlkA1q@TrwlX>$-M<*4X zZHBOC3U8P9Hy6b{a;X?UomfAwt@ZoV5hHB>SY9jsSAjDViyzEvT;4h>gEUndyu5yl z<{vgW%zL}aoht#}YDLzsRv43DG6))J#>6PuXh-4x{hMOG4~#+!tD9*kY-QK@!%@Q! zVTaSIZ=AWRk>?0%YdVGucfP5UT=-nNb3?^?)zs}h+pL*3uoi;9H97S|3{+8K!HAme z%oMGt-IA;0n=Q1002>;%eFPg8TYgOTtHs$j@uzWiLGC_BW|)pKPznA@{v(*xh6Y$@OB=DUp&+uOvm`eK{t5~L4{F)iprt`iOOR(hbrT|0IG@ye5w;QM{N$j zVd`>HAoT?+n4Urv!O|2`(3_@WS(Sy-=*v!740lOJHgrWM#=0gO8@s0>cJxrC?Ch~> z*wri5GX-m`8eDLbkR22eP{@ZAe#C-^h0=kXSR}D1@3$KEZAi?(E%^+Aui!DFYZwe zVG_D+hVuA&gpZNu^cQCF_=Y#*^&E`D|1rrg?L)<{4(k3gHSiihVXuU6EDwT6 zh=>L8V+V197;zzbJV+29;)Dn8?6WJo2FxS}`R&N(<^mjZ1Ccu@d4QTHD0zXJ4gP?j;V~AlbXyjvoPcZ?-e2Do{!jByO1OcQ7B`J(7 z;S`b+D1y|CBRr6Bgnf|#6z5chOIN^q0T4A*e+tf=C0lNiNchbkMJ4lwuA^sSb8&4k**XC@aDm zcVJ0qPcXo^60(Xznk~W}gK!Yfq#)r4IvhcVJw)P1asqx<5S}g=dzu{1zSF3`Q&*^q z)l+RnypBg9lw%nyw494cJj^dB&`I0#1GvgVE_99~7<|{$^re8(eq;nv)*?DqQbd>5 zhvFQy=un7)`Lq;oG21!7Nfjbveg|9HRv^wmJg3@pgBWOcJakfHvJCJNw{J5@$`4lW zNHBrThaZ0d0)+`Drw~agno6vA2@<7BlOcP*jGrq{0h>a_O7{Znfo}d?t=hEf(5Xwe z9=-bX8!%?vgh^y`Xy_Q2)@|6tvSk|^0;4c8(KxvU2i~mh@$&!#6*>%*gC#g2l29RRSAEQV&v-qGS9*AbMx}!((`M3a-Z3e8 zN)6$_&y9#gSSh!VG@OyurZoY`@3E;^w$gTWSPS?@oooo~9aFWTmXxx?Ud>8un2<^q7oEOvV52K^y28iJ7-?LkNE~ zwFE=4fHG6WkY#u^I{dJaJ)N&f%83VhPy4&`VapT5~>rb;Sk*~f*D8SWQ zV%;YxYrmE`ei8)wIiGF_Jr-^DbWN}fX4P1;b=CFBH=1`liaRa3-@^Z16O*tP`^(*K zxaYnH9(q)sH(|k|B@}R>2BV>4VA`;WWy^NiiDK8D{laE{YeyS#vy-dgS08y}6emV? zv|vcE1`ZKP$ZDY=RMpTx7x&R|;v1EA9p&VUAf!ciHws8^laM(5F=@@?7?8ZGck7J1 z@tMH4xlaY+iG4G+>^g$o7F@(rQqz`n_RB`Tb^@d0DHh$(60(1Db$Ry=#3#DZoprxx z8p?Y*cZ$!OdFJ0YjdT9LrAu+s6^w6}XqJYK#0X`^5RY-{QC4o=W_pD_KJ&%{cORhp z=DquO(SG|;S)t+K&Fdwq*6WHM-h0Y)-oyLV9T

kC67%tFalbnOLjOLNhv|}TZQ5OS#Z}kTs*4)M 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≪HK)Jkk15%m z@FMEEBj)Xw?xlEq@lD|~)VmNEX0UD8~Xaf!Mb_}cdBbLy#XvZovYs=|uTM1rTdL^1c@Hypk z1r7e7RDY`P&s~T1M96*RctvR;hO5Fb%AHyDBpfp;dHkT)ut@23FYtv^dOo(pDLH|$ ze>O4w8ozgfeAka@rQPWoKT)d(y*nt59_&S@A2rqlMl{D&I| zWp8o-*u}#g-z=BJO(%uGL@bY{n6Vmmj5y*dqkj+{haY3zwR4j~GgS8BwgVC54RXwD zP(2|n?qWdsU+2fs|4w=;RvPyPcny-#f_h`|^Nz4_+~+3vCMe^>ZF7IoDKg9h*kA%^ zRGD9qrBsUjl^hdtI7zj1)+ao;Pt=H}N5&@X4ZrKuRZx_zp+udGo%uq&{{`-!fiB`~ zH=-`*khX1(=GN~QTW88{JL_Ggw;eO*#9agDD$eAO^)?n9M|qzA(;Qfqg46ZSX~6mA z4~;1q;kdDvBb?ml#`z{_`GalKk7*lZxv#+z2@z+;&bWPogZo8|C`P0PGKoT^;d%LJ z6~&#+H)Buqi!Yz7?;Yi9sA*05C{K%)oS(Jh7j{eA zyc`xjzPV~jX?x$xA@aXN4SPj57j^qb%}z@0;7ruk=Ld=;7HV?LhMnG9)9+UCFwt7b zADnRbHl}TPC-T&^Ucb_#VBrGiC4TP&?XDl=XW#8#b*xqe26r-A`pV8VbtDBEl2~Qk zE}o*wh_7kP+9SXSGWKwqTvZ&~EHRbU4ZSK&g8dDofS#Q_Idd`)`KQb>=Ggka@V-+A zxBNeT_}^%XL80H@r(?DaQ#HE}&iMD?sY;Q6s@%TmaS|pvPR3wvX0v#7oMA-*#>3S7~d&6H3UbrF(L6#tXV4`eE%lVpT3Fb>`zNze-YOg7=Nb`FA7pS5F1r z`!HYD^Lx$TbxgXUuBOJIq%+M*84CeJA)Y~^Ll7u>S^4C`UBbal*%6y)Y3aku^&R;1fR%M~#pYbG8`1^pA`Z8` zP@0t`+TM(Tbno)qTC?;HUeW1Z^sY!Krsg~%rHMrB(mylvTK96qM;gN5c_Er*md%~7|k&a_8d+OHuO6wlvx2|L$VvIF* zXDye45j72|x&6-m5pMvlc~g~Kq+RWl_akFJ7>xcPlKOtkJ$#!7=#Wxs_cMDt!;476pn51Km zT)wsb<-WU*%-Pj5+`RdNuZsu^=WcHVuC+bO5vqFH&z zcIgMaY2>>`EBg^{$V-z3WA@21&fZiU5rvg4zONlF&}{ko?L@;A%`jTBHngnu!i$w) zMxQ?)#(BsOOLdL#)0Dmjc~>r1HA#y{V+_?TFCUeJm0x~m`Ig2`yY%6p>S7;m8JAc% zfd6j(Kih6PrB}`*_U{tARlrwrOiMoYh0}Yle>tarVGZtB_+-KUAR*~G5KY4_>di^b?B>=+>VKfjCucMvj4c~FN4x=XzsVkoye7O9xU=L-#=RRKNI5X zdkU@1?)wvQ$0uj;sP+`okR8>_u&h=K40UE^7w#U0ti-Wjzb5SXLRT|fHj%?|W5+xD zB+^|OWr9%cr!Ych=Nq28&sedD2O>CJ5JzqbB7c zKV-fvTvsj=PY|u~w496oI)Vfp1F7>vMOA&7^OQ>>o8)qzS+J`ORf>XXJaD>7 zt0RXlP&*wwXDQBNxC#!_@slTtMKNGHkgBEncd2(<@BADwK?07Bt3Yfio&#Z5hJrG8(zaWp*cuTE4AGg&esCn6HS$oJ}=KF-9<-NFg zS+a~3ND_4Ytk1Alc^(5c*Q)!XYWB8|j{>kow%*96ylX01K^dpGxKtPP>xE$(IEa|3yyA1X7&{*JOQ)?4BB_twrb*`z#WdylQc zLh~|se`~nhwX-2w1Exdx1X%k-wZe(JpxImo>v$mN)Rh8yT-kY&C5m7!b~+UxpV8L% zpaZZJ*3aw25#>6o;~z{uJ4n>HXb^8;Q}okaa3{y1plmO&PT>?NxQTo2q987@U1i*& z6x`Vvx&i83f@~I(n{Y0UT|Lgh0|Y_~wcRL&!%bKMQDGOnpve}fVx2HoT6Sy zE~pY-JO9uIOuLGp^|`Oj7AgmvTmGE~S(P>(m^&{ljfT=PBY&j?9ci3!SH(Xf+?>sPFp*v0|X@bes7%{o9sdlQ5l>lo`7 zNA$AhLLOpkd7!8ZV^Liw<4&nK!on;rP2c0(3LUM&M=1ysVLwZRDbtiZ_cx=a!wAa* zwjoyNr&^QM&)>*Xrw^B-4R;M$V!CNyb`XkZG5fzY-cy65$SY`CMLPmSHiOE_ACrA9rhZb$(pK!<<5z{?aq=zf0a#W z)Sv1=qh7<_H_VX? z_4>D-7aLt32tx6HNSxFZ2F(98vqCUswx?5t-A% zK_(Ou*}uVkTu2D^zY-B*Jv+k;3cZd% zI^HdAeG(&U)!)mHgY)aI8+hc+2vtGPU77MQk%U^XcCAfJ4bSEWq&~i6*$ancyH)%x zNM;5$Y0uV#P8ttq+zPAqJ|~9+x}ccVw&qb3UmIbd?3xgj^G0loSoPsYNJ?)xyjoAJr6npN12G2L z^tO15?P6c2%35Hwdp*86Dxv}$O9l{;K%1Hi> zQZY(LBE1)Yis)G&7A5}BsQ>PJlu9>%z_B=|j+_ICZ-pf~0SAt}2PnDLUS6x7X)6eh z!bCZsE}{tRl-Dtc-4O%$Zg&0%*5U7QsV%f|9aeFiN70Q%O;Q zo-VuiJ7s${4(Z4vzQp9*jAA%!n{aCsxZkedCRKv3D6*?MFPHMPw`gLJwqF(Az$aX%6 zLsj2;HE5X-DP1FLQsG=(N;T0I4D4HvS2-J**d^oP(UBn(iL}8fMk~f@(1GEr)G8^4 zTM@=^K%cRJiMKoHA$k;zYvaL?tA`yVh*VH;tvA&=BLIp5Pxhqa%uqKC2(@U5Ks=i@ zKcrfO8|@&f-OM6$YsWd-zG<_6gjjHYg}zat1n|-aPq8{HZ#DEnu%v-8TcY+k3(A=Z-Wb|2RKqSk z-KrF;JLAgclb!OxB#zo@wn|;8v^V!+;g>hk%W5B;se|;od>|eQcKBTasOZ*TKQ+F` z_P_x_k1BS_HuaqNk`L-Hi6zU_`GgSwoYo9+S%)S?el;*LxPxL|FU1J>CcP3!?^rr_ z^(^8NqHYt)DUH}~lLqbzXW>ktI{~nff|YAlg!`?8tl=cXFo963srD~U=}3(+Cq`cu zT(y{u(UX~v(7}^%zqXv7UNBePjzA6rtE4wM%W$Lu=Nv<&AF%f^d&s#rhpa#QMWEJs z8S0e=5FRc7QX93G8g=j{ZWlHJ_~uh{<=u8=9Ms-34vjvP^aue06N4zwW525Z`GO+g z^G@ zCdPa}vhi!9+2&81apUXu`6X4qPfe>Ti*jwUUTg9gYtvJ_8lp*!%?dSI0Za$%w@-L8 zFUwBVeUtWs4_Qpd`G*d9}Ov3hRe(K#qfj;9<)czzVb7%w$B5r{h_WJ zm)xaG)kGKSHodOq(#!s845?iQw9{VIx{`WR56-3b%(V2Uz(n1+WKPFw56#pqa}uj< zbhmv6Ne6j>B!I3)X)l|;CcT` zY>W1xEA%7%XZ-JuIy@Dx#DDzcFtgmN{At)kMCijDof#%d$p;l!C+llFbxQB;icPT% z+?KZ1J%2y4|8W7GGGfixAES=WMwmCT&T$!U+X`M&OLA92rfzxJK!htgK* zM(Hop>tv6~W%4JQ4)I6vE2DpC?omJrPSL1X8S`Are&sA>weq^y`(yvt`h4qtWpVbU zaSygV-iD-ha`P4?Z0YRRU7dJKVyx>A9j}uYNc1a`UhMw5JF`$? zP#au^T0=N_LGtU&l_^)I+@2C+ZeYI5{E+!QbC)q@WQ~o*5|i5GFa=B5wIuCjQ^jhfM&__7Wa$e_r%K6#qx8hdb+KL=7h9$$YU==Vr zOajxxT(Dl)7;GMP7Pbs~0DA`e2i6An;IVK7ybw-=bKxqu72XOThEKx}!OtP$5PgU- z#2n%bVhOQ^c!Ky7(TqgoGstvg9ukjaBNa$9(u*8GP9PVMXOY*C50Fohe;_}jpi+iP zMdhF>QB0H!Wkk7AeW)?i9O^V`3H1Q=4D~On4eg_2(Fk-Qx*E+x*P)xy?dVbTEcyic zGWw3blyHSyDOX__gIT8l3vd7d4ggq(4=^rJF}fc%IKD#g#!EU%U3Qb=OwX4hjpiu} z)-w$0V8{&JbJ9tBqF@;U+Oo%W`acu0kBvD0@#i#X5s~nHUBaT+h7II9VhNT;m9Kcs zYYU1J!RtzZM@N$`>qhuSd0{FEkGqs6;6F%-a`j5^6*?xya|T+znv1Vl#9|S(#-Y_V zuCgL(d1bC+zx-=87w{Z1PT4T0*@2b#h~G=$aGYW^&idMo?$QOOyY)ghF?7_#Qh2i) zOhnXTks}cSp)|Ihp?V3zCo}Q5{V%x~IEdpb=KGiVThzr-rqPD3kl;yHhsqcD^%_V} z%`7*UOo_a-*x;YhajYOuWNb!=9SR+NY?s1%aRU;RwfGL6tQOwG)d-?K{@mKMA#!>= zc}qc%qE@Q2O6z#pWyX6}FbZYdgis6P#_F2N-w)Nr(cl9*Vy=3e;)HGdNrg>dY6Q7h(_PEiL+_)i!t+& zLk#{Yhe<0Y7E^yZc7Qc(O(gJ+juy|dD!ICSS=e8x$8wcI{&{a52Fpfvd+053kXEEq zy{)a0y&^u(?Z+~eh@>Q?+!qxpu!tU434(u-+%m;AHLp1K1kWMZH@tfFc5Fs-b2U5O z;E5;}g>!Y7U)tQ-^j36;>GG}ibfPv<()s>RoEFQc6o4XHKXI8bIuKGeRx1K1pCo)f z`#O#2A5M$Yh0X@o5;`93bK*qef!%`T+g-kYB=)TM4hrmuQBU=`_|OMWq3!Z;d4)n^f%sEN0iwN(p;f10#z@^-4%wS{U5Np&RlvEEYb)~Xk4zwRWDyhpdQR{ z*T`bn`ES<@(&SC1x86JeWMYh@yY|rmlrZ~?x5#nl+-@cV3@cPOX|gjubb&9F59lvh zzwMi|yk$o-HU!P+J8Q_ku zTBiM2fH{QSJG+r%-T2!Ayca>dsZb!E?sh-+b8`2NJ`De@8_7JH>z#_uZ)tPFX@+m$ zQjy5=Od57sF1L|0kwNc&YN1*aJjp=rP%Suz-0{cx^|lHFg-nu&PejQYLK!RSpSHRBA8Rxn7x`j05H-k|eNHuq zL~LxJk3=I9l;q@NiA>v|D>O=ahj%(OiVpmWI50HF;Ak^&vjl*4v<0jNa*U)U5>Zm# zuwmW|qZ^02rMrH8&t2SGBnjq;w4w~p;Iz(W`^L^I8s5KDsZdB<)Wod6+tvhUN$`~B zY>qQdPOU?K;GOL<99>O@*4xb}(wB@q@5Kry z3pmdecrHMexqKDDxxC;meGaM24aPuh)-K<-8V+=%nmKC9+X(oak9W<{i~_HC~rNNh2kLDI_g5HEj!Y%{;5B zBnnC5%->D<)*~Xwfpx!f#UJO-0g4cQ__Nx3e-BQh;I%FsabDc4>tOOr|VMp%oHCH8H#g6nnDZemQvWcTdB3tYC<;p|M+ zH<08i;%M;f@Xm(NdRH(N9Rl;Gz>=v(g0P}vE!+v*BCKVE*&^wwle_(9a-O>BxzfMK z^4my&ZwT)n9$6=eDCFi@Y{#x&9kpwLw{gQgvpUj4sY?|P~lT8*kc=PP_J31`_0 zZ{nM;U_&l)me+(ZR)vhhP=>t#>d`Ot&b`%-#v)soZ4HB0}!M5YznEadp{=?U- zHNeGOg2@zHjfcfrQv@B$$s-&eh~WWOG9#sY*l+z}b=-Z#l&n^SG#YeTJfUf#Z)GQo zMEb(^^V)PvvtM|Q`Lm~$${EpkIv?|*lqgx4Y=Iv23YBlZ7ELw`!6*ug5E!S54+#xX zEn#-egO`kj?c*M;mI1%povYLhk|dKwoKCmfIPD<{I!`d&t*h0y%}#_WX|wnnMym$fjC%W+XKFpGW9dfFnj)Ep_va2Vr zPJ&e%H}lnav&S%D-qBvKuga9hT-&{7c#Tg+5Q0D>2;X=M1vsTs+G&zEbQa{6203#e z&?Z^k!MWa+#bzlrH7z>lS;MUAw=bgQvpam2o$+`&9gE`!d^Vd8d5k1A1Vt)7ZsqfP z!$T=a6{@#^AAnbsTv8Q9jffMeFuHJ+MH*9=ux33ivk3AU&Z*Bbep74o2+t8N#_BGn zljrm8rb3w|bDr_)fm3WsZW?kklR5XFg0=A@sp7+Tjz_|L`_oTKr@#&<4IvmAk7Z?p znX@-fQ7HbAYKvy+6*>7TUY7E1azx5qH;H1*Yo^a<352kpoiSkccSMetH+`5JB>OeZ zYuiZ3uBs|$X^FqaWdIftr4cNR6pMT{VkQ_8?6~S66yVomM04V@f+(9-+7<}eKb3Qd z9S^g09_Xn5RRtncPm~PK!BZ4uZJP#5)KW=FJjGC4DNzs#Sv|q3bk8EVGDlH<)?prv zGF=LFZgm*|r=cC`c1wcOAm{&mNB2VJ9zsBR*;U_fR8d3?MJxEOoCi_0YCVE7(bB(a_=IG1AtjXJCrOA;m~yM?0fVtoTS_m zmoAzHHL0Graje^4)$_Gn0>|S~+3oS@aQ>WsY7%5b$#vIo;8X-H%5`asOdht%f))d1 zjE=h0@UrUxlTjleW1HH#Sg>>9%4J@%%&>q_ZRxz!Y^zqGO2xdR_O&MSB1bqQ;OT}* znB)}HFNY#1L}0AV=Jdp?eV=8YMak2RMkWBh+x9N(^8s_qH9_LdU~j^r^z^I%mNFgN zTX&5UG$WL?dR|k@Y4><@CekJBUE$k zbR%izpmpGWEoEw!PJ7%T9~w_n6hRCeHM^6ObMocAAVegtt=2@^3*Z`WALe={;6VAm zNo?y@j`as5ooO81wYPa=T?|e$AGi>Z(D2VFVa*qBk*;fb7aj#NtUzU8tUSE)h+%MG z?iR2IAR-RIffv=ogu$x0pRsu}%M3m%e=}1-*he?6Q+qaOJ2cxe&nl&29!(@8;bb>x z&@wbguXV@8BTwq2mY3O0IxQ_-z>0wv$5*Q=$e}3ki11O;{X`L1Qpe25`U|4OoY%?= z6%i6F$<;A(eC1NB#mvDNqm!?8#(E`>T2=qE}cfFjr9+Y}Z2rhHCpM^L0xN{`j_+W*@;%wn@h z8O=3jx^CAScv6#Mr(|7be8qi})ojwK#e6oCiTvsnLG`>^t&uWK9ZgszStK7g>Dw@< zwEi;n?y8GfT+LTFGKTdM&v2EzS{xNR5pJJ~U*NQrvo%VbTx0~^pg=Zt4S0&2>R~A? zBEcw@PF1CrL6`qu`s(Fu8yrQ9AIeFzzG;y@Lxj~wIfsiS7zyW9K98l?_(p{R)+tR9 z+j~<26=R+Bi_dRM(%=Oy@Cpf*Ac_$qUxH8?2HPMI+8A8flHHUzH7v1zTWx{;EJw8g z1&{(j7xU#$iH1u2Pi+XstJOnTp`e)nDd0oZqYrd-m)_OzqhFj!RSO2dM0NCA{#Lb2 zNenZ@4gaqx&uP~Qq@oxs8ywIn>ppSU^2YM9VPh!qzC;AqRXi0p;zpuz3av;wUTSKY zRHA8?jQL%z%XnqPsi_}D@KST>V$g27X0{NXD`On@=o8_yxeosna1~>ytgH#PH2SM5 zooX_om72`v+IOeTFY%bLcr+A7BC$*{YoLey7Rz>@L%Mv+xM+h`<0_6gtR^J02Nx7W zW#w9z_(gu+nbYK|EXYvHnxKxEq~mUjD>;J}EtE<^ zXdLZROexzTH#)qH7Tv>?8?v;Xw5eRDk`fJG&>ozq*)gu9KBAcbO2yeB5 zA>4-La&Y9OeE%3#YjvN~1|(Oj8MV`y;krNWprDW|)9}S2g4>Y`+ibvoLw@Zw;E1KV zrba!3VY9|IsjcF9Xhx7WudV+mb{!4v5=TPl@&ZUjZbK|kz44J9SNyyV&f4kDOEQ5?sRzey!vNqDQ~ z=`Ast3zaUssQYPZmlU1(^ic2n+pZ4{t&x2a9}Io|rF97!Fd~=+?63&T!i)~`fND>t zzE$-#=xz&#J|5nSM4qLWdU)5)Z$AA2c0uqMNvTEj*6CIclje1W#xsIw)db-wkebf@ z2XVfdlzTZ&WpjGUe>5MWo*97vN(A2^;|;|~XXWoUYP*^)} zZh3E$g0Q5tK3GxhmL-{Czz;)ZhfaevfLufg9EB0Cpu4caU@$1k1kFQ!o17wzxLPUH2-e0~-gys1&+|CV*oREm)-s6JY}riArE5DJ-uI z$&1*Mdj6Y%5dzIHnOFd1+2&$r)!foI#%ao4J=oVp0|M+sZh^knCyIcLJF|LKSa_CC zSbR&Ou_SpBuNP?ovVnA9e$SK1b;yE$0Mh1uAXMlBd@y;E#XrMo8_%jyJ0P==8L$1qBknuy?*8-3n>FZE30xsCylH*%85tw9kH4So zPn(?vQiYzq0Q?90rUE=I23&`m7u0_{*oWur%;9Q)!i-GB@4y^-sVR>+3Tx&Z=GP3* zoH?AsGoLKhm>_aSgx31{j%gAj+Q#E{1STHyBTcMq~8#Ler&KyL8BBQpXW3`W!oJDltZ7>H# zCB0Hf8<^cj2EDygpA4$fOT%olCzg9eophCt0z`rO`EDJbsLxW_rOVykT2oQbUZizXFjvYZ-eH%NcFSbyAmH#G9b)hx2af-Hm)Vx( z(AR&fKvDAHs(^mit}ZfX@m8bAq%dTq2*DIHEqOG{KHNSYIm-ag45bn)tHcD?N|DVE zmI2Sy(37B6-rrG(zgTIozrBZu4stiCm9^&93t}G2ftj z{KxExE^wb;_4@kn+aS$_9tZubIYNAn47aW-6Hz1EC+ouNUU6x8ZT$fhduRMZ#7K20 zS``AAK6U=7AnKfR(;qYbGoF36TMxEA?ymOF2{0Gt8dn~C!Ka>TlD`qbFOVa~&)ypX ze`0k}-$Oo9<)Ikq7SBhqQDDUV#DcqB_qP4t3^^US2mI4n@4dIaH)SuP&tPDd?+kDQ zR5ok1ey&j}JGJ0n3bM)y|h#O#ljd%J#1 zvej=ink{A%Z)v?^MGJ65jJN=#EHT$s3>1oP+h$UgxGG1Dd%JC~x4WI*jc$f4q2p=S zzUsmM2TCa$!R?lr0TO9$DIcTV;BZBoNy?)i7GqJkYNNhO_sW6E$+jGfg?)~Q4rWA# zh{qB!v9ECsaS0wJ7x!B%;1E7}h%06k1DY$~p|@L6bjubkLgE%UwA8-FOtI3E#;S`N z*6erI{e^Tom4rhKHW_Wtr;vl&vQ=j`?sGuL4hh}Psq#ATNsLJEFh-P`eCpz2KGuAR z*IgrGKlX2P+ah%$o#0_^4=5k2kB?NMV86=(J1u+SMyV9`GD`FqsR)H*YjyX7QoJYH zy6k@zJk!*g%d4wB<<9!qG8y1p%O4P%G0Db_Sy@v~P{P0!xFNtdPvy{w#k|pZaiG(( zr+HyJ0~oOz=TLzq<27ejb(w8;RX61_E7)lUcG&HQ90GuY5 z&zBpTG`XlB4_6}+N?+YJHl9)5A{lg&&ry1+c@2Iye7LKwfH`mZQym4J#fw?|z(BR~ zpsO&=TJGh%D;#Pd6S*o>j?#H4fyF`ON1JFy5+}@^+meC8& zsW+(t%SA5vwbvFpxfpe=t%YnIt$befIchcsPSnbzkNa`IMku04qw&pCDm`Q%#G;2} z*qeHV-sJW-w-XH&X1$UG>F?LE`;1(SzJMOw`A@TYEUnQ8mN|RCbg^N#Ct55j8{W?j z86*C5#_w<1_1gjlW@gxlK9hzk6zL3+uhSZ%ry*Q(g#O|~2}o1E&_e}c{NvB=F)+}Y zTwt3Qg2aYnanG)3^swEF7$&$Ax8Cfn6}xsJc{w-DR-p}VUUxO*@}4kJ&usd04ktu8PW(BSD5F=_rCc(T^I-CX-uLYtsQm`q`&9t8CM12N)&RpFQ=) zw3|#$r!S@-F%?r~o8-k8@%tSFHT0x}CwxFH$GNA=iCu zeTRs(CAEtC{XAbQl>lJ@=3VdZp$%F~>WIS~XI;+H_v^2NDYe=jXlTebJCqivJBdB< z+S}6cB%`pl==Jwf9m}TT9uLb_Fsrl{&|p`XF85d#X?@A#Cz9^u$vVe@S6Eb&u)Vih zd+zXjbT~m(5DU3PafHNiu#!mpMfPadHn-^Lthy^M9<(}_h&!F$5JHi7L{xH>DGT(u zUZHX0fr#Yn5~){Z%9m0|piSXmpQ%L!A~;2n^7I5*&PI?;$!4B9y~C~;JH#pqM@ZTb zsbc-vRWz=fMr*Bh1YfNs->x#aIWTZzrW~0sx&M*%Y6y=6!(sv^djR$UH5DL{sns$f zVlK2GvZDjTP|b9kqK=)dmQ7gy)-H%u7)*&17+}<(Ha#l2HEwt*;2<;Kjkpm6?oEr-^zlWMGXEc&JrUp=F2S%1=O&-=EiFiSJOOe zL7R}K#$PFa`ivll^T%Dm2f!UqXf>7dlFHSf$3YlFTWhhb^kk~8=8B?`wanw?0707N zs0cZEM)2%$Co@R6-5#&kDl!{496>4p-rBx_RmRcc2>!f-NHK++_k9=E5M5N-S!GmUtD@NDUD2zCG zkK2!e+$TqqK~h*^kdzf_`INEqLyp?s1m$;IDTyGMjgqr?@HmWUkWhddYTBl-Op&Yk z1!j*!L&*oN2qt9c-D2_M!w1TEIvF&ZZ{e_c_mJJ;aD@mE8qKUfbh0WlX}SVIuC>ao zN~X=I#}e0WWM)rpY^e5lJyyNhQ&*R)N^LzPq)Hi{1)4_3s=-6E(5!JijEpmuo8CZu zy}&|)+N_Kqn!gFmyX|QjC@Bp?gqIbg8UlB9zC@k88r%smB1BO!*AWe92 z(WP;>+iV7nN(QCU7;L~JcIv<&7SQ>pTZKBI+Op}SC9&V>O(vJWbsACScbPgV<^Dn3i3meO6!+TQ?*6A8YFDe5u-i$A1kKC!a@(r&by|%= zsxuhMY@lK076L~ans{@bY&9>4V3=br;}rtttFNAPI2WggA_jM3bh#sFIpn!az05wY z!VS5)&+|)~KVx{*jEWdeO!YEXs^BWgfPF_Nf-sC@UQ>+FS4kNolQSBOs0D}!JVlC& z1WoNc)Tuces>!g0!l&+EvF+3e>uQ-~n2ON?D0xbkID4r3Bqem5Bm=F_v+ zJ0UK}#+52T;uLISt$O&M$YwN#_2xw?vw9@e#yl2W0sK-~h)T;{D&Xbu#;-5w?Zj^> z?3HP@d{MR%>Gyj7Kvt6TGNfPtW;BBlMwfl2aGoJ-$s&y!yusWWy{_ScMpC845MxY* ztE_8Pppr(gVsF)Bu-6-m`2B>s1JC%g;uu6Af?_|P_f&2f;DuE{(v2@Z=aEUv_=%W{ zHP^)RJsJD%op3bYKg(ZRUt3paoTTE;0|T2!W%5aES7h*DFEiB!|3T@SH^bRq95-9t z$pKLlf;bmi^6L{Iej&+U?ETU|jU+$ARCj>@_M!%JhBmj2$8n0nNoB=Uf#AL^JL~Y- zWPo8;I)@vh@U=jhh|+IzfmxoJRF{(t(?{A%^0jOvV)|9tPxR&qU1VKlQ8`>purljp zhE|#k`VhspP(Q&>+B(HLuy>AGB`XSb6#Tb>T3MZL`7BKWqlY(u{1pz)2pX8_pA8YF&I^n;^$x0r#SQ_+f1<$OeOVKNcUod#}!lOx&>_viR4j zdm@2#Dh2iv{5MyFeYJ25UAVkcHG{Redzx&q|I%do+t+SN4W8vb5=aFVmf_%)Bw*Il ziorru-zepa={Gu`0S_}w=|;?VurA0@+`~?H?Tx0FS3Lxr%2TAOaPYUPBYu-hYLwMWtOE_P?Z2%dHTKo&*i15PK^Si zNJ;Gf;Vt;Kd0sLNA8=I`K7L-R2&LX}k_dOX-%76N%!Y^Xr?`s6c5h5U^ocSowIUTi z?KwI!1)BAz?-YxpQynd&(*;abgHr@Yn{fOf4RL(Nlz>-%az~KR@VY68-}04fgaigN zt1PqFXWzT}8YgyXYgt?NzPG844@RTq@h);of@?)2qhX2F!#>hyRQ=J@Jh#57$?5z61Jj7~v*_Ni&A@bL z_AITJFHA@-sFp>R&SgUfx+La9iu&*$Na>7%f75FBH&|TFV~_ZGP%i9rM|Bl5~YXWwt90S5&?S72pJUnV5--L*yb*MJ)I0Z653`14`4t2 zbb_2RzR&uvazK7c$aUcjKa)3A`Y_m+f3N(ii*Pi zjXZ3++?|%9X^}2MScLxeo2zh%t6`I54XJi|{W{gYD$pb%Ec@!P#V|eY&+tiN9*tP! zI?Cx33bQ#q^`%I>DK3!+L&*5OY^jr0{r=)r7a6Eg?k2(DGT%n}Y%SPSuLggpeehw? z0d!+fE)rn$G-+D?&17@I7YDzgugRg1Yn6&JU%4Ci?(wgP)4t+XKE19KmQ8Rf26vXX zYS0No87vJ_Rki)zsv1cStU~Zi1VMTRhWvhy*WsNdWn-IL+dJ9;fFnl@1H(4=M^10> z&mdiBz(?ko2CLb%8XhPR$DC`o^QxySwV2g)POH8n*lYzmI;r&(HsN5VEWppX61>T| zE)CKG9Rt>K-CS-Zej>i?$QerBAbZF^s@oNvw?-;uK?(or2i3za7fhSidNo#R6l^Ur zfw?{3>~sgFWA2VPPc=Me6s@m6*)ZuX^yB{Zo^KfY_MA^S<;amU4hv%_)t^2LA%xKO z3gc7H+(Wmvj!+F}EB=jnThSay`xma8M9}wLo?VwwuS5jLHU@lyIURev8zD$ zm%u%`YyKEt9$OD8{s0)L*|u>sq2jIG@OT1<*I>UO{D3h>6rTNj#<%pC0*KjvzU)5C z83ZE?1pXFq`+CB6faFhyeUvqcL!XZH$pF+3fI$g;(gFYxtYR*hME{g?>h3m+U#wIPgBI>21*h;^ zsGf+@olN6Wr;rBed-AJz#o46Mj{aXNTI(&8%cv^0=BO3&e1hGbn@%hZ()awBj*oWo zyCcQpaN{>)sMlF2PlO;c*}P0@>N)5wu0i8r<{rEm8-M(Gw4?u96QL|Gluawo)@Sfi zHXY%hTh|RG4`cP@jb6W&FsL~T6(pHn*n^pFL7WGfLZsKl_XLai|2#L6FHZt0Zs?JW zHlSA3egHA|XGE8aOgs{h$M!t^IXvX@6Ep!x`aKEVH7=+Wp#1>sl8w5WuGWhq}= zB2xYFI80ZPlC(6<$<(fzke03{J|K#qELgE$*B-lPd^S z3aw|?o7dYi*>}Wc#!!pJs7KdDf7{HL(rvI2#$T`VGW-Ah^BA!H6IvZl?W9LXv`0Po z$Iq5a(4+{3UT?BE>%x3Hd-2u}ZjVQu4002rk|nW(se1c@H(G&N!@y|AH@f|Qrs8MR zOUbzO0`D{im7FK#C}@rt^B#{n8L*Vp-ZG6RG{t5mn^@xxR9O{mx?8U$e#~p+zZ_l` z+1@OaE_j@^ADES`QH}tJf^!l6D5kH#v@#gio^GF6GAQ{MiU|RoAqWs=0B|w>0B5+2 z%4dF;)OwN?Coj(!$>d_VNQK%!O7M0#Ou|+|@<)Dd2-y=v01Qq$aF*gfF^Yr%N1S4& z&7P(HD;NX8@Su=_!AlkQrtW9L4Z=mhi~@*Bnf@R+CECH_HOixUpMgccB!mGHG%4Nj z6dJJ}oujyzeWl{qO(C-@9G*7pGE~-B-#~6chQetauNnR*S>s9$ez_J>Nn0&${|NJ2C{XqG~ko@+?nl*^Y10 z1Nv;8_JHmPdbUhJq;-_p-JOK~Zdj23`a#K1K2b_lh#6_(w%@f^S@aU z+-P=APh&NByCk;&?jrL+X!-GXJsfKxQ3w8$>=2=ZI@t&TM+^l%X%@{q0mhbvk?#ZH z7WmW0jq|?q+3@JajeodB2|my6o~5zys03|Q)1nX&abVu`zh2x(af|Y)PYaz^)0t97 zvc3f0cjrg)`9R5UgBvMe41{wo-h6LRa!r~W2G0Ks1G@%eH3%dYj)7?b`7fJ> zAUz1j0ylX4N>`(y(mJ+c^Q09|Ag1E{BABA$RcOh+70`J#vkfQ?FbN3Ya7w2?B{NP9 zj*ZcL4R5t1YRU-G<|r^$0&CdC`vEMYBYtvD z64<2phRC8gWArpEWiM*_nc?9UXcGnJ@_+cc0hJr%U z48sW(jJLM4_bK`39)??b^56IEp7$LTzcSrkJ+)AT+A598>#gvplI$aGJ0mgNvQZ9` zjngxJvL(RJj;3Y;`Z2eITkY~tO9m?5I|`cCiA*g3wI!YbYt#*ndcTz-uPgAG25S2a z;7B(O$~4%u#i8(|rYi^sIAWa`Jfa@^3V%(RaA;oYKeF5Rx0aGes~2Jw3(o>JAd(jR z6*O05+H~->IDiry3x}Wvj!7`bc9*Fa_q5M>Tg&6THg1pKF@?k48SV*x@EM!*5tO*U ze3kQyE+ggtfXIH&ZnQ9}mW z`xYNk`e#6uNCJP+xO-pC0aNWyEWZ`e?q53tjy2W(NHo8Fs!{ziDf|EmPQP?O$#hAlz-9H?m4jm% z8=q=?F*QM7*YeoW5kUPW4EPw;M(@=?E3|0Tl|s30sJ8~zP`lxrKy-!Bvds{4mcP}k zLt+GrBDypiCvc&$KUTak1`7Ki#20KP6#)+%dX@iH;E!E+&MC0|RkAIRBIoEq&zt^- zf;6CCc#wb|#B-Z_@jDinjjHyYYCYCR#z>yOv z$;(p->%@u3BP>NS8emqtfRvoWl=xY?wC5QV_fTgL%iE6baR)hjlSH3`rPJsVBPfhQ zM#mt@LB!kcAvLV5P%|slIA=q)uDrEbEQ|bZCvZfm5shpt5LmMX;Su&h!4ZF9=)a3s-mp{w10q1bXKZ2CYYjE&mjx|A z-SRS^2dHU=b()>}IX|N0k+w=43e1O%nx~n)w>ELYU$RnDAUEg=G>{Pks8%!UvQ*>I z-`f_m72P2@P<~Fx)tb}w2i@efpiiPDYRZO)49$YR`e%sTTO$R!0$K-MZV&@)0UCzZ z03E9>0(#E506@!70vI*cwYXA&grGNQOK2fY1B$l$w; zSF)DSovt?Y#KVSOm_+^+slbebo+a;hDi1{q9fM}SP1lCpt#JyD*uogsxA*NMW@6Jw zN<7Ipl8?=BF4`8>Djyd41=tc+#cx-GO;U?(Pzwn+o6F^a8?^#!p?#I6EIIkR8EXvs zWTo+Fk~8@*W4gAJ2Tp+kTym3zn{N$vUbf)jo=-iW^JA`GlC>K>t6vxTW2 zJ*ynSsAw}ir>~`5#Ns!n^R2#){~+356576XtsepEUmN+JQpEdM;JNv5-EMZ6C|7Lx zIHHp+WT;tIV)1oM>R?be=qyYcn|xGMqL681Qi*h|t4{rjBH*WYRrpdUt}IGrxf|GW zJ}Sx)(DJfrCB-BZ6}nN7&qi(z37JXZGSFF2bV*8*MkdEVkr5?nc+xsJi~xmU6XP{V z%!8&UtV@eu*DkBX=~(Xa>eK8rsXi^5p7c*noZlor{lkrY-)w^S?Z?5#?l9fJhS3JS zkS-k3<&=WiPya_@nb)9($p&W_Z$N`#n72?azc+m%y(%O?w?~TtW3W3!T-a zONhUEzyJ9Yt~4&C{3*F#IXpUiVk{Z&`UH1;@~OJ5Y~l%5_E`@th?E1$c3}}hR}{^F bvI<7D559Yq23nvUqHV>OR3D*u761SMWPP$Q literal 0 HcmV?d00001 diff --git a/content/supplemental/font/roboto-latin-wght-normal.woff2 b/content/supplemental/font/roboto-latin-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9b0f14165e44ad80256062baf0e55c163dfbe96b GIT binary patch literal 43136 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

7eh|( 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 - - diff --git a/content/supplemental/img/jmix-ai-assistant-icon.svg b/content/supplemental/img/jmix-ai-assistant-icon.svg deleted file mode 100644 index d7e7b800..00000000 --- a/content/supplemental/img/jmix-ai-assistant-icon.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/content/supplemental/img/jmix-docs-en-icon.svg b/content/supplemental/img/jmix-docs-en-icon.svg deleted file mode 100644 index d84ee2a8..00000000 --- a/content/supplemental/img/jmix-docs-en-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/content/supplemental/img/jmix-icon.svg b/content/supplemental/img/jmix-icon.svg deleted file mode 100644 index 46ea78d1..00000000 --- a/content/supplemental/img/jmix-icon.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/content/supplemental/img/warning-icon.svg b/content/supplemental/img/warning-icon.svg deleted file mode 100644 index 533e3a45..00000000 --- a/content/supplemental/img/warning-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/content/supplemental/js/a11y.js b/content/supplemental/js/a11y.js new file mode 100644 index 00000000..b5c4adbe --- /dev/null +++ b/content/supplemental/js/a11y.js @@ -0,0 +1,67 @@ +// Accessibility for markup that site.js and the Lunr search UI control: aria-expanded on the toggles +// whose state site.js keeps in classes, a name for the copy buttons, focus for the skip link, and +// keyboard access to the search results. +(function () { + // site.js toggles .is-active on nav items, the explore panel and the toolbar's nav toggle (it sets the burger's aria-expanded itself) + const syncNavToggle = function (item) { + const toggle = item.querySelector(':scope > .nav-item-toggle'); + if (toggle) toggle.setAttribute('aria-expanded', String(item.classList.contains('is-active'))); + }; + const explorePanel = document.querySelector('.nav-panel-explore'); + const exploreToggle = explorePanel && explorePanel.querySelector('.context'); + const navToggle = document.querySelector('.toolbar .nav-toggle'); + const syncPanels = function () { + if (exploreToggle) exploreToggle.setAttribute('aria-expanded', String(explorePanel.classList.contains('is-active'))); + if (navToggle) navToggle.setAttribute('aria-expanded', String(navToggle.classList.contains('is-active'))); + }; + document.querySelectorAll('.nav-item').forEach(syncNavToggle); + syncPanels(); + const observer = new MutationObserver(function (records) { + records.forEach(function (record) { + if (record.target.classList.contains('nav-item')) syncNavToggle(record.target); + }); + syncPanels(); + }); + const nav = document.querySelector('.nav'); + if (nav) observer.observe(nav, { subtree: true, attributes: true, attributeFilter: ['class'] }); + if (navToggle) observer.observe(navToggle, { attributes: true, attributeFilter: ['class'] }); + + // site.js names the copy buttons through a hidden icon's alt text and an invisible toast + document.querySelectorAll('.doc .source-toolbox .copy-button').forEach(function (button) { + button.setAttribute('aria-label', 'Скопировать в буфер обмена'); + const toast = button.querySelector('.copy-toast'); + if (toast) toast.setAttribute('aria-hidden', 'true'); + }); + + // site.js intercepts in-page links to scroll them, so the skip link moves focus itself + const skipLink = document.querySelector('.skip-link'); + const main = document.getElementById('main-content'); + if (skipLink && main) { + skipLink.addEventListener('click', function () { + main.focus({ preventScroll: true }); + }); + } + + // search-ui.js runs the search 100 ms after every keydown in the input and re-renders the results; + // Escape there clears the query and the results + const searchInput = document.getElementById('search-input'); + const searchArea = searchInput && searchInput.closest('.search-field'); + if (searchArea) { + const clearSearch = function () { + searchInput.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' })); + }; + // keep Tab away from search-ui.js, or the result that just received focus is replaced + document.addEventListener('keydown', function (event) { + if (event.target === searchInput && event.key === 'Tab') event.stopPropagation(); + }, true); + searchArea.addEventListener('keydown', function (event) { + if (event.key === 'Escape' && event.target !== searchInput) { + searchInput.focus(); + clearSearch(); + } + }); + searchArea.addEventListener('focusout', function (event) { + if (!event.relatedTarget || !searchArea.contains(event.relatedTarget)) clearSearch(); + }); + } +})() diff --git a/content/supplemental/js/code-toolbox.js b/content/supplemental/js/code-toolbox.js new file mode 100644 index 00000000..fc4a6288 --- /dev/null +++ b/content/supplemental/js/code-toolbox.js @@ -0,0 +1,78 @@ +// Keeps code clear of the source toolbox. site.js puts the toolbox (language label and copy button) in the top +// right corner of every code block, and it is always visible, so a first line that reaches under it would be +// covered. This marks those blocks with first-line-under-toolbox, and the stylesheet starts their code below the +// toolbox. Blocks with a shorter first line are not marked. The marks follow the font loading and the width. +(function () { + const MARK = 'first-line-under-toolbox'; + // space kept between the end of the first line and the toolbox, in rem + const CLEARANCE = 0.5; + + // Right end of the first rendered line, as it is at horizontal scroll 0, or null when the block has no layout. + // A range has one rect per text fragment and per element, so the first rect is only the start of the line: + // the end is the largest right edge among the rects on the same visual line. A first line that wraps (code in + // a table cell) counts up to the end of its first visual line. + const firstLineEnd = function (code) { + const walker = document.createTreeWalker(code, NodeFilter.SHOW_TEXT); + let node = walker.nextNode(); + if (!node) return null; + const range = document.createRange(); + range.setStart(node, 0); + let last = node; + while (node && node.data.indexOf('\n') < 0) { + last = node; + node = walker.nextNode(); + } + if (node) range.setEnd(node, node.data.indexOf('\n')); + else range.setEnd(last, last.data.length); + const rects = Array.from(range.getClientRects()).filter(function (rect) { + return rect.width > 0; + }); + if (!rects.length) return null; + const line = rects.filter(function (rect) { + return rect.top < rects[0].top + rects[0].height / 2; + }); + return Math.max.apply(null, line.map(function (rect) { + return rect.right; + })) + code.scrollLeft; + }; + + const update = function () { + const clearance = CLEARANCE * parseFloat(getComputedStyle(document.documentElement).fontSize); + const blocks = []; + document.querySelectorAll('.doc .listingblock > .content').forEach(function (content) { + const toolbox = content.querySelector(':scope > .source-toolbox'); + const pre = content.querySelector(':scope > pre.highlight'); + const code = pre && pre.querySelector(':scope > code'); + if (toolbox && code) blocks.push({ pre: pre, code: code, toolbox: toolbox }); + }); + // all reads first, then all writes, so the layout is not forced once per block; only the horizontal + // direction is measured, so the top padding that a mark adds cannot change the next result; a block or a + // toolbox without layout (the toolbox is hidden in print) cannot be measured and keeps its state + const marks = blocks.map(function (block) { + const end = firstLineEnd(block.code); + const toolbox = block.toolbox.getBoundingClientRect(); + if (end === null || !toolbox.width) return block.pre.classList.contains(MARK); + return end >= toolbox.left - clearance; + }); + blocks.forEach(function (block, i) { + block.pre.classList.toggle(MARK, marks[i]); + }); + }; + + // the font decides how wide a line is, so the first measurement waits for JetBrains Mono + document.fonts.ready.then(update); + + let scheduled = false; + const schedule = function () { + if (scheduled) return; + scheduled = true; + requestAnimationFrame(function () { + scheduled = false; + update(); + }); + }; + window.addEventListener('resize', schedule); + // a block in a closed details has no layout in some engines, so opening the details measures it again (the + // toggle event does not bubble, so the listener is on the capture phase) + document.addEventListener('toggle', schedule, true); +})() diff --git a/content/supplemental/js/dropdown-menu.js b/content/supplemental/js/dropdown-menu.js index df37df2f..69a40c71 100644 --- a/content/supplemental/js/dropdown-menu.js +++ b/content/supplemental/js/dropdown-menu.js @@ -3,14 +3,24 @@ versionDropdownWrapperList.forEach(versionDropdownWrapper => { const dropdownToggle = versionDropdownWrapper.querySelector('.version-dropdown-toggle'); const dropdownMenu = versionDropdownWrapper.querySelector('.version-dropdown-menu'); - dropdownToggle.addEventListener('click', function (event) { - if (dropdownToggle.classList.contains('opened')) { - dropdownToggle.classList.remove('opened'); - dropdownMenu.classList.remove('opened'); - } else { - dropdownToggle.classList.add('opened'); - dropdownMenu.classList.add('opened'); + const setOpened = function (opened) { + dropdownToggle.classList.toggle('opened', opened); + dropdownMenu.classList.toggle('opened', opened); + dropdownToggle.setAttribute('aria-expanded', String(opened)); + }; + dropdownToggle.addEventListener('click', function () { + setOpened(!dropdownToggle.classList.contains('opened')); + }); + versionDropdownWrapper.addEventListener('keydown', function (event) { + if (event.key === 'Escape' && dropdownToggle.classList.contains('opened')) { + setOpened(false); + dropdownToggle.focus(); + } + }); + document.addEventListener('click', function (event) { + if (!versionDropdownWrapper.contains(event.target)) { + setOpened(false); } }); }); -})() \ No newline at end of file +})() diff --git a/content/supplemental/js/theme-menu.js b/content/supplemental/js/theme-menu.js new file mode 100644 index 00000000..fcb73c52 --- /dev/null +++ b/content/supplemental/js/theme-menu.js @@ -0,0 +1,146 @@ +// The color theme menu in the header: System, Light or Dark. The inline script in partials/head-styles.hbs sets +// data-theme and data-theme-preference on before the stylesheets load; this script keeps them up to date, +// saves the choice, follows the system setting while System is chosen, and follows choices made in other tabs. +// The menu follows the WAI-ARIA menu button pattern with menuitemradio items. +(function () { + const KEY = 'jmix-docs-theme'; + const LABELS = { system: 'Системная', light: 'Светлая', dark: 'Тёмная' }; + const root = document.documentElement; + const menu = document.querySelector('.theme-menu'); + if (!menu) return; + const toggle = menu.querySelector('.theme-menu-toggle'); + const list = menu.querySelector('.theme-menu-list'); + const items = Array.from(list.querySelectorAll('.theme-menu-item')); + const system = window.matchMedia('(prefers-color-scheme: dark)'); + + // the stored preference, or null when storage is blocked + const read = function () { + try { + const value = localStorage.getItem(KEY); + return value === 'light' || value === 'dark' ? value : 'system'; + } catch (e) { + return null; + } + }; + const save = function (preference) { + try { + if (preference === 'system') localStorage.removeItem(KEY); + else localStorage.setItem(KEY, preference); + } catch (e) { + // storage is blocked: the choice holds for this page only + } + }; + + let preference = LABELS[root.getAttribute('data-theme-preference')] ? root.getAttribute('data-theme-preference') : read() || 'system'; + + // every path goes through here: a choice, the system setting, another tab, a page restored from the cache + const apply = function (next) { + preference = next; + const dark = next === 'dark' || (next === 'system' && system.matches); + root.setAttribute('data-theme', dark ? 'dark' : 'light'); + root.setAttribute('data-theme-preference', next); + const meta = document.querySelector('meta[name="color-scheme"]'); + if (meta) meta.content = dark ? 'dark' : 'light'; + const label = 'Тема: ' + LABELS[next]; + toggle.setAttribute('aria-label', label); + toggle.setAttribute('title', label); + items.forEach(function (item) { + item.setAttribute('aria-checked', String(item.dataset.themeOption === next)); + }); + }; + + const isOpen = function () { + return list.classList.contains('opened'); + }; + const open = function () { + list.classList.add('opened'); + toggle.setAttribute('aria-expanded', 'true'); + const checked = items.find(function (item) { + return item.dataset.themeOption === preference; + }); + (checked || items[0]).focus(); + }; + const close = function (returnFocus) { + list.classList.remove('opened'); + toggle.setAttribute('aria-expanded', 'false'); + if (returnFocus) toggle.focus(); + }; + + // Alt, Ctrl and Meta shortcuts are the browser's. Shift is not one of them, since Shift+Tab leaves the menu. + const hasModifier = function (event) { + return event.altKey || event.ctrlKey || event.metaKey; + }; + + // Enter and Space reach the buttons as clicks + toggle.addEventListener('click', function () { + if (isOpen()) close(false); + else open(); + }); + toggle.addEventListener('keydown', function (event) { + if (hasModifier(event)) return; + if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { + event.preventDefault(); + open(); + } + }); + items.forEach(function (item) { + item.addEventListener('click', function () { + apply(item.dataset.themeOption); + save(preference); + close(true); + }); + }); + // a press on the panel's padding would move focus to the page, where the arrows and Escape do nothing + list.addEventListener('mousedown', function (event) { + if (!event.target.closest('.theme-menu-item')) event.preventDefault(); + }); + list.addEventListener('keydown', function (event) { + if (hasModifier(event)) return; + // Tab and Shift+Tab close the menu; focus then moves on from the hidden item. Shift+Tab lands on the button, + // which is inside the menu element, so the focusin listener below would not close the menu. + if (event.key === 'Tab') { + close(false); + return; + } + const index = items.indexOf(document.activeElement); + const target = { + ArrowDown: (index + 1) % items.length, + ArrowUp: (index - 1 + items.length) % items.length, + Home: 0, + End: items.length - 1, + }[event.key]; + if (target !== undefined) { + event.preventDefault(); + items[target].focus(); + } + }); + menu.addEventListener('keydown', function (event) { + if (event.key === 'Escape' && isOpen()) { + event.preventDefault(); + close(true); + } + }); + // focus moving elsewhere (the / shortcut) or a click elsewhere closes the menu. Not focusout: Safari does + // not focus a clicked button, so focus leaves the menu on mousedown and the click would never reach the item. + document.addEventListener('focusin', function (event) { + if (isOpen() && !menu.contains(event.target)) close(false); + }); + // capture phase: site.js stops clicks in the navigation, on the burger and on the toolbar's nav toggle from bubbling + document.addEventListener('click', function (event) { + if (isOpen() && !menu.contains(event.target)) close(false); + }, true); + + system.addEventListener('change', function () { + if (preference === 'system') apply('system'); + }); + // other tabs write the key; this tab does not get its own storage events. key null means localStorage.clear(). + window.addEventListener('storage', function (event) { + if (event.key === KEY || event.key === null) apply(read() || preference); + }); + // a page restored from the back/forward cache missed the storage events of the meantime + window.addEventListener('pageshow', function (event) { + if (event.persisted) apply(read() || preference); + }); + + apply(preference); +})(); diff --git a/content/supplemental/partials/footer-content.hbs b/content/supplemental/partials/footer-content.hbs new file mode 100644 index 00000000..4b94af8f --- /dev/null +++ b/content/supplemental/partials/footer-content.hbs @@ -0,0 +1,7 @@ +{{! This Source Code Form is subject to the terms of the Mozilla Public }} +{{! License, v. 2.0. If a copy of the MPL was not distributed with this }} +{{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }} +

diff --git a/content/supplemental/partials/footer-scripts.hbs b/content/supplemental/partials/footer-scripts.hbs index 9fc1360c..596391b4 100644 --- a/content/supplemental/partials/footer-scripts.hbs +++ b/content/supplemental/partials/footer-scripts.hbs @@ -10,22 +10,23 @@ - + + + + - diff --git a/content/supplemental/partials/head-meta.hbs b/content/supplemental/partials/head-meta.hbs index 3794072e..284cfbc9 100644 --- a/content/supplemental/partials/head-meta.hbs +++ b/content/supplemental/partials/head-meta.hbs @@ -1,8 +1,5 @@ {{! This Source Code Form is subject to the terms of the Mozilla Public }} {{! License, v. 2.0. If a copy of the MPL was not distributed with this }} {{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }} - - - - \ No newline at end of file + diff --git a/content/supplemental/partials/head-scripts.hbs b/content/supplemental/partials/head-scripts.hbs index e16388ea..2a9e89ef 100644 --- a/content/supplemental/partials/head-scripts.hbs +++ b/content/supplemental/partials/head-scripts.hbs @@ -1,3 +1,6 @@ +{{! This Source Code Form is subject to the terms of the Mozilla Public }} +{{! License, v. 2.0. If a copy of the MPL was not distributed with this }} +{{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }} + + + + diff --git a/content/supplemental/partials/header-content.hbs b/content/supplemental/partials/header-content.hbs index 73320bc2..01247024 100644 --- a/content/supplemental/partials/header-content.hbs +++ b/content/supplemental/partials/header-content.hbs @@ -1,28 +1,19 @@ {{! This Source Code Form is subject to the terms of the Mozilla Public }} {{! License, v. 2.0. If a copy of the MPL was not distributed with this }} {{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }} +
diff --git a/content/supplemental/partials/main.hbs b/content/supplemental/partials/main.hbs new file mode 100644 index 00000000..f5536519 --- /dev/null +++ b/content/supplemental/partials/main.hbs @@ -0,0 +1,14 @@ +{{! This Source Code Form is subject to the terms of the Mozilla Public }} +{{! License, v. 2.0. If a copy of the MPL was not distributed with this }} +{{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }} +
+{{> toolbar}} +
+{{#if (eq page.layout '404')}} +{{> article-404}} +{{else}} +{{> toc}} +{{> article}} +{{/if}} +
+
diff --git a/content/supplemental/partials/nav-explore.hbs b/content/supplemental/partials/nav-explore.hbs index eec54dfe..166cf02e 100644 --- a/content/supplemental/partials/nav-explore.hbs +++ b/content/supplemental/partials/nav-explore.hbs @@ -1,9 +1,12 @@ +{{! This Source Code Form is subject to the terms of the Mozilla Public }} +{{! License, v. 2.0. If a copy of the MPL was not distributed with this }} +{{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }}